diff --git a/.github/ISSUE_TEMPLATE/question.yml b/.github/ISSUE_TEMPLATE/question.yml new file mode 100644 index 0000000..1ae9c1d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question.yml @@ -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 diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 709eaa4..ddebc0f 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -90,7 +90,7 @@ jobs: strategy: matrix: - os: [windows-latest, ubuntu-latest] + os: [windows-latest, ubuntu-latest, macos-latest] runs-on: ${{ matrix.os }} @@ -102,6 +102,8 @@ jobs: - name: Checkout uses: actions/checkout@v6 + with: + fetch-depth: 0 - name: Setup dotnet uses: actions/setup-dotnet@v5 @@ -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" -- \ @@ -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 }}" @@ -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. @@ -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 @@ -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: @@ -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}" \ @@ -491,7 +500,6 @@ jobs: --enforce - name: Generate CodeQL Quality Report with SarifMark - shell: bash run: > dotnet sarifmark --sarif artifacts/csharp.sarif @@ -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 @@ -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 @@ -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 @@ -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 diff --git a/AGENTS.md b/AGENTS.md index 9676c4d..07447b4 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -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 @@ -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 @@ -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 diff --git a/requirements.yaml b/requirements.yaml index c16dffb..a05d146 100644 --- a/requirements.yaml +++ b/requirements.yaml @@ -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 @@ -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: | diff --git a/test/DemaConsulting.ReqStream.Tests/DemaConsulting.ReqStream.Tests.csproj b/test/DemaConsulting.ReqStream.Tests/DemaConsulting.ReqStream.Tests.csproj index ca0eef7..43307da 100644 --- a/test/DemaConsulting.ReqStream.Tests/DemaConsulting.ReqStream.Tests.csproj +++ b/test/DemaConsulting.ReqStream.Tests/DemaConsulting.ReqStream.Tests.csproj @@ -9,10 +9,10 @@ false true + true true - true true true latest @@ -20,6 +20,10 @@ + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -31,6 +35,11 @@ + all runtime; build; native; contentfiles; analyzers; buildtransitive