@holidayextras/deployment-helpers
Advanced tools
| #!/bin/bash | ||
| set -e | ||
| # Configure this script with options under a `nodeModuleCaching` | ||
| # config key in package.json: | ||
| # config: { | ||
| # nodeModuleCaching: { | ||
| # ...options | ||
| # } | ||
| # } | ||
| # You can provide a `strategy` to store a hash of the package.json | ||
| # in with the node_modules directory. If, on a repeat build, the CI | ||
| # service's cached node_modules directory contains a file matching | ||
| # the current hash, the `npm install` step can be skipped. If it | ||
| # differs we can take one of two options: | ||
| # "clear" will completely delete the node_modules directory and install | ||
| # a fresh one if the package.json changes. This is slower, but more | ||
| # predictable than the "prune" strategy, and will pick up updates | ||
| # to modules that still satisfy the specified version ranges. | ||
| # "prune" will install into the cached directory then run `npm prune` to | ||
| # remove unused modules. It is faster, but generates a less predictable | ||
| # tree (over time) than the "clear" strategy, and will not pick up | ||
| # updates to modules if the installed version satisfies the specified | ||
| # version ranges. | ||
| # Empty or unknown values will simply run npm install on every build. | ||
| STRATEGY=$npm_package_config_nodeModuleCaching_strategy | ||
| # Set an `npmVersion` to install a newer npm version, like (at time of writing) npm 3. | ||
| NPM_VERSION=$npm_package_config_nodeModuleCaching_npmVersion | ||
| if [ -n "$NPM_VERSION" ]; then | ||
| echo "npm caching: installing npm@$NPM_VERSION" | ||
| npm install -g npm@$NPM_VERSION | ||
| fi | ||
| if [[ "$STRATEGY" == "prune" || "$STRATEGY" == "clear" ]]; then | ||
| MODULE_HASH_FILE="./node_modules/modules.sha" | ||
| CURRENT_SHA=`cat package.json | openssl dgst -sha256` | ||
| if [ -f $MODULE_HASH_FILE ]; then | ||
| CACHE_SHA=`cat $MODULE_HASH_FILE` | ||
| fi | ||
| echo "npm caching: comparing current package.json sha to cached sha" | ||
| echo "cached: $CACHE_SHA, current: $CURRENT_SHA" | ||
| if [ "$CACHE_SHA" == "$CURRENT_SHA" ]; then | ||
| echo "npm caching: skipping install step" | ||
| else | ||
| if [ "$STRATEGY" == "clear" ]; then | ||
| echo "npm caching: installing modules into empty directory" | ||
| rm -rf node_modules | ||
| npm install | ||
| fi | ||
| if [ "$STRATEGY" == "prune" ]; then | ||
| echo "npm caching: installing modules into cached directory" | ||
| npm install | ||
| npm prune | ||
| fi | ||
| echo "npm caching: updating cache sha" | ||
| echo $CURRENT_SHA > $MODULE_HASH_FILE | ||
| fi | ||
| else | ||
| echo "npm caching: defaulting to `npm install`" | ||
| npm install | ||
| fi |
@@ -42,8 +42,11 @@ #!/bin/bash | ||
| npm run build | ||
| git add dist | ||
| git status | ||
| if [[ -n $(git status -s) ]] ; then | ||
| echo "Updated dist needs committing" | ||
| git commit -m "Added new dist for version ${THIS_VERSION}" | ||
| git push origin ${RELEASE_BRANCH} | ||
| # If a new dist dir has been built we may need to commit it | ||
| if [ -d dist ]; then | ||
| git add dist | ||
| git status | ||
| if [[ -n $(git status -s) ]] ; then | ||
| echo "Updated dist needs committing" | ||
| git commit -m "Added new dist for version ${THIS_VERSION}" | ||
| git push origin ${RELEASE_BRANCH} | ||
| fi | ||
| fi | ||
@@ -50,0 +53,0 @@ |
+1
-1
| { | ||
| "name": "@holidayextras/deployment-helpers", | ||
| "version": "1.4.1", | ||
| "version": "1.4.2", | ||
| "description": "A collection of scripts that can be used as part of a deployment process.", | ||
@@ -5,0 +5,0 @@ "main": "", |
+36
-0
| # Deployment Helpers | ||
| This project holds various deployment scripts that are used with AWS CodeDeploy and releasing our private NPM modules. | ||
| ## Node Apps | ||
@@ -8,1 +10,35 @@ | ||
| This will check if the `package.json` version has been updated for a project and then create a new release on github after running `npm build` and commiting any changed release assets in the `dist` directory. | ||
| ### `cachedInstallModules.sh` | ||
| This can speed up installation of node modules on hosted CI. It stores a hash of the `package.json` into the node_modules directory and uses it to determine if we may need to reinstall. Alongside this, it can automatically upgrade `npm`, and wipe out the cached node_modules directory if `package.json` has changed (to ensure unused modules are removed, and that new releases satisfying the current version range are updated to). | ||
| Use and configure with package.json: | ||
| ``` | ||
| "scripts": { | ||
| "install:cached": "rm -rf ./deployment-helpers && git clone https://github.com/holidayextras/deployment-helpers.git && ./deployment-helpers/nodeApps/cachedInstallModules.sh" | ||
| }, | ||
| "config": { | ||
| "nodeModuleCaching": { | ||
| // "clear", "prune" or omit. | ||
| // "clear" is slower, but will pick up all available updates to modules | ||
| // "prune" is faster, but will continue using already-cached modules if | ||
| // they still satisfy the range. Extraneous modules are removed. | ||
| // If omitted, the usual approach of simply running `npm install` is used, | ||
| // which will not install available updates or remove extraneous modules. | ||
| "strategy": "clear", | ||
| // Which npm version to install. Omit to use the existing default. | ||
| "npmVersion": 3, | ||
| // Increment this optional key to invalidate the current module cache, without | ||
| // resorting to hacks like adding whitespace to the end of package.json | ||
| "incrementToForceUpdate": 1 | ||
| } | ||
| }, | ||
| ``` | ||
| ## Releasing to NPM | ||
| We currently use a combination of npm version 1 and above, because of this we can not scope the package name in the `package.json`, when a new NPM release is required please add the scope to the package name (`@holidayextras/deployment-helpers`) manually before running `npm publish`. |
37597
13.4%15
7.14%44
450%