Skip to content

Instantly share code, notes, and snippets.

@greaka
Created March 4, 2025 09:08
Show Gist options
  • Select an option

  • Save greaka/9b44306f9bcbc038d9addc81a95064b7 to your computer and use it in GitHub Desktop.

Select an option

Save greaka/9b44306f9bcbc038d9addc81a95064b7 to your computer and use it in GitHub Desktop.
VERSION 0.8
IMPORT github.com/Jake-Shadle/xwin AS xwin
builder:
FROM xwin+xwin
RUN mkdir /build
WORKDIR /build
RUN apt-get update && apt-get install --no-install-recommends -y jq
COPY --keep-ts --if-exists rust-toolchain.toml ./
IF [ ! -f ./rust-toolchain.toml ]
RUN rustup default stable
END
RUN rustup target add x86_64-pc-windows-msvc
RUN ln $CARGO_HOME/bin/* /usr/bin/
SAVE IMAGE --cache-hint xwin-builder
prefetch:
FROM +builder
ARG --required cargo_home_cache_id
COPY --keep-ts --dir --if-exists .cargo ./
COPY --keep-ts Cargo.toml ./
COPY --keep-ts --if-exists Cargo.lock ./
RUN mkdir -p src && touch src/lib.rs
RUN --mount=type=cache,mode=0777,id=$cargo_home_cache_id,sharing=shared,target=$CARGO_HOME \
cargo --color=always fetch --target x86_64-pc-windows-msvc
SAVE IMAGE --cache-hint prefetch
addon:
ARG cargo_home_cache_id="earthly-cargo-cache"
FROM --pass-args +prefetch
ARG EARTHLY_TARGET_PROJECT_NO_TAG
ARG EARTHLY_TARGET_NAME
ARG target_cache_id="${EARTHLY_CARGO_HOME_CACHE_ID}#${EARTHLY_TARGET_PROJECT_NO_TAG}#${EARTHLY_TARGET_NAME}"
ARG target_folder="target/x86_64-pc-windows-msvc/release"
ARG CARGO_TARGET_NAME = $(cargo metadata -q --no-deps --filter-platform x86_64-pc-windows-msvc | jq -r '.packages[0].name' | sed 's/-/_/g')
ARG CARGO_CMD = "build --release"
ARG CARGO_EXTRA_ARGS
COPY --keep-ts --dir . ./
RUN --mount=type=cache,mode=0777,id=$cargo_home_cache_id,sharing=shared,target=$CARGO_HOME \
--mount=type=cache,mode=0777,id=$target_cache_id,sharing=locked,target=target \
cargo ${CARGO_CMD} --color=always --target x86_64-pc-windows-msvc ${CARGO_EXTRA_ARGS} && \
(rm -f ${CARGO_TARGET_NAME}.dll || true) && \
(rm -f ${CARGO_TARGET_NAME}.pdb || true) && \
cp ${target_folder}/${CARGO_TARGET_NAME}.dll ./ && \
(cp ${target_folder}/${CARGO_TARGET_NAME}.pdb ./ || true)
SAVE ARTIFACT ${CARGO_TARGET_NAME}.dll
SAVE ARTIFACT --if-exists ${CARGO_TARGET_NAME}.pdb
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment