Skip to content

Test Installation Scripts #979

Test Installation Scripts

Test Installation Scripts #979

Workflow file for this run

name: "Test Installation Scripts"
on:
schedule:
- cron: "00 00 * * *"
push:
branches:
- master
pull_request:
branches:
- master
jobs:
deb:
name: "NodeJS ${{ matrix.version }}(${{ matrix.os }})"
runs-on: ubuntu-latest
strategy:
matrix:
version: [ 20, 22, 24, 25, 26 ]
os: [ "ubuntu:24.04", "ubuntu:22.04", "debian:13", "debian:11" ]
container:
image: ${{ matrix.os }}
defaults:
run:
shell: bash
steps:
- name: Checkout Repo
uses: actions/checkout@v5
- name: Run Installation Script
run: ./scripts/deb/setup_${{ matrix.version }}.x
- name: Audit Repository
if: matrix.os == 'debian:13'
run: apt update --audit
- name: Install Nodejs
run: apt install nodejs -y
- name: Validate Node Version
run: |
node -e "console.log(process.version)"
NODE_VERSION=$(node -e "console.log(process.version.split('.')[0])")
if [[ ${NODE_VERSION} != "v${{ matrix.version }}" ]]; then
echo "Node version is not ${{ matrix.version }}. It is $NODE_VERSION"
exit 1
fi
- name: Validate Node matches latest official tag
env:
MATRIX_OS: ${{ matrix.os }}
run: |
cat <<'EOF' > /tmp/check-latest.js
const fs = require('fs');
const https = require('https');
const major = 'v' + process.argv[2] + '.';
const os = process.argv[3] || '';
const summaryFile = process.env.GITHUB_STEP_SUMMARY;
const appendSummary = (s) => { if (summaryFile) fs.appendFileSync(summaryFile, s); };
https.get('https://nodejs.org/dist/index.json', (res) => {
let data = '';
res.on('data', (c) => (data += c));
res.on('end', () => {
const versions = JSON.parse(data);
const latest = versions.find((v) => v.version.startsWith(major));
const installed = process.version;
const header = '### Node ' + process.argv[2] + ' on ' + os + '\n\n';
if (!latest) {
console.log('No official release yet for Node ' + process.argv[2] + ', skipping');
appendSummary(header + 'Status: no official release yet for this major, skipped\n\n');
process.exit(0);
}
if (installed !== latest.version) {
const msg = 'Node ' + process.argv[2] + ' on ' + os + ': installed ' + installed + ' does not match latest official ' + latest.version;
console.log('::warning::' + msg);
appendSummary(header + 'Installed: `' + installed + '`\n\nLatest official: `' + latest.version + '`\n\nStatus: **WARNING** NodeSource package is behind upstream\n\n');
process.exit(0);
}
console.log('Installed ' + installed + ' matches latest ' + latest.version);
});
}).on('error', (e) => { console.error('Could not fetch nodejs.org/dist/index.json:', e.message); process.exit(0); });
EOF
node /tmp/check-latest.js ${{ matrix.version }} "$MATRIX_OS"
- name: Install NSolid
if: matrix.version != 25 && matrix.version != 26
run: |
apt remove nodejs -y
apt install nsolid -y
- name: Validate NSolid Version
if: matrix.version != 25 && matrix.version != 26
run: |
nsolid -e "console.log(process.version)"
NSOLID_VERSION=$(nsolid -e "console.log(process.version.split('.')[0])")
if [[ ${NSOLID_VERSION} != "v${{ matrix.version }}" ]]; then
echo "NSolid version is not ${{ matrix.version }}. It is $NSOLID_VERSION"
exit 1
fi
rpm:
name: "NodeJS ${{ matrix.version }}(${{ matrix.os }})"
runs-on: ubuntu-latest
strategy:
matrix:
version: [ 20, 22, 24, 25, 26 ]
os: [ "fedora:41", "amazonlinux:2023", "rockylinux:9", "rockylinux:8", "redhat/ubi9:latest" ]
container:
image: ${{ matrix.os }}
defaults:
run:
shell: bash
steps:
- name: install git
run: |
dnf update -y
dnf install git -y
- name: Checkout Repo
uses: actions/checkout@v5
- name: Run Istallation Script
run: ./scripts/rpm/setup_${{ matrix.version }}.x
- name: Audit Repository
run: dnf repolist
- name: Install Nodejs
run: |
dnf install nodejs -y
- name: Validate Node Version
run: |
node -e "console.log(process.version)"
NODE_VERSION=$(node -e "console.log((process.version).split('.')[0])")
if [[ ${NODE_VERSION} != "v${{ matrix.version }}" ]]; then
echo "Node version is not ${{ matrix.version }}. It is $NODE_VERSION"
exit 1
fi
- name: Validate Node matches latest official tag
env:
MATRIX_OS: ${{ matrix.os }}
run: |
cat <<'EOF' > /tmp/check-latest.js
const fs = require('fs');
const https = require('https');
const major = 'v' + process.argv[2] + '.';
const os = process.argv[3] || '';
const summaryFile = process.env.GITHUB_STEP_SUMMARY;
const appendSummary = (s) => { if (summaryFile) fs.appendFileSync(summaryFile, s); };
https.get('https://nodejs.org/dist/index.json', (res) => {
let data = '';
res.on('data', (c) => (data += c));
res.on('end', () => {
const versions = JSON.parse(data);
const latest = versions.find((v) => v.version.startsWith(major));
const installed = process.version;
const header = '### Node ' + process.argv[2] + ' on ' + os + '\n\n';
if (!latest) {
console.log('No official release yet for Node ' + process.argv[2] + ', skipping');
appendSummary(header + 'Status: no official release yet for this major, skipped\n\n');
process.exit(0);
}
if (installed !== latest.version) {
const msg = 'Node ' + process.argv[2] + ' on ' + os + ': installed ' + installed + ' does not match latest official ' + latest.version;
console.log('::warning::' + msg);
appendSummary(header + 'Installed: `' + installed + '`\n\nLatest official: `' + latest.version + '`\n\nStatus: **WARNING** NodeSource package is behind upstream\n\n');
process.exit(0);
}
console.log('Installed ' + installed + ' matches latest ' + latest.version);
});
}).on('error', (e) => { console.error('Could not fetch nodejs.org/dist/index.json:', e.message); process.exit(0); });
EOF
node /tmp/check-latest.js ${{ matrix.version }} "$MATRIX_OS"
- name: Install NSolid
if: matrix.version != 25 && matrix.version != 26
run: |
dnf remove nodejs -y
dnf install nsolid -y
- name: Validate NSolid Version
if: matrix.version != 25 && matrix.version != 26
run: |
nsolid -e "console.log(process.version)"
NSOLID_VERSION=$(nsolid -e "console.log((process.version).split('.')[0])")
if [[ ${NSOLID_VERSION} != "v${{ matrix.version }}" ]]; then
echo "NSolid version is not ${{ matrix.version }}. It is $NSOLID_VERSION"
exit 1
fi
rpm-minimal:
name: "NodeJS ${{ matrix.version }}(${{ matrix.os }})"
runs-on: ubuntu-latest
strategy:
matrix:
version: [ 20, 22, 24, 25, 26 ]
os: [ "rockylinux:9-minimal", "rockylinux:8-minimal", "redhat/ubi9-minimal:latest" ]
container:
image: ${{ matrix.os }}
defaults:
run:
shell: bash
steps:
- name: install git
run: |
microdnf update -y
microdnf install git -y
- name: Checkout Repo
uses: actions/checkout@v5
- name: Run Istallation Script
run: ./scripts/rpm/setup_${{ matrix.version }}.x
- name: Audit Repository
run: microdnf repolist
- name: Install Nodejs
run: |
microdnf install nodejs -y
- name: Validate Node Version
run: |
node -e "console.log(process.version)"
NODE_VERSION=$(node -e "console.log((process.version).split('.')[0])")
if [[ ${NODE_VERSION} != "v${{ matrix.version }}" ]]; then
echo "Node version is not ${{ matrix.version }}. It is $NODE_VERSION"
exit 1
fi
- name: Validate Node matches latest official tag
env:
MATRIX_OS: ${{ matrix.os }}
run: |
cat <<'EOF' > /tmp/check-latest.js
const fs = require('fs');
const https = require('https');
const major = 'v' + process.argv[2] + '.';
const os = process.argv[3] || '';
const summaryFile = process.env.GITHUB_STEP_SUMMARY;
const appendSummary = (s) => { if (summaryFile) fs.appendFileSync(summaryFile, s); };
https.get('https://nodejs.org/dist/index.json', (res) => {
let data = '';
res.on('data', (c) => (data += c));
res.on('end', () => {
const versions = JSON.parse(data);
const latest = versions.find((v) => v.version.startsWith(major));
const installed = process.version;
const header = '### Node ' + process.argv[2] + ' on ' + os + '\n\n';
if (!latest) {
console.log('No official release yet for Node ' + process.argv[2] + ', skipping');
appendSummary(header + 'Status: no official release yet for this major, skipped\n\n');
process.exit(0);
}
if (installed !== latest.version) {
const msg = 'Node ' + process.argv[2] + ' on ' + os + ': installed ' + installed + ' does not match latest official ' + latest.version;
console.log('::warning::' + msg);
appendSummary(header + 'Installed: `' + installed + '`\n\nLatest official: `' + latest.version + '`\n\nStatus: **WARNING** NodeSource package is behind upstream\n\n');
process.exit(0);
}
console.log('Installed ' + installed + ' matches latest ' + latest.version);
});
}).on('error', (e) => { console.error('Could not fetch nodejs.org/dist/index.json:', e.message); process.exit(0); });
EOF
node /tmp/check-latest.js ${{ matrix.version }} "$MATRIX_OS"
- name: Install NSolid
if: matrix.version != 25 && matrix.version != 26
run: |
microdnf remove nodejs -y
microdnf install nsolid -y
- name: Validate NSolid Version
if: matrix.version != 25 && matrix.version != 26
run: |
nsolid -e "console.log(process.version)"
NSOLID_VERSION=$(nsolid -e "console.log((process.version).split('.')[0])")
if [[ ${NSOLID_VERSION} != "v${{ matrix.version }}" ]]; then
echo "NSolid version is not ${{ matrix.version }}. It is $NSOLID_VERSION"
exit 1
fi