Fixed CI job list for releases to be correct #56
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
# .github/workflows/base.yml | |
name: Build | |
on: | |
# this one is to trigger the workflow manually from the interface | |
workflow_dispatch: | |
push: | |
tags: | |
- '*' | |
branches: | |
- main | |
pull_request: | |
branches: | |
- main | |
defaults: | |
run: | |
shell: bash -l {0} | |
jobs: | |
# pre-job to read nox tests matrix - see https://stackoverflow.com/q/66747359/7262247 | |
list_nox_test_sessions: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4.1.1 | |
- name: Install python 3.9 | |
uses: actions/setup-python@v5.0.0 | |
with: | |
python-version: 3.9 | |
architecture: x64 | |
- name: Install noxfile requirements | |
run: pip install -r noxfile-requirements.txt | |
- name: List 'tests' nox sessions and required python versions | |
id: set-matrix | |
run: echo "::set-output name=matrix::$(nox -s gha_list -- -s tests -v)" | |
outputs: | |
matrix: ${{ steps.set-matrix.outputs.matrix }} # save nox sessions list to outputs | |
run_all_tests: | |
needs: list_nox_test_sessions | |
strategy: | |
fail-fast: false | |
matrix: | |
# see https://github.com/actions/setup-python/issues/544 | |
# os: [ ubuntu-20.04 ] | |
os: [ ubuntu-latest ] # , macos-latest, windows-latest] | |
# all nox sessions: manually > dynamically from previous job | |
# nox_session: ["tests-2.7(env='pytest2.x')", "tests-3.7(env='pytest-latest')"] | |
nox_session: ${{ fromJson(needs.list_nox_test_sessions.outputs.matrix) }} | |
name: ${{ matrix.os }} ${{ matrix.nox_session.python }} ${{ matrix.nox_session.session }} # ${{ matrix.name_suffix }} | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4.1.1 | |
- name: Install python ${{ matrix.nox_session.python }} for tests | |
uses: MatteoH2O1999/setup-python@v3.0.0 # actions/setup-python@v5.0.0 | |
id: set-py | |
with: | |
python-version: ${{ matrix.nox_session.python }} | |
architecture: x64 | |
allow-build: info | |
cache-build: true | |
- name: Install python 3.12 for nox | |
uses: actions/setup-python@v5.0.0 | |
with: | |
python-version: 3.12 | |
architecture: x64 | |
- name: pin virtualenv==20.15.1 in old python versions | |
# pinned to keep compatibility with old versions, see https://github.com/MatteoH2O1999/setup-python/issues/28#issuecomment-1745613621 | |
if: contains(fromJson('["2.7", "3.5", "3.6"]'), matrix.nox_session.python ) | |
run: sed -i "s/virtualenv/virtualenv==20.15.1/g" noxfile-requirements.txt | |
- name: Install noxfile requirements | |
run: pip install -r noxfile-requirements.txt | |
- name: Run nox session ${{ matrix.nox_session.session }} | |
run: nox -s "${{ matrix.nox_session.session }}" -v | |
# Share ./docs/reports so that they can be deployed with doc in next job | |
- name: Share reports with other jobs | |
# if: matrix.nox_session == '...': not needed, if empty won't be shared | |
uses: actions/upload-artifact@v4.3.0 | |
with: | |
name: reports_dir | |
path: ./docs/reports | |
build_doc: | |
runs-on: ubuntu-latest | |
if: github.event_name == 'pull_request' | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4.1.1 | |
- name: Install python 3.9 for nox | |
uses: actions/setup-python@v5.0.0 | |
with: | |
python-version: 3.9 | |
architecture: x64 | |
- name: Install noxfile requirements | |
run: pip install -r noxfile-requirements.txt | |
- name: Build the doc including example gallery | |
run: nox -s docs -- build | |
publish_release: | |
needs: run_all_tests | |
runs-on: ubuntu-latest | |
if: github.event_name == 'push' | |
steps: | |
- name: GitHub context to debug conditional steps | |
env: | |
GITHUB_CONTEXT: ${{ toJSON(github) }} | |
run: echo "$GITHUB_CONTEXT" | |
- name: Checkout with no depth | |
uses: actions/checkout@v4.1.1 | |
with: | |
fetch-depth: 0 # so that gh-deploy works | |
- name: Install python 3.9 for nox | |
uses: actions/setup-python@v5.0.0 | |
with: | |
python-version: 3.9 | |
architecture: x64 | |
# 1) retrieve the reports generated previously | |
- name: Retrieve reports | |
uses: actions/download-artifact@v4.1.1 | |
with: | |
name: reports_dir | |
path: ./docs/reports | |
# Nox install | |
- name: Install noxfile requirements | |
run: pip install -r noxfile-requirements.txt | |
# 5) Run the flake8 report and badge | |
- name: Run flake8 analysis and generate corresponding badge | |
run: nox -s flake8 | |
# -------------- only on Ubuntu + MAIN PUSH (no pull request, no tag) ----------- | |
# 5) Publish the doc and test reports | |
- name: \[not on TAG\] Publish documentation, tests and coverage reports | |
if: github.event_name == 'push' && startsWith(github.ref, 'refs/heads') # startsWith(matrix.os,'ubuntu') | |
run: nox -s publish | |
# 6) Publish coverage report | |
- name: \[not on TAG\] Create codecov.yaml with correct paths | |
if: github.event_name == 'push' && startsWith(github.ref, 'refs/heads') | |
shell: bash | |
run: | | |
cat << EOF > codecov.yml | |
# codecov.yml | |
fixes: | |
- "/home/runner/work/smarie/python-pytest-harvest/::" # Correct paths | |
EOF | |
- name: \[not on TAG\] Publish coverage report | |
if: github.event_name == 'push' && startsWith(github.ref, 'refs/heads') | |
uses: codecov/codecov-action@v4.0.1 | |
with: | |
files: ./docs/reports/coverage/coverage.xml | |
# -------------- only on Ubuntu + TAG PUSH (no pull request) ----------- | |
# 7) Create github release and build the wheel | |
- name: \[TAG only\] Build wheel and create github release | |
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') | |
run: nox -s release -- ${{ secrets.GITHUB_TOKEN }} | |
# 8) Publish the wheel on PyPi | |
- name: \[TAG only\] Deploy on PyPi | |
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') | |
uses: pypa/gh-action-pypi-publish@v1.8.11 | |
with: | |
user: __token__ | |
password: ${{ secrets.PYPI_API_TOKEN }} | |
delete-artifacts: | |
needs: publish_release | |
runs-on: ubuntu-latest | |
if: github.event_name == 'push' | |
steps: | |
- uses: kolpav/purge-artifacts-action@v1 | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
expire-in: 0 # Setting this to 0 will delete all artifacts |