Skip to content

ci: add GitHub Actions (ci-go hosted, ci-image self-hosted arm64) + Pi runner guide - #50

Merged
Bugs5382 merged 2 commits into
mainfrom
ci/49-github-actions
Jun 4, 2026
Merged

Bugs5382 merged 2 commits into
mainfrom
ci/49-github-actions

Conversation

@Bugs5382

@Bugs5382 Bugs5382 commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

What

Stands up GitHub Actions (the earlier CI deferral is lifted):

  • ci-go (ci-go.yml) — task ci (format, lint, vet, test, build) on a GitHub-hosted Linux runner, on every PR + push to main. This one is real and should go green.
  • ci-image (ci-image.yml) — task image (kernel → SquashFS rootfs → UKI → Secure Boot sign) on a self-hosted arm64 runner (a home Raspberry Pi). Triggers on push to main, tags, and manual dispatch only — never pull_request, so the self-hosted runner never runs fork code. Generates an ephemeral SB key + throwaway machine config. The build recipes are drafts, so this is how they get validated on real Linux.
  • docs/self-hosted-runner.md — operator guide for the Pi runner, security first.

Names are descriptive + type-prefixed (ci-* workflows, job-* jobs).

Notes

  • QEMU + swtpm integration is run on a real host, not in CI.
  • ci-image will sit queued until a matching self-hosted runner is registered, and needs KERNEL_SHA256 + a static cryptsetup before it goes green — expected; that's the first thing to resolve on the Pi.

Closes #49

…i runner guide

ci-go.yml runs the Go validation (format, lint, vet, test, build) on a
GitHub-hosted Linux runner for every pull request and push to main.

ci-image.yml builds the UKI on a self-hosted arm64 runner (a home
Raspberry Pi) on push to main, tags, and manual dispatch only — never
fork PRs, so the self-hosted runner can't execute untrusted code. It
generates an ephemeral Secure Boot key + a throwaway machine config, then
runs task image. The image recipes are drafts, so this is also how they
get shaken out on real Linux.

docs/self-hosted-runner.md is the operator guide for standing up the Pi
runner, security first.

Workflow + job names are descriptive and type-prefixed (ci-*, job-*).

Closes #49
…lay names

Install golangci-lint via go install so it is compiled with the job's
Go toolchain (>= the go.mod version); the prebuilt binary was built with
an older Go and its analyzers panicked loading newer code.

Naming: the type prefix stays on the workflow file names (ci-go.yml,
ci-image.yml) only; the workflow and job display names are descriptive
and unprefixed, and concurrency groups reuse github.workflow.
@Bugs5382
Bugs5382 merged commit caa11eb into main Jun 4, 2026
@Bugs5382
Bugs5382 deleted the ci/49-github-actions branch June 4, 2026 01:55
@Bugs5382 Bugs5382 self-assigned this Jun 4, 2026
@Bugs5382 Bugs5382 added this to the v1.0.0 milestone Jul 15, 2026
Bugs5382 added a commit that referenced this pull request Sep 25, 2026
…i runner guide (#50)

* ci: add GitHub Actions (ci-go hosted, ci-image self-hosted arm64) + Pi runner guide

ci-go.yml runs the Go validation (format, lint, vet, test, build) on a
GitHub-hosted Linux runner for every pull request and push to main.

ci-image.yml builds the UKI on a self-hosted arm64 runner (a home
Raspberry Pi) on push to main, tags, and manual dispatch only — never
fork PRs, so the self-hosted runner can't execute untrusted code. It
generates an ephemeral Secure Boot key + a throwaway machine config, then
runs task image. The image recipes are drafts, so this is also how they
get shaken out on real Linux.

docs/self-hosted-runner.md is the operator guide for standing up the Pi
runner, security first.

Workflow + job names are descriptive and type-prefixed (ci-*, job-*).

Closes #49

* ci: fix golangci-lint Go-version mismatch; drop type prefix from display names

Install golangci-lint via go install so it is compiled with the job's
Go toolchain (>= the go.mod version); the prebuilt binary was built with
an older Go and its analyzers panicked loading newer code.

Naming: the type prefix stays on the workflow file names (ci-go.yml,
ci-image.yml) only; the workflow and job display names are descriptive
and unprefixed, and concurrency groups reuse github.workflow.
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.

ci: GitHub Actions (hosted Go CI + self-hosted arm64 image build) + Pi runner guide

1 participant