travis-ci: Initial support for uploading releases to github
This commit is contained in:
parent
07c8662ef9
commit
82261f2bec
11
.travis.yml
11
.travis.yml
|
@ -32,5 +32,16 @@ after_script:
|
||||||
# run lintian after build
|
# run lintian after build
|
||||||
- sudo apt-get install -qq --no-install-recommends lintian
|
- sudo apt-get install -qq --no-install-recommends lintian
|
||||||
- lintian --info --display-info --display-experimental --pedantic --show-overrides ../*.deb && lintian --info --display-info --display-experimental --pedantic --show-overrides ../*.dsc
|
- lintian --info --display-info --display-experimental --pedantic --show-overrides ../*.deb && lintian --info --display-info --display-experimental --pedantic --show-overrides ../*.dsc
|
||||||
|
|
||||||
|
env:
|
||||||
|
global:
|
||||||
|
# travis encrypt -r waja/nagios-snmp-plugins GITHUBTOKEN=XXXXXX (https://help.github.com/articles/creating-an-access-token-for-command-line-use / http://docs.travis-ci.com/user/encryption-keys/)
|
||||||
|
secure: "YOPmOpvVg1J5LcP/dT+Dr5q62agttDyc2IgiTdzwLK2iZQwfQ1nQ2+TPf5f6eaA+cqst1n8GCR/SSICio7dQdfMieY+552gySAoZQw+zzLEg/Kkp2eC71DZ6cyPl7HZ7cVzXqvT9kSSN+HaMkeWaFtvjiyGA2PvtrsFJsZlF+EA="
|
||||||
|
|
||||||
|
after_success:
|
||||||
|
- mkdir -p debian/build/release/
|
||||||
|
- for FILE in $(dcmd ../*.changes); do cp ../$(basename $FILE) debian/build/release/; done
|
||||||
|
- debian/bin/github-release.sh "$TRAVIS_REPO_SLUG" "debian/`head -1 debian/changelog | awk -F'[()]' '{print $2}' | awk -F'+' '{print $1}'`" debian/build/release/*
|
||||||
|
|
||||||
#notifications:
|
#notifications:
|
||||||
# email: false
|
# email: false
|
||||||
|
|
189
debian/bin/github-release.sh
vendored
Executable file
189
debian/bin/github-release.sh
vendored
Executable file
|
@ -0,0 +1,189 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Copyright (c) 2014 Terry Burton
|
||||||
|
#
|
||||||
|
# https://github.com/terryburton/travis-github-release
|
||||||
|
#
|
||||||
|
# Permission is hereby granted, free of charge, to any
|
||||||
|
# person obtaining a copy of this software and associated
|
||||||
|
# documentation files (the "Software"), to deal in the
|
||||||
|
# Software without restriction, including without
|
||||||
|
# limitation the rights to use, copy, modify, merge,
|
||||||
|
# publish, distribute, sublicense, and/or sell copies of
|
||||||
|
# the Software, and to permit persons to whom the Software
|
||||||
|
# is furnished to do so, subject to the following
|
||||||
|
# conditions:
|
||||||
|
#
|
||||||
|
# The above copyright notice and this permission notice
|
||||||
|
# shall be included in all copies or substantial portions
|
||||||
|
# of the Software.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
|
||||||
|
# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
|
||||||
|
# THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||||
|
# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
||||||
|
# CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||||
|
# IN THE SOFTWARE.
|
||||||
|
|
||||||
|
# This script provides a simple continuous deployment
|
||||||
|
# solution that allows Travis CI to publish a new GitHub
|
||||||
|
# release and upload assets to it whenever an annotated or
|
||||||
|
# signed tag is pushed (git tag -a/-s; git push --tags).
|
||||||
|
#
|
||||||
|
# It is created as a temporary solution whilst we wait for
|
||||||
|
# Travis DPL to support GitHub:
|
||||||
|
#
|
||||||
|
# https://github.com/travis-ci/dpl
|
||||||
|
#
|
||||||
|
# Place this script somewhere in your project repository (perhaps by forking
|
||||||
|
# the github-travis-release repo and adding your fork as a git submodule) then
|
||||||
|
# put something like this to your .travis.yml:
|
||||||
|
#
|
||||||
|
# after_success: .travis/github-release.sh "$TRAVIS_REPO_SLUG" "`head -1 src/VERSION`" build/release/*
|
||||||
|
#
|
||||||
|
# The first argument is your repository in the format
|
||||||
|
# "username/repository", which Travis provides in the
|
||||||
|
# TRAVIS_REPO_SLUG environment variable.
|
||||||
|
#
|
||||||
|
# The second argument is the release version which as a
|
||||||
|
# sanity check should match the tag that you are releasing.
|
||||||
|
# You could pass "`git describe`" to satisfy this check.
|
||||||
|
#
|
||||||
|
# The remaining arguments are a list of asset files that you
|
||||||
|
# want to publish along with the release.
|
||||||
|
#
|
||||||
|
# The script requires that you create a GitHub OAuth access
|
||||||
|
# token to facilitate the upload:
|
||||||
|
#
|
||||||
|
# https://help.github.com/articles/creating-an-access-token-for-command-line-use
|
||||||
|
#
|
||||||
|
# You must pass this securely in the GITHUBTOKEN environment
|
||||||
|
# variable:
|
||||||
|
#
|
||||||
|
# http://docs.travis-ci.com/user/encryption-keys/
|
||||||
|
#
|
||||||
|
# For testing purposes you can create a local convenience
|
||||||
|
# file in the script directory called GITHUBTOKEN that sets
|
||||||
|
# the GITHUBTOKEN environment variable. If you do so you MUST
|
||||||
|
# ensure that this doesn't get pushed to your repository,
|
||||||
|
# perhaps by adding it to a .gitignore file.
|
||||||
|
#
|
||||||
|
# Should you get stuck then look at a working example. This
|
||||||
|
# code is being used by Barcode Writer in Pure PostScript
|
||||||
|
# for automated deployment:
|
||||||
|
#
|
||||||
|
# https://github.com/terryburton/postscriptbarcode
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
REPO=$1 && shift
|
||||||
|
RELEASE=$1 && shift
|
||||||
|
RELEASEFILES=$@
|
||||||
|
|
||||||
|
if ! TAG=`git describe --exact-match --all 2>/dev/null`; then
|
||||||
|
echo "This commit is not a tag so not creating a release"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$TRAVIS" = "true" ] && [ -z "$TRAVIS_TAG" ]; then
|
||||||
|
echo "This build is not for the tag so not creating a release"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$TRAVIS" = "true" ] && [ "$TRAVIS_TAG" != "$RELEASE" ]; then
|
||||||
|
echo "Error: TRAVIS_TAG ($TRAVIS_TAG) does not match the indicated release ($RELEASE)"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
TAG=`echo "$TAG" | sed 's/^tags\///'`
|
||||||
|
if [ "$TAG" != "$RELEASE" ]; then
|
||||||
|
echo "Error: The tag ($TAG) does not match the indicated release ($RELEASE)"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z "$RELEASEFILES" ]]; then
|
||||||
|
echo "Error: No release files provided"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
SCRIPTDIR=`dirname $0`
|
||||||
|
[ -e "$SCRIPTDIR/GITHUBTOKEN" ] && . "$SCRIPTDIR/GITHUBTOKEN"
|
||||||
|
if [[ -z "$GITHUBTOKEN" ]]; then
|
||||||
|
echo "Error: GITHUBTOKEN is not set"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Creating GitHub release for $RELEASE"
|
||||||
|
|
||||||
|
echo -n "Create draft release... "
|
||||||
|
JSON=$(cat <<EOF
|
||||||
|
{
|
||||||
|
"tag_name": "$TAG",
|
||||||
|
"target_commitish": "master",
|
||||||
|
"name": "$TAG: New release",
|
||||||
|
"draft": true,
|
||||||
|
"prerelease": false
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
)
|
||||||
|
RESULT=`curl -s -w "\n%{http_code}\n" \
|
||||||
|
-H "Authorization: token $GITHUBTOKEN" \
|
||||||
|
-d "$JSON" \
|
||||||
|
"https://api.github.com/repos/$REPO/releases"`
|
||||||
|
if [ "`echo "$RESULT" | tail -1`" != "201" ]; then
|
||||||
|
echo FAILED
|
||||||
|
echo "$RESULT"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
RELEASEID=`echo "$RESULT" | sed -ne 's/^ "id": \(.*\),$/\1/p'`
|
||||||
|
if [[ -z "$RELEASEID" ]]; then
|
||||||
|
echo FAILED
|
||||||
|
echo "$RESULT"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo DONE
|
||||||
|
|
||||||
|
for FILE in $RELEASEFILES; do
|
||||||
|
if [ ! -f $FILE ]; then
|
||||||
|
echo "Warning: $FILE not a file"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
FILESIZE=`stat -c '%s' "$FILE"`
|
||||||
|
FILENAME=`basename $FILE`
|
||||||
|
echo -n "Uploading $FILENAME... "
|
||||||
|
RESULT=`curl -s -w "\n%{http_code}\n" \
|
||||||
|
-H "Authorization: token $GITHUBTOKEN" \
|
||||||
|
-H "Accept: application/vnd.github.manifold-preview" \
|
||||||
|
-H "Content-Type: application/zip" \
|
||||||
|
--data-binary "@$FILE" \
|
||||||
|
"https://uploads.github.com/repos/$REPO/releases/$RELEASEID/assets?name=$FILENAME&size=$FILESIZE"`
|
||||||
|
if [ "`echo "$RESULT" | tail -1`" != "201" ]; then
|
||||||
|
echo FAILED
|
||||||
|
echo "$RESULT"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo DONE
|
||||||
|
done
|
||||||
|
|
||||||
|
echo -n "Publishing release... "
|
||||||
|
JSON=$(cat <<EOF
|
||||||
|
{
|
||||||
|
"draft": false
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
)
|
||||||
|
RESULT=`curl -s -w "\n%{http_code}\n" \
|
||||||
|
-X PATCH \
|
||||||
|
-H "Authorization: token $GITHUBTOKEN" \
|
||||||
|
-d "$JSON" \
|
||||||
|
"https://api.github.com/repos/$REPO/releases/$RELEASEID"`
|
||||||
|
if [ "`echo "$RESULT" | tail -1`" = "200" ]; then
|
||||||
|
echo DONE
|
||||||
|
else
|
||||||
|
echo FAILED
|
||||||
|
echo "$RESULT"
|
||||||
|
exit 1
|
||||||
|
fi
|
Loading…
Reference in a new issue