diff options
Diffstat (limited to '.pypt/ghrel')
| -rwxr-xr-x | .pypt/ghrel | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/.pypt/ghrel b/.pypt/ghrel new file mode 100755 index 0000000..26463c5 --- /dev/null +++ b/.pypt/ghrel @@ -0,0 +1,90 @@ +#!/usr/bin/env python +# -*- encoding: utf-8 -*- +# Kw’s Release Tools/Python Project Template +# GitHub Releases Creator +# Copyright © 2013-2015, Chris Warrick. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions, and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions, and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# 3. Neither the name of the author of this software nor the names of +# contributors to this software may be used to endorse or promote +# products derived from this software without specific prior written +# consent. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# Arguments: +# FILE BASEDIR REPO TAG + +""" +Create GitHub releases out of changelogs. + +Usage: .pypt/commitlog FILE BASEDIR REPO TAG, where + FILE is the path to the file to use, which can be + a plain .md file or a CMFN file, + BASEDIR is the project directory, + REPO is the full GitHub repository name (user/repo), + TAG is the tag to write to. + All paths should be absolute. +""" + +import re +import requests +import json +from os.path import join as pjoin +from sys import argv + +_script, FILE, BASEDIR, REPO, TAG = argv + +with open(pjoin(BASEDIR, '.pypt', 'gh-token')) as fh: + TOKEN = fh.read().strip() + +HEADERS = { + 'User-Agent': 'Kwpolska/python-project-template', + 'Authorization': 'token ' + TOKEN, +} + +with open(FILE) as fh: + fdata = fh.read() + e = re.findall( + '#~ CHANGELOG MESSAGE START ~#\n(.*?)\n#~ CHANGELOG MESSAGE END ~#', + fdata, flags=re.S) + + if e: + # parse as a CMFN file, replace backticks (reST->Markdown) + message = e[0].replace('``', '`') + else: + # parse as a plain Markdown file + message = fdata + + +r = requests.post( + 'https://api.github.com/repos/{0}/releases'.format(REPO), + data=json.dumps({'tag_name': TAG, 'body': message}), + headers=HEADERS) + +if r.status_code == 201: + print("GitHub Release created: {0}".format(r.json()['url'])) +else: + print("GitHub Release failed: {0}".format(r.text)) + exit(1) |
