Skip to content

feat(action): add composite GitHub Action to install gddy CLI - #301

Merged
jpage-godaddy merged 4 commits into
mainfrom
action
Sep 30, 2026
Merged

jpage-godaddy merged 4 commits into
mainfrom
action

Conversation

@jpage-godaddy

@jpage-godaddy jpage-godaddy commented Sep 29, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

  • Adds action/action.yml, a composite GitHub Action that wraps action/install.sh/action/install.ps1 so workflows can install gddy via uses: godaddy/cli/action@action-v1.
  • Versions the action independently of the CLI itself via a new action release-please package (action-vX.Y.Z tags + a floating action-v1 major tag), so action-only changes never bump or interleave with the CLI's own gddy release train:
    • separate-pull-requests: true so simultaneous rust/action version bumps never get bundled into one release PR.
    • The CLI's build/attach pipeline is gated on the rust package's own release_created output (not the cross-package aggregate), so an action-only release can't trigger a spurious CLI build.
    • An action-only release is explicitly kept off the repo's "latest" release (it has no CLI binaries attached, and releases/latest/download/install.sh must keep pointing at a real gddy release).
  • install.sh/install.ps1 moved from the repo root into action/, so the action's release-please package actually covers the installer scripts it runs. Their public download URLs (releases/.../download/install.sh) are unaffected — GitHub Release assets are keyed by filename, not source path — and the two gh release upload call sites (release.yml, rust-port-alpha.yaml) were updated accordingly.
  • Adds .github/workflows/action-test.yml to exercise the action end-to-end (latest + a pinned version) on Ubuntu/macOS/Windows.
  • Adds a "GitHub Actions" usage section to the README.

The action itself passes the version input through environment variables (not template-interpolated into the shell/PowerShell source) to close a command-injection vector, and skips install.ps1's normal persistent user-PATH registry write on Windows (relying on $GITHUB_PATH instead) so it doesn't leave a stale PATH entry on long-lived runners.

Test plan

  • All workflow/action YAML validated and actionlint-clean.
  • action-test.yml passes on this PR (latest + pinned v0.2.23, all three OSes) — confirms the action installs gddy and adds it to PATH.
  • cicd, drift, CodeQL/Analyze, and Conventional commit all pass.
  • GitHub Copilot review: 7 findings raised across 3 rounds (2 command-injection, a "latest release" clobber risk, a release-please aggregate-output gating bug, missing separate-pull-requests, installer-scripts-out-of-package-scope, and a Windows PATH-persistence side effect) — all fixed and resolved; final review is a clean approval with zero findings.
  • After merge: confirm release-please opens an independent "action" release PR the next time action/** changes, without touching the rust/gddy package's pending version.

🤖 Generated with Claude Code

Adds action/action.yml wrapping install.sh/install.ps1 so workflows can
install gddy via `uses: godaddy/cli/action@action-v1`. Versioned as its
own release-please package (action-vX.Y.Z tags, floating action-v1
major tag) so action-only changes never bump or interleave with the
CLI's own gddy release train.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot review overview

🟡 Changes recommended

Shell injection risks and action-only release handling can compromise runners and break default CLI installation.

Review effort: Balanced
Findings: 3 High severity · 3 Medium severity

Open (6)
What changed in this PR

Adds a composite GitHub Action for installing gddy, with independent release automation and cross-platform tests.

Changes:

  • Adds Linux, macOS, and Windows installation action.
  • Adds action-specific release versioning and floating major tag.
  • Documents and tests latest and pinned installations.
File Description
action/​action.yml Defines the composite installer action.
.github/​workflows/​action-test.yml Tests installations across supported runners.
.github/​workflows/​release.yml Publishes the floating action major tag.
release-please-config.json Configures the action release package.
.release-please-manifest.json Initializes action version tracking.
README.md Documents action usage.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread action/action.yml
Comment thread action/action.yml
Comment thread release-please-config.json
Comment thread .github/workflows/release.yml
Comment thread release-please-config.json
Comment thread release-please-config.json
- Pass the version input through env vars instead of template
  interpolation in both install steps, closing a command-injection
  vector via a crafted `version` value.
- Never let an action-only release become the repo's "latest" release
  (it has no binaries attached, and gddy's own install one-liner
  depends on `releases/latest/download/*`).
- Gate the CLI build/attach pipeline on the rust package's own
  release-please output instead of the cross-package aggregate, so an
  action-only release can no longer trigger a spurious CLI build.
- Enable separate-pull-requests so simultaneous rust/action version
  bumps never get bundled into one release PR.
- Move install.sh/install.ps1 under action/ so the action's own
  release-please package actually covers the scripts it runs; their
  release-asset download URLs are unaffected since GitHub Release
  assets are keyed by filename, not source path.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot review overview

🟡 Changes recommended

The Windows action permanently adds its temporary installation directory to the user PATH on self-hosted runners.

Review effort: Balanced
Findings: 1 Medium severity

Open (1)
Resolved since last review (6)

Comment thread action/action.yml
install.ps1's normal PATH update writes to the Windows user's registry
PATH, which is the right behavior for a real end-user install but an
unwanted, persistent side effect on a (especially self-hosted) CI
runner. Add -SkipPathUpdate so the action can rely solely on
$GITHUB_PATH for job-scoped PATH, same as the Linux/macOS step already
does.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot review overview

🟢 Approval recommended

The action, installers, tests, documentation, and independent release workflow are consistently integrated with no unresolved issues found.

Review effort: Balanced
Findings: None

Resolved since last review (1)

@mguerrero3-godaddy mguerrero3-godaddy left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

lgtm!

@jpage-godaddy
jpage-godaddy merged commit acd616d into main Sep 30, 2026
11 checks passed
@jpage-godaddy
jpage-godaddy deleted the action branch September 30, 2026 15:56
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.

3 participants