Skip to content

FEAT: Improve antenna array processing and plotting #139

FEAT: Improve antenna array processing and plotting

FEAT: Improve antenna array processing and plotting #139

Workflow file for this run

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@v4
# with:
# token: ${{ secrets.GITHUB_TOKEN }}
# vale-config: "doc/.vale.ini"
# vale-version: "2.29.6"
#
# 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']
# 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: 'all'
#
# - 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==9.2.20230527.dev0
#
# # 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==9.2.20230527.dev0
#
# - 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==9.2.20230527.dev0
- 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==9.2.20230527.dev0
#
# - 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 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-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 }}