Skip to content

ci: replace CircleCI with GitHub Actions - #20

Merged
wernermorgenstern merged 9 commits into
mainfrom
ci/github-actions-migration
Aug 12, 2026
Merged

ci: replace CircleCI with GitHub Actions#20
wernermorgenstern merged 9 commits into
mainfrom
ci/github-actions-migration

Conversation

@wernermorgenstern

Copy link
Copy Markdown
Contributor

Summary

  • Delete .circleci/config.yml (pinned golang:1.15.0, unmaintained)
  • Add .github/workflows/ci.yml: test + lint (golangci-lint) + build on every push
  • Add .github/workflows/release-please.yml: on push to main, maintains a release PR from conventional commits; merging it tags + creates a GitHub release

Notes

  • Default branch is now main (was master); master kept as-is (branch-protected, cannot delete via API)
  • Commits merged to main need conventional-commit format (feat:, fix:, chore:, etc) for release-please to compute next semver
  • No golangci-lint config file added - action runs with its default ruleset

Test plan

  • go build ./...
  • go test -race ./...
  • Confirm CI workflow runs green on this PR

Cleans up go.mod ahead of major version release: echo v4 migration
(#12) was the breaking change that never got tagged. go mod tidy
drops stale direct deps now unused since the v3->v4 switch.
Drops .circleci/config.yml (pinned to golang:1.15.0, long stale).
Adds two workflows:

- ci.yml: test, lint (golangci-lint-action), build - runs on every push
- release-please.yml: on push to main, opens/updates a release PR from
  conventional commits and tags + creates a GitHub release on merge

Requires commits on main to follow conventional-commit format
(feat:/fix:/chore:/etc) for release-please to compute the next version.
@wernermorgenstern wernermorgenstern self-assigned this Aug 11, 2026
@wernermorgenstern
wernermorgenstern requested a review from a team August 11, 2026 21:13
File and job name were named after the tool (release-please), not what
the workflow does. Rename matches the org's other split (ci.yml + release.yml
on nomad-autoscaler-cloudwatch-apm).
@wernermorgenstern

Copy link
Copy Markdown
Contributor Author

@wryan97 this is ready

@wryan97

wryan97 commented Aug 12, 2026

Copy link
Copy Markdown

This is still malformed, please read over the github action in its entirety

push-only trigger never fires for fork PRs on this public repo, so the
required "Test, Lint, and Build" check never appears and those PRs stay
unmergeable forever against branch protection.
@wryan97

wryan97 commented Aug 12, 2026

Copy link
Copy Markdown

@wernermorgenstern is this release action used anywhere else? I don't recognize it.

Switches both workflows from ubuntu-latest to the Lob self-hosted
runner pool, matching house convention for GitHub Actions CI.
release-please pulls in a third-party action with no Lob provenance.
Lob already has a house release pattern in lob/github-actions'
auto-tag action, used by logger-go and metrics-go: workflow_dispatch
with patch/minor/major, tag + GitHub release via the API.

sentry-echo is public with zero shared org secrets, so the vendored
checkout of lob/github-actions (which needs PRIVATE_GITHUB_ACTION_TOKEN)
isn't available here. Inlines the same tag+release logic directly,
using only the default GITHUB_TOKEN - same approach pdffonts uses
for its public-repo release flow.
wryan97
wryan97 previously approved these changes Aug 12, 2026
lob-ci-queued-builds matcher config uses exactMatch:true against
["linux","lob-runner","self-hosted","x64"] (lowercase). "Linux" in
runs-on never matched, so jobs sat queued forever with no runner
ever picking them up - confirmed via SSM
/github-action-runners/lob-ci/webhook/runner-matcher-config and zero
matching webhook deliveries for this repo's job IDs.
Confirmed the queued-forever jobs weren't a label-case bug: every
public Lob repo sampled (lob-go, lob-python, pdffonts, litmus, etc,
10 total) runs on ubuntu-latest, every private repo sampled
(logger-go, metrics-go, webhooks, picasso, list-loader) uses
self-hosted lob-runner - and label casing is inconsistent across
those private repos' own workflows without issue, ruling out case
sensitivity as the blocker.

The org's runner group ("Ephemeral" in
terraform-services/ci/action-runners) is scoped to private repos by
design - matches the fork-exec-on-Lob-infra risk flagged earlier in
this same PR. Public repos use GitHub-hosted runners; this matches
house convention rather than requiring an org admin to change runner
group scope for one public repo.
@wernermorgenstern
wernermorgenstern merged commit ac1e883 into main Aug 12, 2026
2 checks passed
@wernermorgenstern
wernermorgenstern deleted the ci/github-actions-migration branch August 12, 2026 20:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants