Skip to content

feat: find and fix edges (short, split, extra) #7862

feat: find and fix edges (short, split, extra)

feat: find and fix edges (short, split, extra) #7862

Workflow file for this run

name: GitHub CI
on:
pull_request:
push:
branches:
- blitz
env:
MAIN_PYTHON_VERSION: '3.12'
PACKAGE_NAME: 'ansys-geometry-core'
DOCUMENTATION_CNAME: 'geometry.docs.pyansys.com'
ANSRV_GEO_IMAGE: 'ghcr.io/ansys/geometry'
ANSRV_GEO_IMAGE_DOCS_TAG: ghcr.io/ansys/geometry:windows-latest
ANSRV_GEO_PORT: 700
ANSRV_GEO_LICENSE_SERVER: ${{ secrets.LICENSE_SERVER }}
GEO_CONT_NAME: ans_geo
RESET_IMAGE_CACHE: 4
IS_WORKFLOW_RUNNING: True
ARTIFACTORY_VERSION: v252
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
vulnerabilities:
name: Vulnerabilities
runs-on: ubuntu-latest
steps:
- uses: ansys/actions/check-vulnerabilities@v8
with:
python-version: ${{ env.MAIN_PYTHON_VERSION }}
python-package-name: ${{ env.PACKAGE_NAME }}
token: ${{ secrets.PYANSYS_CI_BOT_TOKEN }}
dev-mode: ${{ github.ref != 'refs/heads/main' }}
pr-name:
if: github.event_name == 'pull_request'
name: Check the name of the PR
runs-on: ubuntu-latest
steps:
- name: Check commit name
uses: ansys/actions/check-pr-title@v8
with:
token: ${{ secrets.GITHUB_TOKEN }}
docs-style:
name: Documentation Style Check
runs-on: ubuntu-latest
steps:
- name: PyAnsys documentation style checks
uses: ansys/actions/doc-style@v8
with:
token: ${{ secrets.GITHUB_TOKEN }}
docker-style:
name: Docker Style Check
runs-on: ubuntu-latest
steps:
- name: PyAnsys documentation style checks
uses: ansys/actions/docker-style@v8
with:
directory: docker
recursive: true
manifests:
name: Check Docker manifests
runs-on: ubuntu-latest
outputs:
skip_dms: ${{ steps.services.outputs.skip_dms }}
skip_core_windows: ${{ steps.services.outputs.skip_core_windows }}
skip_core_linux: ${{ steps.services.outputs.skip_core_linux }}
strategy:
matrix:
include:
- container-stable: "windows-latest"
container-unstable: "windows-latest-unstable"
service: "dms"
service-name: "Windows DMS"
- container-stable: "core-windows-latest"
container-unstable: "core-windows-latest-unstable"
service: "core_windows"
service-name: "Windows Core Service"
- container-stable: "core-linux-latest"
container-unstable: "core-linux-latest-unstable"
service: "core_linux"
service-name: "Linux Core Service"
steps:
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Check ${{ matrix.service-name }} manifest
id: services
run: |
docker manifest inspect ghcr.io/ansys/geometry:${{ matrix.container-stable }} > ${{ matrix.container-stable }}.json
docker manifest inspect ghcr.io/ansys/geometry:${{ matrix.container-unstable }} > ${{ matrix.container-unstable }}.json || true
# Verify that the unstable manifest exists - otherwise create an empty file
if [ ! -f ${{ matrix.container-unstable }}.json ]; then
touch ${{ matrix.container-unstable }}.json
fi
# Check if the manifests are the same (and if so, create an output that will skip the next job)
if diff ${{ matrix.container-stable }}.json ${{ matrix.container-unstable }}.json; then
echo "${{ matrix.service-name }} container manifests are the same... skipping"
echo "skip_${{ matrix.service }}=1" >> "$GITHUB_OUTPUT"
else
echo "${{ matrix.service-name }} container manifests are different"
echo "skip_${{ matrix.service }}=0" >> "$GITHUB_OUTPUT"
fi
# =================================================================================================
# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv RUNNING ON SELF-HOSTED RUNNER vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
# =================================================================================================
testing-windows:
name: Testing and coverage (Windows)
needs: [manifests]
# runs-on: [self-hosted, Windows, pygeometry]
runs-on: # TODO: Waiting for ansys-network runner to be updated
group: pyansys-self-hosted
labels: [self-hosted, Windows, pygeometry-blitz]
continue-on-error: ${{ matrix.experimental }}
env:
SKIP_UNSTABLE: false
PYVISTA_OFF_SCREEN: true
strategy:
fail-fast: false
matrix:
include:
- docker-image: "windows-latest"
experimental: false
- docker-image: "windows-latest-unstable"
experimental: true
- docker-image: "core-windows-latest"
experimental: false
- docker-image: "core-windows-latest-unstable"
experimental: true
steps:
- name: Calculate SKIP_UNSTABLE
if: matrix.experimental
run: |
# Choose the manifests output to consider (for DMS or Core service)
# based on the matrix value
if ("${{ matrix.docker-image }}" -eq "windows-latest-unstable") {
$ImagesAreEqual = ${{ needs.manifests.outputs.skip_dms }}
} elseif ("${{ matrix.docker-image }}" -eq "core-windows-latest-unstable") {
$ImagesAreEqual = ${{ needs.manifests.outputs.skip_core_windows }}
} else {
Write-Output "Unknown docker image"
exit 1
}
$A = $env:SKIP_UNSTABLE_CONTAINERS_TEMPORARILY -eq 1
$B = $ImagesAreEqual -eq 1
# Calculate the logical expression
$Result = ($A -or $B).ToString().ToLower()
# Export it as an environment variable with true/false value
Write-Output "SKIP_UNSTABLE=$Result" | Out-File -FilePath $env:GITHUB_ENV -Append
Write-Output "SKIP_UNSTABLE will be: $Result"
- uses: actions/checkout@v4
if: env.SKIP_UNSTABLE == 'false'
- name: Set up Python
if: env.SKIP_UNSTABLE == 'false'
uses: actions/setup-python@v5
with:
python-version: ${{ env.MAIN_PYTHON_VERSION }}
- name: Set up headless display
if: env.SKIP_UNSTABLE == 'false'
uses: pyvista/setup-headless-display-action@v3
with:
pyvista: false
- name: Create Python venv
if: env.SKIP_UNSTABLE == 'false'
run: |
python -m venv .venv
.\.venv\Scripts\Activate.ps1
- name: Install packages for testing
if: env.SKIP_UNSTABLE == 'false'
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
if: env.SKIP_UNSTABLE == 'false'
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Download Geometry service container (if needed)
if: env.SKIP_UNSTABLE == 'false'
run: docker pull ${{ env.ANSRV_GEO_IMAGE }}:${{ matrix.docker-image }}
- name: Check location of self-hosted runner and define license server accordingly
if: env.SKIP_UNSTABLE == 'false' && runner.name == 'pygeometry-ci-2'
run:
echo "ANSRV_GEO_LICENSE_SERVER=${{ secrets.INTERNAL_LICENSE_SERVER }}" | Out-File -FilePath $env:GITHUB_ENV -Append
- name: Stop any running containers
run: |
$dockerContainers = docker ps -a -q
if (-not [string]::IsNullOrEmpty($dockerContainers)) {
docker stop $dockerContainers
docker rm $dockerContainers
}
- name: Start Geometry service and verify start
if: env.SKIP_UNSTABLE == 'false'
run: |
.\.venv\Scripts\Activate.ps1
docker run --detach --name ${{ env.GEO_CONT_NAME }} -e LICENSE_SERVER=${{ env.ANSRV_GEO_LICENSE_SERVER }} -p ${{ env.ANSRV_GEO_PORT }}:50051 ${{ env.ANSRV_GEO_IMAGE }}:${{ matrix.docker-image }}
python -c "from ansys.geometry.core.connection.validate import validate; validate()"
- name: Restore images cache
if: env.SKIP_UNSTABLE == 'false'
uses: actions/cache@v4
with:
path: .\tests\integration\image_cache
key: pyvista-image-cache-${{ runner.name }}-v-${{ env.RESET_IMAGE_CACHE }}-${{ hashFiles('pyproject.toml') }}
restore-keys: pyvista-image-cache-${{ runner.name }}-v-${{ env.RESET_IMAGE_CACHE }}
- name: Testing
if: env.SKIP_UNSTABLE == 'false'
run: |
.\.venv\Scripts\Activate.ps1
pytest -v
- name: Upload integration test logs
if: always()
uses: actions/upload-artifact@v4
with:
name: integration-test-logs-${{ matrix.docker-image }}
path: tests/integration/logs
retention-days: 7
- name: Upload PyVista generated images (cache and results)
if: always()
uses: actions/upload-artifact@v4
with:
name: pytest-pyvista-images-${{ matrix.docker-image }}
path: tests/integration/image_cache
retention-days: 7
- name: Upload Coverage Results
if: always()
uses: actions/upload-artifact@v4
with:
include-hidden-files: true
name: coverage-html-${{ matrix.docker-image }}
path: .cov/html
retention-days: 7
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
if: matrix.docker-image == 'windows-latest'
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
with:
files: .cov/xml
- name: Stop the Geometry service
if: always()
run: |
if ( "${{ env.SKIP_UNSTABLE }}" -match 'false')
{
docker stop ${{ env.GEO_CONT_NAME }}
docker logs ${{ env.GEO_CONT_NAME }}
docker rm ${{ env.GEO_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
}
- name: Clean all Docker dangling images
if: always()
run: docker image prune -f
# =================================================================================================
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ RUNNING ON SELF-HOSTED RUNNER ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# =================================================================================================
testing-linux:
name: Testing and coverage (Linux)
needs: [manifests]
runs-on: ubuntu-latest
continue-on-error: ${{ matrix.experimental }}
env:
SKIP_UNSTABLE: false
strategy:
fail-fast: false
matrix:
include:
- docker-image: "core-linux-latest"
experimental: false
- docker-image: "core-linux-latest-unstable"
experimental: true
steps:
- name: Calculate SKIP_UNSTABLE
if: matrix.experimental
run: |
# Choose the manifests output to consider (for Core service)
# based on the matrix value
if [[ "${{ matrix.docker-image }}" == "core-linux-latest-unstable" ]]; then
ImagesAreEqual=${{ needs.manifests.outputs.skip_core_linux }}
else
echo "Unknown docker image"
exit 1
fi
A=$([[ "$SKIP_UNSTABLE_CONTAINERS_TEMPORARILY" == "1" ]] && echo true || echo false)
B=$([[ "$ImagesAreEqual" == "1" ]] && echo true || echo false)
# Calculate the logical expression
Result=$([[ "$A" == true || "$B" == true ]] && echo true || echo false)
# Export it as an environment variable with true/false value
echo "SKIP_UNSTABLE=$Result" >> $GITHUB_ENV
echo "SKIP_UNSTABLE will be: $Result"
- name: Login in Github Container registry
if: env.SKIP_UNSTABLE == 'false'
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Pull and launch geometry service
if: env.SKIP_UNSTABLE == 'false'
run: |
docker pull ${{ env.ANSRV_GEO_IMAGE }}:${{ matrix.docker-image }}
docker run --detach --name ${{ env.GEO_CONT_NAME }} -e LICENSE_SERVER=${{ env.ANSRV_GEO_LICENSE_SERVER }} -p ${{ env.ANSRV_GEO_PORT }}:50051 ${{ env.ANSRV_GEO_IMAGE }}:${{ matrix.docker-image }}
- name: Checkout repository
if: env.SKIP_UNSTABLE == 'false'
uses: actions/checkout@v4
- name: Restore images cache
if: env.SKIP_UNSTABLE == 'false'
uses: actions/cache@v4
with:
path: tests/integration/image_cache
key: pyvista-image-cache-${{ runner.os }}-v-${{ env.RESET_IMAGE_CACHE }}-${{ hashFiles('pyproject.toml') }}
restore-keys: pyvista-image-cache-${{ runner.os }}-v-${{ env.RESET_IMAGE_CACHE }}
- name: Run pytest
if: env.SKIP_UNSTABLE == 'false'
uses: ansys/actions/tests-pytest@v8
env:
ALLOW_PLOTTING: true
with:
python-version: ${{ env.MAIN_PYTHON_VERSION }}
checkout: false
- name: Upload integration test logs
if: always()
uses: actions/upload-artifact@v4
with:
name: integration-test-logs-${{ matrix.docker-image }}
path: tests/integration/logs
retention-days: 7
- name: Upload PyVista generated images (cache and results)
if: always()
uses: actions/upload-artifact@v4
with:
name: pytest-pyvista-images-${{ matrix.docker-image }}
path: tests/integration/image_cache
retention-days: 7
- name: Stop the Geometry service
if: always()
run: |
if [[ ${{ env.SKIP_UNSTABLE }} == 'false' ]];
then
docker stop ${{ env.GEO_CONT_NAME }}
docker logs ${{ env.GEO_CONT_NAME }}
docker rm ${{ env.GEO_CONT_NAME }}
fi
package:
name: Package library
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 }}