Add nodejs-packaging-bundler file
Add nodejs-packaging-bundler subpackage in spec file Update README.md with comments about nodejs-packaging-bundler and an example spec file that uses bundling Signed-off-by: Troy Dawson <tdawson@redhat.com>
This commit is contained in:
parent
8de3f914f4
commit
5b7b3fce5d
81
README.md
81
README.md
@ -135,3 +135,84 @@ popd
|
|||||||
## Submit built packages to Bodhi
|
## Submit built packages to Bodhi
|
||||||
Follow the usual processes for stable/branched releases to submit builds for
|
Follow the usual processes for stable/branched releases to submit builds for
|
||||||
testing.
|
testing.
|
||||||
|
|
||||||
|
|
||||||
|
# How to bundle nodejs libraries in Fedora
|
||||||
|
|
||||||
|
The upstream Node.js stance on
|
||||||
|
[global library packages](https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/)
|
||||||
|
is that they are ".. best avoided if not needed." In Fedora, we take the same
|
||||||
|
stance with our nodejs packages. You can provide a package that uses nodejs,
|
||||||
|
but you should bundle all the nodejs libraries that are needed.
|
||||||
|
|
||||||
|
We are providing a sample spec file and bundling script here.
|
||||||
|
For more detailed packaging information go to the
|
||||||
|
[Fedora Node.js Packaging Guildelines](https://docs.fedoraproject.org/en-US/packaging-guidelines/Node.js/)
|
||||||
|
|
||||||
|
## Bundling Script
|
||||||
|
|
||||||
|
```
|
||||||
|
nodejs-packaging-bundler <npm_name> [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.
|
||||||
|
It produces four files and puts them in ${HOME}/rpmbuild/SOURCES
|
||||||
|
|
||||||
|
* <npm_name>-<version>.tgz - This is the tarball from npm.org
|
||||||
|
* <npm_name>-<version>-nm-prod.tgz - This is the tarball that contains all the bundled nodejs modules <npm_name> needs to run
|
||||||
|
* <npm_name>-<version>-nm-dev.tgz - This is the tarball that contains all the bundled nodejs modules <npm_name> needs to test
|
||||||
|
* <npm_name>-<version>-bundled-licenses.txt - This lists the bundled licenses in <npm_name>-<version>-nm-prod.tgz
|
||||||
|
|
||||||
|
## Sample Spec File
|
||||||
|
|
||||||
|
```
|
||||||
|
%global npm_name my_nodejs_application
|
||||||
|
...
|
||||||
|
License: <license1> and <license2> and <license3>
|
||||||
|
...
|
||||||
|
Source0: http://registry.npmjs.org/%{npm_name}/-/%{npm_name}-%{version}.tgz
|
||||||
|
Source1: %{npm_name}-%{version}-nm-prod.tgz
|
||||||
|
Source2: %{npm_name}-%{version}-nm-dev.tgz
|
||||||
|
Source3: %{npm_name}-%{version}-bundled-licenses.txt
|
||||||
|
...
|
||||||
|
BuildRequires: nodejs-devel
|
||||||
|
...
|
||||||
|
%prep
|
||||||
|
%setup -q -n package
|
||||||
|
cp %{SOURCE3} .
|
||||||
|
...
|
||||||
|
%build
|
||||||
|
# Setup bundled node modules
|
||||||
|
tar xfz %{SOURCE1}
|
||||||
|
mkdir -p node_modules
|
||||||
|
pushd node_modules
|
||||||
|
ln -s ../node_modules_prod/* .
|
||||||
|
ln -s ../node_modules_prod/.bin .
|
||||||
|
popd
|
||||||
|
...
|
||||||
|
%install
|
||||||
|
mkdir -p %{buildroot}%{nodejs_sitelib}/%{npm_name}
|
||||||
|
cp -pr index.js lib package.json %{buildroot}%{nodejs_sitelib}/%{npm_name}
|
||||||
|
# Copy over bundled nodejs modules
|
||||||
|
cp -pr node_modules node_modules_prod %{buildroot}%{nodejs_sitelib}/%{npm_name}
|
||||||
|
...
|
||||||
|
%check
|
||||||
|
%nodejs_symlink_deps --check
|
||||||
|
# Setup bundled dev node_modules for testing
|
||||||
|
tar xfz %{SOURCE2}
|
||||||
|
pushd node_modules
|
||||||
|
ln -s ../node_modules_dev/* .
|
||||||
|
popd
|
||||||
|
pushd node_modules/.bin
|
||||||
|
ln -s ../../node_modules_dev/.bin/* .
|
||||||
|
popd
|
||||||
|
# Example test run using the binary in ./node_modules/.bin/
|
||||||
|
./node_modules/.bin/vows --spec --isolate
|
||||||
|
...
|
||||||
|
%files
|
||||||
|
%doc HISTORY.md
|
||||||
|
%license LICENSE.md %{npm_name}-%{version}-bundled-licenses.txt
|
||||||
|
%{nodejs_sitelib}/%{npm_name}
|
||||||
|
```
|
||||||
|
|
||||||
|
82
nodejs-packaging-bundler
Executable file
82
nodejs-packaging-bundler
Executable file
@ -0,0 +1,82 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
OUTPUT_DIR="${HOME}/rpmbuild/SOURCES"
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
echo "Usage `basename $0` <npm_name> [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 license list are copied to ${OUTPUT_DIR}" >&2
|
||||||
|
echo >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if ! [ -f /usr/bin/npm ]; then
|
||||||
|
echo >&2
|
||||||
|
echo "`basename $0` requires npm to run" >&2
|
||||||
|
echo >&2
|
||||||
|
echo "Run the following to fix this" >&2
|
||||||
|
echo " sudo dnf install npm" >&2
|
||||||
|
echo >&2
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $# -lt 1 ]; then
|
||||||
|
usage
|
||||||
|
else
|
||||||
|
case $1 in
|
||||||
|
-h | --help )
|
||||||
|
usage
|
||||||
|
;;
|
||||||
|
* )
|
||||||
|
PACKAGE="$1"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $# -ge 2 ]; then
|
||||||
|
VERSION="$2"
|
||||||
|
else
|
||||||
|
VERSION="$(npm view ${PACKAGE} version)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
TMP_DIR=$(mktemp -d -t ci-XXXXXXXXXX)
|
||||||
|
mkdir -p ${OUTPUT_DIR}
|
||||||
|
mkdir -p ${TMP_DIR}
|
||||||
|
pushd ${TMP_DIR}
|
||||||
|
npm pack ${PACKAGE}
|
||||||
|
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 dependences download"
|
||||||
|
mv node_modules/ node_modules_prod
|
||||||
|
fi
|
||||||
|
echo "LICENSES IN BUNDLE:"
|
||||||
|
find . -name "package.json" -exec jq .license {} \; >> ${TMP_DIR}/${PACKAGE}-${VERSION}-bundled-licenses.txt
|
||||||
|
find . -name "package.json" -exec jq '.licenses[] .type' {} \; >> ${TMP_DIR}/${PACKAGE}-${VERSION}-bundled-licenses.txt 2>/dev/null
|
||||||
|
sort -u -o ${TMP_DIR}/${PACKAGE}-${VERSION}-bundled-licenses.txt ${TMP_DIR}/${PACKAGE}-${VERSION}-bundled-licenses.txt
|
||||||
|
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}-${VERSION}-nm-prod.tgz node_modules_prod
|
||||||
|
fi
|
||||||
|
if [ -d node_modules_dev ] ; then
|
||||||
|
tar cfz ../${PACKAGE}-${VERSION}-nm-dev.tgz node_modules_dev
|
||||||
|
fi
|
||||||
|
cd ..
|
||||||
|
cp -v ${PACKAGE}-${VERSION}* $HOME/rpmbuild/SOURCES
|
||||||
|
popd > /dev/null
|
||||||
|
rm -rf ${TMP_DIR}
|
@ -1,7 +1,7 @@
|
|||||||
%global macrosdir %(d=%{_rpmconfigdir}/macros.d; [ -d $d ] || d=%{_sysconfdir}/rpm; echo $d)
|
%global macrosdir %(d=%{_rpmconfigdir}/macros.d; [ -d $d ] || d=%{_sysconfdir}/rpm; echo $d)
|
||||||
|
|
||||||
Name: nodejs-packaging
|
Name: nodejs-packaging
|
||||||
Version: 2020.09
|
Version: 2021.01
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: RPM Macros and Utilities for Node.js Packaging
|
Summary: RPM Macros and Utilities for Node.js Packaging
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
@ -19,6 +19,7 @@ Source0007: nodejs-symlink-deps
|
|||||||
Source0008: nodejs.attr
|
Source0008: nodejs.attr
|
||||||
Source0009: nodejs.prov
|
Source0009: nodejs.prov
|
||||||
Source0010: nodejs.req
|
Source0010: nodejs.req
|
||||||
|
Source0011: nodejs-packaging-bundler
|
||||||
|
|
||||||
# Created with `tar cfz test.tar.gz test`
|
# Created with `tar cfz test.tar.gz test`
|
||||||
Source0101: test.tar.gz
|
Source0101: test.tar.gz
|
||||||
@ -31,6 +32,17 @@ Requires: redhat-rpm-config
|
|||||||
This package contains RPM macros and other utilities useful for packaging
|
This package contains RPM macros and other utilities useful for packaging
|
||||||
Node.js modules and applications in RPM-based distributions.
|
Node.js modules and applications in RPM-based distributions.
|
||||||
|
|
||||||
|
%package bundler
|
||||||
|
Summary: Bundle a node.js application dependencies
|
||||||
|
Requires: npm
|
||||||
|
Requires: coreutils, findutils, jq
|
||||||
|
|
||||||
|
%description bundler
|
||||||
|
nodejs-packaging-bundler bundles a node.js application node_module dependencies
|
||||||
|
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 licence file that gets the licenses in the runtime dependency tarball
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
pushd %{_topdir}/BUILD
|
pushd %{_topdir}/BUILD
|
||||||
@ -52,6 +64,7 @@ install -pm0755 nodejs-symlink-deps %{buildroot}%{_rpmconfigdir}/nodejs-symlink-
|
|||||||
install -pm0755 nodejs-fixdep %{buildroot}%{_rpmconfigdir}/nodejs-fixdep
|
install -pm0755 nodejs-fixdep %{buildroot}%{_rpmconfigdir}/nodejs-fixdep
|
||||||
install -pm0755 nodejs-setversion %{buildroot}%{_rpmconfigdir}/nodejs-setversion
|
install -pm0755 nodejs-setversion %{buildroot}%{_rpmconfigdir}/nodejs-setversion
|
||||||
install -Dpm0644 multiver_modules %{buildroot}%{_datadir}/node/multiver_modules
|
install -Dpm0644 multiver_modules %{buildroot}%{_datadir}/node/multiver_modules
|
||||||
|
install -Dpm0755 nodejs-packaging-bundler %{buildroot}%{_bindir}/nodejs-packaging-bundler
|
||||||
|
|
||||||
|
|
||||||
%check
|
%check
|
||||||
@ -65,8 +78,14 @@ install -Dpm0644 multiver_modules %{buildroot}%{_datadir}/node/multiver_modules
|
|||||||
%{_rpmconfigdir}/nodejs*
|
%{_rpmconfigdir}/nodejs*
|
||||||
%{_datadir}/node/multiver_modules
|
%{_datadir}/node/multiver_modules
|
||||||
|
|
||||||
|
%files bundler
|
||||||
|
%{_bindir}/nodejs-packaging-bundler
|
||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* 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
|
* Fri Sep 18 2020 Stephen Gallagher <sgallagh@redhat.com> - 2020.09-1
|
||||||
- Move to dist-git as the upstream
|
- Move to dist-git as the upstream
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user