From 210908599656a61c8ad0a7f72ddace30062dc6b2 Mon Sep 17 00:00:00 2001 From: getzze Date: Fri, 7 Jun 2024 23:33:32 +0100 Subject: [PATCH 1/4] add github actions --- .github/workflows/check.yaml | 62 ++++++++++++++++++++++++++++++++ .github/workflows/run-tests.yaml | 59 ++++++++++++++++++++++++++++++ 2 files changed, 121 insertions(+) create mode 100644 .github/workflows/check.yaml create mode 100644 .github/workflows/run-tests.yaml diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml new file mode 100644 index 00000000..e8bb4e48 --- /dev/null +++ b/.github/workflows/check.yaml @@ -0,0 +1,62 @@ +name: CI-Lint + +on: + push: + branches: [main] + pull_request: {} + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + check-manifest: + if: github.event_name != 'schedule' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: pipx run check-manifest + + pre-commit: + if: github.event_name != 'schedule' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: "3.x" + - uses: pre-commit/action@v3.0.1 + + typing: + if: github.event_name != 'schedule' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: "3.x" + - name: install + run: | + python -m pip install -U pip + python -m pip install -e ".[test]" + - name: type-check + run: | + mypy --install-types --non-interactive --config-file pyproject.toml subliminal tests + + docs: + if: github.event_name != 'schedule' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: "3.x" + - run: | + python -m venv venv + source ./venv/bin/activate + python -m pip install -e .[docs] + sphinx-build -b html docs/ docs/_build + - uses: actions/upload-artifact@v4 + with: + name: docs + path: docs/_build/ diff --git a/.github/workflows/run-tests.yaml b/.github/workflows/run-tests.yaml new file mode 100644 index 00000000..7db67b36 --- /dev/null +++ b/.github/workflows/run-tests.yaml @@ -0,0 +1,59 @@ +name: CI-Test + +on: + push: + branches: [main] + pull_request: {} + schedule: + - cron: "12 12 12 * *" # run once a month on the 12th at 12:12 + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + test: + name: Test + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] + exclude: + # macos-latest only work with arm64 + - os: macos-latest + python-version: ["3.8", "3.9"] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + cache: 'pip' + - name: install + run: | + python -m pip install --upgrade pip + pip install -e .[test] + - name: run pytest --cov + run: | + set -e + pytest --cov=./ --cov-report=xml + : .coverage confuses coveralls, remove it + rm -f .coverage + - name: upload coverage data to coveralls + uses: coverallsapp/github-action@v2.2.3 + with: + parallel: true + flag-name: python-${{ matrix.python-version }} + github-token: ${{ secrets.GITHUB_TOKEN }} + - name: upload coverage data to codecov + uses: codecov/codecov-action@v4.1.0 + with: + fail_ci_if_error: true + coveralls-finish: + needs: test + runs-on: ubuntu-latest + steps: + - uses: coverallsapp/github-action@v2.2.3 + with: + parallel-finished: true From 2665cb2b9de1ae86bfabff989a9442c49ef8bf4e Mon Sep 17 00:00:00 2001 From: getzze Date: Wed, 12 Jun 2024 23:52:16 +0100 Subject: [PATCH 2/4] add monthly API tests with new cassettes --- .github/workflows/run-tests.yaml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/.github/workflows/run-tests.yaml b/.github/workflows/run-tests.yaml index 7db67b36..191d0524 100644 --- a/.github/workflows/run-tests.yaml +++ b/.github/workflows/run-tests.yaml @@ -14,6 +14,7 @@ concurrency: jobs: test: name: Test + if: github.event_name != 'schedule' runs-on: ${{ matrix.os }} strategy: fail-fast: false @@ -52,8 +53,29 @@ jobs: fail_ci_if_error: true coveralls-finish: needs: test + if: github.event_name != 'schedule' runs-on: ubuntu-latest steps: - uses: coverallsapp/github-action@v2.2.3 with: parallel-finished: true + + test-api: + name: Test API + if: github.event_name == 'schedule' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: "3.x" + - name: install + run: | + python -m pip install -U pip + python -m pip install -e ".[test]" + - name: remove cassettes + run: | + rm -rf tests/cassettes + - name: run test + run: | + pytest From 0bd08324386ab1868b6e6a68c527a374b3442233 Mon Sep 17 00:00:00 2001 From: getzze Date: Thu, 13 Jun 2024 00:17:36 +0100 Subject: [PATCH 3/4] separate tests --- .github/workflows/check.yaml | 51 ++++++++++++++++++++++++++++- .github/workflows/run-tests.yaml | 55 ++------------------------------ 2 files changed, 52 insertions(+), 54 deletions(-) diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml index e8bb4e48..ea91bad5 100644 --- a/.github/workflows/check.yaml +++ b/.github/workflows/check.yaml @@ -1,4 +1,4 @@ -name: CI-Lint +name: CI on: push: @@ -60,3 +60,52 @@ jobs: with: name: docs path: docs/_build/ + + test: + name: Test + if: github.event_name != 'schedule' + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] + exclude: + # macos-latest only work with arm64 + - os: macos-latest + python-version: ["3.8", "3.9"] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + cache: 'pip' + - name: install + run: | + python -m pip install --upgrade pip + pip install -e .[test] + - name: run pytest --cov + run: | + set -e + pytest --cov=./ --cov-report=xml + : .coverage confuses coveralls, remove it + rm -f .coverage + - name: upload coverage data to coveralls + uses: coverallsapp/github-action@v2.2.3 + with: + parallel: true + flag-name: python-${{ matrix.python-version }} + github-token: ${{ secrets.GITHUB_TOKEN }} + - name: upload coverage data to codecov + uses: codecov/codecov-action@v4.1.0 + with: + fail_ci_if_error: true + + coveralls-finish: + needs: test + if: github.event_name != 'schedule' + runs-on: ubuntu-latest + steps: + - uses: coverallsapp/github-action@v2.2.3 + with: + parallel-finished: true diff --git a/.github/workflows/run-tests.yaml b/.github/workflows/run-tests.yaml index 191d0524..fc7370e1 100644 --- a/.github/workflows/run-tests.yaml +++ b/.github/workflows/run-tests.yaml @@ -1,9 +1,6 @@ -name: CI-Test +name: Test-APIs on: - push: - branches: [main] - pull_request: {} schedule: - cron: "12 12 12 * *" # run once a month on the 12th at 12:12 @@ -12,56 +9,8 @@ concurrency: cancel-in-progress: true jobs: - test: - name: Test - if: github.event_name != 'schedule' - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest, macos-latest, windows-latest] - python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] - exclude: - # macos-latest only work with arm64 - - os: macos-latest - python-version: ["3.8", "3.9"] - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - cache: 'pip' - - name: install - run: | - python -m pip install --upgrade pip - pip install -e .[test] - - name: run pytest --cov - run: | - set -e - pytest --cov=./ --cov-report=xml - : .coverage confuses coveralls, remove it - rm -f .coverage - - name: upload coverage data to coveralls - uses: coverallsapp/github-action@v2.2.3 - with: - parallel: true - flag-name: python-${{ matrix.python-version }} - github-token: ${{ secrets.GITHUB_TOKEN }} - - name: upload coverage data to codecov - uses: codecov/codecov-action@v4.1.0 - with: - fail_ci_if_error: true - coveralls-finish: - needs: test - if: github.event_name != 'schedule' - runs-on: ubuntu-latest - steps: - - uses: coverallsapp/github-action@v2.2.3 - with: - parallel-finished: true - test-api: - name: Test API + name: Test APIs if: github.event_name == 'schedule' runs-on: ubuntu-latest steps: From e2e1a8aaac689891e53da0ffd02fc5d348809150 Mon Sep 17 00:00:00 2001 From: getzze Date: Mon, 17 Jun 2024 12:21:15 +0100 Subject: [PATCH 4/4] update coverage action --- .github/workflows/check.yaml | 55 ++++++++++++++++++++++----------- .github/workflows/coverage.yaml | 35 +++++++++++++++++++++ 2 files changed, 72 insertions(+), 18 deletions(-) create mode 100644 .github/workflows/coverage.yaml diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml index ea91bad5..2f3376ca 100644 --- a/.github/workflows/check.yaml +++ b/.github/workflows/check.yaml @@ -85,27 +85,46 @@ jobs: python -m pip install --upgrade pip pip install -e .[test] - name: run pytest --cov + env: + COVERAGE_FILE: ".coverage.${{ matrix.os }}.${{ matrix.python-version }}" + # Alternatively you can run coverage with the --parallel flag or add + # `parallel = True` in the coverage config file. + # If using pytest-cov, you can also add the `--cov-append` flag + # directly or through PYTEST_ADD_OPTS. run: | - set -e - pytest --cov=./ --cov-report=xml - : .coverage confuses coveralls, remove it - rm -f .coverage - - name: upload coverage data to coveralls - uses: coverallsapp/github-action@v2.2.3 + pytest --cov --cov-report=xml + - name: Store coverage file + uses: actions/upload-artifact@v4 with: - parallel: true - flag-name: python-${{ matrix.python-version }} - github-token: ${{ secrets.GITHUB_TOKEN }} - - name: upload coverage data to codecov - uses: codecov/codecov-action@v4.1.0 - with: - fail_ci_if_error: true + name: coverage-${{ matrix.os }}-${{ matrix.python-version }} + path: .coverage.${{ matrix.os }}.${{ matrix.python-version }} - coveralls-finish: - needs: test - if: github.event_name != 'schedule' + coverage: + name: Coverage runs-on: ubuntu-latest + needs: test + permissions: + pull-requests: write + contents: write steps: - - uses: coverallsapp/github-action@v2.2.3 + - uses: actions/checkout@v4 + + - uses: actions/download-artifact@v4 + id: download + with: + pattern: coverage-* + merge-multiple: true + + - name: Coverage comment + id: coverage_comment + uses: py-cov-action/python-coverage-comment-action@v3 + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + MERGE_COVERAGE_FILES: true + + - name: Store Pull Request comment to be posted + uses: actions/upload-artifact@v4 + if: steps.coverage_comment.outputs.COMMENT_FILE_WRITTEN == 'true' with: - parallel-finished: true + name: python-coverage-comment-action + path: python-coverage-comment-action.txt diff --git a/.github/workflows/coverage.yaml b/.github/workflows/coverage.yaml new file mode 100644 index 00000000..42c8a279 --- /dev/null +++ b/.github/workflows/coverage.yaml @@ -0,0 +1,35 @@ +name: Post coverage comment + +on: + workflow_run: + workflows: ["CI"] + types: + - completed + +jobs: + test: + name: Run tests & display coverage + runs-on: ubuntu-latest + if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success' + permissions: + # Gives the action the necessary permissions for publishing new + # comments in pull requests. + pull-requests: write + # Gives the action the necessary permissions for editing existing + # comments (to avoid publishing multiple comments in the same PR) + contents: write + # Gives the action the necessary permissions for looking up the + # workflow that launched this workflow, and download the related + # artifact that contains the comment to be published + actions: read + steps: + # DO NOT run actions/checkout here, for security reasons + # For details, refer to https://securitylab.github.com/research/github-actions-preventing-pwn-requests/ + - name: Post comment + uses: py-cov-action/python-coverage-comment-action@v3 + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_PR_RUN_ID: ${{ github.event.workflow_run.id }} + # Update those if you changed the default values: + # COMMENT_ARTIFACT_NAME: python-coverage-comment-action + # COMMENT_FILENAME: python-coverage-comment-action.txt