From bcfabc8eda3c3050184cc9c68714f0e7fd1a9353 Mon Sep 17 00:00:00 2001 From: Bill Dolinar Date: Sat, 22 Aug 2026 16:57:16 -0600 Subject: [PATCH 1/2] Drop the unread has_test_files key from build.toml Nothing reads it. No generator, template, or doc in xmsconan references the key, and the `has_test_files` identifiers in `build_tools/build_library.py` are a local variable derived from the `--test_files` CLI flag, unrelated to build.toml. `extra_export_sources = ["test_files"]` is what actually exports the directory, and that stays. It has to go before the next xmsconan release. That release adds a top-level key whitelist to `xmsconan gen`, `xmsconan ci` and `xmsconan profiles` -- until now a misspelled key had no symptom at all, because the generators read this file with `setdefault`/`get`, so the default was kept and the generated artifact quietly was not what the file asked for. With the whitelist in place this key stops the Generate step, and xmsmesher is the only consumer carrying one: the other six build.toml files pass as they stand. No behavior change today. Rendering build.py, conanfile.py, CMakeLists.txt, .flake8 and pytest.ini from this file with the currently released xmsconan, before and after the deletion, gives byte-identical output. --- build.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/build.toml b/build.toml index 5b4e6748..4d77aca5 100644 --- a/build.toml +++ b/build.toml @@ -1,7 +1,6 @@ library_name = "xmsmesher" description = "Meshing library for XMS products" ci_type = "github" -has_test_files = true extra_cmake_text = """ # Disable FP contraction (FMA fusion) for consistent floating-point results across From 07b3fcbf4efbacb73e2f383788175849a2d8b5ac Mon Sep 17 00:00:00 2001 From: Bill Dolinar Date: Sun, 23 Aug 2026 00:35:42 -0600 Subject: [PATCH 2/2] Regenerate CI with xmsconan 2.23.0 Deleting has_test_files (previous commit) is what lets `xmsconan_gen` run at all under 2.23.0, but it does not fix the four Debug legs. The `--wheel-dir wheelhouse` that build.py exits 1 on lives in this committed workflow, not in anything the Generate step regenerates, so the fix only arrives by regenerating the workflow itself. The build step now asks for a wheel only where one is published: ${{ matrix.build_type == 'Release' && ' --wheel-dir wheelhouse' || '' }} matching the gate repair, artifact upload, and devpi deploy already carry. [matrix].pybind_build_types defaults to Release, so a Debug leg has no pybind configuration to extract a wheel from and was failing for doing exactly what it was configured to do. Carried along by the same regeneration, all from xmsconan 2.18.0 -> 2.23.0 template changes this repo had not picked up: - flake8-tidy-imports on the flake job. It registers `banned-modules`, which the .flake8 generated two steps later sets to osgeo.*; without the plugin flake8 accepted the option and enforced nothing while reporting green. - Seven third-party actions pinned to commit SHAs, tag kept in a trailing comment. setup-python on the flake job moves v2 -> v5. - The Linux container image and PYTHON_TARGET_VERSION read from matrix.python-version instead of a hardcoded 3.13. Same values for this repo's single-version Linux matrix. - xmsconan floor 2.18.0 -> 2.23.0. DESIGN: regenerate the committed workflow so the wheel request is gated to the Release leg, since that flag is not something the Generate step can fix. EVIDENCE: $ xmsconan gen/ci/profiles against this build.toml -> rc=0, 0, 0; the rendered YAML parses (jobs: flake, mac, linux, windows); the Release gate is on all 3 build steps and no ungated --wheel-dir remains. --- .github/workflows/XmsMesher-CI.yaml | 73 +++++++++++++++++------------ 1 file changed, 43 insertions(+), 30 deletions(-) diff --git a/.github/workflows/XmsMesher-CI.yaml b/.github/workflows/XmsMesher-CI.yaml index ed286e29..ea7b0df3 100644 --- a/.github/workflows/XmsMesher-CI.yaml +++ b/.github/workflows/XmsMesher-CI.yaml @@ -6,6 +6,13 @@ # AQUAPI_URL_DEV - devpi index URL for wheel uploads # AQUAVEO_GITHUB_TOKEN - GitHub token for release asset uploads # +# Third-party actions are pinned to a commit SHA with the tag in a trailing +# comment. A tag is a movable ref in someone else's repository: whoever owns +# it can retarget it at new code, which then runs here with this workflow's +# secrets in its environment. Update a pin by resolving the new tag +# (`gh api repos///commits/ --jq .sha`) and editing the +# template -- not the generated file. +# # Generated by xmsconan_ci — do not edit manually. name: XmsMesher-CI @@ -34,15 +41,20 @@ jobs: uses: actions/checkout@v4 # Setup Python - name: Setup Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} # Install Python Dependencies - name: Install Python Dependencies run: | python -m pip install --upgrade pip - pip install flake8 flake8-docstrings flake8-bugbear flake8-import-order pep8-naming - pip install --upgrade "xmsconan>=2.18.0" -i https://public.aquapi.aquaveo.com/aquaveo/dev/+simple + # flake8-tidy-imports registers `banned-modules`, which the .flake8 + # generated below sets. flake8 ignores config options no installed + # plugin claims, so without the plugin the osgeo ban was accepted + # and silently enforced nothing -- while this job reported the same + # green as a run that had checked it. + pip install flake8 flake8-docstrings flake8-bugbear flake8-import-order pep8-naming flake8-tidy-imports + pip install --upgrade "xmsconan>=2.23.0" -i https://public.aquapi.aquaveo.com/aquaveo/dev/+simple # Generate .flake8 so CI lints with the same config developers use locally. # Do not inline the flake8 settings here: that duplicates .flake8.jinja and # the two copies drift apart silently. @@ -63,7 +75,7 @@ jobs: fail-fast: false matrix: platform: [macos-15] - python-version: ['3.13'] + python-version: ["3.13"] build_type: [Release, Debug] env: @@ -91,7 +103,7 @@ jobs: steps: # Get Correct Version of Xcode - - uses: maxim-lobanov/setup-xcode@v1 + - uses: maxim-lobanov/setup-xcode@ed7a3b1fda3918c0306d1b724322adc0b8cc0a90 # v1 with: xcode-version: 16.4 - name: Setup Clang @@ -113,7 +125,7 @@ jobs: # package_id computation and silently detach builds from the binaries # already published to the remote. Bump this deliberately. pip install "conan~=2.31.0" devpi-client wheel - python -m pip install --upgrade "xmsconan>=2.18.0" -i https://public.aquapi.aquaveo.com/aquaveo/dev/+simple + python -m pip install --upgrade "xmsconan>=2.23.0" -i https://public.aquapi.aquaveo.com/aquaveo/dev/+simple # Setup Conan - name: Setup Conan run: xmsconan_conan_setup --remote-url ${{ env.CONAN_REMOTE_URL }} --login --remove-conancenter @@ -121,11 +133,11 @@ jobs: # Get Tag Name - name: Get Tag id: gitTag - uses: little-core-labs/get-git-tag@v3.0.2 + uses: little-core-labs/get-git-tag@2c292ff564c1a61b989e29f0410d131317f89b03 # v3.0.2 if: startsWith(github.ref, 'refs/tags/') # Set Conan Version - name: Set Conan Version - uses: allenevans/set-env@v2.0.0 + uses: allenevans/set-env@b68e0a75c99b96b43963b54bc2be13e2f103ad87 # v2.0.0 with: CONAN_REFERENCE: 'xmsmesher/${{ steps.gitTag.outputs.tag }}' XMS_VERSION: ${{ steps.gitTag.outputs.tag }} @@ -135,9 +147,9 @@ jobs: # Check for release branch - name: Get Branch Name id: gitBranch - uses: nelonoel/branch-name@v1.0.1 + uses: nelonoel/branch-name@1ea5c86cb559a8c4e623da7f188496208232e49f # v1.0.1 - name: Change Channel and URL if Release Branch - uses: allenevans/set-env@v2.0.0 + uses: allenevans/set-env@b68e0a75c99b96b43963b54bc2be13e2f103ad87 # v2.0.0 with: CONAN_CHANNEL: stable AQUAPI_URL: ${{ secrets.AQUAPI_URL_DEV}} @@ -147,7 +159,7 @@ jobs: run: xmsconan_gen --version ${{ env.XMS_VERSION }} build.toml # Build the Conan Package - name: Build the Conan Packages - run: "python build.py --filter=\"{\\\"build_type\\\": \\\"${{ matrix.build_type }}\\\"}\" --wheel-dir wheelhouse --artifacts-dir test_artifacts" + run: "python build.py --filter=\"{\\\"build_type\\\": \\\"${{ matrix.build_type }}\\\"}\"${{ matrix.build_type == 'Release' && ' --wheel-dir wheelhouse' || '' }} --artifacts-dir test_artifacts" shell: bash - name: Upload test artifacts uses: actions/upload-artifact@v4 @@ -180,7 +192,7 @@ jobs: # Get the Release Data - name: Get Release id: git_release - uses: bruceadams/get-release@v1.3.2 + uses: bruceadams/get-release@74c3d60f5a28f358ccf241a00c9021ea16f0569f # v1.3.2 env: GITHUB_TOKEN: ${{ secrets.AQUAVEO_GITHUB_TOKEN }} if: startsWith(github.ref, 'refs/tags/') @@ -209,12 +221,13 @@ jobs: runs-on: ubuntu-latest container: - image: ghcr.io/aquaveo/conan-gcc13-py3.13:latest + image: ghcr.io/aquaveo/conan-gcc13-py${{ matrix.python-version }}:latest strategy: fail-fast: false matrix: build_type: [Release, Debug] + python-version: ["3.13"] env: MATRIX_NAME: linux-GCC13-${{ matrix.build_type }} @@ -235,7 +248,7 @@ jobs: AQUAPI_PASSWORD: ${{ secrets.AQUAPI_PASSWORD_SECRET }} AQUAPI_URL: ${{ secrets.AQUAPI_URL_DEV }} # Python Variables - PYTHON_TARGET_VERSION: '3.13' + PYTHON_TARGET_VERSION: ${{ matrix.python-version }} RELEASE_PYTHON: 'False' CTEST_PARALLEL_LEVEL: '8' @@ -250,7 +263,7 @@ jobs: # package_id computation and silently detach builds from the binaries # already published to the remote. Bump this deliberately. pip install "conan~=2.31.0" devpi-client wheel - pip install --upgrade "xmsconan>=2.18.0" -i https://public.aquapi.aquaveo.com/aquaveo/dev/+simple + pip install --upgrade "xmsconan>=2.23.0" -i https://public.aquapi.aquaveo.com/aquaveo/dev/+simple # Setup Conan - name: Setup Conan run: xmsconan_conan_setup --remote-url ${{ env.CONAN_REMOTE_URL }} --login @@ -258,11 +271,11 @@ jobs: # Get Tag Name - name: Get Tag id: gitTag - uses: little-core-labs/get-git-tag@v3.0.2 + uses: little-core-labs/get-git-tag@2c292ff564c1a61b989e29f0410d131317f89b03 # v3.0.2 if: startsWith(github.ref, 'refs/tags/') # Set Conan Version - name: Set Conan Version - uses: allenevans/set-env@v2.0.0 + uses: allenevans/set-env@b68e0a75c99b96b43963b54bc2be13e2f103ad87 # v2.0.0 with: CONAN_REFERENCE: 'xmsmesher/${{ steps.gitTag.outputs.tag }}' XMS_VERSION: ${{ steps.gitTag.outputs.tag }} @@ -272,9 +285,9 @@ jobs: # Check for release branch - name: Get Branch Name id: gitBranch - uses: nelonoel/branch-name@v1.0.1 + uses: nelonoel/branch-name@1ea5c86cb559a8c4e623da7f188496208232e49f # v1.0.1 - name: Change Channel and URL if Release Branch - uses: allenevans/set-env@v2.0.0 + uses: allenevans/set-env@b68e0a75c99b96b43963b54bc2be13e2f103ad87 # v2.0.0 with: CONAN_CHANNEL: stable AQUAPI_URL: ${{ secrets.AQUAPI_URL_DEV }} @@ -284,7 +297,7 @@ jobs: run: xmsconan_gen --version ${{ env.XMS_VERSION }} build.toml # Build the Conan Package - name: Build the Conan Packages - run: "python build.py --filter=\"{\\\"build_type\\\": \\\"${{ matrix.build_type }}\\\"}\" --wheel-dir wheelhouse --artifacts-dir test_artifacts" + run: "python build.py --filter=\"{\\\"build_type\\\": \\\"${{ matrix.build_type }}\\\"}\"${{ matrix.build_type == 'Release' && ' --wheel-dir wheelhouse' || '' }} --artifacts-dir test_artifacts" shell: bash - name: Upload test artifacts uses: actions/upload-artifact@v4 @@ -317,7 +330,7 @@ jobs: # Get the Release Data - name: Get Release id: git_release - uses: bruceadams/get-release@v1.3.2 + uses: bruceadams/get-release@74c3d60f5a28f358ccf241a00c9021ea16f0569f # v1.3.2 env: GITHUB_TOKEN: ${{ secrets.AQUAVEO_GITHUB_TOKEN }} if: startsWith(github.ref, 'refs/tags/') @@ -387,7 +400,7 @@ jobs: python-version: ${{ matrix.python-version }} # Setup Dev Command Prompt env for MSVC - name: Setup MSVC env - uses: ilammy/msvc-dev-cmd@v1 + uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1 with: arch: x64 # Install Python Dependencies @@ -398,10 +411,10 @@ jobs: # package_id computation and silently detach builds from the binaries # already published to the remote. Bump this deliberately. pip install "conan~=2.31.0" devpi-client wheel - python -m pip install --upgrade "xmsconan>=2.18.0" -i https://public.aquapi.aquaveo.com/aquaveo/dev/+simple + python -m pip install --upgrade "xmsconan>=2.23.0" -i https://public.aquapi.aquaveo.com/aquaveo/dev/+simple # Setup Visual Studio - name: Setup Visual Studio - uses: microsoft/setup-msbuild@v2 + uses: microsoft/setup-msbuild@6fb02220983dee41ce7ae257b6f4d8f9bf5ed4ce # v2 # Setup Conan - name: Setup Conan run: xmsconan_conan_setup --remote-url ${{ env.CONAN_REMOTE_URL }} --login @@ -409,11 +422,11 @@ jobs: # Get Tag Name - name: Get Tag id: gitTag - uses: little-core-labs/get-git-tag@v3.0.2 + uses: little-core-labs/get-git-tag@2c292ff564c1a61b989e29f0410d131317f89b03 # v3.0.2 if: startsWith(github.ref, 'refs/tags/') # Set Conan Version - name: Set Conan Version - uses: allenevans/set-env@v2.0.0 + uses: allenevans/set-env@b68e0a75c99b96b43963b54bc2be13e2f103ad87 # v2.0.0 with: CONAN_REFERENCE: 'xmsmesher/${{ steps.gitTag.outputs.tag }}' XMS_VERSION: ${{ steps.gitTag.outputs.tag }} @@ -423,9 +436,9 @@ jobs: # Check for release branch - name: Get Branch Name id: gitBranch - uses: nelonoel/branch-name@v1.0.1 + uses: nelonoel/branch-name@1ea5c86cb559a8c4e623da7f188496208232e49f # v1.0.1 - name: Change Channel and URL if Release Branch - uses: allenevans/set-env@v2.0.0 + uses: allenevans/set-env@b68e0a75c99b96b43963b54bc2be13e2f103ad87 # v2.0.0 with: CONAN_CHANNEL: stable AQUAPI_URL: ${{ secrets.AQUAPI_URL_DEV }} @@ -435,7 +448,7 @@ jobs: run: xmsconan_gen --version ${{ env.XMS_VERSION }} build.toml # Build the Conan Package - name: Build the Conan Packages - run: "python build.py --filter=\"{\\\"build_type\\\": \\\"${{ matrix.build_type }}\\\"}\" --wheel-dir wheelhouse --artifacts-dir test_artifacts" + run: "python build.py --filter=\"{\\\"build_type\\\": \\\"${{ matrix.build_type }}\\\"}\"${{ matrix.build_type == 'Release' && ' --wheel-dir wheelhouse' || '' }} --artifacts-dir test_artifacts" shell: cmd - name: Upload test artifacts uses: actions/upload-artifact@v4 @@ -468,7 +481,7 @@ jobs: # Get the Release Data - name: Get Release id: git_release - uses: bruceadams/get-release@v1.3.2 + uses: bruceadams/get-release@74c3d60f5a28f358ccf241a00c9021ea16f0569f # v1.3.2 env: GITHUB_TOKEN: ${{ secrets.AQUAVEO_GITHUB_TOKEN }} if: startsWith(github.ref, 'refs/tags/')