CI: use Docker to build binaries for linux-arm64
Recently it comes to my attention that Github Actions image installs experimental C++ standard library from an unsupported PPA, which effectively breaks assumptions of binary compatibility for the OS (in this case, Ubuntu 18.04+). Unfortunately, as a result, the Github Actions environment can no longer be trusted to compile proper binaries. This change adds a Dockerfile that composes a proper Ubuntu 18.04 environment from official "ubuntu:bionic" image, and builds Node binaries in it. Bug: actions/virtual-environments#3432
This commit is contained in:
parent
b30cbad6ea
commit
6de6de36a3
43
.github/workflows/build-linux.yml
vendored
43
.github/workflows/build-linux.yml
vendored
@ -51,7 +51,7 @@ jobs:
|
|||||||
path: root/pkg-fetch/dist/*
|
path: root/pkg-fetch/dist/*
|
||||||
|
|
||||||
linux-arm64:
|
linux-arm64:
|
||||||
runs-on: ubuntu-18.04
|
runs-on: ubuntu-20.04
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
@ -61,37 +61,32 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Use Node.js 14
|
- name: Set up Docker Buildx
|
||||||
uses: actions/setup-node@v1
|
uses: docker/setup-buildx-action@v1
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
uses: docker/build-push-action@v2
|
||||||
with:
|
with:
|
||||||
node-version: 14
|
build-args: |
|
||||||
|
TARGET_TOOLCHAIN_ARCH=aarch64
|
||||||
|
PKG_FETCH_OPTION_a=arm64
|
||||||
|
PKG_FETCH_OPTION_n=node${{ matrix.target-node }}
|
||||||
|
context: .
|
||||||
|
file: ./Dockerfile.linuxcross
|
||||||
|
platforms: linux/amd64
|
||||||
|
outputs: type=tar,dest=../out.tar
|
||||||
|
|
||||||
- run: sudo apt update
|
- name: Extract binaries from Docker image
|
||||||
- run: sudo apt install -y gcc-8-aarch64-linux-gnu g++-8-aarch64-linux-gnu binutils-aarch64-linux-gnu
|
run: |
|
||||||
|
tar xvf ../out.tar root/pkg-fetch/dist
|
||||||
- run: yarn install
|
|
||||||
|
|
||||||
- run: yarn start --node-range node${{ matrix.target-node }} --arch arm64 --output dist
|
|
||||||
env:
|
|
||||||
CC: /usr/bin/aarch64-linux-gnu-gcc-8
|
|
||||||
CXX: /usr/bin/aarch64-linux-gnu-g++-8
|
|
||||||
AR: /usr/bin/aarch64-linux-gnu-ar
|
|
||||||
NM: /usr/bin/aarch64-linux-gnu-nm
|
|
||||||
READELF: /usr/bin/aarch64-linux-gnu-readelf
|
|
||||||
STRIP: /usr/bin/aarch64-linux-gnu-strip
|
|
||||||
CC_host: /usr/bin/gcc
|
|
||||||
CXX_host: /usr/bin/g++
|
|
||||||
AR_host: /usr/bin/ar
|
|
||||||
NM_host: /usr/bin/nm
|
|
||||||
READELF_host: /usr/bin/readelf
|
|
||||||
|
|
||||||
- name: Check if binary is compiled
|
- name: Check if binary is compiled
|
||||||
id: check_file
|
id: check_file
|
||||||
run: |
|
run: |
|
||||||
(test -f dist/*.sha256sum && echo ::set-output name=EXISTS::true) || echo ::set-output name=EXISTS::false
|
(test -f root/pkg-fetch/dist/*.sha256sum && echo ::set-output name=EXISTS::true) || echo ::set-output name=EXISTS::false
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v2
|
- uses: actions/upload-artifact@v2
|
||||||
if: steps.check_file.outputs.EXISTS == 'true'
|
if: steps.check_file.outputs.EXISTS == 'true'
|
||||||
with:
|
with:
|
||||||
name: node${{ matrix.target-node }}-linux-arm64
|
name: node${{ matrix.target-node }}-linux-arm64
|
||||||
path: dist/*
|
path: root/pkg-fetch/dist/*
|
||||||
|
|||||||
38
Dockerfile.linuxcross
Normal file
38
Dockerfile.linuxcross
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
FROM ubuntu:bionic
|
||||||
|
|
||||||
|
ARG TARGET_TOOLCHAIN_ARCH
|
||||||
|
|
||||||
|
ARG PKG_FETCH_OPTION_a
|
||||||
|
ARG PKG_FETCH_OPTION_n
|
||||||
|
|
||||||
|
USER root:root
|
||||||
|
WORKDIR /root/pkg-fetch/
|
||||||
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
RUN apt-get update
|
||||||
|
RUN apt-get install -y curl software-properties-common
|
||||||
|
RUN curl -fsSL https://deb.nodesource.com/setup_14.x | bash -
|
||||||
|
RUN apt-get install -y nodejs
|
||||||
|
|
||||||
|
RUN apt-get install -y binutils gcc-8 g++-8 git make patch python python3 python3-distutils
|
||||||
|
RUN apt-get install -y binutils-$TARGET_TOOLCHAIN_ARCH-linux-gnu gcc-8-$TARGET_TOOLCHAIN_ARCH-linux-gnu g++-8-$TARGET_TOOLCHAIN_ARCH-linux-gnu
|
||||||
|
|
||||||
|
ENV CC=/usr/bin/$TARGET_TOOLCHAIN_ARCH-linux-gnu-gcc-8
|
||||||
|
ENV CXX=/usr/bin/$TARGET_TOOLCHAIN_ARCH-linux-gnu-g++-8
|
||||||
|
ENV AR=/usr/bin/$TARGET_TOOLCHAIN_ARCH-linux-gnu-ar
|
||||||
|
ENV NM=/usr/bin/$TARGET_TOOLCHAIN_ARCH-linux-gnu-nm
|
||||||
|
ENV READELF=/usr/bin/$TARGET_TOOLCHAIN_ARCH-linux-gnu-readelf
|
||||||
|
ENV STRIP=/usr/bin/$TARGET_TOOLCHAIN_ARCH-linux-gnu-strip
|
||||||
|
ENV CC_host=/usr/bin/gcc-8
|
||||||
|
ENV CXX_host=/usr/bin/g++-8
|
||||||
|
ENV AR_host=/usr/bin/ar
|
||||||
|
ENV NM_host=/usr/bin/nm
|
||||||
|
ENV READELF_host=/usr/bin/readelf
|
||||||
|
|
||||||
|
RUN npm install -g yarn
|
||||||
|
|
||||||
|
COPY . ./
|
||||||
|
|
||||||
|
RUN yarn install
|
||||||
|
|
||||||
|
RUN yarn start --arch $PKG_FETCH_OPTION_a --node-range $PKG_FETCH_OPTION_n --output dist
|
||||||
Loading…
Reference in New Issue
Block a user