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
83 changes: 83 additions & 0 deletions .github/ISSUE_TEMPLATE/question.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
---
name: ❓ Question / Help
description: Ask a usage question or get help with ReqStream
title: "[Question]: "
labels: ["question"]
assignees: []
body:
- type: markdown
attributes:
value: |
Thanks for reaching out! Please fill out the sections below so we can help you as quickly as possible.
For general discussion, you can also use
[GitHub Discussions](https://github.com/demaconsulting/ReqStream/discussions).

- type: textarea
id: question
attributes:
label: Question
description: A clear and concise description of what you need help with.
placeholder: What would you like to know or understand?
validations:
required: true

- type: textarea
id: what-tried
attributes:
label: What Have You Tried?
description: Describe what you have already attempted, including any code or configuration you have used.
placeholder: |
# Your configuration here
# e.g.:
# setting1: value
# setting2: value
render: yaml

- type: textarea
id: expected
attributes:
label: Expected Outcome
description: A clear and concise description of what you expected to happen or what you are trying to achieve.
placeholder: Describe the outcome you are looking for...
validations:
required: true

- type: input
id: version
attributes:
label: Tool Version
description: What version of ReqStream are you using?
placeholder: e.g., 1.0.0
validations:
required: true

- type: dropdown
id: dotnet-version
attributes:
label: .NET Version
description: What version of .NET are you using?
options:
- ".NET 8"
- ".NET 9"
- ".NET 10"
- Other (please specify in additional context)
validations:
required: true

- type: textarea
id: additional-context
attributes:
label: Additional Context
description: Add any other context, screenshots, or links that may help answer your question.
placeholder: Any additional information...

- type: checkboxes
id: checklist
attributes:
label: Checklist
description: Please confirm the following
options:
- label: I have searched existing issues and discussions to ensure this has not been answered before
required: true
- label: I have provided a clear description of my question
required: true
34 changes: 23 additions & 11 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ jobs:

strategy:
matrix:
os: [windows-latest, ubuntu-latest]
os: [windows-latest, ubuntu-latest, macos-latest]

runs-on: ${{ matrix.os }}

Expand All @@ -102,6 +102,8 @@ jobs:

- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0

- name: Setup dotnet
uses: actions/setup-dotnet@v5
Expand All @@ -124,8 +126,8 @@ jobs:
run: |
mkdir -p artifacts
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/')
# Create short job ID: build-windows, build-ubuntu, build-macos
OS_SHORT=$(echo "${{ matrix.os }}" | sed 's/-latest//')
JOB_ID="build-${OS_SHORT}"
dotnet versionmark --capture --job-id "${JOB_ID}" \
--output "artifacts/versionmark-${JOB_ID}.json" -- \
Expand All @@ -148,8 +150,11 @@ jobs:
dotnet restore

- name: Start Sonar Scanner
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: >
dotnet sonarscanner begin
dotnet dotnet-sonarscanner
begin
/k:"demaconsulting_ReqStream"
/o:"demaconsulting"
/d:sonar.token="${{ secrets.SONAR_TOKEN }}"
Expand All @@ -174,16 +179,20 @@ jobs:
--results-directory artifacts

- name: End Sonar Scanner
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: >
dotnet sonarscanner end
dotnet dotnet-sonarscanner
end
/d:sonar.token="${{ secrets.SONAR_TOKEN }}"

- name: Create Dotnet Tool
run: >
dotnet pack
--no-build
--no-restore
--configuration Release
--property:Version=${{ inputs.version }}
--property:PackageVersion=${{ inputs.version }}

# === UPLOAD ARTIFACTS ===
# This section uploads all build artifacts.
Expand Down Expand Up @@ -228,9 +237,9 @@ jobs:
uses: github/codeql-action/init@v4
with:
languages: csharp
build-mode: manual
queries: security-and-quality
config-file: ./.github/codeql-config.yml
build-mode: manual

- name: Setup dotnet
uses: actions/setup-dotnet@v5
Expand Down Expand Up @@ -288,7 +297,7 @@ jobs:

strategy:
matrix:
os: [windows-latest, ubuntu-latest]
os: [windows-latest, ubuntu-latest, macos-latest]
dotnet-version: ['8.x', '9.x', '10.x']

steps:
Expand Down Expand Up @@ -336,8 +345,8 @@ jobs:
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/')
# Create short job ID: int-windows-8, int-ubuntu-9, int-macos-10, etc.
OS_SHORT=$(echo "${{ matrix.os }}" | sed 's/-latest//')
DOTNET_SHORT=$(echo "${{ matrix.dotnet-version }}" | sed 's/\.x$//')
JOB_ID="int-${OS_SHORT}-${DOTNET_SHORT}"
dotnet versionmark --capture --job-id "${JOB_ID}" \
Expand Down Expand Up @@ -491,7 +500,6 @@ jobs:
--enforce

- name: Generate CodeQL Quality Report with SarifMark
shell: bash
run: >
dotnet sarifmark
--sarif artifacts/csharp.sarif
Expand Down Expand Up @@ -583,6 +591,7 @@ jobs:
run: >
dotnet pandoc
--defaults docs/quality/definition.yaml
--filter node_modules/.bin/mermaid-filter.cmd
--metadata version="${{ inputs.version }}"
--metadata date="$(date +'%Y-%m-%d')"
--output docs/quality/quality.html
Expand All @@ -592,6 +601,7 @@ jobs:
run: >
dotnet pandoc
--defaults docs/requirements/definition.yaml
--filter node_modules/.bin/mermaid-filter.cmd
--metadata version="${{ inputs.version }}"
--metadata date="$(date +'%Y-%m-%d')"
--output docs/requirements/requirements.html
Expand All @@ -601,6 +611,7 @@ jobs:
run: >
dotnet pandoc
--defaults docs/justifications/definition.yaml
--filter node_modules/.bin/mermaid-filter.cmd
--metadata version="${{ inputs.version }}"
--metadata date="$(date +'%Y-%m-%d')"
--output docs/justifications/justifications.html
Expand All @@ -610,6 +621,7 @@ jobs:
run: >
dotnet pandoc
--defaults docs/tracematrix/definition.yaml
--filter node_modules/.bin/mermaid-filter.cmd
--metadata version="${{ inputs.version }}"
--metadata date="$(date +'%Y-%m-%d')"
--output docs/tracematrix/tracematrix.html
Expand Down
17 changes: 15 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,18 @@ written in YAML files.
- **Code Quality Agent** - Enforces linting, static analysis, and security standards
- **Repo Consistency Agent** - Ensures downstream repositories remain consistent with template patterns

## Agent Selection Guide

- Fix a bug → **Software Developer**
- Add a new feature → **Requirements Agent** → **Software Developer** → **Test Developer**
- Write a test → **Test Developer**
- Fix linting or static analysis issues → **Code Quality Agent**
- Update documentation → **Technical Writer**
- Add or update requirements → **Requirements Agent**
- Ensure test coverage linkage in `requirements.yaml` → **Requirements Agent**
- Run security scanning or address CodeQL alerts → **Code Quality Agent**
- Propagate template changes → **Repo Consistency Agent**

## Tech Stack

- C# latest, .NET 8.0/9.0/10.0, dotnet CLI, NuGet
Expand All @@ -36,6 +48,7 @@ evidence. This is critical for platform and framework requirements - **do not re

- `windows@TestName` - proves the test passed on a Windows platform
- `ubuntu@TestName` - proves the test passed on a Linux (Ubuntu) platform
- `macos@TestName` - proves the test passed on a macOS platform
- `net8.0@TestName` - proves the test passed under the .NET 8 target framework
- `net9.0@TestName` - proves the test passed under the .NET 9 target framework
- `net10.0@TestName` - proves the test passed under the .NET 10 target framework
Expand Down Expand Up @@ -102,9 +115,9 @@ build.bat # Windows
## CI/CD

- **Quality Checks**: Markdown lint, spell check, YAML lint
- **Build**: Multi-platform (Windows/Linux)
- **Build**: Multi-platform (Windows/Linux/macOS)
- **CodeQL**: Security scanning
- **Integration Tests**: .NET 8/9/10 on Windows/Linux
- **Integration Tests**: .NET 8/9/10 on Windows/Linux/macOS
- **Documentation**: Auto-generated via Pandoc + Weasyprint

## Common Tasks
Expand Down
15 changes: 15 additions & 0 deletions requirements.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
# Source filter prefixes:
# windows@TestName - proves the test passed on a Windows platform
# ubuntu@TestName - proves the test passed on a Linux (Ubuntu) platform
# macos@TestName - proves the test passed on a macOS platform
# net8.0@TestName - proves the test passed under the .NET 8 target framework
# net9.0@TestName - proves the test passed under the .NET 9 target framework
# net10.0@TestName - proves the test passed under the .NET 10 target framework
Expand Down Expand Up @@ -500,6 +501,20 @@ sections:
- "ubuntu@ReqStream_TagsFiltering"
- "ubuntu@ReqStream_EnforcementMode"

- id: ReqStream-Plt-MacOS
title: The tool shall run on macOS operating systems.
justification: |
macOS support is essential for developers using Apple platforms who need to run
ReqStream locally and in CI/CD pipelines on macOS agents.
tags:
- platform
tests:
- "macos@ReqStream_RequirementsProcessing"
- "macos@ReqStream_TraceMatrix"
- "macos@ReqStream_ReportExport"
- "macos@ReqStream_TagsFiltering"
- "macos@ReqStream_EnforcementMode"

- id: ReqStream-Plt-Net8
title: The tool shall support .NET 8.0 runtime.
justification: |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,21 @@

<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
<GenerateDocumentationFile>true</GenerateDocumentationFile>

<!-- Code Quality Configuration -->
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
<EnableNETAnalyzers>true</EnableNETAnalyzers>
<AnalysisLevel>latest</AnalysisLevel>
</PropertyGroup>

<!-- Test Framework Dependencies -->
<ItemGroup>
<!-- coverlet.collector uses child-element form to configure both PrivateAssets and IncludeAssets:
- PrivateAssets="all" keeps this test-coverage tool out of any consuming project's dependencies.
- IncludeAssets lists all asset types (including 'build' and 'buildtransitive') to ensure the
data collector MSBuild targets are activated so coverage is collected during test runs. -->
<PackageReference Include="coverlet.collector" Version="8.0.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
Expand All @@ -31,6 +35,11 @@

<!-- Code Analysis Dependencies -->
<ItemGroup>
<!-- Analyzer packages use child-element form to configure both PrivateAssets and IncludeAssets:
- PrivateAssets="all" prevents these build-time analyzers from becoming transitive dependencies
in any project that references this test project.
- IncludeAssets lists all asset types (including 'analyzers' and 'buildtransitive') to ensure
Roslyn analyzers and MSBuild targets are fully activated during the build. -->
<PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="10.0.103">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
Expand Down
Loading