feat(ai): allow absence-proven provider session rebind #20
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: | |
| pull_request: | |
| push: | |
| branches: | |
| - main | |
| workflow_dispatch: | |
| jobs: | |
| workspace-integrity: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| with: | |
| fetch-depth: 0 | |
| - uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: rustfmt | |
| - uses: Swatinem/rust-cache@v2 | |
| - name: Check documentation governance | |
| run: python3 scripts/check-documentation.py --base "${{ github.event.pull_request.base.sha }}" | |
| - name: Check generated workspace inventory | |
| run: python3 scripts/generate-workspace-inventory.py --check | |
| - name: Check Git-only release metadata | |
| run: | | |
| python3 scripts/check-release-state.py | |
| python3 scripts/generate-release-manifest.py \ | |
| --release-id workspace-2000.01.01.1 \ | |
| --ref HEAD \ | |
| --output /tmp/workspace-release-a.json \ | |
| --notes-output /tmp/workspace-release-a.md | |
| python3 scripts/generate-release-manifest.py \ | |
| --release-id workspace-2000.01.01.1 \ | |
| --ref HEAD \ | |
| --output /tmp/workspace-release-b.json \ | |
| --notes-output /tmp/workspace-release-b.md | |
| cmp /tmp/workspace-release-a.json /tmp/workspace-release-b.json | |
| cmp /tmp/workspace-release-a.md /tmp/workspace-release-b.md | |
| - name: Check PR documentation impact | |
| if: github.event_name == 'pull_request' | |
| env: | |
| PR_BODY: ${{ github.event.pull_request.body }} | |
| run: python3 scripts/check-pr-documentation-impact.py | |
| - run: cargo fmt --all -- --check | |
| - run: scripts/check-workspace-dependencies.sh | |
| - run: cargo test -p graphql-orm-storage | |
| - run: cargo test -p graphql-orm-backup --features orm-sqlite | |
| - run: cargo test -p graphql-orm-operation-catalog -p graphql-orm-ai-tool-profiles | |
| orm: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: clippy | |
| - uses: Swatinem/rust-cache@v2 | |
| - run: cargo test -p graphql-orm | |
| - run: cargo check -p graphql-orm --no-default-features --features postgres | |
| - run: cargo check -p graphql-orm --no-default-features --features mssql | |
| - run: cargo clippy -p graphql-orm --all-targets -- -D warnings | |
| - run: RUSTDOCFLAGS="-D warnings" cargo doc -p graphql-orm -p graphql-orm-macros --no-deps | |
| companions: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: clippy | |
| - uses: Swatinem/rust-cache@v2 | |
| - run: cargo test -p graphql-orm-ai --features provider-openai,provider-anthropic,provider-xai,provider-ollama,provider-openai-compatible,local-harness | |
| - run: cargo test -p graphql-orm-ai --features graphql-case-pascal --test graphql_naming | |
| - run: cargo clippy -p graphql-orm-ai --all-targets --features provider-openai,provider-anthropic,provider-xai,provider-ollama,provider-openai-compatible,local-harness -- -D warnings | |
| - run: cargo clippy -p graphql-orm-operation-catalog -p graphql-orm-ai-tool-profiles --all-targets -- -D warnings | |
| - run: RUSTDOCFLAGS="-D warnings -D missing_docs" cargo doc -p graphql-orm-ai -p graphql-orm-operation-catalog -p graphql-orm-ai-tool-profiles --features graphql-orm-ai/provider-openai,graphql-orm-ai/provider-anthropic,graphql-orm-ai/provider-xai,graphql-orm-ai/provider-ollama,graphql-orm-ai/provider-openai-compatible,graphql-orm-ai/local-harness --no-deps | |
| router: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 20 | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: clippy | |
| - uses: Swatinem/rust-cache@v2 | |
| - run: cargo test -p graphql-orm-router-protocol --locked | |
| - run: cargo test -p graphql-orm-router --locked | |
| - run: cargo test -p graphql-orm-router --locked --features auth-agql | |
| - run: cargo clippy -p graphql-orm-router-protocol --all-targets --locked -- -D warnings | |
| - run: cargo clippy -p graphql-orm-router --all-targets --locked -- -D warnings | |
| - run: cargo clippy -p graphql-orm-router --all-targets --locked --features auth-agql -- -D warnings | |
| - run: RUSTDOCFLAGS="-D warnings -D missing_docs" cargo doc -p graphql-orm-router-protocol --no-deps --locked | |
| - run: RUSTDOCFLAGS="-D warnings" cargo doc -p graphql-orm-router --no-deps --locked | |
| - run: RUSTDOCFLAGS="-D warnings -D missing_docs" cargo doc -p graphql-orm-router --no-deps --locked --features auth-agql | |
| router-msrv: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 20 | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - uses: dtolnay/rust-toolchain@master | |
| with: | |
| toolchain: 1.90.0 | |
| - uses: Swatinem/rust-cache@v2 | |
| - run: cargo test -p graphql-orm-router-protocol --locked | |
| - run: cargo test -p graphql-orm-router --locked | |
| router-release-policy: | |
| if: github.event_name == 'pull_request' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| with: | |
| fetch-depth: 0 | |
| - run: scripts/check-router-release-policy.sh "${{ github.event.pull_request.base.sha }}" | |
| alternate-features: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| - run: cargo check -p graphql-orm-ai --no-default-features --features postgres | |
| - run: cargo check -p graphql-orm-ai --no-default-features --features mssql | |
| - run: cargo check -p graphql-orm-ai -p graphql-orm --no-default-features --features graphql-orm-ai/sqlite,graphql-orm/mssql | |
| - run: cargo check -p graphql-orm-backup --no-default-features --features local,orm-postgres | |
| - run: cargo check -p graphql-orm-storage --no-default-features --features s3,azure | |
| - run: cargo check -p graphql-orm-storage --no-default-features --features smb | |
| ai-postgres-parity: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 15 | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| - name: Run ORM parity against a test-owned disposable PostgreSQL container | |
| run: cargo test -p graphql-orm-ai --no-default-features --features postgres,provider-openai --test postgres_parity -- --test-threads=1 | |
| ai-release-policy: | |
| if: github.event_name == 'pull_request' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| with: | |
| fetch-depth: 0 | |
| - run: crates/graphql-orm-ai/scripts/check-release-policy.sh "${{ github.event.pull_request.base.sha }}" | |
| semver: | |
| if: github.event_name == 'pull_request' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| with: | |
| fetch-depth: 0 | |
| - name: Create baseline worktree | |
| run: git worktree add ../graphql-orm-baseline "${{ github.event.pull_request.base.sha }}" | |
| - id: companion-baseline | |
| name: Detect consolidated packages in the baseline | |
| run: | | |
| if git cat-file -e "${{ github.event.pull_request.base.sha }}:crates/graphql-orm-ai/Cargo.toml"; then | |
| echo "exists=true" >> "$GITHUB_OUTPUT" | |
| else | |
| echo "exists=false" >> "$GITHUB_OUTPUT" | |
| fi | |
| - id: router-baseline | |
| name: Detect router packages in the baseline | |
| run: | | |
| if git cat-file -e "${{ github.event.pull_request.base.sha }}:crates/graphql-orm-router/Cargo.toml"; then | |
| echo "exists=true" >> "$GITHUB_OUTPUT" | |
| else | |
| echo "exists=false" >> "$GITHUB_OUTPUT" | |
| fi | |
| - uses: obi1kenobi/cargo-semver-checks-action@v2 | |
| with: | |
| manifest-path: crates/graphql-orm/Cargo.toml | |
| baseline-root: ../graphql-orm-baseline/crates/graphql-orm | |
| feature-group: default-features | |
| - if: steps.companion-baseline.outputs.exists == 'true' | |
| uses: obi1kenobi/cargo-semver-checks-action@v2 | |
| with: | |
| manifest-path: crates/graphql-orm-storage/Cargo.toml | |
| baseline-root: ../graphql-orm-baseline/crates/graphql-orm-storage | |
| feature-group: default-features | |
| - if: steps.companion-baseline.outputs.exists == 'true' | |
| uses: obi1kenobi/cargo-semver-checks-action@v2 | |
| with: | |
| manifest-path: crates/graphql-orm-backup/Cargo.toml | |
| baseline-root: ../graphql-orm-baseline/crates/graphql-orm-backup | |
| feature-group: default-features | |
| - if: steps.companion-baseline.outputs.exists == 'true' | |
| uses: obi1kenobi/cargo-semver-checks-action@v2 | |
| with: | |
| manifest-path: crates/graphql-orm-ai/Cargo.toml | |
| baseline-root: ../graphql-orm-baseline/crates/graphql-orm-ai | |
| feature-group: default-features | |
| - if: steps.router-baseline.outputs.exists == 'true' | |
| uses: obi1kenobi/cargo-semver-checks-action@v2 | |
| with: | |
| manifest-path: crates/graphql-orm-router-protocol/Cargo.toml | |
| baseline-root: ../graphql-orm-baseline/crates/graphql-orm-router-protocol | |
| feature-group: default-features | |
| - if: steps.router-baseline.outputs.exists == 'true' | |
| uses: obi1kenobi/cargo-semver-checks-action@v2 | |
| with: | |
| manifest-path: crates/graphql-orm-router/Cargo.toml | |
| baseline-root: ../graphql-orm-baseline/crates/graphql-orm-router | |
| feature-group: default-features |