Skip to content

Commit 67941f8

Browse files
authored
Merge branch 'main' into feat/chamfer
2 parents a01dbbf + bcf4f99 commit 67941f8

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+839
-592
lines changed

.github/workflows/dependabot_automerge.yml renamed to .github/workflows/automerge_prs.yml

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Dependabot auto-merge
1+
name: Automerge PRs (dependabot and pre-commit)
22
on: pull_request
33

44
permissions:
@@ -8,7 +8,6 @@ permissions:
88
jobs:
99
dependabot:
1010
runs-on: ubuntu-latest
11-
# Only run this workflow for branches starting with "dependabot/"
1211
if: startsWith(github.head_ref, 'dependabot/')
1312
steps:
1413
- name: Dependabot metadata
@@ -29,3 +28,25 @@ jobs:
2928
env:
3029
PR_URL: ${{github.event.pull_request.html_url}}
3130
GH_TOKEN: ${{ secrets.PYANSYS_CI_BOT_TOKEN }}
31+
32+
pre-commit:
33+
runs-on: ubuntu-latest
34+
if: startsWith(github.head_ref, 'pre-commit-ci-update-config')
35+
steps:
36+
- name: Assign PR to pyansys-ci-bot
37+
run: gh pr edit --add-assignee pyansys-ci-bot "$PR_URL"
38+
env:
39+
PR_URL: ${{github.event.pull_request.html_url}}
40+
GH_TOKEN: ${{ secrets.PYANSYS_CI_BOT_TOKEN }}
41+
42+
- name: Approve a PR
43+
run: gh pr review --approve "$PR_URL"
44+
env:
45+
PR_URL: ${{github.event.pull_request.html_url}}
46+
GH_TOKEN: ${{ secrets.PYANSYS_CI_BOT_TOKEN }}
47+
48+
- name: Enable auto-merge
49+
run: gh pr merge --auto --squash "$PR_URL"
50+
env:
51+
PR_URL: ${{github.event.pull_request.html_url}}
52+
GH_TOKEN: ${{ secrets.PYANSYS_CI_BOT_TOKEN }}

.github/workflows/ci_cd.yml

Lines changed: 96 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,17 @@ on:
99
- main
1010

1111
env:
12-
MAIN_PYTHON_VERSION: '3.12'
12+
MAIN_PYTHON_VERSION: '3.13'
1313
PACKAGE_NAME: 'ansys-geometry-core'
1414
DOCUMENTATION_CNAME: 'geometry.docs.pyansys.com'
1515
ANSRV_GEO_IMAGE: 'ghcr.io/ansys/geometry'
16-
ANSRV_GEO_IMAGE_WINDOWS_TAG: ghcr.io/ansys/geometry:windows-latest
16+
ANSRV_GEO_IMAGE_DOCS_TAG: ghcr.io/ansys/geometry:windows-latest
1717
ANSRV_GEO_PORT: 700
1818
ANSRV_GEO_LICENSE_SERVER: ${{ secrets.LICENSE_SERVER }}
1919
GEO_CONT_NAME: ans_geo
2020
RESET_IMAGE_CACHE: 4
2121
IS_WORKFLOW_RUNNING: True
22-
ARTIFACTORY_VERSION: v251
22+
ARTIFACTORY_VERSION: v252
2323

2424
concurrency:
2525
group: ${{ github.workflow }}-${{ github.ref }}
@@ -78,7 +78,7 @@ jobs:
7878
fail-fast: false
7979
matrix:
8080
os: [ubuntu-latest, windows-latest, macos-latest]
81-
python-version: ['3.10', '3.11', '3.12']
81+
python-version: ['3.10', '3.11', '3.12', '3.13']
8282
should-release:
8383
- ${{ github.event_name == 'push' && contains(github.ref, 'refs/tags') }}
8484
exclude:
@@ -109,7 +109,10 @@ jobs:
109109
testing-windows:
110110
name: Testing and coverage (Windows)
111111
needs: [smoke-tests]
112-
runs-on: [self-hosted, Windows, pygeometry]
112+
# runs-on: [self-hosted, Windows, pygeometry]
113+
runs-on: # TODO: Waiting for ansys-network runner to be updated
114+
group: pyansys-self-hosted
115+
labels: [self-hosted, Windows, pygeometry]
113116
continue-on-error: ${{ matrix.experimental }}
114117
env:
115118
SKIP_UNSTABLE: ${{ vars.SKIP_UNSTABLE_CONTAINERS_TEMPORARILY == 1 && matrix.experimental }}
@@ -122,6 +125,10 @@ jobs:
122125
experimental: false
123126
- docker-image: "windows-latest-unstable"
124127
experimental: true
128+
- docker-image: "core-windows-latest"
129+
experimental: false
130+
- docker-image: "core-windows-latest-unstable"
131+
experimental: true
125132

126133
steps:
127134
- uses: actions/checkout@v4
@@ -135,7 +142,7 @@ jobs:
135142

136143
- name: Set up headless display
137144
if: env.SKIP_UNSTABLE == 'false'
138-
uses: pyvista/setup-headless-display-action@v2
145+
uses: pyvista/setup-headless-display-action@v3
139146
with:
140147
pyvista: false
141148

@@ -170,6 +177,14 @@ jobs:
170177
run:
171178
echo "ANSRV_GEO_LICENSE_SERVER=${{ secrets.INTERNAL_LICENSE_SERVER }}" | Out-File -FilePath $env:GITHUB_ENV -Append
172179

180+
- name: Stop any running containers
181+
run: |
182+
$dockerContainers = docker ps -a -q
183+
if (-not [string]::IsNullOrEmpty($dockerContainers)) {
184+
docker stop $dockerContainers
185+
docker rm $dockerContainers
186+
}
187+
173188
- name: Start Geometry service and verify start
174189
if: env.SKIP_UNSTABLE == 'false'
175190
run: |
@@ -227,11 +242,11 @@ jobs:
227242
- name: Stop the Geometry service
228243
if: always()
229244
run: |
230-
if ( $env:SKIP_UNSTABLE -match 'false')
245+
if ( "${{ env.SKIP_UNSTABLE }}" -match 'false')
231246
{
232-
docker stop $env:GEO_CONT_NAME
233-
docker logs $env:GEO_CONT_NAME
234-
docker rm $env:GEO_CONT_NAME
247+
docker stop ${{ env.GEO_CONT_NAME }}
248+
docker logs ${{ env.GEO_CONT_NAME }}
249+
docker rm ${{ env.GEO_CONT_NAME }}
235250
}
236251
237252
- name: Stop any remaining containers
@@ -254,7 +269,7 @@ jobs:
254269
PYVISTA_OFF_SCREEN: true
255270
steps:
256271
- name: Set up headless display
257-
uses: pyvista/setup-headless-display-action@v2
272+
uses: pyvista/setup-headless-display-action@v3
258273
with:
259274
pyvista: false
260275

@@ -266,15 +281,23 @@ jobs:
266281
password: ${{ secrets.GITHUB_TOKEN }}
267282

268283
- name: Download Geometry service container (if needed)
269-
run: docker pull $env:ANSRV_GEO_IMAGE_WINDOWS_TAG
284+
run: docker pull ${{ env.ANSRV_GEO_IMAGE_DOCS_TAG }}
270285

271286
- name: Check location of self-hosted runner and define license server accordingly
272287
if: runner.name == 'pygeometry-ci-2'
273288
run:
274289
echo "ANSRV_GEO_LICENSE_SERVER=${{ secrets.INTERNAL_LICENSE_SERVER }}" | Out-File -FilePath $env:GITHUB_ENV -Append
275290

291+
- name: Stop any running containers
292+
run: |
293+
$dockerContainers = docker ps -a -q
294+
if (-not [string]::IsNullOrEmpty($dockerContainers)) {
295+
docker stop $dockerContainers
296+
docker rm $dockerContainers
297+
}
298+
276299
- name: Start Geometry service and verify start
277-
run: 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_WINDOWS_TAG }}
300+
run: 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_DOCS_TAG }}
278301

279302
- name: Run Ansys documentation building action
280303
uses: ansys/actions/doc-build@v8
@@ -286,9 +309,9 @@ jobs:
286309
- name: Stop the Geometry service
287310
if: always()
288311
run: |
289-
docker stop $env:GEO_CONT_NAME
290-
docker logs $env:GEO_CONT_NAME
291-
docker rm $env:GEO_CONT_NAME
312+
docker stop ${{ env.GEO_CONT_NAME }}
313+
docker logs ${{ env.GEO_CONT_NAME }}
314+
docker rm ${{ env.GEO_CONT_NAME }}
292315
293316
- name: Stop any remaining containers
294317
if: always()
@@ -315,9 +338,9 @@ jobs:
315338
fail-fast: false
316339
matrix:
317340
include:
318-
- docker-image: "linux-latest"
341+
- docker-image: "core-linux-latest"
319342
experimental: false
320-
- docker-image: "linux-latest-unstable"
343+
- docker-image: "core-linux-latest-unstable"
321344
experimental: true
322345

323346
steps:
@@ -387,11 +410,11 @@ jobs:
387410
needs: [smoke-tests]
388411
runs-on: ubuntu-latest
389412
env:
390-
ANSRV_GEO_IMAGE_MINREQS: 'ghcr.io/ansys/geometry:linux-latest'
413+
ANSRV_GEO_IMAGE_MINREQS: 'ghcr.io/ansys/geometry:core-linux-latest'
391414
strategy:
392415
fail-fast: false
393416
matrix:
394-
python-version: ['3.10', '3.11', '3.12']
417+
python-version: ['3.10', '3.11', '3.12', '3.13']
395418
steps:
396419
- name: Login in Github Container registry
397420
uses: docker/login-action@v3
@@ -465,8 +488,9 @@ jobs:
465488
- name: Download binaries (if conditions met)
466489
if: env.REUSE_LAST_ARTIFACTS == 'false'
467490
run: |
468-
curl.exe -X GET -H "X-JFrog-Art-Api: ${{ secrets.ARTIFACTORY_KEY }}" ${{ secrets.ARTIFACTORY_URL }}/${{ env.ARTIFACTORY_VERSION }}/DockerWindows.zip --output windows-binaries.zip
469-
curl.exe -X GET -H "X-JFrog-Art-Api: ${{ secrets.ARTIFACTORY_KEY }}" ${{ secrets.ARTIFACTORY_URL }}/${{ env.ARTIFACTORY_VERSION }}/DockerLinux.zip --output linux-binaries.zip
491+
curl.exe -X GET -H "X-JFrog-Art-Api: ${{ secrets.ARTIFACTORY_KEY }}" ${{ secrets.ARTIFACTORY_URL }}/${{ env.ARTIFACTORY_VERSION }}/DockerWindows.zip --output windows-dms-binaries.zip
492+
curl.exe -X GET -H "X-JFrog-Art-Api: ${{ secrets.ARTIFACTORY_KEY }}" ${{ secrets.ARTIFACTORY_URL }}/${{ env.ARTIFACTORY_VERSION }}/DockerCoreWindows.zip --output windows-core-binaries.zip
493+
curl.exe -X GET -H "X-JFrog-Art-Api: ${{ secrets.ARTIFACTORY_KEY }}" ${{ secrets.ARTIFACTORY_URL }}/${{ env.ARTIFACTORY_VERSION }}/DockerCoreLinux.zip --output linux-core-binaries.zip
470494
471495
- name: Reuse last binaries (if conditions met)
472496
if: env.REUSE_LAST_ARTIFACTS == 'true'
@@ -485,21 +509,29 @@ jobs:
485509
git lfs fetch origin --include="$env:PREVIOUS_VERSION/*"
486510
git lfs checkout $env:PREVIOUS_VERSION
487511
# Copy the binaries from the previous version
488-
cp ./$env:PREVIOUS_VERSION/windows-binaries.zip windows-binaries.zip
489-
cp ./$env:PREVIOUS_VERSION/linux-binaries.zip linux-binaries.zip
512+
cp ./$env:PREVIOUS_VERSION/windows-dms-binaries.zip windows-dms-binaries.zip
513+
cp ./$env:PREVIOUS_VERSION/windows-core-binaries.zip windows-core-binaries.zip
514+
cp ./$env:PREVIOUS_VERSION/linux-core-binaries.zip linux-core-binaries.zip
515+
516+
- name: Upload DMS Windows binaries as workflow artifacts
517+
uses: actions/upload-artifact@v4
518+
with:
519+
name: windows-dms-binaries.zip
520+
path: windows-dms-binaries.zip
521+
retention-days: 1
490522

491-
- name: Upload Windows binaries as workflow artifacts
523+
- name: Upload Linux Core service binaries as workflow artifacts
492524
uses: actions/upload-artifact@v4
493525
with:
494-
name: windows-binaries.zip
495-
path: windows-binaries.zip
526+
name: linux-core-binaries.zip
527+
path: linux-core-binaries.zip
496528
retention-days: 1
497529

498-
- name: Upload Linux binaries as workflow artifacts
530+
- name: Upload Windows Core service binaries as workflow artifacts
499531
uses: actions/upload-artifact@v4
500532
with:
501-
name: linux-binaries.zip
502-
path: linux-binaries.zip
533+
name: windows-core-binaries.zip
534+
path: windows-core-binaries.zip
503535
retention-days: 1
504536

505537
- name: Publish the binaries to private repo
@@ -509,8 +541,9 @@ jobs:
509541
$env:VERSION=$env:VERSION_WITH_PREFIX.substring(1)
510542
mkdir $env:VERSION -ErrorAction SilentlyContinue
511543
Remove-Item -Recurse -Force .\$env:VERSION\*
512-
mv windows-binaries.zip .\$env:VERSION\
513-
mv linux-binaries.zip .\$env:VERSION\
544+
mv windows-dms-binaries.zip .\$env:VERSION\
545+
mv windows-core-binaries.zip .\$env:VERSION\
546+
mv linux-core-binaries.zip .\$env:VERSION\
514547
git config user.email ${{ secrets.BINARIES_EMAIL }}
515548
git config user.name ${{ secrets.BINARIES_USERNAME }}
516549
git add *
@@ -519,8 +552,19 @@ jobs:
519552
520553
build-windows-container:
521554
name: Building Geometry Service - Windows
522-
runs-on: [self-hosted, Windows, pygeometry]
555+
# runs-on: [self-hosted, Windows, pygeometry]
556+
runs-on: # TODO: Waiting for ansys-network runner to be updated
557+
group: pyansys-self-hosted
558+
labels: [self-hosted, Windows, pygeometry]
523559
needs: [fetch-release-artifacts]
560+
strategy:
561+
fail-fast: false
562+
matrix:
563+
include:
564+
- mode: "dms"
565+
zip-file: "windows-dms-binaries.zip"
566+
- mode: "coreservice"
567+
zip-file: "windows-core-binaries.zip"
524568
steps:
525569
- name: Checkout repository
526570
uses: actions/checkout@v4
@@ -530,16 +574,16 @@ jobs:
530574
with:
531575
python-version: ${{ env.MAIN_PYTHON_VERSION }}
532576

533-
- name: Download Windows binaries
577+
- name: Download Windows binaries for ${{ matrix.mode }}
534578
uses: actions/download-artifact@v4
535579
with:
536-
name: windows-binaries.zip
537-
path: docker/windows-binaries.zip
580+
name: ${{ matrix.zip-file }}
581+
path: docker/${{ matrix.zip-file }}
538582

539583
- name: Build Docker image
540584
working-directory: docker
541585
run: |
542-
docker build -f windows/Dockerfile -t ghcr.io/ansys/geometry:windows-latest-tmp .
586+
docker build -f windows/${{ matrix.mode }}/Dockerfile -t ghcr.io/ansys/geometry:windows-tmp .
543587
544588
- name: Check location of self-hosted runner and define license server accordingly
545589
if: runner.name == 'pygeometry-ci-2'
@@ -548,7 +592,7 @@ jobs:
548592

549593
- name: Launch Geometry service
550594
run: |
551-
docker run --detach --name ${{ env.GEO_CONT_NAME }} -e LICENSE_SERVER=${{ env.ANSRV_GEO_LICENSE_SERVER }} -p ${{ env.ANSRV_GEO_PORT }}:50051 ghcr.io/ansys/geometry:windows-latest-tmp
595+
docker run --detach --name ${{ env.GEO_CONT_NAME }} -e LICENSE_SERVER=${{ env.ANSRV_GEO_LICENSE_SERVER }} -p ${{ env.ANSRV_GEO_PORT }}:50051 ghcr.io/ansys/geometry:windows-tmp
552596
553597
- name: Validate connection using PyAnsys Geometry
554598
run: |
@@ -573,14 +617,14 @@ jobs:
573617
- name: "Compressing Windows Dockerfile"
574618
uses: vimtor/[email protected]
575619
with:
576-
files: docker/windows/Dockerfile
577-
dest: windows-dockerfile.zip
620+
files: docker/windows/${{ matrix.mode }}/Dockerfile
621+
dest: windows-${{ matrix.mode }}-dockerfile.zip
578622

579623
- name: Upload Windows Dockerfile
580624
uses: actions/upload-artifact@v4
581625
with:
582-
name: windows-dockerfile.zip
583-
path: windows-dockerfile.zip
626+
name: windows-${{ matrix.mode }}-dockerfile.zip
627+
path: windows-${{ matrix.mode }}-dockerfile.zip
584628
retention-days: 7
585629

586630
- name: Stop the Geometry service
@@ -602,7 +646,7 @@ jobs:
602646
- name: Delete the Docker images (and untagged ones)
603647
if: always()
604648
run: |
605-
docker image rm ghcr.io/ansys/geometry:windows-latest-tmp
649+
docker image rm ghcr.io/ansys/geometry:windows-tmp
606650
docker system prune -f
607651
608652
# =================================================================================================
@@ -625,17 +669,17 @@ jobs:
625669
- name: Download Linux binaries
626670
uses: actions/download-artifact@v4
627671
with:
628-
name: linux-binaries.zip
629-
path: docker/linux-binaries.zip
672+
name: linux-core-binaries.zip
673+
path: docker/linux-core-binaries.zip
630674

631675
- name: Build Docker image
632676
working-directory: docker
633677
run: |
634-
docker build -f linux/Dockerfile -t ghcr.io/ansys/geometry:linux-latest-tmp .
678+
docker build -f linux/Dockerfile -t ghcr.io/ansys/geometry:linux-tmp .
635679
636680
- name: Launch Geometry service
637681
run: |
638-
docker run --detach --name ${{ env.GEO_CONT_NAME }} -e LICENSE_SERVER=${{ env.ANSRV_GEO_LICENSE_SERVER }} -p ${{ env.ANSRV_GEO_PORT }}:50051 ghcr.io/ansys/geometry:linux-latest-tmp
682+
docker run --detach --name ${{ env.GEO_CONT_NAME }} -e LICENSE_SERVER=${{ env.ANSRV_GEO_LICENSE_SERVER }} -p ${{ env.ANSRV_GEO_PORT }}:50051 ghcr.io/ansys/geometry:linux-tmp
639683
640684
- name: Validate connection using PyAnsys Geometry
641685
run: |
@@ -663,14 +707,14 @@ jobs:
663707
- name: "Compressing Linux Dockerfile"
664708
uses: vimtor/[email protected]
665709
with:
666-
files: docker/linux/Dockerfile
667-
dest: linux-dockerfile.zip
710+
files: docker/linux/coreservice/Dockerfile
711+
dest: linux-core-dockerfile.zip
668712

669713
- name: Upload Linux Dockerfile
670714
uses: actions/upload-artifact@v4
671715
with:
672-
name: linux-dockerfile.zip
673-
path: linux-dockerfile.zip
716+
name: linux-core-dockerfile.zip
717+
path: linux-core-dockerfile.zip
674718
retention-days: 7
675719

676720
- name: Stop the Geometry service
@@ -701,7 +745,7 @@ jobs:
701745
uses: ansys/actions/release-github@v8
702746
with:
703747
library-name: ${{ env.PACKAGE_NAME }}
704-
additional-artifacts: windows-dockerfile.zip linux-dockerfile.zip
748+
additional-artifacts: windows-dms-dockerfile.zip windows-core-dockerfile.zip linux-core-dockerfile.zip
705749

706750
upload_dev_docs:
707751
name: Upload dev documentation

0 commit comments

Comments
 (0)