diff --git a/.deployment b/.deployment new file mode 100644 index 0000000..1e42f16 --- /dev/null +++ b/.deployment @@ -0,0 +1,2 @@ +[config] +command = bash deploy.sh \ No newline at end of file diff --git a/.gitignore b/.gitignore index defe0f0..aed8b4a 100644 --- a/.gitignore +++ b/.gitignore @@ -124,3 +124,4 @@ nbproject .node_history cf-ssh.yml .env +.settings \ No newline at end of file diff --git a/README.md b/README.md index 2b13725..3b27a53 100644 --- a/README.md +++ b/README.md @@ -39,9 +39,9 @@ You'll notice that we talk about a `/config/local.js` file below, particularly f * Download or Clone this repository from Github either by using the command line or repo's website on Github. On the right side of the repo's page, there is a button that states "Clone in Desktop". * -* Run `npm install` from the root(the directory that houses the projects files on your computer) of the repository to load modules and install Jekyll dependencies +* Run `npm install` from the root (the directory that houses the projects files on your computer) of the repository to load modules and install Jekyll dependencies -Together these commands will looks something like the following: +Together these commands will look something like the following: ``` $ git clone git@github.com:18F/federalist.git @@ -49,7 +49,7 @@ $ cd federalist $ npm install ``` -* Set up [an application on GitHub](https://github.com/settings/applications/new). You'll want to use `http://localhost:1337/auth` as the "Authorization callback url". Once you have created the application, you'll see a Client ID and Client Secret. You'll need to create a JavaScript file and label it local.js. Save this file to the config folder located in the project you downloaded. Use those values in `config/local.js` +* Set up [an application on GitHub](https://github.com/settings/applications/new). You'll want to use `http://localhost:1337/auth` as the "Authorization callback url". Once you have created the application, you'll see a Client ID and Client Secret. You'll need to create a JavaScript file and label it local.js. Save this file to the config folder located in the project you downloaded. Use those values in `config/local.js` ``` passport: { diff --git a/config/passport.js b/config/passport.js index a3f5292..c08df7b 100644 --- a/config/passport.js +++ b/config/passport.js @@ -48,7 +48,8 @@ module.exports.passport = { organizations: [ 6233994, // 18f 14109682, // federalist-users - 14080592 // us-federal-sbst + 14080592, // us-federal-sbst + 6154722 // microsoft ] }, // diff --git a/deploy.sh b/deploy.sh new file mode 100644 index 0000000..b657f08 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,132 @@ +#!/bin/bash + +# ---------------------- +# KUDU Deployment Script +# Version: 0.1.11 +# ---------------------- + +# 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/.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. + +# 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 + +# 2. Select node version +selectNodeVersion + +# 3. Install npm packages +if [ -e "$DEPLOYMENT_TARGET/package.json" ]; then + cd "$DEPLOYMENT_TARGET" + eval $NPM_CMD install --production --no-optional --no-bin-links + eval $NPM_CMD install sails-hook-federalist-ms@latest + exitWithMessageOnError "npm failed" + cd - > /dev/null +fi + +################################################################################################################################## + +# Post deployment stub +if [[ -n "$POST_DEPLOYMENT_ACTION" ]]; then + POST_DEPLOYMENT_ACTION=${POST_DEPLOYMENT_ACTION//\"} + cd "${POST_DEPLOYMENT_ACTION_DIR%\\*}" + "$POST_DEPLOYMENT_ACTION" + exitWithMessageOnError "post deployment action failed" +fi + +echo "Finished successfully." +