JacobLinCool / JacobLinCool/node-prisma-alpine
Cross Compilation instead of QEMU Emulation
Nessuno ha ancora preso questa issue.
- Lingua principale
- TypeScript
- Stelle
- 2
- Fork
- 1
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
Currently, I use buildx, which uses QEMU under the hood, to build multi-arch images.
The problem is, the compilation is very slow and takes up to 5 and a half hours when building for another architecture.
I have tried the following Dockerfile but it always fails on compiling amd64 binaries on my Apple Silicon MBP.
FROM --platform=$BUILDPLATFORM rust:alpine as preparation
ARG PRISMA_VERSION
RUN apk --no-cache add git
RUN git clone --depth=1 --branch=${PRISMA_VERSION} https://github.com/prisma/prisma-engines.git /prisma
RUN cd /prisma && cargo fetch
FROM --platform=$BUILDPLATFORM rust:alpine as builder
ARG TARGETARCH
ENV RUSTFLAGS="-C target-feature=-crt-static"
RUN apk --no-cache add openssl direnv git musl-dev openssl-dev build-base perl protoc gcc
RUN ln -s /usr/bin/gcc /usr/bin/musl-gcc
COPY --from=preparation /prisma /prisma
COPY --from=preparation /usr/local/cargo /usr/local/cargo
RUN cd /prisma && [ "$TARGETARCH" = "amd64" ] && rustup target add x86_64-unknown-linux-musl && cargo build --release --offline --target x86_64-unknown-linux-musl && cp -R /prisma/target/x86_64-unknown-linux-musl/release /tmp/prisma-engines || true
RUN cd /prisma && [ "$TARGETARCH" = "arm64" ] && rustup target add aarch64-unknown-linux-musl && cargo build --release --offline --target aarch64-unknown-linux-musl && cp -R /prisma/target/aarch64-unknown-linux-musl/release /tmp/prisma-engines || true
FROM node:lts-alpine as production
RUN apk --no-cache add openssl
COPY --from=builder /tmp/prisma-engines/ /tmp/prisma-engines/
ENV PRISMA_QUERY_ENGINE_BINARY=/tmp/prisma-engines/query-engine \
PRISMA_MIGRATION_ENGINE_BINARY=/tmp/prisma-engines/migration-engine \
PRISMA_INTROSPECTION_ENGINE_BINARY=/tmp/prisma-engines/introspection-engine \
PRISMA_FMT_BINARY=/tmp/prisma-engines/prisma-fmt \
PRISMA_CLI_QUERY_ENGINE_TYPE=binary \
PRISMA_CLIENT_ENGINE_TYPE=binary
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia con il Dockerfile e la build multiarchitettura con buildx descritta nell’issue, quindi riproduci la build amd64 su Apple Silicon. Analizza la build Rust cargo e la configurazione dei target per i binari prisma-engines; il lavoro è completato quando entrambe le immagini amd64 e arm64 vengono compilate senza emulazione QEMU.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- docker, rust
- Ambito
- build-system, devops
- Tipo di issue
- Funzionalità
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Da chiarire
- Idoneità per principianti
- 20/100