GitHub CI #2570
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: GitHub CI | |
on: | |
schedule: | |
- cron: '0 0 * * *' | |
pull_request: | |
push: | |
tags: | |
- "*" | |
branches: | |
- main | |
workflow_dispatch: | |
inputs: | |
env: | |
MAIN_PYTHON_VERSION: '3.13' | |
CONTAINER_TAG: 'latest' | |
PACKAGE_NAME: 'ansys-dpf-composites' | |
DOCUMENTATION_CNAME: 'composites.dpf.docs.pyansys.com' | |
PYDPF_COMPOSITES_DOCKER_CONTAINER_PORT: "50052" | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
code-style: | |
name: "Code style" | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
# TODO: switch back to using ${{ env.MAIN_PYTHON_VERSION }} | |
# once https://github.com/pylint-dev/pylint/issues/10000#issuecomment-2519899671 | |
# is resolved. | |
python-version: "3.12" | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip tox | |
python -m pip install --upgrade poetry | |
- name: Test with tox | |
run: tox -e style | |
doc-style: | |
name: "Documentation style" | |
runs-on: ubuntu-latest | |
steps: | |
- uses: ansys/actions/doc-style@v8 | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
tests: | |
name: "Tests and coverage" | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
# We can't test on windows because it is not possible to run linux | |
# docker images on the windows agents. See the issue | |
# https://github.com/actions/runner-images/issues/1143 | |
os: [ubuntu-latest] | |
python-version: ['3.10', '3.11', '3.12', '3.13'] | |
fail-fast: false | |
steps: | |
- name: "Login in Github Container registry" | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: "Pull pydpf container(s)" | |
# 2023r2_pre1 is used to test backward compatibility. Also update testenv in tox.ini | |
# if other containers must be tested. | |
run: | | |
docker pull ghcr.io/ansys/pydpf-composites:${{ env.CONTAINER_TAG }} | |
docker pull ghcr.io/ansys/pydpf-composites:2025r1_pre0 | |
docker pull ghcr.io/ansys/pydpf-composites:2024r2_pre1 | |
docker pull ghcr.io/ansys/pydpf-composites:2024r2_pre0 | |
docker pull ghcr.io/ansys/pydpf-composites:2024r1_pre0 | |
docker pull ghcr.io/ansys/pydpf-composites:2024r1 | |
docker pull ghcr.io/ansys/pydpf-composites:2023r2_pre1 | |
- name: "Checkout the project" | |
uses: actions/checkout@v4 | |
- name: "Set up Python ${{ matrix.python-version }}" | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: "Install Python dependencies" | |
run: | | |
python -m pip install --upgrade pip tox tox-gh-actions | |
python -m pip install --upgrade poetry | |
- name: "Test with tox" | |
# Only the tox environment specified in the tox.ini gh-actions is run | |
run: | | |
tox | |
env: | |
LICENSE_SERVER: ${{ secrets.LICENSE_SERVER }} | |
- name: Upload coverage reports to Codecov | |
uses: codecov/codecov-action@v5 | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
files: coverage.xml | |
# enable for debugging purposes. Ensure that the output does not contain | |
# pipeline secrets. | |
# - name: "Upload server output" | |
# if: always() | |
# uses: actions/upload-artifact@v4 | |
# with: | |
# name: server_output | |
# path: tests/logs/*_log_*.txt | |
# retention-days: 7 | |
tests_minimal_version: | |
name: "Test with lower-bound dependency versions" | |
runs-on: ubuntu-latest | |
steps: | |
- name: "Login in Github Container registry" | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: "Pull and start DPF container" | |
run: | | |
docker pull ghcr.io/ansys/pydpf-composites:${{ env.CONTAINER_TAG }} | |
- uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.10' | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip tox tox-gh-actions | |
python -m pip install --upgrade poetry | |
- name: Test with tox | |
run: | | |
tox -e test-minimal | |
env: | |
LICENSE_SERVER: ${{ secrets.LICENSE_SERVER }} | |
doc-build: | |
name: "Documentation build" | |
runs-on: ubuntu-latest | |
steps: | |
- name: "Install OS packages" | |
run: | | |
sudo apt update | |
sudo apt-get install pandoc xvfb | |
- name: "Login in Github Container registry" | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: "Pull and start dpf container" | |
run: | | |
docker pull ghcr.io/ansys/pydpf-composites:${{ env.CONTAINER_TAG }} | |
docker run -d --restart always -p 50052:50052 -e ANSYSLMD_LICENSE_FILE=1055@${{ secrets.LICENSE_SERVER }} -e ANSYS_DPF_ACCEPT_LA=Y ghcr.io/ansys/pydpf-composites:${{ env.CONTAINER_TAG }} | |
- name: "Checkout the project" | |
uses: actions/checkout@v4 | |
- name: "Set up Python ${{ env.MAIN_PYTHON_VERSION }}" | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.MAIN_PYTHON_VERSION }} | |
- name: "Install Python dependencies" | |
run: | | |
python -m pip install --upgrade pip tox | |
python -m pip install --upgrade poetry | |
- name: "Generate the documentation with tox" | |
run: | | |
tox -e doc-linux | |
- name: "Upload HTML Documentation" | |
uses: actions/upload-artifact@v4 | |
with: | |
name: documentation-html | |
path: .tox/doc_out/html | |
retention-days: 7 | |
- name: "Install OS packages for PDF" | |
run: | | |
sudo apt-get install latexmk texlive-latex-extra | |
- name: "Generate the PDF documentation with tox" | |
run: | | |
tox -e doc-linux-pdf | |
- name: "Upload PDF Documentation" | |
uses: actions/upload-artifact@v4 | |
with: | |
name: documentation-pdf | |
path: .tox/doc_out/latex/ansys-dpf-composites.pdf | |
retention-days: 7 | |
build-library: | |
name: "Build package" | |
runs-on: ubuntu-latest | |
needs: [doc-style, doc-build, code-style, tests, tests_minimal_version] | |
steps: | |
- name: "Build library source and wheel artifacts" | |
uses: ansys/actions/build-library@v8 | |
with: | |
library-name: ${{ env.PACKAGE_NAME }} | |
build-wheelhouse: | |
name: "Build wheelhouse for latest Python versions" | |
runs-on: ${{ matrix.os }} | |
needs: [doc-style, doc-build, code-style, tests, tests_minimal_version] | |
strategy: | |
matrix: | |
os: [ubuntu-latest, windows-latest] | |
python-version: ['3.10', '3.11', '3.12', '3.13'] | |
steps: | |
- name: "Build a wheelhouse of the Python library" | |
uses: ansys/actions/build-wheelhouse@v8 | |
with: | |
library-name: "ansys-dpf-composites" | |
operating-system: ${{ matrix.os }} | |
python-version: ${{ matrix.python-version }} | |
doc-deploy-dev: | |
name: "Deploy development documentation" | |
if: github.ref == 'refs/heads/main' | |
runs-on: ubuntu-latest | |
needs: [build-library, build-wheelhouse] | |
steps: | |
- uses: ansys/actions/doc-deploy-dev@v8 | |
with: | |
cname: ${{ env.DOCUMENTATION_CNAME }} | |
token: ${{ secrets.PYANSYS_CI_BOT_TOKEN }} | |
force-orphan: false | |
bot-user: ${{ secrets.PYANSYS_CI_BOT_USERNAME }} | |
bot-email: ${{ secrets.PYANSYS_CI_BOT_EMAIL }} | |
release: | |
name: "Release project" | |
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/v') | |
needs: [build-library, build-wheelhouse] | |
runs-on: ubuntu-latest | |
steps: | |
- name: "Release to the public PyPI repository" | |
uses: ansys/actions/release-pypi-public@v8 | |
with: | |
library-name: ${{ env.PACKAGE_NAME }} | |
twine-username: "__token__" | |
twine-token: ${{ secrets.PYPI_TOKEN }} | |
- name: "Release to GitHub" | |
uses: ansys/actions/release-github@v8 | |
with: | |
library-name: ${{ env.PACKAGE_NAME }} | |
doc-deploy-stable: | |
name: "Deploy stable documentation" | |
runs-on: ubuntu-latest | |
needs: [release] | |
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/v') | |
steps: | |
- uses: ansys/actions/doc-deploy-stable@v8 | |
with: | |
cname: ${{ env.DOCUMENTATION_CNAME }} | |
token: ${{ secrets.PYANSYS_CI_BOT_TOKEN }} | |
force-orphan: false | |
bot-user: ${{ secrets.PYANSYS_CI_BOT_USERNAME }} | |
bot-email: ${{ secrets.PYANSYS_CI_BOT_EMAIL }} |