Skip to content

Continuous integration with Actions#

File Structure
.github/
└── workflows/
    └── ci.yaml
src/
tests/
ci.yaml
name: CI

on:
  push:
    branches:
      - main
    tags:
      - "v*"
  pull_request:
  workflow_dispatch:
  schedule:
    # run every week (for --pre release tests)
    - cron: "0 0 * * 0"

jobs:
  check-manifest:
    # check-manifest is a tool that checks that all files in version control are
    # included in the sdist (unless explicitly excluded)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - run: pipx run check-manifest

  test:
    name: ${{ matrix.platform }} (${{ matrix.python-version }})
    runs-on: ${{ matrix.platform }}
    strategy:
      fail-fast: false
      matrix:
        python-version: ["3.8", "3.9", "3.10", "3.11"]
        platform: [ubuntu-latest, macos-latest, windows-latest]

    steps:
      - name: 🛑 Cancel Previous Runs
        uses: styfle/cancel-workflow-action@0.11.0
        with:
          access_token: ${{ github.token }}

      - uses: actions/checkout@v3

      - name: 🐍 Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.python-version }}
          cache-dependency-path: "pyproject.toml"
          cache: "pip"

      - name: Install pip
        run: |
          python -m pip install -U pip

      # if running a cron job, we add the --pre flag to
      # test against pre-releases
      - name: Install Dependencies
        run: >
          python -m pip install .[test]
          ${{ github.event_name == 'schedule' && '--pre' || ''  }}

      - name: 🧪 Run Tests
        run: pytest --color=yes --cov --cov-report=xml --cov-report=term-missing

      # If something goes wrong with --pre tests,
      # we can open an issue in the repo
      - name: 📝 Report --pre Failures
        if: failure() && github.event_name == 'schedule'
        uses: JasonEtco/create-an-issue@v2
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          PLATFORM: ${{ matrix.platform }}
          PYTHON: ${{ matrix.python-version }}
          RUN_ID: ${{ github.run_id }}
          TITLE: "[test-bot] pip install --pre is failing"
        with:
          filename: .github/TEST_FAIL_TEMPLATE.md
          update_existing: true

      - name: Coverage
        uses: codecov/codecov-action@v3

updated: 2023-04-20 created: 2023-04-20