From d246c7c598b6bf6c6ecab202d8318c6ac4b0df89 Mon Sep 17 00:00:00 2001 From: jutty Date: Sat, 7 Mar 2026 17:28:47 -0300 Subject: [PATCH] Add dev containers, musl build --- .forgejo/workflows/publish.yaml | 35 ++++++++++--- .../workflows/{check.yaml => verify.yaml} | 2 + .justfile | 49 ++++++++++--------- .../Containerfile.alpine | 0 containers/Containerfile.alpine-dev | 13 +++++ .../Containerfile.debian | 0 containers/Containerfile.debian-dev | 13 +++++ {tests/containers => containers}/README.md | 0 containers/build.sh | 23 +++++++++ containers/run.sh | 12 +++++ tests/containers/build.sh | 9 ---- tests/containers/run.sh | 10 ---- 12 files changed, 117 insertions(+), 49 deletions(-) rename .forgejo/workflows/{check.yaml => verify.yaml} (90%) rename {tests/containers => containers}/Containerfile.alpine (100%) create mode 100644 containers/Containerfile.alpine-dev rename {tests/containers => containers}/Containerfile.debian (100%) create mode 100644 containers/Containerfile.debian-dev rename {tests/containers => containers}/README.md (100%) create mode 100755 containers/build.sh create mode 100755 containers/run.sh delete mode 100755 tests/containers/build.sh delete mode 100755 tests/containers/run.sh diff --git a/.forgejo/workflows/publish.yaml b/.forgejo/workflows/publish.yaml index 532d4e1..7d9686d 100644 --- a/.forgejo/workflows/publish.yaml +++ b/.forgejo/workflows/publish.yaml @@ -22,21 +22,40 @@ jobs: run: | rustup component add llvm-tools-preview rustup component add --toolchain nightly rustfmt clippy + rustup target add x86_64-unknown-linux-musl - name: Setup additional tooling run: .forgejo/workflows/setup-tools.sh - - name: Build release binary - run: just full-build - - name: Calculate SHA-256 hash + - name: Run all assessments + run: just verify + + - name: Build x64 glibc release binary + run: just release-build x86_64-unknown-linux-gnu + + - name: Build x64 musl release binary + run: just release-build x86_64-unknown-linux-musl + + - name: Calculate SHA-256 hashes run: just shasum - - name: Publish to git.jutty.dev package registry + - name: Publish x64 glibc binary to git.jutty.dev registry run: | - version=$(./target/release/en --version) + version=$(./target/x86_64-unknown-linux-gnu/release/en --version) api_root=https://git.jutty.dev/api - url=$api_root/packages/jutty/generic/en/$version/en-x86_64-linux-gnu + url=$api_root/packages/jutty/generic/en/$version/en-x64-linux-gnu curl -fsSL \ - --user jutty:${{ secrets.GJD_REGISTRY_TOKEN }} \ - --upload-file target/release/en $url + --user jutty:${{ secrets.GJD_REGISTRY_TOKEN }} \ + --upload-file target/x86_64-unknown-linux-gnu/release/en $url + + - name: Publish x64 musl binary to git.jutty.dev registry + run: | + version=$(./target/x86_64-unknown-linux-musl/release/en --version) + api_root=https://git.jutty.dev/api + url=$api_root/packages/jutty/generic/en/$version/en-x64-linux-musl + + curl -fsSL \ + --user jutty:${{ secrets.GJD_REGISTRY_TOKEN }} \ + --upload-file target/x86_64-unknown-linux-musl/release/en $url + diff --git a/.forgejo/workflows/check.yaml b/.forgejo/workflows/verify.yaml similarity index 90% rename from .forgejo/workflows/check.yaml rename to .forgejo/workflows/verify.yaml index eaa81a0..a8ebe71 100644 --- a/.forgejo/workflows/check.yaml +++ b/.forgejo/workflows/verify.yaml @@ -28,6 +28,8 @@ jobs: run: | rustup component add llvm-tools-preview rustup component add --toolchain nightly rustfmt clippy + rustup target add x86_64-unknown-linux-gnu + rustup target add x86_64-unknown-linux-musl - name: Setup additional tooling run: .forgejo/workflows/setup-tools.sh diff --git a/.justfile b/.justfile index 8a1a9f2..62f4a15 100644 --- a/.justfile +++ b/.justfile @@ -260,7 +260,7 @@ verify: git status exit 1 fi - {{ just_cmd }} update version-assess \ + {{ just_cmd }} version-assess \ security-assess format-assess lint-assess check test cover-assess alias v := verify @@ -299,42 +299,38 @@ alias cl := clean # Build project with Cargo [group: 'build'] -build: update - cargo build --locked +build target=default_target: + cargo build --target {{ target }} --locked alias b := build # Release build [group: 'build'] -release-build: update verify - cargo build --locked --release +release-build target=default_target: + cargo build --target {{ target }} --locked --release alias rb := release-build -# Clean, run assessments, release build +# glibc release build [group: 'build'] -full-build: clean release-build +release-build-gnu: + cargo build --target {{ glibc_target }} --locked --release -alias fb := full-build +alias rbg := release-build-gnu -# Upload release build to git.jutty.dev package registry -[script, group: 'build'] -upload: full-build && shasum - version=$(./target/release/en --version) - api_root=https://git.jutty.dev/api/ - url=$api_root/packages/jutty/generic/en/$version/en-x86_64-linux-gnu - file=target/release/en +# musl release build +[group: 'build'] +release-build-musl: + cargo build --target {{ musl_target }} --locked --release - curl -fsSL \ - --user jutty:$(secret-tool lookup Title gjd-registry-token) \ - --upload-file $file $url +alias rbm := release-build-musl -alias u := upload - -# Print sha256sum for CI logging +# Calculate SHA 256 hashes for release binaries [group: 'build'] shasum: - sha256sum target/release/en + find target -type d -name 'release' \ + -exec find '{}' -maxdepth 1 -type f -name en -executable ';' \ + | xargs sha256sum ## META @@ -342,8 +338,17 @@ shasum: default: @just --list --unsorted --justfile {{justfile()}} +choose: + @just --choose + +alias ch := choose + export CARGO_TERM_COLOR := 'always' +musl_target := "x86_64-unknown-linux-musl" +glibc_target := "x86_64-unknown-linux-gnu" +default_target := musl_target + debug_vars := 'DEBUG=${DEBUG:-} DEBUG_FILTER=${DEBUG_FILTER:-} RUST_BACKTRACE=${RUST_BACKTRACE:-} RUSTFLAGS=${RUSTFLAGS:-}' watch_cmd := "watchexec -qc -r -e rs,toml,html --color always -- " cover_cmd := 'cargo llvm-cov --color always --ignore-filename-regex "main\.rs|log\.rs"' diff --git a/tests/containers/Containerfile.alpine b/containers/Containerfile.alpine similarity index 100% rename from tests/containers/Containerfile.alpine rename to containers/Containerfile.alpine diff --git a/containers/Containerfile.alpine-dev b/containers/Containerfile.alpine-dev new file mode 100644 index 0000000..d6a7e45 --- /dev/null +++ b/containers/Containerfile.alpine-dev @@ -0,0 +1,13 @@ +FROM docker.io/library/rust:alpine +MAINTAINER Juno Takano juno@jutty.dev +ENV DEBUG=debug + +# Install +COPY en /usr/local/bin/en + +# Describe +RUN sha256sum $(which en) + +# Launch +WORKDIR /root +CMD ["en", "-p", "80"] diff --git a/tests/containers/Containerfile.debian b/containers/Containerfile.debian similarity index 100% rename from tests/containers/Containerfile.debian rename to containers/Containerfile.debian diff --git a/containers/Containerfile.debian-dev b/containers/Containerfile.debian-dev new file mode 100644 index 0000000..95372cc --- /dev/null +++ b/containers/Containerfile.debian-dev @@ -0,0 +1,13 @@ +FROM debian:stable-slim +MAINTAINER Juno Takano juno@jutty.dev +ENV DEBUG=debug + +# Install +COPY en /usr/local/bin/en + +# Describe +RUN sha256sum $(which en) + +# Launch +WORKDIR /root +CMD ["en", "-p", "80"] diff --git a/tests/containers/README.md b/containers/README.md similarity index 100% rename from tests/containers/README.md rename to containers/README.md diff --git a/containers/build.sh b/containers/build.sh new file mode 100755 index 0000000..6e2338d --- /dev/null +++ b/containers/build.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env sh + +set -eu +suffix=$(printf '%s' "$1" | sed 's/.*\.//') +tag="en:$suffix" + +if podman container exists "$tag"; then + podman stop --time 3 "$tag" +fi + +if [ "$suffix" = 'debian-dev' ]; then + cp -v ../target/x86_64-unknown-linux-gnu/release/en en +elif [ "$suffix" = 'alpine-dev' ]; then + cp -v ../target/x86_64-unknown-linux-musl/release/en en +fi + +podman build \ + --tag "$tag" \ + -f "Containerfile.$suffix" + +if [ -f en ]; then + rm -v en +fi diff --git a/containers/run.sh b/containers/run.sh new file mode 100755 index 0000000..784ec44 --- /dev/null +++ b/containers/run.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env sh + +set -eu +suffix=$(printf '%s' "$1" | sed 's/.*\.//') +name="en-$suffix" +tag="en:$suffix" + +podman run \ + --replace \ + --name "$name" \ + --publish 3008:80 \ + "$tag" diff --git a/tests/containers/build.sh b/tests/containers/build.sh deleted file mode 100755 index df4aa02..0000000 --- a/tests/containers/build.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env sh - -set -eu -distro="$1" - -podman stop --time 3 "en-$distro" -podman build \ - --tag "en-$distro" \ - -f "Containerfile.$distro" diff --git a/tests/containers/run.sh b/tests/containers/run.sh deleted file mode 100755 index 5a3efd5..0000000 --- a/tests/containers/run.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env sh - -set -eu -distro="$1" - -podman run \ - --replace \ - --name "en-$distro" \ - --publish 3008:80 \ - "en-$distro"