-
-
Save yvele/e98e3a155335a6e00e71 to your computer and use it in GitHub Desktop.
# Version key/value should be on his own line | |
PACKAGE_VERSION=$(cat package.json \ | |
| grep version \ | |
| head -1 \ | |
| awk -F: '{ print $2 }' \ | |
| sed 's/[",]//g' \ | |
| tr -d '[[:space:]]') | |
echo $PACKAGE_VERSION |
# Gitlab CI working version
PACKAGE_VERSION=$(cat package.json | grep version | head -1 | awk -F= "{ print $2 }" | sed 's/[version:,\",]//g' | tr -d '[[:space:]]')
variables:
PACKAGE_VERSION: $(cat package.json | grep version | head -1 | awk -F= "{ print $2 }" | sed 's/[version:,\",]//g' | tr -d '[[:space:]]')
//in your job or template
.package-template: &package_template
image: docker-hub.registry.integ.fr.auchan.com/docker:latest
stage: package
tags:
- stocks
script:
- export VERSION=
eval $PACKAGE_VERSION
- echo "======> Getting VERSION: $VERSION"
PACKAGE_VERSION=$(grep '"version":' package.json -m1 | cut -d\" -f4)
If I may, if fixed the regex for sed because per example if my package version was : v6.0.0-dev.3
, I would get 6.0.0-d.3
as a result because "version" was not targeted as a full word.
And I had to add -E
for the regex pipe to be understood
My change :
PACKAGE_VERSION=$(cat package.json | grep version | head -1 | awk -F= "{ print $2 }" | sed -E 's/(version)|[:,\",]//g' | tr -d '[[:space:]]')
node --eval="process.stdout.write(require('./package.json').version)"
do the job. Full example:
$ pwd
/home/damlys/workspace/get-npm-package-version
$ ls
package.json
$ cat package.json
{
"name": "myapp",
"version": "0.1.0-rc.1+5398d0bde599de3ed5fc87e41af208e4754cbd52",
"private": true
}
$ node --eval="process.stdout.write(require('./package.json').version)"
0.1.0-rc.1+5398d0bde599de3ed5fc87e41af208e4754cbd52$ export PACKAGE_VERSION=$(node --eval="process.stdout.write(require('./package.json').version)")
$ echo $PACKAGE_VERSION
0.1.0-rc.1+5398d0bde599de3ed5fc87e41af208e4754cbd52
$ echo "v${PACKAGE_VERSION}_FOO_BAR_BAZ"
v0.1.0-rc.1+5398d0bde599de3ed5fc87e41af208e4754cbd52_FOO_BAR_BAZ
$
node -pe "require('./package.json').version"
$ node -pe "require('./package.json').version"
4.10.4
Node or any any other programming language interpreter with JSON support will handle unusual whitespaces correctly like in this case:
{"version"
: "1.0.0"
}
That's a big win, but such solution involves loading the whole language runtime into memory. The difference may go unnoticed on modern hardware, although it's still something to keep in mind.
If you need something just as robust, but more lightweight, then jq is an excellent tool :)
$ jq -r .version package.json
I combined all the examples here but also elsewhere into one big page, no idea what is best, but if it's useful to someone:
https://gist.github.com/dezren39/d71e381a3c70ce8463a9471cd2983617
# these can all be npm scripts, but anything can be an npm script
# a
echo $(cat ./package.json | grep version | head -1 | awk -F: '{ print $2 }' | sed 's/[",]//g' | tr -d '[[:space:]]')
# b
echo $(cat ./package.json | grep version | head -1 | awk -F= "{ print $2 }" | sed -E 's/(version)|[:,\",]//g' | tr -d '[[:space:]]')
# c
echo $(node --eval="process.stdout.write(require('./package.json').version)")
# d
node -pe "require('./package.json').version"
# e
jq -r .version ./package.json
# f
npm run version --silent # add version run-script to scripts: ' "version": "echo $npm_package_version" ' # also could access $npm_package_version any other way
# g not clean
npm version
# if published package, to check published package
# h
npm view . version
# i
npm show . version
# j
awk -F\" '/"version":/ {print $4}' package.json
# k
npx -c 'echo "$npm_package_version"'
# l
perl -ne 'print "$1\n" if /"version":\s*"(.*?)"/' package.json
# m
awk '/version/{gsub(/("|",)/,"",$2);print $2}' package.json
# n
sed -nr 's/^\s*\"version": "([0-9]{1,}\.[0-9]{1,}.*)",$/\1/p' package.json
#---
# npm package example, others exist
npm i -g json
# o (requires "npm i -g json")
json version -a < package.json
# p (requires "npm i -g json")
json dependencies -a < package.json | grep : | sed 's/^ *//;s/"//g;s/: /@/;s/,$//'
# q (requires "npm i -g json")
json dependencies -a < package.json | grep : | sed 's/[",]//g;s/: /@/;s/,$//'
# r (requires "npm i -g json")
json devDependencies -a < package.json | grep : | sed 's/^ *//;s/"//g;s/: /@/;s/,$//'
# s (requires "npm i -g json")
json devDependencies -a < package.json | grep : | sed 's/[",]//g;s/: /@/;s/,$//'
#---
Updated to trim white spaces. Thanks to @swissmanu and @dbaba 👌