[Pkg-nagios-changes] [pkg-nagios-snmp-plugins] 03/04: travis-ci: Initial support for uploading releases to github

Jan Wagner waja at moszumanska.debian.org
Mon Mar 16 22:48:53 UTC 2015


This is an automated email from the git hooks/post-receive script.

waja pushed a commit to branch master
in repository pkg-nagios-snmp-plugins.

commit 82261f2bec4d4872b8ac4b80b4db04864eeaa745
Author: Jan Wagner <waja at cyconet.org>
Date:   Sun Mar 15 17:01:28 2015 +0100

    travis-ci: Initial support for uploading releases to github
---
 .travis.yml                  |  11 +++
 debian/bin/github-release.sh | 189 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 200 insertions(+)

diff --git a/.travis.yml b/.travis.yml
index 90c7fe5..ce556be 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -32,5 +32,16 @@ after_script:
     # run lintian after build
     - 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
+
+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:
 #  email: false
diff --git a/debian/bin/github-release.sh b/debian/bin/github-release.sh
new file mode 100755
index 0000000..2542112
--- /dev/null
+++ b/debian/bin/github-release.sh
@@ -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 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-nagios/pkg-nagios-snmp-plugins.git



More information about the Pkg-nagios-changes mailing list