Files
vagrant-libvirt/.github/workflows/release.yml
Darragh Bailey 14a8889e33 Rework release workflow (#1609)
Change the release workflow and jobs to ensure more of it is always
exercised for any change and only the actual publishing of the release
is the only part that is limited to be run when tagged.

Additionally try to enable caching and save the generated notes as an
artifact in case the final step fails.
2022-09-28 14:06:53 +01:00

120 lines
4.0 KiB
YAML

name: release
on:
push:
branches:
- '**'
tags:
- '*.*.*'
jobs:
release-notes:
name: Generate Release Notes
runs-on: ubuntu-latest
outputs:
release_branch: ${{ steps.prep.outputs.release_branch }}
steps:
-
name: Checkout code
uses: actions/checkout@v3
with:
fetch-depth: 0
-
name: Determine remote default branch
uses: actions/github-script@v6.2.0
id: remote_default_branch
with:
github-token: ${{secrets.GITHUB_TOKEN}}
result-encoding: string
script: |
repo = await github.rest.repos.get({
owner: context.repo.owner,
repo: context.repo.repo,
})
return repo.data.default_branch
-
name: Prepare
id: prep
run: |
set -eu -o pipefail
echo "max-issues=200" >> .github_changelog_generator
# cache requests to reduce load on API
echo "cache-file=.github_changelog_generator_cache" >> .github_changelog_generator
# only apply this section if triggered by a tag event
if [[ ${GITHUB_REF} == refs/tags/* ]]
then
# exclude unreleased in case re-running workflow
echo "unreleased=false" >> .github_changelog_generator
# in case we've tagged subsequently ensure consistent run
NEXT_TAG_SHA1="$(git rev-list --tags --skip=0 --no-walk | grep -B 1 ${{ github.sha }} || true)"
if [[ "${NEXT_TAG_SHA1:-}" != "${{ github.sha }}" ]]
then
NEXT_TAG=$(git describe --tags --abbrev=0 ${NEXT_TAG_SHA1})
echo "due-tag=${NEXT_TAG}" >> .github_changelog_generator
fi
fi
# limit list to next tag if any
LAST_TAG=$(git describe --tags --abbrev=0 HEAD~1 2>/dev/null || true)
# to ensure that releases continue to get 'x commits since release'
# need to pass the branch name in addition to the tag to the create
# release. Work out which branch the current tag is on
DEFAULT_BRANCH=origin/${{ steps.remote_default_branch.outputs.result }}
if git merge-base --is-ancestor ${{ github.ref }} ${DEFAULT_BRANCH}
then
# if the tag is in the history of the default remote branch
BRANCH=${DEFAULT_BRANCH}
else
# otherwise take the first match and hope for the best
BRANCH=$(git branch -r --format="%(refname:short)" --contains ${{ github.ref }} | head -n1)
fi
BRANCH=${BRANCH#origin/}
# set outputs for usage
echo ::set-output name=previous_version::${LAST_TAG}
echo ::set-output name=release_branch::${BRANCH}
-
name: Cache Github API requests
id: cache-changelog-api-requests
uses: actions/cache@v3
with:
key: github-changelog-cache
path: .github_changelog_generator_cache
-
name: Changelog Generation
uses: CharMixer/auto-changelog-action@v1.4
with:
token: ${{ secrets.GITHUB_TOKEN }}
since_tag: ${{ steps.prep.outputs.previous_version }}
output: release_notes.md
-
uses: actions/upload-artifact@v2
with:
name: release-notes
path: release_notes.md
publish-release:
name: Create Release
needs: release-notes
if: startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
steps:
-
uses: actions/download-artifact@v2
with:
name: release-notes
-
name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
commitish: ${{ needs.release-notes.outputs.release_branch }}
release_name: Release ${{ github.ref }}
body_path: release_notes.md