mirror of
https://seed.radicle.dev/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5.git
synced 2026-10-27 07:10:56 +08:00
In trying to rebuild the radicle 1.1.0 version now (2025-02-26), some months after 1.1.0 has been released, I see in my pipelines that the `cargo install cargo-zigbuild@0.19.3` instruction is now failing. This is because `home@0.5.11` has been released and this *patch* version bump requires a newer version of rust (1.81) (0.5.9 was ok with 1.80). See https://github.com/rust-lang/cargo/issues/14944 for more details. Adding `--locked` here prevents this issue from happening in the future. Importantly: newer versions of other crates being picked up by cargo here means the build isn't bit-for-bit reproducible. The error itself is: ``` [1/2] STEP 14/17: RUN curl -sSf -o zig.tar.xz https://ziglang.org/download/0.12.0/zig-linux-x86_64-0.12.0.tar.xz && curl -sSf -o zig.tar.xz.minisig https://ziglang.org/download/0.12.0/zig-linux-x86_64-0.12.0.tar.xz.minisig && minisign -Vm zig.tar.xz -P RWSGOq2NVecA2UPNdBUZykf1CCb147pkmdtYxgb3Ti+JO/wCYvhbAb/U && xz -d -c zig.tar.xz | tar -x && mv zig-linux-x86_64-0.12.0/zig /usr/bin/zig && mv zig-linux-x86_64-0.12.0/lib /usr/lib/zig && cargo install cargo-zigbuild@0.18.3 Signature and comment signature verified Trusted comment: timestamp:1713604063 file:zig-linux-x86_64-0.12.0.tar.xz hashed Updating crates.io index Downloading crates ... Downloaded cargo-zigbuild v0.18.3 Installing cargo-zigbuild v0.18.3 Updating crates.io index Locking 83 packages to latest compatible versions Adding cargo-platform v0.1.9 (latest: v0.2.0) Adding cargo-zigbuild v0.18.3 (latest: v0.19.8) Adding cargo_metadata v0.18.1 (latest: v0.19.1) Adding dirs v5.0.1 (latest: v6.0.0) Adding dirs-sys v0.4.1 (latest: v0.5.0) Adding fs-err v2.11.0 (latest: v3.1.0) Adding getrandom v0.2.15 (latest: v0.3.1) Adding linux-raw-sys v0.4.15 (latest: v0.9.0) Adding redox_users v0.4.6 (latest: v0.5.0) Adding target-lexicon v0.12.16 (latest: v0.13.2) Adding thiserror v1.0.69 (latest: v2.0.11) Adding thiserror-impl v1.0.69 (latest: v2.0.11) Adding wasi v0.11.0+wasi-snapshot-preview1 (latest: v0.14.1+wasi-0.2.3) Adding which v6.0.3 (latest: v7.0.2) Adding windows-sys v0.48.0 (latest: v0.59.0) Adding windows-targets v0.48.5 (latest: v0.53.0) Adding windows-targets v0.52.6 (latest: v0.53.0) Adding windows_aarch64_gnullvm v0.48.5 (latest: v0.53.0) Adding windows_aarch64_gnullvm v0.52.6 (latest: v0.53.0) Adding windows_aarch64_msvc v0.48.5 (latest: v0.53.0) Adding windows_aarch64_msvc v0.52.6 (latest: v0.53.0) Adding windows_i686_gnu v0.48.5 (latest: v0.53.0) Adding windows_i686_gnu v0.52.6 (latest: v0.53.0) Adding windows_i686_gnullvm v0.52.6 (latest: v0.53.0) Adding windows_i686_msvc v0.48.5 (latest: v0.53.0) Adding windows_i686_msvc v0.52.6 (latest: v0.53.0) Adding windows_x86_64_gnu v0.48.5 (latest: v0.53.0) Adding windows_x86_64_gnu v0.52.6 (latest: v0.53.0) Adding windows_x86_64_gnullvm v0.48.5 (latest: v0.53.0) Adding windows_x86_64_gnullvm v0.52.6 (latest: v0.53.0) Adding windows_x86_64_msvc v0.48.5 (latest: v0.53.0) Adding windows_x86_64_msvc v0.52.6 (latest: v0.53.0) Adding winsafe v0.0.19 (latest: v0.0.22) Downloading crates ... Downloaded anstyle v1.0.10 Downloaded anstyle-query v1.1.2 Downloaded cargo-platform v0.1.9 Downloaded bitflags v2.8.0 Downloaded cargo_metadata v0.18.1 Downloaded is_terminal_polyfill v1.70.1 Downloaded option-ext v0.2.0 Downloaded scroll_derive v0.12.0 Downloaded strsim v0.11.1 Downloaded autocfg v1.4.0 Downloaded anstream v0.6.18 Downloaded camino v1.1.9 Downloaded dirs-sys v0.4.1 Downloaded heck v0.5.0 Downloaded itoa v1.0.14 Downloaded home v0.5.11 Downloaded thiserror-impl v1.0.69 Downloaded which v6.0.3 Downloaded utf8parse v0.2.2 Downloaded either v1.14.0 Downloaded colorchoice v1.0.3 Downloaded clap_lex v0.7.4 Downloaded errno v0.3.10 Downloaded dirs v5.0.1 Downloaded fs-err v2.11.0 Downloaded shlex v1.3.0 Downloaded rustc_version v0.4.1 Downloaded path-slash v0.2.1 Downloaded thiserror v1.0.69 Downloaded terminal_size v0.4.1 Downloaded anstyle-parse v0.2.6 Downloaded clap_derive v4.5.28 Downloaded target-lexicon v0.12.16 Downloaded fat-macho v0.4.9 Downloaded semver v1.0.25 Downloaded scroll v0.12.0 Downloaded log v0.4.26 Downloaded proc-macro2 v1.0.93 Downloaded quote v1.0.38 Downloaded anyhow v1.0.96 Downloaded clap v4.5.31 Downloaded ryu v1.0.19 Downloaded serde_derive v1.0.218 Downloaded unicode-ident v1.0.17 Downloaded serde v1.0.218 Downloaded memchr v2.7.4 Downloaded serde_json v1.0.139 Downloaded clap_builder v4.5.31 Downloaded goblin v0.9.3 Downloaded syn v2.0.98 Downloaded rustix v0.38.44 Downloaded libc v0.2.170 Downloaded plain v0.2.3 Downloaded cargo-options v0.7.5 Downloaded linux-raw-sys v0.4.15 error: failed to compile `cargo-zigbuild v0.18.3`, intermediate artifacts can be found at `/tmp/cargo-installZ4q2vb`. To reuse those artifacts with a future compilation, set the environment variable `CARGO_TARGET_DIR` to that path. Caused by: rustc 1.80.1 is not supported by the following package: home@0.5.11 requires rustc 1.81 Try re-running `cargo install` with `--locked` Error: building at STEP "RUN curl -sSf -o zig.tar.xz https://ziglang.org/download/0.12.0/zig-linux-x86_64-0.12.0.tar.xz && curl -sSf -o zig.tar.xz.minisig https://ziglang.org/download/0.12.0/zig-linux-x86_64-0.12.0.tar.xz.minisig && minisign -Vm zig.tar.xz -P RWSGOq2NVecA2UPNdBUZykf1CCb147pkmdtYxgb3Ti+JO/wCYvhbAb/U && xz -d -c zig.tar.xz | tar -x && mv zig-linux-x86_64-0.12.0/zig /usr/bin/zig && mv zig-linux-x86_64-0.12.0/lib /usr/lib/zig && cargo install cargo-zigbuild@0.18.3": while running runtime: exit status 101 ``` Signed-off-by: Yorgos Saslis <yorgos.work@proton.me>
102 lines
3.8 KiB
Docker
102 lines
3.8 KiB
Docker
# Builds release binaries for Radicle.
|
|
FROM rust:1.80-alpine3.20 as builder
|
|
LABEL maintainer="Radicle Team <team@radicle.xyz>"
|
|
WORKDIR /src
|
|
COPY . .
|
|
|
|
ARG TZ
|
|
ARG LC_ALL
|
|
ARG SOURCE_DATE_EPOCH
|
|
ARG RADICLE_VERSION
|
|
ARG GIT_HEAD
|
|
|
|
# Copy cargo configuration we're going to use to specify compiler options.
|
|
RUN mkdir -p .cargo && cp build/config.toml .cargo/config.toml
|
|
# Install dependencies.
|
|
RUN apk update && apk add --no-cache git musl-dev xz asciidoctor zig
|
|
# Build man pages and strip metadata. Removes all comments, since they include
|
|
# non-reproducible information, such as version numbers.
|
|
RUN asciidoctor --doctype manpage --backend manpage --destination-dir . *.1.adoc && \
|
|
find . -maxdepth 1 -type f -name '*.1' -exec sed -i '/^.\\\"/d' '{}' \;
|
|
# Add cargo targets.
|
|
RUN rustup target add \
|
|
x86_64-unknown-linux-musl \
|
|
aarch64-unknown-linux-musl \
|
|
x86_64-apple-darwin \
|
|
aarch64-apple-darwin
|
|
|
|
# Install dependencies for cross-compiling to macOS.
|
|
# We use Zig as the linker to perform the compilation from a Linux host.
|
|
# Zig is not yet available on Debian, so we download the official binary.
|
|
# Compilation is done via `cargo-zigbuild` which is a wrapper around `zig`.
|
|
RUN cargo install --locked cargo-zigbuild@0.19.3
|
|
|
|
|
|
# Parts of the macOS SDK are required to build Radicle, we make these available
|
|
# here. So far only `CoreFoundation` and `Security` frameworks are needed.
|
|
RUN xz -d -c build/macos-sdk-11.3.tar.xz | tar -x
|
|
# This env var is used by `cargo-zigbuild` to find the SDK.
|
|
ENV SDKROOT /src/macos-sdk-11.3
|
|
|
|
# Build binaries.
|
|
RUN cargo zigbuild --locked --release \
|
|
--target=x86_64-apple-darwin \
|
|
--target=aarch64-apple-darwin \
|
|
--target=aarch64-unknown-linux-musl \
|
|
--target=x86_64-unknown-linux-musl \
|
|
-p radicle-node \
|
|
-p radicle-remote-helper \
|
|
-p radicle-cli
|
|
|
|
# Now copy the files to a new image without all the intermediary artifacts to
|
|
# save some space.
|
|
FROM alpine:3.20 as packager
|
|
|
|
ARG RADICLE_VERSION
|
|
ARG SOURCE_DATE_EPOCH
|
|
|
|
COPY --from=builder \
|
|
/src/target/x86_64-unknown-linux-musl/release/rad \
|
|
/src/target/x86_64-unknown-linux-musl/release/git-remote-rad \
|
|
/src/target/x86_64-unknown-linux-musl/release/radicle-node \
|
|
/builds/x86_64-unknown-linux-musl/bin/
|
|
COPY --from=builder \
|
|
/src/target/aarch64-unknown-linux-musl/release/rad \
|
|
/src/target/aarch64-unknown-linux-musl/release/git-remote-rad \
|
|
/src/target/aarch64-unknown-linux-musl/release/radicle-node \
|
|
/builds/aarch64-unknown-linux-musl/bin/
|
|
COPY --from=builder \
|
|
/src/target/aarch64-apple-darwin/release/rad \
|
|
/src/target/aarch64-apple-darwin/release/git-remote-rad \
|
|
/src/target/aarch64-apple-darwin/release/radicle-node \
|
|
/builds/aarch64-apple-darwin/bin/
|
|
COPY --from=builder \
|
|
/src/target/x86_64-apple-darwin/release/rad \
|
|
/src/target/x86_64-apple-darwin/release/git-remote-rad \
|
|
/src/target/x86_64-apple-darwin/release/radicle-node \
|
|
/builds/x86_64-apple-darwin/bin/
|
|
COPY --from=builder /src/*.1 /builds/x86_64-unknown-linux-musl/man/man1/
|
|
COPY --from=builder /src/*.1 /builds/aarch64-unknown-linux-musl/man/man1/
|
|
COPY --from=builder /src/*.1 /builds/aarch64-apple-darwin/man/man1/
|
|
COPY --from=builder /src/*.1 /builds/x86_64-apple-darwin/man/man1/
|
|
|
|
# Create and compress reproducible archive.
|
|
WORKDIR /builds
|
|
RUN x86_64-unknown-linux-musl/bin/rad version --json > radicle.json
|
|
RUN apk update && apk add --no-cache tar xz
|
|
RUN find * -maxdepth 0 -type d -exec mv '{}' "radicle-$RADICLE_VERSION-{}" \; && \
|
|
find * -maxdepth 0 -type d -exec tar \
|
|
--sort=name \
|
|
--verbose \
|
|
--mtime="@$SOURCE_DATE_EPOCH" \
|
|
--owner=0 \
|
|
--group=0 \
|
|
--numeric-owner \
|
|
--format=posix \
|
|
--pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime \
|
|
--mode='go+u,go-w' \
|
|
--remove-files \
|
|
--create --xz \
|
|
--file="{}.tar.xz" \
|
|
'{}' \;
|