JacobLinCool / JacobLinCool/node-prisma-alpine

Cross Compilation instead of QEMU Emulation

Aperta
#2 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

help wanted
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

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. 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

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.