veilid/Earthfile

305 lines
13 KiB
Plaintext
Raw Permalink Normal View History

VERSION 0.7
########################################################################################################################
## ARGUMENTS
##
## CI_REGISTRY_IMAGE - used so that forks can refer to themselves, e.g. to use the fork's own registry cache in the
## `+build-linux-cache` target, and defaulting to `registry.gitlab.com/veilid/veilid` if not specified
##
## BASE - tells the build whether it should run in the default mode which runs the complete build, or run by starting
## with the remote `container` value which uses `build-cache:latest` as set up in the projects Container Registry
##
########################################################################################################################
2022-01-09 15:17:36 -05:00
# Start with older Ubuntu to ensure GLIBC symbol versioning support for older linux
# Ensure we are using an amd64 platform because some of these targets use cross-platform tooling
2023-09-15 14:04:20 -04:00
FROM ubuntu:18.04
ENV ZIG_VERSION=0.13.0
2024-07-21 23:27:38 -04:00
ENV CMAKE_VERSION_MINOR=3.30
ENV CMAKE_VERSION_PATCH=3.30.1
2024-08-16 21:01:30 -04:00
ENV WASM_BINDGEN_CLI_VERSION=0.2.93
ENV RUST_VERSION=1.81.0
ENV RUSTUP_HOME=/usr/local/rustup
ENV RUSTUP_DIST_SERVER=https://static.rust-lang.org
ENV CARGO_HOME=/usr/local/cargo
ENV PATH=$PATH:/usr/local/cargo/bin:/usr/local/zig
ENV LD_LIBRARY_PATH=/usr/local/lib
ENV RUST_BACKTRACE=1
WORKDIR /veilid
2022-01-09 15:17:36 -05:00
# Install build prerequisites & setup required directories
2022-01-09 15:17:36 -05:00
deps-base:
RUN apt-get -y update
2024-07-21 23:27:38 -04:00
RUN apt-get install -y iproute2 curl build-essential libssl-dev openssl file git pkg-config libdbus-1-dev libdbus-glib-1-dev libgirepository1.0-dev libcairo2-dev checkinstall unzip libncursesw5-dev libncurses5-dev
RUN curl -O https://cmake.org/files/v$CMAKE_VERSION_MINOR/cmake-$CMAKE_VERSION_PATCH-linux-$(arch).sh
RUN mkdir /opt/cmake
RUN sh cmake-$CMAKE_VERSION_PATCH-linux-$(arch).sh --skip-license --prefix=/opt/cmake
RUN ln -s /opt/cmake/bin/cmake /usr/local/bin/cmake
2022-01-09 15:17:36 -05:00
# Install Rust
deps-rust:
FROM +deps-base
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --default-toolchain=$RUST_VERSION -y -c clippy --no-modify-path --profile minimal
2022-01-09 15:17:36 -05:00
RUN chmod -R a+w $RUSTUP_HOME $CARGO_HOME; \
rustup --version; \
cargo --version; \
rustc --version;
# Linux
RUN rustup target add x86_64-unknown-linux-gnu
2022-01-09 15:17:36 -05:00
RUN rustup target add aarch64-unknown-linux-gnu
# Android
RUN rustup target add aarch64-linux-android
RUN rustup target add armv7-linux-androideabi
RUN rustup target add i686-linux-android
RUN rustup target add x86_64-linux-android
# WASM
RUN rustup target add wasm32-unknown-unknown
2024-08-16 21:01:30 -04:00
RUN cargo install wasm-pack
RUN cargo install -f wasm-bindgen-cli --version $WASM_BINDGEN_CLI_VERSION
# Caching tool
RUN cargo install cargo-chef
# Install Linux cross-platform tooling
RUN curl -O https://ziglang.org/download/$ZIG_VERSION/zig-linux-$(arch)-$ZIG_VERSION.tar.xz
RUN tar -C /usr/local -xJf zig-linux-$(arch)-$ZIG_VERSION.tar.xz
RUN mv /usr/local/zig-linux-$(arch)-$ZIG_VERSION /usr/local/zig
2023-07-13 09:35:57 -04:00
RUN cargo install cargo-zigbuild
SAVE ARTIFACT $RUSTUP_HOME rustup
SAVE ARTIFACT $CARGO_HOME cargo
SAVE ARTIFACT /usr/local/cargo/bin/cargo-zigbuild
SAVE ARTIFACT /usr/local/zig
2022-01-09 15:17:36 -05:00
# Install android tooling
deps-android:
FROM +deps-base
BUILD +deps-rust
COPY +deps-rust/cargo /usr/local/cargo
COPY +deps-rust/rustup /usr/local/rustup
COPY +deps-rust/cargo-zigbuild /usr/local/cargo/bin/cargo-zigbuild
COPY +deps-rust/zig /usr/local/zig
RUN apt-get install -y openjdk-9-jdk-headless
RUN mkdir /Android; mkdir /Android/Sdk
2022-12-01 18:25:53 -05:00
RUN curl -o /Android/cmdline-tools.zip https://dl.google.com/android/repository/commandlinetools-linux-9123335_latest.zip
RUN cd /Android; unzip /Android/cmdline-tools.zip
2024-04-14 01:31:16 -04:00
RUN yes | /Android/cmdline-tools/bin/sdkmanager --sdk_root=/Android/Sdk build-tools\;34.0.0 ndk\;26.3.11579264 cmake\;3.22.1 platform-tools platforms\;android-34 cmdline-tools\;latest
2023-03-05 10:42:31 -05:00
RUN rm -rf /Android/cmdline-tools
2022-11-02 20:42:07 -04:00
RUN apt-get clean
2022-11-02 20:42:07 -04:00
# Just linux build not android
deps-linux:
FROM +deps-base
BUILD +deps-rust
COPY +deps-rust/cargo /usr/local/cargo
COPY +deps-rust/rustup /usr/local/rustup
COPY +deps-rust/cargo-zigbuild /usr/local/cargo/bin/cargo-zigbuild
COPY +deps-rust/zig /usr/local/zig
2022-01-09 15:17:36 -05:00
build-linux-cache:
2022-11-02 20:42:07 -04:00
FROM +deps-linux
RUN mkdir veilid-cli veilid-core veilid-server veilid-tools veilid-wasm veilid-flutter veilid-flutter/rust
COPY --dir .cargo scripts Cargo.lock Cargo.toml .
COPY veilid-cli/Cargo.toml veilid-cli
COPY veilid-core/Cargo.toml veilid-core
COPY veilid-server/Cargo.toml veilid-server
COPY veilid-tools/Cargo.toml veilid-tools
COPY veilid-flutter/rust/Cargo.lock veilid-flutter/rust/Cargo.toml veilid-flutter/rust
COPY veilid-wasm/Cargo.toml veilid-wasm
RUN cat /veilid/scripts/earthly/cargo-linux/config.toml >> .cargo/config.toml
RUN cargo chef prepare --recipe-path recipe.json
RUN cargo chef cook --recipe-path recipe.json
RUN echo $PROJECT_PATH
SAVE ARTIFACT target
ARG CI_REGISTRY_IMAGE=registry.gitlab.com/veilid/veilid
SAVE IMAGE --push $CI_REGISTRY_IMAGE/build-cache:latest
code-linux:
# This target will either use the full earthly cache of local use (+build-linux-cache), or will use a containerized
# version of the +build-linux-cache from the registry
ARG BASE=local
IF [ "$BASE" = "local" ]
FROM +build-linux-cache
2023-11-24 08:03:00 -05:00
ELSE IF [ "$BASE" = "uncached" ]
FROM +deps-linux
ELSE
ARG CI_REGISTRY_IMAGE=registry.gitlab.com/veilid/veilid
FROM $CI_REGISTRY_IMAGE/build-cache:latest
# FROM registry.gitlab.com/veilid/build-cache:latest
END
COPY --dir .cargo build_docs.sh files scripts veilid-cli veilid-core veilid-server veilid-tools veilid-flutter veilid-wasm Cargo.lock Cargo.toml /veilid
2022-11-02 20:42:07 -04:00
# Code + Linux + Android deps
code-android:
FROM +deps-android
2023-09-19 19:12:51 -04:00
COPY --dir .cargo files scripts veilid-cli veilid-core veilid-server veilid-tools veilid-flutter veilid-wasm Cargo.lock Cargo.toml /veilid
2023-01-20 12:37:01 -05:00
RUN cat /veilid/scripts/earthly/cargo-linux/config.toml >> /veilid/.cargo/config.toml
RUN cat /veilid/scripts/earthly/cargo-android/config.toml >> /veilid/.cargo/config.toml
2022-01-09 15:17:36 -05:00
# Clippy only
clippy:
2022-11-02 20:42:07 -04:00
FROM +code-linux
2022-01-09 15:17:36 -05:00
RUN cargo clippy
2024-07-27 18:09:16 -04:00
RUN cargo clippy --manifest-path=veilid-wasm/Cargo.toml --target wasm32-unknown-unknown
2022-01-09 15:17:36 -05:00
# Build
build-release:
FROM +code-linux
RUN cargo build --release -p veilid-server -p veilid-cli -p veilid-tools -p veilid-core
2023-11-24 08:03:00 -05:00
SAVE ARTIFACT ./target/release AS LOCAL ./target/earthly/release
build:
FROM +code-linux
RUN cargo build -p veilid-server -p veilid-cli -p veilid-tools -p veilid-core
2023-11-24 08:03:00 -05:00
SAVE ARTIFACT ./target/debug AS LOCAL ./target/earthly/debug
2022-01-09 15:17:36 -05:00
build-linux-amd64:
2022-11-02 20:42:07 -04:00
FROM +code-linux
RUN cargo zigbuild --target x86_64-unknown-linux-gnu --release -p veilid-server -p veilid-cli -p veilid-tools -p veilid-core
2022-01-09 15:17:36 -05:00
SAVE ARTIFACT ./target/x86_64-unknown-linux-gnu AS LOCAL ./target/artifacts/x86_64-unknown-linux-gnu
2023-08-19 18:13:30 -04:00
build-linux-amd64-debug:
FROM +code-linux
RUN cargo zigbuild --target x86_64-unknown-linux-gnu -p veilid-server -p veilid-cli -p veilid-tools -p veilid-core
2023-08-19 18:13:30 -04:00
SAVE ARTIFACT ./target/x86_64-unknown-linux-gnu AS LOCAL ./target/artifacts/x86_64-unknown-linux-gnu
2022-01-09 15:17:36 -05:00
build-linux-arm64:
2022-11-02 20:42:07 -04:00
FROM +code-linux
2023-07-13 09:35:57 -04:00
RUN cargo zigbuild --target aarch64-unknown-linux-gnu --release -p veilid-server -p veilid-cli -p veilid-tools -p veilid-core
2022-01-09 15:17:36 -05:00
SAVE ARTIFACT ./target/aarch64-unknown-linux-gnu AS LOCAL ./target/artifacts/aarch64-unknown-linux-gnu
build-android:
FROM +code-android
WORKDIR /veilid/veilid-core
2024-04-14 01:31:16 -04:00
ENV PATH=$PATH:/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/
RUN cargo build --target aarch64-linux-android --release
RUN cargo build --target armv7-linux-androideabi --release
RUN cargo build --target i686-linux-android --release
RUN cargo build --target x86_64-linux-android --release
WORKDIR /veilid
SAVE ARTIFACT ./target/aarch64-linux-android AS LOCAL ./target/artifacts/aarch64-linux-android
SAVE ARTIFACT ./target/armv7-linux-androideabi AS LOCAL ./target/artifacts/armv7-linux-androideabi
SAVE ARTIFACT ./target/i686-linux-android AS LOCAL ./target/artifacts/i686-linux-android
SAVE ARTIFACT ./target/x86_64-linux-android AS LOCAL ./target/artifacts/x86_64-linux-android
2022-01-09 15:17:36 -05:00
# Unit tests
unit-tests-clippy-linux:
FROM +code-linux
2024-02-02 14:03:03 -05:00
RUN cargo clippy
2024-07-27 18:09:16 -04:00
unit-tests-clippy-wasm-linux:
FROM +code-linux
RUN cargo clippy --manifest-path=veilid-wasm/Cargo.toml --target wasm32-unknown-unknown
unit-tests-docs-linux:
FROM +code-linux
RUN ./build_docs.sh
unit-tests-native-linux:
2022-11-02 20:42:07 -04:00
FROM +code-linux
RUN cargo test -p veilid-server -p veilid-cli -p veilid-tools -p veilid-core
unit-tests-wasm-linux:
FROM +code-linux
# Just run build now because actual unit tests require network access
# which should be moved to a separate integration test
RUN veilid-wasm/wasm_build.sh
unit-tests-linux:
WAIT
BUILD +unit-tests-clippy-linux
END
2024-07-27 18:09:16 -04:00
WAIT
BUILD +unit-tests-clippy-wasm-linux
END
WAIT
BUILD +unit-tests-docs-linux
END
WAIT
BUILD +unit-tests-native-linux
END
WAIT
BUILD +unit-tests-wasm-linux
END
2022-05-16 11:52:48 -04:00
# Package
2023-07-02 22:59:50 -04:00
package-linux-amd64-deb:
ARG IS_NIGHTLY="false"
2022-05-16 11:52:48 -04:00
FROM +build-linux-amd64
#################################
### DEBIAN DPKG .DEB FILES
#################################
COPY --dir package /veilid
# veilid-server
RUN /veilid/package/debian/earthly_make_veilid_server_deb.sh amd64 x86_64-unknown-linux-gnu "$IS_NIGHTLY"
2022-05-16 11:52:48 -04:00
SAVE ARTIFACT --keep-ts /dpkg/out/*.deb AS LOCAL ./target/packages/
# veilid-cli
RUN /veilid/package/debian/earthly_make_veilid_cli_deb.sh amd64 x86_64-unknown-linux-gnu "$IS_NIGHTLY"
2022-05-16 11:52:48 -04:00
# save artifacts
SAVE ARTIFACT --keep-ts /dpkg/out/*.deb AS LOCAL ./target/packages/
2023-07-02 22:59:50 -04:00
package-linux-amd64-rpm:
ARG IS_NIGHTLY="false"
FROM --platform amd64 rockylinux:9
2023-07-02 22:59:50 -04:00
RUN yum install -y createrepo rpm-build rpm-sign yum-utils rpmdevtools
RUN rpmdev-setuptree
#################################
### RPMBUILD .RPM FILES
#################################
RUN mkdir -p /veilid/target
2023-09-02 15:47:19 -04:00
COPY --dir .cargo files scripts veilid-cli veilid-core veilid-server veilid-tools veilid-flutter veilid-wasm Cargo.lock Cargo.toml package /veilid
2023-07-02 22:59:50 -04:00
COPY +build-linux-amd64/x86_64-unknown-linux-gnu /veilid/target/x86_64-unknown-linux-gnu
RUN mkdir -p /rpm-work-dir/veilid-server
# veilid-server
RUN veilid/package/rpm/veilid-server/earthly_make_veilid_server_rpm.sh x86_64 x86_64-unknown-linux-gnu "$IS_NIGHTLY"
2023-07-02 22:59:50 -04:00
#SAVE ARTIFACT --keep-ts /root/rpmbuild/RPMS/x86_64/*.rpm AS LOCAL ./target/packages/
# veilid-cli
RUN veilid/package/rpm/veilid-cli/earthly_make_veilid_cli_rpm.sh x86_64 x86_64-unknown-linux-gnu "$IS_NIGHTLY"
2023-07-02 22:59:50 -04:00
# save artifacts
SAVE ARTIFACT --keep-ts /root/rpmbuild/RPMS/x86_64/*.rpm AS LOCAL ./target/packages/
2022-05-16 11:52:48 -04:00
2023-07-02 22:59:50 -04:00
package-linux-arm64-deb:
ARG IS_NIGHTLY="false"
2022-05-16 11:52:48 -04:00
FROM +build-linux-arm64
#################################
### DEBIAN DPKG .DEB FILES
#################################
COPY --dir package /veilid
# veilid-server
RUN /veilid/package/debian/earthly_make_veilid_server_deb.sh arm64 aarch64-unknown-linux-gnu "$IS_NIGHTLY"
2022-05-16 11:52:48 -04:00
SAVE ARTIFACT --keep-ts /dpkg/out/*.deb AS LOCAL ./target/packages/
# veilid-cli
RUN /veilid/package/debian/earthly_make_veilid_cli_deb.sh arm64 aarch64-unknown-linux-gnu "$IS_NIGHTLY"
2022-05-16 11:52:48 -04:00
# save artifacts
SAVE ARTIFACT --keep-ts /dpkg/out/*.deb AS LOCAL ./target/packages/
2023-09-15 14:04:20 -04:00
package-linux-arm64-rpm:
ARG IS_NIGHTLY="false"
2023-09-15 14:04:20 -04:00
FROM --platform arm64 rockylinux:8
RUN yum install -y createrepo rpm-build rpm-sign yum-utils rpmdevtools
RUN rpmdev-setuptree
#################################
### RPMBUILD .RPM FILES
#################################
RUN mkdir -p /veilid/target
COPY --dir .cargo files scripts veilid-cli veilid-core veilid-server veilid-tools veilid-flutter veilid-wasm Cargo.lock Cargo.toml package /veilid
COPY +build-linux-arm64/aarch64-unknown-linux-gnu /veilid/target/aarch64-unknown-linux-gnu
RUN mkdir -p /rpm-work-dir/veilid-server
# veilid-server
RUN veilid/package/rpm/veilid-server/earthly_make_veilid_server_rpm.sh aarch64 aarch64-unknown-linux-gnu "$IS_NIGHTLY"
2023-09-15 14:04:20 -04:00
#SAVE ARTIFACT --keep-ts /root/rpmbuild/RPMS/aarch64/*.rpm AS LOCAL ./target/packages/
# veilid-cli
RUN veilid/package/rpm/veilid-cli/earthly_make_veilid_cli_rpm.sh aarch64 aarch64-unknown-linux-gnu "$IS_NIGHTLY"
2023-09-15 14:04:20 -04:00
# save artifacts
SAVE ARTIFACT --keep-ts /root/rpmbuild/RPMS/aarch64/*.rpm AS LOCAL ./target/packages/
package-linux-amd64:
BUILD +package-linux-amd64-deb
BUILD +package-linux-amd64-rpm
package-linux-arm64:
BUILD +package-linux-arm64-deb
BUILD +package-linux-arm64-rpm
2022-05-16 11:52:48 -04:00
package-linux:
BUILD +package-linux-amd64
2024-04-14 01:31:16 -04:00
BUILD +package-linux-arm64