Skip to content

Build app

Build app #244

Workflow file for this run

# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
name: Build app
on:
workflow_dispatch:
push:
branches:
- main
tags:
- "*"
paths-ignore:
- "*.md"
- "*.txt"
- "*.yml"
- .editorconfig
- ".github/**"
- .gitignore
- .npmignore
pull_request:
branches:
- main
paths-ignore:
- "*.md"
- "*.txt"
- "*.yml"
- .editorconfig
- ".github/**"
- .gitignore
- .npmignore
jobs:
build:
permissions:
actions: write
checks: write
pull-requests: write
name: Build amd64
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
node: ["18.x", "20.x", "21.x", "22.1"]
runner: ["windows-latest", "ubuntu-latest", "macos-latest"]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
registry-url: "https://registry.npmjs.org"
cache: npm
- run: |
node --version
npm --version
npm ci
name: Install npm dependencies
- run: npm run lint .
name: Lint
if: matrix.runner == 'ubuntu-latest'
- run: npm run typecheck
name: Type check
if: matrix.runner == 'ubuntu-latest'
- run: |
set -euo pipefail
sudo apt-get update
sudo apt-get install -y libnss3
name: Install OS dependencies
if: matrix.runner == 'ubuntu-latest'
- run: ./test-driver.sh
name: Verify install
shell: bash
- run: npm run test:ci
name: Run tests
continue-on-error: true
- name: Publish Report
uses: turing85/publish-report@v1
if: ${{ always() }}
with:
cancel-workflow-on-error: false
comment-header: my-comment-header
comment-message-success: |
{0} passed!
{1} tests were successful, {2} tests failed, {3} test were skipped.
The report can be found [here]({4}).
comment-message-failure: |
{0} failed!
{1} tests were successful, {2} tests failed, {3} test were skipped.
The report can be found [here]({4}).
report-fail-on-error: true
report-name: Tests ${{ matrix.runner }}-${{ matrix.node }}
report-path: junit.xml
report-reporter: jest-junit
build_arm64:
name: Build arm64
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
node: ["20", "21", "22"]
steps:
- uses: actions/checkout@v4
- uses: uraimo/run-on-arch-action@v2.7.1
name: Verify install
id: build
with:
arch: aarch64
distro: ubuntu22.04
env: | # this is just so we can cache each version
GITHUB_WORKFLOW: ${{ github.workflow }}-${{ github.job }}-${{ matrix.node }}
dockerRunArgs: |
--volume "$PWD:/app"
githubToken: ${{ github.token }}
install: |
set -euo pipefail
apt-get update
apt-get -y install xz-utils curl libnss3
curl -fsSL --output sha https://nodejs.org/dist/latest-v${{ matrix.node }}.x/SHASUMS256.txt
FULL_FILE=`grep 'node-v${{ matrix.node }}.*-linux-arm64.tar.gz' sha | tr -s ' ' | cut -d' ' -f2`
NODE_VERSION=`echo $FULL_FILE | grep --color=never -Eo '[0-9]{2,}\.[0-9]{1,}\.[0-9]{1,}'`
echo "Node version is $NODE_VERSION"
ARCH=arm64
curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz"
tar -xJf "node-v$NODE_VERSION-linux-$ARCH.tar.xz" -C /usr/local --strip-components=1 --no-same-owner
rm sha
rm "node-v$NODE_VERSION-linux-$ARCH.tar.xz"
run: |
node --version
npm --version
cd /app
npm ci --no-progress
BIN="./lib/chromedriver/chromedriver"
if ! [ -e $BIN ]; then
echo "Binary not found at $BIN"
exit 1
fi
build_s390x:
name: Build s390x
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
node: ["18", "20", "21", "22"]
steps:
- uses: actions/checkout@v4
- uses: uraimo/run-on-arch-action@v2.7.1
name: Verify install
id: build
with:
arch: s390x
distro: ubuntu22.04
env: | # this is just so we can cache each version
GITHUB_WORKFLOW: ${{ github.workflow }}-${{ github.job }}-${{ matrix.node }}
dockerRunArgs: |
--volume "$PWD:/app"
githubToken: ${{ github.token }}
install: |
set -euo pipefail
apt-get update
apt-get -y install xz-utils curl libnss3
curl -fsSL --output sha https://nodejs.org/dist/latest-v${{ matrix.node }}.x/SHASUMS256.txt
FULL_FILE=`grep 'node-v${{ matrix.node }}.*-linux-s390x.tar.gz' sha | tr -s ' ' | cut -d' ' -f2`
NODE_VERSION=`echo $FULL_FILE | grep --color=never -Eo '[0-9]{2,}\.[0-9]{1,}\.[0-9]{1,}'`
echo "Node version is $NODE_VERSION"
ARCH=s390x
curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz"
tar -xJf "node-v$NODE_VERSION-linux-$ARCH.tar.xz" -C /usr/local --strip-components=1 --no-same-owner
rm sha
rm "node-v$NODE_VERSION-linux-$ARCH.tar.xz"
npm install -g npm@latest
run: |
node --version
npm --version
cd /app
npm ci --no-progress
BIN="./lib/chromedriver/chromedriver"
if ! [ -e $BIN ]; then
echo "Binary not found at $BIN"
exit 1
fi
build_proxy:
name: Build with proxy
runs-on: ubuntu-latest
services:
squid:
image: ubuntu/squid:5.2-22.04_beta
ports:
- 3128:3128
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 21.x
registry-url: "https://registry.npmjs.org"
cache: npm
- run: |
node --version
npm --version
export http_proxy=http://localhost:3128 https_proxy=http://localhost:3128
npm ci
name: Install npm dependencies
- run: |
set -euo pipefail
sudo apt-get update
sudo apt-get install -y libnss3
name: Install OS dependencies
- run: ./test-driver.sh
name: Verify install
build_local_file_install:
name: Build with local file install
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 21.x
registry-url: "https://registry.npmjs.org"
cache: npm
- run: |
node --version
npm --version
curl -fsSL --output /tmp/chromedriver-linux64.zip https://storage.googleapis.com/chrome-for-testing-public/123.0.6312.105/linux64/chromedriver-linux64.zip
export CHROMEDRIVER_FILEPATH=/tmp/chromedriver-linux64.zip
npm ci
name: Install npm dependencies
- run: |
set -euo pipefail
sudo apt-get update
sudo apt-get install -y libnss3
name: Install OS dependencies
- run: ./test-driver.sh
name: Verify install
build_legacy:
name: Build with legacy cdn url
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 21.x
registry-url: "https://registry.npmjs.org"
cache: npm
- run: |
node --version
npm --version
export CHROMEDRIVER_VERSION=LATEST_113
npm ci
name: Install npm dependencies
- run: |
set -euo pipefail
sudo apt-get update
sudo apt-get install -y libnss3
name: Install OS dependencies
- run: ./test-driver.sh
name: Verify install
publish:
permissions:
contents: read
id-token: write
name: Publish to npm
runs-on: ubuntu-latest
needs: [build, build_arm64, build_s390x, build_proxy]
if: success() && startsWith(github.ref, 'refs/tags/')
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22.x
registry-url: "https://registry.npmjs.org"
- run: npm publish --provenance --access public
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}