aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-02-18 07:52:13 +0000
committerFuwn <[email protected]>2026-02-18 07:52:13 +0000
commitd645b9f595a9fc2c680c825c15a5efb4c35c4969 (patch)
tree26918a55df1baa11776c08364a3cac794a45aa90
parentfeat(response): Add input/sensitive-input handling (diff)
downloadseptember-d645b9f595a9fc2c680c825c15a5efb4c35c4969.tar.xz
september-d645b9f595a9fc2c680c825c15a5efb4c35c4969.zip
build: Switch from Earthly to Dockerfile
-rw-r--r--.dockerignore (renamed from .earthlyignore)5
-rw-r--r--Dockerfile42
-rw-r--r--Earthfile39
-rw-r--r--justfile28
4 files changed, 73 insertions, 41 deletions
diff --git a/.earthlyignore b/.dockerignore
index 0957c09..7a3a0c7 100644
--- a/.earthlyignore
+++ b/.dockerignore
@@ -3,6 +3,7 @@
!.git/
!src/
!build.rs
-!Cargo.*
+!Cargo.toml
+!Cargo.lock
+!Dockerfile
!default.css
-
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..37e6bb7
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,42 @@
+# syntax=docker/dockerfile:1.7
+
+ARG RUSTC_VERSION=stable
+
+FROM clux/muslrust:${RUSTC_VERSION} AS build
+
+WORKDIR /source
+
+RUN cargo new september
+
+WORKDIR /source/september
+
+COPY Cargo.toml Cargo.lock ./
+
+RUN --mount=type=cache,target=/root/.cargo/registry \
+ --mount=type=cache,target=/root/.cargo/git \
+ cargo build --release
+
+COPY .git ./.git
+COPY src ./src
+COPY build.rs ./build.rs
+COPY default.css .
+
+RUN --mount=type=cache,target=/root/.cargo/registry \
+ --mount=type=cache,target=/root/.cargo/git \
+ cargo build --release --bin september
+RUN set -eux; \
+ bin_path="$(find /source/september/target -type f -path '*/release/september' | head -n 1)"; \
+ test -n "${bin_path}"; \
+ strip -s "${bin_path}"; \
+ cp "${bin_path}" /source/september/september
+RUN strip -s /source/september/september
+
+FROM scratch AS runtime
+
+WORKDIR /september
+
+COPY --from=build /source/september/september ./september
+
+EXPOSE 80
+
+ENTRYPOINT ["./september"]
diff --git a/Earthfile b/Earthfile
deleted file mode 100644
index fc13776..0000000
--- a/Earthfile
+++ /dev/null
@@ -1,39 +0,0 @@
-VERSION 0.7
-
-image:
- ARG tag=latest
-
- FROM scratch
-
- COPY +build/september .
-
- EXPOSE 80
-
- CMD ["./september"]
-
- SAVE IMAGE --push fuwn/september:$tag
-
-build:
- FROM messense/rust-musl-cross:x86_64-musl
-
- WORKDIR /source
-
- RUN cargo new september
-
- WORKDIR /source/september
-
- COPY Cargo.* .
-
- RUN --mount=type=cache,target=/usr/local/cargo/registry cargo build --release
-
- COPY .git .git
- COPY src src
- COPY build.rs build.rs
- COPY Cargo.* .
- COPY default.css .
-
- RUN --mount=type=cache,target=/usr/local/cargo/registry cargo build --release
- RUN strip -s /source/september/target/x86_64-unknown-linux-musl/release/september
- RUN mv /source/september/target/x86_64-unknown-linux-musl/release/september .
-
- SAVE ARTIFACT /source/september/september
diff --git a/justfile b/justfile
index 93371e8..ebf04bb 100644
--- a/justfile
+++ b/justfile
@@ -2,6 +2,11 @@ import? 'cargo.just'
set allow-duplicate-recipes := true
+name := "september"
+ghcr_repo := "ghcr.io/gemrest/" + name
+gitlab_repo := "registry.gitlab.com/gemrest/" + name
+docker_hub_repo := "docker.io/gemrest/" + name
+
default:
@just --list
@@ -10,3 +15,26 @@ fetch:
fmt:
cargo +nightly fmt
+
+# Build once, then push both `latest` and the latest git tag to all registries.
+publish-images:
+ #!/usr/bin/env bash
+
+ set -euo pipefail
+
+ git_tag="$(git describe --tags --abbrev=0)"
+ docker_tag="${git_tag#v}"
+
+ docker build --platform linux/amd64 -f Dockerfile -t {{name}}:build .
+
+ for registry in {{ghcr_repo}} {{gitlab_repo}} {{docker_hub_repo}}; do
+ docker tag {{name}}:build "$registry:latest"
+ docker tag {{name}}:build "$registry:$docker_tag"
+ done
+
+ docker push "{{ghcr_repo}}:latest"
+ docker push "{{ghcr_repo}}:$docker_tag"
+ docker push "{{gitlab_repo}}:latest"
+ docker push "{{gitlab_repo}}:$docker_tag"
+ docker push "{{docker_hub_repo}}:latest"
+ docker push "{{docker_hub_repo}}:$docker_tag"