dotnet-verify-samples #35
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
| # | |
| # Runs the .NET sample verification tool, which builds and executes sample projects | |
| # and verifies their output using deterministic checks and AI-powered verification. | |
| # | |
| # Results are displayed as a GitHub Job Summary and the CSV report is uploaded as an artifact. | |
| # | |
| name: dotnet-verify-samples | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| category: | |
| description: "Sample category to run (blank for all)" | |
| required: false | |
| type: choice | |
| options: | |
| - "" | |
| - "01-get-started" | |
| - "02-agents" | |
| - "03-workflows" | |
| parallelism: | |
| description: "Max parallel sample runs" | |
| required: false | |
| default: "8" | |
| type: string | |
| schedule: | |
| - cron: "0 6 * * 1-5" # Weekdays at 6:00 UTC | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read | |
| id-token: write | |
| jobs: | |
| verify-samples: | |
| runs-on: ubuntu-latest | |
| environment: 'integration' | |
| timeout-minutes: 90 | |
| steps: | |
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 | |
| with: | |
| persist-credentials: false | |
| sparse-checkout: | | |
| . | |
| .github | |
| dotnet | |
| python | |
| declarative-agents | |
| - name: Setup dotnet | |
| uses: actions/setup-dotnet@c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7 # v5.2.0 | |
| with: | |
| global-json-file: ${{ github.workspace }}/dotnet/global.json | |
| - name: Azure CLI Login | |
| if: github.event_name != 'pull_request' | |
| uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2 | |
| with: | |
| client-id: ${{ secrets.AZURE_CLIENT_ID }} | |
| tenant-id: ${{ secrets.AZURE_TENANT_ID }} | |
| subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} | |
| - name: Generate filtered solution | |
| shell: pwsh | |
| run: | | |
| ./dotnet/eng/scripts/New-FilteredSolution.ps1 ` | |
| -Solution dotnet/agent-framework-dotnet.slnx ` | |
| -TargetFramework net10.0 ` | |
| -Configuration Debug ` | |
| -OutputPath dotnet/filtered.slnx ` | |
| -Verbose | |
| - name: Build solution | |
| shell: bash | |
| run: dotnet build dotnet/filtered.slnx -f net10.0 --warnaserror | |
| - name: Run verify-samples | |
| id: verify | |
| working-directory: dotnet | |
| shell: bash | |
| run: | | |
| CATEGORY_ARG="" | |
| if [ -n "$CATEGORY_INPUT" ]; then | |
| CATEGORY_ARG="--category $CATEGORY_INPUT" | |
| fi | |
| dotnet run --project eng/verify-samples -- \ | |
| $CATEGORY_ARG \ | |
| --parallel "$PARALLELISM" \ | |
| --md results.md \ | |
| --csv results.csv \ | |
| --log results.log | |
| env: | |
| CATEGORY_INPUT: ${{ github.event.inputs.category || '' }} | |
| PARALLELISM: ${{ github.event.inputs.parallelism || '8' }} | |
| # OpenAI Models | |
| OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} | |
| OPENAI_CHAT_MODEL_NAME: ${{ vars.OPENAI_CHAT_MODEL_NAME }} | |
| OPENAI_REASONING_MODEL_NAME: ${{ vars.OPENAI_REASONING_MODEL_NAME }} | |
| # Azure OpenAI Models | |
| AZURE_OPENAI_DEPLOYMENT_NAME: ${{ vars.AZURE_OPENAI_DEPLOYMENT_NAME }} | |
| AZURE_OPENAI_CHAT_DEPLOYMENT_NAME: ${{ vars.AZURE_OPENAI_DEPLOYMENT_NAME }} | |
| AZURE_OPENAI_ENDPOINT: ${{ vars.AZURE_OPENAI_ENDPOINT }} | |
| # Azure AI Foundry | |
| AZURE_AI_PROJECT_ENDPOINT: ${{ vars.AZURE_AI_PROJECT_ENDPOINT }} | |
| AZURE_AI_MODEL_DEPLOYMENT_NAME: ${{ vars.AZURE_AI_MODEL_DEPLOYMENT_NAME }} | |
| AZURE_AI_BING_CONNECTION_ID: ${{ vars.AZURE_AI_BING_CONNECTION_ID }} | |
| - name: Write Job Summary | |
| if: always() | |
| working-directory: dotnet | |
| shell: bash | |
| run: | | |
| if [ -f results.md ]; then | |
| cat results.md >> "$GITHUB_STEP_SUMMARY" | |
| else | |
| echo "⚠️ No results.md generated — verify-samples may have failed to start." >> "$GITHUB_STEP_SUMMARY" | |
| fi | |
| - name: Upload results | |
| if: always() | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 | |
| with: | |
| name: verify-samples-results | |
| path: | | |
| dotnet/results.csv | |
| dotnet/results.log | |
| if-no-files-found: warn | |
| - name: Fail if samples failed | |
| if: always() && steps.verify.outcome == 'failure' | |
| shell: bash | |
| run: exit 1 |