I wanted to add a short post to describe how to automate the downloading of releases from private github repositories using a bash script or in a Docker build.
To start you need to create a Github token that has access to your repository. Once you have your token you can use the following bash script filling in the relevant details:
#!/usr/bin/env bash | |
set -e | |
GITHUB_TOKEN=<my_token> | |
REPO="kevholditch/demo" | |
FILE="demo_0.0.1_linux_amd64.tar.gz" | |
VERSION="v0.0.1" | |
wget -q –auth-no-challenge –header='Accept:application/octet-stream' \ | |
https://$GITHUB_TOKEN:@api.github.com/repos/$REPO/releases/assets/`curl -H "Authorization: token $GITHUB_TOKEN" -H "Accept: application/vnd.github.v3.raw" -s https://api.github.com/repos/$REPO/releases | jq ". | map(select(.tag_name == \"$VERSION\"))[0].assets | map(select(.name == \"$FILE\"))[0].id"` \ | |
-O /tmp/$FILE |
This script will download your release to the /tmp/
directory, from there you can untar and move it etc.
To take this a stage further if you want to download your release as part of a docker build you can use the Dockerfile
snippet below to give you a starting point:
ARG GITHUB_TOKEN | |
ENV REPO "kevholditch/demo" | |
ENV FILE "demo_0.0.1_linux_amd64.tar.gz" | |
ENV VERSION "v0.0.1" | |
wget -q –auth-no-challenge –header='Accept:application/octet-stream' \ | |
https://$GITHUB_TOKEN:@api.github.com/repos/$REPO/releases/assets/`curl -H "Authorization: token $GITHUB_TOKEN" -H "Accept: application/vnd.github.v3.raw" -s https://api.github.com/repos/$REPO/releases | jq ". | map(select(.tag_name == \"$VERSION\"))[0].assets | map(select(.name == \"$FILE\"))[0].id"` \ | |
-O /tmp/$FILE |
The trick here is that we are passing in the GITHUB_TOKEN using a docker build arg. This allows you to build the container using travis by setting a secure ENV variable and then passing that into your docker build script as the docker arg parameter. For example:
if [ "$GITHUB_TOKEN" = "" ]; then | |
echo "you need to create a github token with access to kevholditch/demo to run this build see https://github.com/settings/tokens/new" | |
exit -1 | |
fi | |
docker build –build-arg "GITHUB_TOKEN=$GITHUB_TOKEN" -t kevholditch/demo . |
In the script above we check that the GITHUB_TOKEN env variable is set and if it isn’t then we terminate with a non zero exit code, halting the build. This then allows developers to run the build with their own GITHUB_TOKEN and you can run this build on travis by setting a secure env variable (or the equivalent in the builder server you are using).