Skip to content

fix(helm): deploy using helm chart#83

Merged
avivhalfon merged 9 commits intomainfrom
ah/TLP-1189/helm-chart-new-deployment
Jan 13, 2026
Merged

fix(helm): deploy using helm chart#83
avivhalfon merged 9 commits intomainfrom
ah/TLP-1189/helm-chart-new-deployment

Conversation

@avivhalfon
Copy link
Contributor

@avivhalfon avivhalfon commented Jan 7, 2026

Important

Enhances CI/CD pipeline with centralized version extraction and Helm chart deployment, and fixes database username retrieval bug.

  • CI/CD Enhancements:
    • Centralizes version, chart name, and RC flag extraction in .github/workflows/docker.yml for build, publish, and deploy steps.
    • Uses dynamic, environment-driven Docker image tags (version, short SHA, arch) in docker.yml.
    • Adds dependencies on version extraction for manifest creation, publish, and deploy jobs.
    • Conditionally patches Helm chart version for release candidates in push-helm-chart job.
  • Bug Fixes:
    • Changes POSTGRES_DATABASE_USER to always read from a secret in deployment.yaml and migration-job.yaml.
    • Adds usernameKey to values.yaml for secret lookup.

This description was created by Ellipsis for 7f43190. You can customize this summary. It will automatically update as commits are pushed.


Summary by CodeRabbit

  • Chores

    • CI now extracts and shares version, chart name, and RC flag across build, publish, and deploy steps.
    • Image builds use dynamic env-driven tags (version, short SHA, arch) and propagate tags through the pipeline.
    • Manifest creation, publish, and deploy depend on extraction and use APP_NAME, VERSION, and CHART_NAME.
    • Helm publishing conditionally patches the chart version for release candidates.
  • Bug Fixes

    • Database username is now always read from the configured secret; added usernameKey to values for secret lookup.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 7, 2026

📝 Walkthrough

Walkthrough

Added an extract-version job to .github/workflows/docker.yml that emits is_rc, version, and chart_name for downstream jobs; CI/CD jobs now use these env outputs for dynamic image tagging, Helm packaging, and Octopus releases. Helm templates now always source DB username from the configured secret and values.yaml gains management.database.usernameKey.

Changes

Cohort / File(s) Change summary
Workflow: CI/CD workflow
.github/workflows/docker.yml
Added extract-version job (outputs: is_rc, version, chart_name); introduced top-level envs APP_NAME, GOPRIVATE; wired needs and env propagation so downstream jobs consume VERSION, IS_RC, CHART_NAME; replaced static SHA-based tag/release logic with dynamic version/tag generation and SHORT_SHA handling.
Image build & manifest jobs
.github/.../docker.yml (build-images, create-manifests)
build-images now depends on extract-version, computes SHORT_SHA and dynamic tag list (arch-version, arch-short_sha, conditional latest); create-manifests depends on build-images and extract-version and receives VERSION/IS_RC.
Helm packaging & chart patching
helm/Chart.yaml, .github/.../docker.yml (push-helm-chart)
Extracts chart name from helm/Chart.yaml; conditionally patches helm/Chart.yaml version when IS_RC is true; packages and pushes chart using CHART_NAME and VERSION.
Version source file
.cz.yaml
Workflow parses .cz.yaml to extract version and RC status for downstream use.
Deployment (Octopus) updates
.github/.../docker.yml (deploy)
Deploy steps updated to use APP_NAME, VERSION, and CHART_NAME for Octopus release create/deploy instead of SHA-based identifiers; job dependencies updated to include extract-version.
Credentials / tag derivation adjustments
.github/.../docker.yml (various jobs)
Removed some GHCR login duplications; replaced docker-metadata-based tag derivation with inline env-driven tagging logic and dynamic tag assembly steps.
Helm templates: DB credentials sourcing
helm/templates/deployment.yaml, helm/templates/migration-job.yaml, helm/values.yaml
Changed POSTGRES_DATABASE_USER to always use secretKeyRef (reads existingSecret and new usernameKey); added management.database.usernameKey: "username" to values.yaml; removed conditional ConfigMap/direct-user branches.

Sequence Diagram(s)

sequenceDiagram
    participant Trigger as GitHub Actions
    participant Extract as extract-version job
    participant Repo as Repository (.cz.yaml, helm/Chart.yaml)
    participant Build as build-images job
    participant Manifests as create-manifests job
    participant PushChart as push-helm-chart job
    participant Deploy as deploy job
    participant Octopus as Octopus Server

    Trigger->>Extract: start workflow
    Extract->>Repo: read .cz.yaml (version, is_rc)
    Extract->>Repo: read helm/Chart.yaml (chart_name)
    Extract-->>Build: outputs VERSION, IS_RC, CHART_NAME
    Build->>Build: compute SHORT_SHA, tag list, build images
    Build-->>Manifests: artifacts + VERSION/IS_RC
    Manifests->>PushChart: manifest creation complete
    PushChart->>Repo: patch Chart.yaml if IS_RC
    PushChart->>PushChart: package & push CHART_NAME:VERSION
    PushChart-->>Deploy: artifact info + VERSION
    Deploy->>Octopus: create release (APP_NAME, VERSION, CHART_NAME)
    Deploy->>Octopus: deploy release (VERSION)
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

"I nibbled lines of YAML so neat,
found the version tucked in a sheet,
patched a Chart and pushed with cheer,
secrets snug where usernames appear,
hopped releases onward — carrot-strewn frontier! 🥕🐇"

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'fix(helm): deploy using helm chart' directly describes the main change—updating deployment mechanisms to use Helm charts for CI/CD orchestration.
Linked Issues check ✅ Passed The PR successfully addresses the TLP-1189 objective by centralizing version extraction, standardizing environment configuration through Helm values, and enabling consistent managed deployments for staging and production.
Out of Scope Changes check ✅ Passed All changes are directly scoped to the objectives: CI/CD pipeline refactoring, Helm template updates for database credential management, and values configuration additions are all necessary for the managed deployment transition.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


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

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

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

Caution

Changes requested ❌

Reviewed everything up to f89f4b8 in 3 minutes and 0 seconds. Click for details.
  • Reviewed 96 lines of code in 1 files
  • Skipped 0 files when reviewing.
  • Skipped posting 8 draft comments. View those below.
  • Modify your settings and rules to customize what types of comments Ellipsis leaves. And don't forget to react with 👍 or 👎 to teach Ellipsis.
1. .github/workflows/docker.yml:163
  • Draft comment:
    Typo: Replace "Concant" with "Concatenate" in the comment (e.g. in the release candidate check).
  • Reason this comment was not posted:
    Decided after close inspection that this draft comment was likely wrong and/or not actionable: usefulness confidence = 35% vs. threshold = 50% This is a straightforward typo fix suggestion. The comment is about code that was changed in this diff (new code added). However, I need to consider the rules: "Do NOT comment unless there is clearly a code change required" and "Do NOT make comments that are obvious or unimportant." A typo in a comment is not a code change that affects functionality - it's purely cosmetic. The rules emphasize not making obvious or unimportant comments. While fixing typos is generally good practice, this is a very minor issue in a comment (not even in actual code). The rules seem to prioritize functional issues over cosmetic ones. While typos in comments are worth fixing for code quality, the rules explicitly state not to make comments that are "obvious or unimportant." A spelling error in a comment doesn't affect functionality and could be considered unimportant. However, code quality improvements are mentioned as acceptable if "actionable and clear," which this is. The rules do say "Comments that suggest code quality refactors are good! But only if they are actionable and clear." This typo fix is both actionable and clear. However, it's debatable whether a typo in a comment rises to the level of importance warranted for a PR comment, especially given the emphasis on not making "obvious or unimportant" comments. This is a borderline case. The typo fix is actionable and clear, and it's about changed code. However, it's a very minor cosmetic issue in a comment that doesn't affect functionality. Given the rules' emphasis on avoiding unimportant comments and the instruction to err on the side of deleting comments when unsure, I'll give this a moderate-low score.
2. .github/workflows/docker.yml:172
  • Draft comment:
    Typo: Update "Concant RC suffix if provided" to "Concatenate RC suffix if provided".
  • Reason this comment was not posted:
    Decided after close inspection that this draft comment was likely wrong and/or not actionable: usefulness confidence = 20% vs. threshold = 50% This is a comment about fixing a typo in a code comment (not in actual code logic). While the typo is real, I need to consider the rules: "Do NOT comment unless there is clearly a code change required" and "Do NOT make comments that are obvious or unimportant." A typo in a comment is not a code change that affects functionality. It's a minor documentation/comment quality issue. The rules emphasize not making obvious or unimportant comments, and fixing typos in comments could be considered unimportant since it doesn't affect the actual functionality of the code. However, the rules also say "Comments that suggest code quality refactors are good! But only if they are actionable and clear." This is actionable and clear, but it's debatable whether a typo fix counts as a "code quality refactor." While the typo is real and the fix is clear, this might fall under "obvious or unimportant" comments. The typo doesn't affect code functionality, and fixing comment typos might be considered too minor to warrant a PR comment from an automated tool. The rules emphasize only commenting when there's a clear code change required, and a typo in a comment doesn't require a code logic change. The rules do state to avoid "obvious or unimportant" comments, and a typo in a comment (not in code) is arguably unimportant since it has zero impact on functionality. While it would be nice to fix, it's the kind of minor issue that doesn't warrant blocking or cluttering a PR review. This comment should be deleted. While the typo is real, fixing typos in code comments falls under "obvious or unimportant" comments that don't require a code change affecting functionality. The rules emphasize only commenting when there's a clear code change required.
3. .github/workflows/docker.yml:205
  • Draft comment:
    Undefined variable: env.APP_NAME is used in the Octopus release creation command but isn’t defined. Use a consistent project name or define APP_NAME.
  • Reason this comment was not posted:
    Marked as duplicate.
4. .github/workflows/docker.yml:163
  • Draft comment:
    Ensure safe access: Using ${{ github.event.inputs.rc }} may error if not provided. Consider defaulting to an empty string if undefined.
  • Reason this comment was not posted:
    Decided after close inspection that this draft comment was likely wrong and/or not actionable: usefulness confidence = 10% vs. threshold = 50% The comment suggests that using ${{ github.event.inputs.rc }} may error if not provided. However, looking at the logic flow: (1) Line 164 checks if rc is non-empty, (2) Only if it's non-empty does IS_RC get set to true, (3) Line 173 checks if is_rc is true before executing line 174. So line 174 will only execute when rc is guaranteed to be non-empty. The comment appears to miss this protective logic. Additionally, in GitHub Actions, undefined inputs typically evaluate to empty strings, not errors. The comment violates the rule about not making speculative comments ("may error") when the code already has protective logic in place. I might be missing some edge case where GitHub Actions behaves differently with undefined inputs, or there could be a scenario where the conditional check fails but the variable is still accessed. However, the logic seems straightforward and protective. Even if there's an edge case I'm missing, the code already has a conditional check that should prevent accessing an undefined rc value. The comment is speculative ("may error") rather than identifying a definite issue, which violates the rules. Without strong evidence that this will actually cause an error despite the existing checks, the comment should be deleted. The comment should be deleted because the code already has protective logic (checking if rc is non-empty before using it), and the comment is speculative rather than identifying a definite issue. The existing conditional on line 173 ensures line 174 only executes when rc was provided.
5. .github/workflows/docker.yml:180
  • Draft comment:
    Parsing improvement: Instead of using grep/awk to extract the Helm chart name, consider using yq for more robust YAML parsing.
  • Reason this comment was not posted:
    Confidence changes required: 50% <= threshold 50% None
6. .github/workflows/docker.yml:236
  • Draft comment:
    Duplicate logic: The Helm chart name is extracted again in the push-helm-chart job. Consider reusing the value from the extract-version job to avoid redundancy.
  • Reason this comment was not posted:
    Confidence changes required: 50% <= threshold 50% None
7. .github/workflows/docker.yml:164
  • Draft comment:
    Typo: In the comment, "Concant RC suffix if provided" should likely be "Concatenate RC suffix if provided".
  • Reason this comment was not posted:
    Decided after close inspection that this draft comment was likely wrong and/or not actionable: usefulness confidence = 20% vs. threshold = 50% This is a comment about a typo in a code comment (not in actual code logic). The rules state that comments should only be made if there is clearly a code change required, and not to make comments that are obvious or unimportant. A typo in a comment is relatively minor and could be considered "obvious or unimportant." However, it is technically a code quality issue that could be fixed. The rules do say "Comments that suggest code quality refactors are good! But only if they are actionable and clear." This is actionable and clear - it's a simple typo fix. But is fixing a typo in a comment really important enough to warrant a review comment? The rules emphasize not making obvious or unimportant comments, and this seems to fall into that category. While this is technically a valid typo that could be fixed, it's in a comment (not code), and fixing typos in comments is generally low priority. The rules explicitly say not to make obvious or unimportant comments, and a typo in a comment could be considered unimportant since it doesn't affect functionality. Although the comment is actionable and clear, it's about a very minor issue (a typo in a comment) that doesn't affect code functionality. Given the emphasis in the rules on not making obvious or unimportant comments, this likely falls below the threshold of what should be flagged in a review. This comment should be deleted. While it correctly identifies a typo, it's a minor issue in a code comment that doesn't affect functionality and falls into the category of "obvious or unimportant" comments that the rules say to avoid.
8. .github/workflows/docker.yml:173
  • Draft comment:
    Typo: In the comment, "Concant RC suffix if provided" should likely be "Concatenate RC suffix if provided".
  • Reason this comment was not posted:
    Decided after close inspection that this draft comment was likely wrong and/or not actionable: usefulness confidence = 20% vs. threshold = 50% The comment is about a typo in a code comment. While it's technically correct, I need to consider the review rules. The rules state "Do NOT comment unless there is clearly a code change required" and "Do NOT make comments that are obvious or unimportant." A typo in a comment doesn't affect functionality - it's purely cosmetic. The rules also say to only keep comments with "STRONG EVIDENCE" that they are correct and important. While the typo is real, fixing it doesn't change behavior or improve code quality in a meaningful way. This seems like an unimportant/obvious issue that doesn't require a code change. However, code quality includes comments, and clear, correctly-spelled comments do improve maintainability. Some teams have strict standards about comment quality. The typo appears twice in the code, which might suggest it's worth fixing. While clear comments are valuable, the rules explicitly state not to make "obvious or unimportant" comments. A minor spelling error in a comment that doesn't affect understanding or functionality falls into this category. The meaning of "Concant" is still clear from context, and this is the type of minor issue that could be caught in a general cleanup pass rather than blocking a PR review. This comment should be deleted. While the typo is real, it's a minor cosmetic issue in a comment that doesn't affect code functionality or significantly impact readability. According to the rules, comments should only be kept if there's strong evidence they're important, and typo fixes in comments don't meet that threshold.

Workflow ID: wflow_iQBZaDnm0lFqxItS

You can customize Ellipsis by changing your verbosity settings, reacting with 👍 or 👎, replying to comments, or adding code review rules.

OCTOPUS_URL: ${{ secrets.OCTOPUS_URL }}
OCTOPUS_SPACE: ${{ secrets.OCTOPUS_SPACE }}
run: octopus release deploy --project hub --version=sha-${GITHUB_SHA::7} --environment staging-new --no-prompt
run: octopus release deploy --project hub --version=${{ env.VERSION }} --environment staging-new --no-prompt
Copy link
Contributor

Choose a reason for hiding this comment

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

Inconsistent project name: The release creation step uses env.APP_NAME while the staging deployment step hard-codes 'hub'. Ensure both use the same value.

Suggested change
run: octopus release deploy --project hub --version=${{ env.VERSION }} --environment staging-new --no-prompt
run: octopus release deploy --project ${{ env.APP_NAME }} --version=${{ env.VERSION }} --environment staging-new --no-prompt

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
.github/workflows/docker.yml (1)

200-209: Define the missing APP_NAME environment variable.

Line 205 references ${{ env.APP_NAME }}, but APP_NAME is never defined in the env block (lines 190-192) or elsewhere. This will cause the Octopus release create command to fail with an empty project name.

🔧 Proposed fix: Define APP_NAME

Based on line 216 where the project is hardcoded as "hub", add APP_NAME to the env block:

   env:
     VERSION: ${{ needs.extract-version.outputs.version }}
     CHART_NAME: ${{ needs.extract-version.outputs.chart_name }}
+    APP_NAME: hub

Alternatively, if APP_NAME should match CHART_NAME, use:

-        run: octopus release create --project ${{ env.APP_NAME }} \
+        run: octopus release create --project ${{ env.CHART_NAME }} \
🤖 Fix all issues with AI agents
In @.github/workflows/docker.yml:
- Around line 160-168: In the GitHub Actions step with name "Is release
candidate" and id is_rc, correct the inline comment typo by replacing "Concant
RC suffix if provided" with "Concat RC suffix if provided" so the comment reads
properly.
- Around line 169-178: The comment in the GitHub Actions step "Extract version
from .cz.yaml" contains a typo: change the inline comment "# Concant RC suffix
if provided" to "# Concat RC suffix if provided" so the wording is correct;
locate this comment in the run block that builds VERSION and update the spelling
only.
- Around line 211-216: Replace the hardcoded project name "hub" in the octopus
CLI call with the same variable used elsewhere (e.g., APP_NAME) so the run step
uses --project=${{ env.APP_NAME }}; update the deploy step that runs "octopus
release deploy --project hub --version=${{ env.VERSION }} --environment
staging-new --no-prompt" to reference the APP_NAME environment variable and
ensure APP_NAME is exported/set earlier the same way other steps use it.
- Around line 145-153: The workflow is missing workflow_dispatch inputs (so
github.event.inputs.rc is undefined) and the extract-version job lacks an
explicit permissions block; add a workflow_dispatch section at the top declaring
an rc input (e.g., rc: { description: "release candidate", required: false,
default: "false" } or boolean) so github.event.inputs.rc is defined, then in the
extract-version job (job name: extract-version) add a minimal permissions block
(for example permissions: contents: read) to restrict GITHUB_TOKEN scope, and
remove the extra space after the outputs key chart_name to make it "chart_name:
${{ steps.chartName.outputs.chart_name }}".
- Around line 185-193: The deploy job depends on the extract-version job but
extract-version is conditional (only runs for workflow_dispatch or commit
messages starting with "bump:"), so deploy can run on tag pushes and fail due to
missing outputs; fix by aligning conditions: either add the same if condition to
the deploy job (so deploy only runs when extract-version runs) or remove the if
condition from extract-version so it always runs for all triggers (including tag
pushes) and thus always produces VERSION and CHART_NAME outputs; target the jobs
named "extract-version" and "deploy" in the workflow to apply the change.
🧹 Nitpick comments (2)
.github/workflows/docker.yml (2)

154-159: Remove unnecessary full history fetch.

The fetch-depth: 0 parameter fetches the entire git history, which is unnecessary since the version is extracted directly from .cz.yaml file content, not from git tags or commit history.

⚡ Proposed optimization
     steps:
       - name: Checkout
         uses: actions/checkout@v4
-        with:
-          fetch-depth: 0

179-184: Consider using yq for consistency.

The chart name extraction uses grep and awk, while the version extraction uses yq. For consistency and better YAML parsing, consider using yq here as well.

♻️ Proposed refactor for consistency
       - name: Helm Chart Name
         id: chartName
         run: |
-          CHART_NAME=$(grep '^name:' helm/Chart.yaml |  awk '{print $2}')
+          CHART_NAME=$(yq '.name' helm/Chart.yaml)
           echo "chart_name=$CHART_NAME" >> $GITHUB_OUTPUT
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 78f94b7 and f89f4b8.

📒 Files selected for processing (1)
  • .github/workflows/docker.yml
🧰 Additional context used
🪛 actionlint (1.7.9)
.github/workflows/docker.yml

162-162: property "rc" is not defined in object type {}

(expression)


171-171: property "rc" is not defined in object type {}

(expression)

🪛 GitHub Check: CodeQL
.github/workflows/docker.yml

[warning] 146-185: Workflow does not contain permissions
Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: build
  • GitHub Check: Analyze (rust)

Comment on lines +160 to +168
- name: Is release candidate
id: is_rc
run: |
IS_RC=false
if [[ -n "${{ github.event.inputs.rc }}" ]]; then # Concant RC suffix if provided
IS_RC=true
fi
echo "is_rc=$IS_RC" >> "$GITHUB_OUTPUT"

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Fix typo in comment.

Line 164: "Concant" should be "Concat".

📝 Proposed fix
       - name: Is release candidate
         id: is_rc
         run: |
           IS_RC=false
-          if [[ -n "${{ github.event.inputs.rc }}" ]]; then # Concant RC suffix if provided
+          if [[ -n "${{ github.event.inputs.rc }}" ]]; then # Concat RC suffix if provided
             IS_RC=true
           fi
           echo "is_rc=$IS_RC" >> "$GITHUB_OUTPUT"
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- name: Is release candidate
id: is_rc
run: |
IS_RC=false
if [[ -n "${{ github.event.inputs.rc }}" ]]; then # Concant RC suffix if provided
IS_RC=true
fi
echo "is_rc=$IS_RC" >> "$GITHUB_OUTPUT"
- name: Is release candidate
id: is_rc
run: |
IS_RC=false
if [[ -n "${{ github.event.inputs.rc }}" ]]; then # Concat RC suffix if provided
IS_RC=true
fi
echo "is_rc=$IS_RC" >> "$GITHUB_OUTPUT"
🧰 Tools
🪛 actionlint (1.7.9)

162-162: property "rc" is not defined in object type {}

(expression)

🤖 Prompt for AI Agents
In @.github/workflows/docker.yml around lines 160 - 168, In the GitHub Actions
step with name "Is release candidate" and id is_rc, correct the inline comment
typo by replacing "Concant RC suffix if provided" with "Concat RC suffix if
provided" so the comment reads properly.

Comment on lines +169 to +178
- name: Extract version from .cz.yaml
id: version
run: |
VERSION=$(yq '.commitizen.version' .cz.yaml)
if [[ ${{ steps.is_rc.outputs.is_rc }} == "true" ]]; then # Concant RC suffix if provided
VERSION="${VERSION}-${{ github.event.inputs.rc }}"
fi

echo "version=$VERSION" >> "$GITHUB_OUTPUT"

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Fix typo in comment.

Line 173: "Concant" should be "Concat".

📝 Proposed fix
       - name: Extract version from .cz.yaml
         id: version
         run: |
           VERSION=$(yq '.commitizen.version' .cz.yaml)
-          if [[ ${{ steps.is_rc.outputs.is_rc }} == "true" ]]; then # Concant RC suffix if provided
+          if [[ ${{ steps.is_rc.outputs.is_rc }} == "true" ]]; then # Concat RC suffix if provided
             VERSION="${VERSION}-${{ github.event.inputs.rc }}"
           fi
 
           echo "version=$VERSION" >> "$GITHUB_OUTPUT"
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- name: Extract version from .cz.yaml
id: version
run: |
VERSION=$(yq '.commitizen.version' .cz.yaml)
if [[ ${{ steps.is_rc.outputs.is_rc }} == "true" ]]; then # Concant RC suffix if provided
VERSION="${VERSION}-${{ github.event.inputs.rc }}"
fi
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
- name: Extract version from .cz.yaml
id: version
run: |
VERSION=$(yq '.commitizen.version' .cz.yaml)
if [[ ${{ steps.is_rc.outputs.is_rc }} == "true" ]]; then # Concat RC suffix if provided
VERSION="${VERSION}-${{ github.event.inputs.rc }}"
fi
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
🧰 Tools
🪛 actionlint (1.7.9)

171-171: property "rc" is not defined in object type {}

(expression)

🤖 Prompt for AI Agents
In @.github/workflows/docker.yml around lines 169 - 178, The comment in the
GitHub Actions step "Extract version from .cz.yaml" contains a typo: change the
inline comment "# Concant RC suffix if provided" to "# Concat RC suffix if
provided" so the wording is correct; locate this comment in the run block that
builds VERSION and update the spelling only.

Comment on lines 185 to +193
deploy:
name: Deploy to Traceloop
runs-on: ubuntu-latest
needs: create-manifests
needs: [extract-version, create-manifests, push-helm-chart]

env:
VERSION: ${{ needs.extract-version.outputs.version }}
CHART_NAME: ${{ needs.extract-version.outputs.chart_name }}

Copy link
Contributor

@coderabbitai coderabbitai bot Jan 7, 2026

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Fix conditional dependency mismatch.

The deploy job depends on extract-version, but extract-version only runs when github.event_name == 'workflow_dispatch' || startsWith(github.event.head_commit.message, 'bump:') (line 147). However, the workflow can also be triggered by pushing tags (push: tags: - "v*"). In this case, extract-version won't run, causing deploy to fail due to missing outputs.

🔧 Proposed fix: Align conditions

Either:

  1. Add the same condition to the deploy job:
 deploy:
   name: Deploy to Traceloop
   runs-on: ubuntu-latest
+  if: github.event_name == 'workflow_dispatch' || startsWith(github.event.head_commit.message, 'bump:')
   needs: [extract-version, create-manifests, push-helm-chart]

OR

  1. Remove the condition from extract-version to let it run on all triggers:
 extract-version:
   name: Extract Version
-  if: github.event_name == 'workflow_dispatch' || startsWith(github.event.head_commit.message, 'bump:')
   runs-on: ubuntu-latest
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
deploy:
name: Deploy to Traceloop
runs-on: ubuntu-latest
needs: create-manifests
needs: [extract-version, create-manifests, push-helm-chart]
env:
VERSION: ${{ needs.extract-version.outputs.version }}
CHART_NAME: ${{ needs.extract-version.outputs.chart_name }}
deploy:
name: Deploy to Traceloop
runs-on: ubuntu-latest
if: github.event_name == 'workflow_dispatch' || startsWith(github.event.head_commit.message, 'bump:')
needs: [extract-version, create-manifests, push-helm-chart]
env:
VERSION: ${{ needs.extract-version.outputs.version }}
CHART_NAME: ${{ needs.extract-version.outputs.chart_name }}
🤖 Prompt for AI Agents
In @.github/workflows/docker.yml around lines 185 - 193, The deploy job depends
on the extract-version job but extract-version is conditional (only runs for
workflow_dispatch or commit messages starting with "bump:"), so deploy can run
on tag pushes and fail due to missing outputs; fix by aligning conditions:
either add the same if condition to the deploy job (so deploy only runs when
extract-version runs) or remove the if condition from extract-version so it
always runs for all triggers (including tag pushes) and thus always produces
VERSION and CHART_NAME outputs; target the jobs named "extract-version" and
"deploy" in the workflow to apply the change.

Copy link
Contributor

Choose a reason for hiding this comment

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

@avivhalfon just make sure this is the trigger we have in all other repo

Copy link
Contributor

Choose a reason for hiding this comment

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

Seems like the humans are having a chat. I'll hop back into my burrow for now. If you need me again, just tag @coderabbitai in a new comment, and I'll come hopping out!

@avivhalfon avivhalfon changed the title fix(action): using version for deployments fix(helm): deploy using helm chart Jan 8, 2026
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/docker.yml:
- Around line 210-214: The workflow is using ${{ env.APP_NAME }} in the octopus
release create command but APP_NAME is not defined in the env block; add
APP_NAME: hub to the job/workflow env block so APP_NAME is defined (match the
existing hardcoded project value “hub”) ensuring the octopus release create
--project ${{ env.APP_NAME }} invocation succeeds.
- Around line 174-182: The workflow step "Extract version from .cz.yaml" calls
yq but the runner doesn't include it; add a prior job step to install yq (for
example using apt, snap, or pip: e.g., apt-get update && apt-get install -y jq
&& pip3 install yq / or use mikefarah/yq binary) before the step that sets
VERSION (which reads .cz.yaml and references steps.is_rc.outputs.is_rc and
github.event.inputs.rc) so the yq binary is available when executing that step.
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between f89f4b8 and cc9deae.

📒 Files selected for processing (1)
  • .github/workflows/docker.yml
🧰 Additional context used
🪛 GitHub Check: CodeQL
.github/workflows/docker.yml

[warning] 151-190: Workflow does not contain permissions
Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: build
  • GitHub Check: Analyze (rust)

Comment on lines +152 to +189
if: github.event_name == 'workflow_dispatch' || startsWith(github.event.head_commit.message, 'bump:')
runs-on: ubuntu-latest
outputs:
is_rc: ${{ steps.is_rc.outputs.is_rc }}
version: ${{ steps.version.outputs.version }}
chart_name: ${{ steps.chartName.outputs.chart_name }}

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

- name: Is release candidate
id: is_rc
run: |
IS_RC=false
if [[ -n "${{ github.event.inputs.rc }}" ]]; then # Concant RC suffix if provided
IS_RC=true
fi
echo "is_rc=$IS_RC" >> "$GITHUB_OUTPUT"

- name: Extract version from .cz.yaml
id: version
run: |
VERSION=$(yq '.commitizen.version' .cz.yaml)
if [[ ${{ steps.is_rc.outputs.is_rc }} == "true" ]]; then # Concant RC suffix if provided
VERSION="${VERSION}-${{ github.event.inputs.rc }}"
fi

echo "version=$VERSION" >> "$GITHUB_OUTPUT"

- name: Helm Chart Name
id: chartName
run: |
CHART_NAME=$(grep '^name:' helm/Chart.yaml | awk '{print $2}')
echo "chart_name=$CHART_NAME" >> $GITHUB_OUTPUT

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Critical: extract-version won't run on tag pushes, breaking deployments.

The condition on line 152 restricts this job to workflow_dispatch or bump: commits, but the workflow is also triggered by tag pushes (lines 4-6). Since the deploy job depends on extract-version, tag-based deployments will fail because extract-version won't execute.

Additionally:

  • Lines 169, 178: Typo "Concant" should be "Concat"
  • Missing permissions block (as flagged by CodeQL)
🔧 Proposed fixes

Fix 1: Update the condition to include tag pushes

-    if: github.event_name == 'workflow_dispatch' || startsWith(github.event.head_commit.message, 'bump:')
+    if: github.event_name == 'workflow_dispatch' || startsWith(github.event.head_commit.message, 'bump:') || startsWith(github.ref, 'refs/tags/')

Fix 2: Correct typos and add permissions block

     name: Extract Version
-    if: github.event_name == 'workflow_dispatch' || startsWith(github.event.head_commit.message, 'bump:')
+    if: github.event_name == 'workflow_dispatch' || startsWith(github.event.head_commit.message, 'bump:') || startsWith(github.ref, 'refs/tags/')
     runs-on: ubuntu-latest
+    permissions:
+      contents: read
     outputs:
       is_rc: ${{ steps.is_rc.outputs.is_rc }}
       version: ${{ steps.version.outputs.version }}
       chart_name:  ${{ steps.chartName.outputs.chart_name }}
 
     steps:
       - name: Checkout
         uses: actions/checkout@v4
         with:
           fetch-depth: 0
 
       - name: Is release candidate
         id: is_rc
         run: |
           IS_RC=false
-          if [[ -n "${{ github.event.inputs.rc }}" ]]; then # Concant RC suffix if provided
+          if [[ -n "${{ github.event.inputs.rc }}" ]]; then # Concat RC suffix if provided
             IS_RC=true
           fi
           echo "is_rc=$IS_RC" >> "$GITHUB_OUTPUT"
 
       - name: Extract version from .cz.yaml
         id: version
         run: |
           VERSION=$(yq '.commitizen.version' .cz.yaml)
-          if [[ ${{ steps.is_rc.outputs.is_rc }} == "true" ]]; then # Concant RC suffix if provided
+          if [[ ${{ steps.is_rc.outputs.is_rc }} == "true" ]]; then # Concat RC suffix if provided
             VERSION="${VERSION}-${{ github.event.inputs.rc }}"
           fi
 
           echo "version=$VERSION" >> "$GITHUB_OUTPUT"

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

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

Important

Looks good to me! 👍

Reviewed 14ca12f in 42 seconds. Click for details.
  • Reviewed 15 lines of code in 1 files
  • Skipped 0 files when reviewing.
  • Skipped posting 1 draft comments. View those below.
  • Modify your settings and rules to customize what types of comments Ellipsis leaves. And don't forget to react with 👍 or 👎 to teach Ellipsis.
1. .github/workflows/docker.yml:14
  • Draft comment:
    Global env block added with GOPRIVATE and APP_NAME. These centralized settings are useful if they’re required across all jobs; ensure their scope matches usage and consider moving them to job-level if only needed for specific tasks.
  • Reason this comment was not posted:
    Confidence changes required: 0% <= threshold 50% None

Workflow ID: wflow_CPUuDPHwfGia86TU

You can customize Ellipsis by changing your verbosity settings, reacting with 👍 or 👎, replying to comments, or adding code review rules.

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

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

Important

Looks good to me! 👍

Reviewed 28cad25 in 46 seconds. Click for details.
  • Reviewed 57 lines of code in 1 files
  • Skipped 0 files when reviewing.
  • Skipped posting 4 draft comments. View those below.
  • Modify your settings and rules to customize what types of comments Ellipsis leaves. And don't forget to react with 👍 or 👎 to teach Ellipsis.
1. .github/workflows/docker.yml:227
  • Draft comment:
    Adding 'extract-version' to the needs array ensures the version outputs are available in this job. This centralizes version extraction and improves dependency tracking.
  • Reason this comment was not posted:
    Comment did not seem useful. Confidence is useful = 0% <= threshold 50% This comment is purely informative, explaining the benefits of a change without suggesting any improvements or asking for clarification. It doesn't align with the rules for useful comments.
2. .github/workflows/docker.yml:234
  • Draft comment:
    The newly added env block cleanly provides VERSION, IS_RC, and CHART_NAME from the extract-version job. Ensure these outputs always match the chart values you expect.
  • Reason this comment was not posted:
    Comment did not seem useful. Confidence is useful = 0% <= threshold 50% This comment is asking the author to ensure that the outputs match expected values, which is a form of asking for confirmation or verification. It doesn't provide a specific suggestion or point out a specific issue with the code. Therefore, it violates the rule against asking the author to ensure behavior is intended.
3. .github/workflows/docker.yml:239
  • Draft comment:
    Removal of the redundant 'Get Chart Version' and 'Get Chart Name' steps helps avoid duplication. Confirm the extract-version job reliably produces these outputs to avoid inconsistencies.
  • Reason this comment was not posted:
    Comment did not seem useful. Confidence is useful = 0% <= threshold 50% This comment is asking the PR author to confirm the reliability of a job, which is not specific enough to be actionable. It doesn't provide a specific suggestion or point out a clear issue with the code.
4. .github/workflows/docker.yml:249
  • Draft comment:
    The added step to patch Chart.yaml for release candidates is a neat solution. Verify that the yq command syntax (and version) correctly updates the version and that the resulting packaged file name matches the expected pattern.
  • Reason this comment was not posted:
    Comment did not seem useful. Confidence is useful = 0% <= threshold 50% This comment is asking the PR author to verify the syntax and version of a command, which falls under asking the author to double-check things. This violates the rules.

Workflow ID: wflow_HZKqubTLzQ24Gh1c

You can customize Ellipsis by changing your verbosity settings, reacting with 👍 or 👎, replying to comments, or adding code review rules.

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/docker.yml:
- Around line 169-176: The comment in the "Is release candidate" step (id:
is_rc) contains a typo "Concant RC suffix if provided"; update that comment to
read "Concat RC suffix if provided" to correct the spelling while leaving the
surrounding shell logic (IS_RC assignment and GITHUB_OUTPUT echo) unchanged.
- Around line 178-186: The "Extract version from .cz.yaml" step has a typo
("Concant" → "Concat") and lacks validation for the yq call; update the comment
to "Concat RC suffix if provided" and add checks before using yq: verify the
file .cz.yaml exists and that yq returns a non-empty value for
'.commitizen.version' (the value assigned to VERSION from the yq command), and
if missing or malformed emit a clear error via echo and exit non‑zero; keep the
existing logic that appends "-${{ github.event.inputs.rc }}" when
steps.is_rc.outputs.is_rc == "true" and still write the final "version=$VERSION"
to $GITHUB_OUTPUT only after validation succeeds.
- Around line 154-162: The extract-version job is gated by an if condition that
only allows workflow_dispatch or commit messages starting with "bump:", which
skips this job for tag push triggers (v*), causing downstream jobs (deploy and
push-helm-chart) to fail and also lacks explicit permissions; update the if
condition on the extract-version job so it runs for tag push triggers as well
(or remove the restrictive if to run on all triggers that start the workflow),
ensure its outputs (is_rc, version, chart_name) are always produced for
dependent jobs, and add explicit permissions (minimum required) for the
extract-version job in the workflow YAML.
🧹 Nitpick comments (2)
.github/workflows/docker.yml (2)

164-167: Consider removing fetch-depth: 0 for efficiency.

The extract-version job only reads files from the current commit (.cz.yaml and helm/Chart.yaml). Fetching the entire Git history (fetch-depth: 0) is unnecessary and slows down the checkout, especially for large repositories.

⚡ Proposed optimization
      - name: Checkout
        uses: actions/checkout@v4
-       with:
-         fetch-depth: 0

188-192: Prefer yq for consistency and robustness.

The chart name extraction uses grep and awk to parse helm/Chart.yaml, while the previous step uses yq for .cz.yaml. Using yq consistently would be more maintainable and handle edge cases better.

♻️ Proposed refactor
      - name: Helm Chart Name
        id: chartName
        run: |
-         CHART_NAME=$(grep '^name:' helm/Chart.yaml |  awk '{print $2}')
+         CHART_NAME=$(yq '.name' helm/Chart.yaml)
          echo "chart_name=$CHART_NAME" >> $GITHUB_OUTPUT
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between cc9deae and 28cad25.

📒 Files selected for processing (1)
  • .github/workflows/docker.yml
🧰 Additional context used
🪛 GitHub Check: CodeQL
.github/workflows/docker.yml

[warning] 155-194: Workflow does not contain permissions
Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (6)
  • GitHub Check: Build Docker Images (migrations, Dockerfile.db-based-migrations, -migrations, linux/arm64)
  • GitHub Check: Build Docker Images (hub, Dockerfile, linux/amd64)
  • GitHub Check: Build Docker Images (migrations, Dockerfile.db-based-migrations, -migrations, linux/amd64)
  • GitHub Check: Build Docker Images (hub, Dockerfile, linux/arm64)
  • GitHub Check: build
  • GitHub Check: Analyze (rust)
🔇 Additional comments (5)
.github/workflows/docker.yml (5)

14-16: LGTM! Workflow-level environment variables centralize constants.

Centralizing APP_NAME and GOPRIVATE at the workflow level improves maintainability.


197-225: Deployment commands updated correctly.

The deploy job correctly uses the extracted VERSION and CHART_NAME from the extract-version job outputs. The Octopus CLI commands are properly structured with the new variables.

However, this job inherits the critical dependency issue: if extract-version is skipped (as discussed in the earlier comment), this job will also be skipped or fail.

Ensure that the extract-version condition issue is resolved so this job receives the required outputs.


230-237: Helm chart job correctly wired to version extraction.

The push-helm-chart job properly depends on extract-version and uses its outputs for VERSION, IS_RC, and CHART_NAME.

However, this job also inherits the critical dependency issue: if extract-version is skipped due to its conditional logic, this job will fail.

Ensure that the extract-version condition issue (flagged earlier) is resolved.


254-260: Helm package and push steps look correct.

The Helm chart packaging and push commands properly use the environment variables. The generated filename pattern ${{ env.CHART_NAME }}-${{ env.VERSION }}.tgz matches what helm package produces.


249-252: The yq concern is not valid—yq is pre-installed on ubuntu-latest runners.

GitHub-hosted ubuntu-latest runners include yq pre-installed as part of the standard environment. The concern about availability is unfounded, and adding an explicit installation step introduces unnecessary overhead. The command syntax used (yq e -i) is standard and fully compatible.

No changes are needed.

Comment on lines +154 to +162
extract-version:
name: Extract Version
if: github.event_name == 'workflow_dispatch' || startsWith(github.event.head_commit.message, 'bump:')
runs-on: ubuntu-latest
outputs:
is_rc: ${{ steps.is_rc.outputs.is_rc }}
version: ${{ steps.version.outputs.version }}
chart_name: ${{ steps.chartName.outputs.chart_name }}

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Critical: Job condition misaligned with workflow triggers.

The extract-version job only runs when the event is workflow_dispatch or the commit message starts with bump:. However, the workflow is also triggered by push events with tags matching v* (lines 4-6). When triggered by a tag push, this job will be skipped, causing downstream jobs (deploy and push-helm-chart) to fail since they depend on outputs from extract-version.

Additionally, the static analysis warning is valid: this job should define explicit permissions.

🔧 Proposed fix

Update the condition to run on all workflow triggers:

  extract-version:
    name: Extract Version
-   if: github.event_name == 'workflow_dispatch' || startsWith(github.event.head_commit.message, 'bump:')
    runs-on: ubuntu-latest
+   permissions:
+     contents: read
    outputs:
      is_rc: ${{ steps.is_rc.outputs.is_rc }}
      version: ${{ steps.version.outputs.version }}
      chart_name:  ${{ steps.chartName.outputs.chart_name }}

Note: If the intent is to run this job only on specific triggers, you'll need to adjust the workflow design so that dependent jobs either have alternative logic for tag-based triggers or don't depend on this job conditionally.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
extract-version:
name: Extract Version
if: github.event_name == 'workflow_dispatch' || startsWith(github.event.head_commit.message, 'bump:')
runs-on: ubuntu-latest
outputs:
is_rc: ${{ steps.is_rc.outputs.is_rc }}
version: ${{ steps.version.outputs.version }}
chart_name: ${{ steps.chartName.outputs.chart_name }}
extract-version:
name: Extract Version
runs-on: ubuntu-latest
permissions:
contents: read
outputs:
is_rc: ${{ steps.is_rc.outputs.is_rc }}
version: ${{ steps.version.outputs.version }}
chart_name: ${{ steps.chartName.outputs.chart_name }}
🤖 Prompt for AI Agents
In @.github/workflows/docker.yml around lines 154 - 162, The extract-version job
is gated by an if condition that only allows workflow_dispatch or commit
messages starting with "bump:", which skips this job for tag push triggers (v*),
causing downstream jobs (deploy and push-helm-chart) to fail and also lacks
explicit permissions; update the if condition on the extract-version job so it
runs for tag push triggers as well (or remove the restrictive if to run on all
triggers that start the workflow), ensure its outputs (is_rc, version,
chart_name) are always produced for dependent jobs, and add explicit permissions
(minimum required) for the extract-version job in the workflow YAML.

Comment on lines +169 to +176
- name: Is release candidate
id: is_rc
run: |
IS_RC=false
if [[ -n "${{ github.event.inputs.rc }}" ]]; then # Concant RC suffix if provided
IS_RC=true
fi
echo "is_rc=$IS_RC" >> "$GITHUB_OUTPUT"
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Fix typo in comment.

Line 173: "Concant" should be "Concat".

📝 Proposed fix
          IS_RC=false
-         if [[ -n "${{ github.event.inputs.rc }}" ]]; then # Concant RC suffix if provided
+         if [[ -n "${{ github.event.inputs.rc }}" ]]; then # Concat RC suffix if provided
            IS_RC=true
          fi
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- name: Is release candidate
id: is_rc
run: |
IS_RC=false
if [[ -n "${{ github.event.inputs.rc }}" ]]; then # Concant RC suffix if provided
IS_RC=true
fi
echo "is_rc=$IS_RC" >> "$GITHUB_OUTPUT"
- name: Is release candidate
id: is_rc
run: |
IS_RC=false
if [[ -n "${{ github.event.inputs.rc }}" ]]; then # Concat RC suffix if provided
IS_RC=true
fi
echo "is_rc=$IS_RC" >> "$GITHUB_OUTPUT"
🤖 Prompt for AI Agents
In @.github/workflows/docker.yml around lines 169 - 176, The comment in the "Is
release candidate" step (id: is_rc) contains a typo "Concant RC suffix if
provided"; update that comment to read "Concat RC suffix if provided" to correct
the spelling while leaving the surrounding shell logic (IS_RC assignment and
GITHUB_OUTPUT echo) unchanged.

Comment on lines +178 to +186
- name: Extract version from .cz.yaml
id: version
run: |
VERSION=$(yq '.commitizen.version' .cz.yaml)
if [[ ${{ steps.is_rc.outputs.is_rc }} == "true" ]]; then # Concant RC suffix if provided
VERSION="${VERSION}-${{ github.event.inputs.rc }}"
fi

echo "version=$VERSION" >> "$GITHUB_OUTPUT"
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Fix typo and consider adding validation.

Line 182 contains the same typo: "Concant" should be "Concat".

Additionally, the yq command assumes .cz.yaml exists and contains the commitizen.version field. Consider adding validation to provide a clearer error message if the file is missing or malformed.

📝 Proposed fix
      - name: Extract version from .cz.yaml
        id: version
        run: |
+         if [[ ! -f .cz.yaml ]]; then
+           echo "Error: .cz.yaml not found"
+           exit 1
+         fi
          VERSION=$(yq '.commitizen.version' .cz.yaml)
-         if [[ ${{ steps.is_rc.outputs.is_rc }} == "true" ]]; then # Concant RC suffix if provided
+         if [[ "${{ steps.is_rc.outputs.is_rc }}" == "true" ]]; then # Concat RC suffix if provided
            VERSION="${VERSION}-${{ github.event.inputs.rc }}"
          fi

          echo "version=$VERSION" >> "$GITHUB_OUTPUT"
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- name: Extract version from .cz.yaml
id: version
run: |
VERSION=$(yq '.commitizen.version' .cz.yaml)
if [[ ${{ steps.is_rc.outputs.is_rc }} == "true" ]]; then # Concant RC suffix if provided
VERSION="${VERSION}-${{ github.event.inputs.rc }}"
fi
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
- name: Extract version from .cz.yaml
id: version
run: |
if [[ ! -f .cz.yaml ]]; then
echo "Error: .cz.yaml not found"
exit 1
fi
VERSION=$(yq '.commitizen.version' .cz.yaml)
if [[ "${{ steps.is_rc.outputs.is_rc }}" == "true" ]]; then # Concat RC suffix if provided
VERSION="${VERSION}-${{ github.event.inputs.rc }}"
fi
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
🤖 Prompt for AI Agents
In @.github/workflows/docker.yml around lines 178 - 186, The "Extract version
from .cz.yaml" step has a typo ("Concant" → "Concat") and lacks validation for
the yq call; update the comment to "Concat RC suffix if provided" and add checks
before using yq: verify the file .cz.yaml exists and that yq returns a non-empty
value for '.commitizen.version' (the value assigned to VERSION from the yq
command), and if missing or malformed emit a clear error via echo and exit
non‑zero; keep the existing logic that appends "-${{ github.event.inputs.rc }}"
when steps.is_rc.outputs.is_rc == "true" and still write the final
"version=$VERSION" to $GITHUB_OUTPUT only after validation succeeds.

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

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

Caution

Changes requested ❌

Reviewed 8926cfa in 1 minute and 48 seconds. Click for details.
  • Reviewed 47 lines of code in 1 files
  • Skipped 0 files when reviewing.
  • Skipped posting 3 draft comments. View those below.
  • Modify your settings and rules to customize what types of comments Ellipsis leaves. And don't forget to react with 👍 or 👎 to teach Ellipsis.
1. .github/workflows/docker.yml:230
  • Draft comment:
    Switching the project name from a hardcoded 'hub' to use APP_NAME is fine—but ensure APP_NAME is set correctly in all environments.
  • Reason this comment was not posted:
    Confidence changes required: 33% <= threshold 50% None
2. .github/workflows/docker.yml:173
  • Draft comment:
    Typo in comment: 'Concant RC suffix' should be 'Concatenate RC suffix'.
  • Reason this comment was not posted:
    Comment was not on a location in the diff, so it can't be submitted as a review comment.
3. .github/workflows/docker.yml:260
  • Draft comment:
    Double-check the yq command for patching Chart.yaml. The use of single quotes may prevent shell interpolation—confirm that the substituted VERSION appears as intended.
  • Reason this comment was not posted:
    Comment was not on a location in the diff, so it can't be submitted as a review comment.

Workflow ID: wflow_JMfc7urcHBwrlBQp

You can customize Ellipsis by changing your verbosity settings, reacting with 👍 or 👎, replying to comments, or adding code review rules.

uses: OctopusDeploy/install-octopus-cli-action@v3
with:
version: "*"
version: latest
Copy link
Contributor

Choose a reason for hiding this comment

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

Using 'latest' for Octopus CLI version can lead to unexpected breaks. Consider pinning a specific version for reproducibility.

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/docker.yml:
- Line 173: The comments in the Docker workflow contain a typo: change "Concant"
to "Concat" in the comment on the conditional that appends the RC suffix (the
line reading `if [[ -n "${{ github.event.inputs.rc }}" ]]; then # Concant RC
suffix if provided`) and the similar comment at the other location referenced
(line with the same typo), updating both comment instances to read "Concat RC
suffix if provided".
- Line 161: The workflow output definition for chart_name has two spaces after
the colon; edit the YAML line containing chart_name: ${{
steps.chartName.outputs.chart_name }} (the chart_name output mapping) to use a
single space after the colon so it reads chart_name: ${{
steps.chartName.outputs.chart_name }}.
- Around line 154-193: The extract-version job lacks an explicit permissions
block; add a minimal permissions entry under the extract-version job (the job
with name "Extract Version") that grants only what is needed for reading the
repository and emitting outputs—e.g., set permissions to allow repo contents
read access (permissions: contents: read) so the job uses least privilege while
still allowing actions/checkout and reading files like .cz.yaml and
helm/Chart.yaml.
🧹 Nitpick comments (3)
.github/workflows/docker.yml (3)

181-181: Add error handling for version and chart name extraction.

The yq and grep commands don't validate that they successfully extracted the required values. If .cz.yaml lacks a commitizen.version field or helm/Chart.yaml lacks a name: field, the commands will produce empty values, leading to downstream failures.

🛡️ Proposed fix with validation
       - name: Extract version from .cz.yaml
         id: version
         run: |
           VERSION=$(yq '.commitizen.version' .cz.yaml)
+          if [[ -z "$VERSION" ]]; then
+            echo "Error: Failed to extract version from .cz.yaml"
+            exit 1
+          fi
           if [[ ${{ steps.is_rc.outputs.is_rc }} == "true" ]]; then # Concat RC suffix if provided
             VERSION="${VERSION}-${{ github.event.inputs.rc }}"
           fi
 
           echo "version=$VERSION" >> "$GITHUB_OUTPUT"
       - name: Helm Chart Name
         id: chartName
         run: |
           CHART_NAME=$(grep '^name:' helm/Chart.yaml |  awk '{print $2}')
+          if [[ -z "$CHART_NAME" ]]; then
+            echo "Error: Failed to extract chart name from helm/Chart.yaml"
+            exit 1
+          fi
           echo "chart_name=$CHART_NAME" >> $GITHUB_OUTPUT

Also applies to: 191-191


207-207: Consider pinning the Octopus CLI version.

Using version: latest for the Octopus CLI introduces potential instability if breaking changes are introduced in newer versions. Consider pinning to a specific version for reproducibility.

-          version: latest
+          version: 3.1.0  # or the specific version you've tested

257-260: Add verification for Chart.yaml patching.

The yq command to patch Chart.yaml doesn't validate success. If the operation fails, the subsequent helm packaging could use an incorrect version.

🛡️ Proposed fix with validation
       - name: Patch version in Chart.yaml if release candidate
         if: ${{ env.IS_RC == 'true' }}
         run: |
           yq e -i '.version = "${{ env.VERSION }}"' helm/Chart.yaml
+          # Verify the patch was applied
+          PATCHED_VERSION=$(yq e '.version' helm/Chart.yaml)
+          if [[ "$PATCHED_VERSION" != "${{ env.VERSION }}" ]]; then
+            echo "Error: Failed to patch Chart.yaml version"
+            exit 1
+          fi
+          echo "Successfully patched Chart.yaml to version: $PATCHED_VERSION"
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 28cad25 and 8926cfa.

📒 Files selected for processing (1)
  • .github/workflows/docker.yml
🧰 Additional context used
🪛 GitHub Check: CodeQL
.github/workflows/docker.yml

[warning] 155-194: Workflow does not contain permissions
Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: build
  • GitHub Check: Analyze (rust)
🔇 Additional comments (4)
.github/workflows/docker.yml (4)

14-17: LGTM: Centralized environment variables.

The addition of APP_NAME and GOPRIVATE at the workflow level provides good centralization for values used across jobs.


197-233: Verify the use of dynamic version metadata.

The integration of VERSION and CHART_NAME from extract-version outputs looks correct. The Octopus release creation and deployment commands properly reference these variables.

However, verify whether the newly added Checkout step (lines 209-210) is necessary for the deploy job. If Octopus CLI doesn't require repository files, this step could be removed.


238-268: LGTM: Proper integration with extract-version outputs.

The push-helm-chart job correctly consumes VERSION, IS_RC, and CHART_NAME from the extract-version job and uses them appropriately in helm commands. The conditional patching of Chart.yaml for release candidates is a good practice.


156-156: The condition is correctly aligned with commitizen's tag creation workflow.

The workflow is triggered by tag pushes (v*) or workflow_dispatch. The extract-version job condition on lines 156, 197, and 238 runs when workflow_dispatch is used OR when the commit message starts with bump:. This works as intended because the repository uses commitizen, which automatically creates commits with bump: version X.Y.Z messages when generating tags. Any tag pushed to the repository will point to a commitizen-generated commit with a bump: prefix, so the extract-version, deploy, and push-helm-chart jobs will execute for all tag pushes.

Note: This approach assumes tags are always created through commitizen. Manual tag creation (e.g., git tag v1.0.0 without commitizen) would skip these jobs. If manual tagging is possible, consider whether the condition should check github.event_name == 'push' instead.

Comment on lines +154 to +193
extract-version:
name: Extract Version
if: github.event_name == 'workflow_dispatch' || startsWith(github.event.head_commit.message, 'bump:')
runs-on: ubuntu-latest
outputs:
is_rc: ${{ steps.is_rc.outputs.is_rc }}
version: ${{ steps.version.outputs.version }}
chart_name: ${{ steps.chartName.outputs.chart_name }}

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

- name: Is release candidate
id: is_rc
run: |
IS_RC=false
if [[ -n "${{ github.event.inputs.rc }}" ]]; then # Concant RC suffix if provided
IS_RC=true
fi
echo "is_rc=$IS_RC" >> "$GITHUB_OUTPUT"

- name: Extract version from .cz.yaml
id: version
run: |
VERSION=$(yq '.commitizen.version' .cz.yaml)
if [[ ${{ steps.is_rc.outputs.is_rc }} == "true" ]]; then # Concant RC suffix if provided
VERSION="${VERSION}-${{ github.event.inputs.rc }}"
fi

echo "version=$VERSION" >> "$GITHUB_OUTPUT"

- name: Helm Chart Name
id: chartName
run: |
CHART_NAME=$(grep '^name:' helm/Chart.yaml | awk '{print $2}')
echo "chart_name=$CHART_NAME" >> $GITHUB_OUTPUT

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Add explicit permissions block to the job.

As per the CodeQL warning, this job should have an explicit permissions block. Since it only reads from the repository and outputs metadata, it should use minimal permissions.

🔒 Proposed fix
 extract-version:
   name: Extract Version
   if: github.event_name == 'workflow_dispatch' || startsWith(github.event.head_commit.message, 'bump:')
   runs-on: ubuntu-latest
+  permissions:
+    contents: read
   outputs:
     is_rc: ${{ steps.is_rc.outputs.is_rc }}
     version: ${{ steps.version.outputs.version }}
     chart_name: ${{ steps.chartName.outputs.chart_name }}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
extract-version:
name: Extract Version
if: github.event_name == 'workflow_dispatch' || startsWith(github.event.head_commit.message, 'bump:')
runs-on: ubuntu-latest
outputs:
is_rc: ${{ steps.is_rc.outputs.is_rc }}
version: ${{ steps.version.outputs.version }}
chart_name: ${{ steps.chartName.outputs.chart_name }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Is release candidate
id: is_rc
run: |
IS_RC=false
if [[ -n "${{ github.event.inputs.rc }}" ]]; then # Concant RC suffix if provided
IS_RC=true
fi
echo "is_rc=$IS_RC" >> "$GITHUB_OUTPUT"
- name: Extract version from .cz.yaml
id: version
run: |
VERSION=$(yq '.commitizen.version' .cz.yaml)
if [[ ${{ steps.is_rc.outputs.is_rc }} == "true" ]]; then # Concant RC suffix if provided
VERSION="${VERSION}-${{ github.event.inputs.rc }}"
fi
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
- name: Helm Chart Name
id: chartName
run: |
CHART_NAME=$(grep '^name:' helm/Chart.yaml | awk '{print $2}')
echo "chart_name=$CHART_NAME" >> $GITHUB_OUTPUT
extract-version:
name: Extract Version
if: github.event_name == 'workflow_dispatch' || startsWith(github.event.head_commit.message, 'bump:')
runs-on: ubuntu-latest
permissions:
contents: read
outputs:
is_rc: ${{ steps.is_rc.outputs.is_rc }}
version: ${{ steps.version.outputs.version }}
chart_name: ${{ steps.chartName.outputs.chart_name }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Is release candidate
id: is_rc
run: |
IS_RC=false
if [[ -n "${{ github.event.inputs.rc }}" ]]; then # Concant RC suffix if provided
IS_RC=true
fi
echo "is_rc=$IS_RC" >> "$GITHUB_OUTPUT"
- name: Extract version from .cz.yaml
id: version
run: |
VERSION=$(yq '.commitizen.version' .cz.yaml)
if [[ ${{ steps.is_rc.outputs.is_rc }} == "true" ]]; then # Concant RC suffix if provided
VERSION="${VERSION}-${{ github.event.inputs.rc }}"
fi
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
- name: Helm Chart Name
id: chartName
run: |
CHART_NAME=$(grep '^name:' helm/Chart.yaml | awk '{print $2}')
echo "chart_name=$CHART_NAME" >> $GITHUB_OUTPUT
🤖 Prompt for AI Agents
In @.github/workflows/docker.yml around lines 154 - 193, The extract-version job
lacks an explicit permissions block; add a minimal permissions entry under the
extract-version job (the job with name "Extract Version") that grants only what
is needed for reading the repository and emitting outputs—e.g., set permissions
to allow repo contents read access (permissions: contents: read) so the job uses
least privilege while still allowing actions/checkout and reading files like
.cz.yaml and helm/Chart.yaml.

outputs:
is_rc: ${{ steps.is_rc.outputs.is_rc }}
version: ${{ steps.version.outputs.version }}
chart_name: ${{ steps.chartName.outputs.chart_name }}
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Fix extra whitespace in output definition.

There are two spaces after chart_name: instead of one.

🧹 Proposed fix
-      chart_name:  ${{ steps.chartName.outputs.chart_name }}
+      chart_name: ${{ steps.chartName.outputs.chart_name }}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
chart_name: ${{ steps.chartName.outputs.chart_name }}
chart_name: ${{ steps.chartName.outputs.chart_name }}
🤖 Prompt for AI Agents
In @.github/workflows/docker.yml at line 161, The workflow output definition for
chart_name has two spaces after the colon; edit the YAML line containing
chart_name: ${{ steps.chartName.outputs.chart_name }} (the chart_name output
mapping) to use a single space after the colon so it reads chart_name: ${{
steps.chartName.outputs.chart_name }}.

id: is_rc
run: |
IS_RC=false
if [[ -n "${{ github.event.inputs.rc }}" ]]; then # Concant RC suffix if provided
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Fix typos in comments.

"Concant" should be "Concat" in both comments.

📝 Proposed fix
-          if [[ -n "${{ github.event.inputs.rc }}" ]]; then # Concant RC suffix if provided
+          if [[ -n "${{ github.event.inputs.rc }}" ]]; then # Concat RC suffix if provided
-          if [[ ${{ steps.is_rc.outputs.is_rc }} == "true" ]]; then # Concant RC suffix if provided
+          if [[ ${{ steps.is_rc.outputs.is_rc }} == "true" ]]; then # Concat RC suffix if provided

Also applies to: 182-182

🤖 Prompt for AI Agents
In @.github/workflows/docker.yml at line 173, The comments in the Docker
workflow contain a typo: change "Concant" to "Concat" in the comment on the
conditional that appends the RC suffix (the line reading `if [[ -n "${{
github.event.inputs.rc }}" ]]; then # Concant RC suffix if provided`) and the
similar comment at the other location referenced (line with the same typo),
updating both comment instances to read "Concat RC suffix if provided".

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

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

Caution

Changes requested ❌

Reviewed fe74465 in 2 minutes and 7 seconds. Click for details.
  • Reviewed 217 lines of code in 1 files
  • Skipped 0 files when reviewing.
  • Skipped posting 6 draft comments. View those below.
  • Modify your settings and rules to customize what types of comments Ellipsis leaves. And don't forget to react with 👍 or 👎 to teach Ellipsis.
1. .github/workflows/docker.yml:38
  • Draft comment:
    Typo in comment: 'Concant' should be 'Concatenate'.
  • Reason this comment was not posted:
    Decided after close inspection that this draft comment was likely wrong and/or not actionable: usefulness confidence = 20% vs. threshold = 50% This is a straightforward typo fix suggestion. The word "Concant" is clearly misspelled and should be "Concatenate". The comment is about code that was changed/added in this diff (the extract-version job is new). However, I need to consider the rules: "Do NOT comment unless there is clearly a code change required" and "Comments that suggest code quality refactors are good! But only if they are actionable and clear." A typo in a comment is not a functional code change - it doesn't affect how the code runs. It's purely cosmetic. The rules emphasize not making comments that are "obvious or unimportant" and only commenting when there's "clearly a code change required." A typo in a comment doesn't require a code change for functionality. While this is a legitimate typo, fixing typos in comments is not a functional code change and could be considered unimportant or obvious. The rules specifically say not to make comments that are obvious or unimportant, and to only comment when there's clearly a code change required for functionality. However, the rules also state "Comments that suggest code quality refactors are good! But only if they are actionable and clear." This is actionable and clear - it's a simple spelling fix. But is fixing a typo in a comment really a "code quality refactor"? It's more of a documentation/cosmetic fix. Given the emphasis on not making unimportant comments and the fact that this doesn't affect functionality, this comment should probably be deleted. This comment points out a legitimate typo, but fixing typos in comments is cosmetic and doesn't affect functionality. Given the rules emphasize only commenting when there's clearly a code change required and not making obvious or unimportant comments, this should be deleted.
2. .github/workflows/docker.yml:47
  • Draft comment:
    Typo in comment: 'Concant' should be 'Concatenate'.
  • Reason this comment was not posted:
    Comment did not seem useful. Confidence is useful = 0% <= threshold 50% This comment is pointing out a typo in a comment within the code. While it is not asking for confirmation or testing, it is purely informative and does not provide a suggestion for code improvement or a specific action to take. Therefore, it violates the rule against making purely informative comments.
3. .github/workflows/docker.yml:276
  • Draft comment:
    Consider using yq’s env substitution (e.g. strenv(VERSION)) for robustness when patching Chart.yaml.
  • Reason this comment was not posted:
    Comment was not on a location in the diff, so it can't be submitted as a review comment.
4. .github/workflows/docker.yml:197
  • Draft comment:
    Verify that the tag formatting differences (comma-separated in build-images vs space-separated in create-manifests) are intentional.
  • Reason this comment was not posted:
    Confidence changes required: 50% <= threshold 50% None
5. .github/workflows/docker.yml:38
  • Draft comment:
    Typo: 'Concant RC suffix if provided' should likely be 'Concatenate RC suffix if provided'.
  • Reason this comment was not posted:
    Decided after close inspection that this draft comment was likely wrong and/or not actionable: usefulness confidence = 30% vs. threshold = 50% This is a straightforward typo fix suggestion. The word "Concant" is clearly a misspelling of "Concatenate". The comment is about code that was changed/added in this diff. However, I need to consider the rules: typo fixes in comments are generally low-priority and could be considered "obvious or unimportant". The code functionality is not affected by this typo - it's just a comment. While it's technically correct, fixing typos in comments might fall under "obvious or unimportant" issues. On the other hand, it's a clear, actionable suggestion that improves code quality. While the typo is real, this is just a comment and doesn't affect functionality. The rules state not to make comments that are "obvious or unimportant" - a typo in a comment could be considered unimportant since it doesn't affect the code's behavior. This might be too minor to warrant a review comment. However, the comment is actionable, clear, and improves code quality. It's not speculative or asking for confirmation - it's a direct fix. Typos in comments can reduce code professionalism and readability. The rule about "obvious or unimportant" is more about logic issues, not about clear quality improvements. This is a borderline case. The typo is real and the fix is clear, but it's just a comment that doesn't affect functionality. Given the emphasis on only keeping comments with STRONG EVIDENCE of being useful, and that typos in comments are relatively minor, I'll lean toward removing this comment as it falls under "obvious or unimportant".
6. .github/workflows/docker.yml:47
  • Draft comment:
    Typo: 'Concant RC suffix if provided' should likely be 'Concatenate RC suffix if provided'.
  • Reason this comment was not posted:
    Decided after close inspection that this draft comment was likely wrong and/or not actionable: usefulness confidence = 20% vs. threshold = 50% This is a comment about fixing a typo in a code comment (not in actual code logic). The rules state "Do NOT comment unless there is clearly a code change required" and "Do NOT make comments that are obvious or unimportant." A typo in a comment is not a code change that affects functionality. While it's nice to have correct spelling, this falls into the category of being unimportant and not requiring a code change for functionality. The rules emphasize only commenting on things that are clearly important code issues, not minor style/documentation issues like typos in comments. However, code quality and maintainability includes clear documentation. A typo in a comment could be considered a minor quality issue that's worth fixing. The comment is actionable and clear about what needs to be changed. While code quality is important, the rules explicitly state not to make comments that are "obvious or unimportant." A typo in a comment is unimportant - it doesn't affect functionality, testing, or understanding of the code. The comment is still understandable even with the typo. This is the type of minor issue that should be caught in a more thorough review or ignored entirely. This comment should be deleted. It's about a typo in a code comment, which is unimportant and doesn't require a code change for functionality. It violates the rule about not making obvious or unimportant comments.

Workflow ID: wflow_JhVCkY8zpI2SOiWI

You can customize Ellipsis by changing your verbosity settings, reacting with 👍 or 👎, replying to comments, or adding code review rules.

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: 1

🤖 Fix all issues with AI agents
In @.github/workflows/docker.yml:
- Around line 225-226: Remove the redundant checkout step from the deploy job by
deleting the "Checkout" step that uses actions/checkout@v4; locate the deploy
job definition and remove the step whose name is "Checkout" (uses:
actions/checkout@v4) so the job runs only the Octopus CLI commands using
environment variables/secrets without performing a repository checkout.
🧹 Nitpick comments (6)
.github/workflows/docker.yml (6)

19-27: Add explicit permissions to the extract-version job.

This job only needs read access to checkout the repository. Adding an explicit permissions block aligns with the principle of least privilege and addresses the CodeQL warning.

🔒 Proposed fix
   extract-version:
     name: Extract Version
     if: github.event_name == 'workflow_dispatch' || startsWith(github.event.head_commit.message, 'bump:')
     runs-on: ubuntu-latest
+    permissions:
+      contents: read
     outputs:
       is_rc: ${{ steps.is_rc.outputs.is_rc }}
       version: ${{ steps.version.outputs.version }}
       chart_name:  ${{ steps.chartName.outputs.chart_name }}

53-57: Consider using yq for consistency.

The version is extracted using yq (line 46), but the chart name uses grep + awk. Using yq for both would be more consistent and robust (handles edge cases like quoted values or extra whitespace).

♻️ Proposed fix
       - name: Helm Chart Name
         id: chartName
         run: |
-          CHART_NAME=$(grep '^name:' helm/Chart.yaml |  awk '{print $2}')
+          CHART_NAME=$(yq '.name' helm/Chart.yaml)
           echo "chart_name=$CHART_NAME" >> $GITHUB_OUTPUT

109-125: Minor redundancy: SHORT_SHA computed twice.

Line 110 sets SHORT_SHA in GITHUB_ENV, but line 117 recomputes it locally. You can simplify by using ${{ env.SHORT_SHA }} in the second step.

♻️ Proposed fix
       - name: Build tag list
         id: tags
         run: |
           ARCH="${{ steps.platform.outputs.arch }}"
           VERSION="${{ env.VERSION }}"
-          SHORT_SHA="${GITHUB_SHA::7}"
+          SHORT_SHA="${{ env.SHORT_SHA }}"
           IS_RC="${{ env.IS_RC }}"

223-223: Consider pinning the Octopus CLI version.

Using version: latest can lead to unexpected behavior if the CLI introduces breaking changes. Consider pinning to a specific version for reproducibility.


254-261: Remove leftover development comments.

The inline comments # ADD extract-version and # ADD this section appear to be development notes that should be removed before merging.

♻️ Proposed fix
   push-helm-chart:
     name: Push Helm Chart to Dockerhub
     runs-on: ubuntu-latest
-    needs: [create-manifests, extract-version]  # ADD extract-version
+    needs: [create-manifests, extract-version]
     permissions:
       contents: write

-    env:  # ADD this section
+    env:
       VERSION: ${{ needs.extract-version.outputs.version }}
       IS_RC: ${{ needs.extract-version.outputs.is_rc }}
       CHART_NAME: ${{ needs.extract-version.outputs.chart_name }}

273-276: Remove leftover development comment.

Similar to above, the # ADD this comment should be removed.

♻️ Proposed fix
-      - name: Patch version in Chart.yaml if release candidate  # ADD this
+      - name: Patch version in Chart.yaml if release candidate
         if: ${{ env.IS_RC == 'true' }}
         run: |
           yq e -i '.version = "${{ env.VERSION }}"' helm/Chart.yaml
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 8926cfa and fe74465.

📒 Files selected for processing (1)
  • .github/workflows/docker.yml
🧰 Additional context used
🪛 GitHub Check: CodeQL
.github/workflows/docker.yml

[warning] 20-59: Workflow does not contain permissions
Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (5)
  • GitHub Check: Build Docker Images (hub, Dockerfile, linux/amd64)
  • GitHub Check: Build Docker Images (migrations, Dockerfile.db-based-migrations, -migrations, linux/amd64)
  • GitHub Check: Build Docker Images (hub, Dockerfile, linux/arm64)
  • GitHub Check: build
  • GitHub Check: Analyze (rust)
🔇 Additional comments (3)
.github/workflows/docker.yml (3)

14-16: LGTM!

Global environment variables for GOPRIVATE and APP_NAME are well-placed at the workflow level for consistent reuse across jobs.


191-208: LGTM!

The multi-arch manifest creation logic correctly references the architecture-specific ${ARCH}-${VERSION} tags produced by the build-images job, and appropriately excludes the latest tag for release candidates.


278-284: LGTM!

The Helm chart packaging and pushing logic correctly uses the extracted CHART_NAME and VERSION from the upstream job, ensuring consistent versioning across the pipeline.

Comment on lines +225 to +226
- name: Checkout
uses: actions/checkout@v4
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

cd .github/workflows && cat -n docker.yml | sed -n '210,250p'

Repository: traceloop/hub

Length of output: 1710


🏁 Script executed:

cd .github/workflows && grep -n "APP_NAME" docker.yml

Repository: traceloop/hub

Length of output: 213


Remove unnecessary checkout step in deploy job.

The deploy job only executes Octopus CLI commands using environment variables and secrets. No repository files are referenced, making the checkout step redundant and an unnecessary performance overhead.

🤖 Prompt for AI Agents
In @.github/workflows/docker.yml around lines 225 - 226, Remove the redundant
checkout step from the deploy job by deleting the "Checkout" step that uses
actions/checkout@v4; locate the deploy job definition and remove the step whose
name is "Checkout" (uses: actions/checkout@v4) so the job runs only the Octopus
CLI commands using environment variables/secrets without performing a repository
checkout.

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

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

Important

Looks good to me! 👍

Reviewed 3e360b1 in 47 seconds. Click for details.
  • Reviewed 56 lines of code in 3 files
  • Skipped 0 files when reviewing.
  • Skipped posting 3 draft comments. View those below.
  • Modify your settings and rules to customize what types of comments Ellipsis leaves. And don't forget to react with 👍 or 👎 to teach Ellipsis.
1. helm/templates/deployment.yaml:99
  • Draft comment:
    DB user now always comes from the secret. Ensure that sourcing from a secret (instead of using configMap/user value) is intentional and documented.
  • Reason this comment was not posted:
    Confidence changes required: 33% <= threshold 50% None
2. helm/templates/migration-job.yaml:52
  • Draft comment:
    DB user is now retrieved from the secret (removing the configMap branch). Confirm that this behavior—differing from other DB parameters—is the intended design.
  • Reason this comment was not posted:
    Confidence changes required: 33% <= threshold 50% None
3. helm/values.yaml:127
  • Draft comment:
    Introduced 'usernameKey' with default 'username'. Ensure that any existing secrets follow this key naming convention.
  • Reason this comment was not posted:
    Confidence changes required: 0% <= threshold 50% None

Workflow ID: wflow_3CTZcux42UhJHyjW

You can customize Ellipsis by changing your verbosity settings, reacting with 👍 or 👎, replying to comments, or adding code review rules.

push: true
platforms: ${{ matrix.platform }}
outputs: type=image,name=ghcr.io/traceloop/hub${{ matrix.variant.suffix }},push-by-digest=true,name-canonical=true,push=true
tags: ${{ steps.tags.outputs.tags }}
Copy link
Contributor

Choose a reason for hiding this comment

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

what is this?

Comment on lines 185 to +193
deploy:
name: Deploy to Traceloop
runs-on: ubuntu-latest
needs: create-manifests
needs: [extract-version, create-manifests, push-helm-chart]

env:
VERSION: ${{ needs.extract-version.outputs.version }}
CHART_NAME: ${{ needs.extract-version.outputs.chart_name }}

Copy link
Contributor

Choose a reason for hiding this comment

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

@avivhalfon just make sure this is the trigger we have in all other repo

docker buildx imagetools create \
$(printf '%s\n' "$TAGS" | sed 's/^/--tag /' | tr '\n' ' ') \
$(printf 'ghcr.io/traceloop/hub${{ matrix.variant.suffix }}@sha256:%s ' *)
deploy:
Copy link
Contributor

Choose a reason for hiding this comment

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

IMO put it last in the file as in the dependency order

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

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

Important

Looks good to me! 👍

Reviewed 7f43190 in 1 minute and 53 seconds. Click for details.
  • Reviewed 85 lines of code in 1 files
  • Skipped 0 files when reviewing.
  • Skipped posting 2 draft comments. View those below.
  • Modify your settings and rules to customize what types of comments Ellipsis leaves. And don't forget to react with 👍 or 👎 to teach Ellipsis.
1. .github/workflows/docker.yml:232
  • Draft comment:
    Ensure that the runner has the required tools installed (especially yq) before using its command. Consider adding an installation step if the default Ubuntu image might not include yq.
  • Reason this comment was not posted:
    Decided after close inspection that this draft comment was likely wrong and/or not actionable: usefulness confidence = 0% vs. threshold = 50% This comment is problematic for several reasons: 1) The job was just moved, not newly created, so this isn't a new change that introduces yq usage. 2) The same workflow already uses yq at line 46 without any installation step, which suggests it's already available. 3) The comment is speculative ("might not include") rather than pointing to a definite issue. 4) This would have been caught in testing if yq wasn't available. The comment violates the rule about not making speculative comments and appears to be about code that wasn't actually changed (just moved). However, I could be wrong that yq is pre-installed - maybe it was added in a previous step or the earlier usage also has the same issue. But even if that's the case, this is a moved block of code, not a new change, so the comment shouldn't apply to this PR. Even if yq availability is uncertain, the key issue is that this code block was simply moved from one location to another in the same file - it's not a new addition. The comment should not be made on moved code. Additionally, the workflow already uses yq elsewhere without installation, so if this were an issue, it would be a pre-existing one, not something introduced by this PR. This comment should be deleted because it's about a code block that was merely relocated within the file, not newly introduced or modified. The rules explicitly state not to comment on moved code.
2. .github/workflows/docker.yml:226
  • Draft comment:
    Verify that the Helm version in the runner supports OCI registry commands (e.g. helm registry login and helm push). If not, add a step to install or upgrade Helm accordingly.
  • Reason this comment was not posted:
    Comment did not seem useful. Confidence is useful = 0% <= threshold 50% This comment is asking the PR author to verify compatibility of the Helm version with certain commands. It is not making a specific code suggestion or asking for a test to be written. It violates the rule against asking the author to confirm or ensure compatibility.

Workflow ID: wflow_VhzhV4zvrd2taqLj

You can customize Ellipsis by changing your verbosity settings, reacting with 👍 or 👎, replying to comments, or adding code review rules.

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/docker.yml:
- Around line 19-27: The extract-version job currently has no permissions block
so GITHUB_TOKEN inherits broad defaults; add a job-level permissions entry
limiting the token to only what’s required (e.g., set permissions: contents:
read) for the extract-version job (the job named "extract-version") so the
checkout step only gets read access to repository contents.
- Around line 245-253: The deploy job currently exposes the default GITHUB_TOKEN
scope; add an explicit permissions block under the deploy job to restrict token
access (e.g., set permissions.contents: read) so the job named "deploy" only has
the minimum required permission to checkout code and cannot perform other
repository actions.
🧹 Nitpick comments (3)
.github/workflows/docker.yml (3)

53-57: Consider using yq for consistency.

Line 46 uses yq to parse .cz.yaml, but line 56 uses grep/awk to parse Chart.yaml. Using yq consistently would be more robust against formatting variations (e.g., extra spaces, comments).

♻️ Suggested change
       - name: Helm Chart Name
         id: chartName
         run: |
-          CHART_NAME=$(grep '^name:' helm/Chart.yaml |  awk '{print $2}')
+          CHART_NAME=$(yq '.name' helm/Chart.yaml)
           echo "chart_name=$CHART_NAME" >> $GITHUB_OUTPUT

109-125: Tag building logic is sound; minor redundancy noted.

The logic correctly adds latest tags only for non-RC builds. Minor note: SHORT_SHA is set in env at line 110 but recomputed at line 117—you could use ${{ env.SHORT_SHA }} instead for consistency, though this is trivial.


255-258: Pin the Octopus CLI version for reproducible builds.

Using version: latest can introduce unexpected changes in workflow behavior if Octopus CLI introduces breaking changes in future releases. Pinning to a specific version ensures consistent builds across runs.

♻️ Example
       - name: Install Octopus CLI
         uses: OctopusDeploy/install-octopus-cli-action@v3
         with:
-          version: latest
+          version: "2.x.x"  # Pin to a specific version
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 3e360b1 and 7f43190.

📒 Files selected for processing (1)
  • .github/workflows/docker.yml
🧰 Additional context used
🪛 GitHub Check: CodeQL
.github/workflows/docker.yml

[warning] 20-59: Workflow does not contain permissions
Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}


[warning] 246-284: Workflow does not contain permissions
Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {{contents: read}}

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: build
  • GitHub Check: Analyze (rust)
🔇 Additional comments (4)
.github/workflows/docker.yml (4)

14-16: LGTM!

Top-level environment variables for GOPRIVATE and APP_NAME provide good centralization for reuse across jobs.


191-208: LGTM!

The multi-arch manifest creation correctly builds from architecture-specific tags and conditionally includes latest only for non-RC releases.


232-243: LGTM!

The conditional patching of Chart.yaml for release candidates ensures the packaged chart reflects the correct RC version before pushing to the registry.


263-284: Deployment steps look correct.

The Octopus release creation and deployment to staging-new correctly use the extracted version and chart name. Ensure the Octopus secrets (OCTOPUS_API_KEY, OCTOPUS_URL, OCTOPUS_SPACE) are configured in the repository.

Comment on lines +19 to +27
extract-version:
name: Extract Version
if: github.event_name == 'workflow_dispatch' || startsWith(github.event.head_commit.message, 'bump:')
runs-on: ubuntu-latest
outputs:
is_rc: ${{ steps.is_rc.outputs.is_rc }}
version: ${{ steps.version.outputs.version }}
chart_name: ${{ steps.chartName.outputs.chart_name }}

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Add explicit permissions block to restrict GITHUB_TOKEN scope.

The extract-version job lacks a permissions block, which means it inherits the default (potentially broad) permissions. Since this job only needs to checkout code, restrict the token scope.

🔒 Proposed fix
   extract-version:
     name: Extract Version
     if: github.event_name == 'workflow_dispatch' || startsWith(github.event.head_commit.message, 'bump:')
     runs-on: ubuntu-latest
+    permissions:
+      contents: read
     outputs:
       is_rc: ${{ steps.is_rc.outputs.is_rc }}
       version: ${{ steps.version.outputs.version }}
       chart_name:  ${{ steps.chartName.outputs.chart_name }}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
extract-version:
name: Extract Version
if: github.event_name == 'workflow_dispatch' || startsWith(github.event.head_commit.message, 'bump:')
runs-on: ubuntu-latest
outputs:
is_rc: ${{ steps.is_rc.outputs.is_rc }}
version: ${{ steps.version.outputs.version }}
chart_name: ${{ steps.chartName.outputs.chart_name }}
extract-version:
name: Extract Version
if: github.event_name == 'workflow_dispatch' || startsWith(github.event.head_commit.message, 'bump:')
runs-on: ubuntu-latest
permissions:
contents: read
outputs:
is_rc: ${{ steps.is_rc.outputs.is_rc }}
version: ${{ steps.version.outputs.version }}
chart_name: ${{ steps.chartName.outputs.chart_name }}
🤖 Prompt for AI Agents
In @.github/workflows/docker.yml around lines 19 - 27, The extract-version job
currently has no permissions block so GITHUB_TOKEN inherits broad defaults; add
a job-level permissions entry limiting the token to only what’s required (e.g.,
set permissions: contents: read) for the extract-version job (the job named
"extract-version") so the checkout step only gets read access to repository
contents.

Comment on lines +245 to +253
deploy:
name: Deploy to Traceloop
runs-on: ubuntu-latest
needs: [extract-version, create-manifests, push-helm-chart]

env:
VERSION: ${{ needs.extract-version.outputs.version }}
CHART_NAME: ${{ needs.extract-version.outputs.chart_name }}

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Add explicit permissions block to restrict GITHUB_TOKEN scope.

The deploy job lacks a permissions block. Since it only needs to checkout code (the Octopus operations use a separate API key), restrict the token scope.

🔒 Proposed fix
   deploy:
     name: Deploy to Traceloop
     runs-on: ubuntu-latest
     needs: [extract-version, create-manifests, push-helm-chart]
+    permissions:
+      contents: read
 
     env:
       VERSION: ${{ needs.extract-version.outputs.version }}
       CHART_NAME: ${{ needs.extract-version.outputs.chart_name }}
🤖 Prompt for AI Agents
In @.github/workflows/docker.yml around lines 245 - 253, The deploy job
currently exposes the default GITHUB_TOKEN scope; add an explicit permissions
block under the deploy job to restrict token access (e.g., set
permissions.contents: read) so the job named "deploy" only has the minimum
required permission to checkout code and cannot perform other repository
actions.

@avivhalfon avivhalfon merged commit f419a67 into main Jan 13, 2026
6 checks passed
@avivhalfon avivhalfon deleted the ah/TLP-1189/helm-chart-new-deployment branch January 13, 2026 13:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants