diff --git a/README.md b/README.md index dca99d9..cbad903 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,142 @@ +# 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 @@ -13,11 +152,11 @@ For more detailed packaging information go to the ## Bundling Script ``` -nodejs-packaging-bundler [version] [tarball] +nodejs-packaging-bundler [version] ``` 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, 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. +nodejs-packaging-bundler gets the latest npm version available, if no version is given. 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 deleted file mode 100644 index d80c151..0000000 --- a/changelog +++ /dev/null @@ -1,170 +0,0 @@ -* 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 4f14187..f86891c 100644 --- a/macros.nodejs +++ b/macros.nodejs @@ -8,6 +8,9 @@ #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 @@ -22,7 +25,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 47486a4..e0b2c47 100755 --- a/nodejs-packaging-bundler +++ b/nodejs-packaging-bundler @@ -1,15 +1,14 @@ #!/bin/bash -OUTPUT_DIR="$(rpm -E '%{_sourcedir}')" +OUTPUT_DIR="${HOME}/rpmbuild/SOURCES" usage() { - echo "Usage `basename $0` [version] [tarball]" >&2 + echo "Usage `basename $0` [version] " >&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 " All three tarballs and license list are copied to ${OUTPUT_DIR}" >&2 echo >&2 exit 1 } @@ -39,9 +38,6 @@ fi if [ $# -ge 2 ]; then VERSION="$2" - if [ $# -ge 3 ]; then - TARBALL="$(realpath "$3")" - fi else VERSION="$(npm view ${PACKAGE} version)" fi @@ -51,33 +47,18 @@ TMP_DIR=$(mktemp -d -t ci-XXXXXXXXXX) mkdir -p ${OUTPUT_DIR} mkdir -p ${TMP_DIR} pushd ${TMP_DIR} -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 +npm pack ${PACKAGE} tar xfz *.tgz cd package -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 " 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 dependences download" + mv node_modules/ node_modules_prod +fi 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 @@ -94,25 +75,21 @@ if [ -s ${TMP_DIR}/nolicense.txt ]; then 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 +echo " Downloading dev dependencies" +npm install --no-optional --only=dev +if [ $? -ge 1 ] ; then + echo " ERROR WILL ROBINSON" +else + echo " Successful dev dependences download" + mv node_modules/ node_modules_dev +fi if [ -d node_modules_prod ] ; then - tar cfz ../${PACKAGE_SAFE}-${VERSION}-nm-prod.tgz --sort=name $(find . -type d -name node_modules_prod) + tar cfz ../${PACKAGE_SAFE}-${VERSION}-nm-prod.tgz node_modules_prod fi if [ -d node_modules_dev ] ; then - tar cfz ../${PACKAGE_SAFE}-${VERSION}-nm-dev.tgz --sort=name $(find . -type d -name node_modules_dev) + tar cfz ../${PACKAGE_SAFE}-${VERSION}-nm-dev.tgz node_modules_dev fi cd .. -cp -v ${PACKAGE_SAFE}-${VERSION}* "${OUTPUT_DIR}" +cp -v ${PACKAGE_SAFE}-${VERSION}* $HOME/rpmbuild/SOURCES popd > /dev/null rm -rf ${TMP_DIR} diff --git a/nodejs-packaging.spec b/nodejs-packaging.spec index 2a280db..87c7533 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: 2023.10 -Release: %autorelease +Version: 2021.01 +Release: 3%{?dist} Summary: RPM Macros and Utilities for Node.js Packaging BuildArch: noarch License: MIT @@ -19,8 +19,7 @@ Source0007: nodejs-symlink-deps Source0008: nodejs.attr Source0009: nodejs.prov Source0010: nodejs.req - -Source0111: nodejs-packaging-bundler +Source0011: nodejs-packaging-bundler # Created with `tar cfz test.tar.gz test` Source0101: test.tar.gz @@ -40,15 +39,17 @@ Requires: coreutils, findutils, jq %description bundler nodejs-packaging-bundler bundles a node.js application node_module dependencies -It gathers the application tarball. +It gathers the application tarball. It generates a runtime (prod) tarball with runtime node_module dependencies It generates a testing (dev) tarball with node_module dependencies for testing 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 @@ -83,4 +84,143 @@ install -Dpm0755 nodejs-packaging-bundler %{buildroot}%{_bindir}/nodejs-packagin %changelog -%autochangelog +* 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/nodejs-symlink-deps b/nodejs-symlink-deps index ba525eb..b5e44b3 100755 --- a/nodejs-symlink-deps +++ b/nodejs-symlink-deps @@ -30,8 +30,6 @@ 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 018bdbe..1066499 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/node_modules\(_[[:digit:]]\+\)\{0,1\}/[^/]\+/package\.json$ +%__nodejs_path ^/usr/lib(64)?/node_modules/[^/]+/package\\.json$ diff --git a/nodejs.prov b/nodejs.prov index 56a9bf1..663d3d9 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, file_list in os.walk(root_dir): - # We are only interested in directories that contain package.json - if "package.json" not in file_list: + 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: continue # Read and format metadata diff --git a/nodejs.req b/nodejs.req index 47e94aa..129606b 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 = ( - path + os.path.realpath(path) for path in dependency_path_iter - if not os.path.islink(path) or os.path.realpath(path).startswith(module_root_path) + if not os.path.islink(path) or path.startswith(module_root_path) ) return any(bundled_dependency_iter) @@ -659,6 +659,9 @@ 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: @@ -673,9 +676,6 @@ 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 a7170f1..52e9e27 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (test.tar.gz) = 04c1e741caa124c12b1070b6411d1a9fef9b328e15ec274170b7dcd9d26d9a6f9db21d6722ce0b39d0b693f237398065dd127b95a9a6e4947e182db2e3fad6f2 +SHA512 (test.tar.gz) = dfbda67b8741f1ca36bf63b2e842f81ba07381b3d92e75fa7e29f8e456543b4cae55e95785902f31a14ae4d0b7e89161ba04c0c10c2fff617b4ae9607c91e599 diff --git a/test/bundled/nodejs.req.out.exp b/test/bundled/nodejs.req.out.exp index 64d8bb4..8b13789 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 deleted file mode 100644 index 4618046..0000000 --- a/test/bundled_namespace/node_modules/@nmcli/test201/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "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 deleted file mode 100644 index 92ab4ba..0000000 --- a/test/bundled_namespace/node_modules/test200/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "test200", - "version": "1.3.5" -} diff --git a/test/bundled_namespace/nodejs.prov.err.exp b/test/bundled_namespace/nodejs.prov.err.exp deleted file mode 100644 index e69de29..0000000 diff --git a/test/bundled_namespace/nodejs.prov.out.exp b/test/bundled_namespace/nodejs.prov.out.exp deleted file mode 100644 index cf9c17f..0000000 --- a/test/bundled_namespace/nodejs.prov.out.exp +++ /dev/null @@ -1,3 +0,0 @@ -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 deleted file mode 100644 index e69de29..0000000 diff --git a/test/bundled_namespace/nodejs.req.out.exp b/test/bundled_namespace/nodejs.req.out.exp deleted file mode 100644 index 64d8bb4..0000000 --- a/test/bundled_namespace/nodejs.req.out.exp +++ /dev/null @@ -1 +0,0 @@ -(nodejs(engine) >= 6 with nodejs(engine) < 10) diff --git a/test/bundled_namespace/package.json.in b/test/bundled_namespace/package.json.in deleted file mode 100644 index e41f38b..0000000 --- a/test/bundled_namespace/package.json.in +++ /dev/null @@ -1,11 +0,0 @@ -{ - "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 7897b24..6afb356 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 bundled_namespace +for test in unbundled bundled do sed -e "s|//.*$||" < test/$test/package.json.in > test/$test/package.json