Feature/96 97 issues #216
Workflow file for this run
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 "::set-output name=matrix::$(nox --json -l -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, windows-latest ] # , macos-latest, windows-latest] | |
# all nox sessions: manually > dynamically from previous job | |
# nox_session: ["tests-2.7", "tests-3.7"] | |
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: ${{ ! contains(fromJson('["3.13"]'), matrix.nox_session.python ) }} | |
uses: MatteoH2O1999/[email protected] # 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: Setup headless display | |
uses: pyvista/setup-headless-display-action@v2 | |
with: | |
qt: true | |
- 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 }}" | |
# 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/upload-artifact@master | |
with: | |
name: reports_dir | |
path: ./docs/reports | |
# build_doc: useless in our case since own doc is part of the tests session | |
# 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 | |
- name: Setup headless display | |
uses: pyvista/setup-headless-display-action@v2 | |
with: | |
qt: true | |
# 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/mkdocs-gallery/::" # 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 | |
# -------------- 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 |