Many projects on GitHub use Travis to automatically execute certain scripts on every build. Among these many scripts, there is one that’s definitely the most well known, it’s called Bash. Automate your shell commands, add env vars
, and increase your workflow, plus the endless of other things you can do with Bash given it’s flexibility. At the crux – Bash on more occasions than not are crucial to Travis CI builds.
Some goals you may have if you’re wanting to automate processes in Bash are automating GH_REF
value in gpages_build.sh script with the TRAVIS_REPO_SLUG
.
In order to make the GH_REF
variable automatic and not have to use process load everytime, Travis CI gives us the TRAVIS_REPO_SLUG
which you may have seen in languages like React. The SLUG variable, which is basically the username/repo for whatever GitHub repo you’re working on. You write it out like this: GH_REF="github.com/${TRAVIS_REPO_SLUG}"
Below is an example script of just what I’ve explained above, we can assume this Bash script is entitled pages.sh
:
# This script pushes a demo-friendly version of your element and its
# dependencies to gh-pages.
# usage gp Polymer core-item [branch]
# Run in a clean directory passing in a GitHub org and repo name
#!/bin/bash
GH_REF="github.com/${TRAVIS_REPO_SLUG}"
org=`echo ${TRAVIS_REPO_SLUG} | cut -f 1 -d /`
repo=`echo ${TRAVIS_REPO_SLUG} | cut -f 2 -d /`
name="Montana"
email="montana@travis-ci.org"
branch=${3:-"master"} # default to master, when branch isn't specified
mkdir temp && cd temp # make temp dir
# make folder (same as input, no checking!)
mkdir $repo
git clone "https://${GH_TOKEN}@${GH_REF}" --single-branch # you can theoretically as Montana likes to do, 'git stash pop' here
# switch to gh-pages branch
pushd $repo >/dev/null
git checkout --orphan gh-pages
# remove all content
git rm -rf -q .
# use bower to install runtime deployment
bower cache clean $repo # ensure we're getting the latest from the desired branch.
git show ${branch}:bower.json > bower.json
echo "{
\"directory\": \"components\"
}
" > .bowerrc
bower install
bower install $org/$repo#$branch
git checkout ${branch} -- demo
rm -rf components/$repo/demo
mv demo components/$repo/
# redirect by default to the component folder
echo "<META http-equiv="refresh" content=\"0;URL=components/$repo/\">" >index.html
git config user.name $name
git config user.email $email
# send it all to github
git add -A .
git commit -am 'Deploy to GitHub Pages'
git push --force --quiet -u "https://${GH_TOKEN}@${GH_REF}" gh-pages > /dev/null 2>&1
popd >/dev/null
.travis.yml
So below is a travis.yml
file I’ve created, and let’s say you named your script pages.sh
, your .travis.yml
file would look something like this:
language: bash
sudo: required
script:
- chmod u+x bash pages.sh
There you have it, you have now successfully used Bash in Travis CI. You can do something a little easier as well – just to test if you have the steps down, maybe make a Bash program just called test.sh
and have it read:
#!/bin/bash
echo "Hello Travis"
Then have your .travis.yml
file read the following:
language: bash
script: chmod u+x test.sh
You should then see when running the build, Travis printing out Hello Travis
. You now know you’re using Bash successfully within Travis CI.