-
Notifications
You must be signed in to change notification settings - Fork 17
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Create GitHub Actions release automation
Signed-off-by: Nathaniel Graff <[email protected]>
- Loading branch information
1 parent
becd685
commit 1688a36
Showing
2 changed files
with
77 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 }} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |