feat: changelog actions #1803
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
name: CI | |
on: | |
pull_request: | |
workflow_dispatch: | |
inputs: | |
PyDynaRunContainer: | |
description: 'Run container name' | |
required: false | |
default: ghcr.io/ansys/pydyna-run:latest | |
push: | |
tags: | |
- "*" | |
branches: | |
- main | |
env: | |
MAIN_PYTHON_VERSION: '3.10' | |
PACKAGE_NAME: 'ansys-dyna-core' | |
PACKAGE_NAMESPACE: 'ansys.dyna.core' | |
DOCUMENTATION_CNAME: "dyna.docs.pyansys.com" | |
PYDYNA_RUN_CONTAINER: ${{ github.event.inputs.PyDynaRunContainer || 'ghcr.io/ansys/pydyna-run:latest'}} | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
update-changelog: | |
name: "Update CHANGELOG (on release)" | |
if: github.event_name == 'push' && contains(github.ref, 'refs/tags') | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
pull-requests: write | |
steps: | |
- uses: ansys/actions/doc-deploy-changelog@v8 | |
with: | |
token: ${{ secrets.PYANSYS_CI_BOT_TOKEN }} | |
bot-user: ${{ secrets.PYANSYS_CI_BOT_USERNAME }} | |
bot-email: ${{ secrets.PYANSYS_CI_BOT_EMAIL }} | |
pr-name: | |
if: github.event_name == 'pull_request' | |
name: Check the name of the PR | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check commit name | |
uses: ansys/actions/check-pr-title@v8 | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
code-style: | |
name: "Code style" | |
runs-on: ubuntu-latest | |
needs: pr-name | |
steps: | |
- uses: ansys/actions/code-style@v8 | |
with: | |
python-version: ${{ env.MAIN_PYTHON_VERSION }} | |
codegen-testing: | |
name: Build and Testing for codegen | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.MAIN_PYTHON_VERSION }} | |
- name: Install library | |
run: pip install -e .[codegen] | |
- name: Generate codegen | |
run: | | |
python codegen/generate.py -c | |
python codegen/generate.py | |
- name: Run codegen testing | |
run: | | |
if git -C src/ansys/dyna/core/keywords/keyword_classes/auto diff --relative --exit-code; then | |
echo "CHANGES=false" >> "$GITHUB_ENV" | |
else | |
echo "CHANGES=true" >> "$GITHUB_ENV" | |
fi | |
- name: Exit on changes | |
if: ${{ env.CHANGES == 'true' }} | |
run: exit 1 | |
doc-style: | |
name: "Documentation style" | |
runs-on: ubuntu-latest | |
needs: pr-name | |
steps: | |
- name: PyAnsys documentation style checks | |
uses: ansys/actions/doc-style@v8 | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
doc: | |
name: "Documentation build" | |
runs-on: ubuntu-latest | |
needs: [doc-style] | |
steps: | |
- name: "Checkout 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 }} | |
cache: 'pip' | |
cache-dependency-path: 'pyproject.toml' | |
- name: "Install system dependencies" | |
run: | | |
sudo apt-get update | |
sudo apt-get install xvfb pandoc texlive-latex-extra latexmk | |
- name: "Install python dependencies" | |
run: | | |
python -m pip install .[doc] | |
# optional dependency for `run_dyna` to work with docker. | |
# TODO - consider adding to pyproject.toml under an option | |
python -m pip install docker | |
- name: "Login to GitHub container registry" | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: "Install and run DPF server" | |
run: | | |
docker pull ghcr.io/ansys/dpf-core:22.2dev | |
docker run -d --name dpfserver -p 50054:50052 ghcr.io/ansys/dpf-core:22.2dev && echo "DPF Server active on port 50054." | |
- name: LS-DYNA Keyword server activation | |
run: | | |
docker pull ghcr.io/ansys/ls-pre:latest | |
docker run -d --name kw_server -p 50051:50051 ghcr.io/ansys/ls-pre:latest && echo "Keyword server active on port 50051." | |
- name: Pull PyDyna-run image | |
run: | | |
docker pull ghcr.io/ansys/pydyna-run:latest | |
- name: "Build the html documentation" | |
env: | |
ANSYSLI_SERVERS: 2325@${{secrets.LICENSE_SERVER}} | |
ANSYSLMD_LICENSE_FILE: 1055@${{secrets.LICENSE_SERVER}} | |
LSTC_LICENSE: ansys | |
PYDYNA_RUN_CONTAINER: ${{ env.PYDYNA_RUN_CONTAINER }} | |
run: | | |
xvfb-run make -C doc html | |
- name: "Upload html documentation" | |
uses: actions/upload-artifact@v4 | |
with: | |
name: documentation-html | |
path: doc/_build/html | |
retention-days: 7 | |
- name: "Build the pdf documentation" | |
env: | |
ANSYSLI_SERVERS: 2325@${{secrets.LICENSE_SERVER}} | |
ANSYSLMD_LICENSE_FILE: 1055@${{secrets.LICENSE_SERVER}} | |
LSTC_LICENSE: ansys | |
PYDYNA_RUN_CONTAINER: ${{ env.PYDYNA_RUN_CONTAINER }} | |
PYDYNA_RUN_STREAM: "0" | |
run: | | |
xvfb-run make -C doc pdf | |
- name: "Upload pdf documentation" | |
uses: actions/upload-artifact@v4 | |
with: | |
name: documentation-pdf | |
path: doc/_build/latex/*.pdf | |
retention-days: 7 | |
- name: Extract the server logs | |
if: always() | |
run: | | |
docker logs kw_server > server_output.txt | |
- name: "Upload the server logs" | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: server_output_docs.txt | |
path: server_output.txt | |
- name: DPF Logs (on screen) | |
if: always() | |
run: | | |
docker logs dpfserver | |
docker stop dpfserver | |
smoke-tests: | |
name: "Build wheelhouse for ${{ matrix.os }} and Python ${{ matrix.python-version }}" | |
runs-on: ${{ matrix.os }} | |
needs: [code-style] | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [windows-latest, ubuntu-latest] | |
python-version: ['3.10', '3.11', '3.12'] | |
steps: | |
- uses: ansys/actions/build-wheelhouse@v8 | |
with: | |
library-name: ${{ env.PACKAGE_NAME }} | |
operating-system: ${{ matrix.os }} | |
python-version: ${{ matrix.python-version }} | |
tests: | |
name: "Testing" | |
runs-on: ubuntu-latest | |
needs: [smoke-tests] | |
steps: | |
- name: "Checkout repository" | |
uses: actions/checkout@v4 | |
- name: "Set up Python" | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.MAIN_PYTHON_VERSION }} | |
cache: 'pip' | |
cache-dependency-path: 'pyproject.toml' | |
- name: "Login to GitHub container registry" | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: "Pull and start LS-DYNA keyword server" | |
run: | | |
docker pull ghcr.io/ansys/ls-pre:latest | |
docker run -d --name kw_server -p 50051:50051 ghcr.io/ansys/ls-pre:latest && echo "Keyword server active on port 50051." | |
- name: "Install package dependencies" | |
run: | | |
pip install -e .[tests] | |
- name: "Run tests" | |
run: | | |
pytest | |
- name: "Extract the server logs" | |
if: always() | |
run: | | |
docker logs kw_server > server_output.txt | |
- name: "Upload the server logs" | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: server_output_tests.txt | |
path: server_output.txt | |
- name: "Upload coverage results" | |
uses: actions/upload-artifact@v4 | |
with: | |
name: coverage-html | |
path: .cov/html | |
retention-days: 7 | |
run-testing: | |
name: Test the "run" subpackage | |
runs-on: ubuntu-latest | |
needs: [code-style] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: "Set up Python ${{ env.MAIN_PYTHON_VERSION }}" | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.MAIN_PYTHON_VERSION }} | |
cache: 'pip' | |
cache-dependency-path: 'pyproject.toml' | |
- name: "Install python dependencies" | |
run: | | |
python -m pip install docker # todo make this an option? | |
python -m pip install .[tests] | |
- name: Pull PyDyna-run image | |
run: | | |
docker pull ${{ env.PYDYNA_RUN_CONTAINER }} | |
- name: Unit testing | |
env: | |
PYDYNA_RUN_CONTAINER: ${{ env.PYDYNA_RUN_CONTAINER }} | |
ANSYSLI_SERVERS: 2325@${{secrets.LICENSE_SERVER}} | |
ANSYSLMD_LICENSE_FILE: 1055@${{secrets.LICENSE_SERVER}} | |
LSTC_LICENSE: ansys | |
run: | | |
pytest -m run | |
build-library: | |
name: "Build library" | |
needs: [doc, tests, run-testing] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: ansys/actions/build-library@v8 | |
with: | |
library-name: ${{ env.PACKAGE_NAME }} | |
python-version: ${{ env.MAIN_PYTHON_VERSION }} | |
release: | |
name: Release project | |
if: github.event_name == 'push' && contains(github.ref, 'refs/tags') | |
needs: [update-changelog, build-library] | |
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-dev: | |
name: "Deploy development documentation" | |
if: github.ref == 'refs/heads/main' | |
runs-on: ubuntu-latest | |
needs: [build-library] | |
steps: | |
- uses: ansys/actions/doc-deploy-dev@v8 | |
with: | |
cname: ${{ env.DOCUMENTATION_CNAME }} | |
token: ${{ secrets.PYANSYS_CI_BOT_TOKEN }} | |
bot-user: ${{ secrets.PYANSYS_CI_BOT_USERNAME }} | |
bot-email: ${{ secrets.PYANSYS_CI_BOT_EMAIL }} | |
doc-deploy-stable: | |
name: "Deploy stable documentation" | |
if: github.event_name == 'push' && contains(github.ref, 'refs/tags') | |
runs-on: ubuntu-latest | |
needs: [release] | |
steps: | |
- uses: ansys/actions/doc-deploy-stable@v8 | |
with: | |
cname: ${{ env.DOCUMENTATION_CNAME }} | |
token: ${{ secrets.PYANSYS_CI_BOT_TOKEN }} | |
bot-user: ${{ secrets.PYANSYS_CI_BOT_USERNAME }} | |
bot-email: ${{ secrets.PYANSYS_CI_BOT_EMAIL }} |