Skip to content

Commit

Permalink
Merge pull request #365 from engineervix/tooling-ehancements
Browse files Browse the repository at this point in the history
Tooling ehancements
  • Loading branch information
engineervix authored Sep 1, 2024
2 parents 19decb1 + 2038729 commit c48e528
Show file tree
Hide file tree
Showing 32 changed files with 11,161 additions and 804 deletions.
170 changes: 0 additions & 170 deletions .circleci/config.yml

This file was deleted.

202 changes: 202 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,202 @@
name: Continuous Integration

# Enable Buildkit and let compose use it to speed up image building
env:
DOCKER_BUILDKIT: 1
COMPOSE_DOCKER_CLI_BUILD: 1
POETRY_VERSION: 1.8.3 # Make sure this matches the Dockerfile

on:
pull_request:
branches:
- master
push:
branches:
- master
tags:
- "v*"

jobs:
lint:
runs-on: ubuntu-22.04

steps:
- name: Checkout Code Repository
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"

- id: poetry-cache
uses: actions/cache@v4
with:
path: .venv
key: ${{ runner.os }}-poetry-${{ hashFiles('**/poetry.lock') }}

- if: steps.poetry-cache.outputs.cache-hit != 'true'
name: Install Poetry and Dependencies
shell: bash
run: |
pip install --upgrade pip
pip install poetry==$POETRY_VERSION
python -m venv .venv
source .venv/bin/activate
poetry install --with dev,test
- name: ruff
shell: bash
run: |
source .venv/bin/activate
ruff check . --output-format=github
- name: Black
shell: bash
run: |
source .venv/bin/activate
black . --check
test:
runs-on: ubuntu-22.04
needs: [lint]
container:
image: python:3.12-slim-bookworm

env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
FLASK_CONFIGURATION: development
FLASK_ENV: development
TENLISTS_SECRET_KEY_DEV: fake
MAIL_SERVER_DEV: smtp.mailtrap.io
MAIL_PORT_DEV: 2525
TENLISTS_EMAIL_USER_DEV: ''
TENLISTS_EMAIL_PWD_DEV: ''
MAIL_USE_TLS: True
MAIL_USE_SSL: False
TENLISTS_MP3_CLOUD_STORAGE_BASE_URL: https://example.com/path/to/folder
TENLISTS_API_BASE: http://localhost:8000/ten-lists/api/v1.0/mp3s

steps:
- name: Checkout source code
uses: actions/checkout@v4

- name: System Dependencies
shell: bash
run: |
apt-get update --yes --quiet
apt-get install --yes --quiet --no-install-recommends build-essential curl ffmpeg git
curl -fsSL https://deb.nodesource.com/setup_16.x | bash -
apt-get install -y nodejs
npm install -g grunt-cli
npm ci --cache .npm --prefer-offline
grunt all
- name: Install Python dependencies & testing tools
shell: bash
run: |
pip install --upgrade pip
python -m pip install poetry==1.8.3
poetry install --with dev,test
curl https://deepsource.io/cli | sh
- name: Create .env file to simulate a development setup
shell: bash
run: |
mkdir -p env/
touch env/.dev.env
echo "TENLISTS_SECRET_KEY_DEV='fake'" >> env/.dev.env
echo "MAIL_SERVER_DEV=smtp.mailtrap.io" >> env/.dev.env
echo "MAIL_PORT_DEV=2525" >> env/.dev.env
echo "TENLISTS_EMAIL_USER_DEV=" >> env/.dev.env
echo "TENLISTS_EMAIL_PWD_DEV=" >> env/.dev.env
echo "MAIL_USE_TLS=True" >> env/.dev.env
echo "MAIL_USE_SSL=False" >> env/.dev.env
echo "TENLISTS_MP3_CLOUD_STORAGE_BASE_URL=https://example.com/path/to/folder" >> env/.dev.env
echo "TENLISTS_API_BASE=http://localhost:8000/ten-lists/api/v1.0/mp3s" >> env/.dev.env
- name: Run tests
run: |
poetry run pytest
- name: DeepSource
uses: deepsourcelabs/test-coverage-action@master
with:
key: python
coverage-file: coverage.xml
dsn: ${{ secrets.DEEPSOURCE_DSN }}

- name: Coveralls
uses: coverallsapp/github-action@v2
with:
github-token: ${{ github.token }}

- name: Codacy Coverage Reporter
uses: codacy/[email protected]
with:
project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
# or
# api-token: ${{ secrets.CODACY_API_TOKEN }}
coverage-reports: coverage.xml

# Creates a GitHub Release when the lint & test jobs succeeds, and only on pushes to tags.
release:
needs: [lint, test]

permissions:
contents: write

if: needs.test.result == 'success' && startsWith( github.ref, 'refs/tags/v' )

runs-on: ubuntu-22.04

steps:
- name: Check out the repo
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"

- id: poetry-cache
uses: actions/cache@v4
with:
path: .venv
key: ${{ runner.os }}-poetry-${{ hashFiles('**/poetry.lock') }}

- if: steps.poetry-cache.outputs.cache-hit != 'true'
name: Install Poetry and Dependencies
shell: bash
run: |
pip install --upgrade pip
pip install poetry==$POETRY_VERSION
python -m venv .venv
source .venv/bin/activate
poetry install --with dev,test
- name: Get the version
id: get_version
run: |
echo "${{ github.ref }}"
echo "VERSION=$(echo $GITHUB_REF | sed 's/refs\/tags\///')" >> $GITHUB_ENV
- name: Generate Release Title
id: get_release_title
shell: bash
run: |
export TODAY="($(TZ=Africa/Lusaka date --iso))"
echo "RELEASE_NAME=$VERSION $TODAY" >> $GITHUB_ENV
- name: Extract Release Notes
# This creates a file LATEST_RELEASE_NOTES.md in the parent directory (../)
shell: bash
run: |
source .venv/bin/activate
invoke get-release-notes
- name: GitHub Release
uses: softprops/action-gh-release@v1
with:
name: ${{ env.RELEASE_NAME }}
body_path: ../LATEST_RELEASE_NOTES.md
Loading

0 comments on commit c48e528

Please sign in to comment.