diff options
author | alexv-smirnov <alex@ydb.tech> | 2023-06-13 11:05:01 +0300 |
---|---|---|
committer | alexv-smirnov <alex@ydb.tech> | 2023-06-13 11:05:01 +0300 |
commit | bf0f13dd39ee3e65092ba3572bb5b1fcd125dcd0 (patch) | |
tree | 1d1df72c0541a59a81439842f46d95396d3e7189 /build/conf/ts/node_modules.conf | |
parent | 8bfdfa9a9bd19bddbc58d888e180fbd1218681be (diff) | |
download | ydb-bf0f13dd39ee3e65092ba3572bb5b1fcd125dcd0.tar.gz |
add ymake export to ydb
Diffstat (limited to 'build/conf/ts/node_modules.conf')
-rw-r--r-- | build/conf/ts/node_modules.conf | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/build/conf/ts/node_modules.conf b/build/conf/ts/node_modules.conf new file mode 100644 index 0000000000..aa14b514a2 --- /dev/null +++ b/build/conf/ts/node_modules.conf @@ -0,0 +1,100 @@ +PNPM_ROOT= +PNPM_SCRIPT=$PNPM_ROOT/node_modules/pnpm/dist/pnpm.cjs +NPM_CONTRIBS_PATH=build/platform/yandex_specific/ts/contribs +NODE_MODULES_BUNDLE_AS_OUTPUT= +_NODE_MODULES_INS= +_NODE_MODULES_OUTS= + +# TOUCH_UNIT is required to create module identity file. +# we can "call" macro as `$_NODE_MODULES(...)`. in this case we will get .CMD from it. +# this is the only way to process a variable data as an array. +# ${output;hide:_NODE_MODULES_OUTS} does not produce list of paths, but a single value (space-separeted paths) +_NODE_MODULES_CMD=$TOUCH_UNIT && $_NODE_MODULES(IN $_NODE_MODULES_INS OUT $_NODE_MODULES_OUTS) + +module _NODE_MODULES_BASE: _BARE_UNIT { + .CMD=_NODE_MODULES_CMD + # ignore SRCS macro + .ALIASES=SRCS=_NOOP_MACRO + # Propagates peers to related modules + .PEERDIR_POLICY=as_build_from + .NODE_TYPE=Bundle + + # we have several modules in the same dir (.PEERDIRSELF=NODE_MODULES in BUILD) + # we need different names for module identity file + # .fake tells builder to not materialize it in results + SET(MODULE_SUFFIX .n_m.fake) + # .NODE_TYPE=Bundle is required for peers propagation, but it also affects + # how merging of pic/nopic graphs. Here we can override this merging behaviour + SET(MODULE_TYPE LIBRARY) + # define own tag + SET(MODULE_TAG NODE_MODULES) + # what modules it can PEERDIR to + SET(PEERDIR_TAGS TS NPM_CONTRIBS) + # do not include it into "results" of graph + DISABLE(START_TARGET) + + # we read package.json and erm-packages.json during configuration + SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS ${CURDIR}/package.json ${ARCADIA_ROOT}/$ERM_PACKAGES_PATH) + + PEERDIR($NPM_CONTRIBS_PATH) + # PEERDIR to the right version of nodejs and pnpm + _PEERDIR_TS_RESOURCE(nodejs pnpm) + # setup toolchain vars + _SET_EXTERNAL_RESOURCES() + + # run py logic + _NODE_MODULES_CONFIGURE() +} + +# called in on_node_modules_configure +macro _SET_NODE_MODULES_INS_OUTS(IN{input}[], OUT{output}[]) { + SET(_NODE_MODULES_INS $IN) + SET(_NODE_MODULES_OUTS $OUT) +} + +macro _NODE_MODULES(IN{input}[], OUT{output}[]) { + .CMD=${cwd:BINDIR} $NOTS_TOOL create-node-modules $NOTS_TOOL_BASE_ARGS --pnpm-script $PNPM_SCRIPT --contribs $NPM_CONTRIBS_PATH ${input;hide:IN} ${output;hide:OUT} ${kv;hide:"p NOMO"} ${kv;hide:"pc magenta"} +} + + +### @usage: NPM_CONTRIBS() # internal +### +### Defines special module that provides contrib tarballs from internal npm registry. +### +### @see [FROM_NPM_LOCKFILES()](#macro_FROM_NPM_LOCKFILES) +module NPM_CONTRIBS: _BARE_UNIT { + .CMD=TOUCH_UNIT + .PEERDIR_POLICY=as_build_from + .FINAL_TARGET=no + .ALLOWED=FROM_NPM_LOCKFILES + .RESTRICTED=PEERDIR + .EXTS=_ # Ignore all files, so module is not affected by FROM_NPM output (.EXTS=* is inherited from _BARE_UNIT) + + SET(MODULE_TAG NPM_CONTRIBS) + + # .fake tells builder to not materialize it in results + SET(MODULE_SUFFIX .fake) +} + +### @usage: FROM_NPM_LOCKFILES(LOCKFILES...) # internal +### +### Defines lockfile list for `NPM_CONTRIBS` module. +### +### @see [NPM_CONTRIBS()](#module_NPM_CONTRIBS) +macro FROM_NPM_LOCKFILES(LOCKFILES...) { + SET_APPEND(_MAKEFILE_INCLUDE_LIKE_DEPS $LOCKFILES) + # See implementation in build/plugins/nots.py + _FROM_NPM_LOCKFILES($LOCKFILES) +} + +FROM_NPM_CWD=$ARCADIA_BUILD_ROOT/$NPM_CONTRIBS_PATH +macro _FROM_NPM(NAME, VERSION, SKY_ID, INTEGRITY, INTEGRITY_ALGO, TARBALL_PATH) { + .CMD=${cwd:FROM_NPM_CWD} $YMAKE_PYTHON ${input:"build/scripts/fetch_from_npm.py"} ${input;hide:"build/scripts/fetch_from.py"} ${input;hide:"build/scripts/sky.py"} --name $NAME --version $VERSION --sky-id $SKY_ID --integrity $INTEGRITY --integrity-algorithm $INTEGRITY_ALGO --copy-to ${output;noauto:TARBALL_PATH} ${requirements;hide:"network:full"} ${kv;hide:"p NPM"} ${kv;hide:"pc magenta"} + # we want output to be available for other modules without affecting NPM_CONTRIBS + # we need to expose it (some details in https://st.yandex-team.ru/YMAKE-34) + _EXPOSE($TARBALL_PATH) +} + +macro NODE_MODULES() { + MESSAGE(Remove NODE_MODULES()) +}
\ No newline at end of file |