679308e617
Signed-off-by: Stephen Gallagher <sgallagh@redhat.com>
261 lines
8.8 KiB
Bash
Executable File
261 lines
8.8 KiB
Bash
Executable File
#!/bin/sh
|
|
# Uses Argbash to generate command argument parsing. To update
|
|
# arguments, make sure to call
|
|
# `argbash nodejs-tarball.sh -o nodejs-tarball.sh`
|
|
|
|
# ARG_POSITIONAL_SINGLE([version],[Node.js release version],[""])
|
|
# ARG_DEFAULTS_POS([])
|
|
# ARG_HELP([Tool to aid in Node.js packaging of new releases])
|
|
# ARGBASH_GO()
|
|
# needed because of Argbash --> m4_ignore([
|
|
### START OF CODE GENERATED BY Argbash v2.8.1 one line above ###
|
|
# Argbash is a bash code generator used to get arguments parsing right.
|
|
# Argbash is FREE SOFTWARE, see https://argbash.io for more info
|
|
|
|
|
|
die()
|
|
{
|
|
local _ret=$2
|
|
test -n "$_ret" || _ret=1
|
|
test "$_PRINT_HELP" = yes && print_help >&2
|
|
echo "$1" >&2
|
|
exit ${_ret}
|
|
}
|
|
|
|
|
|
begins_with_short_option()
|
|
{
|
|
local first_option all_short_options='h'
|
|
first_option="${1:0:1}"
|
|
test "$all_short_options" = "${all_short_options/$first_option/}" && return 1 || return 0
|
|
}
|
|
|
|
# THE DEFAULTS INITIALIZATION - POSITIONALS
|
|
_positionals=()
|
|
_arg_version=""
|
|
# THE DEFAULTS INITIALIZATION - OPTIONALS
|
|
|
|
|
|
print_help()
|
|
{
|
|
printf '%s\n' "Tool to aid in Node.js packaging of new releases"
|
|
printf 'Usage: %s [-h|--help] [<version>]\n' "$0"
|
|
printf '\t%s\n' "<version>: Node.js release version (default: '""')"
|
|
printf '\t%s\n' "-h, --help: Prints help"
|
|
}
|
|
|
|
|
|
parse_commandline()
|
|
{
|
|
_positionals_count=0
|
|
while test $# -gt 0
|
|
do
|
|
_key="$1"
|
|
case "$_key" in
|
|
-h|--help)
|
|
print_help
|
|
exit 0
|
|
;;
|
|
-h*)
|
|
print_help
|
|
exit 0
|
|
;;
|
|
*)
|
|
_last_positional="$1"
|
|
_positionals+=("$_last_positional")
|
|
_positionals_count=$((_positionals_count + 1))
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
}
|
|
|
|
|
|
handle_passed_args_count()
|
|
{
|
|
test "${_positionals_count}" -le 1 || _PRINT_HELP=yes die "FATAL ERROR: There were spurious positional arguments --- we expect between 0 and 1, but got ${_positionals_count} (the last one was: '${_last_positional}')." 1
|
|
}
|
|
|
|
|
|
assign_positional_args()
|
|
{
|
|
local _positional_name _shift_for=$1
|
|
_positional_names="_arg_version "
|
|
|
|
shift "$_shift_for"
|
|
for _positional_name in ${_positional_names}
|
|
do
|
|
test $# -gt 0 || break
|
|
eval "$_positional_name=\${1}" || die "Error during argument parsing, possibly an Argbash bug." 1
|
|
shift
|
|
done
|
|
}
|
|
|
|
parse_commandline "$@"
|
|
handle_passed_args_count
|
|
assign_positional_args 1 "${_positionals[@]}"
|
|
|
|
# OTHER STUFF GENERATED BY Argbash
|
|
|
|
### END OF CODE GENERATED BY Argbash (sortof) ### ])
|
|
# [ <-- needed because of Argbash
|
|
|
|
packages=("jq" "wget" "tar" "fedpkg" "grep" "sed")
|
|
|
|
rpm -q ${packages[@]} >/dev/null
|
|
if [ $? -ne 0 ]; then
|
|
sudo dnf -y install ${packages[@]}
|
|
fi
|
|
|
|
set -e
|
|
|
|
echo $_arg_version
|
|
|
|
if [ x$_arg_version != x ]; then
|
|
version=$_arg_version
|
|
else
|
|
version=$(rpm -q --specfile --qf='%{version}\n' nodejs*.spec | head -n1)
|
|
fi
|
|
|
|
NODE_MAJOR=$(echo $version | cut -d. -f1)
|
|
|
|
rm -rf node-v${version}.tar.gz \
|
|
node-v${version}-stripped.tar.gz \
|
|
node-v${version}/ \
|
|
wasi-sdk-* \
|
|
cjs-module-lexer* \
|
|
undici* \
|
|
SHASUMS256.txt
|
|
wget http://nodejs.org/dist/v${version}/node-v${version}.tar.gz \
|
|
http://nodejs.org/dist/v${version}/SHASUMS256.txt
|
|
sha256sum -c SHASUMS256.txt --ignore-missing
|
|
rm -f SHASUMS256.txt
|
|
tar -zxf node-v${version}.tar.gz
|
|
|
|
# Remove bundled OpenSSL
|
|
# We will link to the system version
|
|
rm -rf node-v${version}/deps/openssl
|
|
tar -zcf node-v${version}-stripped.tar.gz node-v${version}
|
|
|
|
set -x
|
|
# Download the cjs-module-lexer sources
|
|
LEXER_VERSION=$(jq -r '.version' node-v${version}/deps/cjs-module-lexer/package.json)
|
|
wget https://github.com/nodejs/cjs-module-lexer/archive/refs/tags/${LEXER_VERSION}.tar.gz
|
|
tar -zxf ${LEXER_VERSION}.tar.gz
|
|
rm -f cjs-module-lexer-${LEXER_VERSION}/lib/lexer.wasm
|
|
tar -zcf cjs-module-lexer-${LEXER_VERSION}-stripped.tar.gz cjs-module-lexer-${LEXER_VERSION}/
|
|
rm -f ${LEXER_VERSION}.tar.gz
|
|
|
|
# Download the WASI compiler used to build cjs-module-lexer
|
|
LEXER_WASI_MAJOR=$(grep -oP '(?<=^\W../wasi-sdk-)\d+\.\d+' cjs-module-lexer-${LEXER_VERSION}/Makefile | cut -d'.' -f1)
|
|
LEXER_WASI_MINOR=$(grep -oP '(?<=^\W../wasi-sdk-)\d+\.\d+' cjs-module-lexer-${LEXER_VERSION}/Makefile | cut -d'.' -f2)
|
|
wget https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${LEXER_WASI_MAJOR}/wasi-sdk-${LEXER_WASI_MAJOR}.${LEXER_WASI_MINOR}-linux.tar.gz
|
|
|
|
# Download the undici sources
|
|
UNDICI_VERSION=$(jq -r '.version' node-v${version}/deps/undici/src/package.json)
|
|
wget https://github.com/nodejs/undici/archive/refs/tags/v${UNDICI_VERSION}.tar.gz
|
|
tar -zxf v${UNDICI_VERSION}.tar.gz
|
|
rm -f undici-${UNDICI_VERSION}/lib/llhttp/llhttp*.wasm*
|
|
tar -zcf undici-${UNDICI_VERSION}-stripped.tar.gz undici-${UNDICI_VERSION}/
|
|
rm -f v${UNDICI_VERSION}.tar.gz
|
|
|
|
# Download the WASI compiler used to build undici
|
|
UNDICI_WASI_MAJOR=$(grep -oP '(?<=WASI_SDK_VERSION_MAJOR=).*' undici-${UNDICI_VERSION}/build/Dockerfile)
|
|
UNDICI_WASI_MINOR=$(grep -oP '(?<=WASI_SDK_VERSION_MINOR=).*' undici-${UNDICI_VERSION}/build/Dockerfile)
|
|
wget https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${UNDICI_WASI_MAJOR}/wasi-sdk-${UNDICI_WASI_MAJOR}.${UNDICI_WASI_MINOR}-linux.tar.gz
|
|
|
|
ICU_MAJOR=$(jq -r '.[0].url' node-v${version}/tools/icu/current_ver.dep | sed --expression='s/.*release-\([[:digit:]]\+\)-\([[:digit:]]\+\).*/\1/g')
|
|
ICU_MINOR=$(jq -r '.[0].url' node-v${version}/tools/icu/current_ver.dep | sed --expression='s/.*release-\([[:digit:]]\+\)-\([[:digit:]]\+\).*/\2/g')
|
|
|
|
set +x
|
|
|
|
# Download the ICU binary data files
|
|
rm -Rf icu4c-${ICU_MAJOR}_${ICU_MINOR}-data-bin-*.zip
|
|
wget $(grep Source3 nodejs${NODE_MAJOR}.spec | sed --expression="s/.*http/http/g" --expression="s/\(\%{icu_major}\)/${ICU_MAJOR}/g" --expression="s/\(\%{icu_minor}\)/${ICU_MINOR}/g")
|
|
wget $(grep Source4 nodejs${NODE_MAJOR}.spec | sed --expression="s/.*http/http/g" --expression="s/\(\%{icu_major}\)/${ICU_MAJOR}/g" --expression="s/\(\%{icu_minor}\)/${ICU_MINOR}/g")
|
|
|
|
fedpkg new-sources node-v${version}-stripped.tar.gz \
|
|
icu4c-${ICU_MAJOR}_${ICU_MINOR}-data-bin-*.zip \
|
|
cjs-module-lexer-${LEXER_VERSION}-stripped.tar.gz \
|
|
wasi-sdk-${LEXER_WASI_MAJOR}.${LEXER_WASI_MINOR}-linux.tar.gz \
|
|
undici-${UNDICI_VERSION}-stripped.tar.gz \
|
|
wasi-sdk-${UNDICI_WASI_MAJOR}.${UNDICI_WASI_MINOR}-linux.tar.gz
|
|
|
|
rm -f node-v${version}.tar.gz
|
|
|
|
set +e
|
|
|
|
# Determine the bundled versions of the various packages
|
|
echo "Bundled software versions"
|
|
echo "-------------------------"
|
|
echo
|
|
echo "libnode shared object version"
|
|
echo "========================="
|
|
grep "define NODE_MODULE_VERSION" node-v${version}/src/node_version.h
|
|
echo
|
|
echo "V8"
|
|
echo "========================="
|
|
grep "define V8_MAJOR_VERSION" node-v${version}/deps/v8/include/v8-version.h
|
|
grep "define V8_MINOR_VERSION" node-v${version}/deps/v8/include/v8-version.h
|
|
grep "define V8_BUILD_NUMBER" node-v${version}/deps/v8/include/v8-version.h
|
|
grep "define V8_PATCH_LEVEL" node-v${version}/deps/v8/include/v8-version.h
|
|
echo
|
|
echo "c-ares"
|
|
echo "========================="
|
|
grep "define ARES_VERSION_MAJOR" node-v${version}/deps/cares/include/ares_version.h
|
|
grep "define ARES_VERSION_MINOR" node-v${version}/deps/cares/include/ares_version.h
|
|
grep "define ARES_VERSION_PATCH" node-v${version}/deps/cares/include/ares_version.h
|
|
echo
|
|
echo "llhttp"
|
|
echo "========================="
|
|
grep "define LLHTTP_VERSION_MAJOR" node-v${version}/deps/llhttp/include/llhttp.h
|
|
grep "define LLHTTP_VERSION_MINOR" node-v${version}/deps/llhttp/include/llhttp.h
|
|
grep "define LLHTTP_VERSION_PATCH" node-v${version}/deps/llhttp/include/llhttp.h
|
|
echo
|
|
echo "libuv"
|
|
echo "========================="
|
|
grep "define UV_VERSION_MAJOR" node-v${version}/deps/uv/include/uv/version.h
|
|
grep "define UV_VERSION_MINOR" node-v${version}/deps/uv/include/uv/version.h
|
|
grep "define UV_VERSION_PATCH" node-v${version}/deps/uv/include/uv/version.h
|
|
echo
|
|
echo "nghttp2"
|
|
echo "========================="
|
|
grep "define NGHTTP2_VERSION " node-v${version}/deps/nghttp2/lib/includes/nghttp2/nghttp2ver.h
|
|
echo
|
|
echo "ICU"
|
|
echo "========================="
|
|
echo "${ICU_MAJOR}.${ICU_MINOR}"
|
|
echo
|
|
echo "punycode"
|
|
echo "========================="
|
|
grep "'version'" node-v${version}/lib/punycode.js
|
|
echo
|
|
echo "uvwasi"
|
|
echo "========================="
|
|
grep "define UVWASI_VERSION_MAJOR" node-v${version}/deps/uvwasi/include/uvwasi.h
|
|
grep "define UVWASI_VERSION_MINOR" node-v${version}/deps/uvwasi/include/uvwasi.h
|
|
grep "define UVWASI_VERSION_PATCH" node-v${version}/deps/uvwasi/include/uvwasi.h
|
|
echo
|
|
echo "npm"
|
|
echo "========================="
|
|
grep "\"version\":" node-v${version}/deps/npm/package.json
|
|
echo
|
|
echo "zlib"
|
|
echo "========================="
|
|
grep "define ZLIB_VERSION" node-v${version}/deps/zlib/zlib.h
|
|
echo
|
|
echo "cjs-module-lexer"
|
|
echo "========================="
|
|
echo "${LEXER_VERSION}"
|
|
echo "WASI-SDK: ${LEXER_WASI_MAJOR}.${LEXER_WASI_MINOR}"
|
|
echo
|
|
echo "undici"
|
|
echo "========================="
|
|
echo "${UNDICI_VERSION}"
|
|
echo "WASI-SDK: ${UNDICI_WASI_MAJOR}.${UNDICI_WASI_MINOR}"
|
|
echo
|
|
echo "Make sure these versions match what is in the RPM spec file"
|
|
|
|
rm -rf node-v${version}
|
|
# ] <-- needed because of Argbash
|