release: bump to v0.2.1 #61
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| push: | |
| branches: [main] | |
| paths-ignore: | |
| - "docs/**" | |
| - "**/*.md" | |
| - "**/*.png" | |
| - "**/*.svg" | |
| - "**/*.jpg" | |
| - "**/*.jpeg" | |
| - "**/*.gif" | |
| pull_request: | |
| branches: [main] | |
| paths-ignore: | |
| - "docs/**" | |
| - "**/*.md" | |
| - "**/*.png" | |
| - "**/*.svg" | |
| - "**/*.jpg" | |
| - "**/*.jpeg" | |
| - "**/*.gif" | |
| workflow_dispatch: | |
| concurrency: | |
| group: provider-sim-ci-${{ github.ref }} | |
| cancel-in-progress: true | |
| env: | |
| VCPKG_COMMIT: "66c0373dc7fca549e5803087b9487edfe3aca0a1" | |
| jobs: | |
| python-lint: | |
| name: Python Linting (ruff) | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 10 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Validate requirements lockfile | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| LOCKFILE="requirements-lock.txt" | |
| test -f "$LOCKFILE" | |
| if od -An -tx1 "$LOCKFILE" | tr -s ' ' '\n' | grep -qx '00'; then | |
| echo "ERROR: $LOCKFILE contains NUL bytes (binary corruption)" >&2 | |
| exit 1 | |
| fi | |
| iconv -f UTF-8 -t UTF-8 "$LOCKFILE" > /dev/null 2>&1 | |
| echo "OK: $LOCKFILE is valid UTF-8 and contains no NUL bytes" | |
| - name: Setup Python and dependencies | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.12" | |
| cache: "pip" | |
| cache-dependency-path: requirements-lock.txt | |
| - name: Install Python dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install -r requirements-lock.txt | |
| - name: Run ruff checks | |
| run: | | |
| ruff check tests examples --output-format=github | |
| ruff format --check tests examples | |
| python-typecheck: | |
| name: Python Type Checking (mypy) | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 10 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Validate requirements lockfile | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| LOCKFILE="requirements-lock.txt" | |
| test -f "$LOCKFILE" | |
| if od -An -tx1 "$LOCKFILE" | tr -s ' ' '\n' | grep -qx '00'; then | |
| echo "ERROR: $LOCKFILE contains NUL bytes (binary corruption)" >&2 | |
| exit 1 | |
| fi | |
| iconv -f UTF-8 -t UTF-8 "$LOCKFILE" > /dev/null 2>&1 | |
| echo "OK: $LOCKFILE is valid UTF-8 and contains no NUL bytes" | |
| - name: Setup Python and dependencies | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.12" | |
| cache: "pip" | |
| cache-dependency-path: requirements-lock.txt | |
| - name: Install Python dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install -r requirements-lock.txt | |
| - name: Run mypy | |
| run: mypy tests examples | |
| linux-release: | |
| name: ${{ matrix.lane }} | |
| runs-on: ubuntu-24.04 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - lane: Linux Release (FluxGraph OFF, strict) | |
| configure_preset: ci-linux-release-strict | |
| test_preset: ci-linux-release-strict | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y ninja-build g++ | |
| - name: Validate requirements lockfile | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| LOCKFILE="requirements-lock.txt" | |
| test -f "$LOCKFILE" | |
| if od -An -tx1 "$LOCKFILE" | tr -s ' ' '\n' | grep -qx '00'; then | |
| echo "ERROR: $LOCKFILE contains NUL bytes (binary corruption)" >&2 | |
| exit 1 | |
| fi | |
| iconv -f UTF-8 -t UTF-8 "$LOCKFILE" > /dev/null 2>&1 | |
| echo "OK: $LOCKFILE is valid UTF-8 and contains no NUL bytes" | |
| - name: Setup Python and dependencies | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.12" | |
| cache: "pip" | |
| cache-dependency-path: requirements-lock.txt | |
| - name: Install Python dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install -r requirements-lock.txt | |
| - name: Setup vcpkg | |
| uses: lukka/run-vcpkg@v11 | |
| with: | |
| vcpkgGitCommitId: ${{ env.VCPKG_COMMIT }} | |
| doNotCache: false | |
| - name: Build | |
| run: | | |
| cmake --preset "${{ matrix.configure_preset }}" | |
| cmake --build --preset "${{ matrix.configure_preset }}" --parallel | |
| - name: Test (CTest provider baseline) | |
| run: ctest --preset "${{ matrix.test_preset }}" -L provider | |
| windows-release: | |
| name: ${{ matrix.lane }} | |
| runs-on: windows-2022 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - lane: Windows Release (FluxGraph OFF, strict) | |
| configure_preset: ci-windows-release-strict | |
| test_preset: ci-windows-release-strict | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Validate requirements lockfile | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| LOCKFILE="requirements-lock.txt" | |
| test -f "$LOCKFILE" | |
| if od -An -tx1 "$LOCKFILE" | tr -s ' ' '\n' | grep -qx '00'; then | |
| echo "ERROR: $LOCKFILE contains NUL bytes (binary corruption)" >&2 | |
| exit 1 | |
| fi | |
| iconv -f UTF-8 -t UTF-8 "$LOCKFILE" > /dev/null 2>&1 | |
| echo "OK: $LOCKFILE is valid UTF-8 and contains no NUL bytes" | |
| - name: Setup Python and dependencies | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.12" | |
| cache: "pip" | |
| cache-dependency-path: requirements-lock.txt | |
| - name: Install Python dependencies | |
| shell: pwsh | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install -r requirements-lock.txt | |
| - name: Setup vcpkg | |
| uses: lukka/run-vcpkg@v11 | |
| with: | |
| vcpkgGitCommitId: ${{ env.VCPKG_COMMIT }} | |
| doNotCache: false | |
| - name: Build | |
| shell: pwsh | |
| run: | | |
| cmake --preset "${{ matrix.configure_preset }}" | |
| cmake --build --preset "${{ matrix.configure_preset }}" --parallel | |
| - name: Test (CTest provider baseline) | |
| shell: pwsh | |
| run: ctest --preset "${{ matrix.test_preset }}" -L provider | |
| windows-fluxgraph-build: | |
| name: Windows Release (FluxGraph ON, strict build) | |
| runs-on: windows-2022 | |
| steps: | |
| - name: Checkout provider-sim | |
| uses: actions/checkout@v4 | |
| - name: Setup Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.12" | |
| - name: Setup vcpkg | |
| uses: lukka/run-vcpkg@v11 | |
| with: | |
| vcpkgGitCommitId: ${{ env.VCPKG_COMMIT }} | |
| doNotCache: false | |
| - name: Build provider-sim (FluxGraph ON) | |
| shell: pwsh | |
| # FluxGraph proto is fetched via FetchContent (v1.0.2) during CMake configure. | |
| # No explicit FLUXGRAPH_DIR needed; set it to override with a local source tree. | |
| run: | | |
| cmake --preset "ci-windows-release-fluxgraph-strict" | |
| cmake --build --preset "ci-windows-release-fluxgraph-strict" --parallel | |
| linux-fluxgraph: | |
| name: ${{ matrix.lane }} | |
| runs-on: ubuntu-24.04 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - lane: Linux Release (FluxGraph ON, strict) | |
| configure_preset: ci-linux-release-fluxgraph-strict | |
| test_preset: ci-linux-release-fluxgraph-strict | |
| steps: | |
| - name: Checkout provider-sim | |
| uses: actions/checkout@v4 | |
| - name: Resolve FluxGraph pin | |
| id: pins | |
| run: | | |
| set -euo pipefail | |
| FLUXGRAPH_REPO=$(awk '/^fluxgraph:/{f=1; next} f && /repository:/{print $2; exit}' .ci/dependency-pins.yml) | |
| FLUXGRAPH_REF=$(awk '/^fluxgraph:/{f=1; next} f && /ref:/{print $2; exit}' .ci/dependency-pins.yml) | |
| if [ -z "$FLUXGRAPH_REPO" ] || [ -z "$FLUXGRAPH_REF" ]; then | |
| echo "Failed to resolve FluxGraph pin from .ci/dependency-pins.yml" >&2 | |
| exit 1 | |
| fi | |
| echo "repo=$FLUXGRAPH_REPO" >> "$GITHUB_OUTPUT" | |
| echo "ref=$FLUXGRAPH_REF" >> "$GITHUB_OUTPUT" | |
| echo "Using FluxGraph pin: $FLUXGRAPH_REPO@$FLUXGRAPH_REF" | |
| - name: Checkout FluxGraph | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: ${{ steps.pins.outputs.repo }} | |
| ref: ${{ steps.pins.outputs.ref }} | |
| path: fluxgraph | |
| - name: Log FluxGraph resolved commit | |
| run: | | |
| set -euo pipefail | |
| FLUXGRAPH_SHA=$(git -C fluxgraph rev-parse HEAD) | |
| FLUXGRAPH_SUBJECT=$(git -C fluxgraph log -1 --pretty=%s) | |
| echo "FluxGraph requested ref: ${{ steps.pins.outputs.ref }}" | |
| echo "FluxGraph resolved commit: $FLUXGRAPH_SHA" | |
| echo "FluxGraph HEAD subject: $FLUXGRAPH_SUBJECT" | |
| { | |
| echo "### FluxGraph Resolution (Linux FluxGraph lane)" | |
| echo "" | |
| echo "- Ref: \`${{ steps.pins.outputs.ref }}\`" | |
| echo "- Commit: \`$FLUXGRAPH_SHA\`" | |
| echo "- Subject: $FLUXGRAPH_SUBJECT" | |
| } >> "$GITHUB_STEP_SUMMARY" | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y ninja-build g++ | |
| - name: Validate requirements lockfile | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| LOCKFILE="requirements-lock.txt" | |
| test -f "$LOCKFILE" | |
| if od -An -tx1 "$LOCKFILE" | tr -s ' ' '\n' | grep -qx '00'; then | |
| echo "ERROR: $LOCKFILE contains NUL bytes (binary corruption)" >&2 | |
| exit 1 | |
| fi | |
| iconv -f UTF-8 -t UTF-8 "$LOCKFILE" > /dev/null 2>&1 | |
| echo "OK: $LOCKFILE is valid UTF-8 and contains no NUL bytes" | |
| - name: Setup Python and dependencies | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.12" | |
| cache: "pip" | |
| cache-dependency-path: requirements-lock.txt | |
| - name: Install Python dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install -r requirements-lock.txt | |
| - name: Setup vcpkg | |
| uses: lukka/run-vcpkg@v11 | |
| with: | |
| vcpkgGitCommitId: ${{ env.VCPKG_COMMIT }} | |
| doNotCache: false | |
| - name: Build FluxGraph server | |
| working-directory: fluxgraph | |
| run: | | |
| cmake --preset ci-linux-release-server | |
| cmake --build --preset ci-linux-release-server --parallel | |
| - name: Build provider-sim (FluxGraph ON) | |
| run: | | |
| cmake --preset "${{ matrix.configure_preset }}" -DFLUXGRAPH_DIR="$GITHUB_WORKSPACE/fluxgraph" | |
| cmake --build --preset "${{ matrix.configure_preset }}" --parallel | |
| - name: Test FluxGraph suites | |
| run: | | |
| SERVER_BIN="$(find "$GITHUB_WORKSPACE/fluxgraph/build-server" -type f -name fluxgraph-server | head -n 1)" | |
| if [ -z "$SERVER_BIN" ]; then | |
| echo "ERROR: fluxgraph-server binary not found under $GITHUB_WORKSPACE/fluxgraph/build-server" >&2 | |
| exit 1 | |
| fi | |
| FLUXGRAPH_SERVER_EXE="$SERVER_BIN" ctest --preset "${{ matrix.test_preset }}" -L fluxgraph | |
| version-sync: | |
| uses: anolishq/.github/.github/workflows/version-sync.yml@main | |
| with: | |
| python-version: '3.12' | |
| working-directory: '.' |