Compare commits

...
Sign in to create a new pull request.

19 commits

Author SHA1 Message Date
Fedora Release Engineering
769c465c78 Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild 2026-07-16 09:39:21 +00:00
Jan Staněk
d5492bc305
Update tests from git 2026-02-04 14:42:48 +01:00
Daniel P. Berrangé
8c93ed1606 Always report the nodejs engine dep
The "has only bundled deps" check was short-circuiting logic too
early, causing the "nodejs(engine) == <ver>" dep to be missed,
which is still relevant even when bundling.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2026-02-04 13:40:50 +00:00
Daniel P. Berrangé
b786cecdf9 Honour package version when no tarball is given
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2026-02-03 15:57:41 +00:00
Daniel P. Berrangé
0a0c95bab7 Use --sort=name when creating tarballs
Using --sort=name ensures that files are added to the tarball in a
predictable ordering. This should result in a consistent checksum
for the tarball and thus facilitate reproducibility for auditing
purposes.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2026-02-03 15:57:41 +00:00
Daniel P. Berrangé
fdd68fbe2d Fix indentation mistakes in nodejs-packaging-bundler
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2026-02-03 15:57:41 +00:00
Fedora Release Engineering
aac86e3646 Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild 2026-01-16 22:12:26 +00:00
tjuhasz
4e33741bc9 Change %{nodejs_sitelib} to nonversion/shared path (rhbz#2404685) 2025-10-23 12:58:35 +02:00
Evgeni Golov
cd097f083d Properly handle @group/package deps in nodejs-symlink-deps
Node packages can have dependencies of the for "@group/package" instead of just "package".
Calling symlink() (and thus os.symlink()) in such a case fails when there is no "@group" directory yet.

```
+ /usr/lib/rpm/nodejs-symlink-deps /usr/lib/node_modules

ERROR: the path for dependency "@babel/runtime" already exists

This could mean that bundled modules are being installed.  Bundled libraries are
forbidden in Fedora. For more information, see:
    <https://fedoraproject.org/wiki/Packaging:No_Bundled_Libraries>
    
It is generally reccomended to remove the entire "node_modules" directory in
%prep when it exists. For more information, see:
    <https://fedoraproject.org/wiki/Packaging:Node.js#Removing_bundled_modules>
    
If you have obtained permission from the Fedora Packaging Committee to bundle
libraries, please use `%nodejs_fixdep -r` in %prep to remove the dependency on
the bundled module. This will prevent an unnecessary dependency on the system
version of the module and eliminate this error.
error: Bad exit status from /var/tmp/rpm-tmp.nn3mkP (%install)
```

The reported error is misleading - the path does not exist yet, but it also can't be created.
os.symlink throws OSError in both cases.

The patch prevents the issue by calling os.makedirs on the group-part of the dependency if there is one.
2025-09-02 11:43:02 +00:00
Ewoud Kohl van Wijngaarden
36224631ac Correctly determine if a package has bundled dependencies
I have a package that's as follows:

    # tree /usr/lib/node_modules/history
    /usr/lib/node_modules/history
    |-- DOMUtils.js
    |-- LocationUtils.js
    |-- PathUtils.js
    |-- createBrowserHistory.js
    |-- createHashHistory.js
    |-- createMemoryHistory.js
    |-- createTransitionManager.js
    |-- es
    |   |-- DOMUtils.js
    |   |-- LocationUtils.js
    |   |-- PathUtils.js
    |   |-- createBrowserHistory.js
    |   |-- createHashHistory.js
    |   |-- createMemoryHistory.js
    |   |-- createTransitionManager.js
    |   `-- index.js
    |-- index.js
    |-- node_modules
    |   |-- invariant -> /usr/lib/node_modules/invariant
    |   |-- loose-envify -> /usr/lib/node_modules/loose-envify
    |   |-- resolve-pathname -> /usr/lib/node_modules/resolve-pathname
    |   |-- value-equal -> /usr/lib/node_modules/value-equal
    |   `-- warning -> /usr/lib/node_modules/warning
    |-- package.json
    `-- umd
        |-- history.js
        `-- history.min.js

The node_modules directory was created by the %nodejs_symlink_deps
macro. Then when using nodejs.req I don't get any dependencies:

    # echo /usr/lib/node_modules/history/package.json | /usr/lib/rpm/nodejs.req

It looks like has_only_bundled_dependencies returns true, while it
shouldn't. Critically, it runs this code:

    bundled_dependency_iter = (
        os.path.realpath(path)
        for path in dependency_path_iter
        if not os.path.islink(path) or path.startswith(module_root_path)
    )

Here dependency_path_iter is:

    [
        '/usr/lib/node_modules/history/node_modules/invariant',
        '/usr/lib/node_modules/history/node_modules/loose-envify',
        '/usr/lib/node_modules/history/node_modules/resolve-pathname',
        '/usr/lib/node_modules/history/node_modules/value-equal',
        '/usr/lib/node_modules/history/node_modules/warning'
    ]

And module_root_path is /usr/lib/node_modules/history.

We can conclude that path.startswith(module_root_path) will always be
true, because we started with iterating over files under
module_root_path. The code suggests it should have looked up the real
path instead. If we make that change, it correctly generates the
dependencies.
2025-09-02 11:40:00 +00:00
Jan Staněk
64a93f15aa
Move nodejs_abi generator to the various streams
The generator assumed there is only one /usr/bin/node available in the distro.
Additionally, there were no generators presents for the alternative streams.

This removes the generator from here; a variant of it is being added
to each of the existing nodejs streams, adjusted to work with that
stream specifically.

Resolves: rhbz#2389160
2025-08-20 13:57:00 +02:00
Fedora Release Engineering
bbd74d8e40 Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild 2025-07-24 22:53:57 +00:00
Jan Staněk
15aac7eeb8
Use %autochangelog macro
Fixup: 5c3231171a
2025-02-25 12:37:58 +01:00
Fedora Release Engineering
792f09d75d Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild 2025-01-17 20:15:35 +00:00
Fedora Release Engineering
d504fbf5e5 Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild 2024-07-18 19:38:12 +00:00
Yaakov Selkowitz
4299cf9076 Fix build with rpm 4.20
rpm 4.20 now uses a build-specific %_builddir (previously %_topdir/BUILD),
but this directory change occurs by default even in older versions.

https://github.com/rpm-software-management/rpm/issues/2078
2024-06-21 15:18:06 -04:00
Fedora Release Engineering
72cb54ec6a Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild 2024-01-25 09:10:06 +00:00
Fedora Release Engineering
945b0837ce Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild 2024-01-21 09:48:26 +00:00
Stephen Gallagher
9b4f2a673f Restrict autoprovides and requires to top-level
Signed-off-by: Stephen Gallagher <sgallagh@redhat.com>
2023-10-26 10:04:04 -04:00
11 changed files with 19 additions and 209 deletions

View file

@ -1,12 +1,8 @@
# nodejs binary
%__nodejs %{_bindir}/node
# currently installed nodejs version
%nodejs_version %(%{__nodejs} -v | sed s/v//)
%_nodejs_major_version %(echo %{nodejs_version} | sed 's#^\\([0-9]\\+\\).*#\\1#')
# nodejs library directory
%nodejs_sitelib %{_prefix}/lib/node_modules_%{_nodejs_major_version}
%nodejs_sitelib %{_prefix}/lib/node_modules
#arch specific library directory
#for future-proofing only; we don't do multilib

View file

@ -60,7 +60,7 @@ if [ -f "$TARBALL" ]; then
mv ${TARBALL_DIR}/*.tgz .
rm -rf ${TARBALL_DIR}
else
npm pack ${PACKAGE}
npm pack ${PACKAGE}@${VERSION}
fi
tar xfz *.tgz
cd package
@ -70,10 +70,10 @@ for packagejson in $(find . -type d -name node_modules\* -prune -o -type f -name
npm install --omit=dev --omit=optional
if [ $? -ge 1 ] ; then
echo " ERROR WILL ROBINSON"
rm -rf node_modules
rm -rf node_modules
else
echo " Successful prod dependencies download"
mv node_modules/ node_modules_prod
mv node_modules/ node_modules_prod
fi
popd
done
@ -102,15 +102,15 @@ for packagejson in $(find . -type d -name node_modules\* -prune -o -type f -name
echo " ERROR WILL ROBINSON"
else
echo " Successful dev dependencies download"
mv node_modules/ node_modules_dev
mv node_modules/ node_modules_dev
fi
popd
done
if [ -d node_modules_prod ] ; then
tar cfz ../${PACKAGE_SAFE}-${VERSION}-nm-prod.tgz $(find . -type d -name 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 $(find . -type d -name 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}"

View file

@ -19,8 +19,6 @@ Source0007: nodejs-symlink-deps
Source0008: nodejs.attr
Source0009: nodejs.prov
Source0010: nodejs.req
Source0011: nodejs_abi.attr
Source0012: nodejs_abi.req
Source0111: nodejs-packaging-bundler
@ -29,9 +27,6 @@ Source0101: test.tar.gz
BuildRequires: python3
# Several of the macros require the /usr/bin/node command, so we need to
# ensure that it is present when packaging.
Requires: /usr/bin/node
Requires: redhat-rpm-config
%description
@ -52,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
@ -65,10 +58,8 @@ popd
%install
install -Dpm0644 macros.nodejs %{buildroot}%{macrosdir}/macros.nodejs
install -Dpm0644 nodejs.attr %{buildroot}%{_rpmconfigdir}/fileattrs/nodejs.attr
install -Dpm0644 nodejs_abi.attr %{buildroot}%{_rpmconfigdir}/fileattrs/nodejs_abi.attr
install -pm0755 nodejs.prov %{buildroot}%{_rpmconfigdir}/nodejs.prov
install -pm0755 nodejs.req %{buildroot}%{_rpmconfigdir}/nodejs.req
install -pm0755 nodejs_abi.req %{buildroot}%{_rpmconfigdir}/nodejs_abi.req
install -pm0755 nodejs-symlink-deps %{buildroot}%{_rpmconfigdir}/nodejs-symlink-deps
install -pm0755 nodejs-fixdep %{buildroot}%{_rpmconfigdir}/nodejs-fixdep
install -pm0755 nodejs-setversion %{buildroot}%{_rpmconfigdir}/nodejs-setversion
@ -92,173 +83,4 @@ install -Dpm0755 nodejs-packaging-bundler %{buildroot}%{_bindir}/nodejs-packagin
%changelog
* Thu Jan 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 2022.10-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Thu Oct 20 2022 Stephen Gallagher <sgallagh@redhat.com> - 2022.10-1
- Move native module building tools here from Node.js
- Add `Requires: /usr/bin/node`
* Tue Oct 18 2022 Davide Cavalca <dcavalca@fedoraproject.org> - 2021.06-7
- NPM bundler: recursively bundle modules for all packages found
* Fri Jul 22 2022 Fedora Release Engineering <releng@fedoraproject.org> - 2021.06-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Sun May 01 2022 Davide Cavalca <dcavalca@fedoraproject.org> - 2021.06-5
- NPM bundler: optionally use a local tarball instead of npm
* Thu Jan 20 2022 Stephen Gallagher <sgallagh@redhat.com> - 2021.06-4
- NPM bundler: also find namespaced bundled dependencies
* Thu Jul 22 2021 Fedora Release Engineering <releng@fedoraproject.org> - 2021.06-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Tue Jun 22 2021 Stephen Gallagher <sgallagh@redhat.com> - 2021.06-2
- Fix hard-coded output directory in the bundler
* Wed Jun 02 2021 Stephen Gallagher <sgallagh@redhat.com> - 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 <releng@fedoraproject.org> - 2021.01-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Wed Jan 20 2021 Stephen Gallagher <sgallagh@redhat.com> - 2021.01-2
- nodejs-packaging-bundler improvements to handle uncommon characters
* Wed Jan 06 2021 Troy Dawson <tdawson@redhat.com> - 2021.01
- Add nodejs-packaging-bundler and update README.md
* Fri Sep 18 2020 Stephen Gallagher <sgallagh@redhat.com> - 2020.09-1
- Move to dist-git as the upstream
* Wed Sep 02 2020 Stephen Gallagher <sgallagh@redhat.com> - 25-1
- Fix incorrect bundled library detection for Requires
* Tue Sep 01 2020 Stephen Gallagher <sgallagh@redhat.com> - 24-1
- Check node_modules_prod for bundled dependencies
* Tue Jul 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 23-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Wed Jun 03 2020 Stephen Gallagher <sgallagh@redhat.com> - 23-3
- Drop Requires: nodejs(engine)
* Wed Jan 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 23-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Thu Oct 31 2019 Tom Hughes <tom@compton.nu> - 23-1
- Ensure nodejs(engine) is required for packages with no dependencies
* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 22-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Tue Jul 2 2019 Tom Hughes <tom@compton.nu> - 22-1
- Refactor nodejs.req in more idiomatic Python
- Treat only external dependency links as un-bundled
* Mon Jun 10 2019 Tom Hughes <tom@compton.nu> - 21-1
- Refactor nodejs.prov in more idiomatic Python
* Fri Feb 01 2019 Fedora Release Engineering <releng@fedoraproject.org> - 20-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Sat Jan 5 2019 Tom Hughes <tom@compton.nu> - 20-1
- Fix handling of ^ dependencies for multiversion modules
* Thu Jan 3 2019 Tom Hughes <tom@compton.nu> - 18-1
- Handle =, >= and <= dependencies for multiversion modules
* Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 17-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Thu May 3 2018 Tom Hughes <tom@compton.nu> - 17-1
- Fix version comparators with a space after the operator
* Tue May 1 2018 Tom Hughes <tom@compton.nu> - 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 <tom@compton.nu> - 15-1
- Fix caret dependency ranges
* Thu Apr 12 2018 Tom Hughes <tom@compton.nu> - 14-1
- Only match top level modules for requires and provides generation
* Wed Feb 28 2018 Tom Hughes <tom@compton.nu> - 13-1
- Add %%nodejs_setversion macro
* Fri Feb 23 2018 Tom Hughes <tom@compton.nu> - 12-1
- Port to python 3
* Thu Feb 08 2018 Fedora Release Engineering <releng@fedoraproject.org> - 11-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
* Sat Jan 13 2018 Tom Hughes <tom@compton.nu> - 11-1
- nodesjs.req: use boolean with for range dependencies
* Tue Sep 12 2017 Stephen Gallagher <sgallagh@redhat.com> - 10-1
- Release v10
- Automatically generate Provides for bundled npm dependencies
* Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 9-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Tue Feb 21 2017 Tom Hughes <tom@compton.nu> - 9-3
- switch source URL to pagure
* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 9-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
* Tue Feb 2 2016 Tom Hughes <tom@compton.nu> - 9-1
- nodejs-fixdep: stop --move erroring on missing dependency types
* Sun Jan 31 2016 Tom Hughes <tom@compton.nu> - 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 <tom@compton.nu> - 7-5
- nodejs-symlink-deps: handle caret in versions
* Wed Jun 17 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 7-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
* Wed Mar 4 2015 Ville Skyttä <ville.skytta@iki.fi> - 7-3
- Install macros in %%{_rpmconfidir}/macros.d where available (#1074279)
* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 7-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
* Sun May 25 2014 T.C. Hollingsworth <tchollingsworth@gmail.com> - 7-1
- nodejs-symlink-deps: fix regression preventing multiply versioned modules from
being symlinked correctly
* Sat May 24 2014 T.C. Hollingsworth <tchollingsworth@gmail.com> - 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 <tchollingsworth@gmail.com> - 4-1
- handle cases where the symlink target exists gracefully
* Wed Jul 10 2013 T.C. Hollingsworth <tchollingsworth@gmail.com> - 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 <tchollingsworth@gmail.com> - 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 <tchollingsworth@gmail.com> - 1-1
- initial package
%autochangelog

View file

@ -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:

View file

@ -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.*/package\\.json$
%__nodejs_path ^/usr/lib/node_modules\(_[[:digit:]]\+\)\{0,1\}/[^/]\+/package\.json$

View file

@ -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, {})

View file

@ -1,2 +0,0 @@
%__nodejs_native_requires %{_rpmconfigdir}/nodejs_abi.req
%__nodejs_native_path ^/usr/lib.*/node_modules/.*\\.node$

View file

@ -1,8 +0,0 @@
#!/bin/bash
# Get the ABI version
abi_version=$(/usr/bin/node -p process.versions.modules)
# Write out the Virtual Requires
echo "nodejs(abi) = ${abi_version}"

View file

@ -1 +1 @@
SHA512 (test.tar.gz) = dfbda67b8741f1ca36bf63b2e842f81ba07381b3d92e75fa7e29f8e456543b4cae55e95785902f31a14ae4d0b7e89161ba04c0c10c2fff617b4ae9607c91e599
SHA512 (test.tar.gz) = 04c1e741caa124c12b1070b6411d1a9fef9b328e15ec274170b7dcd9d26d9a6f9db21d6722ce0b39d0b693f237398065dd127b95a9a6e4947e182db2e3fad6f2

View file

@ -1 +1 @@
(nodejs(engine) >= 6 with nodejs(engine) < 10)

View file

@ -1 +1 @@
(nodejs(engine) >= 6 with nodejs(engine) < 10)