From f40bba47d420124eb26f01d91ea7aebac72bb14f Mon Sep 17 00:00:00 2001 From: Kai Schlamp Date: Fri, 14 Jun 2024 21:22:58 +0000 Subject: [PATCH] Setup CI with GitHub Actions --- .github/workflows/ci.yml | 45 ++++++++++++++++++++++++++++++++++++++++ tasks.py | 14 +++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..ee580c2 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,45 @@ +name: CI +on: + push: + branches: [main] + pull_request: + branches: [main] +jobs: + ci: + strategy: + fail-fast: false + matrix: + python-version: ["3.12"] + poetry-version: ["1.8.2"] + os: [ubuntu-latest] + runs-on: ${{ matrix.os }} + timeout-minutes: 15 + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + - name: Set up Poetry + uses: abatilo/actions-poetry@v2 + with: + poetry-version: ${{ matrix.poetry-version }} + - name: Install dependencies + run: poetry install --with dev + - name: Configure environment + run: poetry run invoke init-workspace + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Start PostgreSQL container + run: docker compose up -d + - name: Run linting + # https://github.com/actions/runner/issues/241#issuecomment-745902718 + shell: 'script -q -e -c "bash {0}"' + run: poetry run invoke lint + - name: Run tests + shell: 'script -q -e -c "bash {0}"' + run: poetry run invoke test --cov + - name: Stop PostgreSQL container + if: ${{ always() }} + run: docker compose down --remove-orphans --volumes diff --git a/tasks.py b/tasks.py index d1d4236..1a38216 100644 --- a/tasks.py +++ b/tasks.py @@ -85,6 +85,20 @@ def ci(ctx: Context): test(ctx, cov=True) +@task +def try_github_actions(ctx: Context): + """Try Github Actions locally using Act""" + act_path = project_dir / "bin" / "act" + if not act_path.exists(): + print("Installing act...") + ctx.run( + "curl https://raw.githubusercontent.com/nektos/act/master/install.sh | sudo bash", + hide=True, + pty=True, + ) + ctx.run(f"{act_path} -P ubuntu-latest=catthehacker/ubuntu:act-latest", pty=True) + + @task def bump_version(ctx: Context, rule: Literal["patch", "minor", "major"]): """Bump version, create a tag, commit and push to GitHub"""