Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 12 additions & 6 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -74,12 +74,18 @@ RUN ln -sf ~/.local/bin/mkosi /usr/bin/mkosi
# Verify mkosi is functional
RUN mkosi --version

# Prime uv's cache with our pyproject.toml to speed up runtime
COPY pyproject.toml /tmp/pyproject.toml
COPY captain /tmp/captain
COPY build.py /tmp/build.py
WORKDIR /tmp
RUN uv --verbose run build.py --help
# Install project dependencies into a persistent venv so that
# `uv run` inside the container reuses it instead of recreating one.
COPY pyproject.toml /opt/captain/pyproject.toml
COPY uv.lock /opt/captain/uv.lock
COPY captain /opt/captain/captain
COPY build.py /opt/captain/build.py
RUN uv venv /opt/captain-venv && \
UV_PROJECT_ENVIRONMENT=/opt/captain-venv uv sync --frozen --project /opt/captain
Comment on lines +79 to +84

# Point uv at the pre-built venv for all future runs.
ENV VIRTUAL_ENV=/opt/captain-venv
ENV UV_PROJECT_ENVIRONMENT=/opt/captain-venv
Comment thread
jacobweinstock marked this conversation as resolved.

WORKDIR /work
ENTRYPOINT ["mkosi"]
Expand Down
7 changes: 7 additions & 0 deletions captain/cli/_stages.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,13 @@ def _build_mkosi_stage(cfg: Config, extra_args: list[str]) -> None:
log.info("MKOSI_MODE=skip — skipping image assembly")
return

# --- idempotency --------------------------------------------------
existing = sorted(cfg.initramfs_output.glob("*.cpio*"))
force = "--force" in cfg.mkosi_args
if existing and not force:
log.info("Initramfs already built: %s (use --force to rebuild)", existing[0])
Comment on lines +107 to +109
return

mkosi_args = list(cfg.mkosi_args) + list(extra_args)

Comment on lines +105 to 113
# --- native -------------------------------------------------------
Expand Down
4 changes: 2 additions & 2 deletions captain/docker.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ def build_builder(cfg: Config) -> None:
return

log.info("Building Docker image '%s'...", cfg.builder_image)
cmd = ["docker", "buildx", "build"]
cmd = ["docker", "buildx", "build", "--load"]
if cfg.no_cache:
cmd.append("--no-cache")
cmd.extend(
Expand Down Expand Up @@ -88,7 +88,7 @@ def build_release_image(cfg: Config) -> None:
return

log.info("Building Docker image '%s'...", RELEASE_IMAGE)
cmd = ["docker", "buildx", "build", "-f", str(cfg.project_dir / "Dockerfile.release")]
cmd = ["docker", "buildx", "build", "--load", "-f", str(cfg.project_dir / "Dockerfile.release")]
if cfg.no_cache:
cmd.append("--no-cache")
cmd.extend(["--progress=plain"])
Expand Down
135 changes: 135 additions & 0 deletions uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading