Node: Fix modules CI #7255
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Node | |
on: | |
push: | |
branches: | |
- main | |
- release-* | |
- v* | |
paths: | |
- glide-core/src/** | |
- glide-core/redis-rs/redis/src/** | |
- 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-engine/action.yml | |
- .github/json_matrices/** | |
- .github/workflows/create-test-matrices/action.yml | |
pull_request: | |
paths: | |
- glide-core/src/** | |
- glide-core/redis-rs/redis/src/** | |
- 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-engine/action.yml | |
- .github/json_matrices/** | |
- .github/workflows/create-test-matrices/action.yml | |
workflow_dispatch: | |
inputs: | |
full-matrix: | |
description: "Run the full engine, host, and language version matrix" | |
type: boolean | |
default: false | |
name: | |
required: false | |
type: string | |
description: "(Optional) Test run name" | |
workflow_call: | |
concurrency: | |
group: node-${{ github.head_ref || github.ref }}-${{ toJson(inputs) }} | |
cancel-in-progress: true | |
env: | |
CARGO_TERM_COLOR: always | |
run-name: | |
# Set custom name if job is started manually and name is given | |
${{ github.event_name == 'workflow_dispatch' && (inputs.name == '' && format('{0} @ {1} {2}', github.ref_name, github.sha, toJson(inputs)) || inputs.name) || '' }} | |
jobs: | |
get-matrices: | |
runs-on: ubuntu-latest | |
outputs: | |
engine-matrix-output: ${{ steps.get-matrices.outputs.engine-matrix-output }} | |
host-matrix-output: ${{ steps.get-matrices.outputs.host-matrix-output }} | |
version-matrix-output: ${{ steps.get-matrices.outputs.version-matrix-output }} | |
steps: | |
- uses: actions/checkout@v4 | |
- id: get-matrices | |
uses: ./.github/workflows/create-test-matrices | |
with: | |
language-name: node | |
run-full-matrix: ${{ github.event.inputs.full-matrix == 'true' || github.event_name == 'schedule' }} | |
test-node: | |
runs-on: ${{ matrix.host.RUNNER }} | |
needs: [get-matrices] | |
timeout-minutes: 25 | |
strategy: | |
fail-fast: false | |
matrix: | |
engine: ${{ fromJson(needs.get-matrices.outputs.engine-matrix-output) }} | |
host: ${{ fromJson(needs.get-matrices.outputs.host-matrix-output) }} | |
node: ${{ fromJson(needs.get-matrices.outputs.version-matrix-output) }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Node | |
uses: actions/setup-node@v4 | |
env: | |
ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true | |
with: | |
node-version: ${{ matrix.node }} | |
- name: Build Node wrapper | |
uses: ./.github/workflows/build-node-wrapper | |
with: | |
os: ${{ matrix.host.OS }} | |
named_os: ${{ matrix.host.NAMED_OS }} | |
arch: ${{ matrix.host.ARCH }} | |
target: ${{ matrix.host.TARGET }} | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
engine-version: ${{ matrix.engine.version }} | |
- name: test | |
run: npm test | |
working-directory: ./node | |
- name: test hybrid node modules - commonjs | |
if: ${{ matrix.engine.version == '8.0' && matrix.host.OS == 'ubuntu' && matrix.host.RUNNER == 'ubuntu-latest' && matrix.node == '20.x' }} | |
run: | | |
npm install | |
npm run test | |
working-directory: ./node/hybrid-node-tests/commonjs-test | |
env: | |
JEST_HTML_REPORTER_OUTPUT_PATH: test-report-commonjs.html | |
- name: test hybrid node modules - ecma | |
if: ${{ matrix.engine.version == '8.0' && matrix.host.OS == 'ubuntu' && matrix.host.RUNNER == 'ubuntu-latest' && matrix.node == '20.x' }} | |
run: | | |
npm install | |
npm run test | |
working-directory: ./node/hybrid-node-tests/ecmascript-test | |
env: | |
JEST_HTML_REPORTER_OUTPUT_PATH: test-report-ecma.html | |
- uses: ./.github/workflows/test-benchmark | |
if: ${{ matrix.engine.version == '8.0' && matrix.host.OS == 'ubuntu' && matrix.host.RUNNER == 'ubuntu-latest' && matrix.node == '20.x' }} | |
with: | |
language-flag: -node | |
- name: Upload test reports | |
if: always() | |
continue-on-error: true | |
uses: actions/upload-artifact@v4 | |
with: | |
name: test-report-node-${{ matrix.node }}-${{ matrix.engine.type }}-${{ matrix.engine.version }}-${{ matrix.host.OS }}-${{ matrix.host.ARCH }} | |
path: | | |
node/test-report*.html | |
utils/clusters/** | |
benchmarks/results/** | |
lint-rust: | |
timeout-minutes: 15 | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: lint node rust | |
uses: ./.github/workflows/lint-rust | |
with: | |
cargo-toml-folder: ./node/rust-client | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
get-containers: | |
runs-on: ubuntu-latest | |
if: ${{ github.event.inputs.full-matrix == 'true' || github.event_name == 'schedule' }} | |
outputs: | |
engine-matrix-output: ${{ steps.get-matrices.outputs.engine-matrix-output }} | |
host-matrix-output: ${{ steps.get-matrices.outputs.host-matrix-output }} | |
version-matrix-output: ${{ steps.get-matrices.outputs.version-matrix-output }} | |
steps: | |
- uses: actions/checkout@v4 | |
- id: get-matrices | |
uses: ./.github/workflows/create-test-matrices | |
with: | |
language-name: node | |
run-full-matrix: true | |
containers: true | |
test-node-container: | |
runs-on: ${{ matrix.host.RUNNER }} | |
needs: [get-containers] | |
timeout-minutes: 25 | |
strategy: | |
fail-fast: false | |
matrix: | |
node: ${{ fromJson(needs.get-containers.outputs.version-matrix-output) }} | |
engine: ${{ fromJson(needs.get-containers.outputs.engine-matrix-output) }} | |
host: ${{ fromJson(needs.get-containers.outputs.host-matrix-output) }} | |
container: | |
image: ${{ matrix.host.IMAGE }} | |
options: ${{ join(' -q ', matrix.host.CONTAINER_OPTIONS) }} # adding `-q` to bypass empty options | |
steps: | |
- name: Install git | |
run: | | |
if [[ ${{ contains(matrix.host.TARGET, 'musl') }} == true ]]; then | |
apk update | |
apk add --no-cache git tar | |
elif [[ ${{ contains(matrix.host.IMAGE, 'amazonlinux') }} == true ]]; then | |
yum update | |
yum install -y git tar | |
fi | |
echo IMAGE=amazonlinux:latest | sed -r 's/:/-/g' >> $GITHUB_ENV | |
# Replace `:` in the variable otherwise it can't be used in `upload-artifact` | |
- uses: actions/checkout@v4 | |
- name: Setup musl on Linux | |
if: ${{ contains(matrix.host.TARGET, 'musl') }} | |
uses: ./.github/workflows/setup-musl-on-linux | |
with: | |
workspace: $GITHUB_WORKSPACE | |
npm-scope: ${{ secrets.NPM_SCOPE }} | |
npm-auth-token: ${{ secrets.NPM_AUTH_TOKEN }} | |
- name: Setup Node | |
uses: actions/setup-node@v4 | |
env: | |
ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true | |
with: | |
node-version: ${{ matrix.node }} | |
- name: Build Node wrapper | |
uses: ./.github/workflows/build-node-wrapper | |
with: | |
os: ${{ matrix.host.OS }} | |
named_os: ${{ matrix.host.NAMED_OS }} | |
target: ${{ matrix.host.TARGET }} | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
engine-version: ${{ matrix.engine.version }} | |
arch: ${{ matrix.host.ARCH }} | |
- name: test | |
run: npm test | |
working-directory: ./node | |
- name: Upload test reports | |
if: always() | |
continue-on-error: true | |
uses: actions/upload-artifact@v4 | |
with: | |
name: test-report-node-${{ matrix.node }}-${{ matrix.engine.type }}-${{ matrix.engine.version }}-${{ env.IMAGE }}-${{ matrix.host.ARCH }} | |
path: | | |
node/test-report*.html | |
utils/clusters/** | |
benchmarks/results/** | |
test-modules: | |
if: (github.repository_owner == 'valkey-io' && github.event_name == 'workflow_dispatch') || github.event.pull_request.head.repo.owner.login == 'valkey-io' | |
environment: AWS_ACTIONS | |
name: Running Module Tests | |
runs-on: [self-hosted, linux, ARM64] | |
timeout-minutes: 15 | |
steps: | |
- name: Setup self-hosted runner access | |
run: sudo chown -R $USER:$USER /home/ubuntu/actions-runner/_work/valkey-glide | |
- uses: actions/checkout@v4 | |
- name: Install Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 20.x | |
- name: Build Node wrapper | |
uses: ./.github/workflows/build-node-wrapper | |
with: | |
os: ubuntu | |
named_os: linux | |
arch: arm64 | |
target: aarch64-unknown-linux-gnu | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: test | |
run: npm run test-modules -- --cluster-endpoints=${{ secrets.MEMDB_MODULES_ENDPOINT }} --tls=true | |
working-directory: ./node | |
- name: Upload test reports | |
if: always() | |
continue-on-error: true | |
uses: actions/upload-artifact@v4 | |
with: | |
name: test-report-node-modules-ubuntu | |
path: | | |
node/test-report*.html |