FEAT: Farfield refactoring #1259
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: | |
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/commit-style@v6 | |
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@v6 | |
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.7', '3.8', '3.9', '3.10', '3.11', '3.12'] | |
target: ['all', 'installer'] | |
exclude: | |
- python-version: '3.7' | |
target: 'installer' | |
steps: | |
- name: Build wheelhouse and perform smoke test | |
uses: ansys/actions/build-wheelhouse@v4 | |
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 pyaedt; from pyaedt import __version__" | |
# TODO: Update to ansys/actions/doc-build@v6 once we remove examples | |
doc-build: | |
name: Documentation build without examples | |
runs-on: ubuntu-latest | |
needs: [doc-style] | |
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: Update pip | |
run: | | |
pip install --upgrade pip | |
- name: Install pyaedt and documentation dependencies | |
run: | | |
pip install .[doc-no-examples] | |
- name: Retrieve PyAEDT version | |
id: version | |
run: | | |
echo "PYAEDT_VERSION=$(python -c 'from pyaedt import __version__; print(__version__)')" >> $GITHUB_OUTPUT | |
echo "PyAEDT version is: $(python -c "from pyaedt import __version__; print(__version__)")" | |
- name: Install doc build requirements | |
run: | | |
sudo apt update | |
sudo apt install graphviz texlive-latex-extra latexmk texlive-xetex texlive-fonts-extra -y | |
# TODO: Update this step once pyaedt-examples is ready | |
- name: Build HTML documentation without examples | |
run: | | |
make -C doc clean | |
make -C doc html-no-examples | |
# Verify that sphinx generates no warnings | |
- name: Check for warnings | |
run: | | |
python doc/print_errors.py | |
- name: Upload HTML documentation without examples artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: documentation-no-examples-html | |
path: doc/_build/html | |
retention-days: 7 | |
- name: Build PDF documentation without examples | |
run: | | |
make -C doc pdf-no-examples | |
- name: Upload PDF documentation without examples artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: documentation-no-examples-pdf | |
path: doc/_build/latex/PyAEDT-Documentation-*.pdf | |
retention-days: 7 | |
# # ================================================================================================= | |
# # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv RUNNING ON SELF-HOSTED RUNNER vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv | |
# # ================================================================================================= | |
doc-build-with-examples: | |
name: Documentation build with examples | |
if: github.event_name == 'push' && contains(github.ref, 'refs/tags') | |
runs-on: [ self-hosted, Windows, pyaedt ] | |
needs: [doc-style] | |
timeout-minutes: 720 | |
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 documentation dependencies | |
run: | | |
.venv\Scripts\Activate.ps1 | |
pip install .[doc] | |
- name: Retrieve PyAEDT version | |
id: version | |
run: | | |
.venv\Scripts\Activate.ps1 | |
echo "PYAEDT_VERSION=$(python -c 'from pyaedt import __version__; print(__version__)')" >> $GITHUB_OUTPUT | |
echo "PyAEDT version is: $(python -c "from pyaedt import __version__; print(__version__)")" | |
- 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 | |
# TODO: Update this step once pyaedt-examples is ready | |
# NOTE: Use environment variable to keep the doctree and avoid redundant build for PDF pages | |
- name: Build HTML documentation with examples | |
env: | |
SPHINXBUILD_KEEP_DOCTREEDIR: "1" | |
run: | | |
.venv\Scripts\Activate.ps1 | |
.\doc\make.bat clean | |
.\doc\make.bat html | |
# TODO: Keeping this commented as reminder of https://github.com/ansys/pyaedt/issues/4296 | |
# # Verify that sphinx generates no warnings | |
# - name: Check for warnings | |
# run: | | |
# .venv\Scripts\Activate.ps1 | |
# python doc/print_errors.py | |
# Use environment variable to remove the doctree after the build of PDF pages | |
- name: Build PDF documentation with examples | |
env: | |
SPHINXBUILD_KEEP_DOCTREEDIR: "0" | |
run: | | |
.venv\Scripts\Activate.ps1 | |
.\doc\make.bat pdf | |
# - name: Add assets to HTML docs | |
# run: | | |
# zip -r documentation-html.zip ./doc/_build/html | |
# mv documentation-html.zip ./doc/_build/html/_static/assets/download/ | |
# cp doc/_build/latex/PyAEDT-Documentation-*.pdf ./doc/_build/html/_static/assets/download/pyaedt.pdf | |
- name: Upload HTML documentation with examples artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: documentation-html | |
path: doc/_build/html | |
retention-days: 7 | |
- name: Upload PDF documentation without examples artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: documentation-pdf | |
path: doc/_build/latex/PyAEDT-Documentation-*.pdf | |
retention-days: 7 | |
# # ================================================================================================= | |
# # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv RUNNING ON SELF-HOSTED RUNNER vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv | |
# # ================================================================================================= | |
test-solvers-windows: | |
name: Testing solvers and coverage (Windows) | |
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=pyaedt --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-solver-tests | |
file: ./coverage.xml | |
flags: system,solver | |
- name: Upload pytest test results | |
uses: actions/upload-artifact@v3 | |
with: | |
name: pytest-solver-results | |
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) | |
needs: [smoke-tests] | |
runs-on: [ self-hosted, Linux, pyaedt ] | |
env: | |
ANSYSEM_ROOT241: '/opt/AnsysEM/v241/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_ROOT241 }}/common/mono/Linux64/lib64:${{ env.ANSYSEM_ROOT241 }}/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_ROOT241 }}/common/mono/Linux64/lib64:${{ env.ANSYSEM_ROOT241 }}/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_ROOT241 }}/common/mono/Linux64/lib64:${{ env.ANSYSEM_ROOT241 }}/Delcross:$LD_LIBRARY_PATH | |
source .venv/bin/activate | |
pytest --durations=50 -v --cov=pyaedt --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-solver-tests | |
file: ./coverage.xml | |
flags: system,solver | |
- name: Upload pytest test results | |
uses: actions/upload-artifact@v3 | |
with: | |
name: pytest-solver-results | |
path: junit/test-results.xml | |
if: ${{ always() }} | |
# # ================================================================================================= | |
# # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv RUNNING ON SELF-HOSTED RUNNER vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv | |
# # ================================================================================================= | |
test-windows: | |
name: Testing and coverage (Windows) | |
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=pyaedt --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-tests | |
file: ./coverage.xml | |
flags: system | |
- name: Upload pytest test results | |
uses: actions/upload-artifact@v3 | |
with: | |
name: pytest-results | |
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) | |
needs: [smoke-tests] | |
runs-on: [ self-hosted, Linux, pyaedt ] | |
env: | |
ANSYSEM_ROOT241: '/opt/AnsysEM/v241/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_ROOT241 }}/common/mono/Linux64/lib64:${{ env.ANSYSEM_ROOT241 }}/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_ROOT241 }}/common/mono/Linux64/lib64:${{ env.ANSYSEM_ROOT241 }}/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_ROOT241 }}/common/mono/Linux64/lib64:${{ env.ANSYSEM_ROOT241 }}/Delcross:$LD_LIBRARY_PATH | |
source .venv/bin/activate | |
pytest -n 2 --dist loadfile --durations=50 -v --cov=pyaedt --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-solver-tests | |
file: ./coverage.xml | |
flags: system,solver | |
- name: Upload pytest test results | |
uses: actions/upload-artifact@v3 | |
with: | |
name: pytest-solver-results | |
path: junit/test-results.xml | |
if: ${{ always() }} | |
# # ================================================================================================= | |
# # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv RUNNING ON SELF-HOSTED RUNNER vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv | |
# # ================================================================================================= | |
test-ironpython-windows: | |
name: Testing IronPython and coverage (Windows) | |
needs: [smoke-tests] | |
runs-on: [ self-hosted, Windows, pyaedt ] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Run Ironpython tests | |
timeout-minutes: 5 | |
run: | | |
$processA = start-process 'cmd' -ArgumentList '/c .\_unittest_ironpython\run_unittests_batchmode.cmd' -PassThru | |
$processA.WaitForExit() | |
- name: Get log content | |
run: | | |
get-content .\_unittest_ironpython\pyaedt_unit_test_ironpython.log | |
- name: Check for errors | |
run: | | |
$test_errors_failures = Select-String -Path .\_unittest_ironpython\pyaedt_unit_test_ironpython.log -Pattern "TextTestResult errors=" | |
if ($test_errors_failures -ne $null) | |
{ | |
exit 1 | |
} | |
package: | |
name: Package library | |
needs: [test-windows, test-solvers-windows, test-ironpython-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@v4 | |
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-with-examples] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Release to the public PyPI repository | |
uses: ansys/actions/release-pypi-public@v4 | |
with: | |
library-name: ${{ env.PACKAGE_NAME }} | |
twine-username: "__token__" | |
twine-token: ${{ secrets.PYPI_TOKEN }} | |
- name: Release to GitHub | |
uses: ansys/actions/release-github@v4 | |
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@v4 | |
with: | |
cname: ${{ env.DOCUMENTATION_CNAME }} | |
token: ${{ secrets.GITHUB_TOKEN }} | |
doc-artifact-name: 'documentation-html' | |
doc-index-stable: | |
name: Deploy stable docs index | |
if: github.event_name == 'push' && contains(github.ref, 'refs/tags') | |
runs-on: ubuntu-latest | |
needs: upload-release-doc | |
steps: | |
- name: Install Git and clone project | |
uses: actions/checkout@v4 | |
- name: Install the package requirements | |
run: pip install -e . | |
- name: Get the version to PyMeilisearch | |
run: | | |
VERSION=$(python -c "from pyaedt import __version__; print('.'.join(__version__.split('.')[:2]))") | |
VERSION_MEILI=$(python -c "from pyaedt import __version__; print('-'.join(__version__.split('.')[:2]))") | |
echo "Calculated VERSION: $VERSION" | |
echo "Calculated VERSION_MEILI: $VERSION_MEILI" | |
echo "VERSION=$VERSION" >> $GITHUB_ENV | |
echo "VERSION_MEILI=$VERSION_MEILI" >> $GITHUB_ENV | |
- name: Deploy the latest documentation index | |
uses: ansys/actions/doc-deploy-index@v4 | |
with: | |
cname: ${{ env.DOCUMENTATION_CNAME }}/version/${{ env.VERSION }} | |
index-name: pyaedt-v${{ env.VERSION_MEILI }} | |
host-url: ${{ env.MEILISEARCH_HOST_URL }} | |
api-key: ${{ env.MEILISEARCH_API_KEY }} | |
python-version: ${{ env.MAIN_PYTHON_VERSION }} |