Skip to content

fix(release): develop to main#610

Merged
bedatty merged 6 commits into
mainfrom
develop
Jul 23, 2026
Merged

fix(release): develop to main#610
bedatty merged 6 commits into
mainfrom
develop

Conversation

@bedatty

@bedatty bedatty commented Jul 23, 2026

Copy link
Copy Markdown
Contributor
Lerian

GitHub Actions Shared Workflows


Description

Type of Change

  • feat: New workflow or new input/output/step in an existing workflow
  • fix: Bug fix in a workflow (incorrect behavior, broken step, wrong condition)
  • perf: Performance improvement (e.g. caching, parallelism, reduced steps)
  • refactor: Internal restructuring with no behavior change
  • docs: Documentation only (README, docs/, inline comments)
  • ci: Changes to self-CI (workflows under .github/workflows/ that run on this repo)
  • chore: Dependency bumps, config updates, maintenance
  • test: Adding or updating tests
  • BREAKING CHANGE: Callers must update their configuration after this PR

Breaking Changes

None.

Testing

  • YAML syntax validated locally
  • Triggered a real workflow run on a caller repository using @this-branch or the beta tag
  • Verified all existing inputs still work with default values
  • Confirmed no secrets or tokens are printed in logs
  • Checked that unrelated workflows are not affected

Caller repo / workflow run:

Related Issues

Closes #

dependabot Bot and others added 6 commits July 20, 2026 11:08
… 2 updates

Bumps the security-scanners group with 2 updates in the / directory: [securego/gosec](https://github.com/securego/gosec) and [trufflesecurity/trufflehog](https://github.com/trufflesecurity/trufflehog).


Updates `securego/gosec` from 2.27.1 to 2.28.0
- [Release notes](https://github.com/securego/gosec/releases)
- [Commits](securego/gosec@9e6a984...9e75c05)

Updates `trufflesecurity/trufflehog` from 3.95.8 to 3.95.9
- [Release notes](https://github.com/trufflesecurity/trufflehog/releases)
- [Commits](trufflesecurity/trufflehog@00155c9...27b0417)

---
updated-dependencies:
- dependency-name: securego/gosec
  dependency-version: 2.28.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: security-scanners
- dependency-name: trufflesecurity/trufflehog
  dependency-version: 3.95.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: security-scanners
...

Signed-off-by: dependabot[bot] <support@github.com>
…dates

Bumps the actions-core group with 3 updates in the / directory: [actions/checkout](https://github.com/actions/checkout), [actions/setup-node](https://github.com/actions/setup-node) and [actions/setup-go](https://github.com/actions/setup-go).


Updates `actions/checkout` from 6.0.3 to 7.0.1
- [Release notes](https://github.com/actions/checkout/releases)
- [Commits](actions/checkout@v6.0.3...v7.0.1)

Updates `actions/setup-node` from 6 to 7
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](actions/setup-node@v6...v7)

Updates `actions/setup-go` from 6 to 7
- [Release notes](https://github.com/actions/setup-go/releases)
- [Commits](actions/setup-go@v6...v7)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 7.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions-core
- dependency-name: actions/setup-go
  dependency-version: 6.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions-core
- dependency-name: actions/setup-node
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions-core
...

Signed-off-by: dependabot[bot] <support@github.com>
@bedatty
bedatty requested a review from a team as a code owner July 23, 2026 19:38
@coderabbitai

coderabbitai Bot commented Jul 23, 2026

Copy link
Copy Markdown

Review Change Stack

Summary by CodeRabbit

  • New Features
    • Added configurable GitOps release layouts, including Kustomize settings and customizable ArgoCD application naming.
  • Documentation
    • Documented the new GitOps layout and Kustomize configuration options for release workflows.
  • Chores
    • Refreshed automated workflow tooling across build, test, security, release, and deployment processes.
    • Updated code checkout, language setup, scanning, and secret-detection tooling to newer maintained versions.

Walkthrough

The PR refreshes pinned GitHub Actions across CI, security, release, deployment, and validation workflows. It also adds and documents GitOps layout, Kustomize, and ArgoCD naming inputs for the Go release workflow.

Changes

Workflow maintenance

Layer / File(s) Summary
GitOps layout inputs
.github/workflows/go-release.yml, docs/go-release-workflow.md
Adds GitOps and Kustomize workflow inputs, forwards them to gitops-update.yml, and documents the new interface.
Go CI and security action refresh
.github/workflows/end-to-end-tests.yml, .github/workflows/go-ci.yml, .github/workflows/go-fuzz.yml, .github/workflows/go-pr-analysis.yml, .github/workflows/go-security.yml
Updates checkout, Go setup, Gosec, and TruffleHog action references.
Frontend and TypeScript action refresh
.github/workflows/api-dog-e2e-tests.yml, .github/workflows/frontend-pr-analysis.yml, .github/workflows/js-release.yml, .github/workflows/s3-upload.yml, .github/workflows/typescript-*.yml
Updates checkout and Node setup action references across frontend, JavaScript, TypeScript, and upload workflows.
Repository-wide workflow pin refresh
.github/workflows/{backmerge,build,dispatch-helm,gitops-update,go-lambda-release,gptchangelog,helm-*,lerian-lib-version-check,pr-*,release*,self-pr-validation,version-propagation}.yml
Repins checkout and related setup actions in deployment, release, validation, changelog, and shared workflows without changing surrounding job logic.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Possibly related issues

Possibly related PRs

Suggested labels: config

Suggested reviewers: gandalf-at-lerian

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Title check ⚠️ Warning The title refers to a branch merge, but the diff is workflow dependency bumps and GitOps input forwarding. Rename it to summarize the actual workflow changes, such as pinned action updates and release workflow input forwarding.
Description check ⚠️ Warning The description is just the template with placeholders and lacks the required summary, affected workflows, type of change, and testing details. Fill in the Description, Type of Change, Testing, and Related Issues sections with the actual workflows changed and validation performed.
✅ Passed checks (3 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch develop

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

@lerian-studio lerian-studio added size/M PR changes 200–499 lines documentation Improvements or additions to documentation workflow Changes to one or more reusable workflow files typescript Changes to TypeScript or Frontend workflows security Changes to security workflows or vulnerability reporting policy golang Changes to Go-related workflows notify Changes to notification composite actions (src/notify/) validate Changes to PR validation composite actions (src/validate/) changelog Changes to changelog generation composite actions (src/changelog/) build Changes to build and artifact composite actions (src/build/) labels Jul 23, 2026
@lerian-studio

Copy link
Copy Markdown
Contributor

🔍 PR Validation Summary

✅ PR Mergeable — no blocking failures

Check Status Blocking
Source Branch ✅ success yes
PR Title ✅ success yes
PR Description ✅ success yes
PR Size ✅ success no
Auto Labels ✅ success no
PR Metadata ✅ success no

🔍 View workflow run

@lerian-studio

Copy link
Copy Markdown
Contributor

🔍 Lint Analysis

Check Files Scanned Status
YAML Lint 29 file(s) ✅ success
Action Lint 29 file(s) ❌ failure
Pinned Actions 29 file(s) ❌ failure
Markdown Link Check 1 file(s) ✅ success
Spelling Check 30 file(s) ✅ success
Shell Check 29 file(s) ✅ success
README Check 29 file(s) ✅ success
Composite Schema no changes ⏭️ skipped
Deployment Matrix no changes ⏭️ skipped
❌ Failures (2)

Action Lint

.github

  • .github (line 647) — �[31m❌ [actionlint] The command ran successfully and some problem was found (found 4 errors, linted 29 files), exit code: 1�[0m

.github/workflows/go-ci.yml

  • .github/workflows/go-ci.yml (line 171) — shellcheck reported issue in this script: SC2162:info:13:39: read without -r will mangle backslashes
  • .github/workflows/go-ci.yml (line 171) — shellcheck reported issue in this script: SC2086:info:23:43: Double quote to prevent globbing and word splitting
  • .github/workflows/go-ci.yml (line 171) — shellcheck reported issue in this script: SC2086:info:15:15: Double quote to prevent globbing and word splitting
  • .github/workflows/go-ci.yml (line 171) — shellcheck reported issue in this script: SC2086:info:14:13: Double quote to prevent globbing and word splitting

Pinned Actions

.github/workflows/go-ci.yml

  • .github/workflows/go-ci.yml (line 162) — External action not pinned by SHA: uses: actions/checkout@v7.0.1 (use full commit SHA with a # vX.Y.Z comment)
  • .github/workflows/go-ci.yml (line 149) — External action not pinned by SHA: uses: golangci/golangci-lint-action@v9 (use full commit SHA with a # vX.Y.Z comment)
  • .github/workflows/go-ci.yml (line 143) — External action not pinned by SHA: uses: actions/setup-go@v7 (use full commit SHA with a # vX.Y.Z comment)
  • .github/workflows/go-ci.yml (line 140) — External action not pinned by SHA: uses: actions/checkout@v7.0.1 (use full commit SHA with a # vX.Y.Z comment)
  • .github/workflows/go-ci.yml (line 129) — External action not pinned by SHA: uses: fgrosse/go-coverage-report@v1.3.0 (use full commit SHA with a # vX.Y.Z comment)
  • .github/workflows/go-ci.yml (line 124) — External action not pinned by SHA: uses: actions/download-artifact@v8 (use full commit SHA with a # vX.Y.Z comment)
  • .github/workflows/go-ci.yml (line 121) — External action not pinned by SHA: uses: actions/checkout@v7.0.1 (use full commit SHA with a # vX.Y.Z comment)
  • .github/workflows/go-ci.yml (line 104) — External action not pinned by SHA: uses: actions/upload-artifact@v7 (use full commit SHA with a # vX.Y.Z comment)
  • .github/workflows/go-ci.yml (line 85) — External action not pinned by SHA: uses: actions/setup-go@v7 (use full commit SHA with a # vX.Y.Z comment)
  • .github/workflows/go-ci.yml (line 82) — External action not pinned by SHA: uses: actions/checkout@v7.0.1 (use full commit SHA with a # vX.Y.Z comment)
⚠️ Warnings (3)

Pinned Actions

.github

  • .github (line 173) — Found 2 internal action(s) not pinned to a version. Consider pinning to vX.Y.Z.

.github/workflows/release-notification.yml

  • .github/workflows/release-notification.yml (line 183) — Internal composite must use floating major tag (e.g. @v1) or develop/main for testing: uses: LerianStudio/github-actions-shared-workflows/src/notify/slack-release@v1.18.0
  • .github/workflows/release-notification.yml (line 171) — Internal composite must use floating major tag (e.g. @v1) or develop/main for testing: uses: LerianStudio/github-actions-shared-workflows/src/notify/discord-release@v1.18.0

🔍 View full scan logs

@lerian-studio

Copy link
Copy Markdown
Contributor

🛡️ CodeQL Analysis Results

Languages analyzed: actions

Found 4 issue(s): 4 Medium

Severity Rule File Message
🟡 Medium actions/untrusted-checkout/medium .github/workflows/build.yml:300 Potential unsafe checkout of untrusted pull request on non-privileged workflow.
🟡 Medium actions/untrusted-checkout/medium .github/workflows/gitops-update.yml:164 Potential unsafe checkout of untrusted pull request on non-privileged workflow.
🟡 Medium actions/untrusted-checkout/medium .github/workflows/gitops-update.yml:182 Potential unsafe checkout of untrusted pull request on non-privileged workflow.
🟡 Medium actions/untrusted-checkout/medium .github/workflows/version-propagation.yml:62 Potential unsafe checkout of untrusted pull request on non-privileged workflow.

🔍 View full scan logs | 🛡️ Security tab

@bedatty
bedatty merged commit 419fe86 into main Jul 23, 2026
25 of 28 checks passed

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Warning

CodeRabbit couldn't request changes on this pull request because it doesn't have sufficient GitHub permissions.

Please grant CodeRabbit Pull requests: Read and write permission and re-run the review.

👉 Steps to fix this

Actionable comments posted: 7

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/go-ci.yml:
- Around line 82-85: Pin every listed third-party action to its full commit SHA
in both .github/workflows/go-ci.yml (lines 82-85 and all other listed action
usages) and .github/workflows/go-fuzz.yml (lines 80-83 and all other listed
action usages), replacing mutable tags while retaining each release tag in an
inline comment.

In @.github/workflows/go-release.yml:
- Around line 200-203: Validate the `gitops_layout` workflow input against an
allowlist containing only `helmfile` and `kustomize` before invoking
`gitops-update.yml`; reject all other values, including typos, rather than
routing them through the helmfile path.
- Around line 455-456: Update the action version comments for the checkout steps
in .github/workflows/go-release.yml:455-456,
.github/workflows/lerian-lib-version-check.yml:87-88,
.github/workflows/pr-security-scan.yml:184-185,
.github/workflows/pr-validation.yml:51-52,
.github/workflows/release-notification.yml:126-127,
.github/workflows/release.yml:193-194,
.github/workflows/self-pr-validation.yml:51-52, and
.github/workflows/version-propagation.yml:62-63 to annotate the specified
actions/checkout SHA as v7.0.1; additionally annotate the specified
actions/setup-node SHA in .github/workflows/release.yml with v7.0.0.

In @.github/workflows/helm-release-notification.yml:
- Line 88: Update the inline action version comments at
.github/workflows/helm-release-notification.yml:88,
.github/workflows/gptchangelog.yml:65, :142, and :260,
.github/workflows/helm-alpha-release.yml:56, and
.github/workflows/helm-update-chart.yml:170 to # v7.0.1 for actions/checkout;
update .github/workflows/helm-update-chart.yml:211 to # v7 for actions/setup-go.
Do not change the pinned action references.

In @.github/workflows/pr-security-scan.yml:
- Around line 184-185: Disable persisted checkout credentials by adding
persist-credentials: false to the checkout steps in
.github/workflows/pr-security-scan.yml (lines 184-185), every validation
checkout in .github/workflows/pr-validation.yml (lines 51-52) and
.github/workflows/self-pr-validation.yml (lines 51-52), and the notification
checkout in .github/workflows/release-notification.yml (lines 126-127). Do not
modify release workflows that perform Git writes.

In @.github/workflows/s3-upload.yml:
- Line 129: Update the checkout step using actions/checkout to pin it to an
immutable commit SHA instead of the mutable v7.0.1 tag, and set
persist-credentials to false so the repository token is not retained in Git
configuration.

In @.github/workflows/typescript-ci.yml:
- Around line 86-89: Update every actions/checkout and actions/setup-node
reference in the typescript CI workflow to use its matching immutable commit SHA
instead of the v7.0.1 or v7 tags, while retaining the existing version comment
alongside each SHA.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 36d6428f-6a12-4efb-932d-f98676860cdb

📥 Commits

Reviewing files that changed from the base of the PR and between eefa892 and 358f913.

📒 Files selected for processing (30)
  • .github/workflows/api-dog-e2e-tests.yml
  • .github/workflows/backmerge.yml
  • .github/workflows/build.yml
  • .github/workflows/dispatch-helm.yml
  • .github/workflows/end-to-end-tests.yml
  • .github/workflows/frontend-pr-analysis.yml
  • .github/workflows/gitops-update.yml
  • .github/workflows/go-ci.yml
  • .github/workflows/go-fuzz.yml
  • .github/workflows/go-lambda-release.yml
  • .github/workflows/go-pr-analysis.yml
  • .github/workflows/go-release.yml
  • .github/workflows/go-security.yml
  • .github/workflows/gptchangelog.yml
  • .github/workflows/helm-alpha-release.yml
  • .github/workflows/helm-release-notification.yml
  • .github/workflows/helm-update-chart.yml
  • .github/workflows/js-release.yml
  • .github/workflows/lerian-lib-version-check.yml
  • .github/workflows/pr-security-scan.yml
  • .github/workflows/pr-validation.yml
  • .github/workflows/release-notification.yml
  • .github/workflows/release.yml
  • .github/workflows/s3-upload.yml
  • .github/workflows/self-pr-validation.yml
  • .github/workflows/typescript-build.yml
  • .github/workflows/typescript-ci.yml
  • .github/workflows/typescript-release.yml
  • .github/workflows/version-propagation.yml
  • docs/go-release-workflow.md

Comment on lines +82 to +85
uses: actions/checkout@v7.0.1

- name: Set up Go
uses: actions/setup-go@v6
uses: actions/setup-go@v7

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

for f in .github/workflows/go-ci.yml .github/workflows/go-fuzz.yml; do
  echo "===== $f ====="
  nl -ba "$f" | sed -n '1,320p' | sed -n '/uses:/p'
  echo
done

Repository: LerianStudio/github-actions-shared-workflows

Length of output: 262


🏁 Script executed:

python3 - <<'PY'
from pathlib import Path

for path in [Path('.github/workflows/go-ci.yml'), Path('.github/workflows/go-fuzz.yml')]:
    print(f'===== {path} =====')
    for i, line in enumerate(path.read_text().splitlines(), 1):
        if 'uses:' in line:
            print(f'{i:4}: {line}')
    print()
PY

Repository: LerianStudio/github-actions-shared-workflows

Length of output: 1218


Pin all third-party actions to commit SHAs in both workflows.

actions/checkout, actions/setup-go, actions/upload-artifact, actions/download-artifact, fgrosse/go-coverage-report, golangci/golangci-lint-action, and tcort/github-action-markdown-link-check are still referenced by mutable tags here. Replace each with a full SHA and keep the release tag in a comment.

  • .github/workflows/go-ci.yml
  • .github/workflows/go-fuzz.yml
🧰 Tools
🪛 zizmor (1.26.1)

[error] 82-82: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)


[error] 85-85: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)

📍 Affects 2 files
  • .github/workflows/go-ci.yml#L82-L85 (this comment)
  • .github/workflows/go-fuzz.yml#L80-L83
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/go-ci.yml around lines 82 - 85, Pin every listed
third-party action to its full commit SHA in both .github/workflows/go-ci.yml
(lines 82-85 and all other listed action usages) and
.github/workflows/go-fuzz.yml (lines 80-83 and all other listed action usages),
replacing mutable tags while retaining each release tag in an inline comment.

Sources: Coding guidelines, Linters/SAST tools

Comment on lines +200 to +203
gitops_layout:
description: 'GitOps layout strategy: "helmfile" (default, current behavior) or "kustomize".'
type: string
default: 'helmfile'

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

set -euo pipefail

printf '\n== go-release around inputs ==\n'
sed -n '180,240p' .github/workflows/go-release.yml

printf '\n== go-release around forwarding ==\n'
sed -n '660,720p' .github/workflows/go-release.yml

printf '\n== go-release around checkout reference ==\n'
rg -n "actions/checkout|# v6|# v7|checkout@" .github/workflows/go-release.yml

printf '\n== gitops-update workflow ==\n'
sed -n '1,240p' .github/workflows/gitops-update.yml

Repository: LerianStudio/github-actions-shared-workflows

Length of output: 19445


🏁 Script executed:

set -euo pipefail

printf '\n== gitops_layout references in gitops-update.yml ==\n'
rg -n "gitops_layout|helmfile|kustomize" .github/workflows/gitops-update.yml

printf '\n== validation / case logic near layout handling ==\n'
sed -n '240,520p' .github/workflows/gitops-update.yml

printf '\n== later sections with layout-specific steps ==\n'
sed -n '520,920p' .github/workflows/gitops-update.yml

Repository: LerianStudio/github-actions-shared-workflows

Length of output: 36473


Reject unsupported gitops_layout values before calling gitops-update.yml. This input is free-form, so typos fall through to the helmfile path and skip the yaml_key_mappings check. Add allowlist validation here so only helmfile and kustomize are accepted; that is a breaking change for callers using any other value.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/go-release.yml around lines 200 - 203, Validate the
`gitops_layout` workflow input against an allowlist containing only `helmfile`
and `kustomize` before invoking `gitops-update.yml`; reject all other values,
including typos, rather than routing them through the helmfile path.

Comment on lines 455 to +456
- name: Checkout repository
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

rg -n 'uses: actions/(checkout|setup-node)@|# v[0-9]' .github/workflows

Repository: LerianStudio/github-actions-shared-workflows

Length of output: 24092


🏁 Script executed:

#!/bin/bash
set -euo pipefail

resolve_tag_commit() {
  local repo="$1" tag="$2"
  ref_json=$(gh api "repos/$repo/git/refs/tags/$tag")
  type=$(jq -r '.object.type' <<<"$ref_json")
  sha=$(jq -r '.object.sha' <<<"$ref_json")

  if [[ "$type" == "tag" ]]; then
    gh api "repos/$repo/git/tags/$sha" --jq '.object.sha'
  else
    echo "$sha"
  fi
}

for spec in \
  "actions/checkout v7.0.1 3d3c42e5aac5ba805825da76410c181273ba90b1" \
  "actions/setup-node v7.0.0 820762786026740c76f36085b0efc47a31fe5020"
do
  set -- $spec
  repo=$1 tag=$2 pinned=$3
  tag_commit=$(resolve_tag_commit "$repo" "$tag")
  echo "$repo@$tag -> $tag_commit"
  echo "pinned  -> $pinned"
  if [[ "$tag_commit" == "$pinned" ]]; then
    echo "MATCH"
  else
    echo "DIFF"
  fi
  gh api "repos/$repo/commits/$pinned" --jq '.sha' >/dev/null
done

Repository: LerianStudio/github-actions-shared-workflows

Length of output: 436


🏁 Script executed:

#!/bin/bash
set -euo pipefail

for file_range in \
  ".github/workflows/go-release.yml:445-470" \
  ".github/workflows/lerian-lib-version-check.yml:80-95" \
  ".github/workflows/pr-security-scan.yml:176-195" \
  ".github/workflows/pr-validation.yml:45-60" \
  ".github/workflows/release-notification.yml:118-132" \
  ".github/workflows/release.yml:185-205" \
  ".github/workflows/self-pr-validation.yml:45-60" \
  ".github/workflows/version-propagation.yml:56-70"
do
  file=${file_range%%:*}
  range=${file_range#*:}
  echo "===== $file ($range) ====="
  sed -n "$range" "$file" | cat -n
done

Repository: LerianStudio/github-actions-shared-workflows

Length of output: 289


🌐 Web query:

actions/checkout 3d3c42e5aac5ba805825da76410c181273ba90b1 v7.0.1 actions/setup-node 820762786026740c76f36085b0efc47a31fe5020 v7.0.0

💡 Result:

The specific commits and versions you provided for the GitHub Actions are identified as follows: 1. actions/checkout: The commit 3d3c42e5aac5ba805825da76410c181273ba90b1 corresponds to the v7.0.1 release [1][2][3]. This release was published on July 20, 2026, and includes various updates such as skipping unsafe PR checks when using default inputs, trimming only ASCII whitespace for branches, and escaping values passed to --unset [1][4]. 2. actions/setup-node: The commit 820762786026740c76f36085b0efc47a31fe5020 corresponds to the v7.0.0 release [5][6]. This release was published on July 14, 2026, and introduced significant changes including a migration to ESM, improved dependency management, and new output capabilities such as cache-primary-key and cache-matched-key [5][7][6]. In GitHub Actions workflows, pinning these actions to specific commit SHAs (as shown in your examples) is a best practice for security and stability, ensuring the workflow uses the exact version of the code intended regardless of future updates to tag references [8].

Citations:


🌐 Web query:

"3d3c42e5aac5ba805825da76410c181273ba90b1" actions/checkout "820762786026740c76f36085b0efc47a31fe5020" actions/setup-node

💡 Result:

The provided strings are full-length, 40-character SHA-1 commit hashes used to pin specific versions of GitHub Actions for security and consistency [1][2][3]. By referencing a commit SHA instead of a mutable tag (like @v7), you ensure that your workflow runs exactly the same code every time, protecting your builds against potential upstream changes or malicious tag updates [1][2][3]. The specific hashes are: 1. 3d3c42e5aac5ba805825da76410c181273ba90b1: This commit hash corresponds to the actions/checkout repository, specifically associated with the preparations for the v7.0.1 release [4][5][6]. 2. 820762786026740c76f36085b0efc47a31fe5020: This commit hash belongs to the actions/setup-node repository. It represents the commit that migrated the action to ESM (ECMAScript Modules) and upgraded its dependencies, aligning with the v7.0.0 release [7][8][9]. It is a recommended best practice to use these full-length commit SHAs in your workflow YAML files, often while keeping the human-readable version tag as a trailing comment to facilitate dependency management and clarity [1][2][9]. For example: - uses: actions/checkout@3d3c42e # v7.0.1 - uses: actions/setup-node@8207627 # v7.0.0

Citations:


Update the action version comments.

  • actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 should be annotated # v7.0.1 in .github/workflows/go-release.yml, .github/workflows/lerian-lib-version-check.yml, .github/workflows/pr-security-scan.yml, .github/workflows/pr-validation.yml, .github/workflows/release-notification.yml, .github/workflows/release.yml, .github/workflows/self-pr-validation.yml, and .github/workflows/version-propagation.yml.
  • actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 should be annotated # v7.0.0 in .github/workflows/release.yml.
📍 Affects 8 files
  • .github/workflows/go-release.yml#L455-L456 (this comment)
  • .github/workflows/lerian-lib-version-check.yml#L87-L88
  • .github/workflows/pr-security-scan.yml#L184-L185
  • .github/workflows/pr-validation.yml#L51-L52
  • .github/workflows/release-notification.yml#L126-L127
  • .github/workflows/release.yml#L193-L194
  • .github/workflows/self-pr-validation.yml#L51-L52
  • .github/workflows/version-propagation.yml#L62-L63
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/go-release.yml around lines 455 - 456, Update the action
version comments for the checkout steps in
.github/workflows/go-release.yml:455-456,
.github/workflows/lerian-lib-version-check.yml:87-88,
.github/workflows/pr-security-scan.yml:184-185,
.github/workflows/pr-validation.yml:51-52,
.github/workflows/release-notification.yml:126-127,
.github/workflows/release.yml:193-194,
.github/workflows/self-pr-validation.yml:51-52, and
.github/workflows/version-propagation.yml:62-63 to annotate the specified
actions/checkout SHA as v7.0.1; additionally annotate the specified
actions/setup-node SHA in .github/workflows/release.yml with v7.0.0.

Source: Coding guidelines

steps:
- name: Checkout
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v4
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v4

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

git ls-remote --tags https://github.com/actions/checkout.git \
  refs/tags/v4 refs/tags/v6 refs/tags/v7.0.1

git ls-remote --tags https://github.com/actions/setup-go.git \
  refs/tags/v6 refs/tags/v7

Repository: LerianStudio/github-actions-shared-workflows

Length of output: 456


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

for file in \
  .github/workflows/helm-release-notification.yml \
  .github/workflows/gptchangelog.yml \
  .github/workflows/helm-alpha-release.yml \
  .github/workflows/helm-update-chart.yml
do
  echo "===== $file ====="
  nl -ba "$file" | sed -n '1,260p' | rg -n "actions/(checkout|setup-go)@|# v[0-9]"
done

Repository: LerianStudio/github-actions-shared-workflows

Length of output: 279


🏁 Script executed:

#!/usr/bin/env bash
set -euo pipefail

for file in \
  .github/workflows/helm-release-notification.yml \
  .github/workflows/gptchangelog.yml \
  .github/workflows/helm-alpha-release.yml \
  .github/workflows/helm-update-chart.yml
do
  echo "===== $file ====="
  sed -n '1,260p' "$file" | grep -nE 'actions/(checkout|setup-go)@|# v[0-9]'
done

Repository: LerianStudio/github-actions-shared-workflows

Length of output: 1325


Update the stale action version comments.

actions/checkout is pinned to v7.0.1 in the listed workflows, but the inline comments still say # v4/# v6; actions/setup-go is pinned to v7, but the comment says # v6.

  • .github/workflows/helm-release-notification.yml#L88
  • .github/workflows/gptchangelog.yml#L65, #L142, #L260
  • .github/workflows/helm-alpha-release.yml#L56
  • .github/workflows/helm-update-chart.yml#L170
  • .github/workflows/helm-update-chart.yml#L211 (actions/setup-go# v7)
📍 Affects 4 files
  • .github/workflows/helm-release-notification.yml#L88-L88 (this comment)
  • .github/workflows/gptchangelog.yml#L65-L65
  • .github/workflows/gptchangelog.yml#L142-L142
  • .github/workflows/gptchangelog.yml#L260-L260
  • .github/workflows/helm-alpha-release.yml#L56-L56
  • .github/workflows/helm-update-chart.yml#L170-L170
  • .github/workflows/helm-update-chart.yml#L211-L211
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/helm-release-notification.yml at line 88, Update the
inline action version comments at
.github/workflows/helm-release-notification.yml:88,
.github/workflows/gptchangelog.yml:65, :142, and :260,
.github/workflows/helm-alpha-release.yml:56, and
.github/workflows/helm-update-chart.yml:170 to # v7.0.1 for actions/checkout;
update .github/workflows/helm-update-chart.yml:211 to # v7 for actions/setup-go.
Do not change the pinned action references.

Comment on lines 184 to +185
- name: Checkout Repository
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Disable persisted checkout credentials in read-only workflows.

  • .github/workflows/pr-security-scan.yml#L184-L185: add persist-credentials: false to both scanning checkouts.
  • .github/workflows/pr-validation.yml#L51-L52: add it to every validation checkout.
  • .github/workflows/release-notification.yml#L126-L127: add it to the notification checkout.
  • .github/workflows/self-pr-validation.yml#L51-L52: add it to every self-validation checkout.

The release workflows that perform Git writes are intentionally excluded.

       - name: Checkout
         uses: actions/checkout@<sha>
         with:
+          persist-credentials: false
📝 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: Checkout Repository
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6
- name: Checkout Repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6
with:
persist-credentials: false
🧰 Tools
🪛 zizmor (1.26.1)

[warning] 184-185: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false

(artipacked)

📍 Affects 4 files
  • .github/workflows/pr-security-scan.yml#L184-L185 (this comment)
  • .github/workflows/pr-validation.yml#L51-L52
  • .github/workflows/release-notification.yml#L126-L127
  • .github/workflows/self-pr-validation.yml#L51-L52
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/pr-security-scan.yml around lines 184 - 185, Disable
persisted checkout credentials by adding persist-credentials: false to the
checkout steps in .github/workflows/pr-security-scan.yml (lines 184-185), every
validation checkout in .github/workflows/pr-validation.yml (lines 51-52) and
.github/workflows/self-pr-validation.yml (lines 51-52), and the notification
checkout in .github/workflows/release-notification.yml (lines 126-127). Do not
modify release workflows that perform Git writes.

Source: Linters/SAST tools

runs-on: ${{ vars.GENERAL_RUNNERS || inputs.runner_type }}
steps:
- uses: actions/checkout@v6.0.3
- uses: actions/checkout@v7.0.1

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

rg -n 'uses:\s*actions/checkout@' .github/workflows/s3-upload.yml
if rg -nP 'uses:\s*actions/checkout@(?![0-9a-f]{40}\b)' .github/workflows/s3-upload.yml; then
  echo "Checkout is not pinned to a commit SHA"
  exit 1
fi

Repository: LerianStudio/github-actions-shared-workflows

Length of output: 305


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Inspect the workflow around the checkout and upload steps.
cat -n .github/workflows/s3-upload.yml | sed -n '1,220p'

echo
echo '---'
echo 'Checkout release tag resolution (if gh is available)'
if command -v gh >/dev/null 2>&1; then
  gh api repos/actions/checkout/git/refs/tags/v7.0.1 --jq '.object'
else
  echo 'gh not available'
fi

Repository: LerianStudio/github-actions-shared-workflows

Length of output: 9957


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Look for the upload pattern and any handling of hidden files or .git.
rg -n 'PATTERN|upload|.git|persist-credentials|checkout' .github/workflows/s3-upload.yml

Repository: LerianStudio/github-actions-shared-workflows

Length of output: 1758


🏁 Script executed:

#!/bin/bash
set -euo pipefail

sed -n '220,300p' .github/workflows/s3-upload.yml | cat -n

Repository: LerianStudio/github-actions-shared-workflows

Length of output: 2051


Pin actions/checkout and disable persisted credentials. actions/checkout@v7.0.1 is still a mutable tag, and the default persist-credentials leaves the repo token in .git/config, which this upload workflow can expose if the pattern matches repository metadata.

Suggested change
-      - uses: actions/checkout@v7.0.1
+      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
+        with:
+          persist-credentials: false
📝 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
- uses: actions/checkout@v7.0.1
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
🧰 Tools
🪛 zizmor (1.26.1)

[warning] 129-129: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false

(artipacked)


[error] 129-129: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/s3-upload.yml at line 129, Update the checkout step using
actions/checkout to pin it to an immutable commit SHA instead of the mutable
v7.0.1 tag, and set persist-credentials to false so the repository token is not
retained in Git configuration.

Sources: Coding guidelines, Linters/SAST tools

Comment on lines +86 to +89
uses: actions/checkout@v7.0.1

- name: Setup Node.js
uses: actions/setup-node@v6
uses: actions/setup-node@v7

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

if rg -nP 'uses:\s*actions/(checkout|setup-node)@(?![0-9a-f]{40}\b)' \
  .github/workflows/typescript-ci.yml; then
  echo "Found unpinned checkout/setup-node references"
  exit 1
fi

Repository: LerianStudio/github-actions-shared-workflows

Length of output: 554


Pin the GitHub Actions refs by commit SHA

.github/workflows/typescript-ci.yml still uses mutable tags for all actions/checkout and actions/setup-node calls (v7.0.1 / v7). Replace each reference with the matching commit SHA and keep the version comment.

🧰 Tools
🪛 zizmor (1.26.1)

[error] 86-86: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)


[error] 89-89: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/typescript-ci.yml around lines 86 - 89, Update every
actions/checkout and actions/setup-node reference in the typescript CI workflow
to use its matching immutable commit SHA instead of the v7.0.1 or v7 tags, while
retaining the existing version comment alongside each SHA.

Sources: Coding guidelines, Linters/SAST tools

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

build Changes to build and artifact composite actions (src/build/) changelog Changes to changelog generation composite actions (src/changelog/) documentation Improvements or additions to documentation golang Changes to Go-related workflows notify Changes to notification composite actions (src/notify/) security Changes to security workflows or vulnerability reporting policy size/M PR changes 200–499 lines typescript Changes to TypeScript or Frontend workflows validate Changes to PR validation composite actions (src/validate/) workflow Changes to one or more reusable workflow files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants