GHA: auto-publish dev docs on commit to main #113
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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.6.1 | |
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: Static type checking (mypy) | |
run: hatch run test:type-check | |
- name: Install local gitlint for integration tests | |
run: | | |
hatch run qa:install-local | |
- name: Integration tests | |
run: | | |
hatch run qa:integration-tests | |
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 | |
# 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 | |
doc_checks: | |
runs-on: ubuntu-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 | |
- name: Setup python | |
uses: actions/setup-python@v4.6.1 | |
with: | |
python-version: 3.11 | |
- name: Install Hatch | |
run: python -m pip install hatch==1.6.3 | |
- name: Docs validation (mkdocs build & linkchecker) | |
run: hatch run docs:validate | |
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: | |
- checks | |
- doc_checks | |
- upload_coveralls | |
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 | |
- doc_checks | |
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: | |
environment: "production" | |
repo_release_ref: "main" | |
docker_image_tag: "latest_dev" |