Skip to content

GitHub CI

GitHub CI #2565

Workflow file for this run

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 }}