155 lines
5.7 KiB
YAML
155 lines
5.7 KiB
YAML
name: Tests and Checks
|
|
|
|
on: [push, pull_request]
|
|
|
|
jobs:
|
|
checks:
|
|
runs-on: "ubuntu-latest"
|
|
strategy:
|
|
matrix:
|
|
python-version: ["3.6", "3.7", "3.8", "3.9", "3.10", "3.11", pypy-3.9]
|
|
os: ["macos-latest", "ubuntu-latest"]
|
|
steps:
|
|
- uses: actions/checkout@v3.0.2
|
|
with:
|
|
ref: ${{ github.event.pull_request.head.sha }} # Checkout pull request HEAD commit instead of merge commit
|
|
|
|
# Because gitlint is a tool that uses git itself under the hood, we remove git tracking from the checked out
|
|
# code by temporarily renaming the .git directory.
|
|
# This is to ensure that the tests don't have a dependency on the version control of gitlint itself.
|
|
- name: Temporarily remove git version control from code
|
|
run: mv .git ._git
|
|
|
|
- name: Setup python
|
|
uses: actions/setup-python@v4.2.0
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
|
|
- name: Install requirements
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
pip install -r requirements.txt
|
|
pip install -r test-requirements.txt
|
|
|
|
- name: Unit Tests
|
|
run: ./run_tests.sh
|
|
|
|
# Coveralls integration doesn't properly work at this point, also see below
|
|
# - name: Coveralls
|
|
# env:
|
|
# COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
|
|
# run: coveralls
|
|
|
|
# Patch the commit-msg hook to make it work in GH CI
|
|
# Specifically, within the commit-msg hook, wrap the invocation of gitlint with `script`
|
|
|
|
- name: Patch commit-msg hook
|
|
run: |
|
|
# Escape " to \"
|
|
sed -i -E '/^gitlint/ s/"/\\"/g' gitlint-core/gitlint/files/commit-msg
|
|
# Replace `gitlint <args>` with `script -e -q -c "gitlint <args>"`
|
|
sed -i -E 's/^gitlint(.*)/script -e -q -c "\0"/' gitlint-core/gitlint/files/commit-msg
|
|
|
|
- name: Integration Tests
|
|
run: ./run_tests.sh -i
|
|
|
|
# Gitlint no longer uses `sh` by default, but for now we're still supporting the manual enablement of it.
|
|
# By setting GITLINT_USE_SH_LIB=1, we test whether this still works.
|
|
- name: Integration Tests (GITLINT_USE_SH_LIB=1)
|
|
env:
|
|
GITLINT_USE_SH_LIB: 1
|
|
run: ./run_tests.sh -i
|
|
|
|
- name: Code formatting (black)
|
|
run: ./run_tests.sh -f
|
|
|
|
- name: PyLint
|
|
run: ./run_tests.sh -l
|
|
|
|
- name: Build tests
|
|
run: ./run_tests.sh --build
|
|
|
|
# Coveralls GH Action currently doesn't support current non-LCOV reporting format
|
|
# For now, still using Travis for unit test coverage reporting
|
|
# https://github.com/coverallsapp/github-action/issues/30
|
|
# - name: Coveralls
|
|
# uses: coverallsapp/github-action@master
|
|
# with:
|
|
# github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
# Re-add git version control so we can run gitlint on itself.
|
|
- name: Re-add git version control to code
|
|
run: mv ._git .git
|
|
|
|
# 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 check
|
|
run: ./run_tests.sh -g --debug
|
|
if: ${{ github.event_name != 'pull_request' }}
|
|
|
|
windows-checks:
|
|
runs-on: windows-latest
|
|
strategy:
|
|
matrix:
|
|
python-version: ["3.10"]
|
|
steps:
|
|
- uses: actions/checkout@v3.0.2
|
|
with:
|
|
ref: ${{ github.event.pull_request.head.sha }} # Checkout pull request HEAD commit instead of merge commit
|
|
|
|
# Because gitlint is a tool that uses git itself under the hood, we remove git tracking from the checked out
|
|
# code by temporarily renaming the .git directory.
|
|
# This is to ensure that the tests don't have a dependency on the version control of gitlint itself.
|
|
- name: Temporarily remove git version control from code
|
|
run: Rename-Item .git ._git
|
|
|
|
- name: Setup python
|
|
uses: actions/setup-python@v4.2.0
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
|
|
- name: "Upgrade pip on Python 3"
|
|
if: matrix.python-version == '3.10'
|
|
run: python -m pip install --upgrade pip
|
|
|
|
- name: Install requirements
|
|
run: |
|
|
pip install -r requirements.txt
|
|
pip install -r test-requirements.txt
|
|
|
|
- name: gitlint --version
|
|
run: gitlint --version
|
|
|
|
- name: Tests (sanity)
|
|
run: tools\windows\run_tests.bat "gitlint-core\gitlint\tests\cli\test_cli.py::CLITests::test_lint"
|
|
|
|
- name: Tests (ignore cli\*)
|
|
run: pytest --ignore gitlint-core\gitlint\tests\cli -rw -s gitlint-core
|
|
|
|
- name: Tests (test_cli.py only - continue-on-error:true)
|
|
run: tools\windows\run_tests.bat "gitlint-core\gitlint\tests\cli\test_cli.py"
|
|
continue-on-error: true # Known to fail at this point
|
|
|
|
- name: Tests (all - continue-on-error:true)
|
|
run: tools\windows\run_tests.bat
|
|
continue-on-error: true # Known to fail at this point
|
|
|
|
- name: Integration tests (continue-on-error:true)
|
|
run: pytest -rw -s qa
|
|
continue-on-error: true # Known to fail at this point
|
|
|
|
- name: Code formatting (black)
|
|
run: black .
|
|
|
|
- name: PyLint
|
|
run: pylint gitlint-core\gitlint qa --rcfile=".pylintrc" -r n
|
|
|
|
# Re-add git version control so we can run gitlint on itself.
|
|
- name: Re-add git version control to code
|
|
run: Rename-Item ._git .git
|
|
|
|
# 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 check
|
|
run: gitlint --debug
|
|
if: ${{ github.event_name != 'pull_request' }}
|