mirror of
https://github.com/CopterExpress/clover.git
synced 2026-05-26 11:43:25 +00:00
travis: Generate changelog for tags
This commit is contained in:
20
.travis.yml
20
.travis.yml
@@ -10,10 +10,11 @@ env:
|
||||
- IMAGE_NAME="$(basename -s '.git' ${TARGET_REPO})_${IMAGE_VERSION}.img"
|
||||
git:
|
||||
depth: 50
|
||||
matrix:
|
||||
jobs:
|
||||
fast_finish: true
|
||||
include:
|
||||
- name: "Raspberry Pi Image Build"
|
||||
- stage: Build
|
||||
name: "Raspberry Pi Image Build"
|
||||
cache:
|
||||
directories:
|
||||
- imgcache
|
||||
@@ -40,7 +41,8 @@ matrix:
|
||||
tags: true
|
||||
draft: true
|
||||
name: ${TRAVIS_TAG}
|
||||
- name: "Documentation"
|
||||
- stage: Build
|
||||
name: "Documentation"
|
||||
language: node_js
|
||||
node_js:
|
||||
- "10"
|
||||
@@ -66,7 +68,17 @@ matrix:
|
||||
# target-branch: gh-pages
|
||||
# on:
|
||||
# branch: WIP/gitbook-autobuild
|
||||
|
||||
- stage: Annotate
|
||||
name: Auto-generate changelog
|
||||
language: python
|
||||
python: 3.6
|
||||
install:
|
||||
- pip install GitPython PyGithub
|
||||
script:
|
||||
- PYTHONUNBUFFERED=1 python ./gen_changelog.py
|
||||
stages:
|
||||
- Build
|
||||
- Annotate
|
||||
# More info there
|
||||
# https://github.com/travis-ci/travis-ci/issues/6893
|
||||
# https://docs.travis-ci.com/user/customizing-the-build/
|
||||
|
||||
75
gen_changelog.py
Normal file
75
gen_changelog.py
Normal file
@@ -0,0 +1,75 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# Generate and upload changelog
|
||||
|
||||
from git import Repo, exc
|
||||
from github import Github
|
||||
import os
|
||||
import sys
|
||||
|
||||
upload_changelog = True
|
||||
|
||||
try:
|
||||
current_tag = os.environ['TRAVIS_TAG']
|
||||
if current_tag == '':
|
||||
current_tag = 'HEAD'
|
||||
upload_changelog = False
|
||||
print('TRAVIS_TAG is set to {}'.format(current_tag))
|
||||
except KeyError:
|
||||
print('TRAVIS_TAG not set - not uploading changelog')
|
||||
current_tag = 'HEAD'
|
||||
upload_changelog = False
|
||||
|
||||
try:
|
||||
api_key = os.environ['GITHUB_OAUTH_TOKEN']
|
||||
except KeyError:
|
||||
print('GITHUB_OAUTH_TOKEN not set - not uploading changelog')
|
||||
api_key = None
|
||||
upload_changelog = False
|
||||
|
||||
try:
|
||||
repo_slug = os.environ['TRAVIS_REPO_SLUG']
|
||||
except KeyError:
|
||||
print('TRAVIS_REPO_SLUG not set - cannot determine remote repository')
|
||||
repo_slug = ''
|
||||
exit(1)
|
||||
|
||||
if len(sys.argv) > 1:
|
||||
repo_path = sys.argv[1]
|
||||
else:
|
||||
repo_path = '.'
|
||||
|
||||
print('Opening repository at {}'.format(repo_path))
|
||||
repo = Repo(repo_path)
|
||||
git = repo.git()
|
||||
try:
|
||||
print('Unshallowing repository')
|
||||
git.fetch('--unshallow', '--tags')
|
||||
except exc.GitCommandError:
|
||||
print('Repository already unshallowed')
|
||||
print('Attempting to get previous tag')
|
||||
base_tag = git.describe('--tags', '--abbrev=0', '{}^'.format(current_tag))
|
||||
print('Base tag set to {}'.format(base_tag))
|
||||
|
||||
changelog = git.log('{}...{}'.format(base_tag, current_tag), '--pretty=format:* %H %s *(%an)*')
|
||||
print('Current changelog: \n{}'.format(changelog))
|
||||
|
||||
# Only interact with Github if uploading is enabled
|
||||
if upload_changelog:
|
||||
gh = Github(api_key)
|
||||
gh_repo = gh.get_repo(repo_slug)
|
||||
# Get all releases and find ours by its tag name
|
||||
gh_release = None
|
||||
for release in gh_repo.get_releases():
|
||||
if release.tag_name == current_tag:
|
||||
gh_release = release
|
||||
if gh_release is None:
|
||||
# We could not find the correct release, so here's our last resort. It will most likely fail.
|
||||
gh_release = gh_repo.get_release(current_tag)
|
||||
gh_body = gh_release.body
|
||||
if gh_body is None:
|
||||
gh_body = ''
|
||||
gh_body = '{}\nChanges between `{}` and `{}`:\n\n{}'.format(gh_body, base_tag, current_tag, changelog)
|
||||
print('New release body: {}'.format(gh_body))
|
||||
gh_release.update_release(gh_release.tag_name, gh_body, draft=True, prerelease=True,
|
||||
tag_name=gh_release.tag_name, target_commitish=gh_release.target_commitish)
|
||||
Reference in New Issue
Block a user