Skip to content

ci: move publish/sign workflows from Forgejo to GitHub Actions - #3772

Merged
mfreeman451 merged 1 commit into
stagingfrom
ci/github-publish-workflows
Aug 18, 2026
Merged

ci: move publish/sign workflows from Forgejo to GitHub Actions#3772
mfreeman451 merged 1 commit into
stagingfrom
ci/github-publish-workflows

Conversation

@mfreeman451

Copy link
Copy Markdown
Collaborator

IMPORTANT: Please sign the Developer Certificate of Origin

Signed-off-by: Michael Freeman mfreeman451@gmail.com

Describe your changes

Move the publish/sign Forgejo workflows to .github/workflows/ so GitHub ARC (serviceradar-signing) is the release publisher. Catalog and security jobs use the GitHub Releases API. Wasm upload signing can use in-cluster OpenBao Transit (no laptop port-forward).

This does not recreate BuildBuddy / Bazel-owned suites as GitHub Actions:

  • main.yml
  • rust-musl.yml
  • rust-tests-addon-interop.yml
  • banner-grab-large.yml

Lint/check workflows already on GitHub (elixir-*, golangci-lint, helm-lint, secret-scan, web-ng-lint, rust-checks.yml) are left alone.

Issue ticket number and link

n/a — Forgejo publisher retirement

Code checklist before requesting a review

  • I have signed the DCO?
  • The build completes without errors?
  • All tests are passing when running make test?

Focused contracts ran: external Wasm release workflow, GitHub release publisher mock, first-party upload-key consistency, release publish contracts. make test was not re-run for the whole repo on this isolated branch.

Land the release publisher on GitHub ARC (serviceradar-signing) so v*
tags no longer depend on Forgejo. Catalog and security jobs talk to
the GitHub Releases API. Wasm upload signing can use in-cluster
OpenBao Transit.

Do not recreate BuildBuddy/Bazel-owned suites as Actions: main.yml,
rust-musl.yml, rust-tests-addon-interop.yml, banner-grab-large.yml.

Signed-off-by: Michael Freeman <mfreeman451@gmail.com>
Copilot AI lite review requested due to automatic review settings August 18, 2026 03:22
@mfreeman451
mfreeman451 merged commit 6e8d832 into staging Aug 18, 2026
6 checks passed
@mfreeman451
mfreeman451 deleted the ci/github-publish-workflows branch August 18, 2026 03:23

Copilot AI 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.

Pull request overview

This PR migrates the publish/sign release pipeline from Forgejo Actions to GitHub Actions (ARC runners), updating release publishing to use the GitHub Releases API and moving Wasm upload signing to OpenBao Transit-backed signing instead of long-lived CI secrets.

Changes:

  • Ported release, native-addons, wasm-plugins, and security publishing workflows to .github/workflows/ with ARC runner labels (serviceradar-signing, arc-runner-set).
  • Updated release tooling/scripts to support GitHub Releases API semantics (draft visibility, uploads API), and refreshed the associated contract tests.
  • Added/rolled forward first-party Wasm upload signing key support (v2) and wired Transit signing into the Wasm signing toolchain/config.

Reviewed changes

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

Show a summary per file
File Description
scripts/upload-forgejo-release-asset.sh Release asset upload helper updated to support GitHub Releases API semantics.
scripts/test-release-publish-contracts.sh Contract test updated to assert GitHub workflow/API behavior and updated image spec counts.
scripts/test-publish-external-wasm-plugin-release.py External Wasm plugin release contract test updated for GitHub Releases API endpoints.
scripts/test-external-wasm-plugin-release-workflow.sh Workflow contract assertions updated for .github/workflows/external-wasm-plugin.yml.
scripts/publish-external-wasm-plugin-release.sh External plugin release publishing updated from Forgejo to GitHub API + uploads API.
scripts/ci/prepare-openbao-cosign-env.sh Updated OpenBao auth role and added Transit upload-signing env defaults/unsets.
scripts/BUILD.bazel Bazel sh_test inputs updated from .forgejo/workflows/* to .github/workflows/*.
RELEASE.md Release guide updated to reference GitHub Releases and Transit-preferred upload signing.
helm/serviceradar/values-demo.yaml Demo overlay updated to trust both v1 and v2 first-party upload signing keys.
first_party_plugin_cosign_key_consistency_test.py Consistency test extended to validate v2 (Transit) key matches Helm + Elixir config.
elixir/web-ng/config/config.exs Web-NG plugin verification config updated to include v2 trusted upload key.
docs/SBOM.md SBOM docs updated to reference GitHub Actions workflow locations.
docs/RELEASE_PUBLISHING.md Release publishing docs updated to reflect GitHub Actions/ARC-based publisher.
build/wasm_plugins/upload_signature_tool.go Wasm upload signature tool extended to sign via OpenBao/Vault Transit and fetch public key.
build/wasm_plugins/upload_signature_tool_test.go Added test coverage for Transit-backed signing + verification.
build/release/publish_packages.go Release publishing client updated for GitHub API behavior (draft discovery, auth/accept headers, uploads).
BUILD.bazel Exported workflow files updated to .github/workflows/*.
.github/workflows/wasm-plugins.yml GitHub Actions workflow for publishing Wasm plugins and release import index.
.github/workflows/source-security.yml Source SBOM/security workflow updated to wait for and upload assets to GitHub Releases.
.github/workflows/release.yml Main release workflow migrated to GitHub Releases API and ARC runner environment.
.github/workflows/publish-oci.yml OCI publish workflow migrated to ARC runner and updated environment wiring.
.github/workflows/palisade-publish.yml Palisade Hex publish workflow moved to ARC runner and GitHub wording/permissions.
.github/workflows/native-addons.yml Native add-on publish workflow migrated to GitHub API and shared asset uploader helper.
.github/workflows/inspect-oidc.yml OIDC inspection workflow migrated to ARC runner and GitHub wording/permissions.
.github/workflows/image-security.yml Image security workflow updated to wait for and upload assets to GitHub Releases.
.github/workflows/external-wasm-plugin.yml External Wasm plugin build/publish workflow updated for GitHub and OpenBao role.
.forgejo/workflows/README.md Added notice documenting Forgejo workflows as leftovers-only.
.forgejo/README.md Added notice documenting Forgejo publisher retirement and GitHub Actions replacement.
Suppressed comments (4)

.github/workflows/wasm-plugins.yml:37

  • This workflow uses ${GITHUB_TOKEN} for GitHub Releases API calls, but the job env only sets GH_TOKEN. GitHub Actions does not automatically export ${{ github.token }} into a GITHUB_TOKEN environment variable, so the "Upload import index release asset" step will fail the Missing GITHUB_TOKEN. check and any subsequent curl calls.
    .github/workflows/inspect-oidc.yml:18
  • This workflow only needs repo read access for actions/checkout; it does not write to repo contents. Granting contents: write unnecessarily broadens the token’s permissions for an OIDC inspection job.
    .github/workflows/palisade-publish.yml:36
  • This workflow publishes to hex.pm and does not perform any GitHub write operations (no releases, tags, or pushes). contents: write is not required and unnecessarily increases token scope.
    .github/workflows/publish-oci.yml:25
  • This workflow signs/pushes images to Harbor and does not call the GitHub API to mutate repository contents. contents: write is unnecessary and increases the blast radius of ${{ github.token }} if a step is compromised.

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

Comment on lines +698 to +701
func (c *githubClient) isGitHub() bool {
host := strings.ToLower(c.baseURL)
return strings.Contains(host, "api.github.com") || strings.Contains(host, "github.com")
}
Comment on lines +27 to +39
if [[ -n "${GITHUB_API_URL:-}" || -z "${FORGEJO_URL:-}" || "${FORGEJO_URL}" == *github.com* ]]; then
api_base="${GITHUB_API_URL:-https://api.github.com}"
repo="${GITHUB_REPOSITORY:-carverauto/serviceradar}"
auth_header="Authorization: Bearer ${token}"
accept_header="Accept: application/vnd.github+json"
release_url="${api_base}/repos/${repo}/releases/tags/${tag}"
releases_url="${api_base}/repos/${repo}/releases?per_page=100"
release_by_id() { echo "${api_base}/repos/${repo}/releases/${1}"; }
asset_delete() { echo "${api_base}/repos/${repo}/releases/assets/${1}"; }
asset_upload() {
echo "https://uploads.github.com/repos/${repo}/releases/${1}/assets?name=${asset_name}"
}
github_upload=true
This was referenced Aug 18, 2026
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