#!/bin/bash set -e TARGET_DIR='gh-pages' TARGET_BRANCH='master' TARGET_REPO_URL="https://$GITHUB_AUTH_TOKEN@github.com/chartjs/chartjs.github.io.git" VERSION_REGEX='[[:digit:]]+.[[:digit:]]+.[[:digit:]]+(-.*)?' # Make sure that this script is executed only for the release and master branches if [[ "$TRAVIS_BRANCH" =~ ^release.*$ ]]; then # Travis executes this script from the repository root, so at the same level than package.json VERSION=$(node -p -e "require('./package.json').version") elif [ "$TRAVIS_BRANCH" == "master" ]; then VERSION="master" else echo "Skipping deploy because this is not the master or release branch" exit 0 fi function update_latest { local out_path=$1 # The most recent directory whose name is a version number local latest=($(ls -v $out_path | egrep '^('$VERSION_REGEX')$' | tail -1)) # As soon as a single version is deployed this line is a no-op if [ "$latest" == "" ]; then latest='master'; fi # Don't update "latest" on alpha or beta releases if [[ "$latest" =~ ^[^-]+$ ]]; then rm -f $out_path/latest ln -s $latest $out_path/latest fi # Always update "next" rm -f $out_path/next ln -s $latest $out_path/next } function deploy_files { local in_files=$1 local out_path=$2 rm -rf $out_path/$VERSION mkdir -p $out_path/$VERSION cp -r $in_files $out_path/$VERSION update_latest $out_path } # Clone the repository and checkout the gh-pages branch git clone $TARGET_REPO_URL $TARGET_DIR cd $TARGET_DIR git checkout $TARGET_BRANCH # Copy dist files deploy_files '../dist/*.js' './dist' # Copy generated documentation deploy_files '../dist/docs/*' './docs' # Copy samples ... deploy_files '../samples/*' './samples' # ... and relocate samples Chart/js scripts for f in $(find ./samples/$VERSION -name '*.html'); do sed -i -E "s/((\.\.\/)+dist\/)/..\/\1$VERSION\//" $f done git add -A git remote add auth-origin $TARGET_REPO_URL git config --global user.email "$GITHUB_AUTH_EMAIL" git config --global user.name "Chart.js" git commit -m "Deploy $VERSION from $TRAVIS_REPO_SLUG" -m "Commit: $TRAVIS_COMMIT" git push -q auth-origin $TARGET_BRANCH git remote rm auth-origin # Cleanup cd .. rm -rf $TARGET_DIR