This repository has been archived by the owner on Jul 3, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 210
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #478 from sifive/automate-release
Create GitHub Actions release automation
- Loading branch information
Showing
16 changed files
with
172 additions
and
23 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,89 @@ | ||
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-e-sdk | ||
# Release is a prerelease if the tag contains rc | ||
PRERELEASE: ${{ contains(github.ref, 'RC') }} | ||
|
||
jobs: | ||
release: | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
# Perform a recursive, PAT-authenticated checkout of all freedom-e-sdk | ||
# submodules. This allows us to create and push tags to each submodule, | ||
# triggering their own release workflow. | ||
- name: 'Checkout' | ||
uses: actions/checkout@v2 | ||
with: | ||
submodules: 'recursive' | ||
token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} | ||
|
||
# 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 | ||
|
||
# We tag submodules before creating the release notes or the release | ||
# to make sure that they get tagged. | ||
- name: 'Tag Submodules for Release' | ||
run: | | ||
tag=$(echo ${{ github.ref }} | cut -d '/' -f 3) | ||
./scripts/tag-submodules.sh ${tag} | ||
- 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 }} | ||
|
||
- name: 'Clean Documentation Output Folder' | ||
run: | | ||
cd doc/html | ||
git fetch | ||
git checkout master | ||
git reset --hard origin/master | ||
rm -rf * .buildinfo .doctrees | ||
- name: 'Build Sphinx Documenattion' | ||
run: | | ||
tag=$(echo ${{ github.ref }} | cut -d '/' -f 3) | ||
docker run \ | ||
--rm \ | ||
-v $(pwd)/doc:/docs \ | ||
-e RELEASE_TAG="${tag}" \ | ||
sphinxdoc/sphinx \ | ||
make html | ||
- name: 'Publish Documentation' | ||
run: | | ||
tag=$(echo ${{ github.ref }} | cut -d '/' -f 3) | ||
cd doc/html | ||
git config user.email "no-reply@sifive.com" | ||
git config user.name "actions-bot" | ||
git add . | ||
git commit -m "Documentation for ${{ env.PROJECT_NAME }} ${tag}" | ||
git push |
Submodule FreeRTOS-metal
updated
2 files
+48 −0 | .github/workflows/release.yml | |
+29 −0 | scripts/create-release-notes.sh |
Submodule Segger_SystemView-metal
updated
2 files
+48 −0 | .github/workflows/release.yml | |
+29 −0 | scripts/create-release-notes.sh |
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
Submodule freedom-devicetree-tools
updated
2 files
+48 −0 | .github/workflows/release.yml | |
+29 −0 | scripts/create-release-notes.sh |
Submodule freedom-metal
updated
4 files
+84 −0 | .github/workflows/release.yml | |
+10 −0 | doc/Dockerfile | |
+1 −1 | doc/sphinx/conf.py | |
+29 −0 | scripts/create-release-notes.sh |
Submodule scl-metal
updated
2 files
+48 −0 | .github/workflows/release.yml | |
+29 −0 | scripts/create-release-notes.sh |
Submodule cmsis-svd-generator
updated
2 files
+48 −0 | .github/workflows/release.yml | |
+29 −0 | scripts/create-release-notes.sh |
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 |
Submodule devicetree-overlay-generator
updated
2 files
+48 −0 | .github/workflows/release.yml | |
+29 −0 | scripts/create-release-notes.sh |
Submodule elf2hex
updated
2 files
+48 −0 | .github/workflows/release.yml | |
+29 −0 | scripts/create-release-notes.sh |
Submodule esdk-settings-generator
updated
2 files
+48 −0 | .github/workflows/release.yml | |
+29 −0 | scripts/create-release-notes.sh |
Submodule ldscript-generator
updated
2 files
+48 −0 | .github/workflows/release.yml | |
+29 −0 | scripts/create-release-notes.sh |
Submodule openocdcfg-generator
updated
2 files
+48 −0 | .github/workflows/release.yml | |
+29 −0 | scripts/create-release-notes.sh |
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,31 @@ | ||
#!/usr/bin/env bash | ||
|
||
set -euo pipefail | ||
|
||
if [ "$#" -lt 1 ] ; then | ||
>&2 echo "Please provide a tag" | ||
exit 1 | ||
fi | ||
|
||
tag=$1; shift 1; | ||
|
||
submodules=(\ | ||
freedom-metal \ | ||
freedom-devicetree-tools \ | ||
FreeRTOS-metal \ | ||
Segger_SystemView-metal \ | ||
scl-metal \ | ||
scripts/cmsis-svd-generator \ | ||
scripts/devicetree-overlay-generator \ | ||
scripts/elf2hex \ | ||
scripts/esdk-settings-generator \ | ||
scripts/ldscript-generator \ | ||
scripts/openocdcfg-generator \ | ||
) | ||
|
||
set -x | ||
|
||
for submodule in ${submodules[@]} ; do | ||
git -C ${submodule} tag ${tag} | ||
git -C ${submodule} push -f origin ${tag} | ||
done |
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