Skip to content

feat: alpine support #507

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Merged
merged 7 commits into from
Jun 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
146 changes: 110 additions & 36 deletions .github/workflows/build-and-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@ jobs:
with:
fetch-depth: 0
- run: GH_CREATE_PRE_RELEASE=true ./script/ci/release.sh
if: github.ref == 'refs/heads/master' && env.ACT != 'true' && runner.os == 'Linux'
if: github.ref == 'refs/heads/master' && env.ACT != true && runner.os == 'Linux'
env:
GITHUB_TOKEN: ${{ github.token }}

prebuild:
needs: [ create_pre_release ]
needs: [create_pre_release]
runs-on: ${{ matrix.os }}
defaults:
run:
Expand All @@ -30,11 +30,31 @@ jobs:
matrix:
node-version: [20]
os: [
macos-14,
macos-12,
ubuntu-latest,
windows-latest
macos-12,
ubuntu-latest,
windows-latest,
]
docker: [false]
alpine: [false]
arch: ['amd64']
include:
- os: ubuntu-latest
docker: true
alpine: false
arch: arm64
- os: ubuntu-latest
docker: true
alpine: true
arch: arm64
- os: ubuntu-latest
docker: true
alpine: true
arch: amd64
- os: macos-14
docker: false
alpine: false
arch: arm64
name: Prebuild ${{ matrix.docker == true && matrix.alpine == true && 'linux-musl' || matrix.docker == true && matrix.alpine == false && 'linux' || matrix.os }}-${{ matrix.arch }}

env:
NODE_VERSION: ${{ matrix.node-version }}
Expand All @@ -43,7 +63,7 @@ jobs:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Use Node.js ${{ env.NODE_VERSION }}
uses: actions/setup-node@v4
with:
Expand All @@ -52,27 +72,32 @@ jobs:
- if: runner.os == 'Windows'
run: echo "ONLY_DOWNLOAD_PACT_FOR_WINDOWS=true" >> $GITHUB_ENV

- run: ./script/ci/prebuild.sh

- name: Set up QEMU
if: runner.os == 'Linux'
if: ${{ matrix.docker == true && matrix.arch == 'arm64' }}
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
if: runner.os == 'Linux'
uses: docker/setup-buildx-action@v3
- if: runner.os == 'Linux'
name: prebuild arm64
run: docker run -v $PWD:/home --platform linux/arm64 --rm node:20 bin/bash -c 'cd /home && /home/script/ci/prebuild.sh'
- if: ${{ matrix.docker == true && matrix.alpine == true }}
name: prebuild linux ${{ matrix.arch }} musl
run: docker run -v $PWD:/home --platform linux/${{ matrix.arch }} --rm node:20-alpine bin/sh -c 'apk add bash && cd /home && bash -c "/home/script/ci/prebuild-alpine.sh" && rm -rf ffi node_modules'

- if: ${{ matrix.docker == true && matrix.alpine != true }}
name: prebuild linux ${{ matrix.arch }}
run: docker run -v $PWD:/home --platform linux/${{ matrix.arch }} --rm node:20 bin/bash -c 'cd /home && /home/script/ci/prebuild.sh && rm -rf ffi node_modules'

- run: sudo chown -R $(id -u):$(id -g) prebuilds
if: ${{ matrix.docker == true }}

- run: ./script/ci/prebuild.sh
if: ${{ matrix.docker != true }}

- name: Upload prebuild for ${{ runner.os }}-${{ runner.arch }}
uses: actions/upload-artifact@v3
with:
path: prebuilds/*.tar.gz

- run: GH_PRE_RELEASE_UPLOAD=true ./script/ci/release.sh
if: github.ref == 'refs/heads/master' && env.ACT != 'true'
if: github.ref == 'refs/heads/master' && env.ACT != true
env:
GITHUB_TOKEN: ${{ github.token }}
GITHUB_TOKEN: ${{ github.token }}

test:
runs-on: ${{ matrix.os }}
Expand All @@ -83,13 +108,53 @@ jobs:
strategy:
fail-fast: false
matrix:
node-version: [16,18,20]
os: [
macos-14,
macos-12,
ubuntu-latest,
windows-latest
]
node-version: [16, 18, 20, 22]
os: [macos-14, macos-12, ubuntu-latest, windows-latest]
docker: [false]
include:
- os: ubuntu-latest
docker: true
alpine: false
arch: arm64
node-version: 22
- os: ubuntu-latest
docker: true
alpine: true
arch: arm64
node-version: 22
- os: ubuntu-latest
docker: true
alpine: true
arch: amd64
node-version: 22
- os: ubuntu-latest
docker: true
alpine: false
arch: arm64
node-version: 20
- os: ubuntu-latest
docker: true
alpine: true
arch: arm64
node-version: 20
- os: ubuntu-latest
docker: true
alpine: true
arch: amd64
node-version: 20
- os: ubuntu-latest
docker: true
alpine: true
arch: arm64
node-version: 18
- os: ubuntu-latest
docker: true
alpine: true
arch: amd64
node-version: 18

name: Test ${{ matrix.docker == true && matrix.alpine == true && 'linux-musl' || matrix.docker == true && matrix.alpine == false && 'linux' || matrix.os }}-${{ matrix.arch }}-node-${{ matrix.node-version }}

env:
NODE_VERSION: ${{ matrix.node-version }}
LOG_LEVEL: debug
Expand All @@ -109,22 +174,31 @@ jobs:

- if: runner.os == 'Windows'
run: echo "ONLY_DOWNLOAD_PACT_FOR_WINDOWS=true" >> $GITHUB_ENV
- run: LOG_LEVEL=debug ./script/ci/unpack-and-test.sh
- if: matrix.os == 'macos-14'
run: brew install protobuf

- run: LOG_LEVEL=debug ./script/ci/unpack-and-test.sh
if: ${{ matrix.docker != true }}

- name: Set up QEMU
if: runner.os == 'Linux'
if: ${{ matrix.docker == true && matrix.arch == 'arm64' }}
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
if: runner.os == 'Linux'
uses: docker/setup-buildx-action@v3
- if: runner.os == 'Linux'

- if: ${{ matrix.docker == true && matrix.alpine != true && matrix.arch == 'arm64' }}
name: test arm64
run: docker run -v $PWD:/home --platform linux/arm64 --rm node:20 bin/bash -c 'cd /home && npm test'
run: docker run -v $PWD:/home --platform linux/${{ matrix.arch }} --rm node:${{ matrix.node-version }} bin/bash -c 'cd /home && /home/script/ci/unpack-and-test.sh'

- if: ${{ matrix.docker == true && matrix.alpine == true && matrix.arch == 'amd64' }}
name: test linux amd64 musl
run: docker run -v $PWD:/home --platform linux/${{ matrix.arch }} --rm node:${{ matrix.node-version }}-alpine bin/sh -c 'apk add bash curl gcompat file && cd /home && /home/script/ci/unpack-and-test.sh'

- if: ${{ matrix.docker == true && matrix.alpine == true && matrix.arch == 'arm64' }}
name: test linux arm64 musl
run: docker run -v $PWD:/home --platform linux/${{ matrix.arch }} --rm node:${{ matrix.node-version }}-alpine bin/sh -c 'apk add bash curl file protoc protobuf-dev && cd /home && /home/script/ci/unpack-and-test.sh'

release_dry_run:
runs-on: ubuntu-latest
needs: [ create_pre_release, prebuild ]
needs: [create_pre_release, prebuild]
if: github.ref == 'refs/heads/master'

env:
Expand All @@ -141,7 +215,7 @@ jobs:
node-version: ${{ env.NODE_VERSION }}
registry-url: 'https://registry.npmjs.org'

- name: "release - dry run: ${{ env.DRY_RUN }}"
- name: 'release - dry run: ${{ env.DRY_RUN }}'
id: publish
run: script/ci/release.sh
env:
Expand Down
Loading
Loading