Skip to content

Add CI workflows and issue templates#1

Merged
davidfic merged 4 commits intomainfrom
feat/ci-and-issue-templates
Apr 15, 2026
Merged

Add CI workflows and issue templates#1
davidfic merged 4 commits intomainfrom
feat/ci-and-issue-templates

Conversation

@davidfic
Copy link
Copy Markdown
Contributor

Summary

Brings Haul in line with the luminarr-era scaffolding the other Beacon apps are getting in parallel PRs.

  • ci.yml — Go test (race) + lint (golangci-lint) + binary build + multi-arch Docker image (linux/amd64, linux/arm64) pushed to `ghcr.io/beacon-stack/haul` on `main`, built from `docker/Dockerfile`
  • claude.yml — Claude Code Action: auto-triage on issue open, and respond to `@claude` mentions on PRs/comments
  • ISSUE_TEMPLATE/ — structured bug report and feature request forms. Bug report includes a "Docker behind a VPN container" deployment option. Feature request dropdown asks about parity with qBittorrent / Deluge / Transmission
  • CONTRIBUTING.md — development setup + code standards, with a callout pointing at the regression-guarded files listed in `CLAUDE.md` (stall detection, rate tracker, session wiring)

Haul-specific deltas vs the luminarr template

  • No `TMDB_API_KEY` / `TRAKT_CLIENT_ID` ldflags — Haul is a BT client, no media metadata
  • Single docker image only — Haul has no `Dockerfile.minimal` variant
  • No frontend test job — `web/ui` has no `npm test` script yet
  • No plugin section in CONTRIBUTING.md — Haul has no plugins/ dir

Required repo secrets

  • `GHCR_TOKEN` — classic PAT with `write:packages` scope
  • `ANTHROPIC_API_KEY` — for the Claude Code Action

Test plan

  • Set `GHCR_TOKEN` and `ANTHROPIC_API_KEY` secrets on the repo
  • Merge this PR and confirm the CI workflow runs green on main
  • Confirm a `latest` tag is published to `ghcr.io/beacon-stack/haul`
  • Open a test issue and confirm the Claude triage comment lands

davidfic and others added 4 commits April 14, 2026 07:25
Adds the full luminarr-style .github scaffolding adapted for Haul:

- ci.yml — Go test + lint + binary build + multi-arch Docker image
  push to ghcr.io on main
- claude.yml — Claude Code Action for automatic issue triage and
  @claude mention handling on PRs and comments
- ISSUE_TEMPLATE/bug_report.yml and feature_request.yml with a
  structured form for reports
- CONTRIBUTING.md with the development setup, regression-suite note,
  and code standards

Haul-specific deltas vs luminarr's template: no TMDB/Trakt ldflags
(Haul is a torrent client, no media metadata), single docker image
using docker/Dockerfile (no minimal variant exists), no frontend test
job (no npm test script), bug report mentions the VPN container
deployment, feature request parity dropdown targets BT clients
(qBittorrent / Deluge / Transmission) instead of Radarr.

Requires GHCR_TOKEN (classic PAT with write:packages) and
ANTHROPIC_API_KEY secrets on the repo before the workflows run green.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Before this change haul's go.mod had a local replace directive pointing
the pulse SDK dependency at the developer's working copy:

    replace github.com/beacon-stack/pulse => /home/davidfic/dev/beacon/pulse

That works on the author's laptop but breaks every other machine — CI
runners don't have /home/davidfic/dev/beacon/pulse, so go mod download
fails and cascades into every downstream job (test, lint, build,
docker).

Replaces the replace with a normal module require pinned to the newly
tagged pulse v0.1.0 on github.com/beacon-stack/pulse. Local
cross-module development is still available via go.work (gitignored)
at the beacon monorepo root.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Two related fixes.

First, cmd/haul/main.go was silently untracked for the entire life
of the repo because .gitignore had an unanchored entry:

    # Binaries
    haul

That pattern matches *any* file or directory named `haul` anywhere in
the tree, so it caught cmd/haul/ as well as the intended root binary.
CI caught this as `stat /home/runner/work/haul/haul/cmd/haul:
directory not found` when go build looked for the main package. git
add works — git never considered the file off-limits once it was
explicitly tracked.

Second, anchor the binary pattern to the repo root (`/haul`) so it
only matches the intended build artifact at the top level. The same
unanchored pattern exists in pulse and pilot but those happened to
commit cmd/<app>/ before adding the ignore rule, so git grandfathered
them. Fixing the source of the bug here and leaving the siblings
alone until they need it.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Triggers on v* tag pushes and produces:

- Cross-platform binaries (linux/darwin/windows × amd64/arm64, minus
  windows/arm64) archived as tar.gz / zip with LICENSE, README, and
  config.example.yaml alongside
- checksums.txt for all archives
- A GitHub Release with auto-generated notes scraped from commit
  messages (excludes docs/chore/test/ci prefixes)
- Multi-tag Docker images pushed to ghcr.io/beacon-stack/haul: the
  full version, {major}.{minor}, {major}, and latest

Dockerfile lives at docker/Dockerfile (no minimal variant for haul).
Requires GHCR_TOKEN on the repo — same secret already needed by ci.yml
for its main-branch docker job.

Tag a release with `git tag v0.1.0 && git push --tags` and the
workflow takes over.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@davidfic davidfic merged commit 26bc077 into main Apr 15, 2026
5 of 8 checks passed
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.

1 participant