From 5374b036f31c7536c78af2452315a624e2f40143 Mon Sep 17 00:00:00 2001 From: Lovell Fuller Date: Fri, 13 Jun 2025 12:59:52 +0100 Subject: [PATCH] CI: Switch ARM64 from CircleCI to GitHub Actions --- .circleci/config.yml | 105 --------------------------------------- .cirrus.yml | 2 +- .github/workflows/ci.yml | 37 +++++++++++++- 3 files changed, 37 insertions(+), 107 deletions(-) delete mode 100644 .circleci/config.yml diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index a2903494..00000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,105 +0,0 @@ -version: 2.1 - -workflows: - build: - jobs: - - linux-arm64-glibc-node-18: - filters: - tags: - only: /^v.*/ - - linux-arm64-musl-node-18: - filters: - tags: - only: /^v.*/ - - linux-arm64-glibc-node-20: - filters: - tags: - only: /^v.*/ - - linux-arm64-musl-node-20: - filters: - tags: - only: /^v.*/ - -jobs: - linux-arm64-glibc-node-18: - resource_class: arm.medium - machine: - image: ubuntu-2204:current - steps: - - checkout - - run: | - sudo docker run -dit --name sharp --volume "${PWD}:/mnt/sharp" --workdir /mnt/sharp arm64v8/debian:bullseye - sudo docker exec sharp sh -c "apt-get update && apt-get install -y build-essential git python3 curl fonts-noto-core" - sudo docker exec sharp sh -c "mkdir -p /etc/apt/keyrings" - sudo docker exec sharp sh -c "curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg" - sudo docker exec sharp sh -c "echo 'deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x nodistro main' | tee /etc/apt/sources.list.d/nodesource.list" - sudo docker exec sharp sh -c "apt-get update && apt-get install -y nodejs" - - run: sudo docker exec sharp sh -c "npm install --build-from-source" - - run: sudo docker exec sharp sh -c "npm test" - - run: | - sudo docker exec sharp sh -c "npm run package-from-local-build" - sudo docker exec sharp sh -c "npm pkg set \"optionalDependencies.@img/sharp-linux-arm64=file:./npm/linux-arm64\"" - sudo docker exec sharp sh -c "npm run clean" - sudo docker exec sharp sh -c "npm install --ignore-scripts" - sudo docker exec sharp sh -c "npm test" - - run: "[[ -n $CIRCLE_TAG ]] && sudo docker exec --env prebuild_upload sharp sh -c \"cd src && ln -s ../package.json && npx prebuild --upload=$prebuild_upload\" || true" - linux-arm64-glibc-node-20: - resource_class: arm.medium - machine: - image: ubuntu-2204:current - steps: - - checkout - - run: | - sudo docker run -dit --name sharp --workdir /mnt/sharp arm64v8/debian:bullseye - sudo docker exec sharp sh -c "apt-get update && apt-get install -y build-essential git python3 curl fonts-noto-core" - sudo docker exec sharp sh -c "mkdir -p /etc/apt/keyrings" - sudo docker exec sharp sh -c "curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg" - sudo docker exec sharp sh -c "echo 'deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main' | tee /etc/apt/sources.list.d/nodesource.list" - sudo docker exec sharp sh -c "apt-get update && apt-get install -y nodejs" - sudo docker exec sharp sh -c "mkdir -p /mnt/sharp" - sudo docker cp . sharp:/mnt/sharp/. - - run: sudo docker exec sharp sh -c "npm install --build-from-source" - - run: sudo docker exec sharp sh -c "npm test" - - run: | - sudo docker exec sharp sh -c "npm run package-from-local-build" - sudo docker exec sharp sh -c "npm pkg set \"optionalDependencies.@img/sharp-linux-arm64=file:./npm/linux-arm64\"" - sudo docker exec sharp sh -c "npm run clean" - sudo docker exec sharp sh -c "npm install --ignore-scripts" - sudo docker exec sharp sh -c "npm test" - linux-arm64-musl-node-18: - resource_class: arm.medium - machine: - image: ubuntu-2204:current - steps: - - checkout - - run: | - sudo docker run -dit --name sharp --volume "${PWD}:/mnt/sharp" --workdir /mnt/sharp node:18-alpine3.17 - sudo docker exec sharp sh -c "apk add build-base git python3 font-noto --update-cache" - - run: sudo docker exec sharp sh -c "npm install --build-from-source" - - run: sudo docker exec sharp sh -c "npm test" - - run: | - sudo docker exec sharp sh -c "npm run package-from-local-build" - sudo docker exec sharp sh -c "npm pkg set \"optionalDependencies.@img/sharp-linuxmusl-arm64=file:./npm/linuxmusl-arm64\"" - sudo docker exec sharp sh -c "npm run clean" - sudo docker exec sharp sh -c "npm install --ignore-scripts" - sudo docker exec sharp sh -c "npm test" - - run: "[[ -n $CIRCLE_TAG ]] && sudo docker exec --env prebuild_upload sharp sh -c \"cd src && ln -s ../package.json && npx prebuild --upload=$prebuild_upload\" || true" - linux-arm64-musl-node-20: - resource_class: arm.medium - machine: - image: ubuntu-2204:current - steps: - - checkout - - run: | - sudo docker run -dit --name sharp --workdir /mnt/sharp node:20-alpine3.18 - sudo docker exec sharp sh -c "apk add build-base git python3 font-noto --update-cache" - sudo docker exec sharp sh -c "mkdir -p /mnt/sharp" - sudo docker cp . sharp:/mnt/sharp/. - - run: sudo docker exec sharp sh -c "npm install --build-from-source" - - run: sudo docker exec sharp sh -c "npm test" - - run: | - sudo docker exec sharp sh -c "npm run package-from-local-build" - sudo docker exec sharp sh -c "npm pkg set \"optionalDependencies.@img/sharp-linuxmusl-arm64=file:./npm/linuxmusl-arm64\"" - sudo docker exec sharp sh -c "npm run clean" - sudo docker exec sharp sh -c "npm install --ignore-scripts" - sudo docker exec sharp sh -c "npm test" diff --git a/.cirrus.yml b/.cirrus.yml index a0b1785b..eb240b5b 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -1,5 +1,5 @@ freebsd_instance: - image_family: freebsd-14-0-snap + image_family: freebsd-15-0-snap task: name: FreeBSD diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e8050f87..d67993b2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,7 +9,10 @@ jobs: contents: write name: ${{ matrix.platform }} - Node.js ${{ matrix.nodejs_version_major }} ${{ matrix.prebuild && '- prebuild' }} runs-on: ${{ matrix.os }} - container: ${{ matrix.container }} + container: + image: ${{ matrix.container }} + volumes: + - /:/host strategy: fail-fast: false matrix: @@ -46,6 +49,28 @@ jobs: container: node:22-alpine3.20 nodejs_version_major: 22 platform: linuxmusl-x64 + - os: ubuntu-24.04-arm + container: arm64v8/rockylinux:8 + nodejs_arch: arm64 + nodejs_version: "^18.17.0" + nodejs_version_major: 18 + platform: linux-arm64 + prebuild: true + - os: ubuntu-24.04-arm + container: arm64v8/rockylinux:8 + nodejs_arch: arm64 + nodejs_version: "^20.3.0" + nodejs_version_major: 20 + platform: linux-arm64 + - os: ubuntu-24.04-arm + container: node:18-alpine3.17 + nodejs_version_major: 18 + platform: linuxmusl-arm64 + prebuild: true + - os: ubuntu-24.04-arm + container: node:20-alpine3.18 + nodejs_version_major: 20 + platform: linuxmusl-arm64 - os: macos-13 nodejs_arch: x64 nodejs_version: "^18.17.0" @@ -122,6 +147,16 @@ jobs: nodejs_version_major: 22 platform: win32-arm64 steps: + - name: Allow Linux musl containers on ARM64 runners # https://github.com/actions/runner/issues/801#issuecomment-2394425757 + if: matrix.platform == 'linuxmusl-arm64' + shell: sh + run: | + apk add nodejs + sed -i "s:ID=alpine:ID=NotpineForGHA:" /etc/os-release + cd /host/home/runner/runners/*/externals/ + rm -rf node20/* + mkdir node20/bin + ln -s /usr/bin/node node20/bin/node - name: Dependencies (Rocky Linux glibc) if: contains(matrix.container, 'rockylinux') run: |