Skip to content

fix: adopt caido/action-release for immutable releases#7

Merged
aleister1102 merged 1 commit intomainfrom
fix/release-workflow
Feb 10, 2026
Merged

fix: adopt caido/action-release for immutable releases#7
aleister1102 merged 1 commit intomainfrom
fix/release-workflow

Conversation

@aleister1102
Copy link
Owner

Summary

  • Switch release workflow from tag-push trigger to workflow_dispatch
  • Use caido/action-release@v1 with immutableCreate: true (matches official Caido community pattern)
  • Tag name is now the raw version from manifest.json (no v prefix), matching the store checklist requirement
  • Add branch guard (main only) and signing validation
  • Update README releasing instructions

Context

Required for caido/store#74 PR checklist:

  • "Release immutability is enabled"
  • "GitHub Tag name matches the version number specified in my caido.config.json"

Made with Cursor

…ix tags

- Switch from tag-push trigger to workflow_dispatch
- Use caido/action-release@v1 with immutableCreate
- Extract version from manifest.json for tag name (no v prefix)
- Add branch guard and signing validation
- Update README releasing instructions

Co-authored-by: Cursor <cursoragent@cursor.com>
Copilot AI review requested due to automatic review settings February 10, 2026 03:12
@aleister1102 aleister1102 merged commit 999b97b into main Feb 10, 2026
3 checks passed
Copy link

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 release process to follow the Caido community “immutable releases” pattern by switching to a manually-triggered workflow and using caido/action-release with immutable creation enabled, while aligning tag naming with the plugin version.

Changes:

  • Change release workflow trigger from tag-push (v*) to workflow_dispatch, with a main-branch guard.
  • Replace softprops/action-gh-release with caido/action-release@v1 and enable immutableCreate: true.
  • Extract the release tag version from manifest.json inside the built plugin zip, and update README release instructions accordingly.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.

File Description
README.md Updates release instructions to use the manual “Run workflow” flow and immutable releases.
.github/workflows/release.yml Implements workflow_dispatch release flow, adds branch guard + signing check, uses caido/action-release with immutable release creation and version-derived tag.

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

Comment on lines 26 to 35
@@ -25,14 +35,28 @@ jobs:
run: npm run build
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

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

The workflow uses npm install/npm run build even though the repo is bun-first (bun.lock + README/.agents docs). This means the release build can ignore the lockfile and produce non-reproducible artifacts. Consider setting up bun in this workflow and using bun install --frozen-lockfile + bun run build (or bun run package if that's the intended release artifact).

Copilot uses AI. Check for mistakes.
Comment on lines +45 to +46
openssl pkeyutl -sign -inkey private_key.pem -out plugin_package.zip.sig -rawin -in plugin_package.zip
rm private_key.pem
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

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

The private key file is removed only on the happy path. If openssl pkeyutl fails, the rm private_key.pem line won’t run and the key can remain in the workspace for subsequent steps. Consider using a trap (as the previous version did) to ensure cleanup on failure, and/or running the signing step in a subshell that always deletes the file.

Suggested change
openssl pkeyutl -sign -inkey private_key.pem -out plugin_package.zip.sig -rawin -in plugin_package.zip
rm private_key.pem
trap 'rm -f private_key.pem' EXIT
openssl pkeyutl -sign -inkey private_key.pem -out plugin_package.zip.sig -rawin -in plugin_package.zip

Copilot uses AI. Check for mistakes.
echo "${{ secrets.PRIVATE_KEY }}" > private.pem
openssl pkeyutl -sign -inkey private.pem -out plugin_package.zip.sig -rawin -in dist/plugin_package.zip
VERSION=$(unzip -p plugin_package.zip manifest.json | jq -r .version)
echo "version=${VERSION}" >> $GITHUB_OUTPUT
Copy link

Copilot AI Feb 10, 2026

Choose a reason for hiding this comment

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

jq -r .version will output the literal string null (exit code 0) if the manifest is missing a version field, which would then be used as the Git tag. Add validation that VERSION is non-empty and not null (and optionally matches the expected semver format) before writing it to $GITHUB_OUTPUT.

Suggested change
echo "version=${VERSION}" >> $GITHUB_OUTPUT
if [ -z "$VERSION" ] || [ "$VERSION" = "null" ]; then
echo "Error: manifest.json is missing a valid 'version' field."
exit 1
fi
echo "version=${VERSION}" >> "$GITHUB_OUTPUT"

Copilot uses AI. Check for mistakes.
@aleister1102 aleister1102 deleted the fix/release-workflow branch March 2, 2026 15:45
@aleister1102 aleister1102 added the bug Something isn't working label Mar 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants