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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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).