mirror of
https://github.com/vagrant-libvirt/vagrant-libvirt.git
synced 2025-02-25 18:55:27 -06:00
Ensure the release workflow will work consistently by limiting the number of issues that are checked in addition to making use of a cache. This should keep the requests below the API limit and overtime may be increased should the cache be retained. Add checks to determine the correct default branch and look to establish if the tag that was created is reachable from this branch, using it as the value for `commitish` to the create release action so that it retains the `x commits since release` text and link. In the case the workflow is re-run for a release after another release look to pick up the next tag after this release in order to limit the release notes from updating with additional fixes.
91 lines
3.1 KiB
YAML
91 lines
3.1 KiB
YAML
name: release
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- '*.*.*'
|
|
|
|
jobs:
|
|
release:
|
|
name: Create Release
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
-
|
|
name: Checkout code
|
|
uses: actions/checkout@v2
|
|
with:
|
|
fetch-depth: 0
|
|
-
|
|
name: Determine remote default branch
|
|
uses: actions/github-script@v3.0.0
|
|
id: remote_default_branch
|
|
with:
|
|
github-token: ${{secrets.GITHUB_TOKEN}}
|
|
script: |
|
|
repo = await github.repos.get({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
})
|
|
return repo.data.default_branch
|
|
-
|
|
name: Prepare
|
|
id: prep
|
|
run: |
|
|
set -eu -o pipefail
|
|
|
|
# exclude unreleased in case re-running workflow
|
|
echo "unreleased=false" >> .github_changelog_generator
|
|
echo "max-issues=200" >> .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
|
|
# 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@v2
|
|
with:
|
|
key: github-changelog-cache
|
|
path: .github_changelog_generator_cache
|
|
-
|
|
name: Changelog Generation
|
|
uses: CharMixer/auto-changelog-action@v1.1
|
|
with:
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
since_tag: ${{ steps.prep.outputs.previous_version }}
|
|
output: release_notes.md
|
|
-
|
|
name: Create Release
|
|
id: create_release
|
|
uses: actions/create-release@v1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
tag_name: ${{ github.ref }}
|
|
commitish: ${{ steps.prep.outputs.release_branch }}
|
|
release_name: Release ${{ github.ref }}
|
|
body_path: release_notes.md
|