diff --git a/.travis.yml b/.travis.yml index a55a176..c52fb41 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,9 @@ language: node_js cache: yarn +env: + global: + - ENCRYPTION_LABEL "efa09eced906" + - COMMIT_AUTHOR_EMAIL "gh-bot@callstack.io" node_js: - 'stable' before_install: @@ -12,9 +16,4 @@ install: script: - yarn run flow -- check - yarn run lint -deploy: - provider: script - script: docs/deploy.sh - skip_cleanup: true - on: - branch: master + - cd docs && bash ./deploy.sh diff --git a/deploy_key.enc b/deploy_key.enc new file mode 100644 index 0000000..4e5dad4 Binary files /dev/null and b/deploy_key.enc differ diff --git a/docs/deploy.sh b/docs/deploy.sh index e2b7209..6857fdf 100755 --- a/docs/deploy.sh +++ b/docs/deploy.sh @@ -1,25 +1,64 @@ #!/bin/bash +# Based on domenic's tutorial: https://gist.github.com/domenic/ec8b0fc8ab45f39403dd +set -e # Exit with nonzero exit code if anything fails -set -e +SOURCE_BRANCH="master" +TARGET_BRANCH="gh-pages" -git clone https://${GITHUB_TOKEN}@github.com/callstack-io/react-native-paper.git docs/dist +function doCompile { + npm run build +} -cd docs/dist +# Pull requests and commits to other branches shouldn't try to deploy, just build to verify +if [ "$TRAVIS_PULL_REQUEST" != "false" -o "$TRAVIS_BRANCH" != "$SOURCE_BRANCH" ]; then + echo "Skipping deploy; just doing a build." + doCompile + exit 0 +fi -git checkout gh-pages -rm -rf ** +# Save some useful information +REPO=`git config remote.origin.url` +SSH_REPO=${REPO/https:\/\/github.com\//git@github.com:} +SHA=`git rev-parse --verify HEAD` -cd .. && npm run build && cd dist +# Clone the existing gh-pages for this repo into dist/ +# Create a new empty branch if gh-pages doesn't exist yet (should only happen on first deply) +git clone $REPO dist +cd dist +git checkout $TARGET_BRANCH || git checkout --orphan $TARGET_BRANCH +cd .. -if [ -z "$(git diff --exit-code)" ]; then +# Clean dist existing contents +rm -rf dist/**/* || exit 0 + +# Run our compile script +doCompile + +# Now let's go have some fun with the cloned repo +cd dist +git config user.name "Travis CI" +git config user.email "$COMMIT_AUTHOR_EMAIL" + +# If there are no changes to the compiled dist (e.g. this is a README update) then just bail. +if git diff --quiet; then echo "No changes to the output on this push; exiting." exit 0 fi -git config user.name "Travis CI" -git config user.email "bot@travis-ci.org" - +# Commit the "changes", i.e. the new version. +# The delta will show diffs between new and old versions. git add -A . -git commit -m "Deploy documentation: $(git rev-parse --verify HEAD)" +git commit -m "Deploy to GitHub Pages: ${SHA}" -git push -f -u origin gh-pages +# Get the deploy key by using Travis's stored variables to decrypt deploy_key.enc +ENCRYPTED_KEY_VAR="encrypted_${ENCRYPTION_LABEL}_key" +ENCRYPTED_IV_VAR="encrypted_${ENCRYPTION_LABEL}_iv" +ENCRYPTED_KEY=${!ENCRYPTED_KEY_VAR} +ENCRYPTED_IV=${!ENCRYPTED_IV_VAR} +openssl aes-256-cbc -K $ENCRYPTED_KEY -iv $ENCRYPTED_IV -in ../deploy_key.enc -out ../deploy_key -d +chmod 600 ../deploy_key +eval `ssh-agent -s` +ssh-add deploy_key + +# Now that we're all set up, we can push. +git push $SSH_REPO $TARGET_BRANCH