Skip to content

Migrate CI from Cirrus CI to GitHub Actions#447

Open
fkorotkov-oai wants to merge 10 commits into
mainfrom
dev/fkorotkov/migrate-ci-to-github-actions
Open

Migrate CI from Cirrus CI to GitHub Actions#447
fkorotkov-oai wants to merge 10 commits into
mainfrom
dev/fkorotkov/migrate-ci-to-github-actions

Conversation

@fkorotkov-oai

@fkorotkov-oai fkorotkov-oai commented Jun 5, 2026

Copy link
Copy Markdown
Collaborator

What changed

  • replace Cirrus CI lint, Linux, macOS, and release jobs with GitHub Actions
  • keep GoReleaser binary releases and multi-architecture Docker image publishing
  • publish GitHub releases and the Homebrew tap update with short-lived GitHub App tokens
  • expose release and signing credentials only to the GoReleaser steps that consume them
  • reserve the publish environment for tag releases while keeping manual snapshots environment- and secret-free
  • publish Formula/orchard.rb to openai/homebrew-tools through a versioned pull request
  • remove nfpm/Fury publishing and obsolete system-package assets
  • build the container directly with Go instead of installing GoReleaser Pro in the Dockerfile
  • publish the image as ghcr.io/openai/orchard and source Vetu from openai/vetu in Linux CI

Installation

Once the formula is published to the OpenAI tap:

brew install openai/tools/orchard

Release setup

Configure these secrets on the publish environment before the next release:

  • RELEASE_APP_ID
  • RELEASE_APP_PRIVATE_KEY
  • GORELEASER_KEY
  • the existing macOS signing and notarization values

The release app needs contents write access to openai/orchard, plus contents and pull-request write access to openai/homebrew-tools.

Only the tag-triggered release job uses the publish environment. Manual workflow_dispatch snapshots run without release, signing, or notarization secrets.

Validation

  • actionlint .github/workflows/release.yml
  • actionlint -ignore 'label ".*" is unknown' .github/workflows/*.yml
  • goreleaser check --soft with GoReleaser Pro 2.16.0
  • credential-free goreleaser release --skip=publish --snapshot --clean, which generated dist/homebrew/Formula/orchard.rb and skipped signing/notarization
  • go test ./... passed outside hardware-dependent integration packages

GoReleaser reports that formula-style brews output is deprecated in favor of casks. This PR intentionally preserves Orchard's formula packaging and its install-time shell completion generation.

The macos-26 GitHub-hosted ARM runner runs every package except internal/tests, covering the non-VM/unit suite. The Linux Cirrus runner continues to run go test ./... with Vetu, retaining Linux hardware integration. Tart/macOS VM cases in internal/tests are intentionally not run on GitHub-hosted macOS because those ARM runners do not support the nested virtualization they require.

@fkorotkov-oai fkorotkov-oai requested a review from edi-oai June 5, 2026 17:14
@fkorotkov-oai fkorotkov-oai force-pushed the dev/fkorotkov/migrate-ci-to-github-actions branch from ad5cd25 to 262d469 Compare June 5, 2026 17:20
@fkorotkov-oai fkorotkov-oai marked this pull request as ready for review July 7, 2026 11:41

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0b796b0ae0

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .github/workflows/ci.yml
- name: Build Vetu
working-directory: _vetu
run: |
go build -o "$RUNNER_TEMP/vetu" cmd/vetu/main.go

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Grant Vetu the bind-service capability

When the Linux job builds Vetu from source, this setcap replaces the old apt-installed package setup but grants only cap_net_raw and cap_net_admin. Vetu's own install instructions say the binary needs cap_net_raw,cap_net_admin,cap_net_bind_service+eip; without cap_net_bind_service, the integration tests that later run vetu run can fail when Vetu binds privileged networking service ports, even though the earlier vetu pull step succeeds.

Useful? React with 👍 / 👎.

Comment thread .goreleaser.yml
Comment on lines +52 to +53
owner: openai
name: homebrew-tools

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Keep the documented Homebrew tap in sync

This moves formula publishing to openai/homebrew-tools, but the README still tells users to run brew install cirruslabs/cli/orchard. After the next release is published only to the new tap, users following the documented install path will keep getting the stale Cirrus formula instead of current Orchard; either update the install docs to the new openai/tools tap or keep publishing the old tap as well.

Useful? React with 👍 / 👎.

Comment thread Dockerfile Outdated
ARG VERSION=dev
ARG COMMIT=unknown

RUN CGO_ENABLED=0 go build \

@edi-oai edi-oai Jul 7, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Do we need to resort to manual building here?

In this PR we still use GoReleaser in .github/workflows/release.yml, can we keep using it here too?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

addressed 059b6b6

@edi-oai edi-oai self-requested a review July 8, 2026 10:51
edi-oai
edi-oai previously approved these changes Jul 8, 2026

@edi-oai edi-oai 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.

LGTM, but it seems that the Linux integration test is stuck for some reason.

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