Skip to content

Commit

Permalink
Add release workflow to produce gh release on tag
Browse files Browse the repository at this point in the history
Signed-off-by: Vui Lam <[email protected]>
  • Loading branch information
vuil committed Apr 8, 2023
1 parent b4e6e3d commit 0662d8d
Showing 1 changed file with 146 additions and 0 deletions.
146 changes: 146 additions & 0 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
name: Release

on:
push:
branches:
- "!not_activated_on_branches!*"
tags:
- "v[0-9]+.[0-9]+.[0-9]+"
- "v[0-9]+.[0-9]+.[0-9]+-*"

jobs:

build:
name: Release
runs-on: ubuntu-latest
steps:
- name: Free some disk space on runner
run: |
df -h
sudo rm -rf /usr/share/dotnet
sudo rm -rf /opt/ghc
sudo rm -rf /usr/local/share/boost
sudo rm -rf /usr/lib/jvm
sudo rm -rf /usr/lib/firefox
sudo rm -rf /opt/microsoft/powershell
sudo rm -rf /opt/hostedtoolcache
echo "free space after cleanup:"
df -h
- name: Set up Go 1.x
uses: actions/setup-go@v3
with:
go-version: 1.18
id: go

- name: Check out code into the Go module directory
uses: actions/checkout@v1

- name: Generate details for creating release notes
id: generate-release-details
shell: bash
run: |
set -o xtrace
RELEASE_BRANCH="main"
RELEASE_VERSION=${GITHUB_REF#refs/*/}
major=$(echo "$RELEASE_VERSION" | sed 's/^v\(.*\)/\1/' | cut -d. -f1)
minor=$(echo "$RELEASE_VERSION" | cut -d. -f2)
revision=$(echo "$RELEASE_VERSION" | cut -d. -f3 | cut -d- -f1)
if [ "$revision" -gt 0 ];then
revision=$(($revision-1))
RELEASE_BRANCH="release-${major}.${minor}"
elif [ "$minor" -gt 0 ]; then
minor=$(($minor-1))
elif [ "$major" -gt 0 ]; then
major=$(($major-1))
else
echo "Please validate that the tag release version(${RELEASE_VERSION}) conforms to semver."
exit 1
fi
git log -3 --format=oneline
LAST_TAG="v${major}.${minor}.${revision}"
# remove after first release
LAST_TAG="v0.0.1"
echo "Last release tag - $LAST_TAG"
START_SHA=$(git rev-list -n 1 $LAST_TAG)
echo "Release note generator start SHA - $START_SHA"
END_SHA=$(git rev-list -n 1 $RELEASE_VERSION)
echo "Release note generator end SHA - $END_SHA"
echo "::set-output name=start-sha::$START_SHA"
echo "::set-output name=end-sha::$END_SHA"
echo "::set-output name=release-version::$RELEASE_VERSION"
echo "::set-output name=prev-release-version::$LAST_TAG"
echo "::set-output name=repo-name::$(echo '${{ github.repository }}' | awk -F '/' '{print $2}')"
echo "::set-output name=repo-org::$(echo '${{ github.repository }}' | awk -F '/' '{print $1}')"
echo "::set-output name=release-branch::$RELEASE_BRANCH"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Install release-note dependency
run: |
go install k8s.io/release/cmd/[email protected]
- name: Get Time
id: time
uses: nanzm/[email protected]
with:
format: 'YYYYMMDDHHmmss'

- name: Generate release notes
id: get-release-notes
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
release-notes \
--github-base-url https://github.com \
--org ${{ steps.generate-release-details.outputs.repo-org }} \
--repo ${{ steps.generate-release-details.outputs.repo-name }} \
--branch ${{ steps.generate-release-details.outputs.release-branch }} \
--required-author "" \
--start-sha ${{ steps.generate-release-details.outputs.start-sha }} \
--end-sha ${{ steps.generate-release-details.outputs.end-sha }} \
--output /tmp/${{ steps.time.outputs.time }}-bin-notes
- name: Get Github Release notes
uses: octokit/[email protected]
id: get-github-release-notes
with:
route: POST /repos/{owner}/{repo}/releases/generate-notes
owner: ${{ steps.generate-release-details.outputs.repo-org }}
repo: ${{ steps.generate-release-details.outputs.repo-name }}
tag_name: ${{ steps.generate-release-details.outputs.release-version }}
previous_tag_name: ${{ steps.generate-release-details.outputs.prev-release-version }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: 'Identify New Contributors Section'
id: get-new-contributors
run: |
githubOutput="/tmp/${{ steps.time.outputs.time }}-github-output"
echo "${{ fromJson(steps.get-github-release-notes.outputs.data).body }}" > "$githubOutput"
- name: Generate the release notes
shell: bash
run: |
NEW_CONTRIBUTORS=$(sed -n '/## New Contributors/,$p' /tmp/${{ steps.time.outputs.time }}-github-output)
RELEASE_TOOL_NOTES=$(sed 's/### Uncategorized/### Miscellaneous/g' /tmp/${{ steps.time.outputs.time }}-bin-notes)
RELEASE_NOTES=$(cat <<-END
$RELEASE_TOOL_NOTES
$NEW_CONTRIBUTORS
END
)
echo "$RELEASE_NOTES"
echo "RELEASE_NOTES<<EOF" >> $GITHUB_ENV
echo "$RELEASE_NOTES" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
- id: create_draft_release
name: Create Draft Release
uses: softprops/action-gh-release@v1
with:
draft: true
body: ${{ env.RELEASE_NOTES }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

0 comments on commit 0662d8d

Please sign in to comment.