From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from dude02.hi.pengutronix.de ([2001:67c:670:100:1d::28] helo=dude02.lab.pengutronix.de) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ixAi5-0008Bj-F6 for ptxdist@pengutronix.de; Thu, 30 Jan 2020 15:22:21 +0100 Received: from mol by dude02.lab.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1ixAi5-0004r4-7d for ptxdist@pengutronix.de; Thu, 30 Jan 2020 15:22:21 +0100 Date: Thu, 30 Jan 2020 15:22:21 +0100 From: Michael Olbrich Message-ID: <20200130142221.GF2615@pengutronix.de> References: <20200129110619.22179-1-u.oelmann@pengutronix.de> <20200129110619.22179-3-u.oelmann@pengutronix.de> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20200129110619.22179-3-u.oelmann@pengutronix.de> Subject: Re: [ptxdist] [PATCH v4 3/3] nodejs_packages: new package List-Id: PTXdist Development Mailing List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: ptxdist@pengutronix.de Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Errors-To: ptxdist-bounces@pengutronix.de Sender: "ptxdist" To: ptxdist@pengutronix.de On Wed, Jan 29, 2020 at 12:06:19PM +0100, Ulrich =D6lmann wrote: > From: Bj=F6rn Esser > = > This is a dummy package to specify and install required Node.js packages = for the > target system. > = > The management of those packages and their dependencies is handled with > Yarn (run through host-nodejs) to maintain a reproducible offline cache t= hat is > stored in local_src/nodejs_packages. > = > Signed-off-by: Bj=F6rn Esser > [uol: adjusted commit message and Kconfig menu file's help texts & fixed > NODEJS_PACKAGES_URL] > Signed-off-by: Ulrich =D6lmann > --- > Range-diff of v4 against v3: > 3: 2a6984f0297b ! 3: ccd2b44a8d92 nodejs_packages: New package. > @@ Metadata > Author: Bj=F6rn Esser > = > ## Commit message ## > - nodejs_packages: New package. > + nodejs_packages: new package > = > - This is a dummy package to specifiy and install the required > - Node.js packages for the target system. > + This is a dummy package to specify and install required Node.js = packages for the > + target system. > = > - The management of the Node.js packages and their dependencies > - are handled with Yarn (run through host-nodejs) to maintain > - a reprocible offline cache. > - > - The cache is stored in local_src/nodejs_packages, which must > - be an existing path inside of the BSP. > + The management of those packages and their dependencies is handl= ed with > + Yarn (run through host-nodejs) to maintain a reproducible offlin= e cache that is > + stored in local_src/nodejs_packages. > = > Signed-off-by: Bj=F6rn Esser > + [uol: adjusted commit message and Kconfig menu file's help texts= & fixed > + NODEJS_PACKAGES_URL] > + Signed-off-by: Ulrich =D6lmann > = > ## rules/nodejs_packages.in (new) ## > @@ > @@ rules/nodejs_packages.in (new) > + Reproducibly install Node.js packages that will be available > + system-wide on the target. > + > -+ You MUST specify at least one Node.js package in the shown > -+ submenu after enabling this option. > ++ You MUST specify at least one Node.js package in the submenu tha= t is > ++ shown after enabling this option. > + > + > +if NODEJS_PACKAGES > @@ rules/nodejs_packages.in (new) > + string > + prompt "Node.js packages to install" > + help > -+ A white-space separated list of Node.js packages including > -+ its version (e.g. express@4.17.x). npm semvers are fully > -+ supported. > ++ A white-space separated list of Node.js packages including their > ++ versions (e.g. express@4.17.x or socket.io@'>=3D2.1.0 <=3D2.3.0'= ). NPM > ++ semvers are fully supported, see [1]. > + > + The packages are managed with Yarn and are guaranteed to be > -+ reproducible and immutable as long as the download location > -+ stays accessible or the download-cache does not get altered. > ++ reproducible and immutable as long as the download location stays > ++ accessible or the offline cache is not altered. > ++ > ++ If the list of Node.js packages to be installed has been populat= ed for > ++ the first time or if it has been modified later on one needs to > ++ (re-)build this package to download the desired Node.js packages= and > ++ update the offline cache. Afterwards it is highly recommended to > ++ commit the path '${PTXDIST_WORKSPACE}/local_src/nodejs_packages/= ' into > ++ the version control system and to lock the package cache. > + > -+ After downloading the packages and creating the package cache, > -+ by building this package the first time after altering the list > -+ of installed packages, it is highly recommended to commit the > -+ path: './local_src/nodejs_packages/' into the git repository > -+ and to lock the package cache. > ++ As a prerequisite the path '${PTXDIST_WORKSPACE}/local_src/nodej= s_ > ++ packages/' must exist in the BSP *before* building this package. > + > -+ Also the path: './local_src/nodejs_packages/' must exist in the > -+ BSP *before* before building this package. > ++ [1] https://legacy.yarnpkg.com/en/docs/dependency-versions/ > + > +config NODEJS_PACKAGES_OFFLINE > + bool > -+ prompt "lock package cache for offline / production use" > ++ prompt "lock offline cache for offline/production use" > + help > -+ This option locks the cache for installing the nodejs > -+ packages and performs their installation during the > -+ build of the BSP without any need for internet connectivity. > ++ This option locks the offline cache for installing the nodejs pa= ckages > ++ and allows their installation during the build of the BSP withou= t any > ++ need for internet connectivity. > + > -+ Checking this option is highly recommended for production use. > ++ Enabling this option is highly recommended for production use. > + > -+ Do NOT forget to commit the path: './local_src/nodejs_packages/' > -+ into the BSP's git repository! > ++ Do NOT forget to commit the path '${PTXDIST_WORKSPACE}/local_src/ > ++ nodejs_packages/' into the BSP's version control system! > + > +endif > = > @@ rules/nodejs_packages.make (new) > +NODEJS_PACKAGES_VERSION :=3D 0.0.1 > +NODEJS_PACKAGES :=3D nodejs_packages-$(NODEJS_PACKAGES_VERSION) > +NODEJS_PACKAGES_LOCAL :=3D local_src/nodejs_packages > -+NODEJS_PACKAGES_URL :=3D lndir://$(NODEJS_PACKAGES_LOCAL) > ++NODEJS_PACKAGES_URL :=3D lndir://$(PTXDIST_WORKSPACE)/$(NODEJS_PACK= AGES_LOCAL) > +NODEJS_PACKAGES_DIR :=3D $(BUILDDIR)/$(NODEJS_PACKAGES) > +NODEJS_PACKAGES_CACHE :=3D $(PTXDIST_WORKSPACE)/$(NODEJS_PACKAGES_L= OCAL)/yarn_cache > +NODEJS_PACKAGES_LICENSE :=3D unknown > = > = > rules/nodejs_packages.in | 55 +++++++++++++++++++++++ > rules/nodejs_packages.make | 90 ++++++++++++++++++++++++++++++++++++++ > 2 files changed, 145 insertions(+) > create mode 100644 rules/nodejs_packages.in > create mode 100644 rules/nodejs_packages.make > = > diff --git a/rules/nodejs_packages.in b/rules/nodejs_packages.in > new file mode 100644 > index 000000000000..e6d33d30aaa9 > --- /dev/null > +++ b/rules/nodejs_packages.in > @@ -0,0 +1,55 @@ > +## SECTION=3Dbytecode_engines > + > +menuconfig NODEJS_PACKAGES > + tristate > + select HOST_YARN > + select NODEJS > + prompt "Node.js packages (target) " > + help > + Reproducibly install Node.js packages that will be available > + system-wide on the target. > + > + You MUST specify at least one Node.js package in the submenu that is > + shown after enabling this option. > + > + > +if NODEJS_PACKAGES > + > +config NODEJS_PACKAGES_LIST > + string > + prompt "Node.js packages to install" > + help > + A white-space separated list of Node.js packages including their > + versions (e.g. express@4.17.x or socket.io@'>=3D2.1.0 <=3D2.3.0'). NPM > + semvers are fully supported, see [1]. > + > + The packages are managed with Yarn and are guaranteed to be > + reproducible and immutable as long as the download location stays > + accessible or the offline cache is not altered. > + > + If the list of Node.js packages to be installed has been populated for > + the first time or if it has been modified later on one needs to > + (re-)build this package to download the desired Node.js packages and > + update the offline cache. Afterwards it is highly recommended to > + commit the path '${PTXDIST_WORKSPACE}/local_src/nodejs_packages/' into > + the version control system and to lock the package cache. > + > + As a prerequisite the path '${PTXDIST_WORKSPACE}/local_src/nodejs_ > + packages/' must exist in the BSP *before* building this package. > + > + [1] https://legacy.yarnpkg.com/en/docs/dependency-versions/ > + > +config NODEJS_PACKAGES_OFFLINE > + bool > + prompt "lock offline cache for offline/production use" > + help > + This option locks the offline cache for installing the nodejs packages > + and allows their installation during the build of the BSP without any > + need for internet connectivity. > + > + Enabling this option is highly recommended for production use. > + > + Do NOT forget to commit the path '${PTXDIST_WORKSPACE}/local_src/ > + nodejs_packages/' into the BSP's version control system! > + > +endif > diff --git a/rules/nodejs_packages.make b/rules/nodejs_packages.make > new file mode 100644 > index 000000000000..514db3252279 > --- /dev/null > +++ b/rules/nodejs_packages.make > @@ -0,0 +1,90 @@ > +# -*-makefile-*- > +# > +# Copyright (C) 2020 by Bjoern Esser > +# > +# For further information about the PTXdist project and license conditio= ns > +# see the README file. > +# > + > +# > +# We provide this package > +# > +PACKAGES-$(PTXCONF_NODEJS_PACKAGES) +=3D nodejs_packages > + > +# > +# Paths and names > +# > +NODEJS_PACKAGES_VERSION :=3D 0.0.1 > +NODEJS_PACKAGES :=3D nodejs_packages-$(NODEJS_PACKAGES_VERSION) > +NODEJS_PACKAGES_LOCAL :=3D local_src/nodejs_packages > +NODEJS_PACKAGES_URL :=3D lndir://$(PTXDIST_WORKSPACE)/$(NODEJS_PACKAGES_= LOCAL) > +NODEJS_PACKAGES_DIR :=3D $(BUILDDIR)/$(NODEJS_PACKAGES) > +NODEJS_PACKAGES_CACHE :=3D $(PTXDIST_WORKSPACE)/$(NODEJS_PACKAGES_LOCAL)= /yarn_cache > +NODEJS_PACKAGES_LICENSE :=3D unknown Kconfig option for the license? > + > +NODEJS_PACKAGES_LIST :=3D $(call remove_quotes, $(PTXCONF_NODEJS_PACKAGE= S_LIST)) > + > +YARN_LOCK :=3D $(PTXDIST_WORKSPACE)/$(NODEJS_PACKAGES_LOCAL)/yarn.lock > +YARN_OPTS :=3D \ > + --cwd "$(NODEJS_PACKAGES_DIR)" \ > + --cache-folder "$(NODEJS_PACKAGES_CACHE)" \ > + --link-duplicates \ > + --production=3Dtrue > + > +ifdef PTXCONF_NODEJS_PACKAGES_OFFLINE > +YARN_OPTS +=3D \ > + --frozen-lockfile \ > + --offline > +endif Hmmm, I'm not sure if I like this option, but I don't have a good idea either. > + > +# ----------------------------------------------------------------------= ------ > +# Compile > +# ----------------------------------------------------------------------= ------ > + > +$(STATEDIR)/nodejs_packages.compile: > + @$(call targetinfo) > + mkdir -p $(NODEJS_PACKAGES_CACHE) > + printf "{ \ > + \"name\": \"nodejs_packages\", \ > + \"version\": \"$(NODEJS_PACKAGES_VERSION)\", \ > + \"license\": \"UNLICENSED\", \ > + \"private\": true \ > + }" > $(NODEJS_PACKAGES_DIR)/package.json > + if [[ ! -f $(YARN_LOCK) ]]; then \ single [ is sufficient. > + touch $(YARN_LOCK); \ > + ln -fs $(YARN_LOCK) $(NODEJS_PACKAGES_DIR)/yarn.lock; \ > + fi > + yarn $(YARN_OPTS) add $(NODEJS_PACKAGES_LIST) > + find $(NODEJS_PACKAGES_CACHE) -type f -name '.yarn-tarball.tgz' -delete > + @$(call touch) > + > +# ----------------------------------------------------------------------= ------ > +# Install > +# ----------------------------------------------------------------------= ------ > + > +$(STATEDIR)/nodejs_packages.install: > + @$(call targetinfo) > + install -dm 0755 $(NODEJS_PACKAGES_PKGDIR)/usr/lib > + cp -pr $(NODEJS_PACKAGES_DIR)/node_modules $(NODEJS_PACKAGES_PKGDIR)/us= r/lib You need to ensure that NODEJS_PACKAGES_PKGDIR is empty. Use world/execute for the first and just execute for the second. Michael > + @$(call touch) > + > +# ----------------------------------------------------------------------= ------ > +# Target-Install > +# ----------------------------------------------------------------------= ------ > + > +$(STATEDIR)/nodejs_packages.targetinstall: > + @$(call targetinfo) > + > + @$(call install_init, nodejs_packages) > + @$(call install_fixup, nodejs_packages,PRIORITY,optional) > + @$(call install_fixup, nodejs_packages,SECTION,base) > + @$(call install_fixup, nodejs_packages,AUTHOR,"Bjoern Esser ") > + @$(call install_fixup, nodejs_packages,DESCRIPTION,missing) > + > + $(call install_tree, nodejs_packages, 0, 0, -, /usr/lib/node_modules/) > + > + @$(call install_finish, nodejs_packages) > + > + @$(call touch) > + > +# vim: syntax=3Dmake > -- = > 2.25.0 > = > = > _______________________________________________ > ptxdist mailing list > ptxdist@pengutronix.de -- = Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ ptxdist mailing list ptxdist@pengutronix.de