Skip to content

ci: Fix publish versioning#1890

Merged
DaveSkender merged 23 commits intov3from
fix-deployer
Jan 10, 2026
Merged

ci: Fix publish versioning#1890
DaveSkender merged 23 commits intov3from
fix-deployer

Conversation

@DaveSkender
Copy link
Owner

No description provided.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 9, 2026

Warning

Rate limit exceeded

@DaveSkender has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 15 minutes and 16 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between 7b9311a and 65ec55b.

📒 Files selected for processing (1)
  • .github/workflows/deploy-package-github.yml
📝 Walkthrough

Walkthrough

Replaces the previous deploy-package workflow with two new workflows (CI and NuGet.org), centralizes branch-aware GitVersion configuration, and changes version outputs by context (CI: FullSemVer with metadata; manual previews: NuGetVersionV2; production: MajorMinorPatch). Removes dynamic pre-release suffix computation and associated debug steps, tightens deployment validation and branch constraints, and rewrites package cleanup from a shell/gh approach to a Node-based GitHub Script that lists package versions, retains recent releases, and deletes older ones. Also updates src/gitversion.yml and docs/contributing.md to document the branch-centric versioning model.

Possibly related PRs

  • PR 1889: Modifies deploy-package workflow version composition and replaces shell-based package cleanup with a GitHub Script—strong overlap in versioning and cleanup implementation.
  • PR 1610: Alters CI deployment workflow’s GitVersion usage and package cleanup logic, showing direct code-level overlap with version computation and deletion steps.
  • PR 1305: Updates src/gitversion.yml and the deploy workflow’s preview/prerelease suffix handling, intersecting with the branch-label and version-format changes in this PR.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Fix all issues with AI agents
In @.github/workflows/deploy-package.yml:
- Around line 387-388: The retention settings in the cleanup job are
inconsistent with docs; change the constants used by the cleanup step
(retentionDays and keepCount) to match docs/contributing.md (use retentionDays =
3 and keepCount = 5) or update the docs to match the current values; update
either the constants named retentionDays and keepCount in the workflow or change
the documentation line in docs/contributing.md (around the "auto-cleanup after"
text) so both reflect the same retention policy.

In @docs/contributing.md:
- Around line 247-251: The documentation under the "Automatic CI builds" section
is inconsistent with the workflow implementation: update the bullet that
currently reads "Old CI packages auto-cleanup after 3 days (keeps 5 most
recent)" to reflect the actual settings used by the workflow — change it to "Old
CI packages auto-cleanup after 90 days (keeps 10 most recent)" so the docs match
the implementation.
🧹 Nitpick comments (1)
.github/workflows/deploy-package.yml (1)

106-120: Redundant validation checks can be consolidated.

Lines 106-112 and 114-120 perform overlapping checks for the same condition (non-preview versions to nuget.org from non-main branch). The first check (106-112) already catches this case, making the second check (114-120) redundant.

♻️ Suggested simplification
-              # Non-preview versions to nuget.org must be from main or release branches
-              if [[ "$INPUT_PREVIEW" == "false" ]] && [[ "$GITHUB_REF" != "refs/heads/main" ]]; then
-                echo "::error::Stable versions (preview=false) can only be deployed from main branch"
-                echo "::error::Current branch: $GITHUB_REF"
-                echo "::error::Options: 1) Switch to main, or 2) Set preview=true for pre-release"
-                exit 1
-              fi
-
-              # Non-preview (production) versions are only allowed from main branch
-              if [[ "$GITHUB_REF" != "refs/heads/main" ]] && [[ "$INPUT_PREVIEW" != "true" ]]; then
-                echo "::error::Non-preview (production) versions to nuget.org are only allowed from main branch"
-                echo "::error::Current branch: $GITHUB_REF"
-                echo "::error::From v* branches, you must set preview=true"
-                exit 1
-              fi
+              # Non-preview (production) versions to nuget.org must be from main branch only
+              if [[ "$INPUT_PREVIEW" == "false" ]] && [[ "$GITHUB_REF" != "refs/heads/main" ]]; then
+                echo "::error::Stable versions (preview=false) can only be deployed from main branch"
+                echo "::error::Current branch: $GITHUB_REF"
+                echo "::error::Options: 1) Switch to main, or 2) Set preview=true for pre-release"
+                exit 1
+              fi
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between cdf9131 and 8fa03d2.

📒 Files selected for processing (3)
  • .github/workflows/deploy-package.yml
  • docs/contributing.md
  • src/gitversion.yml
🧰 Additional context used
📓 Path-based instructions (9)
.github/**/*.yml

⚙️ CodeRabbit configuration file

.github/**/*.yml: Review for:

  • Security: No secrets in workflows, proper permissions
  • Efficiency: Optimize CI/CD performance, avoid redundant builds
  • Dependencies: Keep actions and versions current
  • Error handling: Proper failure scenarios and notifications

Files:

  • .github/workflows/deploy-package.yml
docs/**/*.md

📄 CodeRabbit inference engine (.github/instructions/docs.instructions.md)

docs/**/*.md: Follow markdown linting rules in the .github/instructions/markdown.instructions.md file
Ensure YAML front matter follows documented schema
Include required YAML front matter for all documentation pages
Use consistent layout references in Jekyll front matter
Set appropriate page titles and descriptions in Jekyll front matter
Include navigation metadata in front matter when applicable
Document version-specific features appropriately
Provide migration guidance for breaking changes in documentation

Files:

  • docs/contributing.md

⚙️ CodeRabbit configuration file

docs/**/*.md: Check for:

  • Accuracy: Ensure content matches current implementation
  • Completeness: Verify examples, parameters, and return values are documented
  • Accessibility: Flag missing alt text, poor heading hierarchy
  • Link validity: Check for broken internal/external links
  • Mathematical formulas: Verify calculation descriptions are correct

Files:

  • docs/contributing.md
docs/**/*.{html,md}

📄 CodeRabbit inference engine (.github/instructions/docs.instructions.md)

Use semantic HTML elements when HTML is required

Files:

  • docs/contributing.md
docs/**/*.{md,html}

📄 CodeRabbit inference engine (.github/instructions/docs.instructions.md)

docs/**/*.{md,html}: Provide alt text for all images
Ensure proper heading hierarchy with no skipping levels
Include descriptive link text and avoid 'click here' phrases
Verify all internal and external links work in documentation
Check for typos and formatting consistency in documentation changes
Maintain accuracy of mathematical formulas and calculations in documentation
Clearly mark deprecated features in documentation

Files:

  • docs/contributing.md
docs/**

📄 CodeRabbit inference engine (.github/instructions/docs.instructions.md)

Build Jekyll documentation without errors before committing changes

Files:

  • docs/contributing.md
docs/**/*.{md,yml,yaml}

📄 CodeRabbit inference engine (.github/instructions/docs.instructions.md)

docs/**/*.{md,yml,yaml}: Update examples and documentation when API changes occur
Maintain backward compatibility in examples where possible

Files:

  • docs/contributing.md
**/*.md

📄 CodeRabbit inference engine (AGENTS.md)

Markdown: Run npx markdownlint-cli2 for linting and npx markdownlint-cli2 --fix for auto-fixing

Files:

  • docs/contributing.md
**/*.{md,markdown,.markdownlint*}

📄 CodeRabbit inference engine (.github/instructions/markdown.instructions.md)

**/*.{md,markdown,.markdownlint*}: Run npx markdownlint-cli2 --no-globs {filepath} --fix to auto-fix Markdown linting issues, always using --no-globs with explicit file paths to prevent unintended glob expansion
Run npx markdownlint-cli2 --no-globs {filepath} to verify zero linting errors after manual fixes

Files:

  • docs/contributing.md
**/*.{md,markdown}

📄 CodeRabbit inference engine (.github/instructions/markdown.instructions.md)

**/*.{md,markdown}: Never bypass lint warnings; resolve or add narrow suppressions with <!-- markdownlint-disable MD### -->...<!-- markdownlint-enable MD### -->
Convert title case in headers to sentence case: 'How To Use' → 'How to use'
Convert title case in bold labels to sentence case: 'Next Steps:' → 'Next steps:'
Replace asterisk bullets (*, +) with hyphens (-)
Convert Setext headers (===, ---) to ATX headers (#, ##)
Add blank lines before and after headers
Add blank lines before and after code block fences
Remove backticks in #file: references: use #file:path not `#file:path`
Remove trailing punctuation after #file: references or add space
Add language identifier to all fenced code blocks (use plaintext when language is unknown)
Increase outer fence length for nested code blocks to be greater than inner fence length
Convert ordered lists for non-sequential items to unordered hyphen lists
Use present tense and imperative mood in Markdown prose: 'Run the command' not 'You should run'
Use sentence case only for headers (capitalize first word + proper nouns, lowercase articles, prepositions, conjunctions)
Use ATX-style headers only (#, ##, ###); never use Setext style (===, ---)
Maintain sequential header hierarchy without skipping levels: ######
Always use hyphens (-) for bullet points; never asterisks (*) or plus signs (+)
Indent nested lists with exactly two spaces
Use ordered lists (1., 2., 3.) only when sequence matters
Use sentence case for bold labels that start list items
Always use fenced code blocks ( ); never use indented code blocks
Do not wrap #file: or #folder: context tokens in backticks
Do not place punctuation immediately after #file: or #folder: tokens
Never use file: URI scheme (e.g., file:///path/to/doc.md) as these always force auto-loading
Use standard Markdown links for URLs only, not for local workspace files
Use #tool: syntax only for VS Code Copilot Cha...

Files:

  • docs/contributing.md
🧠 Learnings (9)
📚 Learning: 2025-10-01T07:32:55.702Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/performance-testing.instructions.md:0-0
Timestamp: 2025-10-01T07:32:55.702Z
Learning: Applies to .github/workflows/test-performance.yml : The test-performance.yml workflow should build in Release, run the full benchmark suite, upload artifacts, publish summaries, and optionally run the regression detection step

Applied to files:

  • .github/workflows/deploy-package.yml
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.md : Document version-specific features appropriately

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.md : Provide migration guidance for breaking changes in documentation

Applied to files:

  • docs/contributing.md
📚 Learning: 2026-01-01T06:10:39.665Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: src/AGENTS.md:0-0
Timestamp: 2026-01-01T06:10:39.665Z
Learning: Applies to src/**/MigrationGuide.V3.md : Update `MigrationGuide.V3.md` with migration notes and bridges when behavior changes

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-12-24T07:46:46.923Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1771
File: .github/instructions/indicator-buffer.instructions.md:321-321
Timestamp: 2025-12-24T07:46:46.923Z
Learning: "Last updated" dates in instruction files (.github/instructions/*.md) should only be updated for meaningful content changes to the guidance itself, not for administrative changes like path updates, link corrections, or file reorganization.

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-09-02T02:01:48.007Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1384
File: tests/indicators/s-z/Tsi/Tsi.Tests.cs:14-14
Timestamp: 2025-09-02T02:01:48.007Z
Learning: The Stock.Indicators repository uses centralized package management via tests\Directory.Packages.props to define MSTest package versions across all test projects, currently using MSTest.TestAdapter and MSTest.TestFramework version 3.10.3.

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-09-28T22:37:53.272Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1406
File: .github/copilot-instructions.md:37-55
Timestamp: 2025-09-28T22:37:53.272Z
Learning: For the Stock Indicators repository: Use double for performance in iterative indicator calculations, then promote to decimal when exposing price-sensitive or monetary results that require trading accuracy. The canonical numeric precision policy is documented in .github/instructions/source-code-completion.instructions.md and referenced in spec-kit integration guide.

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-09-30T22:14:21.695Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1446
File: .github/workflows/test-integration.yml:3-8
Timestamp: 2025-09-30T22:14:21.695Z
Learning: For the Stock.Indicators repository, integration tests in `.github/workflows/test-integration.yml` are intentionally not run on pull requests when the test suite is minimal (e.g., only one test). The maintainer prefers to add the pull_request trigger back when integration tests become more prevalent. This is a library package not expected to have extensive integration testing.

Applied to files:

  • docs/contributing.md
📚 Learning: 2026-01-06T06:43:47.544Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1880
File: docs/indicators/Beta.md:69-69
Timestamp: 2026-01-06T06:43:47.544Z
Learning: The repository's docs/.markdownlint-cli2.jsonc config permits the listed HTML elements for MD033 in Markdown files. For any Markdown under docs (e.g., docs/indicators/Beta.md), verify that any HTML elements used are within the allowed list. If an element is used that's not in the allowed list, flag it for removal or adjust the config accordingly.

Applied to files:

  • docs/contributing.md
⏰ Context from checks skipped due to timeout of 400000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Codacy Static Code Analysis
🔇 Additional comments (13)
src/gitversion.yml (4)

36-45: LGTM!

The release branch configuration correctly targets v3+ branches with the preview label. The regex ^v([3-9]|[1-9]\d+)$ properly matches v3 through v9 and v10+ (double-digit and higher versions).


47-52: LGTM!

Feature branch configuration correctly allows branching from main, release, and support branches, with dynamic labeling based on the branch name.


54-62: LGTM!

The pull-request and unknown branch configurations use appropriate defaults with fixed 'pr' label for PRs and dynamic branch name labeling for unknown branches.


26-34: The original concern about is-main-branch: true on the support branch is inaccurate. GitVersion explicitly supports multiple branches marked as main branches (is-main-branch: true), and this is the intended configuration pattern for handling both primary development and maintenance branches. Mainline versioning strategies apply to all branches configured with is-main-branch: true, so no conflict or ambiguity occurs. The configuration as written is correct and requires no changes.

Likely an incorrect or invalid review comment.

.github/workflows/deploy-package.yml (5)

3-31: LGTM!

The version taxonomy documentation is comprehensive and clearly explains the versioning behavior for different scenarios. This serves as excellent documentation for maintainers.


183-209: LGTM!

The version composition logic correctly selects the appropriate GitVersion output based on the deployment scenario:

  • FullSemVer for CI builds (includes metadata)
  • NuGetVersionV2 for manual preview releases
  • MajorMinorPatch for production releases

394-407: LGTM!

The cleanup implementation correctly uses the user-owned package API for this repository structure. The sorting by creation date and retention logic is sound.


456-467: LGTM!

The summary table generation provides clear visibility into cleanup actions and is well-structured using the Actions summary API.


308-312: Version mismatch is not an issue. The workflow uses actions/upload-artifact@v6 and actions/download-artifact@v5, which are fully compatible. Both v5 and v6 of download-artifact are part of the v4+ artifact backend and work seamlessly with upload-artifact@v6. No action needed.

Likely an incorrect or invalid review comment.

docs/contributing.md (4)

195-206: LGTM!

The versioning table clearly documents the semantic version components with accurate descriptions and commit message guidance.


208-227: LGTM!

The branch-based versioning documentation accurately reflects the GitVersion configuration and provides clear examples for controlling version increments.


229-241: LGTM!

Clear instructions for creating preview releases from stable branches with practical Git commands and explanation of how GitVersion handles tag suffixes.


262-275: LGTM!

The version examples table provides comprehensive coverage of different versioning scenarios, and the links to configuration files are helpful for reference.

Signed-off-by: Dave Skender <[email protected]>
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 13

🤖 Fix all issues with AI agents
In @.github/workflows/deploy-package-github.yml:
- Around line 221-233: The workflow step name "Publish package to GitHub
Packages to GitHub Packages" contains a duplicated phrase; update the step name
in the job definition (the step whose name field currently reads "Publish
package to GitHub Packages to GitHub Packages") to a single correct label such
as "Publish package to GitHub Packages" so the step title is not duplicated.
- Around line 235-239: The step "CI package published" uses a boolean negation
on the string env.dry_run (if: ${{ !env.dry_run }}), which mis-evaluates when
env.dry_run is the string "false"; change the condition to compare strings
explicitly, e.g. replace the if with if: ${{ env.dry_run != 'true' }} (or if:
${{ env.dry_run == 'false' }}) so the step runs only when dry_run is not set to
the string "true".
- Around line 52-68: The workflow contains orphaned/malformed shell fragments
(standalone "exit 1", stray "fi" tokens and an incomplete conditional block that
echoes "Non-preview (production) versions..." / checks "$GITHUB_REF" and
"$INPUT_PREVIEW") inside the "Validate CI deployment" step; remove those stray
lines or consolidate them into a single valid run script block so the step
contains only a valid shell script (either delete the orphaned "exit 1" and all
stray "fi" and conditional lines, or rewrite the whole conditional into a proper
bash run: | block) ensuring no unmatched fi/exit statements remain.
- Around line 174-194: The summary step references
steps.settings.outputs.is_ci_push which is never defined; update the settings
step (the step named "settings") to emit an output named is_ci_push (true/false)
based on your CI push detection logic (or alternatively change the Summary
output to use an existing defined output), then reference that defined output in
the Summary output step; ensure the settings step writes the output using the
GitHub Actions outputs mechanism so steps.settings.outputs.is_ci_push is
available to the Summary output.
- Around line 119-133: The Compose CI version step (id: version_info)
incorrectly reads MAJORMINORPATCH from steps.gitversion.outputs.majorMinorPatch
which is not set; change the env reference to use the variable exported to
GitHub Actions environment (read MAJORMINORPATCH from the environment/GITHUB_ENV
rather than steps.gitversion.outputs), i.e., remove the
steps.gitversion.outputs.majorMinorPatch reference and rely on the
MAJORMINORPATCH env provided by the previous GitVersion step so the
ver="${base}-ci-${run}" calculation receives the actual majorMinorPatch value.
- Around line 96-102: The workflow's Setup .NET SDK step
(actions/setup-dotnet@v5) uses caching but points to non-existent lock files via
the cache-dependency-path key ("**/packages.lock.json"), so fix it by either
generating those lock files in your projects (run dotnet restore --use-lock-file
for each relevant project so packages.lock.json exists) and keep cache: true, or
remove/disable caching lines (remove cache: true and cache-dependency-path) from
that step if you don't intend to use lock files; update the
cache-dependency-path value only if you have a different known lock file path to
reference.

In @.github/workflows/deploy-package-nuget.yml:
- Around line 158-162: The workflow uses actions/upload-artifact@v6 but the
"Download package" step still references actions/download-artifact@v5, causing a
version mismatch; update the "Download package" step to use
actions/download-artifact@v6 (the same major version as the upload) so the
upload/download actions are aligned and compatible, locating the step by its
name "Download package" and the actions/download-artifact reference.
- Around line 179-184: The workflow uses inconsistent checks for the env
variable dry_run (string) — replace the boolean negation `${{ !env.dry_run }}`
used in the "Production package published" step with the string comparison `${{
env.dry_run != 'true' }}` so both conditions consistently treat dry_run as a
string; locate the step named "Production package published" and update its if
expression to `${{ env.dry_run != 'true' }}`.
- Around line 74-79: The Compose package info step uses xmllint to extract
PACKAGE_NAME but doesn't handle xmllint failures or empty results; update the
package_info step to check xmllint's exit status and/or validate that
PACKAGE_NAME is non-empty after the xmllint call, and if it fails, emit a clear
error message (including the raw xmllint output or the project file path and
XPath) and exit with a non-zero status to stop the workflow, or optionally set a
safe fallback value; make sure to keep references to PACKAGE_NAME, the xmllint
--xpath invocation, and the url line that uses
steps.version_info.outputs.version so downstream outputs are only written when
PACKAGE_NAME is valid.

In @docs/contributing.md:
- Line 273: The docs reference points to a non-existent workflow file; update
the documented workflow name `.github/workflows/deploy-production.yml` to the
correct file `.github/workflows/deploy-package-nuget.yml` in the contributing
documentation (change the mention in the contributing.md entry that lists
Workflow: `.github/workflows/deploy-production.yml` so it matches the actual
NuGet deployment workflow name).
- Around line 247-258: The "CI Package Deploy (Automatic)" docs line says
"Auto-cleanup after 90 days (keeps 5 most recent)" but the workflow uses
keepCount = 10; update that sentence to "Auto-cleanup after 90 days (keeps 10
most recent)" in the CI Package Deploy (Automatic) section so the documentation
matches the deploy-package-github.yml setting (keepCount = 10).
- Around line 294-298: Update the three broken links in the docs: replace the CI
workflow link that points to `.github/workflows/deploy-package.yml` with the
actual files `.github/workflows/deploy-package-github.yml` or
`.github/workflows/deploy-package-nuget.yml` as appropriate, and replace the
production workflow link `.github/workflows/deploy-production.yml` with
`.github/workflows/deploy-website.yml`; ensure the text still references "CI
workflow" and "Production workflow" while updating the target filenames in the
referenced links.
🧹 Nitpick comments (1)
.github/workflows/deploy-package-nuget.yml (1)

185-190: Incomplete deployment summary table.

The summary table only has one row and lacks proper table headers, making it inconsistent with the package job summary (lines 118-126).

📊 Suggested enhanced summary
      - name: Deployment summary
        if: always()
        run: |
+         MODE="🚀 DEPLOYED"
+         if [[ "${{ env.dry_run }}" == "true" ]]; then
+           MODE="🔍 DRY RUN (skipped)"
+         fi
+
          {
-           echo "| Version | ${{ env.version }} |"
+           echo "| Component         | Value                                            |"
+           echo "| ----------------- | ------------------------------------------------ |"
+           echo "| **Mode**          | $MODE                                            |"
+           echo "| Package Version   | ${{ env.version }}                               |"
+           echo "| Package Name      | ${{ env.name }}                                  |"
+           echo "| Package URL       | ${{ env.url }}                                   |"
          } >> $GITHUB_STEP_SUMMARY
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8fa03d2 and 5d2448c.

📒 Files selected for processing (3)
  • .github/workflows/deploy-package-github.yml
  • .github/workflows/deploy-package-nuget.yml
  • docs/contributing.md
🧰 Additional context used
📓 Path-based instructions (9)
docs/**/*.md

📄 CodeRabbit inference engine (.github/instructions/docs.instructions.md)

docs/**/*.md: Follow markdown linting rules in the .github/instructions/markdown.instructions.md file
Ensure YAML front matter follows documented schema
Include required YAML front matter for all documentation pages
Use consistent layout references in Jekyll front matter
Set appropriate page titles and descriptions in Jekyll front matter
Include navigation metadata in front matter when applicable
Document version-specific features appropriately
Provide migration guidance for breaking changes in documentation

Files:

  • docs/contributing.md

⚙️ CodeRabbit configuration file

docs/**/*.md: Check for:

  • Accuracy: Ensure content matches current implementation
  • Completeness: Verify examples, parameters, and return values are documented
  • Accessibility: Flag missing alt text, poor heading hierarchy
  • Link validity: Check for broken internal/external links
  • Mathematical formulas: Verify calculation descriptions are correct

Files:

  • docs/contributing.md
docs/**/*.{html,md}

📄 CodeRabbit inference engine (.github/instructions/docs.instructions.md)

Use semantic HTML elements when HTML is required

Files:

  • docs/contributing.md
docs/**/*.{md,html}

📄 CodeRabbit inference engine (.github/instructions/docs.instructions.md)

docs/**/*.{md,html}: Provide alt text for all images
Ensure proper heading hierarchy with no skipping levels
Include descriptive link text and avoid 'click here' phrases
Verify all internal and external links work in documentation
Check for typos and formatting consistency in documentation changes
Maintain accuracy of mathematical formulas and calculations in documentation
Clearly mark deprecated features in documentation

Files:

  • docs/contributing.md
docs/**

📄 CodeRabbit inference engine (.github/instructions/docs.instructions.md)

Build Jekyll documentation without errors before committing changes

Files:

  • docs/contributing.md
docs/**/*.{md,yml,yaml}

📄 CodeRabbit inference engine (.github/instructions/docs.instructions.md)

docs/**/*.{md,yml,yaml}: Update examples and documentation when API changes occur
Maintain backward compatibility in examples where possible

Files:

  • docs/contributing.md
**/*.md

📄 CodeRabbit inference engine (AGENTS.md)

Markdown: Run npx markdownlint-cli2 for linting and npx markdownlint-cli2 --fix for auto-fixing

Files:

  • docs/contributing.md
**/*.{md,markdown,.markdownlint*}

📄 CodeRabbit inference engine (.github/instructions/markdown.instructions.md)

**/*.{md,markdown,.markdownlint*}: Run npx markdownlint-cli2 --no-globs {filepath} --fix to auto-fix Markdown linting issues, always using --no-globs with explicit file paths to prevent unintended glob expansion
Run npx markdownlint-cli2 --no-globs {filepath} to verify zero linting errors after manual fixes

Files:

  • docs/contributing.md
**/*.{md,markdown}

📄 CodeRabbit inference engine (.github/instructions/markdown.instructions.md)

**/*.{md,markdown}: Never bypass lint warnings; resolve or add narrow suppressions with <!-- markdownlint-disable MD### -->...<!-- markdownlint-enable MD### -->
Convert title case in headers to sentence case: 'How To Use' → 'How to use'
Convert title case in bold labels to sentence case: 'Next Steps:' → 'Next steps:'
Replace asterisk bullets (*, +) with hyphens (-)
Convert Setext headers (===, ---) to ATX headers (#, ##)
Add blank lines before and after headers
Add blank lines before and after code block fences
Remove backticks in #file: references: use #file:path not `#file:path`
Remove trailing punctuation after #file: references or add space
Add language identifier to all fenced code blocks (use plaintext when language is unknown)
Increase outer fence length for nested code blocks to be greater than inner fence length
Convert ordered lists for non-sequential items to unordered hyphen lists
Use present tense and imperative mood in Markdown prose: 'Run the command' not 'You should run'
Use sentence case only for headers (capitalize first word + proper nouns, lowercase articles, prepositions, conjunctions)
Use ATX-style headers only (#, ##, ###); never use Setext style (===, ---)
Maintain sequential header hierarchy without skipping levels: ######
Always use hyphens (-) for bullet points; never asterisks (*) or plus signs (+)
Indent nested lists with exactly two spaces
Use ordered lists (1., 2., 3.) only when sequence matters
Use sentence case for bold labels that start list items
Always use fenced code blocks ( ); never use indented code blocks
Do not wrap #file: or #folder: context tokens in backticks
Do not place punctuation immediately after #file: or #folder: tokens
Never use file: URI scheme (e.g., file:///path/to/doc.md) as these always force auto-loading
Use standard Markdown links for URLs only, not for local workspace files
Use #tool: syntax only for VS Code Copilot Cha...

Files:

  • docs/contributing.md
.github/**/*.yml

⚙️ CodeRabbit configuration file

.github/**/*.yml: Review for:

  • Security: No secrets in workflows, proper permissions
  • Efficiency: Optimize CI/CD performance, avoid redundant builds
  • Dependencies: Keep actions and versions current
  • Error handling: Proper failure scenarios and notifications

Files:

  • .github/workflows/deploy-package-github.yml
  • .github/workflows/deploy-package-nuget.yml
🧠 Learnings (9)
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.md : Document version-specific features appropriately

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.md : Provide migration guidance for breaking changes in documentation

Applied to files:

  • docs/contributing.md
📚 Learning: 2026-01-01T06:10:39.665Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: src/AGENTS.md:0-0
Timestamp: 2026-01-01T06:10:39.665Z
Learning: Applies to src/**/MigrationGuide.V3.md : Update `MigrationGuide.V3.md` with migration notes and bridges when behavior changes

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Ensure documentation site builds successfully in the CI/CD pipeline

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-09-02T02:01:48.007Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1384
File: tests/indicators/s-z/Tsi/Tsi.Tests.cs:14-14
Timestamp: 2025-09-02T02:01:48.007Z
Learning: The Stock.Indicators repository uses centralized package management via tests\Directory.Packages.props to define MSTest package versions across all test projects, currently using MSTest.TestAdapter and MSTest.TestFramework version 3.10.3.

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-09-28T22:37:53.272Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1406
File: .github/copilot-instructions.md:37-55
Timestamp: 2025-09-28T22:37:53.272Z
Learning: For the Stock Indicators repository: Use double for performance in iterative indicator calculations, then promote to decimal when exposing price-sensitive or monetary results that require trading accuracy. The canonical numeric precision policy is documented in .github/instructions/source-code-completion.instructions.md and referenced in spec-kit integration guide.

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-09-30T22:14:21.695Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1446
File: .github/workflows/test-integration.yml:3-8
Timestamp: 2025-09-30T22:14:21.695Z
Learning: For the Stock.Indicators repository, integration tests in `.github/workflows/test-integration.yml` are intentionally not run on pull requests when the test suite is minimal (e.g., only one test). The maintainer prefers to add the pull_request trigger back when integration tests become more prevalent. This is a library package not expected to have extensive integration testing.

Applied to files:

  • docs/contributing.md
📚 Learning: 2026-01-06T06:43:47.544Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1880
File: docs/indicators/Beta.md:69-69
Timestamp: 2026-01-06T06:43:47.544Z
Learning: The repository's docs/.markdownlint-cli2.jsonc config permits the listed HTML elements for MD033 in Markdown files. For any Markdown under docs (e.g., docs/indicators/Beta.md), verify that any HTML elements used are within the allowed list. If an element is used that's not in the allowed list, flag it for removal or adjust the config accordingly.

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-10-01T07:32:55.702Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/performance-testing.instructions.md:0-0
Timestamp: 2025-10-01T07:32:55.702Z
Learning: Applies to .github/workflows/test-performance.yml : The test-performance.yml workflow should build in Release, run the full benchmark suite, upload artifacts, publish summaries, and optionally run the regression detection step

Applied to files:

  • .github/workflows/deploy-package-github.yml
  • .github/workflows/deploy-package-nuget.yml
⏰ Context from checks skipped due to timeout of 400000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Codacy Static Code Analysis
🔇 Additional comments (8)
docs/contributing.md (2)

197-227: Well-documented versioning strategy.

The branch-based versioning documentation is clear and provides concrete examples. The semver control via commit messages is well explained.


229-241: Preview release workflow is clearly documented.

The instructions for creating preview releases from stable branches are actionable with concrete commands.

.github/workflows/deploy-package-nuget.yml (5)

18-20: Consider limiting release event types.

The workflow triggers on both published and created events. The created type fires when a draft release is created, which then triggers dry-run mode. This is intentional based on the comments, but note that created also fires for non-draft releases. This could potentially cause duplicate runs if a release is created and then immediately published.

Consider if you want only published events for actual deployments, using draft releases purely for testing builds via workflow_dispatch instead.


41-42: > Likely an incorrect or invalid review comment.


102-108: No action needed. actions/upload-artifact@v6 is the current official version and is available.


34-36: No action needed. actions/checkout@v6 is the current latest stable version and is recommended for use. There is no issue with this version pin.

Likely an incorrect or invalid review comment.


164-170: Clarify OIDC configuration requirements and verify external setup.

The workflow is properly configured with id-token: write permission. However, clarify that the NUGET_USER secret should contain your nuget.org profile name (not an OIDC audience value). Ensure your nuget.org Trusted Publishing policy is configured to accept OIDC tokens from this repository and workflow—the OIDC audience setup is external to this workflow.

.github/workflows/deploy-package-github.yml (1)

261-353: Cleanup job implementation is well-structured.

The GitHub Script approach for package cleanup is clean and readable. The logic properly:

  • Sorts versions by creation date
  • Keeps N most recent regardless of age
  • Deletes versions older than retention period
  • Handles errors gracefully with continue-on-error
  • Provides detailed logging and summary

Likely an incorrect or invalid review comment.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🤖 Fix all issues with AI agents
In @.github/workflows/deploy-package-github.yml:
- Around line 52-53: The workflow installs the GitVersion Tool twice via the
step named "Setup GitVersion Tool" which runs `dotnet tool install --global
GitVersion.Tool`; remove the duplicate step (the earlier one at startLine 52–53)
so only the grouped installation later (lines ~83–86) remains, ensuring the
single installation uses the existing grouped dependencies block and keeping the
step name/command references consistent.
- Around line 209-216: Rename the workflow step currently named "Publish package
to GitHub Packages to GitHub Packages" to remove the duplicated phrase (e.g.,
"Publish package to GitHub Packages"); update the step's name string so it reads
correctly and leave the rest of the step (the dotnet nuget push command and
condition) unchanged.
- Around line 98-113: The step "Compose CI version" is incorrectly trying to
read GitVersion output via steps.gitversion.outputs.majorMinorPatch; remove the
env block and instead read the environment variable that GitVersion exported
(MajorMinorPatch) by referencing it as $MAJORMINORPATCH in the script (ensure
the variable name uses PascalCase as exported), so delete the env:
MAJORMINORPATCH: ${{ steps.gitversion.outputs.majorMinorPatch }} and rely on the
existing $MAJORMINORPATCH in the run block to generate ver.
- Around line 209-222: The two GitHub Actions steps ("Publish package to GitHub
Packages to GitHub Packages" and "CI package published") use inconsistent checks
for dry_run: one uses string comparison (env.dry_run != 'true') and the other
uses boolean negation (!env.dry_run); change the latter to the same string
comparison (replace !env.dry_run with env.dry_run != 'true') so both steps
consistently treat dry_run as a string "true"/"false".
- Around line 153-173: The summary step references
steps.settings.outputs.is_ci_push which is never emitted by the "Set workflow
mode" step; fix by either removing the is_ci_push condition from the summary
block (only use steps.settings.outputs.dry_run or another existing output) or
update the "Set workflow mode" step to set an outputs.is_ci_push value (e.g.,
compute and echo "::set-output name=is_ci_push::true/false" or use outputs via a
composite/action) so steps.settings.outputs.is_ci_push is defined and the MODE
logic in the summary can evaluate correctly.
🧹 Nitpick comments (1)
.github/workflows/deploy-package-github.yml (1)

34-37: Consider reducing contents permission to read.

The workflow only checks out code and doesn't modify repository contents. Using contents: read instead of contents: write follows the principle of least privilege.

♻️ Proposed fix
 permissions:
-  contents: write
+  contents: read
   packages: write
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5d2448c and 34b71b6.

📒 Files selected for processing (1)
  • .github/workflows/deploy-package-github.yml
🧰 Additional context used
📓 Path-based instructions (1)
.github/**/*.yml

⚙️ CodeRabbit configuration file

.github/**/*.yml: Review for:

  • Security: No secrets in workflows, proper permissions
  • Efficiency: Optimize CI/CD performance, avoid redundant builds
  • Dependencies: Keep actions and versions current
  • Error handling: Proper failure scenarios and notifications

Files:

  • .github/workflows/deploy-package-github.yml
🧠 Learnings (2)
📚 Learning: 2025-10-01T07:32:55.702Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/performance-testing.instructions.md:0-0
Timestamp: 2025-10-01T07:32:55.702Z
Learning: Applies to .github/workflows/test-performance.yml : The test-performance.yml workflow should build in Release, run the full benchmark suite, upload artifacts, publish summaries, and optionally run the regression detection step

Applied to files:

  • .github/workflows/deploy-package-github.yml
📚 Learning: 2025-11-12T00:30:31.400Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1734
File: .github/workflows/test-indicators-matrix.yml:38-51
Timestamp: 2025-11-12T00:30:31.400Z
Learning: In .github/workflows/test-indicators-matrix.yml, the workflow always requires .NET 10 to build and run test projects. The "legacy sut" .NET SDK installation (e.g., 6.0.x) is only for multi-targeting support, and the TARGET_FRAMEWORK environment variable controls which framework version tests actually run against using the `--property:TestFramework` parameter.

Applied to files:

  • .github/workflows/deploy-package-github.yml
⏰ Context from checks skipped due to timeout of 400000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: linting (full)
  • GitHub Check: Codacy Static Code Analysis
🔇 Additional comments (1)
.github/workflows/deploy-package-github.yml (1)

230-335: LGTM! Cleanup logic is well-implemented.

The cleanup job properly:

  • Sorts versions by creation date (newest first)
  • Keeps the 10 most recent versions regardless of age
  • Deletes versions older than 90 days
  • Has appropriate error handling with try-catch blocks and continue-on-error
  • Logs detailed information for debugging
  • Generates a summary table

The retention policy (90 days, keep 10) is reasonable for CI builds.

DaveSkender and others added 9 commits January 9, 2026 21:46
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Signed-off-by: Dave Skender <[email protected]>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Signed-off-by: Dave Skender <[email protected]>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Signed-off-by: Dave Skender <[email protected]>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Signed-off-by: Dave Skender <[email protected]>
Removed the auto-cleanup policy for GitHub Packages.

Signed-off-by: Dave Skender <[email protected]>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Signed-off-by: Dave Skender <[email protected]>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Signed-off-by: Dave Skender <[email protected]>
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

🤖 Fix all issues with AI agents
In @.github/workflows/deploy-package-github.yml:
- Around line 34-37: The workflow grants overly broad repo write access; change
the global permissions block so "contents: write" becomes "contents: read" and
keep "packages: write" only where required (move or add "packages: write" to the
specific deploy/cleanup jobs that publish packages); update the other
occurrences that mirror the same permissions (the blocks referenced in the
comment) to the same pattern so only deploy/cleanup jobs have packages write and
the global scope remains contents: read.
- Around line 52-54: Move the GitVersion.Tool installation so it runs once after
the "Setup .NET SDK" step and remove the earlier duplicate; pin the install to
the stable version by using dotnet tool install --global GitVersion.Tool
--version 6.5.1 (ensure the step name remains "Setup GitVersion Tool" and delete
the other GitVersion.Tool install step later in the workflow).

In @.github/workflows/deploy-package-nuget.yml:
- Around line 183-187: Update the step named "Production package published" to
use the same correct conditional form as the other steps: replace the faulty if
condition `${{ !env.dry_run }}` with `if: ${{ env.dry_run != 'true' }}` so the
step only runs when dry_run is not set to 'true'.

In @docs/contributing.md:
- Line 213: The example string `2.7.1-ci.3+5` is inconsistent with the
documented pattern `{Major}.{Minor}.{Patch}-ci-{run_number}` and the table
examples like `2.7.2-ci-1234`; either change the example to use the dash form
(e.g., `2.7.1-ci-3`) or explicitly state that an optional build metadata suffix
(`+<build>`) may be appended (e.g., `2.7.1-ci-3+5`) and update the surrounding
text to clarify that `-ci-<run_number>` is the canonical form while `+<build>`
is optional metadata.
- Around line 295-297: Update the broken workflow links in the docs: replace
references to `.github/workflows/deploy-package.yml` with the actual files
`deploy-package-github.yml` and/or `deploy-package-nuget.yml` (choose the
appropriate one for the context) and replace
`.github/workflows/deploy-production.yml` with `deploy-website.yml`, ensuring
the markdown bullet list entries (the lines referencing `deploy-package` and
`deploy-production`) point to the correct repository URLs; keep the
`src/gitversion.yml` entry unchanged.
🧹 Nitpick comments (3)
.github/workflows/deploy-package-nuget.yml (2)

189-194: Enhance deployment summary with additional context.

The deployment summary only shows the version, while the package job summary (lines 114-130) provides comprehensive information including mode, package URL, and target. Consider adding similar details to the deployment summary for better observability and debugging.

♻️ Proposed enhancement for deployment summary
       - name: Deployment summary
         if: always()
         run: |
+          MODE="🚀 PRODUCTION DEPLOY"
+          if [[ "${{ env.dry_run }}" == "true" ]]; then
+            MODE="🔍 DRY RUN (Draft Release)"
+          fi
+
           {
+            echo "| Component         | Value                                            |"
+            echo "| ----------------- | ------------------------------------------------ |"
+            echo "| **Mode**          | $MODE                                            |"
             echo "| Version | ${{ env.version }} |"
+            echo "| Package Name      | ${{ env.name }}                                  |"
+            echo "| Package URL       | ${{ env.url }}                                   |"
           } >> $GITHUB_STEP_SUMMARY

143-146: Remove redundant permissions declaration.

The deploy job redeclares permissions that are already defined at the workflow level (lines 22-26). This is redundant and can be removed unless you need different permissions for this specific job.

♻️ Proposed cleanup
   deploy:
     needs: package
     runs-on: ubuntu-latest
     if: success()
 
-    permissions:
-      contents: write
-      packages: write
-      id-token: write
-
     env:
       version: ${{ needs.package.outputs.version }}
.github/workflows/deploy-package-github.yml (1)

112-118: Limit find/replace scope to avoid unintended edits.

jacobtomlinson/gha-find-replace can operate broadly; if the marker ever appears in unintended files, this could rewrite more than expected. Consider restricting it to the specific project/props files that contain #{PACKAGE_VERSION}#.

Example diff (adjust paths as appropriate)
       - name: Replace "dumb" version markers
         uses: jacobtomlinson/gha-find-replace@v3
         with:
           find: "#{PACKAGE_VERSION}#"
           replace: "${{ steps.version_info.outputs.version }}"
           regex: false
+          include: "src/**"
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 34b71b6 and 83cde00.

📒 Files selected for processing (3)
  • .github/workflows/deploy-package-github.yml
  • .github/workflows/deploy-package-nuget.yml
  • docs/contributing.md
🧰 Additional context used
📓 Path-based instructions (9)
.github/**/*.yml

⚙️ CodeRabbit configuration file

.github/**/*.yml: Review for:

  • Security: No secrets in workflows, proper permissions
  • Efficiency: Optimize CI/CD performance, avoid redundant builds
  • Dependencies: Keep actions and versions current
  • Error handling: Proper failure scenarios and notifications

Files:

  • .github/workflows/deploy-package-github.yml
  • .github/workflows/deploy-package-nuget.yml
docs/**/*.md

📄 CodeRabbit inference engine (.github/instructions/docs.instructions.md)

docs/**/*.md: Follow markdown linting rules in the .github/instructions/markdown.instructions.md file
Ensure YAML front matter follows documented schema
Include required YAML front matter for all documentation pages
Use consistent layout references in Jekyll front matter
Set appropriate page titles and descriptions in Jekyll front matter
Include navigation metadata in front matter when applicable
Document version-specific features appropriately
Provide migration guidance for breaking changes in documentation

Files:

  • docs/contributing.md

⚙️ CodeRabbit configuration file

docs/**/*.md: Check for:

  • Accuracy: Ensure content matches current implementation
  • Completeness: Verify examples, parameters, and return values are documented
  • Accessibility: Flag missing alt text, poor heading hierarchy
  • Link validity: Check for broken internal/external links
  • Mathematical formulas: Verify calculation descriptions are correct

Files:

  • docs/contributing.md
docs/**/*.{html,md}

📄 CodeRabbit inference engine (.github/instructions/docs.instructions.md)

Use semantic HTML elements when HTML is required

Files:

  • docs/contributing.md
docs/**/*.{md,html}

📄 CodeRabbit inference engine (.github/instructions/docs.instructions.md)

docs/**/*.{md,html}: Provide alt text for all images
Ensure proper heading hierarchy with no skipping levels
Include descriptive link text and avoid 'click here' phrases
Verify all internal and external links work in documentation
Check for typos and formatting consistency in documentation changes
Maintain accuracy of mathematical formulas and calculations in documentation
Clearly mark deprecated features in documentation

Files:

  • docs/contributing.md
docs/**

📄 CodeRabbit inference engine (.github/instructions/docs.instructions.md)

Build Jekyll documentation without errors before committing changes

Files:

  • docs/contributing.md
docs/**/*.{md,yml,yaml}

📄 CodeRabbit inference engine (.github/instructions/docs.instructions.md)

docs/**/*.{md,yml,yaml}: Update examples and documentation when API changes occur
Maintain backward compatibility in examples where possible

Files:

  • docs/contributing.md
**/*.md

📄 CodeRabbit inference engine (AGENTS.md)

Markdown: Run npx markdownlint-cli2 for linting and npx markdownlint-cli2 --fix for auto-fixing

Files:

  • docs/contributing.md
**/*.{md,markdown,.markdownlint*}

📄 CodeRabbit inference engine (.github/instructions/markdown.instructions.md)

**/*.{md,markdown,.markdownlint*}: Run npx markdownlint-cli2 --no-globs {filepath} --fix to auto-fix Markdown linting issues, always using --no-globs with explicit file paths to prevent unintended glob expansion
Run npx markdownlint-cli2 --no-globs {filepath} to verify zero linting errors after manual fixes

Files:

  • docs/contributing.md
**/*.{md,markdown}

📄 CodeRabbit inference engine (.github/instructions/markdown.instructions.md)

**/*.{md,markdown}: Never bypass lint warnings; resolve or add narrow suppressions with <!-- markdownlint-disable MD### -->...<!-- markdownlint-enable MD### -->
Convert title case in headers to sentence case: 'How To Use' → 'How to use'
Convert title case in bold labels to sentence case: 'Next Steps:' → 'Next steps:'
Replace asterisk bullets (*, +) with hyphens (-)
Convert Setext headers (===, ---) to ATX headers (#, ##)
Add blank lines before and after headers
Add blank lines before and after code block fences
Remove backticks in #file: references: use #file:path not `#file:path`
Remove trailing punctuation after #file: references or add space
Add language identifier to all fenced code blocks (use plaintext when language is unknown)
Increase outer fence length for nested code blocks to be greater than inner fence length
Convert ordered lists for non-sequential items to unordered hyphen lists
Use present tense and imperative mood in Markdown prose: 'Run the command' not 'You should run'
Use sentence case only for headers (capitalize first word + proper nouns, lowercase articles, prepositions, conjunctions)
Use ATX-style headers only (#, ##, ###); never use Setext style (===, ---)
Maintain sequential header hierarchy without skipping levels: ######
Always use hyphens (-) for bullet points; never asterisks (*) or plus signs (+)
Indent nested lists with exactly two spaces
Use ordered lists (1., 2., 3.) only when sequence matters
Use sentence case for bold labels that start list items
Always use fenced code blocks ( ); never use indented code blocks
Do not wrap #file: or #folder: context tokens in backticks
Do not place punctuation immediately after #file: or #folder: tokens
Never use file: URI scheme (e.g., file:///path/to/doc.md) as these always force auto-loading
Use standard Markdown links for URLs only, not for local workspace files
Use #tool: syntax only for VS Code Copilot Cha...

Files:

  • docs/contributing.md
🧠 Learnings (20)
📚 Learning: 2025-10-01T07:32:55.702Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/performance-testing.instructions.md:0-0
Timestamp: 2025-10-01T07:32:55.702Z
Learning: Applies to .github/workflows/test-performance.yml : The test-performance.yml workflow should build in Release, run the full benchmark suite, upload artifacts, publish summaries, and optionally run the regression detection step

Applied to files:

  • .github/workflows/deploy-package-github.yml
  • .github/workflows/deploy-package-nuget.yml
📚 Learning: 2025-11-12T00:30:31.400Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1734
File: .github/workflows/test-indicators-matrix.yml:38-51
Timestamp: 2025-11-12T00:30:31.400Z
Learning: In .github/workflows/test-indicators-matrix.yml, the workflow always requires .NET 10 to build and run test projects. The "legacy sut" .NET SDK installation (e.g., 6.0.x) is only for multi-targeting support, and the TARGET_FRAMEWORK environment variable controls which framework version tests actually run against using the `--property:TestFramework` parameter.

Applied to files:

  • .github/workflows/deploy-package-github.yml
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.md : Document version-specific features appropriately

Applied to files:

  • docs/contributing.md
📚 Learning: 2026-01-01T06:10:39.665Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: src/AGENTS.md:0-0
Timestamp: 2026-01-01T06:10:39.665Z
Learning: Applies to src/**/MigrationGuide.V3.md : Update `MigrationGuide.V3.md` with migration notes and bridges when behavior changes

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.md : Provide migration guidance for breaking changes in documentation

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-12-24T07:46:46.923Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1771
File: .github/instructions/indicator-buffer.instructions.md:321-321
Timestamp: 2025-12-24T07:46:46.923Z
Learning: "Last updated" dates in instruction files (.github/instructions/*.md) should only be updated for meaningful content changes to the guidance itself, not for administrative changes like path updates, link corrections, or file reorganization.

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Ensure documentation site builds successfully in the CI/CD pipeline

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.{md,html} : Verify all internal and external links work in documentation

Applied to files:

  • docs/contributing.md
📚 Learning: 2026-01-03T07:35:32.539Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/markdown.instructions.md:0-0
Timestamp: 2026-01-03T07:35:32.539Z
Learning: Applies to {AGENTS.md,**/instructions/*.md,*.instructions.md} : Replace `#file:` references with plain-text path mentions in entry point files (AGENTS.md, root instruction files) to prevent cascading context bloat

Applied to files:

  • docs/contributing.md
📚 Learning: 2026-01-03T00:10:34.748Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/skills.instructions.md:0-0
Timestamp: 2026-01-03T00:10:34.748Z
Learning: Applies to **/.github/skills/**/SKILL.md : Skills should use `#file:` and `#tool:` syntax for file and tool references according to markdown.instructions.md guidelines

Applied to files:

  • docs/contributing.md
📚 Learning: 2026-01-03T00:10:34.748Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/skills.instructions.md:0-0
Timestamp: 2026-01-03T00:10:34.748Z
Learning: Applies to **/.github/skills/**/SKILL.md : Skill files must include workflow sections in the following order: Title and introduction (H1), When to use this skill, Required tools, Workflow (numbered sequential steps), Completion criteria or quality standards, Self-healing (for maintenance skills), About maintenance

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.{md,html} : Check for typos and formatting consistency in documentation changes

Applied to files:

  • docs/contributing.md
📚 Learning: 2026-01-03T00:10:34.748Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/skills.instructions.md:0-0
Timestamp: 2026-01-03T00:10:34.748Z
Learning: Applies to **/.github/skills/**/SKILL.md : Skill workflow steps must be numbered sequentially with substeps clearly delineated and logically organized for agent execution

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.{md,html} : Maintain accuracy of mathematical formulas and calculations in documentation

Applied to files:

  • docs/contributing.md
📚 Learning: 2026-01-03T07:35:32.539Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/markdown.instructions.md:0-0
Timestamp: 2026-01-03T07:35:32.539Z
Learning: Verify all internal Markdown links resolve to existing files

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/({_layouts,_includes})/**/*.{html,md} : Follow established patterns in `_layouts/` and `_includes/` directories

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-09-02T02:01:48.007Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1384
File: tests/indicators/s-z/Tsi/Tsi.Tests.cs:14-14
Timestamp: 2025-09-02T02:01:48.007Z
Learning: The Stock.Indicators repository uses centralized package management via tests\Directory.Packages.props to define MSTest package versions across all test projects, currently using MSTest.TestAdapter and MSTest.TestFramework version 3.10.3.

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-09-28T22:37:53.272Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1406
File: .github/copilot-instructions.md:37-55
Timestamp: 2025-09-28T22:37:53.272Z
Learning: For the Stock Indicators repository: Use double for performance in iterative indicator calculations, then promote to decimal when exposing price-sensitive or monetary results that require trading accuracy. The canonical numeric precision policy is documented in .github/instructions/source-code-completion.instructions.md and referenced in spec-kit integration guide.

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-09-30T22:14:21.695Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1446
File: .github/workflows/test-integration.yml:3-8
Timestamp: 2025-09-30T22:14:21.695Z
Learning: For the Stock.Indicators repository, integration tests in `.github/workflows/test-integration.yml` are intentionally not run on pull requests when the test suite is minimal (e.g., only one test). The maintainer prefers to add the pull_request trigger back when integration tests become more prevalent. This is a library package not expected to have extensive integration testing.

Applied to files:

  • docs/contributing.md
📚 Learning: 2026-01-06T06:43:47.544Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1880
File: docs/indicators/Beta.md:69-69
Timestamp: 2026-01-06T06:43:47.544Z
Learning: The repository's docs/.markdownlint-cli2.jsonc config permits the listed HTML elements for MD033 in Markdown files. For any Markdown under docs (e.g., docs/indicators/Beta.md), verify that any HTML elements used are within the allowed list. If an element is used that's not in the allowed list, flag it for removal or adjust the config accordingly.

Applied to files:

  • docs/contributing.md
🔇 Additional comments (7)
docs/contributing.md (2)

231-231: Verify v2 reference aligns with new versioning model.

Line 231 references creating preview releases from "main or v2", but the branch-based versioning section (lines 212–216) describes the model as supporting main (2.x.x), v3 (3.x.x-preview.N), and feature branches. The PR targets the v3 branch for the new versioning model. Confirm whether v2 is a valid deployment branch in the new model or if this reference should be updated to reflect current branches.


197-297: Markdown formatting and structure are compliant.

The revised Versioning section follows all coding guidelines: proper sentence-case headers, hyphens for bullets, correct header hierarchy (no skipping levels), blank lines before/after headers and code blocks, and appropriate code block language identifiers. Tables use correct pipe-delimited format with alignment indicators.

.github/workflows/deploy-package-nuget.yml (4)

1-20: LGTM! Clear workflow documentation and appropriate trigger configuration.

The workflow documentation thoroughly explains the deployment behavior, versioning approach, and dry-run mode. The trigger on release events (published and created) aligns with the described production deployment workflow.


22-26: LGTM! Permissions are properly scoped.

The workflow permissions are appropriate for the deployment operations and OIDC authentication to nuget.org.


175-181: Publish step structure is correct but depends on fixing authentication.

The package publish step is well-structured with proper conditionals and the --skip-duplicate flag. However, it depends on the nuget_login step output which needs to be fixed (see previous comment about the non-existent NuGet/login action).


33-112: All GitHub Actions are using current versions.

The workflow correctly uses:

  • actions/checkout@v6 (latest major version)
  • actions/setup-dotnet@v5 (latest major version)
  • jacobtomlinson/gha-find-replace@v3 (latest version)
  • actions/upload-artifact@v6 (latest major version)

The package job structure is sound with appropriate error handling and security practices.

.github/workflows/deploy-package-github.yml (1)

71-82: Update actions/download-artifact from v5 to v4 and pin third-party action to SHA.

actions/download-artifact@v5 is deprecated; the current major version is v4. Additionally, for supply-chain security in this deployment workflow, pin jacobtomlinson/gha-find-replace (line 113) to a specific commit SHA rather than using a major version reference.

Applies to: line 199 (and line 113 for SHA pinning)

⛔ Skipped due to learnings
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1734
File: .github/workflows/test-indicators-matrix.yml:38-51
Timestamp: 2025-11-12T00:30:31.400Z
Learning: In .github/workflows/test-indicators-matrix.yml, the workflow always requires .NET 10 to build and run test projects. The "legacy sut" .NET SDK installation (e.g., 6.0.x) is only for multi-targeting support, and the TARGET_FRAMEWORK environment variable controls which framework version tests actually run against using the `--property:TestFramework` parameter.
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-03T07:34:40.247Z
Learning: Use Solution tasks (Restore, Build, Test) or run `dotnet restore`, `dotnet build`, and `dotnet test --no-restore` from repository root

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Signed-off-by: Dave Skender <[email protected]>
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Fix all issues with AI agents
In @.github/workflows/deploy-package-github.yml:
- Around line 196-202: The "Download package" step currently uses
actions/download-artifact@v5 while the package upload uses upload-artifact@v6;
update the "Download package" step (the step with name "Download package" and
the uses entry actions/download-artifact@v5) to use actions/download-artifact@v6
so the upload and download artifact actions use matching major versions for
compatibility.

In @.github/workflows/deploy-package-nuget.yml:
- Around line 74-83: The workflow's "Compose package info" step uses xmllint but
never installs libxml2-utils; add a preceding step (before the Compose package
info step) that installs xmllint (e.g., run apt-get update && apt-get install -y
libxml2-utils) on the runner so the xmllint invocation that reads
src/Indicators.csproj succeeds; ensure the new step runs on the same job and
exposes xmllint to the "Compose package info" step.
- Around line 183-188: The workflow step named "Production package published"
uses an incorrect boolean check ` ${{ !env.dry_run }}`; change its if condition
to explicitly compare the env var string (e.g. ` ${{ env.dry_run != 'true' }}`)
so the step only runs when dry_run is not the literal 'true'. Locate the step
with the name "Production package published" and replace the conditional
expression accordingly.

In @docs/contributing.md:
- Line 257: Update the incorrect workflow filenames in the contributing docs:
change references to `.github/workflows/deploy-package.yml` and
`.github/workflows/deploy-production.yml` so they match the actual files in this
PR — replace `.github/workflows/deploy-package.yml` with
`.github/workflows/deploy-package-github.yml` and replace
`.github/workflows/deploy-production.yml` with
`.github/workflows/deploy-package-nuget.yml`, leaving the existing correct
reference to `.github/workflows/deploy-package-nuget.yml` unchanged.
🧹 Nitpick comments (3)
.github/workflows/deploy-package-github.yml (2)

52-53: Duplicate GitVersion installation.

GitVersion.Tool is installed twice: once at line 53 and again at line 86. Remove the duplicate installation to improve workflow efficiency.

Suggested fix
     - name: Setup GitVersion Tool
       run: dotnet tool install --global GitVersion.Tool

-    - name: Validate CI deployment
+    - name: Checkout source
+      uses: actions/checkout@v6
+      with:
+        fetch-depth: 0
+
+    - name: Validate CI deployment
       run: |
         echo "✅ CI deployment to GitHub Packages"
         echo "   Branch: ${{ github.ref }}"
         echo "   Run: ${{ github.run_number }}"

     - name: Set workflow mode
       id: settings
       run: |
         if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
           echo "dry_run=${{ inputs.dry_run }}" >> $GITHUB_OUTPUT
         else
           echo "dry_run=false" >> $GITHUB_OUTPUT
         fi

-    - name: Checkout source
-      uses: actions/checkout@v6
-      with:
-        fetch-depth: 0
-
     - name: Setup .NET SDK
       uses: actions/setup-dotnet@v5
       with:
         dotnet-version: "10.x"
         dotnet-quality: "ga"
         cache: true
         cache-dependency-path: "**/packages.lock.json"

     - name: Install dependencies
       run: |
         sudo apt-get update && sudo apt-get install -y libxml2-utils
-        dotnet tool install --global GitVersion.Tool

Also applies to: 83-86


149-150: Missing blank line before step.

Add a blank line before the "Summary output" step for consistency with the formatting of other steps in this workflow.

Suggested fix
         include-hidden-files: true
+
     - name: Summary output
docs/contributing.md (1)

247-256: Minor: Missing "Automatic" label in section header.

The section is titled "CI Package Deploy (Automatic)" in the header but the trigger description says "Automatic" separately. Consider consistency with the header by removing redundancy or keeping the header aligned with "Production Package Deploy (Manual)" which doesn't repeat "Manual" in the body.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 34b71b6 and e7fa022.

📒 Files selected for processing (3)
  • .github/workflows/deploy-package-github.yml
  • .github/workflows/deploy-package-nuget.yml
  • docs/contributing.md
🧰 Additional context used
📓 Path-based instructions (9)
docs/**/*.md

📄 CodeRabbit inference engine (.github/instructions/docs.instructions.md)

docs/**/*.md: Follow markdown linting rules in the .github/instructions/markdown.instructions.md file
Ensure YAML front matter follows documented schema
Include required YAML front matter for all documentation pages
Use consistent layout references in Jekyll front matter
Set appropriate page titles and descriptions in Jekyll front matter
Include navigation metadata in front matter when applicable
Document version-specific features appropriately
Provide migration guidance for breaking changes in documentation

Files:

  • docs/contributing.md

⚙️ CodeRabbit configuration file

docs/**/*.md: Check for:

  • Accuracy: Ensure content matches current implementation
  • Completeness: Verify examples, parameters, and return values are documented
  • Accessibility: Flag missing alt text, poor heading hierarchy
  • Link validity: Check for broken internal/external links
  • Mathematical formulas: Verify calculation descriptions are correct

Files:

  • docs/contributing.md
docs/**/*.{html,md}

📄 CodeRabbit inference engine (.github/instructions/docs.instructions.md)

Use semantic HTML elements when HTML is required

Files:

  • docs/contributing.md
docs/**/*.{md,html}

📄 CodeRabbit inference engine (.github/instructions/docs.instructions.md)

docs/**/*.{md,html}: Provide alt text for all images
Ensure proper heading hierarchy with no skipping levels
Include descriptive link text and avoid 'click here' phrases
Verify all internal and external links work in documentation
Check for typos and formatting consistency in documentation changes
Maintain accuracy of mathematical formulas and calculations in documentation
Clearly mark deprecated features in documentation

Files:

  • docs/contributing.md
docs/**

📄 CodeRabbit inference engine (.github/instructions/docs.instructions.md)

Build Jekyll documentation without errors before committing changes

Files:

  • docs/contributing.md
docs/**/*.{md,yml,yaml}

📄 CodeRabbit inference engine (.github/instructions/docs.instructions.md)

docs/**/*.{md,yml,yaml}: Update examples and documentation when API changes occur
Maintain backward compatibility in examples where possible

Files:

  • docs/contributing.md
**/*.md

📄 CodeRabbit inference engine (AGENTS.md)

Markdown: Run npx markdownlint-cli2 for linting and npx markdownlint-cli2 --fix for auto-fixing

Files:

  • docs/contributing.md
**/*.{md,markdown,.markdownlint*}

📄 CodeRabbit inference engine (.github/instructions/markdown.instructions.md)

**/*.{md,markdown,.markdownlint*}: Run npx markdownlint-cli2 --no-globs {filepath} --fix to auto-fix Markdown linting issues, always using --no-globs with explicit file paths to prevent unintended glob expansion
Run npx markdownlint-cli2 --no-globs {filepath} to verify zero linting errors after manual fixes

Files:

  • docs/contributing.md
**/*.{md,markdown}

📄 CodeRabbit inference engine (.github/instructions/markdown.instructions.md)

**/*.{md,markdown}: Never bypass lint warnings; resolve or add narrow suppressions with <!-- markdownlint-disable MD### -->...<!-- markdownlint-enable MD### -->
Convert title case in headers to sentence case: 'How To Use' → 'How to use'
Convert title case in bold labels to sentence case: 'Next Steps:' → 'Next steps:'
Replace asterisk bullets (*, +) with hyphens (-)
Convert Setext headers (===, ---) to ATX headers (#, ##)
Add blank lines before and after headers
Add blank lines before and after code block fences
Remove backticks in #file: references: use #file:path not `#file:path`
Remove trailing punctuation after #file: references or add space
Add language identifier to all fenced code blocks (use plaintext when language is unknown)
Increase outer fence length for nested code blocks to be greater than inner fence length
Convert ordered lists for non-sequential items to unordered hyphen lists
Use present tense and imperative mood in Markdown prose: 'Run the command' not 'You should run'
Use sentence case only for headers (capitalize first word + proper nouns, lowercase articles, prepositions, conjunctions)
Use ATX-style headers only (#, ##, ###); never use Setext style (===, ---)
Maintain sequential header hierarchy without skipping levels: ######
Always use hyphens (-) for bullet points; never asterisks (*) or plus signs (+)
Indent nested lists with exactly two spaces
Use ordered lists (1., 2., 3.) only when sequence matters
Use sentence case for bold labels that start list items
Always use fenced code blocks ( ); never use indented code blocks
Do not wrap #file: or #folder: context tokens in backticks
Do not place punctuation immediately after #file: or #folder: tokens
Never use file: URI scheme (e.g., file:///path/to/doc.md) as these always force auto-loading
Use standard Markdown links for URLs only, not for local workspace files
Use #tool: syntax only for VS Code Copilot Cha...

Files:

  • docs/contributing.md
.github/**/*.yml

⚙️ CodeRabbit configuration file

.github/**/*.yml: Review for:

  • Security: No secrets in workflows, proper permissions
  • Efficiency: Optimize CI/CD performance, avoid redundant builds
  • Dependencies: Keep actions and versions current
  • Error handling: Proper failure scenarios and notifications

Files:

  • .github/workflows/deploy-package-github.yml
  • .github/workflows/deploy-package-nuget.yml
🧠 Learnings (21)
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.md : Document version-specific features appropriately

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.md : Provide migration guidance for breaking changes in documentation

Applied to files:

  • docs/contributing.md
📚 Learning: 2026-01-01T06:10:39.665Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: src/AGENTS.md:0-0
Timestamp: 2026-01-01T06:10:39.665Z
Learning: Applies to src/**/MigrationGuide.V3.md : Update `MigrationGuide.V3.md` with migration notes and bridges when behavior changes

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Ensure documentation site builds successfully in the CI/CD pipeline

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-12-24T07:46:46.923Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1771
File: .github/instructions/indicator-buffer.instructions.md:321-321
Timestamp: 2025-12-24T07:46:46.923Z
Learning: "Last updated" dates in instruction files (.github/instructions/*.md) should only be updated for meaningful content changes to the guidance itself, not for administrative changes like path updates, link corrections, or file reorganization.

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.{md,html} : Verify all internal and external links work in documentation

Applied to files:

  • docs/contributing.md
📚 Learning: 2026-01-03T07:35:32.539Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/markdown.instructions.md:0-0
Timestamp: 2026-01-03T07:35:32.539Z
Learning: Applies to {AGENTS.md,**/instructions/*.md,*.instructions.md} : Replace `#file:` references with plain-text path mentions in entry point files (AGENTS.md, root instruction files) to prevent cascading context bloat

Applied to files:

  • docs/contributing.md
📚 Learning: 2026-01-03T00:10:34.748Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/skills.instructions.md:0-0
Timestamp: 2026-01-03T00:10:34.748Z
Learning: Applies to **/.github/skills/**/SKILL.md : Skills should use `#file:` and `#tool:` syntax for file and tool references according to markdown.instructions.md guidelines

Applied to files:

  • docs/contributing.md
📚 Learning: 2026-01-03T00:10:34.748Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/skills.instructions.md:0-0
Timestamp: 2026-01-03T00:10:34.748Z
Learning: Applies to **/.github/skills/**/SKILL.md : Skill files must include workflow sections in the following order: Title and introduction (H1), When to use this skill, Required tools, Workflow (numbered sequential steps), Completion criteria or quality standards, Self-healing (for maintenance skills), About maintenance

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.{md,html} : Check for typos and formatting consistency in documentation changes

Applied to files:

  • docs/contributing.md
📚 Learning: 2026-01-03T00:10:34.748Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/skills.instructions.md:0-0
Timestamp: 2026-01-03T00:10:34.748Z
Learning: Applies to **/.github/skills/**/SKILL.md : Skill workflow steps must be numbered sequentially with substeps clearly delineated and logically organized for agent execution

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.{md,html} : Maintain accuracy of mathematical formulas and calculations in documentation

Applied to files:

  • docs/contributing.md
📚 Learning: 2026-01-03T07:35:32.539Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/markdown.instructions.md:0-0
Timestamp: 2026-01-03T07:35:32.539Z
Learning: Verify all internal Markdown links resolve to existing files

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/({_layouts,_includes})/**/*.{html,md} : Follow established patterns in `_layouts/` and `_includes/` directories

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.{md,yml,yaml} : Maintain backward compatibility in examples where possible

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-09-02T02:01:48.007Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1384
File: tests/indicators/s-z/Tsi/Tsi.Tests.cs:14-14
Timestamp: 2025-09-02T02:01:48.007Z
Learning: The Stock.Indicators repository uses centralized package management via tests\Directory.Packages.props to define MSTest package versions across all test projects, currently using MSTest.TestAdapter and MSTest.TestFramework version 3.10.3.

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-09-28T22:37:53.272Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1406
File: .github/copilot-instructions.md:37-55
Timestamp: 2025-09-28T22:37:53.272Z
Learning: For the Stock Indicators repository: Use double for performance in iterative indicator calculations, then promote to decimal when exposing price-sensitive or monetary results that require trading accuracy. The canonical numeric precision policy is documented in .github/instructions/source-code-completion.instructions.md and referenced in spec-kit integration guide.

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-09-30T22:14:21.695Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1446
File: .github/workflows/test-integration.yml:3-8
Timestamp: 2025-09-30T22:14:21.695Z
Learning: For the Stock.Indicators repository, integration tests in `.github/workflows/test-integration.yml` are intentionally not run on pull requests when the test suite is minimal (e.g., only one test). The maintainer prefers to add the pull_request trigger back when integration tests become more prevalent. This is a library package not expected to have extensive integration testing.

Applied to files:

  • docs/contributing.md
📚 Learning: 2026-01-06T06:43:47.544Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1880
File: docs/indicators/Beta.md:69-69
Timestamp: 2026-01-06T06:43:47.544Z
Learning: The repository's docs/.markdownlint-cli2.jsonc config permits the listed HTML elements for MD033 in Markdown files. For any Markdown under docs (e.g., docs/indicators/Beta.md), verify that any HTML elements used are within the allowed list. If an element is used that's not in the allowed list, flag it for removal or adjust the config accordingly.

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-10-01T07:32:55.702Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/performance-testing.instructions.md:0-0
Timestamp: 2025-10-01T07:32:55.702Z
Learning: Applies to .github/workflows/test-performance.yml : The test-performance.yml workflow should build in Release, run the full benchmark suite, upload artifacts, publish summaries, and optionally run the regression detection step

Applied to files:

  • .github/workflows/deploy-package-github.yml
  • .github/workflows/deploy-package-nuget.yml
📚 Learning: 2025-11-12T00:30:31.400Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1734
File: .github/workflows/test-indicators-matrix.yml:38-51
Timestamp: 2025-11-12T00:30:31.400Z
Learning: In .github/workflows/test-indicators-matrix.yml, the workflow always requires .NET 10 to build and run test projects. The "legacy sut" .NET SDK installation (e.g., 6.0.x) is only for multi-targeting support, and the TARGET_FRAMEWORK environment variable controls which framework version tests actually run against using the `--property:TestFramework` parameter.

Applied to files:

  • .github/workflows/deploy-package-github.yml
⏰ Context from checks skipped due to timeout of 400000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: linting (full)
  • GitHub Check: Codacy Static Code Analysis
🔇 Additional comments (7)
.github/workflows/deploy-package-github.yml (2)

225-330: LGTM on cleanup logic with continue-on-error.

The cleanup job properly uses continue-on-error: true to prevent workflow failures if cleanup encounters issues, and the logic correctly handles both retention days and minimum keep count. The error handling within the script is comprehensive.


238-259: No action required. The cleanup script uses the correct API endpoint for this repository's owner type. The repository is owned by a user (DaveSkender), not an organization, so getAllPackageVersionsForPackageOwnedByUser is the appropriate endpoint. If the repository were transferred to an organization in the future, the endpoint would need to be updated to getAllPackageVersionsForPackageOwnedByOrg, but no change is needed at this time.

Likely an incorrect or invalid review comment.

.github/workflows/deploy-package-nuget.yml (3)

98-104: Missing --include-symbols flag for NuGet package.

The GitHub workflow (line 140) includes --include-symbols when packing, but this workflow does not. This inconsistency means production packages won't include symbol packages for debugging.

Is this intentional? If symbol packages should be published to nuget.org for debugging support, add the flag:

Suggested fix (if symbols are desired)
     - name: Create NuGet package
       run: |
         dotnet pack src/Indicators.csproj \
           --no-build \
           --configuration Release \
           --output NuGet \
+          --include-symbols \
           -p:PackageVersion=${{ steps.version_info.outputs.version }}

18-25: LGTM on permissions and OIDC setup.

The workflow correctly requests id-token: write permission required for OIDC authentication to nuget.org, and the trigger conditions for published/created releases are appropriate for production deployment.


168-174: OIDC configuration in the workflow is properly set up. The workflow includes required id-token: write permissions (lines 25 and 143-146), uses the standard NuGet/login@v1 action correctly, and consumes the temporary API key immediately after login (line 180).

Ensure the nuget.org account has a Trusted Publishing policy configured to allow OIDC authentication from this workflow, and verify the NUGET_USER secret is set in the repository settings.

docs/contributing.md (2)

284-291: LGTM on version examples table.

The table clearly illustrates the different versioning scenarios with appropriate triggers, version formats, and registries. This provides excellent clarity for contributors.


197-227: LGTM on versioning documentation.

The branch-based versioning explanation is clear and accurate. The semver tags for controlling version increments are well documented with practical examples.

Updated permissions and removed unnecessary steps in the GitHub Actions workflow.

Signed-off-by: Dave Skender <[email protected]>
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Fix all issues with AI agents
In @.github/workflows/deploy-package-github.yml:
- Around line 34-45: The workflow grants unnecessary repo write permissions:
remove or change the explicit "permissions: contents: write" entries under the
"package" job (and the analogous "deploy" job mentioned) so they do not elevate
GITHUB_TOKEN beyond what's needed; either delete the per-job permissions block
to inherit the top-level "contents: read" or set it to "contents: read"
explicitly, ensuring no job declares "contents: write" when it does not perform
pushes/tags/releases.
🧹 Nitpick comments (3)
.github/workflows/deploy-package-github.yml (3)

16-33: Pin runner image (avoid ubuntu-latest drift).

For release/publish workflows, consider pinning to a specific Ubuntu image (e.g., ubuntu-24.04) to reduce surprise breakages from runner updates.

Proposed diff
-    runs-on: ubuntu-latest
+    runs-on: ubuntu-24.04
...
-    runs-on: ubuntu-latest
+    runs-on: ubuntu-24.04
...
-    runs-on: ubuntu-latest
+    runs-on: ubuntu-24.04

Also applies to: 40-41, 168-170, 224-226


235-238: Avoid masking cleanup failures with continue-on-error (or at least fail on “real” errors).

Right now permissions/endpoint errors can silently pass. If the intent is “best effort”, consider still failing the step when you’ve confirmed the package exists but deletions repeatedly fail (rate limits / perms), so you notice regressions.

Also applies to: 324-327


82-93: Pin GitVersion.Tool version and use correct invocation; jq is pre-installed but worth making explicit.

The suggestions to pin GitVersion.Tool to 6.* and explicitly install jq are sound. Additionally, use dotnet-gitversion (the global tool shim command) instead of dotnet gitversion when invoking the tool after installation.

Proposed diff
       - name: Install dependencies
         run: |
-          sudo apt-get update && sudo apt-get install -y libxml2-utils
-          dotnet tool install --global GitVersion.Tool
+          sudo apt-get update && sudo apt-get install -y libxml2-utils jq
+          dotnet tool install --global GitVersion.Tool --version 6.*

       - name: Generate version info
         id: gitversion
         run: |
-          dotnet gitversion -config src/gitversion.yml -updateassemblyinfo
-          dotnet gitversion -config src/gitversion.yml | jq -r 'to_entries[] | "\(.key)=\(.value)"' >> $GITHUB_ENV
+          dotnet-gitversion -config src/gitversion.yml -updateassemblyinfo
+          dotnet-gitversion -config src/gitversion.yml | jq -r 'to_entries[] | "\(.key)=\(.value)"' >> $GITHUB_ENV
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e7fa022 and 8e3a254.

📒 Files selected for processing (1)
  • .github/workflows/deploy-package-github.yml
🧰 Additional context used
📓 Path-based instructions (1)
.github/**/*.yml

⚙️ CodeRabbit configuration file

.github/**/*.yml: Review for:

  • Security: No secrets in workflows, proper permissions
  • Efficiency: Optimize CI/CD performance, avoid redundant builds
  • Dependencies: Keep actions and versions current
  • Error handling: Proper failure scenarios and notifications

Files:

  • .github/workflows/deploy-package-github.yml
🧠 Learnings (2)
📚 Learning: 2025-10-01T07:32:55.702Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/performance-testing.instructions.md:0-0
Timestamp: 2025-10-01T07:32:55.702Z
Learning: Applies to .github/workflows/test-performance.yml : The test-performance.yml workflow should build in Release, run the full benchmark suite, upload artifacts, publish summaries, and optionally run the regression detection step

Applied to files:

  • .github/workflows/deploy-package-github.yml
📚 Learning: 2025-11-12T00:30:31.400Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1734
File: .github/workflows/test-indicators-matrix.yml:38-51
Timestamp: 2025-11-12T00:30:31.400Z
Learning: In .github/workflows/test-indicators-matrix.yml, the workflow always requires .NET 10 to build and run test projects. The "legacy sut" .NET SDK installation (e.g., 6.0.x) is only for multi-targeting support, and the TARGET_FRAMEWORK environment variable controls which framework version tests actually run against using the `--property:TestFramework` parameter.

Applied to files:

  • .github/workflows/deploy-package-github.yml
⏰ Context from checks skipped due to timeout of 400000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: linting (full)
  • GitHub Check: Codacy Static Code Analysis
🔇 Additional comments (2)
.github/workflows/deploy-package-github.yml (2)

69-80: All referenced action versions are current and valid; SHA pinning can be considered for additional hardening.

The versions used are standard current releases: actions/checkout@v6, actions/setup-dotnet@v5, actions/upload-artifact@v6, actions/download-artifact@v5, actions/github-script@v8, and jacobtomlinson/gha-find-replace@v3 are all current as of January 2026, with no newer major versions released. These are not atypical—they represent the latest stable versions for each action.

While pinning to commit SHAs is a valid supply-chain hardening practice and can be adopted if desired, it is not necessary to resolve version mismatches, as all referenced versions exist and are actively maintained.

Likely an incorrect or invalid review comment.


87-107: Fix -warnAsError CLI syntax error and resolve version source inconsistency.

The -warnAsError flag is incorrect. Use -- /warnaserror (or -p:TreatWarningsAsErrors=true/-p:WarningsAsErrors=true) instead.

Additionally, the -updateassemblyinfo flag in GitVersion updates assembly metadata based on gitversion.yml, but the subsequent build step overrides the Version property with a custom CI version (3.0.0-ci-1234 format). This creates a conflict where assembly version and package version may diverge—GitVersion's computed version won't match the custom CI version written to the package. Consider either:

  • Removing -updateassemblyinfo and relying solely on the MSBuild Version override, or
  • Using GitVersion's computed MajorMinorPatch directly instead of composing a separate CI version

Applies to lines 129 (build command) and 122-139 (version handling).

⛔ Skipped due to learnings
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-03T07:34:40.247Z
Learning: Applies to **/*.cs : Treat all warnings and errors as failures that must be fixed; do not accept, ignore, or suppress warnings regardless of scope or reason

Added a step to install libxml2-utils before composing package info.

Signed-off-by: Dave Skender <[email protected]>
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Fix all issues with AI agents
In @.github/workflows/deploy-package-github.yml:
- Around line 172-174: Remove the unnecessary repository contents permission
from the GitHub Actions workflow by deleting the "contents: write" entry under
the permissions block for the deploy job; keep only the required "packages:
write" permission so the deploy job can publish packages without granting write
access to repository contents.
- Around line 43-44: Remove the overly-permissive permission by deleting the
`contents: write` entry under the job's `permissions` in
.github/workflows/deploy-package-github.yml for the `package` job (or replace it
with `contents: read` if explicit read access is required); this ensures the job
no longer requests write access to repository contents.
- Line 70: Update the workflow to use the maintained actions and mitigate the
unmaintained find-replace action: bump actions/download-artifact@v6 to
actions/download-artifact@v7; replace jacobtomlinson/gha-find-replace@v3 with an
actively maintained alternative (or remove it and use native GitHub CLI/grep+sed
steps) or at minimum pin its exact commit SHA and add a comment/TODO for
security monitoring; ensure any changed usages of download-artifact or
find-replace in the job steps still match the expected inputs/outputs and update
step names if needed.
🧹 Nitpick comments (2)
.github/workflows/deploy-package-github.yml (2)

87-93: Consider optimizing GitVersion invocations.

GitVersion runs twice: once with -updateassemblyinfo and once to export variables. While functional, this could be streamlined to reduce execution time.

♻️ Optimization suggestion
       - name: Generate version info
         id: gitversion
         run: |
-          dotnet gitversion -config src/gitversion.yml -updateassemblyinfo
           # Export GitVersion variables to environment
-          dotnet gitversion -config src/gitversion.yml | jq -r 'to_entries[] | "\(.key)=\(.value)"' >> $GITHUB_ENV
+          dotnet gitversion -config src/gitversion.yml -updateassemblyinfo | jq -r 'to_entries[] | "\(.key)=\(.value)"' >> $GITHUB_ENV

Note: Verify that -updateassemblyinfo still produces JSON output when combined this way.


209-214: Consider referencing actual retention value instead of hardcoding.

Line 213 mentions "90 days" but this value is hardcoded in the cleanup script (line 242). If the retention period changes, this message could become inaccurate.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8e3a254 and 23c79ab.

📒 Files selected for processing (1)
  • .github/workflows/deploy-package-github.yml
🧰 Additional context used
📓 Path-based instructions (1)
.github/**/*.yml

⚙️ CodeRabbit configuration file

.github/**/*.yml: Review for:

  • Security: No secrets in workflows, proper permissions
  • Efficiency: Optimize CI/CD performance, avoid redundant builds
  • Dependencies: Keep actions and versions current
  • Error handling: Proper failure scenarios and notifications

Files:

  • .github/workflows/deploy-package-github.yml
🧠 Learnings (3)
📚 Learning: 2025-10-01T07:32:55.702Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/performance-testing.instructions.md:0-0
Timestamp: 2025-10-01T07:32:55.702Z
Learning: Applies to .github/workflows/test-performance.yml : The test-performance.yml workflow should build in Release, run the full benchmark suite, upload artifacts, publish summaries, and optionally run the regression detection step

Applied to files:

  • .github/workflows/deploy-package-github.yml
📚 Learning: 2025-11-12T00:30:31.400Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1734
File: .github/workflows/test-indicators-matrix.yml:38-51
Timestamp: 2025-11-12T00:30:31.400Z
Learning: In .github/workflows/test-indicators-matrix.yml, the workflow always requires .NET 10 to build and run test projects. The "legacy sut" .NET SDK installation (e.g., 6.0.x) is only for multi-targeting support, and the TARGET_FRAMEWORK environment variable controls which framework version tests actually run against using the `--property:TestFramework` parameter.

Applied to files:

  • .github/workflows/deploy-package-github.yml
📚 Learning: 2026-01-03T07:35:32.539Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/markdown.instructions.md:0-0
Timestamp: 2026-01-03T07:35:32.539Z
Learning: Applies to **/*.{md,markdown} : Use GitHub alert blocks sparingly for critical execution warnings: `> [!NOTE]`, `> [!TIP]`, `> [!IMPORTANT]`, `> [!WARNING]`, `> [!CAUTION]`

Applied to files:

  • .github/workflows/deploy-package-github.yml
⏰ Context from checks skipped due to timeout of 400000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Codacy Static Code Analysis
🔇 Additional comments (5)
.github/workflows/deploy-package-github.yml (5)

235-331: Excellent error handling in cleanup job.

The cleanup implementation demonstrates robust error handling:

  • continue-on-error: true prevents workflow failure
  • Nested try-catch blocks handle both overall and per-version failures
  • Clear logging at each error level
  • Graceful degradation when packages don't exist yet

This pattern is well-suited for maintenance jobs.


30-32: Concurrency control is appropriate for CI builds.

The cancel-in-progress: true setting is well-suited for CI package builds, as it prevents redundant builds on the same branch while ensuring each published package has a unique version number (via run_number).


94-107: CI versioning strategy is well-designed.

The version composition using MajorMinorPatch-ci.{run_number} ensures:

  • Semantic base version from GitVersion
  • Unique, monotonically increasing versions via run_number
  • Clear identification of CI builds via -ci- suffix

This aligns with the documented workflow objectives.


268-311: Cleanup retention logic is well-balanced.

The two-tier retention strategy (keep N most recent + time-based cutoff) ensures:

  • Recent versions are always retained (prevents aggressive cleanup)
  • Old versions are eventually removed (prevents unbounded growth)
  • Graceful handling when retention period hasn't elapsed yet

60-67: Dry-run implementation is comprehensive.

The dry-run mode is properly implemented across all jobs:

  • Determined by event type (workflow_dispatch vs push)
  • Consistently checked before deployment operations
  • Clearly communicated in job summaries

This enables safe testing of the packaging workflow.

Also applies to: 202-202, 225-225

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Fix all issues with AI agents
In @.github/workflows/deploy-package-nuget.yml:
- Around line 22-26: The workflow grants overly broad permissions; update the
permissions blocks (the top-level permissions: and any job-level permissions in
the deploy/package jobs) to the least privilege required by removing contents:
write and packages: write and keep only id-token: write for OIDC authentication;
ensure any job that needs no extra scopes uses permissions: { id-token: write }
(or equivalent minimal YAML) so only the deploy step performing NuGet push has
id-token write and no unnecessary contents/packages permissions remain.
- Around line 88-93: The "Replace version markers" step uses
jacobtomlinson/gha-find-replace@v3 which must be pinned to a commit SHA and
annotated with the tag (e.g., replace @v3 with @<commit-sha> and add a comment
with the v3 tag) to satisfy security guidelines, and because the step is
redundant (the version is already injected via the dotnet pack -p:PackageVersion
flag) either remove the entire "Replace version markers" step or, if you intend
to keep it, document where the "#{PACKAGE_VERSION}#" marker should exist in the
repo and add the commit SHA pin and comment for maintainability.
🧹 Nitpick comments (2)
.github/workflows/deploy-package-nuget.yml (2)

33-36: Consider removing fetch-depth: 0 for faster checkout.

The workflow fetches full git history, but since versioning comes from the release tag (not git history or GitVersion), only the current commit is needed for building and packing.

As per coding guidelines (efficiency for workflows), optimize CI/CD performance.

⚡ Proposed fix to improve efficiency
       - name: Checkout source
         uses: actions/checkout@v6
-        with:
-          fetch-depth: 0

74-86: Consider more robust package info extraction.

The xmllint XPath approach is fragile and could break if the csproj XML structure changes (e.g., namespaces added, multiple PropertyGroup elements). The hardcoded path src/Indicators.csproj also creates tight coupling.

💡 Alternative using MSBuild properties
-      - name: Install dependencies
-        run: sudo apt-get update && sudo apt-get install -y libxml2-utils
-
       - name: Compose package info
         id: package_info
         run: |
-          PACKAGE_NAME=$(xmllint --xpath "//PropertyGroup/PackageId/text()" src/Indicators.csproj 2>/dev/null)
+          PACKAGE_NAME=$(dotnet build src/Indicators.csproj --no-restore --getProperty:PackageId)
           if [[ -z "$PACKAGE_NAME" ]]; then
             echo "::error::Could not extract PackageId from src/Indicators.csproj"
             exit 1
           fi
           echo "name=${PACKAGE_NAME}" >> $GITHUB_OUTPUT
           echo "url=https://www.nuget.org/packages/${PACKAGE_NAME}/${{ steps.version_info.outputs.version }}" >> $GITHUB_OUTPUT

Note: Verify the exact MSBuild property syntax with your .NET version.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 23c79ab and d6539d8.

📒 Files selected for processing (1)
  • .github/workflows/deploy-package-nuget.yml
🧰 Additional context used
📓 Path-based instructions (1)
.github/**/*.yml

⚙️ CodeRabbit configuration file

.github/**/*.yml: Review for:

  • Security: No secrets in workflows, proper permissions
  • Efficiency: Optimize CI/CD performance, avoid redundant builds
  • Dependencies: Keep actions and versions current
  • Error handling: Proper failure scenarios and notifications

Files:

  • .github/workflows/deploy-package-nuget.yml
🧠 Learnings (2)
📚 Learning: 2025-10-01T07:32:55.702Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/performance-testing.instructions.md:0-0
Timestamp: 2025-10-01T07:32:55.702Z
Learning: Applies to .github/workflows/test-performance.yml : The test-performance.yml workflow should build in Release, run the full benchmark suite, upload artifacts, publish summaries, and optionally run the regression detection step

Applied to files:

  • .github/workflows/deploy-package-nuget.yml
📚 Learning: 2025-11-12T00:30:31.400Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1734
File: .github/workflows/test-indicators-matrix.yml:38-51
Timestamp: 2025-11-12T00:30:31.400Z
Learning: In .github/workflows/test-indicators-matrix.yml, the workflow always requires .NET 10 to build and run test projects. The "legacy sut" .NET SDK installation (e.g., 6.0.x) is only for multi-targeting support, and the TARGET_FRAMEWORK environment variable controls which framework version tests actually run against using the `--property:TestFramework` parameter.

Applied to files:

  • .github/workflows/deploy-package-nuget.yml
⏰ Context from checks skipped due to timeout of 400000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Codacy Static Code Analysis
🔇 Additional comments (4)
.github/workflows/deploy-package-nuget.yml (4)

44-57: LGTM!

Version extraction logic correctly strips the 'v' prefix and includes proper validation for empty versions with clear error messages.


178-184: LGTM with a note on wildcard behavior.

The package publishing logic correctly handles dry-run mode and uses --skip-duplicate to prevent errors. The wildcard NuGet/*.nupkg will publish all matching packages, which should be fine if only one package is expected in the directory.


18-20: Document or review the 'created' trigger behavior.

The workflow triggers on both published and created release events. The created event fires when a draft release is saved, causing this workflow to run in dry-run mode. While this enables validation before actual publication, it may be unexpected behavior.

Confirm this is intentional. If draft releases should not trigger any workflow execution, consider using only the published type:

 on:
   release:
-    types: [published, created]
+    types: [published]

171-176: NuGet/login@v1 is the correct and official GitHub Action for OIDC authentication.

The action is valid and properly configured for exchanging OIDC tokens with nuget.org's Trusted Publishing. No changes required.

For enhanced security (optional), consider pinning the action to a specific commit SHA instead of the version tag, as per GitHub Actions best practices. This mitigates the risk of tag tampering.

Removed 'contents: write' permission from package jobs.

Signed-off-by: Dave Skender <[email protected]>
Updated permissions to restrict access to read for contents.

Signed-off-by: Dave Skender <[email protected]>
Removed step to replace version markers in GitHub Actions workflow.

Signed-off-by: Dave Skender <[email protected]>
@DaveSkender
Copy link
Owner Author

@coderabbitai re-review

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 10, 2026

@DaveSkender, I'll review all the changes in this PR for you.

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
.github/workflows/deploy-package-nuget.yml (1)

139-153: Consider adding environment protection for production deployments.

The deploy job publishes to nuget.org (production) but doesn't declare a GitHub Environment. Adding an environment with protection rules (e.g., environment: name: nuget.org) would provide additional deployment safeguards like required reviewers or deployment delays for production releases.

♻️ Suggested enhancement

Add after line 142:

    environment:
      name: nuget.org
      url: ${{ needs.package.outputs.url }}

Then configure protection rules in repository settings → Environments → nuget.org.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d6539d8 and 7b9311a.

📒 Files selected for processing (3)
  • .github/workflows/deploy-package-github.yml
  • .github/workflows/deploy-package-nuget.yml
  • docs/contributing.md
🧰 Additional context used
📓 Path-based instructions (9)
docs/**/*.md

📄 CodeRabbit inference engine (.github/instructions/docs.instructions.md)

docs/**/*.md: Follow markdown linting rules in the .github/instructions/markdown.instructions.md file
Ensure YAML front matter follows documented schema
Include required YAML front matter for all documentation pages
Use consistent layout references in Jekyll front matter
Set appropriate page titles and descriptions in Jekyll front matter
Include navigation metadata in front matter when applicable
Document version-specific features appropriately
Provide migration guidance for breaking changes in documentation

Files:

  • docs/contributing.md

⚙️ CodeRabbit configuration file

docs/**/*.md: Check for:

  • Accuracy: Ensure content matches current implementation
  • Completeness: Verify examples, parameters, and return values are documented
  • Accessibility: Flag missing alt text, poor heading hierarchy
  • Link validity: Check for broken internal/external links
  • Mathematical formulas: Verify calculation descriptions are correct

Files:

  • docs/contributing.md
docs/**/*.{html,md}

📄 CodeRabbit inference engine (.github/instructions/docs.instructions.md)

Use semantic HTML elements when HTML is required

Files:

  • docs/contributing.md
docs/**/*.{md,html}

📄 CodeRabbit inference engine (.github/instructions/docs.instructions.md)

docs/**/*.{md,html}: Provide alt text for all images
Ensure proper heading hierarchy with no skipping levels
Include descriptive link text and avoid 'click here' phrases
Verify all internal and external links work in documentation
Check for typos and formatting consistency in documentation changes
Maintain accuracy of mathematical formulas and calculations in documentation
Clearly mark deprecated features in documentation

Files:

  • docs/contributing.md
docs/**

📄 CodeRabbit inference engine (.github/instructions/docs.instructions.md)

Build Jekyll documentation without errors before committing changes

Files:

  • docs/contributing.md
docs/**/*.{md,yml,yaml}

📄 CodeRabbit inference engine (.github/instructions/docs.instructions.md)

docs/**/*.{md,yml,yaml}: Update examples and documentation when API changes occur
Maintain backward compatibility in examples where possible

Files:

  • docs/contributing.md
**/*.md

📄 CodeRabbit inference engine (AGENTS.md)

Markdown: Run npx markdownlint-cli2 for linting and npx markdownlint-cli2 --fix for auto-fixing

Files:

  • docs/contributing.md
**/*.{md,markdown,.markdownlint*}

📄 CodeRabbit inference engine (.github/instructions/markdown.instructions.md)

**/*.{md,markdown,.markdownlint*}: Run npx markdownlint-cli2 --no-globs {filepath} --fix to auto-fix Markdown linting issues, always using --no-globs with explicit file paths to prevent unintended glob expansion
Run npx markdownlint-cli2 --no-globs {filepath} to verify zero linting errors after manual fixes

Files:

  • docs/contributing.md
**/*.{md,markdown}

📄 CodeRabbit inference engine (.github/instructions/markdown.instructions.md)

**/*.{md,markdown}: Never bypass lint warnings; resolve or add narrow suppressions with <!-- markdownlint-disable MD### -->...<!-- markdownlint-enable MD### -->
Convert title case in headers to sentence case: 'How To Use' → 'How to use'
Convert title case in bold labels to sentence case: 'Next Steps:' → 'Next steps:'
Replace asterisk bullets (*, +) with hyphens (-)
Convert Setext headers (===, ---) to ATX headers (#, ##)
Add blank lines before and after headers
Add blank lines before and after code block fences
Remove backticks in #file: references: use #file:path not `#file:path`
Remove trailing punctuation after #file: references or add space
Add language identifier to all fenced code blocks (use plaintext when language is unknown)
Increase outer fence length for nested code blocks to be greater than inner fence length
Convert ordered lists for non-sequential items to unordered hyphen lists
Use present tense and imperative mood in Markdown prose: 'Run the command' not 'You should run'
Use sentence case only for headers (capitalize first word + proper nouns, lowercase articles, prepositions, conjunctions)
Use ATX-style headers only (#, ##, ###); never use Setext style (===, ---)
Maintain sequential header hierarchy without skipping levels: ######
Always use hyphens (-) for bullet points; never asterisks (*) or plus signs (+)
Indent nested lists with exactly two spaces
Use ordered lists (1., 2., 3.) only when sequence matters
Use sentence case for bold labels that start list items
Always use fenced code blocks ( ); never use indented code blocks
Do not wrap #file: or #folder: context tokens in backticks
Do not place punctuation immediately after #file: or #folder: tokens
Never use file: URI scheme (e.g., file:///path/to/doc.md) as these always force auto-loading
Use standard Markdown links for URLs only, not for local workspace files
Use #tool: syntax only for VS Code Copilot Cha...

Files:

  • docs/contributing.md
.github/**/*.yml

⚙️ CodeRabbit configuration file

.github/**/*.yml: Review for:

  • Security: No secrets in workflows, proper permissions
  • Efficiency: Optimize CI/CD performance, avoid redundant builds
  • Dependencies: Keep actions and versions current
  • Error handling: Proper failure scenarios and notifications

Files:

  • .github/workflows/deploy-package-github.yml
  • .github/workflows/deploy-package-nuget.yml
🧠 Learnings (22)
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.md : Document version-specific features appropriately

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.md : Provide migration guidance for breaking changes in documentation

Applied to files:

  • docs/contributing.md
📚 Learning: 2026-01-01T06:10:39.665Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: src/AGENTS.md:0-0
Timestamp: 2026-01-01T06:10:39.665Z
Learning: Applies to src/**/MigrationGuide.V3.md : Update `MigrationGuide.V3.md` with migration notes and bridges when behavior changes

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Ensure documentation site builds successfully in the CI/CD pipeline

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.{md,html} : Verify all internal and external links work in documentation

Applied to files:

  • docs/contributing.md
📚 Learning: 2026-01-03T07:35:32.539Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/markdown.instructions.md:0-0
Timestamp: 2026-01-03T07:35:32.539Z
Learning: Applies to {AGENTS.md,**/instructions/*.md,*.instructions.md} : Replace `#file:` references with plain-text path mentions in entry point files (AGENTS.md, root instruction files) to prevent cascading context bloat

Applied to files:

  • docs/contributing.md
📚 Learning: 2026-01-03T00:10:34.748Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/skills.instructions.md:0-0
Timestamp: 2026-01-03T00:10:34.748Z
Learning: Applies to **/.github/skills/**/SKILL.md : Skills should use `#file:` and `#tool:` syntax for file and tool references according to markdown.instructions.md guidelines

Applied to files:

  • docs/contributing.md
📚 Learning: 2026-01-03T00:10:34.748Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/skills.instructions.md:0-0
Timestamp: 2026-01-03T00:10:34.748Z
Learning: Applies to **/.github/skills/**/SKILL.md : Skill files must include workflow sections in the following order: Title and introduction (H1), When to use this skill, Required tools, Workflow (numbered sequential steps), Completion criteria or quality standards, Self-healing (for maintenance skills), About maintenance

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.{md,html} : Check for typos and formatting consistency in documentation changes

Applied to files:

  • docs/contributing.md
📚 Learning: 2026-01-03T07:35:32.539Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/markdown.instructions.md:0-0
Timestamp: 2026-01-03T07:35:32.539Z
Learning: Verify all internal Markdown links resolve to existing files

Applied to files:

  • docs/contributing.md
📚 Learning: 2026-01-03T00:10:34.748Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/skills.instructions.md:0-0
Timestamp: 2026-01-03T00:10:34.748Z
Learning: Applies to **/.github/skills/**/SKILL.md : Skill workflow steps must be numbered sequentially with substeps clearly delineated and logically organized for agent execution

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.{md,html} : Maintain accuracy of mathematical formulas and calculations in documentation

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-12-08T10:38:10.035Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/docs.instructions.md:0-0
Timestamp: 2025-12-08T10:38:10.035Z
Learning: Applies to docs/**/*.{md,yml,yaml} : Maintain backward compatibility in examples where possible

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-09-28T22:37:53.272Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1406
File: .github/copilot-instructions.md:37-55
Timestamp: 2025-09-28T22:37:53.272Z
Learning: For the Stock Indicators repository: Use double for performance in iterative indicator calculations, then promote to decimal when exposing price-sensitive or monetary results that require trading accuracy. The canonical numeric precision policy is documented in .github/instructions/source-code-completion.instructions.md and referenced in spec-kit integration guide.

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-09-02T02:01:48.007Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1384
File: tests/indicators/s-z/Tsi/Tsi.Tests.cs:14-14
Timestamp: 2025-09-02T02:01:48.007Z
Learning: The Stock.Indicators repository uses centralized package management via tests\Directory.Packages.props to define MSTest package versions across all test projects, currently using MSTest.TestAdapter and MSTest.TestFramework version 3.10.3.

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-09-30T22:14:21.695Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1446
File: .github/workflows/test-integration.yml:3-8
Timestamp: 2025-09-30T22:14:21.695Z
Learning: For the Stock.Indicators repository, integration tests in `.github/workflows/test-integration.yml` are intentionally not run on pull requests when the test suite is minimal (e.g., only one test). The maintainer prefers to add the pull_request trigger back when integration tests become more prevalent. This is a library package not expected to have extensive integration testing.

Applied to files:

  • docs/contributing.md
  • .github/workflows/deploy-package-github.yml
📚 Learning: 2026-01-03T07:34:40.247Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-03T07:34:40.247Z
Learning: Applies to **/Indicators.csproj : Multi-target .NET framework versions: net10.0, net9.0, and net8.0 with analyzers enabled for strict code quality

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-10-27T21:10:12.886Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1627
File: src/m-r/ParabolicSar/ParabolicSar.StreamHub.cs:12-12
Timestamp: 2025-10-27T21:10:12.886Z
Learning: Inline comments (e.g., "// State variables") used for organizational purposes within classes are acceptable in the Stock.Indicators codebase. The Roslynator RCS1181 diagnostic for converting comments to documentation comments should be suppressed, as it's considered unnecessary noise.

Applied to files:

  • docs/contributing.md
📚 Learning: 2026-01-06T06:43:47.544Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1880
File: docs/indicators/Beta.md:69-69
Timestamp: 2026-01-06T06:43:47.544Z
Learning: The repository's docs/.markdownlint-cli2.jsonc config permits the listed HTML elements for MD033 in Markdown files. For any Markdown under docs (e.g., docs/indicators/Beta.md), verify that any HTML elements used are within the allowed list. If an element is used that's not in the allowed list, flag it for removal or adjust the config accordingly.

Applied to files:

  • docs/contributing.md
📚 Learning: 2025-10-01T07:32:55.702Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/performance-testing.instructions.md:0-0
Timestamp: 2025-10-01T07:32:55.702Z
Learning: Applies to .github/workflows/test-performance.yml : The test-performance.yml workflow should build in Release, run the full benchmark suite, upload artifacts, publish summaries, and optionally run the regression detection step

Applied to files:

  • .github/workflows/deploy-package-github.yml
  • .github/workflows/deploy-package-nuget.yml
📚 Learning: 2025-11-12T00:30:31.400Z
Learnt from: DaveSkender
Repo: DaveSkender/Stock.Indicators PR: 1734
File: .github/workflows/test-indicators-matrix.yml:38-51
Timestamp: 2025-11-12T00:30:31.400Z
Learning: In .github/workflows/test-indicators-matrix.yml, the workflow always requires .NET 10 to build and run test projects. The "legacy sut" .NET SDK installation (e.g., 6.0.x) is only for multi-targeting support, and the TARGET_FRAMEWORK environment variable controls which framework version tests actually run against using the `--property:TestFramework` parameter.

Applied to files:

  • .github/workflows/deploy-package-github.yml
  • .github/workflows/deploy-package-nuget.yml
📚 Learning: 2026-01-03T07:35:32.539Z
Learnt from: CR
Repo: DaveSkender/Stock.Indicators PR: 0
File: .github/instructions/markdown.instructions.md:0-0
Timestamp: 2026-01-03T07:35:32.539Z
Learning: Applies to **/*.{md,markdown} : Use GitHub alert blocks sparingly for critical execution warnings: `> [!NOTE]`, `> [!TIP]`, `> [!IMPORTANT]`, `> [!WARNING]`, `> [!CAUTION]`

Applied to files:

  • .github/workflows/deploy-package-github.yml
🔇 Additional comments (6)
docs/contributing.md (2)

197-296: Excellent versioning documentation update.

The comprehensive documentation of GitVersion-based versioning with branch-specific behaviors, deployment workflows, and practical examples significantly improves clarity for contributors. The structured approach with tables and code examples makes the versioning process transparent and actionable.


293-295: All referenced files exist and links resolve correctly. No issues found.

.github/workflows/deploy-package-github.yml (3)

84-103: GitVersion exports MajorMinorPatch correctly via jq parsing.

The $MajorMinorPatch variable referenced at line 98 is correctly exported by the GitVersion output parsing at line 89. The jq command to_entries[] | "\(.key)=\(.value)" exports all GitVersion JSON output variables to $GITHUB_ENV, including the standard MajorMinorPatch variable (e.g., "3.0.0"). The gitversion.yml configuration is properly defined and the variable is available for subsequent steps.


131-131: No action needed. actions/upload-artifact@v6 and actions/download-artifact@v7 are fully compatible—both use the v4+ artifact backend, and version matching between major releases is not required as long as both remain on v4 or later.


240-248: No action needed—API endpoint is correct.

The repository is user-owned by DaveSkender, so getAllPackageVersionsForPackageOwnedByUser with the username parameter is the correct API endpoint. No change is required.

.github/workflows/deploy-package-nuget.yml (1)

168-173: NuGet OIDC login action is correctly configured.

The NuGet/login@v1 action is official and properly used. The user input parameter correctly references the NUGET_USER secret, and the workflow has the required id-token: write permission for OIDC authentication. Ensure the repository has trusted publishing configured in NuGet.org settings.

Updated version format in CI deployment workflow.

Signed-off-by: Dave Skender <[email protected]>
@DaveSkender DaveSkender merged commit f165c8e into v3 Jan 10, 2026
5 of 6 checks passed
@DaveSkender DaveSkender deleted the fix-deployer branch January 10, 2026 06:14
JGronholz added a commit to JGronholz/Stock.Indicators that referenced this pull request Jan 10, 2026
commit 98415b5
Author: JGronholz <[email protected]>
Date:   Sat Jan 10 13:03:36 2026 -0600

    Update ReusableObserver.cs

commit 7e271df
Author: JGronholz <[email protected]>
Date:   Sat Jan 10 12:37:17 2026 -0600

    Make ReusableObserver generic

commit b7900e2
Author: JGronholz <[email protected]>
Date:   Sat Jan 10 12:19:57 2026 -0600

    Update ReusableObserver.cs

commit 5eff832
Merge: 37acf0d 52b6378
Author: JGronholz <[email protected]>
Date:   Sat Jan 10 10:58:43 2026 -0600

    Merge pull request #7 from JGronholz/copilot/add-xml-documentation-streamhub

    docs: Add XML documentation to ReusableObserver

commit 52b6378
Author: copilot-swe-agent[bot] <[email protected]>
Date:   Sat Jan 10 16:52:10 2026 +0000

    Add comprehensive XML documentation to ReusableObserver

    - Add XML docs for IsSubscribed property with thread-safety notes
    - Add XML docs for constructor with parameter descriptions
    - Add null validation for required isSubscribed parameter
    - Add XML docs for all public methods (OnError, OnCompleted, Unsubscribe, OnAdd, OnRebuild, OnPrune, Reinitialize, Rebuild overloads)
    - Add test for ArgumentNullException validation

    Co-authored-by: JGronholz <[email protected]>

commit c2632b4
Author: copilot-swe-agent[bot] <[email protected]>
Date:   Sat Jan 10 16:44:03 2026 +0000

    Initial plan

commit 37acf0d
Author: JGronholz <[email protected]>
Date:   Sat Jan 10 10:27:47 2026 -0600

    Update ReusableObserver.cs

commit 938d7d2
Author: JGronholz <[email protected]>
Date:   Sat Jan 10 10:17:51 2026 -0600

    Update ReusableObserver.cs

commit 252a668
Author: JGronholz <[email protected]>
Date:   Sat Jan 10 10:15:40 2026 -0600

    Update ReusableObserver.cs

commit 608d471
Author: JGronholz <[email protected]>
Date:   Sat Jan 10 10:15:08 2026 -0600

    Update ReusableObserver.cs

commit ccef491
Author: JGronholz <[email protected]>
Date:   Sat Jan 10 09:23:06 2026 -0600

    Create ReusableObserver.cs

commit a277198
Author: Dave Skender <[email protected]>
Date:   Sat Jan 10 05:07:27 2026 -0500

    feat: Add VitePress docs site (new) (DaveSkender#1739)

    Signed-off-by: Dave Skender <[email protected]>
    Signed-off-by: GitHub <[email protected]>
    Co-authored-by: copilot-swe-agent[bot] <[email protected]>
    Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

commit f165c8e
Author: Dave Skender <[email protected]>
Date:   Sat Jan 10 01:14:26 2026 -0500

    ci: Fix publish versioning (DaveSkender#1890)

    Signed-off-by: Dave Skender <[email protected]>
    Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

commit cdf9131
Author: Copilot <[email protected]>
Date:   Thu Jan 8 23:41:19 2026 -0500

    fix: Prevent dev version reset when preview tags are added (DaveSkender#1887)

    Co-authored-by: copilot-swe-agent[bot] <[email protected]>
    Co-authored-by: DaveSkender <[email protected]>
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Feb 15, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

1 participant