diff --git a/README.md b/README.md index cbad903..dca99d9 100644 --- a/README.md +++ b/README.md @@ -1,142 +1,3 @@ -# How to update Node.js in Fedora - -## Determine the Node.js version -Monitor the [Node.js Blog](https://nodejs.org/en/blog/) to be notified of -available updates. - -For simplicity and copy-and-paste of instructions below, set some variables -here: - -``` -NODEJS_MAJOR=12 -NODEJS_VERSION=12.9.0 -``` - -## Clone the Fedora package repository -These steps assume that you are a comaintainer of Node.js or a provenpackager -in Fedora. - -``` -fedpkg clone nodejs nodejs-fedora -``` - -Next, switch to the major version branch you are going to update. We'll use -Node.js 12.9.0 in this document. Adjust the versions appropriately for the -version you are working on. - -``` -pushd nodejs-fedora -fedpkg switch-branch $NODEJS_MAJOR -popd -``` - - -## Clone the Fedora Module repository - -``` -fedpkg clone modules/nodejs nodejs-fedora-module -``` - - -## Clone the upstream Node.js repository -``` -git clone -o upstream git://github.com/nodejs/node.git nodejs-upstream -``` - - -## Rebase the Fedora patches atop the latest release - -``` -pushd nodejs-upstream -git checkout -b fedora-v$NODEJS_VERSION v$NODEJS_VERSION -git am -3 ../nodejs-fedora/*.patch -``` - -If the patches do not apply cleanly, resolve the merges appropriately. Once -they have all been applied, output them again: - -``` -git format-patch -M --patience --full-index -o ../nodejs-fedora v$NODEJS_VERSION..HEAD -popd -``` - - -## Update the Node.js tarball and specfile - -``` -pushd nodejs-fedora -./nodejs-tarball.sh $NODEJS_VERSION -``` - -Note that this command will also output all of the versions for the software -bundled with Node.js. You will need to edit `nodejs.spec` and update the -%global values near the top of that file to include the appropriate values -matching the dependencies. Make sure to also update the Node.js versions too! - -Note that if libuv is updated, you need to ensure that the libuv in each -buildroot is of a sufficient version. If not, you may need to update that -package first and submit a buildroot override. - -Update the RPM spec %changelog appropriately. - - -## (Preferred) Perform a scratch-build on at least one architecture - -``` -fedpkg scratch-build [--arch x86_64] --srpm -``` - -Verify that it built successfully. - - -## Push the changes up to Fedora -``` -fedpkg commit -cs -fedpkg push -popd -``` - - -## (Optional) Build for Fedora releases - -If this major version is the default for one or more Fedora releases, build it -for them. (Note: this step will go away in the future, once module default -streams are available in the non-modular buildroot.) - -In the case of Node.js 12.x, this is the default version for Fedora 31 and 32. - -``` -pushd nodejs-fedora -fedpkg switch-branch [master|31] -git merge $NODEJS_MAJOR -fedpkg push -fedpkg build -popd -``` - -## Build module stream - -``` -pushd nodejs-fedora-module -fedpkg switch-branch $NODEJS_MAJOR -``` - -If the module has changed any package dependencies (such as added a dep on a -new shared library), you may need to modify nodejs.yaml here. If not, you can -simply run: - -``` -git commit --allow-empty -sm "Update to $NODEJS_VERSION" -fedpkg push -fedpkg module-build -popd -``` - -## Submit built packages to Bodhi -Follow the usual processes for stable/branched releases to submit builds for -testing. - - # How to bundle nodejs libraries in Fedora The upstream Node.js stance on @@ -152,11 +13,11 @@ For more detailed packaging information go to the ## Bundling Script ``` -nodejs-packaging-bundler [version] +nodejs-packaging-bundler [version] [tarball] ``` nodejs-packaging-bundler is it's own package, nodejs-packaging-bundler and must be installed before use. -nodejs-packaging-bundler gets the latest npm version available, if no version is given. +nodejs-packaging-bundler gets the latest npm version available, if no version is given, or uses the existing tarball if one is given. Using npm is preferred for to ease reproducibility. If a local tarball is required (e.g. because the package is missing from npm or its version is too old), please ensure to document how the tarball was created. It produces four files and puts them in ${HOME}/rpmbuild/SOURCES * -.tgz - This is the tarball from npm.org diff --git a/changelog b/changelog new file mode 100644 index 0000000..d80c151 --- /dev/null +++ b/changelog @@ -0,0 +1,170 @@ +* Thu Jan 19 2023 Fedora Release Engineering - 2022.10-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Thu Oct 20 2022 Stephen Gallagher - 2022.10-1 +- Move native module building tools here from Node.js +- Add `Requires: /usr/bin/node` + +* Tue Oct 18 2022 Davide Cavalca - 2021.06-7 +- NPM bundler: recursively bundle modules for all packages found + +* Fri Jul 22 2022 Fedora Release Engineering - 2021.06-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Sun May 01 2022 Davide Cavalca - 2021.06-5 +- NPM bundler: optionally use a local tarball instead of npm + +* Thu Jan 20 2022 Stephen Gallagher - 2021.06-4 +- NPM bundler: also find namespaced bundled dependencies + +* Thu Jul 22 2021 Fedora Release Engineering - 2021.06-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Tue Jun 22 2021 Stephen Gallagher - 2021.06-2 +- Fix hard-coded output directory in the bundler + +* Wed Jun 02 2021 Stephen Gallagher - 2021.06-1 +- Update to 2021.06-1 +- bundler: Handle archaic license metadata +- bundler: Warn about bundled dependencies with no license metadata + +* Tue Jan 26 2021 Fedora Release Engineering - 2021.01-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Wed Jan 20 2021 Stephen Gallagher - 2021.01-2 +- nodejs-packaging-bundler improvements to handle uncommon characters + +* Wed Jan 06 2021 Troy Dawson - 2021.01 +- Add nodejs-packaging-bundler and update README.md + +* Fri Sep 18 2020 Stephen Gallagher - 2020.09-1 +- Move to dist-git as the upstream + +* Wed Sep 02 2020 Stephen Gallagher - 25-1 +- Fix incorrect bundled library detection for Requires + +* Tue Sep 01 2020 Stephen Gallagher - 24-1 +- Check node_modules_prod for bundled dependencies + +* Tue Jul 28 2020 Fedora Release Engineering - 23-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Wed Jun 03 2020 Stephen Gallagher - 23-3 +- Drop Requires: nodejs(engine) + +* Wed Jan 29 2020 Fedora Release Engineering - 23-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Thu Oct 31 2019 Tom Hughes - 23-1 +- Ensure nodejs(engine) is required for packages with no dependencies + +* Thu Jul 25 2019 Fedora Release Engineering - 22-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Tue Jul 2 2019 Tom Hughes - 22-1 +- Refactor nodejs.req in more idiomatic Python +- Treat only external dependency links as un-bundled + +* Mon Jun 10 2019 Tom Hughes - 21-1 +- Refactor nodejs.prov in more idiomatic Python + +* Fri Feb 01 2019 Fedora Release Engineering - 20-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Sat Jan 5 2019 Tom Hughes - 20-1 +- Fix handling of ^ dependencies for multiversion modules + +* Thu Jan 3 2019 Tom Hughes - 18-1 +- Handle =, >= and <= dependencies for multiversion modules + +* Fri Jul 13 2018 Fedora Release Engineering - 17-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Thu May 3 2018 Tom Hughes - 17-1 +- Fix version comparators with a space after the operator + +* Tue May 1 2018 Tom Hughes - 16-1 +- Rewrite nodejs.req to better match npm versioning rules +- Add tests for nodejs.req and nodejs.prov + +* Mon Apr 30 2018 Tom Hughes - 15-1 +- Fix caret dependency ranges + +* Thu Apr 12 2018 Tom Hughes - 14-1 +- Only match top level modules for requires and provides generation + +* Wed Feb 28 2018 Tom Hughes - 13-1 +- Add %%nodejs_setversion macro + +* Fri Feb 23 2018 Tom Hughes - 12-1 +- Port to python 3 + +* Thu Feb 08 2018 Fedora Release Engineering - 11-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Sat Jan 13 2018 Tom Hughes - 11-1 +- nodesjs.req: use boolean with for range dependencies + +* Tue Sep 12 2017 Stephen Gallagher - 10-1 +- Release v10 +- Automatically generate Provides for bundled npm dependencies + +* Thu Jul 27 2017 Fedora Release Engineering - 9-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Tue Feb 21 2017 Tom Hughes - 9-3 +- switch source URL to pagure + +* Fri Feb 10 2017 Fedora Release Engineering - 9-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Tue Feb 2 2016 Tom Hughes - 9-1 +- nodejs-fixdep: stop --move erroring on missing dependency types + +* Sun Jan 31 2016 Tom Hughes - 8-1 +- nodejs-fixdep: add --move option +- nodejs-symlink-deps: add --optional option +- req: generate suggests for optional dependencies + +* Mon Nov 16 2015 Tom Hughes - 7-5 +- nodejs-symlink-deps: handle caret in versions + +* Wed Jun 17 2015 Fedora Release Engineering - 7-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Wed Mar 4 2015 Ville Skyttä - 7-3 +- Install macros in %%{_rpmconfidir}/macros.d where available (#1074279) + +* Sat Jun 07 2014 Fedora Release Engineering - 7-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Sun May 25 2014 T.C. Hollingsworth - 7-1 +- nodejs-symlink-deps: fix regression preventing multiply versioned modules from + being symlinked correctly + +* Sat May 24 2014 T.C. Hollingsworth - 6-1 +- nodejs-fixdep: use real option parsing +- nodejs-fixdep: support modifying optionalDependencies and devDependencies +- req: support the caret operator +- nodejs-symlink-deps: add --force option +- nodejs-symlink-deps: add --build alias for --check +- nodejs-fixdep: support converting to caret dependencies +- nodejs-fixdep: support non-dictionary dependency properties +- multiver_modules: add nan + +* Mon Jul 29 2013 T.C. Hollingsworth - 4-1 +- handle cases where the symlink target exists gracefully + +* Wed Jul 10 2013 T.C. Hollingsworth - 3-1 +- dependencies and engines can be lists or strings too +- handle unversioned dependencies on multiply versioned modules correctly + (RHBZ#982798) +- restrict to compatible arches + +* Fri Jun 21 2013 T.C. Hollingsworth - 2-1 +- move multiple version list to /usr/share/node +- bump nodejs Requires to 0.10.12 +- add Requires: redhat-rpm-config + +* Thu Jun 13 2013 T.C. Hollingsworth - 1-1 +- initial package diff --git a/macros.nodejs b/macros.nodejs index f86891c..4f14187 100644 --- a/macros.nodejs +++ b/macros.nodejs @@ -8,9 +8,6 @@ #for future-proofing only; we don't do multilib %nodejs_sitearch %{nodejs_sitelib} -# currently installed nodejs version -%nodejs_version %(%{__nodejs} -v | sed s/v//) - # symlink dependencies so `npm link` works # this should be run in every module's %%install section # pass --check to work in the current directory instead of the buildroot @@ -25,7 +22,7 @@ %nodejs_fixdep %{_rpmconfigdir}/nodejs-fixdep # patch package.json to set the package version -# e.g. `%%nodejs_setversion 1.2.3` +# e.g. `%%nodejs_setversion 1.2.3` %nodejs_setversion %{_rpmconfigdir}/nodejs-setversion # macro to filter unwanted provides from Node.js binary native modules diff --git a/nodejs-packaging-bundler b/nodejs-packaging-bundler index 5be05e1..47486a4 100755 --- a/nodejs-packaging-bundler +++ b/nodejs-packaging-bundler @@ -2,13 +2,14 @@ OUTPUT_DIR="$(rpm -E '%{_sourcedir}')" usage() { - echo "Usage `basename $0` [version] " >&2 + echo "Usage `basename $0` [version] [tarball]" >&2 echo >&2 echo " Given a npm module name, and optionally a version," >&2 echo " download the npm, the prod and dev dependencies," >&2 echo " each in their own tarball." >&2 echo " Also finds licenses prod dependencies." >&2 echo " All three tarballs and the license list are copied to ${OUTPUT_DIR}" >&2 + echo " If a tarball is passed, use that instead of downloading from npm" >&2 echo >&2 exit 1 } @@ -38,6 +39,9 @@ fi if [ $# -ge 2 ]; then VERSION="$2" + if [ $# -ge 3 ]; then + TARBALL="$(realpath "$3")" + fi else VERSION="$(npm view ${PACKAGE} version)" fi @@ -47,18 +51,33 @@ TMP_DIR=$(mktemp -d -t ci-XXXXXXXXXX) mkdir -p ${OUTPUT_DIR} mkdir -p ${TMP_DIR} pushd ${TMP_DIR} -npm pack ${PACKAGE} +if [ -f "$TARBALL" ]; then + TARBALL_DIR=$(mktemp -d -t ci-XXXXXXXXXX) + pushd ${TARBALL_DIR} + tar xfz ${TARBALL} --strip-components 1 + npm pack . + popd > /dev/null + mv ${TARBALL_DIR}/*.tgz . + rm -rf ${TARBALL_DIR} +else + npm pack ${PACKAGE}@${VERSION} +fi tar xfz *.tgz cd package -echo " Downloading prod dependencies" -npm install --no-optional --only=prod -if [ $? -ge 1 ] ; then - echo " ERROR WILL ROBINSON" - rm -rf node_modules -else - echo " Successful prod dependencies download" - mv node_modules/ node_modules_prod -fi +for packagejson in $(find . -type d -name node_modules\* -prune -o -type f -name package.json -print); do + pushd $(dirname $packagejson) + echo " Downloading prod dependencies" + npm install --omit=dev --omit=optional + if [ $? -ge 1 ] ; then + echo " ERROR WILL ROBINSON" + rm -rf node_modules + else + echo " Successful prod dependencies download" + mv node_modules/ node_modules_prod + fi + popd +done + echo "LICENSES IN BUNDLE:" find . -name "package.json" -exec jq '.license | strings' {} \; >> ${TMP_DIR}/${PACKAGE_SAFE}-${VERSION}-bundled-licenses.txt find . -name "package.json" -exec jq '.license | objects | .type' {} \; >> ${TMP_DIR}/${PACKAGE_SAFE}-${VERSION}-bundled-licenses.txt 2>/dev/null @@ -75,19 +94,23 @@ if [ -s ${TMP_DIR}/nolicense.txt ]; then fi -echo " Downloading dev dependencies" -npm install --no-optional --only=dev -if [ $? -ge 1 ] ; then - echo " ERROR WILL ROBINSON" -else - echo " Successful dev dependencies download" - mv node_modules/ node_modules_dev -fi +for packagejson in $(find . -type d -name node_modules\* -prune -o -type f -name package.json -print); do + pushd $(dirname $packagejson) + echo " Downloading dev dependencies" + npm install --omit=optional + if [ $? -ge 1 ] ; then + echo " ERROR WILL ROBINSON" + else + echo " Successful dev dependencies download" + mv node_modules/ node_modules_dev + fi + popd +done if [ -d node_modules_prod ] ; then - tar cfz ../${PACKAGE_SAFE}-${VERSION}-nm-prod.tgz node_modules_prod + tar cfz ../${PACKAGE_SAFE}-${VERSION}-nm-prod.tgz --sort=name $(find . -type d -name node_modules_prod) fi if [ -d node_modules_dev ] ; then - tar cfz ../${PACKAGE_SAFE}-${VERSION}-nm-dev.tgz node_modules_dev + tar cfz ../${PACKAGE_SAFE}-${VERSION}-nm-dev.tgz --sort=name $(find . -type d -name node_modules_dev) fi cd .. cp -v ${PACKAGE_SAFE}-${VERSION}* "${OUTPUT_DIR}" diff --git a/nodejs-packaging.spec b/nodejs-packaging.spec index a8ebf51..2a280db 100644 --- a/nodejs-packaging.spec +++ b/nodejs-packaging.spec @@ -1,8 +1,8 @@ %global macrosdir %(d=%{_rpmconfigdir}/macros.d; [ -d $d ] || d=%{_sysconfdir}/rpm; echo $d) Name: nodejs-packaging -Version: 2021.06 -Release: 3%{?dist} +Version: 2023.10 +Release: %autorelease Summary: RPM Macros and Utilities for Node.js Packaging BuildArch: noarch License: MIT @@ -19,7 +19,8 @@ Source0007: nodejs-symlink-deps Source0008: nodejs.attr Source0009: nodejs.prov Source0010: nodejs.req -Source0011: nodejs-packaging-bundler + +Source0111: nodejs-packaging-bundler # Created with `tar cfz test.tar.gz test` Source0101: test.tar.gz @@ -46,10 +47,8 @@ It generates a bundled license file that gets the licenses in the runtime dependency tarball %prep -pushd %{_topdir}/BUILD cp -da %{_sourcedir}/* . tar xvf test.tar.gz -popd %build @@ -84,154 +83,4 @@ install -Dpm0755 nodejs-packaging-bundler %{buildroot}%{_bindir}/nodejs-packagin %changelog -* Thu Jul 22 2021 Fedora Release Engineering - 2021.06-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - -* Tue Jun 22 2021 Stephen Gallagher - 2021.06-2 -- Fix hard-coded output directory in the bundler - -* Wed Jun 02 2021 Stephen Gallagher - 2021.06-1 -- Update to 2021.06-1 -- bundler: Handle archaic license metadata -- bundler: Warn about bundled dependencies with no license metadata - -* Tue Jan 26 2021 Fedora Release Engineering - 2021.01-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - -* Wed Jan 20 2021 Stephen Gallagher - 2021.01-2 -- nodejs-packaging-bundler improvements to handle uncommon characters - -* Wed Jan 06 2021 Troy Dawson - 2021.01 -- Add nodejs-packaging-bundler and update README.md - -* Fri Sep 18 2020 Stephen Gallagher - 2020.09-1 -- Move to dist-git as the upstream - -* Wed Sep 02 2020 Stephen Gallagher - 25-1 -- Fix incorrect bundled library detection for Requires - -* Tue Sep 01 2020 Stephen Gallagher - 24-1 -- Check node_modules_prod for bundled dependencies - -* Tue Jul 28 2020 Fedora Release Engineering - 23-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild - -* Wed Jun 03 2020 Stephen Gallagher - 23-3 -- Drop Requires: nodejs(engine) - -* Wed Jan 29 2020 Fedora Release Engineering - 23-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild - -* Thu Oct 31 2019 Tom Hughes - 23-1 -- Ensure nodejs(engine) is required for packages with no dependencies - -* Thu Jul 25 2019 Fedora Release Engineering - 22-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild - -* Tue Jul 2 2019 Tom Hughes - 22-1 -- Refactor nodejs.req in more idiomatic Python -- Treat only external dependency links as un-bundled - -* Mon Jun 10 2019 Tom Hughes - 21-1 -- Refactor nodejs.prov in more idiomatic Python - -* Fri Feb 01 2019 Fedora Release Engineering - 20-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild - -* Sat Jan 5 2019 Tom Hughes - 20-1 -- Fix handling of ^ dependencies for multiversion modules - -* Thu Jan 3 2019 Tom Hughes - 18-1 -- Handle =, >= and <= dependencies for multiversion modules - -* Fri Jul 13 2018 Fedora Release Engineering - 17-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild - -* Thu May 3 2018 Tom Hughes - 17-1 -- Fix version comparators with a space after the operator - -* Tue May 1 2018 Tom Hughes - 16-1 -- Rewrite nodejs.req to better match npm versioning rules -- Add tests for nodejs.req and nodejs.prov - -* Mon Apr 30 2018 Tom Hughes - 15-1 -- Fix caret dependency ranges - -* Thu Apr 12 2018 Tom Hughes - 14-1 -- Only match top level modules for requires and provides generation - -* Wed Feb 28 2018 Tom Hughes - 13-1 -- Add %%nodejs_setversion macro - -* Fri Feb 23 2018 Tom Hughes - 12-1 -- Port to python 3 - -* Thu Feb 08 2018 Fedora Release Engineering - 11-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild - -* Sat Jan 13 2018 Tom Hughes - 11-1 -- nodesjs.req: use boolean with for range dependencies - -* Tue Sep 12 2017 Stephen Gallagher - 10-1 -- Release v10 -- Automatically generate Provides for bundled npm dependencies - -* Thu Jul 27 2017 Fedora Release Engineering - 9-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild - -* Tue Feb 21 2017 Tom Hughes - 9-3 -- switch source URL to pagure - -* Fri Feb 10 2017 Fedora Release Engineering - 9-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild - -* Tue Feb 2 2016 Tom Hughes - 9-1 -- nodejs-fixdep: stop --move erroring on missing dependency types - -* Sun Jan 31 2016 Tom Hughes - 8-1 -- nodejs-fixdep: add --move option -- nodejs-symlink-deps: add --optional option -- req: generate suggests for optional dependencies - -* Mon Nov 16 2015 Tom Hughes - 7-5 -- nodejs-symlink-deps: handle caret in versions - -* Wed Jun 17 2015 Fedora Release Engineering - 7-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild - -* Wed Mar 4 2015 Ville Skyttä - 7-3 -- Install macros in %%{_rpmconfidir}/macros.d where available (#1074279) - -* Sat Jun 07 2014 Fedora Release Engineering - 7-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild - -* Sun May 25 2014 T.C. Hollingsworth - 7-1 -- nodejs-symlink-deps: fix regression preventing multiply versioned modules from - being symlinked correctly - -* Sat May 24 2014 T.C. Hollingsworth - 6-1 -- nodejs-fixdep: use real option parsing -- nodejs-fixdep: support modifying optionalDependencies and devDependencies -- req: support the caret operator -- nodejs-symlink-deps: add --force option -- nodejs-symlink-deps: add --build alias for --check -- nodejs-fixdep: support converting to caret dependencies -- nodejs-fixdep: support non-dictionary dependency properties -- multiver_modules: add nan - -* Mon Jul 29 2013 T.C. Hollingsworth - 4-1 -- handle cases where the symlink target exists gracefully - -* Wed Jul 10 2013 T.C. Hollingsworth - 3-1 -- dependencies and engines can be lists or strings too -- handle unversioned dependencies on multiply versioned modules correctly - (RHBZ#982798) -- restrict to compatible arches - -* Fri Jun 21 2013 T.C. Hollingsworth - 2-1 -- move multiple version list to /usr/share/node -- bump nodejs Requires to 0.10.12 -- add Requires: redhat-rpm-config - -* Thu Jun 13 2013 T.C. Hollingsworth - 1-1 -- initial package +%autochangelog diff --git a/nodejs-symlink-deps b/nodejs-symlink-deps index b5e44b3..ba525eb 100755 --- a/nodejs-symlink-deps +++ b/nodejs-symlink-deps @@ -30,6 +30,8 @@ import shutil import sys def symlink(source, dest): + if os.path.sep in dest: + os.makedirs(os.path.dirname(dest), exist_ok=True) try: os.symlink(source, dest) except OSError: diff --git a/nodejs.attr b/nodejs.attr index 1066499..018bdbe 100644 --- a/nodejs.attr +++ b/nodejs.attr @@ -1,4 +1,4 @@ %__nodejs_provides %{_rpmconfigdir}/nodejs.prov %__nodejs_requires %{_rpmconfigdir}/nodejs.req %__nodejs_suggests %{_rpmconfigdir}/nodejs.req --optional -%__nodejs_path ^/usr/lib(64)?/node_modules/[^/]+/package\\.json$ +%__nodejs_path ^/usr/lib/node_modules\(_[[:digit:]]\+\)\{0,1\}/[^/]\+/package\.json$ diff --git a/nodejs.prov b/nodejs.prov index 663d3d9..56a9bf1 100755 --- a/nodejs.prov +++ b/nodejs.prov @@ -93,9 +93,9 @@ def generate_dependencies(module_path, module_dir_set=NODE_MODULES): else: # Invalid metadata path raise ValueError("Invalid module path '%s'" % module_path) - for dir_path, subdir_list, __ in os.walk(root_dir): - # Currently in node_modules (or similar), continue to subdirs - if os.path.basename(dir_path) in module_dir_set: + for dir_path, subdir_list, file_list in os.walk(root_dir): + # We are only interested in directories that contain package.json + if "package.json" not in file_list: continue # Read and format metadata diff --git a/nodejs.req b/nodejs.req index 129606b..47e94aa 100755 --- a/nodejs.req +++ b/nodejs.req @@ -633,9 +633,9 @@ def has_only_bundled_dependencies(module_dir_path): for basename in os.listdir(dependency_root_path) ) bundled_dependency_iter = ( - os.path.realpath(path) + path for path in dependency_path_iter - if not os.path.islink(path) or path.startswith(module_root_path) + if not os.path.islink(path) or os.path.realpath(path).startswith(module_root_path) ) return any(bundled_dependency_iter) @@ -659,9 +659,6 @@ def extract_dependencies(metadata_path, optional=False): TypeError: Invalid dependency data type. """ - if has_only_bundled_dependencies(os.path.dirname(metadata_path)): - return # skip - # Read metadata try: with open(metadata_path, mode="r") as metadata_file: @@ -676,6 +673,9 @@ def extract_dependencies(metadata_path, optional=False): except KeyError: # NodeJS engine version unspecified yield rpm_format("nodejs(engine)") + if has_only_bundled_dependencies(os.path.dirname(metadata_path)): + return # skip + # Report listed dependencies kind = "optionalDependencies" if optional else "dependencies" container = metadata.get(kind, {}) diff --git a/sources b/sources index 52e9e27..a7170f1 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (test.tar.gz) = dfbda67b8741f1ca36bf63b2e842f81ba07381b3d92e75fa7e29f8e456543b4cae55e95785902f31a14ae4d0b7e89161ba04c0c10c2fff617b4ae9607c91e599 +SHA512 (test.tar.gz) = 04c1e741caa124c12b1070b6411d1a9fef9b328e15ec274170b7dcd9d26d9a6f9db21d6722ce0b39d0b693f237398065dd127b95a9a6e4947e182db2e3fad6f2 diff --git a/test/bundled/nodejs.req.out.exp b/test/bundled/nodejs.req.out.exp index 8b13789..64d8bb4 100644 --- a/test/bundled/nodejs.req.out.exp +++ b/test/bundled/nodejs.req.out.exp @@ -1 +1 @@ - +(nodejs(engine) >= 6 with nodejs(engine) < 10) diff --git a/test/bundled_namespace/node_modules/@nmcli/test201/package.json b/test/bundled_namespace/node_modules/@nmcli/test201/package.json new file mode 100644 index 0000000..4618046 --- /dev/null +++ b/test/bundled_namespace/node_modules/@nmcli/test201/package.json @@ -0,0 +1,4 @@ +{ + "name": "@nmcli/test201", + "version": "2.1.4" +} diff --git a/test/bundled_namespace/node_modules/test200/package.json b/test/bundled_namespace/node_modules/test200/package.json new file mode 100644 index 0000000..92ab4ba --- /dev/null +++ b/test/bundled_namespace/node_modules/test200/package.json @@ -0,0 +1,4 @@ +{ + "name": "test200", + "version": "1.3.5" +} diff --git a/test/bundled_namespace/nodejs.prov.err.exp b/test/bundled_namespace/nodejs.prov.err.exp new file mode 100644 index 0000000..e69de29 diff --git a/test/bundled_namespace/nodejs.prov.out.exp b/test/bundled_namespace/nodejs.prov.out.exp new file mode 100644 index 0000000..cf9c17f --- /dev/null +++ b/test/bundled_namespace/nodejs.prov.out.exp @@ -0,0 +1,3 @@ +bundled(nodejs-@nmcli/test201) = 2.1.4 +bundled(nodejs-test200) = 1.3.5 +npm(test) = 4.5.6 diff --git a/test/bundled_namespace/nodejs.req.err.exp b/test/bundled_namespace/nodejs.req.err.exp new file mode 100644 index 0000000..e69de29 diff --git a/test/bundled_namespace/nodejs.req.out.exp b/test/bundled_namespace/nodejs.req.out.exp new file mode 100644 index 0000000..64d8bb4 --- /dev/null +++ b/test/bundled_namespace/nodejs.req.out.exp @@ -0,0 +1 @@ +(nodejs(engine) >= 6 with nodejs(engine) < 10) diff --git a/test/bundled_namespace/package.json.in b/test/bundled_namespace/package.json.in new file mode 100644 index 0000000..e41f38b --- /dev/null +++ b/test/bundled_namespace/package.json.in @@ -0,0 +1,11 @@ +{ + "name": "test", + "version": "4.5.6", + "engines": { + "node": ">=6 <10" + }, + "dependencies": { + "test100": "^1.2.3", + "test101": ">=2.1" + } +} diff --git a/test/run b/test/run index 6afb356..7897b24 100755 --- a/test/run +++ b/test/run @@ -4,7 +4,7 @@ ln -sf nodejs.req nodejs_req.py "$(command -v python2 || echo :)" -m doctest nodejs_req.py || exit 1 "$(command -v python3 || echo :)" -m doctest nodejs_req.py || exit 1 -for test in unbundled bundled +for test in unbundled bundled bundled_namespace do sed -e "s|//.*$||" < test/$test/package.json.in > test/$test/package.json