Skip to content

feat: update command always updates core actions (actions/*) to latest major version#18692

Merged
pelikhan merged 8 commits intomainfrom
copilot/update-core-actions-to-latest
Feb 27, 2026
Merged

feat: update command always updates core actions (actions/*) to latest major version#18692
pelikhan merged 8 commits intomainfrom
copilot/update-core-actions-to-latest

Conversation

Copy link
Contributor

Copilot AI commented Feb 27, 2026

The update command was not updating actions/* core actions to newer major versions, nor updating action references hardcoded in user-provided workflow steps — requiring manual PRs like #18688 to bump e.g. actions/checkout@v4 → v6, actions/setup-go@v5 → v6.

Changes

UpdateActions: core actions bypass --major restriction

  • Added isCoreAction(repo) — true for any actions/* repo
  • UpdateActions now uses allowMajor || isCoreAction(entry.Repo), so actions/* entries in actions-lock.json always update to the latest major version regardless of the user's --major flag

UpdateActionsInWorkflowFiles

Scans all .md workflow files (recursively, including subdirectories like .github/workflows/shared/) and updates uses: actions/*@<ref> references:

  • Version tags (@v7) → updated to new tag (@v8)
  • SHA-pinned (@abc123 or @abc123 # v6.1.0) → updated to new SHA with version comment (@newsha # v6.3.0)
  • Results are cached per repo/version within a single run to avoid redundant API calls
  • Updated files are recompiled automatically
        uses: actions/github-script@v7           →  uses: actions/github-script@v8
        uses: actions/setup-go@4dc6199c # v6.1.0 →  uses: actions/setup-go@4b73464b  # v6.3.0
        uses: actions/checkout@11bd719...         →  uses: actions/checkout@de0fac2...  # v6.0.2

RunUpdateWorkflows: wires both steps

  • Calls UpdateActions and UpdateActionsInWorkflowFiles after source-workflow updates
  • Both are non-fatal (warn on failure, don't abort the update)
  • UpdateWorkflows errors are preserved and returned after action updates complete

Testing

  • getLatestActionRelease is now injectable via getLatestActionReleaseFn func var, enabling unit tests without network calls
  • Added tests for version-tag replacement, SHA-pinned replacement, and cache reuse verification

Applied updates to repository workflows

Ran the update command effect on the existing workflow files in this repository:

  • bot-detection.md: actions/github-script@v7@v8
  • daily-syntax-error-quality.md: actions/setup-go@v5@v6
  • hourly-ci-cleaner.md: actions/checkout@11bd719...@de0fac2... # v6.0.2
  • release.md: actions/github-script@v7@v8
  • release.md: actions/setup-go@4dc6199... # v6.1.0@7a3fe6c... # v6.2.0
  • All 161 workflow lock files recompiled to reflect the updated action versions
Original prompt

The "update" command should always update core actions (actions/*) to the last major version and the sha associated to that version.

It needs to update the generated code but also user provided steps.

See #18688 for various missing updates.


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.


Changeset

  • Type: patch
  • Description: update command now forces actions/* updates and refreshes workflow uses: references when updating workflows

Generated by Changeset Generator for issue #18692

Warning

⚠️ Firewall blocked 1 domain

The following domain was blocked by the firewall during workflow execution:

  • github.com

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "github.com"

See Network Configuration for more information.



✨ PR Review Safe Output Test - Run 22490809219

💥 [THE END] — Illustrated by Smoke Claude

…t major version

- Add isCoreAction() helper to identify repos under actions/ org
- Modify UpdateActions to always allow major version bumps for actions/*
- Add UpdateActionsInWorkflowFiles() to update uses: actions/*@Version in .md files
- Call both from RunUpdateWorkflows so update command handles both lock file and user-provided steps
- Add tests for isCoreAction and updateActionRefsInContent

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot AI changed the title [WIP] Update core actions to latest major version feat: update command always updates core actions (actions/*) to latest major version Feb 27, 2026
@pelikhan
Copy link
Contributor

@copilot run update command

if isSHA {
// Extract version from comment (e.g., " # v6.0.2" -> "v6.0.2")
if comment != "" {
commentVersion := strings.TrimSpace(strings.TrimPrefix(strings.TrimSpace(comment), "#"))

Choose a reason for hiding this comment

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

When a .md file has a bare SHA with no version comment (e.g., uses: actions/checkout@11bd719 like in hourly-ci-cleaner.md), currentVersion is set to "". Does getLatestActionRelease handle an empty version string gracefully? If it needs a version to determine the current major, passing "" might cause it to skip the update or error. Might be worth falling back to resolving the SHA to a tag via the API, or just defaulting to "v0" so it always picks up the latest.

- bot-detection.md: actions/github-script v7 → v8
- daily-syntax-error-quality.md: actions/setup-go v5 → v6
- hourly-ci-cleaner.md: actions/checkout SHA@11bd719 → @de0fac2 # v6.0.2
- release.md: actions/github-script v7 → v8
- release.md: actions/setup-go SHA@4dc6199 # v6.1.0 → @7a3fe6c # v6.2.0
- Recompiled all 161 workflows to update lock files

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Feb 27, 2026

@copilot run update command

Applied the updates in commit c2984c7:

  • bot-detection.md: actions/github-script@v7@v8
  • daily-syntax-error-quality.md: actions/setup-go@v5@v6
  • hourly-ci-cleaner.md: actions/checkout@11bd719...@de0fac2... # v6.0.2
  • release.md: actions/github-script@v7@v8
  • release.md: actions/setup-go@4dc6199... # v6.1.0@7a3fe6c... # v6.2.0

All 161 workflow lock files recompiled successfully.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • https://api.github.com/graphql
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw (http block)
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw pbzGPuv9dSPa (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v6
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq .object.sha (http block)
  • https://api.github.com/repos/actions/setup-node/git/ref/tags/v6
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v6 --jq .object.sha (http block)
  • https://api.github.com/repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq .object.sha (http block)
  • https://api.github.com/repos/docker/build-push-action/git/ref/tags/v6
    • Triggering command: /usr/bin/gh gh api /repos/docker/build-push-action/git/ref/tags/v6 --jq .object.sha .&#34; (http block)
    • Triggering command: /usr/bin/gh gh api /repos/docker/build-push-action/git/ref/tags/v6 --jq .object.sha (http block)
  • https://api.github.com/repos/docker/login-action/git/ref/tags/v3
    • Triggering command: /usr/bin/gh gh api /repos/docker/login-action/git/ref/tags/v3 --jq .object.sha (http block)
  • https://api.github.com/repos/docker/metadata-action/git/ref/tags/v5
    • Triggering command: /usr/bin/gh gh api /repos/docker/metadata-action/git/ref/tags/v5 --jq .object.sha (http block)
  • https://api.github.com/repos/docker/setup-buildx-action/git/ref/tags/v3
    • Triggering command: /usr/bin/gh gh api /repos/docker/setup-buildx-action/git/ref/tags/v3 --jq .object.sha tions-lock.json pkg/workflow/data/action_pins.json; \ echo &#34;��� Action pins synced successfullygit (http block)
    • Triggering command: /usr/bin/gh gh api /repos/docker/setup-buildx-action/git/ref/tags/v3 --jq .object.sha (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/a70c5eada06553e3510ac27f2c3bda9d3705bccb
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/a70c5eada06553e3510ac27f2c3bda9d3705bccb --jq .object.sha (http block)
  • https://api.github.com/repos/githubnext/agentics/git/ref/tags/
    • Triggering command: /usr/bin/gh gh api /repos/githubnext/agentics/git/ref/tags/# --jq .object.sha (http block)

If you need me to access, download, or install something from one of these locations, you can either:

@pelikhan pelikhan marked this pull request as ready for review February 27, 2026 14:21
Copilot AI review requested due to automatic review settings February 27, 2026 14:22
@pelikhan
Copy link
Contributor

@copilot merge main, recompile, run update

continue
}

if err := os.WriteFile(filePath, []byte(newContent), 0644); err != nil {

Choose a reason for hiding this comment

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

Nit: os.WriteFile with hardcoded 0644 will change the file's permissions if they were different (e.g., 0664 or 0600).

Copy link
Contributor

Choose a reason for hiding this comment

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

@copilot apply comment and leave a note as a comment in the go code

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Updates the update command to also bump GitHub core actions (actions/*) to the latest major version (and corresponding SHAs) both in actions-lock.json and in action references embedded in workflow source .md files.

Changes:

  • Ensure UpdateActions always allows major bumps for actions/* entries in .github/aw/actions-lock.json.
  • Add UpdateActionsInWorkflowFiles to rewrite uses: actions/*@... references in workflow .md files and recompile updated workflows.
  • Wire action updates into RunUpdateWorkflows, and apply the resulting action bumps to repository workflows + regenerated .lock.yml files.

Reviewed changes

Copilot reviewed 11 out of 11 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
pkg/cli/update_command.go Runs action lock + workflow reference updates as part of update, while preserving UpdateWorkflows error reporting.
pkg/cli/update_actions.go Implements core-action major-bump behavior and adds workflow .md scanning/updating logic.
pkg/cli/update_actions_test.go Adds unit tests for isCoreAction and no-op behavior when no actions/* refs are present.
.github/workflows/release.md Updates actions/github-script and actions/setup-go references.
.github/workflows/release.lock.yml Regenerates compiled workflow lock with updated action SHAs/versions.
.github/workflows/hourly-ci-cleaner.md Updates actions/checkout SHA pin and adds version comment.
.github/workflows/hourly-ci-cleaner.lock.yml Regenerates compiled workflow lock with updated action SHAs/versions.
.github/workflows/daily-syntax-error-quality.md Updates actions/setup-go major tag.
.github/workflows/daily-syntax-error-quality.lock.yml Regenerates compiled workflow lock with updated action SHAs/versions.
.github/workflows/bot-detection.md Updates actions/github-script major tag.
.github/workflows/bot-detection.lock.yml Regenerates compiled workflow lock with updated action SHAs/versions.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 277 to 310
func TestUpdateActionRefsInContent_NonCoreActionsUnchanged(t *testing.T) {
// Non-actions/* org references should not be modified by updateActionRefsInContent
// since it only processes "uses: actions/" prefixed references.
input := `steps:
- uses: docker/login-action@v3
- uses: github/codeql-action/upload-sarif@v3
- run: echo hello`

changed, newContent, err := updateActionRefsInContent(input, false)
if err != nil {
t.Fatalf("updateActionRefsInContent() error = %v", err)
}
if changed {
t.Errorf("updateActionRefsInContent() changed = true, want false for non-actions/* refs")
}
if newContent != input {
t.Errorf("updateActionRefsInContent() modified content for non-actions/* refs\nGot: %s\nWant: %s", newContent, input)
}
}

func TestUpdateActionRefsInContent_NoActionRefs(t *testing.T) {
input := `description: Test workflow
steps:
- run: echo hello
- run: echo world`

changed, _, err := updateActionRefsInContent(input, false)
if err != nil {
t.Fatalf("updateActionRefsInContent() error = %v", err)
}
if changed {
t.Errorf("updateActionRefsInContent() changed = true, want false for content with no action refs")
}
}
Copy link

Copilot AI Feb 27, 2026

Choose a reason for hiding this comment

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

The new workflow-reference updater (updateActionRefsInContent / UpdateActionsInWorkflowFiles) has no test that asserts actual replacements for version-tag and SHA-pinned forms. Since getLatestActionRelease hits external systems, consider injecting it behind an interface/func var so unit tests can stub it and verify that tags, SHAs, and generated version comments are updated as intended (including nested-workflow paths once recursion is added).

Copilot uses AI. Check for mistakes.
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Fixed in 32b407a — added getLatestActionReleaseFn as a package-level func var (defaulting to getLatestActionRelease) so tests can inject a stub. Three new tests added:

  • TestUpdateActionRefsInContent_VersionTagReplacement — verifies @v4@v6 updates
  • TestUpdateActionRefsInContent_SHAPinnedReplacement — verifies SHA+comment updates
  • TestUpdateActionRefsInContent_CacheReusedAcrossLines — verifies the stub is called only once for duplicate refs

Comment on lines 475 to 496
// UpdateActionsInWorkflowFiles scans all workflow .md files in workflowsDir
// and updates any "uses: actions/*@version" references to the latest major version.
// Updated files are recompiled. Core actions (actions/*) always update to latest major.
func UpdateActionsInWorkflowFiles(workflowsDir, engineOverride string, verbose bool) error {
if workflowsDir == "" {
workflowsDir = getWorkflowsDir()
}

updateLog.Printf("Updating action references in workflow files: dir=%s", workflowsDir)

entries, err := os.ReadDir(workflowsDir)
if err != nil {
return fmt.Errorf("failed to read workflows directory: %w", err)
}

var updatedFiles []string

for _, entry := range entries {
if entry.IsDir() || !strings.HasSuffix(entry.Name(), ".md") {
continue
}

Copy link

Copilot AI Feb 27, 2026

Choose a reason for hiding this comment

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

UpdateActionsInWorkflowFiles only iterates over os.ReadDir(workflowsDir) and skips subdirectories. In this repo there are workflow source files under nested paths (e.g. .github/workflows/shared/mcp-debug.md still references actions/checkout@v5), so these won’t be updated. Consider walking workflowsDir recursively (filepath.WalkDir) and applying the same update+recompile logic to all *.md files.

Copilot uses AI. Check for mistakes.
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Fixed in 32b407aUpdateActionsInWorkflowFiles now uses filepath.WalkDir to recurse into all subdirectories (including .github/workflows/shared/), applying the same update+recompile logic to all *.md files.


// actionRefPattern matches "uses: actions/repo@SHA-or-tag" in workflow files.
// Captures: (1) indentation+uses prefix, (2) repo path, (3) SHA or version tag,
// (4) optional version comment (e.g., "v6.0.2" from "# v6.0.2").
Copy link

Copilot AI Feb 27, 2026

Choose a reason for hiding this comment

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

The comment above actionRefPattern says it captures 4 groups, but the regex has 5 capturing groups (including the trailing whitespace group). Please update the comment to match the actual capture groups to avoid confusion/incorrect future edits.

Suggested change
// (4) optional version comment (e.g., "v6.0.2" from "# v6.0.2").
// (4) optional version comment (e.g., "v6.0.2" from "# v6.0.2"), (5) trailing whitespace.

Copilot uses AI. Check for mistakes.
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Fixed in 32b407a — comment now reads: (4) optional version comment (e.g., "v6.0.2" from "# v6.0.2"), (5) trailing whitespace.

Comment on lines 542 to 587
func updateActionRefsInContent(content string, verbose bool) (bool, string, error) {
changed := false
lines := strings.Split(content, "\n")

for i, line := range lines {
match := actionRefPattern.FindStringSubmatchIndex(line)
if match == nil {
continue
}

// Extract matched groups
prefix := line[match[2]:match[3]] // "uses: "
repo := line[match[4]:match[5]] // e.g. "actions/checkout"
ref := line[match[6]:match[7]] // SHA or version tag
comment := ""
if match[8] >= 0 {
comment = line[match[8]:match[9]] // e.g. " # v6.0.2"
}
trailing := ""
if match[10] >= 0 {
trailing = line[match[10]:match[11]]
}

// Determine the "current version" to pass to getLatestActionRelease
isSHA := IsCommitSHA(ref)
currentVersion := ref
if isSHA {
// Extract version from comment (e.g., " # v6.0.2" -> "v6.0.2")
if comment != "" {
commentVersion := strings.TrimSpace(strings.TrimPrefix(strings.TrimSpace(comment), "#"))
if commentVersion != "" {
currentVersion = commentVersion
} else {
currentVersion = ""
}
} else {
currentVersion = ""
}
}

// Get the latest version for this core action (always allow major)
latestVersion, latestSHA, err := getLatestActionRelease(repo, currentVersion, true, verbose)
if err != nil {
updateLog.Printf("Failed to get latest release for %s: %v", repo, err)
continue
}
Copy link

Copilot AI Feb 27, 2026

Choose a reason for hiding this comment

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

updateActionRefsInContent calls getLatestActionRelease (GitHub API / git ls-remote) for every matching line. With many workflows and repeated actions, this can result in a large number of redundant network calls and slow/flake the update command. Cache results per repo (and possibly per currentVersion/allowMajor) within a single run, and reuse the latestVersion/latestSHA across lines/files.

Copilot uses AI. Check for mistakes.
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Fixed in 32b407a — added a map[string]latestReleaseResult cache (keyed by repo|currentVersion) passed through updateActionRefsInContent. Each unique repo/version is resolved only once per UpdateActionsInWorkflowFiles call, regardless of how many files or lines reference it.

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Feb 27, 2026

@copilot merge main, recompile, run update

Done in commit 20419c3:

  1. Merged main — resolved trivial whitespace conflict in hourly-ci-cleaner.md (same SHA, single space vs double space before # v6.0.2)
  2. Recompiled — all 161 workflow lock files updated successfully
  3. Ran updategh aw update confirmed "No action references needed updating in workflow files" — all .md files are already on latest action versions

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • https://api.github.com/graphql
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw (http block)
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw jDb4iRrpL5Gz (http block)
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw -embedcfg /tmp/go-build764277749/b334/embedcfg -pack (http block)
  • https://api.github.com/repos/actions/ai-inference/releases
    • Triggering command: /usr/bin/gh gh api /repos/actions/ai-inference/releases --jq .[].tag_name (http block)
  • https://api.github.com/repos/actions/attest-build-provenance/releases
    • Triggering command: /usr/bin/gh gh api /repos/actions/attest-build-provenance/releases --jq .[].tag_name (http block)
  • https://api.github.com/repos/actions/cache/releases
    • Triggering command: /usr/bin/gh gh api /repos/actions/cache/releases --jq .[].tag_name (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/cache/releases --jq .[].tag_name ithub/workflows ored-by: pelikhan &lt;4175913&#43;pelikhan@users.noreply.github.com&gt; repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/cache/releases --jq .[].tag_name ithub/workflows (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v6
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq .object.sha (http block)
  • https://api.github.com/repos/actions/checkout/releases
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/releases --jq .[].tag_name (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/releases --jq .[].tag_name _.a (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/releases --jq .[].tag_name ithub/workflows ored-by: pelikhan &lt;4175913&#43;pelikhan@users.noreply.github.com&gt; repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } (http block)
  • https://api.github.com/repos/actions/create-github-app-token/releases
    • Triggering command: /usr/bin/gh gh api /repos/actions/create-github-app-token/releases --jq .[].tag_name (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/create-github-app-token/releases --jq .[].tag_name ithub/workflows (http block)
  • https://api.github.com/repos/actions/download-artifact/releases
    • Triggering command: /usr/bin/gh gh api /repos/actions/download-artifact/releases --jq .[].tag_name (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/download-artifact/releases --jq .[].tag_name ore-actions-to-latest^{commit} (http block)
  • https://api.github.com/repos/actions/github-script/releases
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/releases --jq .[].tag_name (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/releases --jq .[].tag_name from .github/aw to pkg/workflow/remote.origin.url (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/releases --jq .[].tag_name _.a (http block)
  • https://api.github.com/repos/actions/setup-dotnet/releases
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-dotnet/releases --jq .[].tag_name (http block)
  • https://api.github.com/repos/actions/setup-go/releases
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/releases --jq .[].tag_name (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/releases --jq .[].tag_name on (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/releases --jq .[].tag_name .version=c2984c7-dirty&#34; -o gh-aw ./cmd/gh-aw (http block)
  • https://api.github.com/repos/actions/setup-java/releases
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-java/releases --jq .[].tag_name (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-java/releases --jq .[].tag_name ithub/workflows ored-by: pelikhan &lt;4175913&#43;pelikhan@users.noreply.github.com&gt; sh (http block)
  • https://api.github.com/repos/actions/setup-node/git/ref/tags/v6
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v6 --jq .object.sha (http block)
  • https://api.github.com/repos/actions/setup-node/releases
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/releases --jq .[].tag_name (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/releases --jq .[].tag_name successfully&#34; (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/releases --jq .[].tag_name 3 (http block)
  • https://api.github.com/repos/actions/setup-python/releases
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-python/releases --jq .[].tag_name (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-python/releases --jq .[].tag_name ithub/workflows (http block)
  • https://api.github.com/repos/actions/upload-artifact/releases
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/releases --jq .[].tag_name (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/releases --jq .[].tag_name ithub/workflows (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/releases --jq .[].tag_name ore-actions-to-latest^{commit} (http block)
  • https://api.github.com/repos/anchore/sbom-action/releases
    • Triggering command: /usr/bin/gh gh api /repos/anchore/sbom-action/releases --jq .[].tag_name (http block)
    • Triggering command: /usr/bin/gh gh api /repos/anchore/sbom-action/releases --jq .[].tag_name ithub/workflows ored-by: pelikhan &lt;4175913&#43;pelikhan@users.noreply.github.com&gt; repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } (http block)
    • Triggering command: /usr/bin/gh gh api /repos/anchore/sbom-action/releases --jq .[].tag_name ithub/workflows (http block)
  • https://api.github.com/repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq .object.sha (http block)
  • https://api.github.com/repos/astral-sh/setup-uv/releases
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/releases --jq .[].tag_name (http block)
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/releases --jq .[].tag_name ithub/workflows (http block)
  • https://api.github.com/repos/cli/gh-extension-precompile/releases
    • Triggering command: /usr/bin/gh gh api /repos/cli/gh-extension-precompile/releases --jq .[].tag_name (http block)
    • Triggering command: /usr/bin/gh gh api /repos/cli/gh-extension-precompile/releases --jq .[].tag_name ithub/workflows (http block)
  • https://api.github.com/repos/denoland/setup-deno/releases
    • Triggering command: /usr/bin/gh gh api /repos/denoland/setup-deno/releases --jq .[].tag_name (http block)
    • Triggering command: /usr/bin/gh gh api /repos/denoland/setup-deno/releases --jq .[].tag_name ithub/workflows (http block)
  • https://api.github.com/repos/docker/build-push-action/git/ref/tags/v6
    • Triggering command: /usr/bin/gh gh api /repos/docker/build-push-action/git/ref/tags/v6 --jq .object.sha .&#34; (http block)
    • Triggering command: /usr/bin/gh gh api /repos/docker/build-push-action/git/ref/tags/v6 --jq .object.sha (http block)
  • https://api.github.com/repos/docker/build-push-action/releases
    • Triggering command: /usr/bin/gh gh api /repos/docker/build-push-action/releases --jq .[].tag_name (http block)
  • https://api.github.com/repos/docker/login-action/git/ref/tags/v3
    • Triggering command: /usr/bin/gh gh api /repos/docker/login-action/git/ref/tags/v3 --jq .object.sha (http block)
  • https://api.github.com/repos/docker/login-action/releases
    • Triggering command: /usr/bin/gh gh api /repos/docker/login-action/releases --jq .[].tag_name (http block)
  • https://api.github.com/repos/docker/metadata-action/git/ref/tags/v5
    • Triggering command: /usr/bin/gh gh api /repos/docker/metadata-action/git/ref/tags/v5 --jq .object.sha (http block)
  • https://api.github.com/repos/docker/metadata-action/releases
    • Triggering command: /usr/bin/gh gh api /repos/docker/metadata-action/releases --jq .[].tag_name (http block)
  • https://api.github.com/repos/docker/setup-buildx-action/git/ref/tags/v3
    • Triggering command: /usr/bin/gh gh api /repos/docker/setup-buildx-action/git/ref/tags/v3 --jq .object.sha tions-lock.json pkg/workflow/data/action_pins.json; \ echo &#34;��� Action pins synced successfullygit (http block)
    • Triggering command: /usr/bin/gh gh api /repos/docker/setup-buildx-action/git/ref/tags/v3 --jq .object.sha (http block)
  • https://api.github.com/repos/docker/setup-buildx-action/releases
    • Triggering command: /usr/bin/gh gh api /repos/docker/setup-buildx-action/releases --jq .[].tag_name (http block)
  • https://api.github.com/repos/erlef/setup-beam/releases
    • Triggering command: /usr/bin/gh gh api /repos/erlef/setup-beam/releases --jq .[].tag_name (http block)
    • Triggering command: /usr/bin/gh gh api /repos/erlef/setup-beam/releases --jq .[].tag_name ithub/workflows (http block)
  • https://api.github.com/repos/github/codeql-action/releases
    • Triggering command: /usr/bin/gh gh api /repos/github/codeql-action/releases --jq .[].tag_name (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/a70c5eada06553e3510ac27f2c3bda9d3705bccb
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/a70c5eada06553e3510ac27f2c3bda9d3705bccb --jq .object.sha (http block)
  • https://api.github.com/repos/github/stale-repos/releases
    • Triggering command: /usr/bin/gh gh api /repos/github/stale-repos/releases --jq .[].tag_name (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/stale-repos/releases --jq .[].tag_name ithub/workflows (http block)
  • https://api.github.com/repos/githubnext/agentics
    • Triggering command: /usr/bin/gh gh api /repos/githubnext/agentics --jq .default_branch (http block)
  • https://api.github.com/repos/githubnext/agentics/git/ref/tags/
    • Triggering command: /usr/bin/gh gh api /repos/githubnext/agentics/git/ref/tags/# --jq .object.sha (http block)
  • https://api.github.com/repos/haskell-actions/setup/releases
    • Triggering command: /usr/bin/gh gh api /repos/haskell-actions/setup/releases --jq .[].tag_name (http block)
  • https://api.github.com/repos/oven-sh/setup-bun/releases
    • Triggering command: /usr/bin/gh gh api /repos/oven-sh/setup-bun/releases --jq .[].tag_name (http block)
  • https://api.github.com/repos/ruby/setup-ruby/releases
    • Triggering command: /usr/bin/gh gh api /repos/ruby/setup-ruby/releases --jq .[].tag_name (http block)
    • Triggering command: /usr/bin/gh gh api /repos/ruby/setup-ruby/releases --jq .[].tag_name _xROMhRg8 (http block)
  • https://api.github.com/repos/super-linter/super-linter/releases
    • Triggering command: /usr/bin/gh gh api /repos/super-linter/super-linter/releases --jq .[].tag_name (http block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot AI and others added 2 commits February 27, 2026 14:41
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
@github-actions
Copy link
Contributor

github-actions bot commented Feb 27, 2026

🌑 The shadows whisper... Smoke Codex failed. The oracle requires further meditation...

@github-actions
Copy link
Contributor

📰 BREAKING: Smoke Copilot is now investigating this pull request. Sources say the story is developing...

@github-actions
Copy link
Contributor

github-actions bot commented Feb 27, 2026

🎬 THE ENDSmoke Claude MISSION: ACCOMPLISHED! The hero saves the day! ✨

@github-actions
Copy link
Contributor

Commit pushed: 70a90fc

Generated by Changeset Generator

@github-actions
Copy link
Contributor

Agent Container Tool Check

Tool Status Version
bash 5.2.21
sh available
git 2.53.0
jq 1.7
yq 4.52.4
curl 8.5.0
gh 2.87.3
node 20.20.0
python3 3.12.3
go 1.24.13
java 10.0.102
dotnet 10.0.102

Result: 12/12 tools available ✅

Overall Status: PASS

🔧 Tool validation by Agent Container Smoke Test

@pelikhan pelikhan merged commit 65af980 into main Feb 27, 2026
54 checks passed
@pelikhan pelikhan deleted the copilot/update-core-actions-to-latest branch February 27, 2026 14:51
@github-actions
Copy link
Contributor

Smoke test §22490809225 results for @pelikhan:

Test Status
GitHub MCP
Safe Inputs GH CLI
Playwright
Web Fetch
File Writing + Bash
Discussion Interaction
Build gh-aw
Discussion Creation
Workflow Dispatch
PR Review

Overall: PASS ✅

📰 BREAKING: Report filed by Smoke Copilot

Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

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

Good PR! The isCoreAction helper cleanly separates the "always update" policy for actions/*. The UpdateActionsInWorkflowFiles function adds useful automation for keeping workflow files current. Two inline notes on the implementation details — nothing blocking.

📰 BREAKING: Report filed by Smoke Copilot


// isCoreAction returns true if the repo is a GitHub-maintained core action (actions/* org).
// Core actions are always updated to the latest major version without requiring --major.
func isCoreAction(repo string) bool {
Copy link
Contributor

Choose a reason for hiding this comment

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

Nice clean helper function! The HasPrefix check is simple and effective. One thought: if other "trusted" orgs need similar treatment in the future (e.g., github/), this could be extended to a slice of trusted prefixes. For now, actions/*-only is the right scope.

// actionRefPattern matches "uses: actions/repo@SHA-or-tag" in workflow files.
// Captures: (1) indentation+uses prefix, (2) repo path, (3) SHA or version tag,
// (4) optional version comment (e.g., "v6.0.2" from "# v6.0.2"), (5) trailing whitespace.
var actionRefPattern = regexp.MustCompile(`(uses:\s+)(actions/[a-zA-Z0-9_.-]+(?:/[a-zA-Z0-9_.-]+)*)@([a-fA-F0-9]{40}|[^\s#\n]+?)(\s*#\s*\S+)?(\s*)$`)
Copy link
Contributor

Choose a reason for hiding this comment

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

The regex captures SHA hashes (40 hex chars) and version tags correctly. The [^\s#\n]+? lazy match for version tags looks good. Worth noting: the $ anchor with a multiline regex could be tricky — make sure the regexp.MustCompile is used with line-by-line processing (which it is, based on the scanning logic in UpdateActionsInWorkflowFiles).

@github-actions
Copy link
Contributor

📰 VERDICT: Smoke Copilot has concluded. All systems operational. This is a developing story. 🎤

@github-actions
Copy link
Contributor

Smoke Test Results — Run §22490809219

Core tests #1–10: ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅
PR review tests #11–17: ✅ ✅ ✅ ✅ ✅ ❌ ⚠️

# Test
1 GitHub MCP (merged PRs)
2 SafeInputs GH CLI
3 Serena MCP (activate + find_symbol ≥3)
4 Make build
5 Playwright (github.com title)
6 Tavily search
7 File writing
8 Bash verify
9 Discussion query + comment
10 AW MCP status
11 Update PR body
12 PR review comments (2 inline)
13 Submit PR review
14 Resolve review thread
15 Add reviewer
16 Push to PR branch ❌ firewall blocked
17 Close test PR ⚠️ skipped

Overall: PARTIAL (push blocked by sandbox firewall)

💥 [THE END] — Illustrated by Smoke Claude

Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

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

💥 Automated smoke test review - all systems nominal!

💥 [THE END] — Illustrated by Smoke Claude

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants