Fixed GHA warning and packaging compliance issue #247
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/[email protected] | |
- name: Install python 3.9 | |
uses: actions/[email protected] | |
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 "matrix=$(nox --json -l -s tests -v)" >> $GITHUB_OUTPUT | |
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/[email protected] | |
- name: Install python ${{ matrix.nox_session.python }} for tests | |
# If one version fails, uncomment this one and the next step. For example here 3.13. | |
if: ${{ ! contains(fromJson('["3.13"]'), matrix.nox_session.python ) }} | |
uses: MatteoH2O1999/setup-python@v4 # actions/[email protected] | |
id: set-py | |
with: | |
python-version: ${{ matrix.nox_session.python }} | |
architecture: x64 | |
allow-build: info | |
cache-build: true | |
- name: Install python ${{ matrix.nox_session.python }} for tests (3.13) | |
if: contains(fromJson('["3.13"]'), matrix.nox_session.python ) | |
uses: actions/setup-python@v5 | |
id: set-py-latest | |
with: | |
# Include all versions including pre releases | |
# See https://github.com/actions/setup-python/blob/main/docs/advanced-usage.md#specifying-a-python-version | |
python-version: ${{ format('~{0}.0-alpha.0', matrix.nox_session.python) }} | |
architecture: x64 | |
allow-build: info | |
cache-build: true | |
- name: Install python 3.12 for nox | |
uses: actions/[email protected] | |
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: runner.os == 'Linux' | |
uses: actions/[email protected] | |
with: | |
name: reports_dir | |
path: ./docs/reports | |
build_doc: | |
runs-on: ubuntu-latest | |
if: github.event_name == 'pull_request' | |
steps: | |
- name: Checkout | |
uses: actions/[email protected] | |
- name: Install python 3.9 for nox | |
uses: actions/[email protected] | |
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/[email protected] | |
with: | |
fetch-depth: 0 # so that gh-deploy works | |
- name: Install python 3.9 for nox | |
uses: actions/[email protected] | |
with: | |
python-version: 3.9 | |
architecture: x64 | |
# 1) retrieve the reports generated previously | |
- name: Retrieve reports | |
uses: actions/[email protected] | |
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-cases/::" # Correct paths | |
EOF | |
- name: \[not on TAG\] Publish coverage report | |
if: github.event_name == 'push' && startsWith(github.ref, 'refs/heads') | |
uses: codecov/[email protected] | |
with: | |
files: ./docs/reports/coverage/coverage.xml | |
- name: \[not on TAG\] Build wheel and sdist | |
if: github.event_name == 'push' && startsWith(github.ref, 'refs/heads') | |
run: nox -s build | |
# -------------- 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@release/v1 | |
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 |