Added support for TencentOS and OpenCloudOS #982
This file contains hidden or 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: "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", "tencentos/tencentos4: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", "tencentos/tencentos4-minimal:latest", "opencloudos/opencloudos9-minimal:latest" ] | |
| container: | |
| image: ${{ matrix.os }} | |
| defaults: | |
| run: | |
| shell: bash | |
| steps: | |
| - name: install git | |
| run: | | |
| if command -v microdnf &>/dev/null; then | |
| PM=microdnf | |
| elif command -v dnf &>/dev/null; then | |
| PM=dnf | |
| else | |
| PM=yum | |
| fi | |
| echo "PM=$PM" >> $GITHUB_ENV | |
| $PM update -y | |
| $PM 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: ${{ env.PM }} repolist | |
| - name: Install Nodejs | |
| run: | | |
| ${{ env.PM }} 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: | | |
| ${{ env.PM }} remove nodejs -y | |
| ${{ env.PM }} 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 |