Skip to content

chore: update docs-check.yml to v2 (adds local link check) #64

chore: update docs-check.yml to v2 (adds local link check)

chore: update docs-check.yml to v2 (adds local link check) #64

Workflow file for this run

name: CI
on:
push:
branches: [main]
paths-ignore:
- '**/*.md'
pull_request:
branches: [main]
paths-ignore:
- '**/*.md'
concurrency:
group: fluxgraph-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 Python 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 --output-format=github
ruff format --check tests
python-typecheck:
name: Python Type Checking (mypy)
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Validate Python 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
linux-matrix:
name: Linux ${{ matrix.lane }}
runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
include:
- lane: core-only
preset: ci-linux-release
grpc_integration: false
- lane: diagram-dot
preset: ci-linux-release-diagram
grpc_integration: false
- lane: json
preset: ci-linux-release-json
grpc_integration: false
- lane: yaml
preset: ci-linux-release-yaml
grpc_integration: false
- lane: server-enabled
preset: ci-linux-release-server
grpc_integration: true
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 Python lockfile
if: ${{ matrix.grpc_integration }}
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 vcpkg
uses: lukka/run-vcpkg@v11
with:
vcpkgGitCommitId: ${{ env.VCPKG_COMMIT }}
doNotCache: false
- name: Install Python integration deps
if: ${{ matrix.grpc_integration }}
uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: "pip"
cache-dependency-path: requirements-lock.txt
- name: Install Python integration packages
if: ${{ matrix.grpc_integration }}
run: |
python -m pip install --upgrade pip
python -m pip install -r requirements-lock.txt
- name: Configure
run: cmake --preset "${{ matrix.preset }}"
- name: Build
run: cmake --build --preset "${{ matrix.preset }}" --parallel
- name: Generate Python Protobuf Bindings
if: ${{ matrix.grpc_integration }}
run: |
bash ./scripts/generate_proto_python.sh build-server/python
- name: Run tests
run: ctest --preset "${{ matrix.preset }}"
strict-dimensional-validation:
name: Strict dimensional validation
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y ninja-build g++ python3
- name: Setup vcpkg
uses: lukka/run-vcpkg@v11
with:
vcpkgGitCommitId: ${{ env.VCPKG_COMMIT }}
doNotCache: false
- name: Run strict dimensional validation
id: dimensional
shell: bash
run: |
set -euo pipefail
OUT_DIR="artifacts/dimensional-validation/${{ github.run_id }}_${{ github.run_attempt }}_ci-linux-release"
python3 scripts/run_dimensional_validation.py \
--preset ci-linux-release \
--output-dir "$OUT_DIR" \
--enforce
echo "out_dir=$OUT_DIR" >> "$GITHUB_OUTPUT"
- name: Upload strict-dimensional artifacts
uses: actions/upload-artifact@v4
with:
name: strict-dimensional-validation-${{ github.run_id }}-${{ github.run_attempt }}
path: ${{ steps.dimensional.outputs.out_dir }}
if-no-files-found: error
windows-core:
name: Windows core-only
runs-on: windows-2022
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup vcpkg
uses: lukka/run-vcpkg@v11
with:
vcpkgGitCommitId: ${{ env.VCPKG_COMMIT }}
doNotCache: false
- name: Configure
run: cmake --preset ci-windows-release
- name: Build
run: cmake --build --preset ci-windows-release --parallel
- name: Run C++ tests
run: ctest --preset ci-windows-release
windows-diagram:
name: Windows diagram-dot
runs-on: windows-2022
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup vcpkg
uses: lukka/run-vcpkg@v11
with:
vcpkgGitCommitId: ${{ env.VCPKG_COMMIT }}
doNotCache: false
- name: Configure
run: cmake --preset ci-windows-release-diagram
- name: Build
run: cmake --build --preset ci-windows-release-diagram --parallel
- name: Run C++ tests
run: ctest --preset ci-windows-release-diagram
diagram-render-smoke:
name: Diagram Render Smoke
runs-on: ubuntu-24.04
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y ninja-build g++ graphviz
- name: Setup vcpkg
uses: lukka/run-vcpkg@v11
with:
vcpkgGitCommitId: ${{ env.VCPKG_COMMIT }}
doNotCache: false
- name: Configure diagram preset
run: cmake --preset ci-linux-release-diagram
- name: Build diagram tool
run: cmake --build --preset ci-linux-release-diagram --target fluxgraph_diagram --parallel
- name: Render SVG smoke output
run: |
set -euo pipefail
BIN="./build/ci-linux-release-diagram/tools/fluxgraph-diagram"
OUT="$RUNNER_TEMP/graph-smoke.svg"
"$BIN" --in ./examples/03_json_graph/graph.json --out "$OUT" --format svg
test -s "$OUT"
version-sync:
uses: anolishq/.github/.github/workflows/version-sync.yml@main
with:
python-version: '3.12'
working-directory: '.'