Skip to content

GitHub CI

GitHub CI #1239

Workflow file for this run

name: GitHub CI
on:
schedule:
- cron: '0 0 * * *'
pull_request:
push:
tags:
- "*"
branches:
- main
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
MAIN_PYTHON_VERSION: '3.12'
PACKAGE_NAME: 'ansys-sound-core'
DOCUMENTATION_CNAME: 'sound.docs.pyansys.com'
ANSRV_DPF_SOUND_IMAGE_WINDOWS_TAG: ghcr.io/ansys/ansys-sound:latest
ANSRV_DPF_SOUND_PORT: 6780
DPF_SOUND_CONT_NAME: ansys-sound-core
jobs:
update-changelog:
name: "Update CHANGELOG for new tag"
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@v7
with:
token: ${{ secrets.PYANSYS_CI_BOT_TOKEN }}
doc-style:
name: "Running documentation style checks"
runs-on: ubuntu-latest
steps:
- name: "Running documentation style checks"
uses: ansys/actions/doc-style@v7
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-style:
name: "Run commit style checks"
runs-on: ubuntu-latest
steps:
- uses: ansys/actions/commit-style@v7
with:
token: ${{ secrets.GITHUB_TOKEN }}
branch-name-style:
name: "Run branch name style checks"
runs-on: ubuntu-latest
steps:
- uses: ansys/actions/branch-name-style@v7
smoke-tests:
name: "Build and Smoke tests"
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [windows-latest, ubuntu-latest, macos-latest]
python-version: ['3.9', '3.10', '3.11', '3.12']
should-release:
- ${{ github.event_name == 'push' && contains(github.ref, 'refs/tags') }}
exclude:
- should-release: false
os: macos-latest
steps:
- name: "Build wheelhouse and perform smoke test"
uses: ansys/actions/build-wheelhouse@v7
with:
library-name: ${{ env.PACKAGE_NAME }}
operating-system: ${{ matrix.os }}
python-version: ${{ matrix.python-version }}
check-vulnerabilities-dev:
name: "Check library vulnerabilities (development mode)"
if: github.ref != 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- name: "Check library vulnerabilities with development mode"
uses: ansys/actions/check-vulnerabilities@main
with:
python-version: ${{ env.MAIN_PYTHON_VERSION }}
token: ${{ secrets.PYANSYS_CI_BOT_TOKEN }}
python-package-name: ${{ env.PACKAGE_NAME }}
dev-mode: true
check-vulnerabilities-main:
name: "Check library vulnerabilities (default mode - only on main)"
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- name: "Check library vulnerabilities with default mode"
uses: ansys/actions/check-vulnerabilities@v7
with:
python-version: ${{ env.MAIN_PYTHON_VERSION }}
token: ${{ secrets.PYANSYS_CI_BOT_TOKEN }}
python-package-name: ${{ env.PACKAGE_NAME }}
# =================================================================================================
# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv RUNNING ON SELF-HOSTED RUNNER vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
# =================================================================================================
testing-windows:
name: "Testing and coverage (Windows)"
needs: [smoke-tests]
runs-on: [self-hosted, Windows, pyansys-sound]
env:
PYVISTA_OFF_SCREEN: true
steps:
- uses: actions/checkout@v4
- name: "Set up Python"
uses: actions/setup-python@v5
with:
python-version: ${{ env.MAIN_PYTHON_VERSION }}
- name: Set up headless display
uses: pyvista/setup-headless-display-action@v2
with:
pyvista: false
- name: "Create Python venv"
run: |
python -m venv .venv
.\.venv\Scripts\Activate.ps1
- name: "Install packages for testing"
run: |
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
pip install --upgrade build wheel
pip install .[tests]
- name: "Login to GitHub Container Registry"
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Download DPF-Sound service container
run: docker pull $env:ANSRV_DPF_SOUND_IMAGE_WINDOWS_TAG
- name: "Start DPF-Sound service and verify start"
run: |
.\.venv\Scripts\Activate.ps1
docker run -d --name ${{ env.DPF_SOUND_CONT_NAME }} -e "ANSYS_DPF_ACCEPT_LA=Y" -e "ANSYSLMD_LICENSE_FILE=1055@${{ secrets.LICENSE_SERVER }}" -v ${{ github.workspace }}\tests\data:C:\data -p ${{ env.ANSRV_DPF_SOUND_PORT }}:50052 --dns '8.8.8.8' ${{ env.ANSRV_DPF_SOUND_IMAGE_WINDOWS_TAG }}
python -c "from ansys.sound.core.server_helpers import validate_dpf_sound_connection; validate_dpf_sound_connection()"
- name: "Testing"
run: |
.\.venv\Scripts\Activate.ps1
pytest -v
- name: "Upload Coverage Results"
uses: actions/upload-artifact@v4
with:
name: coverage-html
path: .cov/html
retention-days: 7
- name: "Upload coverage reports to Codecov"
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: .cov/xml
- name: "Stop the DPF-Sound service"
if: always()
run: |
docker stop $env:DPF_SOUND_CONT_NAME
docker logs $env:DPF_SOUND_CONT_NAME
docker rm $env:DPF_SOUND_CONT_NAME
- name: "Stop any remaining containers"
if: always()
run: |
$dockerContainers = docker ps -a -q
if (-not [string]::IsNullOrEmpty($dockerContainers)) {
docker stop $dockerContainers
docker rm $dockerContainers
}
doc-build:
name: "Building library documentation"
runs-on: [self-hosted, Windows, pyansys-sound]
needs: doc-style
steps:
- uses: actions/checkout@v4
- name: "Set up Python"
uses: actions/setup-python@v5
with:
python-version: ${{ env.MAIN_PYTHON_VERSION }}
- name: "Create Python venv"
run: |
python -m venv .venv
.\.venv\Scripts\Activate.ps1
- name: "Install packages for documentation building"
run: |
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
pip install --upgrade build wheel
pip install .[doc]
- name: "Login to GitHub Container Registry"
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: "Download DPF-Sound service container"
run: docker pull $env:ANSRV_DPF_SOUND_IMAGE_WINDOWS_TAG
- name: "Start DPF-Sound service and verify start"
run: |
.\.venv\Scripts\Activate.ps1
docker run -d --name ${{ env.DPF_SOUND_CONT_NAME }} -e "ANSYS_DPF_ACCEPT_LA=Y" -e "ANSYSLMD_LICENSE_FILE=1055@${{ secrets.LICENSE_SERVER }}" -v $env:LOCALAPPDATA\Ansys\ansys_sound_core\examples:C:\data -p ${{ env.ANSRV_DPF_SOUND_PORT }}:50052 --dns '8.8.8.8' ${{ env.ANSRV_DPF_SOUND_IMAGE_WINDOWS_TAG }}
python -c "from ansys.sound.core.server_helpers import validate_dpf_sound_connection; validate_dpf_sound_connection()"
- name: "Run Ansys documentation building action"
uses: ansys/actions/doc-build@v7
with:
python-version: ${{ env.MAIN_PYTHON_VERSION }}
skip-install: true
sphinxopts: -j auto -W --keep-going
- name: "Stop the DPF-Sound service"
if: always()
run: |
docker stop $env:DPF_SOUND_CONT_NAME
docker logs $env:DPF_SOUND_CONT_NAME
docker rm $env:DPF_SOUND_CONT_NAME
- name: "Stop any remaining containers"
if: always()
run: |
$dockerContainers = docker ps -a -q
if (-not [string]::IsNullOrEmpty($dockerContainers)) {
docker stop $dockerContainers
docker rm $dockerContainers
}
# =================================================================================================
# =================================================================================================
package:
name: Package library
needs: [testing-windows,doc-build]
runs-on: ubuntu-latest
steps:
- name: Build library source and wheel artifacts
uses: ansys/actions/build-library@v7
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: [package, update-changelog]
runs-on: ubuntu-latest
# Specifying a GitHub environment is optional, but strongly encouraged
environment: release
permissions:
id-token: write
contents: write
steps:
- name: Release to the public PyPI repository
uses: ansys/actions/release-pypi-public@v7
with:
library-name: ${{ env.PACKAGE_NAME }}
use-trusted-publisher: true
- name: Release to GitHub
uses: ansys/actions/release-github@v7
with:
library-name: ${{ env.PACKAGE_NAME }}
doc-deploy-dev:
name: "Upload developers documentation"
runs-on: ubuntu-latest
needs: [check-vulnerabilities-main, package]
if: github.ref == 'refs/heads/main'
steps:
- name: "Deploy the latest documentation"
uses: ansys/actions/doc-deploy-dev@v7
with:
cname: ${{ env.DOCUMENTATION_CNAME }}
token: ${{ secrets.GITHUB_TOKEN }}
doc-deploy-release:
name: "Upload release documentation"
runs-on: ubuntu-latest
needs: release
if: github.event_name == 'push' && contains(github.ref, 'refs/tags')
steps:
- name: "Deploy the latest documentation"
uses: ansys/actions/doc-deploy-stable@v7
with:
cname: ${{ env.DOCUMENTATION_CNAME }}
token: ${{ secrets.GITHUB_TOKEN }}