From 1951b607863eace27ff79d5e7e84b1c21b1916a1 Mon Sep 17 00:00:00 2001 From: LongYinan Date: Sun, 18 Feb 2024 13:42:10 +0800 Subject: [PATCH] ci: upgrade toolchain in Docker (#1956) --- .github/workflows/docker.yaml | 78 +++++++++++++++++++++++++++++++---- debian-aarch64.Dockerfile | 35 +++++++++------- debian.Dockerfile | 32 +++++++------- 3 files changed, 106 insertions(+), 39 deletions(-) diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index 487c4d40..0f35411f 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -6,8 +6,8 @@ on: workflow_dispatch: jobs: - build_image: - name: Build nodejs-rust:lts + build-alpine-image: + name: Build alpine image runs-on: ubuntu-latest steps: @@ -34,6 +34,26 @@ jobs: push: true tags: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine + build-debian-image: + name: Build debian image + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Setup QEMU + uses: docker/setup-qemu-action@v3 + + - name: Setup Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ secrets.GH_CONTAINER_UNAME }} + password: ${{ secrets.GH_TOKEN }} + - name: Build and push debian uses: docker/build-push-action@v5 with: @@ -42,20 +62,40 @@ jobs: push: true tags: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian + build-debian-aarch64-image: + name: Build debian image + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Setup QEMU + uses: docker/setup-qemu-action@v3 + + - name: Setup Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ secrets.GH_CONTAINER_UNAME }} + password: ${{ secrets.GH_TOKEN }} + - name: Install latest libc++-dev for cross build uses: addnab/docker-run-action@v3 with: image: node:lts-slim - options: '--platform linux/arm64 --user 0:0 -e GITHUB_TOKEN -v ${{ github.workspace }}/lib/llvm-16:/usr/lib/llvm-16' + options: '--platform linux/arm64 --user 0:0 -e GITHUB_TOKEN -v ${{ github.workspace }}/lib/llvm-18:/usr/lib/llvm-18' run: >- apt-get update && apt-get install -y wget gnupg2 && wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && - echo "deb http://apt.llvm.org/focal/ llvm-toolchain-focal-16 main" >> /etc/apt/sources.list && - echo "deb-src http://apt.llvm.org/focal/ llvm-toolchain-focal-16 main" >> /etc/apt/sources.list && + echo "deb http://apt.llvm.org/focal/ llvm-toolchain-focal-18 main" >> /etc/apt/sources.list && + echo "deb-src http://apt.llvm.org/focal/ llvm-toolchain-focal-18 main" >> /etc/apt/sources.list && apt-get update && - apt-get install libc++-16-dev libc++abi-16-dev -y --fix-missing --no-install-recommends && - rm /usr/lib/llvm-16/lib/libc++abi.so + apt-get install libc++-18-dev libc++abi-18-dev -y --fix-missing --no-install-recommends && + rm /usr/lib/llvm-18/lib/libc++abi.so - name: Build and push debian aarch64 cross uses: docker/build-push-action@v5 @@ -66,8 +106,28 @@ jobs: tags: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian-aarch64 context: . - - name: Cleanup - run: sudo rm -rf "${{ github.workspace }}/lib" + build-zig-image: + name: Build zig image + runs-on: ubuntu-latest + needs: + - build-alpine-image + - build-debian-image + + steps: + - uses: actions/checkout@v4 + + - name: Setup QEMU + uses: docker/setup-qemu-action@v3 + + - name: Setup Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ secrets.GH_CONTAINER_UNAME }} + password: ${{ secrets.GH_TOKEN }} - name: Build and push debian with zig uses: docker/build-push-action@v5 diff --git a/debian-aarch64.Dockerfile b/debian-aarch64.Dockerfile index 1a87edbe..0db6d67e 100644 --- a/debian-aarch64.Dockerfile +++ b/debian-aarch64.Dockerfile @@ -4,27 +4,30 @@ ENV RUSTUP_HOME=/usr/local/rustup \ CARGO_HOME=/usr/local/cargo \ PATH=/usr/local/cargo/bin:$PATH \ CC=clang \ + CC_aarch64_unknown_linux_gnu=clang \ CXX=clang++ \ - CC_aarch64_unknown_linux_gnu="clang --sysroot=/usr/aarch64-unknown-linux-gnu/aarch64-unknown-linux-gnu/sysroot" \ - CXX_aarch64_unknown_linux_gnu="clang++ --sysroot=/usr/aarch64-unknown-linux-gnu/aarch64-unknown-linux-gnu/sysroot" \ - C_INCLUDE_PATH=/usr/aarch64-unknown-linux-gnu/aarch64-unknown-linux-gnu/sysroot/usr/include + CXX_aarch64_unknown_linux_gnu=clang++ \ + CFLAGS="--sysroot=/usr/aarch64-unknown-linux-gnu/aarch64-unknown-linux-gnu/sysroot" \ + CXXFLAGS="--sysroot=/usr/aarch64-unknown-linux-gnu/aarch64-unknown-linux-gnu/sysroot" \ + C_INCLUDE_PATH="/usr/aarch64-unknown-linux-gnu/aarch64-unknown-linux-gnu/sysroot/usr/include" \ + LDFLAGS="-L/usr/aarch64-unknown-linux-gnu/lib/llvm-18/lib" -ADD ./lib/llvm-16 /usr/aarch64-unknown-linux-gnu/lib/llvm-16 +ADD ./lib/llvm-18 /usr/aarch64-unknown-linux-gnu/lib/llvm-18 RUN apt-get update && \ apt-get install -y --fix-missing --no-install-recommends curl gnupg gpg-agent ca-certificates openssl && \ curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ curl -fsSL https://apt.llvm.org/llvm-snapshot.gpg.key | gpg --dearmor -o /etc/apt/keyrings/llvm-snapshot.gpg && \ - echo "deb [signed-by=/etc/apt/keyrings/llvm-snapshot.gpg] http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main" >> /etc/apt/sources.list && \ - echo "deb-src [signed-by=/etc/apt/keyrings/llvm-snapshot.gpg] http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main" >> /etc/apt/sources.list && \ - echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x nodistro main" > /etc/apt/sources.list.d/nodesource.list && \ + echo "deb [signed-by=/etc/apt/keyrings/llvm-snapshot.gpg] http://apt.llvm.org/jammy/ llvm-toolchain-jammy-18 main" >> /etc/apt/sources.list && \ + echo "deb-src [signed-by=/etc/apt/keyrings/llvm-snapshot.gpg] http://apt.llvm.org/jammy/ llvm-toolchain-jammy-18 main" >> /etc/apt/sources.list && \ + echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" > /etc/apt/sources.list.d/nodesource.list && \ apt-get update && \ apt-get install -y --fix-missing --no-install-recommends \ - llvm-16 \ - clang-16 \ - lld-16 \ - libc++-16-dev \ - libc++abi-16-dev \ + llvm-18 \ + clang-18 \ + lld-18 \ + libc++-18-dev \ + libc++abi-18-dev \ nodejs \ xz-utils \ rcs \ @@ -36,7 +39,7 @@ RUN apt-get update && \ curl https://sh.rustup.rs -sSf | sh -s -- -y && \ rustup target add aarch64-unknown-linux-gnu && \ npm install -g npm yarn pnpm && \ - ln -sf /usr/bin/clang-16 /usr/bin/clang && \ - ln -sf /usr/bin/clang++-16 /usr/bin/clang++ && \ - ln -sf /usr/bin/lld-16 /usr/bin/lld && \ - ln -sf /usr/bin/clang-16 /usr/bin/cc + ln -sf /usr/bin/clang-18 /usr/bin/clang && \ + ln -sf /usr/bin/clang++-18 /usr/bin/clang++ && \ + ln -sf /usr/bin/lld-18 /usr/bin/lld && \ + ln -sf /usr/bin/clang-18 /usr/bin/cc diff --git a/debian.Dockerfile b/debian.Dockerfile index 314bfe8b..92a80643 100644 --- a/debian.Dockerfile +++ b/debian.Dockerfile @@ -9,24 +9,23 @@ ENV RUSTUP_HOME=/usr/local/rustup \ CXX=clang++ \ CC_x86_64_unknown_linux_gnu=clang \ CXX_x86_64_unknown_linux_gnu=clang++ \ - RUST_TARGET=x86_64-unknown-linux-gnu \ - LDFLAGS="-fuse-ld=lld" + RUST_TARGET=x86_64-unknown-linux-gnu RUN apt-get update && \ apt-get install -y --fix-missing --no-install-recommends curl gnupg gpg-agent ca-certificates openssl && \ mkdir -p /etc/apt/keyrings && \ curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \ curl -fsSL https://apt.llvm.org/llvm-snapshot.gpg.key | gpg --dearmor -o /etc/apt/keyrings/llvm-snapshot.gpg && \ - echo "deb [signed-by=/etc/apt/keyrings/llvm-snapshot.gpg] http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main" >> /etc/apt/sources.list && \ - echo "deb-src [signed-by=/etc/apt/keyrings/llvm-snapshot.gpg] http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main" >> /etc/apt/sources.list && \ - echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x nodistro main" > /etc/apt/sources.list.d/nodesource.list && \ + echo "deb [signed-by=/etc/apt/keyrings/llvm-snapshot.gpg] http://apt.llvm.org/jammy/ llvm-toolchain-jammy-18 main" >> /etc/apt/sources.list && \ + echo "deb-src [signed-by=/etc/apt/keyrings/llvm-snapshot.gpg] http://apt.llvm.org/jammy/ llvm-toolchain-jammy-18 main" >> /etc/apt/sources.list && \ + echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" > /etc/apt/sources.list.d/nodesource.list && \ apt-get update && \ apt-get install -y --fix-missing --no-install-recommends \ - llvm-16 \ - clang-16 \ - lld-16 \ - libc++-16-dev \ - libc++abi-16-dev \ + llvm-18 \ + clang-18 \ + lld-18 \ + libc++-18-dev \ + libc++abi-18-dev \ nodejs \ xz-utils \ rcs \ @@ -37,10 +36,10 @@ RUN apt-get update && \ apt-get autoremove -y && \ curl https://sh.rustup.rs -sSf | sh -s -- -y && \ npm install -g npm yarn pnpm && \ - ln -sf /usr/bin/clang-16 /usr/bin/clang && \ - ln -sf /usr/bin/clang++-16 /usr/bin/clang++ && \ - ln -sf /usr/bin/lld-16 /usr/bin/lld && \ - ln -sf /usr/bin/clang-16 /usr/bin/cc + ln -sf /usr/bin/clang-18 /usr/bin/clang && \ + ln -sf /usr/bin/clang++-18 /usr/bin/clang++ && \ + ln -sf /usr/bin/lld-18 /usr/bin/lld && \ + ln -sf /usr/bin/clang-18 /usr/bin/cc RUN wget https://www.nasm.us/pub/nasm/releasebuilds/${NASM_VERSION}/nasm-${NASM_VERSION}.tar.xz && \ tar -xf nasm-${NASM_VERSION}.tar.xz && \ @@ -51,3 +50,8 @@ RUN wget https://www.nasm.us/pub/nasm/releasebuilds/${NASM_VERSION}/nasm-${NASM_ cd / && \ rm -rf nasm-${NASM_VERSION} && \ rm nasm-${NASM_VERSION}.tar.xz + +ENV LDFLAGS="-fuse-ld=lld --sysroot=/usr/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu/sysroot" \ + CFLAGS="--sysroot=/usr/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu/sysroot" \ + CXXFLAGS="--sysroot=/usr/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu/sysroot" \ + C_INCLUDE_PATH="/usr/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu/sysroot/usr/include"