Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .config/dotnet-tools.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
]
},
"demaconsulting.reqstream": {
"version": "1.3.0",
"version": "1.4.0",
"commands": [
"reqstream"
]
Expand Down
221 changes: 146 additions & 75 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ jobs:
permissions:
contents: read
steps:
# === INSTALL DEPENDENCIES ===
# This section installs all required dependencies for quality checks.
# Downstream projects: Add any additional dependency installations here.

- name: Checkout
uses: actions/checkout@v6

Expand All @@ -33,15 +37,23 @@ jobs:
- name: Capture tool versions
shell: bash
run: |
mkdir -p artifacts
echo "Capturing tool versions..."
dotnet versionmark --capture --job-id "quality" -- dotnet git versionmark
dotnet versionmark --capture --job-id "quality" \
--output "artifacts/versionmark-quality.json" -- \
dotnet git versionmark
echo "✓ Tool versions captured"

- name: Upload version capture
uses: actions/upload-artifact@v7
with:
name: version-capture-quality
path: versionmark-quality.json
# === CAPTURE OTS SELF-VALIDATION RESULTS ===
# This section captures self-validation results from OTS tools.
# Downstream projects: Add any additional self-validation steps here.

- name: Run VersionMark self-validation
run: dotnet versionmark --validate --results artifacts/versionmark-self-validation-quality.trx

# === RUN QUALITY CHECKS ===
# This section runs all quality checks for the project.
# Downstream projects: Add any additional quality checks here.

- name: Run markdown linter
uses: DavidAnson/markdownlint-cli2-action@v22
Expand All @@ -59,6 +71,12 @@ jobs:
with:
config_file: .yamllint.yaml

- name: Upload quality artifacts
uses: actions/upload-artifact@v7
with:
name: artifacts-quality
path: artifacts/

# Builds and unit-tests the project on supported operating systems to ensure
# unit-tests operate on all platforms and to run SonarScanner for generating
# the code quality report.
Expand All @@ -77,6 +95,10 @@ jobs:

steps:

# === INSTALL DEPENDENCIES ===
# This section installs all required dependencies for the build.
# Downstream projects: Add any additional dependency installations here.

- name: Checkout
uses: actions/checkout@v6
with:
Expand All @@ -94,6 +116,33 @@ jobs:
run: >
dotnet tool restore

# === CAPTURE TOOL VERSIONS ===
# This section captures the versions of all tools used in the build process.
# Downstream projects: Add any additional tools to capture here.

- name: Capture tool versions
shell: bash
run: |
mkdir -p artifacts
echo "Capturing tool versions..."
OS_SHORT=$(echo "${{ matrix.os }}" | sed 's/windows-latest/win/;s/ubuntu-latest/ubuntu/')
JOB_ID="build-${OS_SHORT}"
dotnet versionmark --capture --job-id "${JOB_ID}" \
--output "artifacts/versionmark-${JOB_ID}.json" -- \
dotnet git dotnet-sonarscanner versionmark
echo "✓ Tool versions captured"

# === CAPTURE OTS SELF-VALIDATION RESULTS ===
# This section captures self-validation results from OTS tools.
# Downstream projects: Add any additional self-validation steps here.

- name: Run VersionMark self-validation
run: dotnet versionmark --validate --results artifacts/versionmark-self-validation-${{ matrix.os }}.trx

# === BUILD AND TEST ===
# This section builds and tests the project.
# Downstream projects: Add any additional build and test steps here.

- name: Restore Dependencies
run: >
dotnet restore
Expand Down Expand Up @@ -126,7 +175,7 @@ jobs:
--property:Version=${{ inputs.version }}
--collect "XPlat Code Coverage;Format=opencover"
--logger "trx;LogFilePrefix=${{ matrix.os }}"
--results-directory test-results
--results-directory artifacts

- name: End Sonar Scanner
env:
Expand All @@ -143,33 +192,20 @@ jobs:
--no-restore
--property:PackageVersion=${{ inputs.version }}

- name: Capture tool versions
shell: bash
run: |
echo "Capturing tool versions..."
# Create short job ID: build-win, build-ubuntu
OS_SHORT=$(echo "${{ matrix.os }}" | sed 's/windows-latest/win/;s/ubuntu-latest/ubuntu/')
JOB_ID="build-${OS_SHORT}"
dotnet versionmark --capture --job-id "${JOB_ID}" -- \
dotnet git dotnet-sonarscanner versionmark
echo "✓ Tool versions captured"

- name: Upload version capture
uses: actions/upload-artifact@v7
with:
name: version-capture-${{ matrix.os }}
path: versionmark-build-*.json
# === UPLOAD ARTIFACTS ===
# This section uploads all build artifacts.
# Downstream projects: Add any additional artifact uploads here.

- name: Upload Test Results
- name: Upload build artifacts
uses: actions/upload-artifact@v7
with:
name: test-results-${{ matrix.os }}
path: test-results/*.trx
name: artifacts-build-${{ matrix.os }}
path: artifacts/

- name: Upload Artifacts
- name: Upload packages
uses: actions/upload-artifact@v7
with:
name: artifacts-${{ matrix.os }}
name: packages-${{ matrix.os }}
path: |
src/DemaConsulting.TemplateDotNetTool/bin/Release/*.nupkg
src/DemaConsulting.TemplateDotNetTool/bin/Release/*.snupkg
Expand All @@ -186,6 +222,10 @@ jobs:
security-events: write

steps:
# === INSTALL DEPENDENCIES ===
# This section installs all required dependencies for CodeQL analysis.
# Downstream projects: Add any additional dependency installations here.

- name: Checkout
uses: actions/checkout@v6
with:
Expand Down Expand Up @@ -214,6 +254,10 @@ jobs:
run: >
dotnet restore

# === BUILD AND ANALYZE ===
# This section builds the project and runs CodeQL analysis.
# Downstream projects: Add any additional analysis steps here.

- name: Build
run: >
dotnet build
Expand All @@ -225,14 +269,18 @@ jobs:
uses: github/codeql-action/analyze@v4
with:
category: "/language:csharp"
output: sarif-results
output: artifacts
upload: false

- name: Upload CodeQL SARIF
# === UPLOAD ARTIFACTS ===
# This section uploads all CodeQL artifacts.
# Downstream projects: Add any additional artifact uploads here.

- name: Upload CodeQL artifacts
uses: actions/upload-artifact@v7
with:
name: codeql-sarif
path: sarif-results/csharp.sarif
name: artifacts-codeql
path: artifacts/

# Performs integration testing on a matrix of operating systems and .NET runtimes,
# involving basic tool execution and running self-validation to ensure compatibility
Expand All @@ -250,6 +298,10 @@ jobs:
dotnet-version: ['8.x', '9.x', '10.x']

steps:
# === INSTALL DEPENDENCIES ===
# This section installs all required dependencies and tools for integration testing.
# Downstream projects: Add any additional dependency installations here.

- name: Checkout
uses: actions/checkout@v6
with:
Expand All @@ -260,7 +312,7 @@ jobs:
- name: Download package
uses: actions/download-artifact@v8
with:
name: artifacts-${{ matrix.os }}
name: packages-${{ matrix.os }}
path: packages

- name: Setup dotnet
Expand All @@ -281,6 +333,28 @@ jobs:
--version ${{ inputs.version }} \
DemaConsulting.TemplateDotNetTool

# === CAPTURE TOOL VERSIONS ===
# This section captures the versions of all tools used in the integration tests.
# Downstream projects: Add any additional tools to capture here.

- name: Capture tool versions
shell: bash
run: |
mkdir -p artifacts
echo "Capturing tool versions..."
# Create short job ID: int-win-8, int-win-9, int-ubuntu-8, etc.
OS_SHORT=$(echo "${{ matrix.os }}" | sed 's/windows-latest/win/;s/ubuntu-latest/ubuntu/')
DOTNET_SHORT=$(echo "${{ matrix.dotnet-version }}" | sed 's/\.x$//')
JOB_ID="int-${OS_SHORT}-${DOTNET_SHORT}"
dotnet versionmark --capture --job-id "${JOB_ID}" \
--output "artifacts/versionmark-${JOB_ID}.json" -- \
dotnet git versionmark
echo "✓ Tool versions captured"

# === RUN INTEGRATION TESTS ===
# This section runs the integration tests for the tool.
# Downstream projects: Add any additional integration test steps here.

- name: Test version display
shell: bash
run: |
Expand All @@ -299,33 +373,21 @@ jobs:
shell: bash
run: |
echo "Running self-validation..."
templatetool --validate --results validation-${{ matrix.os }}-dotnet${{ matrix.dotnet-version }}.trx \
templatetool --validate \
--results artifacts/validation-${{ matrix.os }}-dotnet${{ matrix.dotnet-version }}.trx \
|| { echo "✗ Self-validation failed"; exit 1; }
echo "✓ Self-validation succeeded"

- name: Capture tool versions
shell: bash
run: |
echo "Capturing tool versions..."
# Create short job ID: int-win-8, int-win-9, int-ubuntu-8, etc.
OS_SHORT=$(echo "${{ matrix.os }}" | sed 's/windows-latest/win/;s/ubuntu-latest/ubuntu/')
DOTNET_SHORT=$(echo "${{ matrix.dotnet-version }}" | sed 's/\.x$//')
JOB_ID="int-${OS_SHORT}-${DOTNET_SHORT}"
dotnet versionmark --capture --job-id "${JOB_ID}" -- dotnet git versionmark
echo "✓ Tool versions captured"

- name: Upload version capture
uses: actions/upload-artifact@v7
with:
name: version-capture-${{ matrix.os }}-dotnet${{ matrix.dotnet-version }}
path: versionmark-int-*.json
# === UPLOAD ARTIFACTS ===
# This section uploads all generated artifacts for use by downstream jobs.
# Downstream projects: Add any additional artifact uploads here.

- name: Upload validation test results
- name: Upload validation artifacts
if: always()
uses: actions/upload-artifact@v7
with:
name: validation-test-results-${{ matrix.os }}-dotnet${{ matrix.dotnet-version }}
path: validation-${{ matrix.os }}-dotnet${{ matrix.dotnet-version }}.trx
name: artifacts-validation-${{ matrix.os }}-dotnet${{ matrix.dotnet-version }}
path: artifacts/

# Builds the supporting documentation including user guides, requirements,
# trace matrices, code quality reports, and build notes.
Expand All @@ -344,32 +406,20 @@ jobs:
- name: Checkout
uses: actions/checkout@v6

- name: Download all test results
- name: Download all job artifacts
uses: actions/download-artifact@v8
with:
path: test-results
pattern: '*test-results*'
path: artifacts
pattern: 'artifacts-*'
merge-multiple: true
continue-on-error: true

- name: Download TemplateTool package
- name: Download packages artifact
uses: actions/download-artifact@v8
with:
name: artifacts-windows-latest
name: packages-ubuntu-latest
path: packages

- name: Download CodeQL SARIF
uses: actions/download-artifact@v8
with:
name: codeql-sarif
path: codeql-results

- name: Download all version captures
uses: actions/download-artifact@v8
with:
path: version-captures
pattern: 'version-capture-*'
continue-on-error: true

# === INSTALL DEPENDENCIES ===
# This section installs all required dependencies and tools for document generation.
# Downstream projects: Add any additional dependency installations here.
Expand Down Expand Up @@ -406,11 +456,32 @@ jobs:
- name: Capture tool versions for build-docs
shell: bash
run: |
mkdir -p artifacts
echo "Capturing tool versions..."
dotnet versionmark --capture --job-id "build-docs" -- \
dotnet versionmark --capture --job-id "build-docs" \
--output "artifacts/versionmark-build-docs.json" -- \
dotnet git node npm pandoc weasyprint sarifmark sonarmark reqstream buildmark versionmark
echo "✓ Tool versions captured"

# === CAPTURE OTS SELF-VALIDATION RESULTS ===
# This section captures self-validation results from OTS tools.
# Downstream projects: Add any additional self-validation steps here.

- name: Run ReqStream self-validation
run: dotnet reqstream --validate --results artifacts/reqstream-self-validation.trx

- name: Run BuildMark self-validation
run: dotnet buildmark --validate --results artifacts/buildmark-self-validation.trx

- name: Run VersionMark self-validation
run: dotnet versionmark --validate --results artifacts/versionmark-self-validation.trx

- name: Run SarifMark self-validation
run: dotnet sarifmark --validate --results artifacts/sarifmark-self-validation.trx

- name: Run SonarMark self-validation
run: dotnet sonarmark --validate --results artifacts/sonarmark-self-validation.trx

# === GENERATE MARKDOWN REPORTS ===
# This section generates all markdown reports from various tools and sources.
# Downstream projects: Add any additional markdown report generation steps here.
Expand All @@ -419,7 +490,7 @@ jobs:
run: >
dotnet reqstream
--requirements requirements.yaml
--tests "test-results/**/*.trx"
--tests "artifacts/**/*.trx"
--report docs/requirements/requirements.md
--justifications docs/justifications/justifications.md
--matrix docs/tracematrix/tracematrix.md
Expand All @@ -428,7 +499,7 @@ jobs:
- name: Generate CodeQL Quality Report with SarifMark
run: >
dotnet sarifmark
--sarif codeql-results/csharp.sarif
--sarif artifacts/csharp.sarif
--report docs/quality/codeql-quality.md
--heading "Template DotNet Tool CodeQL Analysis"
--report-depth 1
Expand Down Expand Up @@ -479,7 +550,7 @@ jobs:
run: |
echo "Publishing tool versions..."
dotnet versionmark --publish --report docs/buildnotes/versions.md --report-depth 1 \
-- "versionmark-*.json" "version-captures/**/versionmark-*.json"
-- "artifacts/**/versionmark-*.json"
echo "✓ Tool versions published"

- name: Display Tool Versions Report
Expand Down
Loading