Skip to content

Node

Node #1128

Workflow file for this run

name: Node
on:
push:
branches: ["main"]
paths:
- glide-core/src/**
- submodules/**
- node/**
- utils/cluster_manager.py
- .github/workflows/node.yml
- .github/workflows/build-node-wrapper/action.yml
- .github/workflows/install-shared-dependencies/action.yml
- .github/workflows/test-benchmark/action.yml
- .github/workflows/lint-rust/action.yml
- .github/workflows/install-valkey/action.yml
- .github/json_matrices/build-matrix.json
pull_request:
paths:
- glide-core/src/**
- submodules/**
- node/**
- utils/cluster_manager.py
- .github/workflows/node.yml
- .github/workflows/build-node-wrapper/action.yml
- .github/workflows/install-shared-dependencies/action.yml
- .github/workflows/test-benchmark/action.yml
- .github/workflows/lint-rust/action.yml
- .github/workflows/install-valkey/action.yml
- .github/json_matrices/build-matrix.json
workflow_dispatch:
pull_request_target:
types: [labeled]
paths:
- glide-core/src/**
- submodules/**
- node/**
- utils/cluster_manager.py
- .github/workflows/node.yml
- .github/workflows/build-node-wrapper/action.yml
- .github/workflows/install-shared-dependencies/action.yml
- .github/workflows/test-benchmark/action.yml
- .github/workflows/lint-rust/action.yml
- .github/workflows/install-valkey/action.yml
- .github/json_matrices/build-matrix.json
schedule:
- cron: "0 1 * * *"
concurrency:
group: node-${{ github.head_ref || github.ref }}
cancel-in-progress: true
env:
CARGO_TERM_COLOR: always
jobs:
check_should_run:
runs-on: ubuntu-latest
outputs:
should_run: ${{ steps.check_should_run.outputs.should_run }}
steps:
- name: Check for Core changes label
id: check_should_run
run: |
if [[ ("${{ github.event.label.name }}" == "Core changes" && "${{github.event_name}}" == 'pull_request_target') || "${{github.event_name}}" != 'pull_request_target' ]]; then
echo "should_run=true" >> $GITHUB_OUTPUT
else
echo "should_run=false" >> $GITHUB_OUTPUT
fi
load-engine-matrix:
runs-on: ubuntu-latest
# We want to run this job only if the previous job outputs should_run=true,
# Which means that if the trigger was a label we run this job just if the label was Core changes
needs: check_should_run
if: needs.check_should_run.outputs.should_run == 'true'
outputs:
matrix: ${{ steps.load-engine-matrix.outputs.matrix }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Load the engine matrix
id: load-engine-matrix
shell: bash
# We want to run the full matrix only for scheduled runs and Core changes
# For other events we want to run only the always matrix which is first and last version supported
run: |
if [[ "${{ github.event_name }}" == "pull_request" || "${{ github.event_name }}" == "push" ]]; then
echo "matrix=$(jq -c '[.[] | select(.run == "always")]' < .github/json_matrices/engine-matrix.json)" >> $GITHUB_OUTPUT
else
echo "matrix=$(jq -c . < .github/json_matrices/engine-matrix.json)" >> $GITHUB_OUTPUT
fi
create-version-matrix:
runs-on: ubuntu-latest
needs: check_should_run
if: needs.check_should_run.outputs.should_run == 'true'
outputs:
matrix: ${{ steps.create-version-matrix.outputs.matrix }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Create version matrix
id: create-version-matrix
shell: bash
# We want to run the full matrix only for scheduled runs and Core changes
# For other events we want to run only the always matrix which is first and last version supported
run: |
if [[ "${{ github.event_name }}" == "pull_request" || "${{ github.event_name }}" == "push" ]]; then
echo 'matrix={"node":["16.x","20.x"]}' >> $GITHUB_OUTPUT
else
echo 'matrix={"node":["16.x","17.x","18.x","19.x","20.x"]}' >> $GITHUB_OUTPUT
fi
test-ubuntu-latest:
runs-on: ubuntu-latest
needs: [load-engine-matrix, create-version-matrix]
env:
ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true
timeout-minutes: 25
strategy:
fail-fast: false
matrix:
engine: ${{ fromJson(needs.load-engine-matrix.outputs.matrix) }}
node: ${{ fromJson(needs.create-version-matrix.outputs.matrix).node }}
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node }}
- name: Build Node wrapper
uses: ./.github/workflows/build-node-wrapper
with:
os: "ubuntu"
target: "x86_64-unknown-linux-gnu"
github-token: ${{ secrets.GITHUB_TOKEN }}
engine-version: ${{ matrix.engine.version }}
- name: test
working-directory: ./node
run: |
which redis-server
redis-server --version
npm test
- name: test hybrid node modules - commonjs
run: |
npm install --package-lock-only
npm ci
npm run build-and-test
working-directory: ./node/hybrid-node-tests/commonjs-test
- name: test hybrid node modules - ecma
run: |
npm install --package-lock-only
npm ci
npm run build-and-test
working-directory: ./node/hybrid-node-tests/ecmascript-test
- uses: ./.github/workflows/test-benchmark
with:
language-flag: -node
lint-rust:
timeout-minutes: 15
runs-on: ubuntu-latest
needs: check_should_run
if: needs.check_should_run.outputs.should_run == 'true'
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- uses: ./.github/workflows/lint-rust
with:
cargo-toml-folder: ./node/rust-client
name: lint node rust
build-macos-latest:
if: github.event_name == 'schedule' || github.event.label.name == 'Core changes'
runs-on: macos-latest
timeout-minutes: 25
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Set up Homebrew
uses: Homebrew/actions/setup-homebrew@master
- name: Install NodeJS
run: |
brew update
brew upgrade || true
brew install node
- name: Downgrade npm major version to 8
run: |
npm i -g npm@8
- name: Build Node wrapper
uses: ./.github/workflows/build-node-wrapper
with:
os: "macos"
named_os: "darwin"
arch: "arm64"
target: "aarch64-apple-darwin"
github-token: ${{ secrets.GITHUB_TOKEN }}
engine-version: "7.2.5"
- name: Test compatibility
run: npm test -- -t "set and get flow works"
working-directory: ./node
build-amazonlinux-latest:
if: github.event_name == 'schedule' || github.event.label.name == 'Core changes'
runs-on: ubuntu-latest
container: amazonlinux:latest
timeout-minutes: 15
steps:
- name: Install git
run: |
yum -y remove git
yum -y remove git-*
yum -y install https://packages.endpointdev.com/rhel/7/os/x86_64/endpoint-repo.x86_64.rpm
yum install -y git
git --version
- uses: actions/checkout@v4
- name: Checkout submodules
run: |
git config --global --add safe.directory "$GITHUB_WORKSPACE"
git submodule update --init --recursive
- name: Install NodeJS
run: |
yum install -y nodejs
- name: Build Node wrapper
uses: ./.github/workflows/build-node-wrapper
with:
os: "amazon-linux"
target: "x86_64-unknown-linux-gnu"
github-token: ${{ secrets.GITHUB_TOKEN }}
engine-version: "7.2.5"
- name: Test compatibility
run: npm test -- -t "set and get flow works"
working-directory: ./node
build-and-test-linux-musl-on-x86:
if: github.event_name == 'schedule' || github.event.label.name == 'Core changes'
name: Build and test Node wrapper on Linux musl
runs-on: ubuntu-latest
container:
image: node:alpine
options: --user root --privileged
steps:
- name: Install git
run: |
apk update
apk add git
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup musl on Linux
uses: ./.github/workflows/setup-musl-on-linux
with:
workspace: $GITHUB_WORKSPACE
npm-scope: ${{ secrets.NPM_SCOPE }}
npm-auth-token: ${{ secrets.NPM_AUTH_TOKEN }}
- name: Build Node wrapper
uses: ./.github/workflows/build-node-wrapper
with:
os: ubuntu
named_os: linux
arch: x64
target: x86_64-unknown-linux-musl
github-token: ${{ secrets.GITHUB_TOKEN }}
engine-version: "7.2.5"
- name: Test compatibility
shell: bash
run: npm test -- -t "set and get flow works"
working-directory: ./node