Files
nvm/.github/workflows/tests-fast.yml
T
Jordan Harband 50e73c4cd5 [actions] retry apt package installs through Ubuntu mirror outages
Mirror outages have outlasted the existing retries,
which covered only `apt-get update` (and not the WSL `additional-packages` install).
Installs now go through `.github/scripts/apt-install.sh`,
which retries each request within apt and retries the whole update+install with backoff for about 10 minutes.
2026-10-07 15:10:36 -07:00

241 lines
8.3 KiB
YAML

name: 'Tests: fast'
on: [push, pull_request]
permissions:
contents: read
jobs:
fast-linux:
permissions:
contents: read
name: 'fast (${{ matrix.shell }}, ${{ matrix.awk }})'
runs-on: ubuntu-latest
defaults:
run:
shell: 'script -q -e -c "${{ matrix.shell }} {0}"'
strategy:
fail-fast: false
matrix:
shell:
- sh
- bash
- dash
- zsh
# - ksh
awk:
- gawk
- mawk
steps:
- name: Harden Runner
uses: step-security/harden-runner@v2
with:
allowed-endpoints:
github.com:443
registry.npmjs.org:443
raw.githubusercontent.com:443
nodejs.org:443
iojs.org:443
unofficial-builds.nodejs.org:443
azure.archive.ubuntu.com:80
packages.microsoft.com:443
registry-1.docker.io:443
auth.docker.io:443
production.cloudflare.docker.com:443
production.cloudfront.docker.com:443
- uses: actions/checkout@v6
id: checkout
continue-on-error: true
with:
submodules: true
- name: 'nvmrc submodule fallback (forks without their own nvmrc)'
if: steps.checkout.outcome == 'failure'
shell: bash
run: |
git submodule set-url test/fixtures/nvmrc https://github.com/nvm-sh/nvmrc.git
git submodule sync --recursive
git submodule update --init --recursive
- name: Install zsh, additional shells, and awk variant
run: |
PACKAGES="zsh ${{ matrix.awk }}"
if [ "${{ matrix.shell }}" != "sh" ] && [ "${{ matrix.shell }}" != "bash" ] && [ "${{ matrix.shell }}" != "zsh" ]; then
PACKAGES="${PACKAGES} ${{ matrix.shell }}"
fi
sh .github/scripts/apt-install.sh ${PACKAGES}
# Set the selected awk as the default
sudo update-alternatives --set awk /usr/bin/${{ matrix.awk }}
shell: bash
- run: sudo ${{ matrix.shell }} --version 2> /dev/null || dpkg -s ${{ matrix.shell }} 2> /dev/null || which ${{ matrix.shell }}
- run: awk --version 2>&1 | head -1 || awk -W version 2>&1 | head -1
- run: curl --version
- run: wget --version
- uses: ljharb/actions/node/install@main
name: 'npm install && version checks'
with:
node-version: 'lts/*'
skip-ls-check: true
- run: npm ls urchin
- run: npx which urchin
- run: env
- name: Hide system node
run: |
if [ -f /usr/local/bin/node ]; then sudo mv /usr/local/bin/node /usr/local/bin/node.bak; fi
if [ -f /usr/local/bin/npm ]; then sudo mv /usr/local/bin/npm /usr/local/bin/npm.bak; fi
if [ -f /usr/local/bin/npx ]; then sudo mv /usr/local/bin/npx /usr/local/bin/npx.bak; fi
shell: bash
- name: Run fast tests
run: |
URCHIN_PATH="$(npx which urchin)"
unset NVM_CD_FLAGS NVM_BIN NVM_INC
export NVM_DIR="${{ github.workspace }}"
export PATH="$(echo "$PATH" | tr ':' '\n' | grep -v '\.nvm' | grep -v 'toolcache' | tr '\n' ':')"
make TERM=xterm-256color TEST_SUITE="fast" SHELL="${{ matrix.shell }}" URCHIN="$URCHIN_PATH" test-${{ matrix.shell }}
- name: Restore system node
if: always()
run: |
if [ -f /usr/local/bin/node.bak ]; then sudo mv /usr/local/bin/node.bak /usr/local/bin/node; fi
if [ -f /usr/local/bin/npm.bak ]; then sudo mv /usr/local/bin/npm.bak /usr/local/bin/npm; fi
if [ -f /usr/local/bin/npx.bak ]; then sudo mv /usr/local/bin/npx.bak /usr/local/bin/npx; fi
shell: bash
fast-macos:
permissions:
contents: read
# APFS is case-insensitive, and /bin/sh and /bin/bash are bash 3.2
name: 'fast (macOS, ${{ matrix.shell }})'
runs-on: macos-latest
strategy:
fail-fast: false
matrix:
shell:
- sh
- bash
- dash
- zsh
steps:
- uses: actions/checkout@v6
id: checkout
continue-on-error: true
with:
submodules: true
- name: 'nvmrc submodule fallback (forks without their own nvmrc)'
if: steps.checkout.outcome == 'failure'
shell: bash
run: |
git submodule set-url test/fixtures/nvmrc https://github.com/nvm-sh/nvmrc.git
git submodule sync --recursive
git submodule update --init --recursive
- run: sw_vers; uname -m; which ${{ matrix.shell }}
- name: Ensure wget is installed
run: command -v wget || brew install wget
- run: wget --version
- uses: ljharb/actions/node/install@main
name: 'npm install && version checks'
with:
node-version: 'lts/*'
skip-ls-check: true
- run: npm ls urchin
- name: Hide system node
shell: bash
run: |
export PATH="$(echo "$PATH" | tr ':' '\n' | grep -v '\.nvm' | grep -v 'toolcache' | tr '\n' ':')"
for bin in node npm npx; do
while found="$(command -v "${bin}")"; do
sudo mv "${found}" "${found}.bak" || break
echo "${found}" >> "${RUNNER_TEMP}/hidden-node"
hash -r
done
done
- name: Run fast tests
shell: bash
run: |
unset NVM_CD_FLAGS NVM_BIN NVM_INC
export NVM_DIR="${{ github.workspace }}"
export PATH="$(echo "$PATH" | tr ':' '\n' | grep -v '\.nvm' | grep -v 'toolcache' | tr '\n' ':')"
script -q /dev/null make TERM=xterm-256color TEST_SUITE="fast" SHELL="${{ matrix.shell }}" URCHIN="${{ github.workspace }}/node_modules/.bin/urchin" test-${{ matrix.shell }} < /dev/null
- name: Restore system node
if: always()
shell: bash
run: |
if [ -f "${RUNNER_TEMP}/hidden-node" ]; then
while IFS= read -r found; do sudo mv "${found}.bak" "${found}"; done < "${RUNNER_TEMP}/hidden-node"
fi
fast-windows:
permissions:
contents: read
# GitHub's Windows runners provide WSL1
name: 'fast (WSL ${{ matrix.wsl-distrib }}, ${{ matrix.shell }})'
runs-on: windows-latest
defaults:
run:
shell: wsl-bash {0}
strategy:
fail-fast: false
matrix:
wsl-distrib:
- Ubuntu-24.04
shell:
- sh
- bash
- dash
- zsh
steps:
- uses: actions/checkout@v6
- uses: Vampire/setup-wsl@v7
with:
distribution: ${{ matrix.wsl-distrib }}
- name: Install packages with retries
# the Windows checkout has CRLF line endings
run: |
tr -d '\r' < "$(wslpath "${{ github.workspace }}")/.github/scripts/apt-install.sh" > /tmp/apt-install.sh
sh /tmp/apt-install.sh git make zsh dash sudo curl wget ca-certificates nodejs npm
- name: 'Clone into the WSL filesystem as a non-root user'
# the Windows checkout shows every file as executable, which urchin would run as tests
run: |
set -ex
useradd -m tester
echo 'tester ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/tester
chmod 0440 /etc/sudoers.d/tester
su tester -c '
set -ex
git config --global --add safe.directory "*"
git clone "$(wslpath "${{ github.workspace }}")" ~/nvm
cd ~/nvm
git submodule set-url test/fixtures/nvmrc https://github.com/nvm-sh/nvmrc.git
git submodule update --init --recursive
npm install
npm ls urchin
'
- name: Hide system node
run: |
for bin in node npm npx; do
if [ -e "/usr/bin/${bin}" ]; then mv "/usr/bin/${bin}" "/usr/bin/${bin}.bak"; fi
done
- name: Run fast tests
run: |
su tester -c '
cd ~/nvm
unset NVM_CD_FLAGS NVM_BIN NVM_INC
export NVM_DIR="${HOME}/nvm" GITHUB_ACTIONS=true TERM=xterm-256color
script -q -e -c "make TEST_SUITE=fast SHELL=${{ matrix.shell }} URCHIN=${HOME}/nvm/node_modules/.bin/urchin test-${{ matrix.shell }}" /dev/null
'
all:
permissions:
contents: none
name: 'all fast tests'
needs: [fast-linux, fast-macos, fast-windows]
runs-on: ubuntu-latest
steps:
- run: true