[pull] master from python-semantic-release:master #67
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: Checks | |
on: | |
pull_request: | |
permissions: | |
contents: read | |
jobs: | |
eval-changes: | |
name: Evaluate changes | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Evaluate | Check specific file types for changes | |
id: changed-files | |
uses: tj-actions/changed-files@v45.0.2 | |
with: | |
files_yaml: | | |
build: | |
- MANIFEST.in | |
- Dockerfile | |
- .dockerignore | |
- scripts/** | |
ci: | |
- .github/workflows/pr.yml | |
docs: | |
- docs/** | |
- README.rst | |
- AUTHORS.rst | |
- CONTRIBUTING.rst | |
- CHANGELOG.rst | |
src: | |
- semantic_release/** | |
- pyproject.toml | |
tests: | |
- tests/** | |
- name: Evaluate | Detect if any of the combinations of file sets have changed | |
id: all-changes | |
run: | | |
printf '%s\n' "any_changed=false" >> $GITHUB_OUTPUT | |
if [ "${{ steps.changed-files.outputs.build_any_changed }}" == "true" ] || \ | |
[ "${{ steps.changed-files.outputs.ci_any_changed }}" == "true" ] || \ | |
[ "${{ steps.changed-files.outputs.docs_any_changed }}" == "true" ] || \ | |
[ "${{ steps.changed-files.outputs.src_any_changed }}" == "true" ] || \ | |
[ "${{ steps.changed-files.outputs.tests_any_changed }}" == "true" ]; then | |
printf '%s\n' "any_changed=true" >> $GITHUB_OUTPUT | |
fi | |
outputs: | |
any-file-changes: ${{ steps.all-changes.outputs.any_changed }} | |
build-changes: ${{ steps.changed-files.outputs.build_any_changed }} | |
ci-changes: ${{ steps.changed-files.outputs.ci_any_changed }} | |
doc-changes: ${{ steps.changed-files.outputs.docs_any_changed }} | |
src-changes: ${{ steps.changed-files.outputs.src_any_changed }} | |
test-changes: ${{ steps.changed-files.outputs.tests_any_changed }} | |
test-linux: | |
name: Python ${{ matrix.python-version }} on ${{ matrix.os }} tests | |
runs-on: ${{ matrix.os }} | |
needs: eval-changes | |
if: ${{ needs.eval-changes.outputs.src-changes == 'true' || needs.eval-changes.outputs.test-changes == 'true' || needs.eval-changes.outputs.ci-changes == 'true' }} | |
strategy: | |
matrix: | |
python-version: | |
- "3.8" | |
- "3.9" | |
- "3.10" | |
- "3.11" | |
- "3.12" | |
os: | |
- ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.event.pull_request.head.sha }} | |
fetch-depth: 0 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- uses: actions/cache@v4 | |
with: | |
path: ~/.cache/pip | |
key: ${{ runner.os }}-pip-${{ hashFiles('pyproject.toml') }} | |
restore-keys: | | |
${{ runner.os }}-pip- | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip setuptools wheel | |
python -m pip install .[test] | |
python -m pip install pytest-github-actions-annotate-failures | |
- name: Test | |
id: tests | |
run: | | |
python -m pytest \ | |
-vv \ | |
-nauto \ | |
--cov=semantic_release \ | |
--cov-context=test \ | |
--cov-report=term-missing \ | |
--cov-fail-under=80 \ | |
--junit-xml=tests/reports/pytest-results.xml | |
- name: Report | Upload Test Results | |
uses: mikepenz/action-junit-report@v4.3.1 | |
if: ${{ always() && steps.tests.outcome != 'skipped' }} | |
with: | |
report_paths: ./tests/reports/*.xml | |
annotate_only: true | |
test-windows: | |
name: Python ${{ matrix.python-version }} on ${{ matrix.os }} tests | |
runs-on: ${{ matrix.os }} | |
needs: eval-changes | |
if: ${{ needs.eval-changes.outputs.src-changes == 'true' || needs.eval-changes.outputs.test-changes == 'true' || needs.eval-changes.outputs.ci-changes == 'true' }} | |
strategy: | |
# Since the current test suite takes 10-15 minutes to complete on windows, we are | |
# only going to run it on the oldest version of python we support. The older version | |
# will be the most likely area to fail as newer minor versions maintain compatibility. | |
matrix: | |
python-version: [3.8] | |
os: [windows-latest] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.event.pull_request.head.sha }} | |
fetch-depth: 0 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- uses: actions/cache@v4 | |
with: | |
path: ~/.cache/pip | |
key: ${{ runner.os }}-pip-${{ hashFiles('pyproject.toml') }} | |
restore-keys: | | |
${{ runner.os }}-pip- | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip setuptools wheel | |
python -m pip install .[test] | |
python -m pip install pytest-github-actions-annotate-failures | |
- name: Test | |
id: tests | |
# env: | |
# Required for GitPython to work on Windows because of getpass.getuser() | |
# USERNAME: "runneradmin" | |
# Because GHA is currently broken on Windows to pass these varables, we do it manually | |
run: | | |
$env:USERNAME = "runneradmin" | |
python -m pytest ` | |
-vv ` | |
-nauto ` | |
`--cov=semantic_release ` | |
`--cov-context=test ` | |
`--cov-report=term-missing ` | |
`--cov-fail-under=80 ` | |
`--junit-xml=tests/reports/pytest-results.xml | |
- name: Report | Upload Test Results | |
uses: mikepenz/action-junit-report@v4.3.1 | |
if: ${{ always() && steps.tests.outcome != 'skipped' }} | |
with: | |
report_paths: ./tests/reports/*.xml | |
annotate_only: true | |
lint: | |
needs: eval-changes | |
if: ${{ needs.eval-changes.outputs.any-file-changes == 'true' }} | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python 3.12 | |
uses: actions/setup-python@v5 | |
with: | |
python-version: 3.12 | |
- name: Install mypy & dev packages | |
run: | | |
python -m pip install --upgrade pip setuptools wheel | |
python -m pip install .[dev,mypy] | |
- name: Lint | Ruff Evaluation | |
id: lint | |
run: | | |
python -m ruff check \ | |
--config pyproject.toml \ | |
--output-format=full \ | |
--exit-non-zero-on-fix | |
- name: Type-Check | MyPy Evaluation | |
id: type-check | |
if: ${{ always() && steps.lint.outcome != 'skipped' }} | |
run: | | |
python -m mypy --ignore-missing-imports semantic_release | |
- name: Format-Check | Ruff Evaluation | |
id: format-check | |
if: ${{ always() && steps.type-check.outcome != 'skipped' }} | |
run: | | |
python -m ruff format --check --config pyproject.toml | |
commitlint: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- uses: wagoid/commitlint-github-action@v6 |