diff --git a/.deployment b/.deployment index 46fe3b00..1e42f16c 100644 --- a/.deployment +++ b/.deployment @@ -1,2 +1,2 @@ [config] -SCM_DO_BUILD_DURING_DEPLOYMENT=false +command = bash deploy.sh \ No newline at end of file diff --git a/.github/workflows/features-deployment_occdevvsfla.yml b/.github/workflows/features-deployment_occdevvsfla.yml index a6b6f65b..eb2c7e1f 100644 --- a/.github/workflows/features-deployment_occdevvsfla.yml +++ b/.github/workflows/features-deployment_occdevvsfla.yml @@ -7,7 +7,7 @@ on: push: branches: - develop - - features/deployment + - features/63792-pwa-deployment workflow_dispatch: jobs: @@ -27,15 +27,14 @@ jobs: yarn install --network-timeout=30000 yarn run build yarn run test - - - name: Zip artifact for deployment - run: zip release.zip ./ -r -x '*.git*' - name: Upload artifact for deployment job uses: actions/upload-artifact@v2 with: name: node-app - path: release.zip + path: | + . + !./node_modules deploy: runs-on: ubuntu-latest @@ -49,9 +48,6 @@ jobs: uses: actions/download-artifact@v2 with: name: node-app - - - name: unzip artifact for deployment - run: unzip release.zip - name: 'Deploy to Azure Web App' id: deploy-to-webapp diff --git a/deploy.sh b/deploy.sh new file mode 100644 index 00000000..ab1c4cde --- /dev/null +++ b/deploy.sh @@ -0,0 +1,134 @@ +#!/bin/bash + +# ---------------------- +# KUDU Deployment Script +# Version: 1.0.17 +# ---------------------- + +# Helpers +# ------- + +exitWithMessageOnError () { + if [ ! $? -eq 0 ]; then + echo "An error has occurred during web site deployment." + echo $1 + exit 1 + fi +} + +# Prerequisites +# ------------- + +# Verify node.js installed +hash node 2>/dev/null +exitWithMessageOnError "Missing node.js executable, please install node.js, if already installed make sure it can be reached from current environment." + +# Setup +# ----- + +SCRIPT_DIR="${BASH_SOURCE[0]%\\*}" +SCRIPT_DIR="${SCRIPT_DIR%/*}" +ARTIFACTS=$SCRIPT_DIR/../artifacts +KUDU_SYNC_CMD=${KUDU_SYNC_CMD//\"} + +if [[ ! -n "$DEPLOYMENT_SOURCE" ]]; then + DEPLOYMENT_SOURCE=$SCRIPT_DIR +fi + +if [[ ! -n "$NEXT_MANIFEST_PATH" ]]; then + NEXT_MANIFEST_PATH=$ARTIFACTS/manifest + + if [[ ! -n "$PREVIOUS_MANIFEST_PATH" ]]; then + PREVIOUS_MANIFEST_PATH=$NEXT_MANIFEST_PATH + fi +fi + +if [[ ! -n "$DEPLOYMENT_TARGET" ]]; then + DEPLOYMENT_TARGET=$ARTIFACTS/wwwroot +else + KUDU_SERVICE=true +fi + +if [[ ! -n "$KUDU_SYNC_CMD" ]]; then + # Install kudu sync + echo Installing Kudu Sync + npm install kudusync -g --silent + exitWithMessageOnError "npm failed" + + if [[ ! -n "$KUDU_SERVICE" ]]; then + # In case we are running locally this is the correct location of kuduSync + KUDU_SYNC_CMD=kuduSync + else + # In case we are running on kudu service this is the correct location of kuduSync + KUDU_SYNC_CMD=$APPDATA/npm/node_modules/kuduSync/bin/kuduSync + fi +fi + +# Node Helpers +# ------------ + +selectNodeVersion () { + if [[ -n "$KUDU_SELECT_NODE_VERSION_CMD" ]]; then + SELECT_NODE_VERSION="$KUDU_SELECT_NODE_VERSION_CMD \"$DEPLOYMENT_SOURCE\" \"$DEPLOYMENT_TARGET\" \"$DEPLOYMENT_TEMP\"" + eval $SELECT_NODE_VERSION + exitWithMessageOnError "select node version failed" + + if [[ -e "$DEPLOYMENT_TEMP/__nodeVersion.tmp" ]]; then + NODE_EXE=`cat "$DEPLOYMENT_TEMP/__nodeVersion.tmp"` + exitWithMessageOnError "getting node version failed" + fi + + if [[ -e "$DEPLOYMENT_TEMP/__npmVersion.tmp" ]]; then + NPM_JS_PATH=`cat "$DEPLOYMENT_TEMP/__npmVersion.tmp"` + exitWithMessageOnError "getting npm version failed" + fi + + if [[ ! -n "$NODE_EXE" ]]; then + NODE_EXE=node + fi + + NPM_CMD="\"$NODE_EXE\" \"$NPM_JS_PATH\"" + else + NPM_CMD=npm + NODE_EXE=node + fi +} + +################################################################################################################################## +# Deployment +# ---------- + +echo Handling node.js deployment. + +## Force NPM Version +NPM_CMD="node /opt/nodejs/16.13.1/bin/npm" +eval node -v +echo $NODE_EXE +echo $NPM_CMD +eval ls /opt/nodejs/ + +# 1. KuduSync +if [[ "$IN_PLACE_DEPLOYMENT" -ne "1" ]]; then + "$KUDU_SYNC_CMD" -v 50 -f "$DEPLOYMENT_SOURCE" -t "$DEPLOYMENT_TARGET" -n "$NEXT_MANIFEST_PATH" -p "$PREVIOUS_MANIFEST_PATH" -i ".git;.hg;.deployment;deploy.sh" + exitWithMessageOnError "Kudu Sync failed" +fi + +# disable selectNodeVersion +# 2. Select node version +#selectNodeVersion + +# 3. Install Yarn +echo Verifying Yarn Install. +eval $NPM_CMD install yarn -g + +# 4. Install yarn packages +if [ -e "$DEPLOYMENT_TARGET/package.json" ]; then + cd "$DEPLOYMENT_TARGET" + echo "Running yarn install --network-timeout 30000 --production" + eval yarn install --network-timeout 30000 --production + exitWithMessageOnError "yarn failed" + cd - > /dev/null +fi + +################################################################################################################################## +echo "Finished successfully."