kinesis360/.pipeline/build-keymap-editor-web.sh

116 lines
3.3 KiB
Bash
Executable File

#!/bin/bash
#
# Run npm in a docker container to build keymap-editor-web (Adv369-Pro-KeymapEditor)
#
set -e
shopt -s expand_aliases
alias ls='ls --color=always'
alias grep='grep --color=always'
NAME="keymap-editor-web"
SRC_PATH="Adv360-Pro-KeymapEditor"
SRC_REPO_URL="https://github.com/KinesisCorporation/Adv360-Pro-KeymapEditor/"
REPO_NAME=$(git rev-parse --show-toplevel | xargs basename)
if [[ -z "${REPO_NAME}" ]]; then
echo "undefined: 'REPO_NAME'"
exit 1
elif [[ -z "${VERSION}" ]]; then
VERSION=$(date -I | tr '-' '.')-SNAPSHOT
elif [[ ! -d "./${SRC_PATH}" ]]; then
git clone //github.com/KinesisCorporation/Adv360-Pro-KeymapEditor/ $(git rev-parse --show-toplevel)/Adv360-Pro-KeymapEditor
fi
# the /home/node dir is explicitly owned by uid 1000, and npm wants to write to $HOME/.npm (some logs)
# best way seems to be to bind mount 'node_modules' from the source dir (npm expects it in its pwd).
CACHE_DIR="$HOME/.cache/npm-docker/builds/${REPO_NAME}/${NAME}/.npm"
NODE_MODULES_DIR="$HOME/.cache/npm-docker/builds/${REPO_NAME}/${NAME}/node_modules"
OUTPUT_DIR=dist/${NAME}
BUILD_UID=$(id -u)
BUILD_GID=$(id -g)
echo "Cleaning up..."
find ${OUTPUT_DIR} -name "${NAME}_${VERSION}.zip" -print -delete
mkdir -pv $CACHE_DIR $NODE_MODULES_DIR $OUTPUT_DIR
echo
echo "Directories mounted to the npm container to build ${NAME} (working around the container expecting to run as uid=1000"
echo "CACHE_DIR: ${CACHE_DIR}"
echo "NODE_MODULES_DIR: ${NODE_MODULES_DIR}"
echo
echo "Directory mounted to write the build output to:"
echo "OUTPUT_DIR: ${OUTPUT_DIR}"
echo
echo "Running npm container as uid=${BUILD_UID}, gid=${BUILD_GID}"
echo
if [[ -t 1 ]]; then
# run docker container with -t if we are in a TTY
DOCKER_OPT_TTY="-t"
fi
# the package.json file on the SRC repo root invokes application/package.json
# the one in the root is for running dev sever
#
(
# https://github.com/KinesisCorporation/Adv360-Pro-KeymapEditor/blob/master/running-locally.md
#
set -e
set -x
ls -1 dist/
docker pull node:latest
docker run \
--rm \
$DOCKER_OPT_TTY \
-w /${NAME} \
-e "HOME=/home/node" \
-v ./${SRC_PATH}:/${NAME} \
-v ./config:/${NAME}/config \
-v ./${OUTPUT_DIR}:/${OUTPUT_DIR} \
-v ${CACHE_DIR}:/home/node/.npm \
-v ${NODE_MODULES_DIR}:/${REPO_NAME}-server/web-src/node_modules \
-e FORCE_COLOR=1 \
-e TERM="xterm256-color" \
-e NPM_CONFIG_PREFIX=/home/node/.npm \
-e NODE_PATH=/home/node/.npm/node_modules \
-e NODE_MODULES=/home/node/.npm/node_modules \
-e NODE_INSTALL_PATH=/home/node/.npm/node_modules \
-e OUTPUT_DIR=${OUTPUT_DIR} \
--user "${BUILD_UID}:${BUILD_GID}" \
node:latest bash -c "
set -ex && \
npm ci && \
npm install && \
cd application && \
npm install
"
# npm run build (was last)
# npm run build -- --minify=false --outDir=/${OUTPUT_DIR} --emptyOutDir
# the docs say:
# npm install
# npm run dev
# which would presumably start a dev server. lets see how this works first
ls -lah $OUTPUT_DIR
)
(
set -e
pushd $OUTPUT_DIR
echo
echo "creating zip file from '${OUTPUT_DIR}'"
zip -r ../../dist/${NAME}_${VERSION}.zip ./
)
echo
ls -1 dist/