feat: add a root-level repo-management Mix project (mix container.build/publish) - #84
Merged
Merged
Conversation
…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.
There was a problem hiding this comment.
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]andmix container.publish TAGMix tasks that shell out to existingapp/release andci/*.shscripts. - Adds a shared
RepoTasks.Shell.run!/3helper 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 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).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes #83 partially - see that issue for full context/decisions. New root-level
mix.exs(app: :repo_tasks), a sibling Mix project toapp/'s own - tooling that operates on the repo as a whole, not the CLI itself.mix container.build TAG [--push]- buildsapp/'slinux_x86_64Burrito binary, then the container image viaci/build_image.sh;--push/-pchains intocontainer.publishafterward.mix container.publish TAG- thin wrapper aroundci/publish.sh.System.cmd/3) rather than running in-process, sinceapp/and this project are separate Mix projects with no in-processMix.Task.run/2path between them.mix new .'s leftover boilerplate (a competingREADME.md, a test file for the deleted default module).Still pending (tracked in #83, not this PR): wiring
.github/workflows/main.yaml'scontainerjob to actually use these tasks instead of its current ad-hoc steps.Test plan
mix container.build v1.1.1run for real end-to-end - Burrito binary built, image built and taggedmix container.publish v1.1.1run for real - confirmed live in GHCR via the API, package's repository connection fixed afterward--overwriteonmix release, a stale compiledburritodep.beamwith a pre-rename absolute path baked into its debug-info, andSystem.cmd/3not resolving./-relative pathsmix test- 4 passing tests covering both tasks' usage-error pathsmix format --check-formattedclean🤖 Generated with Claude Code