Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
b9c4bc4
build, test, doc with 'latest' container
iboyd-ansys Jul 7, 2026
60cfadb
chore: adding changelog file 681.maintenance.md [dependabot-skip]
pyansys-ci-bot Jul 7, 2026
3af63e4
hadn't switched to 'latest' for doc build
iboyd-ansys Jul 7, 2026
2b7d95c
Merge branch 'chore/build-with-latest' of https://github.com/ansys/py…
iboyd-ansys Jul 7, 2026
f9113ad
stripped down workflow & collect licensing logs
iboyd-ansys Jul 8, 2026
8022229
handle syc version corresp to 'latest' container version
iboyd-ansys Jul 9, 2026
996926d
alternative branch-based trigger for cut-down CI
iboyd-ansys Jul 8, 2026
6f6a3fa
print output from a failing test
iboyd-ansys Jul 8, 2026
21e725b
chore: adding changelog file 682.maintenance.md [dependabot-skip]
pyansys-ci-bot Jul 8, 2026
e993b8f
run single unit test for debugging
iboyd-ansys Jul 9, 2026
68e2107
chore: adding changelog file 682.test.md [dependabot-skip]
pyansys-ci-bot Jul 8, 2026
281fd49
fix wildcard in licensing log search
iboyd-ansys Jul 9, 2026
040fe68
try to capture more output
iboyd-ansys Jul 9, 2026
0620dea
chore: adding changelog file 682.added.md [dependabot-skip]
pyansys-ci-bot Jul 9, 2026
adb20fe
try to get network diagnostics
iboyd-ansys Jul 13, 2026
2d8aee7
Merge branch 'ci-debug/licensing-logs-check' of https://github.com/an…
iboyd-ansys Jul 13, 2026
967bb90
now with 26.1 image
iboyd-ansys Jul 13, 2026
1779087
force failure to see debugging output
iboyd-ansys Jul 13, 2026
443365f
allow test to pass but hopefully see output & diagnostics too
iboyd-ansys Jul 13, 2026
53b80dc
another attempt at getting stdout
iboyd-ansys Jul 13, 2026
cb8a3b0
switch back to another run of latest
iboyd-ansys Jul 13, 2026
9fd83c9
quick check turning off docker bridge routing bypass
iboyd-ansys Jul 13, 2026
10a690b
undo last change
iboyd-ansys Jul 14, 2026
5b1243c
force workflow run
iboyd-ansys Jul 14, 2026
42fe405
diagnostic involving new LicensingCheck executable
iboyd-ansys Jul 15, 2026
10d048e
tweak for trigger build
iboyd-ansys Jul 15, 2026
4c16e4a
tweak to trigger build
iboyd-ansys Jul 15, 2026
dd44c62
allow switch between diff 'latest' images; more diagnostics
iboyd-ansys Jul 21, 2026
053b9eb
fix issue if version is None
iboyd-ansys Jul 21, 2026
6ed5504
try with 26.1.0
iboyd-ansys Jul 21, 2026
f4dfb40
try with new licensing variable
iboyd-ansys Jul 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion .github/actions/unit-test/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@ inputs:
description: 'Whether to upload coverage data to Codecov'
required: true
type: boolean
pytest-target:
description: 'Optional pytest node id (file::class::test) to run a subset'
required: false
default: ''
type: string

runs:
using: "composite"
Expand All @@ -23,10 +28,14 @@ runs:

- name: Unit testing
run: |
pytest -v --cov=ansys.systemcoupling --cov-report xml --cov-report html:cov_html --cov-report term:skip-covered --cov-config=.coveragerc
if [ -n "${PYTEST_TARGET}" ]; then
echo "Running targeted pytest node: ${PYTEST_TARGET}"
fi
pytest -v --cov=ansys.systemcoupling --cov-report xml --cov-report html:cov_html --cov-report term:skip-covered --cov-config=.coveragerc ${PYTEST_TARGET}
shell: bash
env:
SYC_IMAGE_TAG: ${{ inputs.image-tag }}
PYTEST_TARGET: ${{ inputs.pytest-target }}

- name: Upload coverage to Codecov
if: ${{ inputs.upload-coverage }}
Expand Down
249 changes: 206 additions & 43 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,30 @@ on:
- "*"
branches:
- main
- ci-debug/**
workflow_dispatch:
inputs:
run_mode:
description: "CI scope to run"
required: true
default: "full"
type: choice
options:
- full
- latest-only
latest_pytest_target:
description: "Optional pytest node id for latest-only (for example tests/test_session.py::test_example)"
required: false
default: ""
type: string

env:
MAIN_PYTHON_VERSION: "3.14"
MAIN_PYTHON_VERSION_DOC: "3.13" # Aim to remove this; currently Fluent doesn't support 3.14.
PACKAGE_NAME: "ansys-systemcoupling-core"
PACKAGE_NAMESPACE: "ansys.systemcoupling.core"
DOCUMENTATION_CNAME: "systemcoupling.docs.pyansys.com"
DOC_BUILD_SYC_VERSION: 26_1
DOC_BUILD_SYC_VERSION: 27_1
# Intermittent gRPC ping timeout issues seen with the 26.1 container.
# Pin the gRPC version for 261 doc and test and set channel options to
# try to avoid ping timeout issues. This is mainly seen in the long-running
Expand All @@ -30,7 +46,7 @@ env:
# 4. Keep ping response timeout permissive to avoid false negatives on long solves
PYSYC_GRPC_CHANNEL_OPTIONS_JSON_261: '{"grpc.keepalive_time_ms": 90000, "grpc.keepalive_timeout_ms": 2147483647, "grpc.keepalive_permit_without_calls": 0, "grpc.http2.max_pings_without_data": 0, "grpc.http2.min_time_between_pings_ms": 90000, "grpc.http2.min_ping_interval_without_data_ms": 90000}'
FLUENT_IMAGE_VERSION: "v25.2.0"
SYC_IMAGE_VERSION: "v26.1.0"
SYC_IMAGE_VERSION: "latest"
MAPDL_IMAGE_VERSION: "v25.2-ubuntu-cicd"

permissions: {} # Zero permissions can be granted at the workflow level if not all jobs require permissions.
Expand All @@ -44,6 +60,7 @@ jobs:

actions-security:
name: "Check actions security"
if: ${{ (github.event_name != 'workflow_dispatch' || github.event.inputs.run_mode == 'full') && !(github.event_name == 'push' && startsWith(github.ref, 'refs/heads/ci-debug/')) }}
runs-on: ubuntu-latest
steps:
- uses: ansys/actions/check-actions-security@a5b0351dc277d68c2dc1beca2d2674c7dfa4fc55 # v10.3.3
Expand All @@ -69,6 +86,7 @@ jobs:

doc-style:
name: "Documentation style check"
if: ${{ (github.event_name != 'workflow_dispatch' || github.event.inputs.run_mode == 'full') && !(github.event_name == 'push' && startsWith(github.ref, 'refs/heads/ci-debug/')) }}
runs-on: ubuntu-latest
steps:
- name: "PySystemCoupling documentation style checks"
Expand All @@ -79,6 +97,7 @@ jobs:

style:
name: Code style
if: ${{ (github.event_name != 'workflow_dispatch' || github.event.inputs.run_mode == 'full') && !(github.event_name == 'push' && startsWith(github.ref, 'refs/heads/ci-debug/')) }}
runs-on: ubuntu-latest
steps:
- name: PyAnsys code style checks
Expand All @@ -88,6 +107,7 @@ jobs:

smoke-tests:
name: Build and smoke tests
if: ${{ (github.event_name != 'workflow_dispatch' || github.event.inputs.run_mode == 'full') && !(github.event_name == 'push' && startsWith(github.ref, 'refs/heads/ci-debug/')) }}
needs: [style]
runs-on: ${{ matrix.os }}
strategy:
Expand All @@ -107,6 +127,7 @@ jobs:

check-vulnerabilities:
name: "Check library vulnerabilities"
if: ${{ (github.event_name != 'workflow_dispatch' || github.event.inputs.run_mode == 'full') && !(github.event_name == 'push' && startsWith(github.ref, 'refs/heads/ci-debug/')) }}
runs-on: ubuntu-latest
steps:
- uses: ansys/actions/check-vulnerabilities@a5b0351dc277d68c2dc1beca2d2674c7dfa4fc55 # v10.3.3
Expand All @@ -121,6 +142,7 @@ jobs:

build:
name: Build package, incl. API generation
if: ${{ (github.event_name != 'workflow_dispatch' || github.event.inputs.run_mode == 'full') && !(github.event_name == 'push' && startsWith(github.ref, 'refs/heads/ci-debug/')) }}
needs: [smoke-tests]
runs-on: ubuntu-latest

Expand Down Expand Up @@ -169,10 +191,10 @@ jobs:
with:
image-tag: v26.1.0

#- name: Generate API for latest
# uses: ./.github/actions/generate-api
# with:
# image-tag: latest
- name: Generate API for latest
uses: ./.github/actions/generate-api
with:
image-tag: latest

- name: Clean out dist
run: rm -rf dist
Expand All @@ -191,6 +213,7 @@ jobs:

test:
name: Testing
if: ${{ (github.event_name != 'workflow_dispatch' || github.event.inputs.run_mode == 'full') && !(github.event_name == 'push' && startsWith(github.ref, 'refs/heads/ci-debug/')) }}
needs: [build]
runs-on: ubuntu-latest

Expand Down Expand Up @@ -309,16 +332,156 @@ jobs:
echo "v26.1 unit tests failed on both attempts."
exit 1

#- name: Unit Test latest
# uses: ./.github/actions/unit-test
# with:
# image-tag: latest
# upload-coverage: false
# env:
# ANSYSLMD_LICENSE_FILE: "1055@${{ secrets.LICENSE_SERVER }}"
- name: Unit Test latest
id: unit_test_latest
uses: ./.github/actions/unit-test
with:
image-tag: latest
upload-coverage: false
pytest-target: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.latest_pytest_target || '' }}
env:
ANSYSLMD_LICENSE_FILE: "1055@${{ secrets.LICENSE_SERVER }}"

- name: Collect latest unit test licensing logs
if: always() && steps.unit_test_latest.outcome == 'failure'
run: |
mkdir -p ci-logs/licensing

find "${HOME}" -maxdepth 10 -type f \( -name 'licdebug*' -o -name 'anscl*' \) \
| tee ci-logs/licensing/found-files.txt || true

while IFS= read -r file; do
rel_path="${file#${HOME}/}"
dest="ci-logs/licensing/${rel_path}"
mkdir -p "$(dirname "${dest}")"
cp -f "${file}" "${dest}" || true
done < ci-logs/licensing/found-files.txt

- name: Upload latest unit test licensing logs
if: always() && steps.unit_test_latest.outcome == 'failure'
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: latest-unit-test-licensing-logs
path: ci-logs/licensing/**
retention-days: 7
if-no-files-found: warn

build-latest-only:
name: Build package (latest only)
if: ${{ (github.event_name == 'workflow_dispatch' && github.event.inputs.run_mode == 'latest-only') || (github.event_name == 'push' && startsWith(github.ref, 'refs/heads/ci-debug/')) }}
runs-on: ubuntu-latest
env:
DEBUG_IMAGE_TAG: "latest_with_licensing"

steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false

- name: Setup Python
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
with:
python-version: ${{ env.MAIN_PYTHON_VERSION }}

- name: Create initial wheel and install
run: make build-install

- name: Login to GitHub Container Registry
uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4.2.0
with:
registry: ghcr.io
username: ${{ secrets.PYANSYS_CI_BOT_USERNAME }}
password: ${{ secrets.PYANSYS_CI_BOT_TOKEN }}

- name: Generate API for debug image
uses: ./.github/actions/generate-api
with:
image-tag: ${{ env.DEBUG_IMAGE_TAG }}

- name: Clean out dist
run: rm -rf dist

- name: Build library source and wheel artifacts
uses: ./.github/actions/build-library
with:
checkout: false
library-name: ${{ env.PACKAGE_NAME }}
python-version: ${{ env.MAIN_PYTHON_VERSION }}

test-latest-only:
name: Testing (latest only)
if: ${{ (github.event_name == 'workflow_dispatch' && github.event.inputs.run_mode == 'latest-only') || (github.event_name == 'push' && startsWith(github.ref, 'refs/heads/ci-debug/')) }}
needs: [build-latest-only]
runs-on: ubuntu-latest
env:
DEBUG_IMAGE_TAG: "latest_with_licensing"

steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false

- name: Setup Python
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
with:
python-version: ${{ env.MAIN_PYTHON_VERSION }}

- name: Download package
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
name: ${{ env.PACKAGE_NAME }}-artifacts
path: dist

- name: Install pysystemcoupling with test dependencies
run: |
wheel_name=`echo dist/*.whl`
pip install -q --force-reinstall ${wheel_name}[tests] > /dev/null

- name: Login to GitHub Container Registry
uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4.2.0
with:
registry: ghcr.io
username: ${{ secrets.GH_USERNAME }}
password: ${{ secrets.PYANSYS_CI_BOT_TOKEN }}

- name: Unit Test debug image
id: unit_test_latest
uses: ./.github/actions/unit-test
with:
image-tag: ${{ env.DEBUG_IMAGE_TAG }}
upload-coverage: false
pytest-target: "tests/test_mocksolve_container.py::test_partlib_cosim_volume_simple"
env:
ANSYSLMD_LICENSE_FILE: "1055@${{ secrets.LICENSE_SERVER }}"
PYTEST_ADDOPTS: "-s"

- name: Collect latest unit test licensing logs
if: always()
run: |
mkdir -p ci-logs/licensing

find "${HOME}" -maxdepth 10 -type f \( -name 'licdebug*' -o -name 'ansyscl*' \) \
| tee ci-logs/licensing/found-files.txt || true

while IFS= read -r file; do
rel_path="${file#${HOME}/}"
dest="ci-logs/licensing/${rel_path}"
mkdir -p "$(dirname "${dest}")"
cp -f "${file}" "${dest}" || true
done < ci-logs/licensing/found-files.txt

- name: Upload latest unit test licensing logs
if: always()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: latest-unit-test-licensing-logs
path: ci-logs/licensing/**
retention-days: 7
if-no-files-found: warn

docs:
name: Build Documentation
if: ${{ (github.event_name != 'workflow_dispatch' || github.event.inputs.run_mode == 'full') && !(github.event_name == 'push' && startsWith(github.ref, 'refs/heads/ci-debug/')) }}
needs: [doc-style, build]
runs-on: public-ubuntu-latest-8-cores
permissions:
Expand All @@ -345,19 +508,19 @@ jobs:
wheel_name=`echo dist/*.whl`
pip install -q --force-reinstall ${wheel_name}[doc] > /dev/null

- name: Pin grpcio for docs build (v26.1)
run: |
pip install -q --force-reinstall grpcio==${GRPCIO_VERSION_261} grpcio-status==${GRPCIO_VERSION_261} grpcio-health-checking==${GRPCIO_VERSION_261} > /dev/null
python - <<'PY'
import grpc
import grpc_status
import grpc_health
print(f"grpcio version: {grpc.__version__}")
print(f"grpcio-status module: {grpc_status.__name__}")
print(f"grpcio-health-checking module: {grpc_health.__name__}")
PY
env:
GRPCIO_VERSION_261: ${{ env.GRPCIO_VERSION_261 }}
# - name: Pin grpcio for docs build (v26.1)
# run: |
# pip install -q --force-reinstall grpcio==${GRPCIO_VERSION_261} grpcio-status==${GRPCIO_VERSION_261} grpcio-health-checking==${GRPCIO_VERSION_261} > /dev/null
# python - <<'PY'
# import grpc
# import grpc_status
# import grpc_health
# print(f"grpcio version: {grpc.__version__}")
# print(f"grpcio-status module: {grpc_status.__name__}")
# print(f"grpcio-health-checking module: {grpc_health.__name__}")
# PY
# env:
# GRPCIO_VERSION_261: ${{ env.GRPCIO_VERSION_261 }}

- name: Docker Login
uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4.2.0
Expand All @@ -381,7 +544,7 @@ jobs:
env:
SYC_IMAGE_VERSION: ${{ env.SYC_IMAGE_VERSION }}
FLUENT_IMAGE_VERSION: ${{ env.FLUENT_IMAGE_VERSION }}
MAPDL_IMAGE_VESRION: ${{ env.MAPDL_IMAGE_VERSION }}
MAPDL_IMAGE_VERSION: ${{ env.MAPDL_IMAGE_VERSION }}

- name: Diagnostic - effective gRPC options for docs build
run: |
Expand Down Expand Up @@ -504,22 +667,22 @@ jobs:
# path: doc/_build/latex/*.pdf
# retention-days: 7

upload_dev_docs:
name: Upload dev documentation
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
needs: [docs]
permissions:
contents: write # Required for package upload
steps:
- name: Deploy the latest documentation
uses: ansys/actions/doc-deploy-dev@a5b0351dc277d68c2dc1beca2d2674c7dfa4fc55 # v10.3.3
with:
cname: ${{ env.DOCUMENTATION_CNAME }}
token: ${{ secrets.GITHUB_TOKEN }}
bot-user: ${{ secrets.PYANSYS_CI_BOT_USERNAME }}
bot-email: ${{ secrets.PYANSYS_CI_BOT_EMAIL }}
doc-artifact-name: "documentation-html"
# upload_dev_docs:
# name: Upload dev documentation
# if: github.ref == 'refs/heads/main'
# runs-on: ubuntu-latest
# needs: [docs]
# permissions:
# contents: write # Required for package upload
# steps:
# - name: Deploy the latest documentation
# uses: ansys/actions/doc-deploy-dev@a5b0351dc277d68c2dc1beca2d2674c7dfa4fc55 # v10.3.3
# with:
# cname: ${{ env.DOCUMENTATION_CNAME }}
# token: ${{ secrets.GITHUB_TOKEN }}
# bot-user: ${{ secrets.PYANSYS_CI_BOT_USERNAME }}
# bot-email: ${{ secrets.PYANSYS_CI_BOT_EMAIL }}
# doc-artifact-name: "documentation-html"

release:
name: Release project
Expand Down
1 change: 1 addition & 0 deletions doc/changelog.d/681.maintenance.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Chore: build using \"latest\" container
1 change: 1 addition & 0 deletions doc/changelog.d/682.added.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
TEMP: debug licensing issue
1 change: 1 addition & 0 deletions doc/styles/config/vocabularies/ANSYS/accept.txt
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ SCP
solution_control
Synopsys
synopsys
thirdparty
THIRDPARTY
Windows
Windows Subsystem
Expand Down
Loading
Loading