Skip to content

Migrate CI from Cirrus CI to GitHub Actions - #447

Merged
fkorotkov-oai merged 20 commits into
mainfrom
dev/fkorotkov/migrate-ci-to-github-actions
Jul 16, 2026
Merged

Migrate CI from Cirrus CI to GitHub Actions#447
fkorotkov-oai merged 20 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.

@fkorotkov-oai
fkorotkov-oai merged commit 461af8d into main Jul 16, 2026
3 checks passed
@fkorotkov-oai
fkorotkov-oai deleted the dev/fkorotkov/migrate-ci-to-github-actions branch July 16, 2026 21:57
@flyqie

flyqie commented Jul 23, 2026

Copy link
Copy Markdown

Hello, it seems that ghcr.io/openai/orchard in this PR hasn't been built (it doesn't exist).

I couldn't find it on GitHub Packages , and I encountered an error when trying to docker pull it.

Looking forward to your reply. Thanks.

root@docker:~# docker pull ghcr.io/openai/orchard
Using default tag: latest
Error response from daemon: denied
root@docker:~# docker pull ghcr.io/cirruslabs/orchard
Using default tag: latest
latest: Pulling from cirruslabs/orchard
fa8ae93e2b3a: Pull complete 
c172f21841df: Pull complete 
b4e6f1bfce0a: Pull complete 
b4242723c53f: Pull complete 
d6b1b89eccac: Pull complete 
2780920e5dbf: Pull complete 
7c12895b777b: Pull complete 
3214acf345c0: Pull complete 
52630fc75a18: Pull complete 
dd64bf2dd177: Pull complete 
b839dfae01f6: Pull complete 
ebddc55facdc: Pull complete 
bdfd7f7e5bf6: Pull complete 
4ec36cb7292a: Pull complete 
b73b1097e3a1: Pull complete 
bd8962e29291: Pull complete 
cac2ae0193cb: Pull complete 
962133128dcf: Pull complete 
Digest: sha256:4b5f8f824ae6857ed4cc59ed12a0eb54ef17e36f4e160f42bb3e0217407e721a
Status: Downloaded newer image for ghcr.io/cirruslabs/orchard:latest
ghcr.io/cirruslabs/orchard:latest
root@docker:~# docker run --rm -it ghcr.io/cirruslabs/orchard:latest --version
orchard version 0.55.0-SNAPSHOT-3083b54-3083b54

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