如果 package.json 中的版本已更改,则执行脚本

script if version in package.json has changed

我有一个 npm 模块项目,它还提供了一个 docker 图像。我想在 package.json 版本更改时触发 docker 图像的 build/test/push。

我正在寻找 bash 脚本,该脚本将确定我的 package.json 中的版本是否已更改。

我可以判断文件是否已更改,例如 $(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD) 使用 node 的脚本没问题,因为我已经在构建服务器上安装了 node bin,例如 PACKAGE_VERSION=$(node -p -e "require('./package.json').version")

您可以将版本与您当前的图像进行比较...

#!/usr/bin/env bash

DOCKER_PACKAGE_VERSION=$(docker run my/image node -pe 'require("./package.json").version')

NEW_PACKAGE_VERSION=$(node -pe 'require("./package.json").version')

if [ "$NEW_PACKAGE_VERSION" == "$DOCKER_PACKAGE_VERSION" ]; then
  printf "Same version [%s]\n" "$NEW_PACKAGE_VERSION"
  exit 1
fi

printf "New version [%s] != [%s]\n" "$NEW_PACKAGE_VERSION" "$DOCKER_PACKAGE_VERSION"
exit 0

然后

$ ./should_i_build.sh && docker build -t my/image .