Skip to content

Commit

Permalink
First attempt at CI workflow
Browse files Browse the repository at this point in the history
  • Loading branch information
Matthew Trudeau committed Dec 3, 2024
1 parent e967889 commit bae5ce6
Show file tree
Hide file tree
Showing 2 changed files with 155 additions and 0 deletions.
84 changes: 84 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
name: Cache Build

on:
workflow_call:
inputs:
command:
required: true
type: string
name:
required: true
type: string

jobs:
reusable-build:
name: ${{ inputs.name }}
runs-on: ubuntu-latest
steps:

#------------------------------------------------
# check-out repo and set-up python
#------------------------------------------------
- name: Check out repository
uses: actions/checkout@v4
- name: Set up python
uses: actions/setup-python@v5
with:
python-version: '3.11'

#------------------------------------------------
# ----- install & configure poetry -----
#------------------------------------------------
- name: Load cached Poetry installation
id: cached-poetry
uses: actions/cache@v4
with:
path: ~/.local # the path depends on the OS
key: poetry-0 # increment to reset cache

- name: Install Poetry
if: steps.cached-poetry.outputs.cache-hit != 'true'
uses: snok/install-poetry@v1
with:
version: latest
virtualenvs-create: true
virtualenvs-in-project: true
virtualenvs-path: .venv
installer-parallel: true

# If cache was loaded, we must redo configuration
- name: Configure poetry
if: steps.cached-poetry.outputs.cache-hit == 'true'
run: |
poetry config virtualenvs.create true
poetry config virtualenvs.in-project true
poetry config virtualenvs.path .venv
#------------------------------------------------
# Load cached venv if exists
#------------------------------------------------
- name: Load cached venv
id: cached-poetry-dependencies
uses: actions/cache@v4
with:
path: .venv
key: venv-${{ runner.os }}-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('**/poetry.lock') }}

#------------------------------------------------
# Install dependencies if cache does not exist
#------------------------------------------------
- name: Install dependencies
if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
run: poetry install --no-interaction --no-root

#------------------------------------------------
# Install your root project
#------------------------------------------------
- name: Install project
run: poetry install --no-interaction

#------------------------------------------------
# Run custom command(s) within venv
#------------------------------------------------
- name: Run commands
run: ${{ inputs.command }}
71 changes: 71 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
name: CI

on:
pull_request:
push:
branches: [master, staging, dev]

jobs:
#----------------------------------------------
# Build Environment
#----------------------------------------------
build:
name: Build
uses: ./.github/workflows/build.yml
with:
name: Cache
command: |
poetry run python -m pip list
poetry run python --version
poetry --version
poetry run echo "Build successful"
#----------------------------------------------
# Run Linters
#----------------------------------------------
lint-black:
name: Linter
needs: build
uses: ./.github/workflows/build.yml
with:
name: Black
command: poetry run python -m black --check .
lint-isort:
name: Linter
needs: build
uses: ./.github/workflows/build.yml
with:
name: Isort
command: poetry run python -m isort --check-only .
lint-mypy:
name: Linter
needs: build
if: false # This condition ensures the job is never executed
uses: ./.github/workflows/build.yml
with:
name: Mypy
command: poetry run python -m mypy --verbose 0 .
lint-flake8:
name: Linter
needs: build
uses: ./.github/workflows/build.yml
with:
name: Flake8
command: poetry run python -m flake8 .

#----------------------------------------------
# Run Tests
#----------------------------------------------
test-unittest:
name: Tests
needs: [
lint-black,
lint-isort,
lint-mypy,
lint-flake8,
]
if: ${{ always() }} # will run the tests regardless of linting success
uses: ./.github/workflows/build.yml
with:
name: Unittests
command: poetry run pytest tests/

0 comments on commit bae5ce6

Please sign in to comment.