feat: add CLI Agent Orchestrator (CAO) integration #188
Workflow file for this run
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: unit | |
| on: | |
| push: | |
| branches: [main] | |
| paths: | |
| - "sdks/dotnet/**" | |
| - "sdks/typescript/**" | |
| - "pnpm-lock.yaml" | |
| - "pnpm-workspace.yaml" | |
| - ".github/workflows/unit-dotnet-sdk.yml" | |
| pull_request: | |
| branches: [main] | |
| paths: | |
| - "sdks/dotnet/**" | |
| - "sdks/typescript/**" | |
| - "pnpm-lock.yaml" | |
| - "pnpm-workspace.yaml" | |
| - ".github/workflows/unit-dotnet-sdk.yml" | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| dotnet: | |
| name: dotnet / unit + integration | |
| runs-on: depot-ubuntu-24.04 | |
| timeout-minutes: 20 | |
| defaults: | |
| run: | |
| working-directory: sdks/dotnet | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| # Step08_Multimodal integration test reads ag-ui-logo.png, which is | |
| # stored via Git LFS. Without the real bytes the snapshot diff fails. | |
| lfs: true | |
| persist-credentials: false | |
| - name: Set up .NET | |
| uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 | |
| with: | |
| # global.json pins the 10.0 SDK; the 8.0/9.0 runtimes are needed | |
| # because the unit-test projects multi-target net8.0/net9.0/net10.0. | |
| dotnet-version: | | |
| 8.0.x | |
| 9.0.x | |
| 10.0.x | |
| # Build the libraries across every target framework (net10/9/8 + | |
| # netstandard2.0 + net472) so multi-target breakage is caught even | |
| # though the test projects only execute on the .NET (Core) TFMs. | |
| - name: Build libraries (all target frameworks) | |
| run: | | |
| dotnet build src/AGUI.Abstractions/AGUI.Abstractions.csproj -c Release | |
| dotnet build src/AGUI.Formatting/AGUI.Formatting.csproj -c Release | |
| dotnet build src/AGUI.Protobuf/AGUI.Protobuf.csproj -c Release | |
| dotnet build src/AGUI.Client/AGUI.Client.csproj -c Release | |
| dotnet build src/AGUI.Server/AGUI.Server.csproj -c Release | |
| # Run the self-contained test projects directly rather than the whole | |
| # AGUI.slnx: the AGUIDojoServer sample references a sibling agent-framework | |
| # checkout that is not present in CI, so a solution-wide build would fail. | |
| - name: Run unit tests | |
| run: | | |
| dotnet test tests/AGUI.Abstractions.UnitTests -c Release -p:SignAssembly=false | |
| dotnet test tests/AGUI.Client.UnitTests -c Release -p:SignAssembly=false | |
| dotnet test tests/AGUI.Formatting.UnitTests -c Release -p:SignAssembly=false | |
| dotnet test tests/AGUI.Protobuf.UnitTests -c Release -p:SignAssembly=false | |
| dotnet test tests/AGUI.Server.UnitTests -c Release -p:SignAssembly=false | |
| - name: Run integration tests | |
| run: dotnet test tests/AGUI.Hosting.AspNetCore.IntegrationTests -c Release -p:SignAssembly=false | |
| cross-language: | |
| name: dotnet / cross-language (TS <-> C#) | |
| runs-on: depot-ubuntu-24.04 | |
| timeout-minutes: 30 | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| lfs: true | |
| persist-credentials: false | |
| - name: Detect fork PR | |
| id: fork-check | |
| run: | | |
| if [[ "$GITHUB_EVENT_NAME" == "pull_request" && \ | |
| "${GITHUB_EVENT_PULL_REQUEST_HEAD_REPO_FULL_NAME}" != "$GITHUB_REPOSITORY" ]]; then | |
| echo "prefix=fork-" >> "$GITHUB_OUTPUT" | |
| else | |
| echo "prefix=" >> "$GITHUB_OUTPUT" | |
| fi | |
| env: | |
| GITHUB_EVENT_PULL_REQUEST_HEAD_REPO_FULL_NAME: ${{ github.event.pull_request.head.repo.full_name }} | |
| - name: Set up .NET | |
| uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0 | |
| with: | |
| dotnet-version: | | |
| 8.0.x | |
| 9.0.x | |
| 10.0.x | |
| - name: Set up Node.js | |
| uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 | |
| with: | |
| node-version: "22" | |
| - name: Install protoc | |
| uses: arduino/setup-protoc@c65c819552d16ad3c9b72d9dfd5ba5237b9c906b # v3.0.0 | |
| with: | |
| version: "25.x" | |
| repo-token: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Install pnpm | |
| uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 | |
| with: | |
| version: 10.33.4 | |
| - name: Setup pnpm cache | |
| uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 | |
| with: | |
| path: ~/.local/share/pnpm/store | |
| key: ${{ steps.fork-check.outputs.prefix }}${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} | |
| restore-keys: | | |
| ${{ steps.fork-check.outputs.prefix }}${{ runner.os }}-pnpm-store- | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| # The vitest suites import the @ag-ui/* workspace packages by their built | |
| # entry points, so they must be compiled before the tests run (nx builds | |
| # the transitive deps: core + encoder). | |
| - name: Build TypeScript packages | |
| run: pnpm exec nx run-many -t build -p @ag-ui/core @ag-ui/encoder @ag-ui/proto @ag-ui/client | |
| # Phase 1: TypeScript @ag-ui/client HttpAgent drives the C# AG-UI servers | |
| # (CrossLanguage.TestServer via LLMock, plus every GettingStarted Step | |
| # sample in fake mode). The vitest globalSetup builds and spawns the | |
| # required .NET servers; no LLM credentials are needed. | |
| - name: Cross-language Phase 1 (TS client -> C# server) | |
| run: pnpm --filter @ag-ui/cross-language-tests test | |
| # Phase 2: C# AGUIChatClient drives the TypeScript fake-agent server. | |
| - name: Cross-language Phase 2 (C# client -> TS server) | |
| run: dotnet test tests/AGUI.CrossLanguage.IntegrationTests -c Release -p:SignAssembly=false | |
| working-directory: sdks/dotnet |