1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
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' }}
|