From a4561b1c720aac4a443570c6b296db16b80addb5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 10 Jan 2026 21:06:12 +0000 Subject: [PATCH 1/6] Initial plan From b71a8c789b74c9a5496686880bbe9b35da5c6c6a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 10 Jan 2026 21:11:44 +0000 Subject: [PATCH 2/6] Restructure CI pipelines for full integration testing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Consolidated build.yaml to be self-contained without OS input - Added quality checks job to build.yaml (moved from build_on_push.yaml) - Added matrix build for Windows and Linux with OS-decorated TRX files - Added matrix integration tests for Windows/Linux × .NET 8/9/10 - Added build-docs job to build.yaml with all TRX downloads - Updated build_on_push.yaml to call new self-contained build.yaml - Updated release.yaml to call new self-contained build.yaml - Added test mappings to requirements.yaml for OS and .NET requirements Co-authored-by: Malcolmnixon <1863707+Malcolmnixon@users.noreply.github.com> --- .github/workflows/build.yaml | 200 +++++++++++++++++++++++++-- .github/workflows/build_on_push.yaml | 55 +------- .github/workflows/release.yaml | 9 +- requirements.yaml | 20 +++ 4 files changed, 211 insertions(+), 73 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index d7b513a..85a9d93 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -4,10 +4,6 @@ name: Build on: workflow_call: inputs: - os: - description: 'Operating system to run on' - required: true - type: string version: description: 'Version number for the build' required: true @@ -17,12 +13,45 @@ on: required: true jobs: + quality-checks: + name: Quality Checks + runs-on: ubuntu-latest + permissions: + contents: read + + steps: + - name: Checkout repository + uses: actions/checkout@v6 + + - name: Markdown Lint + uses: DavidAnson/markdownlint-cli2-action@v22 + with: + globs: '**/*.md' + + - name: Spell Check + uses: streetsidesoftware/cspell-action@v8 + with: + files: | + **/*.md + **/*.cs + + - name: YAML Lint + uses: ibiqlik/action-yamllint@v3 + with: + config_file: .yamllint.yaml + build: - runs-on: ${{ inputs.os }} + name: Build ${{ matrix.os }} + needs: quality-checks + runs-on: ${{ matrix.os }} permissions: contents: read pull-requests: write + strategy: + matrix: + os: [windows-latest, ubuntu-latest] + steps: - name: Checkout repository uses: actions/checkout@v6 @@ -65,13 +94,13 @@ jobs: --configuration Release --verbosity normal --collect "XPlat Code Coverage;Format=opencover" - --logger "trx;LogFileName=test-results-${{ inputs.os }}.trx" + --logger "trx;LogFileName=test-results-${{ matrix.os }}.trx" - name: Upload test results if: always() uses: actions/upload-artifact@v6 with: - name: test-results-${{ inputs.os }} + name: test-results-${{ matrix.os }} path: | test/**/TestResults/*.trx @@ -90,26 +119,28 @@ jobs: - name: Upload package uses: actions/upload-artifact@v6 with: - name: packages-${{ inputs.os }} + name: packages-${{ matrix.os }} path: | src/DemaConsulting.ReqStream/bin/Release/*.nupkg src/DemaConsulting.ReqStream/bin/Release/*.snupkg integration-test: - runs-on: ${{ inputs.os }} + name: Integration Test ${{ matrix.os }} .NET ${{ matrix.dotnet-version }} + runs-on: ${{ matrix.os }} needs: build permissions: contents: read strategy: matrix: + os: [windows-latest, ubuntu-latest] dotnet-version: ['8.x', '9.x', '10.x'] steps: - name: Download package uses: actions/download-artifact@v6 with: - name: packages-${{ inputs.os }} + name: packages-${{ matrix.os }} path: packages - name: Setup dotnet @@ -148,9 +179,154 @@ jobs: shell: bash run: | echo "Testing self-validation with TRX results output..." - reqstream --validate --results validation-results.trx || { + # Create a unique filename with OS and dotnet version + OS_NAME="${{ matrix.os }}" + DOTNET_VERSION="${{ matrix.dotnet-version }}" + TRX_FILE="integration-test-${OS_NAME}-dotnet${DOTNET_VERSION}.trx" + reqstream --validate --results "$TRX_FILE" || { echo "✗ Self-validation with results failed" exit 1 } - [ -f validation-results.trx ] || { echo "✗ Results file not created"; exit 1; } + [ -f "$TRX_FILE" ] || { echo "✗ Results file not created"; exit 1; } echo "✓ Self-validation with results succeeded" + + - name: Upload integration test results + if: always() + uses: actions/upload-artifact@v6 + with: + name: integration-test-results-${{ matrix.os }}-dotnet${{ matrix.dotnet-version }} + path: integration-test-*.trx + + build-docs: + name: Build Documentation + runs-on: windows-latest + needs: [build, integration-test] + permissions: + contents: read + + steps: + - name: Checkout repository + uses: actions/checkout@v6 + + - name: Download test results from Windows + uses: actions/download-artifact@v6 + with: + name: test-results-windows-latest + path: test-results + continue-on-error: true + + - name: Download test results from Linux + uses: actions/download-artifact@v6 + with: + name: test-results-ubuntu-latest + path: test-results + continue-on-error: true + + - name: Download integration test results Windows .NET 8.x + uses: actions/download-artifact@v6 + with: + name: integration-test-results-windows-latest-dotnet8.x + path: test-results + continue-on-error: true + + - name: Download integration test results Windows .NET 9.x + uses: actions/download-artifact@v6 + with: + name: integration-test-results-windows-latest-dotnet9.x + path: test-results + continue-on-error: true + + - name: Download integration test results Windows .NET 10.x + uses: actions/download-artifact@v6 + with: + name: integration-test-results-windows-latest-dotnet10.x + path: test-results + continue-on-error: true + + - name: Download integration test results Linux .NET 8.x + uses: actions/download-artifact@v6 + with: + name: integration-test-results-ubuntu-latest-dotnet8.x + path: test-results + continue-on-error: true + + - name: Download integration test results Linux .NET 9.x + uses: actions/download-artifact@v6 + with: + name: integration-test-results-ubuntu-latest-dotnet9.x + path: test-results + continue-on-error: true + + - name: Download integration test results Linux .NET 10.x + uses: actions/download-artifact@v6 + with: + name: integration-test-results-ubuntu-latest-dotnet10.x + path: test-results + continue-on-error: true + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 'lts/*' + + - name: Setup dotnet + uses: actions/setup-dotnet@v5 + with: + dotnet-version: 10.x + + - name: Install npm dependencies + run: npm install + + - name: Restore dotnet tools + run: dotnet tool restore + + - name: Generate Requirements Report and Trace Matrix + run: > + dotnet reqstream + --requirements requirements.yaml + --tests "test-results/**/*.trx" + --report docs/requirements/requirements.md + --matrix docs/tracematrix/tracematrix.md + + - name: Generate HTML with Pandoc + run: > + dotnet pandoc + --defaults docs/guide/definition.yaml + --filter node_modules/.bin/mermaid-filter.cmd + --output docs/guide/guide.html + + - name: Generate PDF with Weasyprint + run: > + dotnet weasyprint + docs/guide/guide.html + docs/guide.pdf + + - name: Generate Requirements HTML with Pandoc + run: > + dotnet pandoc + --defaults docs/requirements/definition.yaml + --output docs/requirements/requirements.html + + - name: Generate Requirements PDF with Weasyprint + run: > + dotnet weasyprint + docs/requirements/requirements.html + docs/requirements.pdf + + - name: Generate Trace Matrix HTML with Pandoc + run: > + dotnet pandoc + --defaults docs/tracematrix/definition.yaml + --output docs/tracematrix/tracematrix.html + + - name: Generate Trace Matrix PDF with Weasyprint + run: > + dotnet weasyprint + docs/tracematrix/tracematrix.html + docs/tracematrix.pdf + + - name: Upload documentation + uses: actions/upload-artifact@v6 + with: + name: documentation + path: docs/*.pdf diff --git a/.github/workflows/build_on_push.yaml b/.github/workflows/build_on_push.yaml index 1ccc5ce..6d22ef9 100644 --- a/.github/workflows/build_on_push.yaml +++ b/.github/workflows/build_on_push.yaml @@ -8,64 +8,13 @@ on: - cron: '0 17 * * 1' # 5PM UTC every Monday jobs: - quality-checks: - name: Quality Checks - runs-on: ubuntu-latest - permissions: - contents: read - - steps: - - name: Checkout repository - uses: actions/checkout@v6 - - - name: Markdown Lint - uses: DavidAnson/markdownlint-cli2-action@v22 - with: - globs: '**/*.md' - - - name: Spell Check - uses: streetsidesoftware/cspell-action@v8 - with: - files: | - **/*.md - **/*.cs - - - name: YAML Lint - uses: ibiqlik/action-yamllint@v3 - with: - config_file: .yamllint.yaml - - build-windows: - name: Build Windows - needs: quality-checks + build: + name: Build permissions: contents: read pull-requests: write uses: ./.github/workflows/build.yaml with: - os: windows-latest version: 0.0.0-run.${{ github.run_number }} secrets: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - - build-linux: - name: Build Linux - needs: quality-checks - permissions: - contents: read - pull-requests: write - uses: ./.github/workflows/build.yaml - with: - os: ubuntu-latest - version: 0.0.0-run.${{ github.run_number }} - secrets: - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - - build-docs: - name: Build Documentation - needs: - - build-windows # Needed for test results - - build-linux # Needed for test results - permissions: - contents: read - uses: ./.github/workflows/build_docs.yaml diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index e2b83c0..5cfbd1e 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -25,21 +25,14 @@ jobs: pull-requests: write uses: ./.github/workflows/build.yaml with: - os: ubuntu-latest version: ${{ inputs.version }} secrets: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - build-docs: - name: Build Documentation - permissions: - contents: read - uses: ./.github/workflows/build_docs.yaml - release: name: Release runs-on: ubuntu-latest - needs: [build, build-docs] + needs: build permissions: contents: write diff --git a/requirements.yaml b/requirements.yaml index 5f10bc7..6dd7e2d 100644 --- a/requirements.yaml +++ b/requirements.yaml @@ -198,18 +198,38 @@ sections: requirements: - id: "PLT-001" title: "The tool shall run on Windows operating systems." + tests: + - "Program_Run_WithVersionFlag_PrintsVersion" + - "Program_Run_WithHelpFlag_PrintsHelp" + - "Context_Create_ValidateFlag_SetsValidateProperty" - id: "PLT-002" title: "The tool shall run on Linux operating systems." + tests: + - "Program_Run_WithVersionFlag_PrintsVersion" + - "Program_Run_WithHelpFlag_PrintsHelp" + - "Context_Create_ValidateFlag_SetsValidateProperty" - id: "PLT-003" title: "The tool shall run on macOS operating systems." - id: "PLT-004" title: "The tool shall support .NET 8.0 runtime." + tests: + - "Program_Run_WithVersionFlag_PrintsVersion" + - "Program_Run_WithHelpFlag_PrintsHelp" + - "Context_Create_ValidateFlag_SetsValidateProperty" - id: "PLT-005" title: "The tool shall support .NET 9.0 runtime." + tests: + - "Program_Run_WithVersionFlag_PrintsVersion" + - "Program_Run_WithHelpFlag_PrintsHelp" + - "Context_Create_ValidateFlag_SetsValidateProperty" - id: "PLT-006" title: "The tool shall support .NET 10.0 runtime." + tests: + - "Program_Run_WithVersionFlag_PrintsVersion" + - "Program_Run_WithHelpFlag_PrintsHelp" + - "Context_Create_ValidateFlag_SetsValidateProperty" From 0b5a268c7e8f4b4050466714d1a0389183393ee7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 11 Jan 2026 02:22:48 +0000 Subject: [PATCH 3/6] Address PR feedback: simplify artifact downloads and add filename filters - Consolidated multiple download-artifact steps into single step with pattern - Added filename filters to platform requirements for Windows/Linux - Added filename filters to .NET version requirements for 8.x/9.x/10.x - This ensures each requirement only uses test results from relevant platforms Co-authored-by: Malcolmnixon <1863707+Malcolmnixon@users.noreply.github.com> --- .github/workflows/build.yaml | 53 ++---------------------------------- requirements.yaml | 30 ++++++++++---------- 2 files changed, 17 insertions(+), 66 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 85a9d93..a20f36f 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -208,60 +208,11 @@ jobs: - name: Checkout repository uses: actions/checkout@v6 - - name: Download test results from Windows + - name: Download all test results uses: actions/download-artifact@v6 with: - name: test-results-windows-latest - path: test-results - continue-on-error: true - - - name: Download test results from Linux - uses: actions/download-artifact@v6 - with: - name: test-results-ubuntu-latest - path: test-results - continue-on-error: true - - - name: Download integration test results Windows .NET 8.x - uses: actions/download-artifact@v6 - with: - name: integration-test-results-windows-latest-dotnet8.x - path: test-results - continue-on-error: true - - - name: Download integration test results Windows .NET 9.x - uses: actions/download-artifact@v6 - with: - name: integration-test-results-windows-latest-dotnet9.x - path: test-results - continue-on-error: true - - - name: Download integration test results Windows .NET 10.x - uses: actions/download-artifact@v6 - with: - name: integration-test-results-windows-latest-dotnet10.x - path: test-results - continue-on-error: true - - - name: Download integration test results Linux .NET 8.x - uses: actions/download-artifact@v6 - with: - name: integration-test-results-ubuntu-latest-dotnet8.x - path: test-results - continue-on-error: true - - - name: Download integration test results Linux .NET 9.x - uses: actions/download-artifact@v6 - with: - name: integration-test-results-ubuntu-latest-dotnet9.x - path: test-results - continue-on-error: true - - - name: Download integration test results Linux .NET 10.x - uses: actions/download-artifact@v6 - with: - name: integration-test-results-ubuntu-latest-dotnet10.x path: test-results + pattern: '*test-results*' continue-on-error: true - name: Setup Node.js diff --git a/requirements.yaml b/requirements.yaml index 6dd7e2d..8866813 100644 --- a/requirements.yaml +++ b/requirements.yaml @@ -199,16 +199,16 @@ sections: - id: "PLT-001" title: "The tool shall run on Windows operating systems." tests: - - "Program_Run_WithVersionFlag_PrintsVersion" - - "Program_Run_WithHelpFlag_PrintsHelp" - - "Context_Create_ValidateFlag_SetsValidateProperty" + - "windows-latest@Program_Run_WithVersionFlag_PrintsVersion" + - "windows-latest@Program_Run_WithHelpFlag_PrintsHelp" + - "windows-latest@Context_Create_ValidateFlag_SetsValidateProperty" - id: "PLT-002" title: "The tool shall run on Linux operating systems." tests: - - "Program_Run_WithVersionFlag_PrintsVersion" - - "Program_Run_WithHelpFlag_PrintsHelp" - - "Context_Create_ValidateFlag_SetsValidateProperty" + - "ubuntu-latest@Program_Run_WithVersionFlag_PrintsVersion" + - "ubuntu-latest@Program_Run_WithHelpFlag_PrintsHelp" + - "ubuntu-latest@Context_Create_ValidateFlag_SetsValidateProperty" - id: "PLT-003" title: "The tool shall run on macOS operating systems." @@ -216,20 +216,20 @@ sections: - id: "PLT-004" title: "The tool shall support .NET 8.0 runtime." tests: - - "Program_Run_WithVersionFlag_PrintsVersion" - - "Program_Run_WithHelpFlag_PrintsHelp" - - "Context_Create_ValidateFlag_SetsValidateProperty" + - "dotnet8.x@Program_Run_WithVersionFlag_PrintsVersion" + - "dotnet8.x@Program_Run_WithHelpFlag_PrintsHelp" + - "dotnet8.x@Context_Create_ValidateFlag_SetsValidateProperty" - id: "PLT-005" title: "The tool shall support .NET 9.0 runtime." tests: - - "Program_Run_WithVersionFlag_PrintsVersion" - - "Program_Run_WithHelpFlag_PrintsHelp" - - "Context_Create_ValidateFlag_SetsValidateProperty" + - "dotnet9.x@Program_Run_WithVersionFlag_PrintsVersion" + - "dotnet9.x@Program_Run_WithHelpFlag_PrintsHelp" + - "dotnet9.x@Context_Create_ValidateFlag_SetsValidateProperty" - id: "PLT-006" title: "The tool shall support .NET 10.0 runtime." tests: - - "Program_Run_WithVersionFlag_PrintsVersion" - - "Program_Run_WithHelpFlag_PrintsHelp" - - "Context_Create_ValidateFlag_SetsValidateProperty" + - "dotnet10.x@Program_Run_WithVersionFlag_PrintsVersion" + - "dotnet10.x@Program_Run_WithHelpFlag_PrintsHelp" + - "dotnet10.x@Context_Create_ValidateFlag_SetsValidateProperty" From e90dcbabb7184e2a3153d0a1211b9686cdc91080 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 11 Jan 2026 02:24:53 +0000 Subject: [PATCH 4/6] Use ReqStream version from build in documentation job - Added package download step to build-docs job - Install ReqStream from build artifacts instead of dotnet-tools.json - Removed ReqStream from .config/dotnet-tools.json - Ensures documentation uses the version being built/tested Co-authored-by: Malcolmnixon <1863707+Malcolmnixon@users.noreply.github.com> --- .config/dotnet-tools.json | 6 ------ .github/workflows/build.yaml | 11 +++++++++++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index 147e38d..828619a 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -2,12 +2,6 @@ "version": 1, "isRoot": true, "tools": { - "demaconsulting.reqstream": { - "version": "0.1.0", - "commands": [ - "reqstream" - ] - }, "demaconsulting.spdxtool": { "version": "2.6.0", "commands": [ diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index a20f36f..d5ca5e3 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -215,6 +215,12 @@ jobs: pattern: '*test-results*' continue-on-error: true + - name: Download package + uses: actions/download-artifact@v6 + with: + name: packages-windows-latest + path: packages + - name: Setup Node.js uses: actions/setup-node@v4 with: @@ -231,6 +237,11 @@ jobs: - name: Restore dotnet tools run: dotnet tool restore + - name: Install ReqStream from build + run: | + echo "Installing ReqStream version ${{ inputs.version }} from build..." + dotnet tool install --global --add-source packages --version ${{ inputs.version }} DemaConsulting.ReqStream + - name: Generate Requirements Report and Trace Matrix run: > dotnet reqstream From e3b56765dc10ba902a201d4b3840453652ee7787 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 11 Jan 2026 02:29:52 +0000 Subject: [PATCH 5/6] Remove unused build_docs.yaml workflow file - build_docs.yaml is no longer used after consolidation into build.yaml - Documentation build functionality is now part of the build.yaml workflow Co-authored-by: Malcolmnixon <1863707+Malcolmnixon@users.noreply.github.com> --- .github/workflows/build_docs.yaml | 97 ------------------------------- 1 file changed, 97 deletions(-) delete mode 100644 .github/workflows/build_docs.yaml diff --git a/.github/workflows/build_docs.yaml b/.github/workflows/build_docs.yaml deleted file mode 100644 index 7e89e57..0000000 --- a/.github/workflows/build_docs.yaml +++ /dev/null @@ -1,97 +0,0 @@ ---- -name: Build Documentation - -on: - workflow_call: - -jobs: - build-docs: - name: Build Documentation - runs-on: windows-latest - permissions: - contents: read - - steps: - - name: Checkout repository - uses: actions/checkout@v6 - - - name: Download test results from Windows - uses: actions/download-artifact@v6 - with: - name: test-results-windows-latest - path: test-results - continue-on-error: true - - - name: Download test results from Linux - uses: actions/download-artifact@v6 - with: - name: test-results-ubuntu-latest - path: test-results - continue-on-error: true - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: 'lts/*' - - - name: Setup dotnet - uses: actions/setup-dotnet@v5 - with: - dotnet-version: 10.x - - - name: Install npm dependencies - run: npm install - - - name: Restore dotnet tools - run: dotnet tool restore - - - name: Generate Requirements Report and Trace Matrix - run: > - dotnet reqstream - --requirements requirements.yaml - --tests "test-results/**/*.trx" - --report docs/requirements/requirements.md - --matrix docs/tracematrix/tracematrix.md - - - name: Generate HTML with Pandoc - run: > - dotnet pandoc - --defaults docs/guide/definition.yaml - --filter node_modules/.bin/mermaid-filter.cmd - --output docs/guide/guide.html - - - name: Generate PDF with Weasyprint - run: > - dotnet weasyprint - docs/guide/guide.html - docs/guide.pdf - - - name: Generate Requirements HTML with Pandoc - run: > - dotnet pandoc - --defaults docs/requirements/definition.yaml - --output docs/requirements/requirements.html - - - name: Generate Requirements PDF with Weasyprint - run: > - dotnet weasyprint - docs/requirements/requirements.html - docs/requirements.pdf - - - name: Generate Trace Matrix HTML with Pandoc - run: > - dotnet pandoc - --defaults docs/tracematrix/definition.yaml - --output docs/tracematrix/tracematrix.html - - - name: Generate Trace Matrix PDF with Weasyprint - run: > - dotnet weasyprint - docs/tracematrix/tracematrix.html - docs/tracematrix.pdf - - - name: Upload documentation - uses: actions/upload-artifact@v6 - with: - name: documentation - path: docs/*.pdf From 7e840766043639d6d0830df9f6e7ddc5f10967bb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 11 Jan 2026 02:43:24 +0000 Subject: [PATCH 6/6] Use reqstream directly without dotnet prefix - ReqStream is installed globally, so it's available as 'reqstream' command - Removed 'dotnet' prefix from reqstream invocation - Other tools (pandoc, weasyprint) remain with dotnet prefix as they're from manifest Co-authored-by: Malcolmnixon <1863707+Malcolmnixon@users.noreply.github.com> --- .github/workflows/build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index d5ca5e3..b3219d7 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -244,7 +244,7 @@ jobs: - name: Generate Requirements Report and Trace Matrix run: > - dotnet reqstream + reqstream --requirements requirements.yaml --tests "test-results/**/*.trx" --report docs/requirements/requirements.md