Skip to content

Commit

Permalink
Create GitHub Actions release automation
Browse files Browse the repository at this point in the history
Signed-off-by: Nathaniel Graff <[email protected]>
  • Loading branch information
nategraff-sifive committed Apr 30, 2020
1 parent becd685 commit 1688a36
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 0 deletions.
48 changes: 48 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
on:
push:
# Require one of the following patterns to match the tag
tags:
- 'v[0-9]+.[0-9]+.[0-9]+.[0-9]+' # ex. v20.00.00.00
- 'v[0-9]+.[0-9]+.RC.[0-9]+' # ex. v20.00.RC.00

name: Create Release

env:
PROJECT_NAME: freedom-devicetree-tools
# Release is a prerelease if the tag contains rc
PRERELEASE: ${{ contains(github.ref, 'RC') }}

jobs:
release:
runs-on: ubuntu-latest

steps:
- name: 'Checkout'
uses: actions/checkout@v2

# In order to generate release notes, we need a deep clone of the
# repository so that we can find the most recent tag and generate
# statistics based on it.
- name: 'Fetch History'
run: git fetch --prune --unshallow

- name: 'Create Release Notes'
id: create-release-notes
run: |
tag=$(echo ${{ github.ref }} | cut -d '/' -f 3)
release_notes=$(./scripts/create-release-notes.sh ${{ env.PROJECT_NAME }} ${tag})
# The string passed to Actions must urlencode newlines.
release_notes="${release_notes//$'\n'/'%0A'}"
# Use a magic "workflow command" to set the output for the step.
echo "::set-output name=release-notes::${release_notes}"
- name: 'Create Release'
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: ${{ env.PROJECT_NAME }} ${{ github.ref }}
body: ${{ steps.create-release-notes.outputs.release-notes }}
draft: false
prerelease: ${{ env.PRERELEASE }}
29 changes: 29 additions & 0 deletions scripts/create-release-notes.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#!/bin/bash
# Copyright (c) 2020 SiFive Inc.
# SPDX-License-Identifier: Apache-2.0

set -euo pipefail

if [ "$#" -lt 2 ] ; then
>&2 echo "$0: please provide project name and release tag"
exit 1
fi

project=$1; shift 1;
current_release=$1; shift 1;

# Get the most recent previous tag with git-describe. If this is
# the first tag in the repository, then this will return a commit
# hash (because of the --always flag).
last_release=$(git describe --tags --always HEAD~)

echo "# Release notes for ${project} ${current_release}"
echo "## Statistics since ${last_release}"
echo "- $(git rev-list --count ${last_release}..HEAD) commits"
echo "-$(git diff --shortstat ${last_release} HEAD)"
echo ""
echo "## Authors"
git shortlog -s -n --no-merges ${last_release}..HEAD | cut -f 2
echo ""
echo "## Merge history"
git log --merges --pretty=format:"%h %b" ${last_release}..HEAD

0 comments on commit 1688a36

Please sign in to comment.