Skip to content

feat: add a root-level repo-management Mix project (mix container.build/publish) - #84

Merged
bougyman merged 1 commit into
mainfrom
issue-83-repo-management-tasks
Aug 12, 2026
Merged

feat: add a root-level repo-management Mix project (mix container.build/publish)#84
bougyman merged 1 commit into
mainfrom
issue-83-repo-management-tasks

Conversation

@bougyman

Copy link
Copy Markdown
Member

Summary

Closes #83 partially - see that issue for full context/decisions. New root-level mix.exs (app: :repo_tasks), a sibling Mix project to app/'s own - tooling that operates on the repo as a whole, not the CLI itself.

  • mix container.build TAG [--push] - builds app/'s linux_x86_64 Burrito binary, then the container image via ci/build_image.sh; --push/-p chains into container.publish afterward.
  • mix container.publish TAG - thin wrapper around ci/publish.sh.
  • Dependency-free: both shell out (System.cmd/3) rather than running in-process, since app/ and this project are separate Mix projects with no in-process Mix.Task.run/2 path between them.
  • Cleans up mix new .'s leftover boilerplate (a competing README.md, a test file for the deleted default module).

Still pending (tracked in #83, not this PR): wiring .github/workflows/main.yaml's container job to actually use these tasks instead of its current ad-hoc steps.

Test plan

  • mix container.build v1.1.1 run for real end-to-end - Burrito binary built, image built and tagged
  • mix container.publish v1.1.1 run for real - confirmed live in GHCR via the API, package's repository connection fixed afterward
  • Found and fixed three real bugs surfaced by the above (not hypothetical): missing --overwrite on mix release, a stale compiled burrito dep .beam with a pre-rename absolute path baked into its debug-info, and System.cmd/3 not resolving ./-relative paths
  • mix test - 4 passing tests covering both tasks' usage-error paths
  • mix format --check-formatted clean

🤖 Generated with Claude Code

…ld/publish)

New root-level mix.exs (app: :repo_tasks), sibling to app/'s own -
tooling that operates on the repo as a whole, not the CLI itself.
Dependency-free: every task shells out (mix release inside app/,
ci/build_image.sh, ci/publish.sh) rather than running in-process,
since app/ and this project are separate Mix projects with no
in-process Mix.Task.run/2 path between them anyway.

First tasks: mix container.build TAG [--push] (Burrito binary -> image
build, chains into publish with --push) and mix container.publish TAG
(standalone ci/publish.sh wrapper) - mirrors the build/publish split
already made at the shell level.

Verified end-to-end for real: built and pushed v1.1.1, confirmed live
in GHCR, fixed the package's repository connection (GHCR packages
don't follow a git repo rename). Found and fixed three real bugs along
the way: missing --overwrite on mix release, a stale compiled burrito
dependency .beam with the pre-rename absolute path baked into its
debug-info via __ENV__.file, and System.cmd/3 not resolving
./-relative script paths the way a shell does.

Also cleans up mix new .'s leftover boilerplate (a README.md that
would've competed with the real Readme.adoc, a test file for the
deleted default module).

Closes #83 partially - still need to wire main.yaml's container job to
use these tasks instead of its current ad-hoc steps.
Copilot AI lite review requested due to automatic review settings August 12, 2026 17:54
@bougyman
bougyman merged commit 9d0b730 into main Aug 12, 2026
3 checks passed
@bougyman
bougyman deleted the issue-83-repo-management-tasks branch August 12, 2026 17:55

Copilot AI 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.

Pull request overview

Adds a new root-level, dependency-free Mix project (app: :repo_tasks) intended for repo-management automation that operates on the repository as a whole (e.g., building/publishing the container image), separate from the CLI Mix project under app/.

Changes:

  • Introduces mix container.build TAG [--push] and mix container.publish TAG Mix tasks that shell out to existing app/ release and ci/*.sh scripts.
  • Adds a shared RepoTasks.Shell.run!/3 helper to run external commands with live output streaming and consistent Mix-style failures.
  • Adds ExUnit setup and basic tests for usage-error paths; adds root-level formatter and gitignore entries for the new project.

Reviewed changes

Copilot reviewed 8 out of 9 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
mix.exs Defines the new root-level :repo_tasks Mix project (no deps).
lib/repo_tasks/shell.ex Adds RepoTasks.Shell.run!/3 helper for System.cmd/3 orchestration with streaming output and error handling.
lib/mix/tasks/container.build.ex Implements mix container.build (build Burrito binary in app/, then build image; optional publish).
lib/mix/tasks/container.publish.ex Implements mix container.publish wrapper around ci/publish.sh.
test/test_helper.exs Starts ExUnit for the new root-level project tests.
test/mix/tasks/container.build_test.exs Tests usage errors for mix container.build.
test/mix/tasks/container.publish_test.exs Tests usage errors for mix container.publish.
.formatter.exs Enables formatting for root-level project files.
.gitignore Ignores root-level _build/ and deps/ for the new Mix project.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread lib/repo_tasks/shell.ex
Comment on lines +9 to +11
Every repo-management task built on top of this shells out rather than
running anything in-process - see `RepoTasks.MixProject`'s own
moduledoc for why.
Comment on lines +16 to +18
This is the exact flow `.github/workflows/main.yaml`'s `container` job
runs - CI and a local `mix container.build v1.2.3 --push` do the
identical thing, so there's one place to fix if either ever breaks.
This was referenced Aug 12, 2026
bougyman pushed a commit that referenced this pull request Aug 12, 2026
🤖 I have created a release *beep* *boop*
---


##
[1.2.0](v1.1.1...v1.2.0)
(2026-08-12)


### Features

* add a root-level repo-management Mix project (mix
container.build/publish)
([#84](#84))
([9d0b730](9d0b730))


### Bug Fixes

* give a clear message and exit 78 when LINEAR_API_KEY is missing
([#86](#86))
([c5b9ec1](c5b9ec1))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
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.

feat: root-level repo-management Mix project (mix container.build/publish)

2 participants