build-owntone/.pipeline/build-owntone-web.sh

122 lines
3.3 KiB
Bash
Executable File

#!/bin/bash
#
# Run npm in a docker container to build owntone-web
#
# This script only builds the webinterface, it doesnt patch or make any changes to the
# code. So that should happen before this script is called.
set -e
shopt -s expand_aliases
alias ls='ls --color=always'
alias grep='grep --color=always'
echo
if [[ "${OWNTONE_WEB_WS_URL}" != "false" ]]; then
echo "web-change-ws-url.sh"
.pipeline/web-change-ws-url.sh
else
echo "skipped: web-change-ws-url.sh"
fi
if [[ "${OWNTONE_WEB_DARK_READER}" != "false" ]]; then
echo "web-add-dark-reader.sh"
.pipeline/web-add-dark-reader.sh
else
echo "skipped: web-add-dark-reader.sh"
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 /owntone-server/web-src/node_modules with -v
CACHE_DIR="$HOME/.cache/npm-docker/builds/owntone/web-src/.npm"
NODE_MODULES_DIR="$HOME/.cache/npm-docker/builds/owntone/web-src/node_modules"
OUTPUT_DIR=target/owntone-web
BUILD_UID=$(id -u)
BUILD_GID=$(id -g)
echo "Cleaning up..."
if [[ -d "./${OUTPUT_DIR}" ]]; then
echo "removing: '${OUTPUT_DIR}'"
rm -r ./${OUTPUT_DIR}
fi
find dist/ -name "owntone-web_${OWNTONE_VERSION}.zip" -print -delete
mkdir -pv $CACHE_DIR $NODE_MODULES_DIR $OUTPUT_DIR
echo
echo "Directories mounted to the npm container to build owntone-web (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
(
set -e
set -x
ls -1 dist/
docker pull node:latest
docker run \
--rm \
$DOCKER_OPT_TTY \
-w /owntone-server/web-src \
-e "HOME=/home/node" \
-v ./owntone-server/web-src:/owntone-server/web-src \
-v ./${OUTPUT_DIR}:/${OUTPUT_DIR} \
-v ${CACHE_DIR}:/home/node/.npm \
-v ${NODE_MODULES_DIR}:/owntone-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 run build -- --minify=false --outDir=/${OUTPUT_DIR} --emptyOutDir
"
ls -lah dist/
)
echo
if [[ "${OWNTONE_WEB_WS_URL}" != "false" ]]; then
echo "Checking out 'App.vue' to restore the file"
git -C owntone-server/ checkout -- web-src/src/App.vue
fi
if [[ "${OWNTONE_WEB_DARK_READER}" != "false" ]]; then
echo "Cleaning up 'dark-reader.css'"
find owntone-server/web-src/ -name "dark-reader.css" -print -delete
fi
if [[ "${OWNTONE_WEB_WS_URL}" != "false" || "${GIT_WEB_DARK_READER}" != "false" ]]; then
git -C owntone-server/ status
fi
(
set -e
pushd $OUTPUT_DIR
echo
echo "creating zip file from '${OUTPUT_DIR}'"
zip -r ../../dist/owntone-web_${OWNTONE_VERSION}.zip ./
)
echo
ls -1 dist/