Merge pull request #39 from peopleworks/fix/escape-generic-types #4
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] | |
| pull_request: | |
| branches: [main] | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| jobs: | |
| build: | |
| name: Build (${{ matrix.os }}) | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, windows-latest] | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Set up .NET | |
| uses: actions/setup-dotnet@v6 | |
| with: | |
| dotnet-version: '10.0.x' | |
| # Everything except the Blazor widget is built here. | |
| # | |
| # src/XafLogicExplainer.Blazor references DevExpress.ExpressApp.Blazor, which lives on the | |
| # licensed DevExpress NuGet feed and cannot be restored on a public runner. Nothing else in | |
| # the repository depends on it, so excluding it costs no coverage of the extraction engine. | |
| # | |
| # Building the CLI pulls in Core and CopilotSync transitively; the annotator is the only | |
| # other leaf. | |
| - name: Restore | |
| run: | | |
| dotnet restore src/XafLogicExplainer.Cli/XafLogicExplainer.Cli.csproj | |
| dotnet restore src/XafLogicExplainer.DescriptionAnnotator/XafLogicExplainer.DescriptionAnnotator.csproj | |
| dotnet restore tests/XafLogicExplainer.Tests/XafLogicExplainer.Tests.csproj | |
| - name: Build | |
| run: | | |
| dotnet build src/XafLogicExplainer.Cli/XafLogicExplainer.Cli.csproj --no-restore -c Release | |
| dotnet build src/XafLogicExplainer.DescriptionAnnotator/XafLogicExplainer.DescriptionAnnotator.csproj --no-restore -c Release | |
| # The suite runs against synthetic XAF fixtures parsed as text, so it needs no DevExpress | |
| # licence and no private feed -- the whole engine is verified on a public runner, for free. | |
| - name: Test | |
| run: dotnet test tests/XafLogicExplainer.Tests/XafLogicExplainer.Tests.csproj --no-restore -c Release | |
| # TreatWarningsAsErrors is on under GITHUB_ACTIONS (see Directory.Build.props), so a warning | |
| # already fails the steps above. This proves the tool actually runs on the built output. | |
| - name: Smoke test the CLI | |
| run: dotnet run --project src/XafLogicExplainer.Cli/XafLogicExplainer.Cli.csproj -c Release --no-build -- --help | |
| container: | |
| name: MCP server in a container | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v7 | |
| # MCP directories run automated safety and quality checks against a container, and a server | |
| # that fails them is listed but never appears in search results. Building the image here | |
| # means that is found on a push rather than by a directory rejecting the entry. | |
| - name: Build the image | |
| run: docker build -t xaflogic-mcp . | |
| # Proves the container speaks MCP, not merely that it starts: initialize, tools/list, and one | |
| # real tool call against the demo application baked into the image. | |
| - name: Handshake | |
| run: python3 .github/scripts/mcp-handshake.py docker run --rm -i xaflogic-mcp | |
| pack: | |
| name: Verify packaging | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Set up .NET | |
| uses: actions/setup-dotnet@v6 | |
| with: | |
| dotnet-version: '10.0.x' | |
| # A tool that cannot be packed cannot be installed, and that breaks silently between | |
| # releases. Catch it on every push instead of at publish time. | |
| - name: Pack | |
| run: dotnet pack src/XafLogicExplainer.Cli/XafLogicExplainer.Cli.csproj -c Release -o ./artifacts | |
| - name: Upload packages | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: nupkg | |
| path: ./artifacts/*.nupkg | |
| retention-days: 7 |