diff --git a/.travis.yml b/.travis.yml index de7eb3d..6d24887 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,14 +3,17 @@ language: node_js node_js: - '5.0' install: - - npm install +- npm install deploy: local_dir: public provider: pages fqdn: koodiklinikka.fi skip_cleanup: true - github_token: $GITHUB_TOKEN # Set in travis-ci.org dashboard + github_token: "$GITHUB_TOKEN" repo: koodiklinikka/koodiklinikka.github.io target_branch: master on: branch: master +after_success: + - chmod ugo+x ./deploy-surge.sh + - "./deploy-surge.sh" diff --git a/deploy-surge.sh b/deploy-surge.sh new file mode 100755 index 0000000..55fe4c2 --- /dev/null +++ b/deploy-surge.sh @@ -0,0 +1,55 @@ +#!/bin/bash +# Split on "/", ref: http://stackoverflow.com/a/5257398/689223 +REPO_SLUG_ARRAY=(${TRAVIS_REPO_SLUG//\// }) +REPO_OWNER=${REPO_SLUG_ARRAY[0]} +REPO_NAME=${REPO_SLUG_ARRAY[1]} +DEPLOY_PATH=./public + +DEPLOY_SUBDOMAIN_UNFORMATTED_LIST=() +if [ "$TRAVIS_PULL_REQUEST" != "false" ] +then + DEPLOY_SUBDOMAIN_UNFORMATTED_LIST+=(${TRAVIS_PULL_REQUEST}-pr) +elif [ -n "${TRAVIS_TAG// }" ] #TAG is not empty +then + #sorts the tags and picks the latest + #sort -V does not work on the travis machine + #sort -V ref: http://stackoverflow.com/a/14273595/689223 + #sort -t ... ref: http://stackoverflow.com/a/4495368/689223 + #reverse with sed ref: http://stackoverflow.com/a/744093/689223 + #git tags | ignore release candidates | sort versions | reverse | pick first line + LATEST_TAG=`git tag | grep -v rc | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n | sed '1!G;h;$!d' | sed -n 1p` + echo $LATEST_TAG + if [ "$TRAVIS_TAG" == "$LATEST_TAG" ] + then + DEPLOY_SUBDOMAIN_UNFORMATTED_LIST+=(latest) + fi + DEPLOY_SUBDOMAIN_UNFORMATTED_LIST+=(${TRAVIS_TAG}-tag) +else + DEPLOY_SUBDOMAIN_UNFORMATTED_LIST+=(${TRAVIS_BRANCH}-branch) +fi + + +for DEPLOY_SUBDOMAIN_UNFORMATTED in "${DEPLOY_SUBDOMAIN_UNFORMATTED_LIST[@]}" +do + echo $DEPLOY_SUBDOMAIN_UNFORMATTED + # replaces "/" or "." with "-" + # sed -r is only supported in linux, ref http://stackoverflow.com/a/2871217/689223 + # Domain names follow the RFC1123 spec [a-Z] [0-9] [-] + # The length is limited to 253 characters + # https://en.wikipedia.org/wiki/Domain_Name_System#Domain_name_syntax + DEPLOY_SUBDOMAIN=`echo "$DEPLOY_SUBDOMAIN_UNFORMATTED" | sed -r 's/[\/|\.]+/\-/g'` + DEPLOY_DOMAIN=https://${DEPLOY_SUBDOMAIN}-${REPO_NAME}-${REPO_OWNER}.surge.sh + + surge --project ${DEPLOY_PATH} --domain $DEPLOY_DOMAIN; + + echo "$TRAVIS_PULL_REQUEST" + + if [ "$TRAVIS_PULL_REQUEST" != "false" ] + then + # Using the Issues api instead of the PR api + # Done so because every PR is an issue, and the issues api allows to post general comments, + # while the PR api requires that comments are made to specific files and specific commits + GITHUB_PR_COMMENTS=https://api.github.com/repos/${TRAVIS_REPO_SLUG}/issues/${TRAVIS_PULL_REQUEST}/comments + curl -H "Authorization: token ${GITHUB_API_TOKEN}" --request POST ${GITHUB_PR_COMMENTS} --data '{"body":"Travis automatic deployment: '${DEPLOY_DOMAIN}'"}' + fi +done diff --git a/package.json b/package.json index d7ac72e..dbfb103 100644 --- a/package.json +++ b/package.json @@ -65,6 +65,7 @@ "mocha": "^2.2.5", "node-notifier": "^4.2.1", "rimraf": "^2.3.4", + "surge": "^0.19.0", "vinyl-source-stream": "~1.0.0", "vinyl-transform": "^1.0.0", "watchify": "^3.2.1"