142 lines
4.4 KiB
YAML
142 lines
4.4 KiB
YAML
name: Tests and Checks
|
|
|
|
# Only run CI on pushes to main and pull requests
|
|
# We don't run CI on other branches, but those should be merged into main via a PR anyways which will trigger CI before the merge.
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
|
|
concurrency:
|
|
group: ci-${{ github.ref }}-1
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
checks:
|
|
runs-on: "ubuntu-latest"
|
|
strategy:
|
|
matrix:
|
|
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11", pypy-3.9]
|
|
os: ["macos-latest", "ubuntu-latest", "windows-latest"]
|
|
steps:
|
|
- uses: actions/checkout@v3.3.0
|
|
with:
|
|
ref: ${{ github.event.pull_request.head.sha }} # Checkout pull request HEAD commit instead of merge commit
|
|
fetch-depth: 0 # checkout all history, needed for hatch versioning
|
|
|
|
- name: Setup python
|
|
uses: actions/setup-python@v4.5.0
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
|
|
- name: Install pypa/build
|
|
run: python -m pip install build==0.10.0
|
|
|
|
- name: Install Hatch
|
|
run: python -m pip install hatch==1.6.3
|
|
|
|
- name: Unit Tests
|
|
run: hatch run test:unit-tests
|
|
|
|
- name: Code formatting (black)
|
|
run: hatch run test:format
|
|
|
|
- name: Code linting (ruff)
|
|
run: hatch run test:lint
|
|
|
|
- name: Install local gitlint for integration tests
|
|
run: |
|
|
hatch run qa:install-local
|
|
|
|
- name: Integration tests (default -> GITLINT_USE_SH_LIB=1)
|
|
run: |
|
|
hatch run qa:integration-tests
|
|
if: matrix.os != 'windows-latest'
|
|
|
|
- name: Integration tests (GITLINT_USE_SH_LIB=1)
|
|
run: |
|
|
hatch run qa:integration-tests
|
|
env:
|
|
GITLINT_USE_SH_LIB: 1
|
|
if: matrix.os != 'windows-latest'
|
|
|
|
- name: Integration tests (GITLINT_QA_USE_SH_LIB=0)
|
|
run: |
|
|
hatch run qa:integration-tests -k "not(test_commit_hook_continue or test_commit_hook_abort or test_commit_hook_edit)" qa
|
|
env:
|
|
GITLINT_QA_USE_SH_LIB: 0
|
|
if: matrix.os != 'windows-latest'
|
|
|
|
- name: Integration tests (Windows)
|
|
run: |
|
|
hatch run qa:integration-tests -k "not (test_commit_hook_continue or test_commit_hook_abort or test_commit_hook_edit or test_lint_staged_stdin or test_stdin_file or test_stdin_pipe_empty)" qa
|
|
if: matrix.os == 'windows-latest'
|
|
|
|
- name: Build test (gitlint)
|
|
run: |
|
|
python -m build
|
|
hatch clean
|
|
|
|
- name: Build test (gitlint-core)
|
|
run: |
|
|
python -m build
|
|
hatch clean
|
|
working-directory: ./gitlint-core
|
|
|
|
- name: Docs build (mkdocs)
|
|
run: hatch run docs:build
|
|
|
|
# Run gitlint. Skip during PR runs, since PR commit messages are transient and usually full of gitlint violations.
|
|
# PRs get squashed and get a proper commit message during merge.
|
|
- name: gitlint --debug
|
|
run: hatch run dev:gitlint --debug
|
|
continue-on-error: ${{ github.event_name == 'pull_request' }} # Don't enforce gitlint in PRs
|
|
|
|
- name: Code Coverage (coveralls)
|
|
uses: coverallsapp/github-action@master
|
|
with:
|
|
path-to-lcov: ".coverage.lcov"
|
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
git-commit: ${{ github.event.pull_request.head.sha }}
|
|
flag-name: gitlint-${{ matrix.os }}-${{ matrix.python-version }}
|
|
parallel: true
|
|
|
|
upload_coveralls:
|
|
needs: checks
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Upload coverage to coveralls
|
|
uses: coverallsapp/github-action@master
|
|
with:
|
|
path-to-lcov: ".coverage.lcov"
|
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
parallel-finished: true
|
|
|
|
check: # This job does nothing and is only used for the branch protection
|
|
if: always() # Ref: https://github.com/marketplace/actions/alls-green#why
|
|
|
|
needs:
|
|
- upload_coveralls
|
|
- checks
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Decide whether the needed jobs succeeded or failed
|
|
uses: re-actors/alls-green@release/v1
|
|
with:
|
|
jobs: ${{ toJSON(needs) }}
|
|
|
|
# When on main, auto publish dev build
|
|
auto-publish-dev:
|
|
needs:
|
|
- check
|
|
if: github.ref == 'refs/heads/main'
|
|
uses: ./.github/workflows/publish-release.yml
|
|
secrets: inherit # pass all secrets (required to access secrets in a called workflow)
|
|
with:
|
|
pypi_target: "pypi.org"
|
|
repo_release_ref: "main"
|