diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 58d47211..99fc7672 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - version: [ 20, 22, 24, 25 ] + version: [ 20, 22, 24, 25, 26 ] os: [ "ubuntu:24.04", "ubuntu:22.04", "debian:13", "debian:11" ] container: image: ${{ matrix.os }} @@ -84,13 +84,13 @@ jobs: node /tmp/check-latest.js ${{ matrix.version }} "$MATRIX_OS" - name: Install NSolid - if: matrix.version != 25 + if: matrix.version != 25 && matrix.version != 26 run: | apt remove nodejs -y apt install nsolid -y - name: Validate NSolid Version - if: matrix.version != 25 + if: matrix.version != 25 && matrix.version != 26 run: | nsolid -e "console.log(process.version)" NSOLID_VERSION=$(nsolid -e "console.log(process.version.split('.')[0])") @@ -105,7 +105,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - version: [ 20, 22, 24, 25 ] + version: [ 20, 22, 24, 25, 26 ] os: [ "fedora:41", "amazonlinux:2023", "rockylinux:9", "rockylinux:8", "redhat/ubi9:latest" ] container: image: ${{ matrix.os }} @@ -177,13 +177,13 @@ jobs: node /tmp/check-latest.js ${{ matrix.version }} "$MATRIX_OS" - name: Install NSolid - if: matrix.version != 25 + if: matrix.version != 25 && matrix.version != 26 run: | dnf remove nodejs -y dnf install nsolid -y - name: Validate NSolid Version - if: matrix.version != 25 + if: matrix.version != 25 && matrix.version != 26 run: | nsolid -e "console.log(process.version)" NSOLID_VERSION=$(nsolid -e "console.log((process.version).split('.')[0])") @@ -197,7 +197,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - version: [ 20, 22, 24, 25] + version: [ 20, 22, 24, 25, 26 ] os: [ "rockylinux:9-minimal", "rockylinux:8-minimal", "redhat/ubi9-minimal:latest" ] container: image: ${{ matrix.os }} @@ -269,13 +269,13 @@ jobs: node /tmp/check-latest.js ${{ matrix.version }} "$MATRIX_OS" - name: Install NSolid - if: matrix.version != 25 + if: matrix.version != 25 && matrix.version != 26 run: | microdnf remove nodejs -y microdnf install nsolid -y - name: Validate NSolid Version - if: matrix.version != 25 + if: matrix.version != 25 && matrix.version != 26 run: | nsolid -e "console.log(process.version)" NSOLID_VERSION=$(nsolid -e "console.log((process.version).split('.')[0])") diff --git a/scripts/deb/script_generator/generator.sh b/scripts/deb/script_generator/generator.sh index e45bb816..0a589ea4 100755 --- a/scripts/deb/script_generator/generator.sh +++ b/scripts/deb/script_generator/generator.sh @@ -25,7 +25,7 @@ if [ ! -f "$base_script" ]; then fi # List of versions -versions=("20" "22" "24" "25") +versions=("20" "22" "24" "25" "26") # Iterate over the versions and create scripts for version in "${versions[@]}"; do @@ -34,7 +34,7 @@ done # Define LTS and current Node.js versions lts_version="24" -current_version="25" +current_version="26" # Create setup_lts and setup_current scripts create_script "$lts_version" "lts" diff --git a/scripts/deb/setup_26.x b/scripts/deb/setup_26.x new file mode 100755 index 00000000..85c44845 --- /dev/null +++ b/scripts/deb/setup_26.x @@ -0,0 +1,121 @@ +#!/bin/bash + +# Logger Function +log() { + local message="$1" + local type="$2" + local timestamp=$(date '+%Y-%m-%d %H:%M:%S') + local color + local endcolor="\033[0m" + + case "$type" in + "info") color="\033[38;5;79m" ;; + "success") color="\033[1;32m" ;; + "error") color="\033[1;31m" ;; + *) color="\033[1;34m" ;; + esac + + echo -e "${color}${timestamp} - ${message}${endcolor}" +} + +# Error handler function +handle_error() { + local exit_code=$1 + local error_message="$2" + log "Error: $error_message (Exit Code: $exit_code)" "error" + exit $exit_code +} + +# Function to check for command availability +command_exists() { + command -v "$1" &> /dev/null +} + +check_os() { + if ! [ -f "/etc/debian_version" ]; then + echo "Error: This script is only supported on Debian-based systems." + exit 1 + fi +} + +# Function to Install the script pre-requisites +install_pre_reqs() { + log "Installing pre-requisites" "info" + + # Run 'apt update' + if ! apt update -y; then + handle_error "$?" "Failed to run 'apt update'" + fi + + # Run 'apt install' + if ! apt install -y apt-transport-https ca-certificates curl gnupg; then + handle_error "$?" "Failed to install packages" + fi + + if ! mkdir -p /usr/share/keyrings; then + handle_error "$?" "Makes sure the path /usr/share/keyrings exist or run ' mkdir -p /usr/share/keyrings' with sudo" + fi + + rm -f /usr/share/keyrings/nodesource.gpg || true + rm -f /etc/apt/sources.list.d/nodesource.list || true + rm -f /etc/apt/sources.list.d/nodesource.sources || true + + # Run 'curl' and 'gpg' to download and import the NodeSource signing key + if ! curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /usr/share/keyrings/nodesource.gpg; then + handle_error "$?" "Failed to download and import the NodeSource signing key" + fi + + # Explicitly set the permissions to ensure the file is readable by all + if ! chmod 644 /usr/share/keyrings/nodesource.gpg; then + handle_error "$?" "Failed to set correct permissions on /usr/share/keyrings/nodesource.gpg" + fi +} + +# Function to configure the Repo +configure_repo() { + local node_version=$1 + + arch=$(dpkg --print-architecture) + if [ "$arch" != "amd64" ] && [ "$arch" != "arm64" ]; then + handle_error "1" "Unsupported architecture: $arch. Only amd64, arm64 are supported. Contact Nodesource for an extended support version https://nodesource.com/pages/contact-us.html." + fi + + cat < /dev/null +Types: deb +URIs: https://deb.nodesource.com/node_$node_version +Suites: nodistro +Components: main +Architectures: $arch +Signed-By: /usr/share/keyrings/nodesource.gpg +EOF + + # N|solid Config + echo "Package: nsolid" | tee /etc/apt/preferences.d/nsolid > /dev/null + echo "Pin: origin deb.nodesource.com" | tee -a /etc/apt/preferences.d/nsolid > /dev/null + echo "Pin-Priority: 600" | tee -a /etc/apt/preferences.d/nsolid > /dev/null + + # Nodejs Config + echo "Package: nodejs" | tee /etc/apt/preferences.d/nodejs > /dev/null + echo "Pin: origin deb.nodesource.com" | tee -a /etc/apt/preferences.d/nodejs > /dev/null + echo "Pin-Priority: 600" | tee -a /etc/apt/preferences.d/nodejs > /dev/null + + # Run 'apt update' + if ! apt update -y; then + handle_error "$?" "Failed to run 'apt update'" + else + log "Repository configured successfully." + log "To install Node.js, run: apt install nodejs -y" "info" + log "You can use N|solid Runtime as a node.js alternative" "info" + log "To install N|solid Runtime, run: apt install nsolid -y \n" "success" + fi +} + +# Define Node.js version +NODE_VERSION="26.x" + +# Check OS +check_os + +# Main execution +install_pre_reqs || handle_error $? "Failed installing pre-requisites" +configure_repo "$NODE_VERSION" || handle_error $? "Failed configuring repository" diff --git a/scripts/deb/setup_current.x b/scripts/deb/setup_current.x index 5c577cbe..85c44845 100755 --- a/scripts/deb/setup_current.x +++ b/scripts/deb/setup_current.x @@ -111,7 +111,7 @@ EOF } # Define Node.js version -NODE_VERSION="25.x" +NODE_VERSION="26.x" # Check OS check_os diff --git a/scripts/rpm/script_generator/generator.sh b/scripts/rpm/script_generator/generator.sh index 53b4a79b..5a3de72c 100644 --- a/scripts/rpm/script_generator/generator.sh +++ b/scripts/rpm/script_generator/generator.sh @@ -25,7 +25,7 @@ if [ ! -f "$base_script" ]; then fi # List of versions -versions=("23" "24" "25") +versions=("23" "24" "25" "26") # Iterate over the versions and create scripts for version in "${versions[@]}"; do @@ -34,7 +34,7 @@ done # Define LTS and current Node.js versions lts_version="24" -current_version="25" +current_version="26" # Create setup_lts and setup_current scripts create_script "$lts_version" "lts" diff --git a/scripts/rpm/setup_26.x b/scripts/rpm/setup_26.x new file mode 100755 index 00000000..b51348ea --- /dev/null +++ b/scripts/rpm/setup_26.x @@ -0,0 +1,132 @@ +#!/bin/bash + +# Logger Function +log() { + local message="$1" + local type="$2" + local timestamp=$(date '+%Y-%m-%d %H:%M:%S') + local color + local endcolor="\033[0m" + + case "$type" in + "info") color="\033[38;5;79m" ;; + "success") color="\033[1;32m" ;; + "error") color="\033[1;31m" ;; + *) color="\033[1;34m" ;; + esac + + echo -e "${color}${timestamp} - ${message}${endcolor}" +} + +# Error handler function +handle_error() { + local exit_code=$1 + local error_message="$2" + log "Error: $error_message (Exit Code: $exit_code)" "error" + exit $exit_code +} + +# Function to check for command availability +command_exists() { + command -v "$1" &> /dev/null +} + +# Check if we are on an RPM-based system +if ! [ -f /etc/redhat-release ] && ! grep -q "Amazon Linux" /etc/system-release 2>/dev/null; then + handle_error 1 "This script is intended for RPM-based systems. Please run it on an RPM-based system." +fi + +log "Cleaning up old repositories..." "info" +rm -f /etc/yum.repos.d/nodesource*.repo +log "Old repositories removed" "info" + +# Define Node.js version +NODE_VERSION="26.x" + +# Get system architecture +SYS_ARCH=$(uname -m) + +# Validate system architecture +case "$SYS_ARCH" in + aarch64|x86_64) log "Supported architecture: $SYS_ARCH" "info" ;; + *) handle_error 1 "Unsupported architecture: $SYS_ARCH. Only aarch64 and x86_64 are supported." ;; +esac + +# Repository content for Node.js +NODEJS_REPO_CONTENT="[nodesource-nodejs] +name=Node.js Packages for Linux RPM based distros - $SYS_ARCH +baseurl=https://rpm.nodesource.com/pub_${NODE_VERSION}/nodistro/nodejs/$SYS_ARCH +priority=9 +enabled=1 +gpgcheck=1 +gpgkey=https://rpm.nodesource.com/gpgkey/ns-operations-public.key +module_hotfixes=1" + +# Write Node.js repository content +echo "$NODEJS_REPO_CONTENT" | tee /etc/yum.repos.d/nodesource-nodejs.repo > /dev/null + +# Check if Node.js version is an LTS version +if [[ "$NODE_VERSION" == "20.x" ]] || [[ "$NODE_VERSION" == "22.x" ]] || [[ "$NODE_VERSION" == "24.x" ]]; then + # Repository content for N|Solid + NSOLID_REPO_CONTENT="[nodesource-nsolid] +name=N|Solid Packages for Linux RPM based distros - $SYS_ARCH +baseurl=https://rpm.nodesource.com/pub_${NODE_VERSION}/nodistro/nsolid/$SYS_ARCH +priority=9 +enabled=1 +gpgcheck=1 +gpgkey=https://rpm.nodesource.com/gpgkey/ns-operations-public.key +module_hotfixes=1" + + # Write N|Solid repository content + echo "$NSOLID_REPO_CONTENT" | tee /etc/yum.repos.d/nodesource-nsolid.repo > /dev/null + log "Added N|Solid repository for LTS version: $NODE_VERSION" "info" +fi + +# Check for availability of dnf, yum or microdnf +if command_exists dnf; then + log "dnf available, updating..." "info" + dnf makecache --disablerepo="*" --enablerepo="nodesource-nodejs" + + # Update N|Solid repository if it's LTS + if [[ "$NODE_VERSION" == "20.x" ]] || [[ "$NODE_VERSION" == "22.x" ]] || [[ "$NODE_VERSION" == "24.x" ]]; then + dnf makecache --disablerepo="*" --enablerepo="nodesource-nsolid" + log "Repository is configured and updated." "info" + log "You can use N|solid Runtime as a node.js alternative" "info" + log "To install N|solid Runtime, run: dnf install nsolid -y" "success" + else + log "Repository is configured and updated." "info" + fi + + log "Run 'dnf install nodejs -y' to complete the installation." "info" + exit 0 +elif command_exists yum; then + log "yum available, updating..." "info" + yum makecache --disablerepo="*" --enablerepo="nodesource-nodejs" + + # Update N|Solid repository if it's LTS + if [[ "$NODE_VERSION" == "20.x" ]] || [[ "$NODE_VERSION" == "22.x" ]] || [[ "$NODE_VERSION" == "24.x" ]]; then + yum makecache --disablerepo="*" --enablerepo="nodesource-nsolid" + log "Repository is configured and updated." "info" + log "You can use N|solid Runtime as a node.js alternative" "info" + log "Run 'yum install nsolid -y' to complete the installation." "success" + else + log "Repository is configured and updated." "info" + fi + + log "Run 'yum install nodejs -y' to complete the installation." "info" +elif command_exists microdnf; then + log "microdnf available, updating..." "info" + microdnf makecache --disablerepo="*" --enablerepo="nodesource-nodejs" + + # Update N|Solid repository if it's LTS + if [[ "$NODE_VERSION" == "20.x" ]] || [[ "$NODE_VERSION" == "22.x" ]] || [[ "$NODE_VERSION" == "24.x" ]]; then + microdnf makecache --disablerepo="*" --enablerepo="nodesource-nsolid" + log "Repository is configured and updated. Run 'microdnf install nsolid -y' to complete the installation." "info" + else + log "Repository is configured and updated." "info" + fi + + log "Run 'microdnf install nodejs -y' to complete the installation." "info" +else + handle_error 1 "Neither yum, dnf nor microdnf package manager was found. Please update your system using your package manager." +fi diff --git a/scripts/rpm/setup_current.x b/scripts/rpm/setup_current.x index 95bc3bd8..b51348ea 100755 --- a/scripts/rpm/setup_current.x +++ b/scripts/rpm/setup_current.x @@ -41,7 +41,7 @@ rm -f /etc/yum.repos.d/nodesource*.repo log "Old repositories removed" "info" # Define Node.js version -NODE_VERSION="25.x" +NODE_VERSION="26.x" # Get system architecture SYS_ARCH=$(uname -m)