FEAT: Add Twinbuilder excitation comp - 2025.1 #2387
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: GitHub CI CD | |
on: | |
pull_request: | |
# GitHub default types + ready_for_review to trigger the workflow on PRs no longer in draft mode. | |
# See https://github.com/ansys/pyaedt/issues/5223 for more information | |
types: [opened, synchronize, reopened, ready_for_review] | |
workflow_dispatch: | |
push: | |
tags: | |
- "*" | |
branches: | |
- main | |
env: | |
ANSYSLMD_LICENSE_FILE: ${{ format('1055@{0}', secrets.LICENSE_SERVER) }} | |
MAIN_PYTHON_VERSION: '3.10' | |
PACKAGE_NAME: 'PyAEDT' | |
DOCUMENTATION_CNAME: 'aedt.docs.pyansys.com' | |
MEILISEARCH_API_KEY: ${{ secrets.MEILISEARCH_API_KEY }} | |
MEILISEARCH_HOST_URL: ${{ vars.MEILISEARCH_HOST_URL }} | |
MEILISEARCH_PUBLIC_API_KEY: ${{ secrets.MEILISEARCH_PUBLIC_API_KEY }} | |
ON_CI: True | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
pr-title: | |
if: github.event_name == 'pull_request' | |
name: Check the title of the pull request | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check commit name | |
uses: ansys/actions/check-pr-title@v8 | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
use-upper-case: true | |
# TODO: Update to ansys/actions/doc-style@v6 | |
doc-style: | |
name: Documentation style check | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check documentation style | |
uses: ansys/actions/doc-style@v8 | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
smoke-tests: | |
name: Build wheelhouse and smoke tests | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, windows-latest] | |
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12'] | |
target: ['all', 'installer'] | |
steps: | |
- name: Build wheelhouse and perform smoke test | |
uses: ansys/actions/build-wheelhouse@v8 | |
with: | |
library-name: ${{ env.PACKAGE_NAME }} | |
operating-system: ${{ matrix.os }} | |
python-version: ${{ matrix.python-version }} | |
target: ${{ matrix.target }} | |
- name: Import python package | |
run: | | |
python -c "import ansys.aedt.core; from ansys.aedt.core import __version__" | |
doc-build: | |
name: Documentation build | |
runs-on: ubuntu-latest | |
needs: [doc-style] | |
steps: | |
- name: Documentation build | |
uses: ansys/actions/doc-build@v8 | |
with: | |
dependencies: "graphviz texlive-latex-extra latexmk texlive-xetex texlive-fonts-extra" | |
python-version: ${{ env.MAIN_PYTHON_VERSION }} | |
sphinxopts: '-j auto --color -w build_errors.txt' | |
check-links: false | |
# # ================================================================================================= | |
# # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv RUNNING ON SELF-HOSTED RUNNER vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv | |
# # ================================================================================================= | |
test-solvers-windows: | |
name: Testing solvers and coverage (Windows) | |
if: github.event.pull_request.draft == false | |
needs: [smoke-tests] | |
runs-on: [ self-hosted, Windows, pyaedt ] | |
steps: | |
- name: Install Git and checkout project | |
uses: actions/checkout@v4 | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.MAIN_PYTHON_VERSION }} | |
- name: Create virtual environment | |
run: | | |
python -m venv .venv | |
.venv\Scripts\Activate.ps1 | |
python -m pip install pip -U | |
python -m pip install wheel setuptools -U | |
python -c "import sys; print(sys.executable)" | |
- name: Install pyaedt and tests dependencies | |
run: | | |
.venv\Scripts\Activate.ps1 | |
pip install .[tests] | |
pip install pytest-azurepipelines | |
- name: Install CI dependencies (e.g. vtk-osmesa) | |
run: | | |
.venv\Scripts\Activate.ps1 | |
# Uninstall conflicting dependencies | |
pip uninstall --yes vtk | |
pip install --extra-index-url https://wheels.vtk.org vtk-osmesa | |
- name: Run tests on _unittest_solvers | |
env: | |
PYTHONMALLOC: malloc | |
run: | | |
.venv\Scripts\Activate.ps1 | |
pytest --durations=50 -v --cov=ansys.aedt.core --cov-report=xml --cov-report=html --junitxml=junit/test-results.xml _unittest_solvers | |
- uses: codecov/codecov-action@v4 | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
name: codecov-system-solvers-tests-windows | |
file: ./coverage.xml | |
flags: system,solvers,windows | |
- name: Upload pytest test results | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pytest-solvers-windows | |
path: junit/test-results.xml | |
if: ${{ always() }} | |
# # ================================================================================================= | |
# # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv RUNNING ON SELF-HOSTED RUNNER vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv | |
# # ================================================================================================= | |
# TODO: Si if we can use ansys/actions | |
test-solvers-linux: | |
name: Testing solvers and coverage (Linux) | |
if: github.event.pull_request.draft == false | |
needs: [smoke-tests] | |
runs-on: [ self-hosted, Linux, pyaedt ] | |
env: | |
ANSYSEM_ROOT242: '/opt/AnsysEM/v242/Linux64' | |
ANS_NODEPCHECK: '1' | |
steps: | |
- name: Install Git and checkout project | |
uses: actions/checkout@v4 | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.MAIN_PYTHON_VERSION }} | |
- name: Create virtual environment | |
run: | | |
export LD_LIBRARY_PATH=${{ env.ANSYSEM_ROOT242 }}/common/mono/Linux64/lib64:${{ env.ANSYSEM_ROOT242 }}/Delcross:$LD_LIBRARY_PATH | |
python -m venv .venv | |
source .venv/bin/activate | |
python -m pip install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org pip -U | |
python -m pip install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org wheel setuptools -U | |
python -c "import sys; print(sys.executable)" | |
- name: Install pyaedt and tests dependencies | |
run: | | |
export LD_LIBRARY_PATH=${{ env.ANSYSEM_ROOT242 }}/common/mono/Linux64/lib64:${{ env.ANSYSEM_ROOT242 }}/Delcross:$LD_LIBRARY_PATH | |
source .venv/bin/activate | |
pip install .[tests] | |
pip install pytest-azurepipelines | |
- name: Run tests on _unittest_solvers | |
run: | | |
export LD_LIBRARY_PATH=${{ env.ANSYSEM_ROOT242 }}/common/mono/Linux64/lib64:${{ env.ANSYSEM_ROOT242 }}/Delcross:$LD_LIBRARY_PATH | |
source .venv/bin/activate | |
pytest --durations=50 -v --cov=ansys.aedt.core --cov-report=xml --cov-report=html --junitxml=junit/test-results.xml _unittest_solvers | |
- uses: codecov/codecov-action@v4 | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
name: codecov-system-solvers-tests-linux | |
file: ./coverage.xml | |
flags: system,solvers,linux | |
- name: Upload pytest test results | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pytest-solvers-linux | |
path: junit/test-results.xml | |
if: ${{ always() }} | |
# # ================================================================================================= | |
# # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv RUNNING ON SELF-HOSTED RUNNER vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv | |
# # ================================================================================================= | |
test-windows: | |
name: Testing and coverage (Windows) | |
if: github.event.pull_request.draft == false | |
needs: [smoke-tests] | |
runs-on: [ self-hosted, Windows, pyaedt ] | |
steps: | |
- name: Install Git and checkout project | |
uses: actions/checkout@v4 | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.MAIN_PYTHON_VERSION }} | |
- name: Create virtual environment | |
run: | | |
python -m venv .venv | |
.venv\Scripts\Activate.ps1 | |
python -m pip install pip -U | |
python -m pip install wheel setuptools -U | |
python -c "import sys; print(sys.executable)" | |
- name: Install pyaedt and tests dependencies | |
run: | | |
.venv\Scripts\Activate.ps1 | |
pip install .[tests] | |
pip install pytest-azurepipelines | |
- name: Install CI dependencies (e.g. vtk-osmesa) | |
run: | | |
.venv\Scripts\Activate.ps1 | |
# Uninstall conflicting dependencies | |
pip uninstall --yes vtk | |
pip install --extra-index-url https://wheels.vtk.org vtk-osmesa | |
- name: Run tests on _unittest | |
uses: nick-fields/retry@v3 | |
env: | |
PYTHONMALLOC: malloc | |
with: | |
max_attempts: 2 | |
retry_on: error | |
timeout_minutes: 50 | |
command: | | |
.venv\Scripts\Activate.ps1 | |
pytest -n 4 --dist loadfile --durations=50 -v --cov=ansys.aedt.core --cov-report=xml --cov-report=html --junitxml=junit/test-results.xml _unittest | |
- uses: codecov/codecov-action@v4 | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
name: codecov-system-general-tests-windows | |
file: ./coverage.xml | |
flags: system,general,windows | |
- name: Upload pytest test results | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pytest-general-windows | |
path: junit/test-results.xml | |
if: ${{ always() }} | |
# # ================================================================================================= | |
# # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv RUNNING ON SELF-HOSTED RUNNER vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv | |
# # ================================================================================================= | |
# TODO: Si if we can use ansys/actions | |
test-linux: | |
name: Testing and coverage (Linux) | |
if: github.event.pull_request.draft == false | |
needs: [smoke-tests] | |
runs-on: [ self-hosted, Linux, pyaedt ] | |
env: | |
ANSYSEM_ROOT242: '/opt/AnsysEM/v242/Linux64' | |
ANS_NODEPCHECK: '1' | |
steps: | |
- name: Install Git and checkout project | |
uses: actions/checkout@v4 | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.MAIN_PYTHON_VERSION }} | |
- name: Create virtual environment | |
run: | | |
export LD_LIBRARY_PATH=${{ env.ANSYSEM_ROOT242 }}/common/mono/Linux64/lib64:${{ env.ANSYSEM_ROOT242 }}/Delcross:$LD_LIBRARY_PATH | |
python -m venv .venv | |
source .venv/bin/activate | |
python -m pip install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org pip -U | |
python -m pip install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org wheel setuptools -U | |
python -c "import sys; print(sys.executable)" | |
- name: Install pyaedt and tests dependencies | |
run: | | |
export LD_LIBRARY_PATH=${{ env.ANSYSEM_ROOT242 }}/common/mono/Linux64/lib64:${{ env.ANSYSEM_ROOT242 }}/Delcross:$LD_LIBRARY_PATH | |
source .venv/bin/activate | |
pip install .[tests] | |
pip install pytest-azurepipelines | |
- name: Install CI dependencies (e.g. vtk-osmesa) | |
run: | | |
source .venv/bin/activate | |
# Uninstall conflicting dependencies | |
pip uninstall --yes vtk | |
pip install --extra-index-url https://wheels.vtk.org vtk-osmesa | |
- name: Run tests on _unittest | |
uses: nick-fields/retry@v3 | |
with: | |
max_attempts: 2 | |
retry_on: error | |
timeout_minutes: 50 | |
command: | | |
export LD_LIBRARY_PATH=${{ env.ANSYSEM_ROOT242 }}/common/mono/Linux64/lib64:${{ env.ANSYSEM_ROOT242 }}/Delcross:$LD_LIBRARY_PATH | |
source .venv/bin/activate | |
pytest -n 2 --dist loadfile --durations=50 -v --cov=ansys.aedt.core --cov-report=xml --cov-report=html --junitxml=junit/test-results.xml _unittest | |
- uses: codecov/codecov-action@v4 | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
name: codecov-system-general-tests | |
file: ./coverage.xml | |
flags: system,general,linux | |
- name: Upload pytest test results | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pytest-general-linux | |
path: junit/test-results.xml | |
if: ${{ always() }} | |
package: | |
name: Package library | |
needs: [test-windows, test-solvers-windows, test-linux, test-solvers-linux, doc-build] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Build library source and wheel artifacts | |
uses: ansys/actions/build-library@v8 | |
with: | |
library-name: ${{ env.PACKAGE_NAME }} | |
python-version: ${{ env.MAIN_PYTHON_VERSION }} | |
# TODO: Si if we can fix the PDF issue and leverage classic ansys/release-github | |
release: | |
name: Release project | |
if: github.event_name == 'push' && contains(github.ref, 'refs/tags') | |
needs: [package, doc-build] | |
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 }} | |
upload-release-doc: | |
name: Upload release documentation | |
if: github.event_name == 'push' && contains(github.ref, 'refs/tags') | |
runs-on: ubuntu-latest | |
needs: [release] | |
steps: | |
- name: Deploy the stable documentation | |
uses: ansys/actions/doc-deploy-stable@v8 | |
with: | |
cname: ${{ env.DOCUMENTATION_CNAME }} | |
token: ${{ secrets.GITHUB_TOKEN }} | |
bot-user: ${{ secrets.PYANSYS_CI_BOT_USERNAME }} | |
bot-email: ${{ secrets.PYANSYS_CI_BOT_EMAIL }} |