mirror of
https://github.com/wfxr/forgit.git
synced 2026-09-10 15:26:16 -04:00
This is mostly a refactoring of our GitHub actions. The tag workflow and script have been removed completely, since the release action will implicitly create the release tag if it does not exit, yet. This makes sure that we do not create a tag when there will be no release. We have only one workflow now, which contains two jobs: one for generating the changelog and one for creating the release. The changelog job will generate the changelog and upload it as an artifact if there are public changes. The release version, which previously was determined in the tag script, is now determined within this job, so that we can pass it to the release job. The release job will run only if the changelog job was successful, i.e. if there are public changes. It will create a tag and a GitHub release with the given version number. The workflow will run on the first day of every month for our regular automatic monthly releases. It will also run on every tag push, so that we still can create a release manually if necessary. The release action will implicitly use the existing tag for the release then. Fixes #413 Closes #414
79 lines
2.2 KiB
YAML
79 lines
2.2 KiB
YAML
name: Release
|
|
|
|
on:
|
|
schedule:
|
|
# Run on every first day of the month
|
|
- cron: '0 0 1 * *'
|
|
push:
|
|
tags:
|
|
- '**'
|
|
|
|
jobs:
|
|
|
|
changelog:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Generate Changelog
|
|
id: changelog
|
|
run: .github/scripts/changelog.sh > CHANGELOG.md
|
|
# When the script returns with an error, it indicates that we don't have
|
|
# any public changes to be released. This is expected behavior, so we
|
|
# quit the workflow successfully in this case.
|
|
continue-on-error: true
|
|
|
|
- name: Upload Changelog
|
|
uses: actions/upload-artifact@v4
|
|
if: steps.changelog.outcome == 'success'
|
|
with:
|
|
name: changelog
|
|
path: CHANGELOG.md
|
|
|
|
- name: Set version
|
|
id: set_version
|
|
if: steps.changelog.outcome == 'success'
|
|
# Set version depending on whether this is a regular monthly release or
|
|
# a custom release triggered by a tag push.
|
|
run: |
|
|
if [ "${{ github.event_name }}" == "push" ]; then
|
|
VERSION=${{ github.ref_name }}
|
|
else
|
|
VERSION=$(date +'%y.%m.0')
|
|
fi
|
|
echo "VERSION=$VERSION"
|
|
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
|
|
|
|
outputs:
|
|
changeLogOutcome: ${{ steps.changelog.outcome }}
|
|
version: ${{ steps.set_version.outputs.VERSION }}
|
|
|
|
release:
|
|
runs-on: ubuntu-latest
|
|
needs: changelog
|
|
if: needs.changelog.outputs.changeLogOutcome == 'success'
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Download Changelog
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: changelog
|
|
|
|
- name: Create Package
|
|
run: tar -czf forgit-${{ needs.changelog.outputs.version }}.tar.gz --exclude LICENSE --exclude README.md *
|
|
|
|
- name: Release
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
# The release action implicitly creates the tag if it does not exist.
|
|
tag_name: ${{ needs.changelog.outputs.version }}
|
|
body_path: CHANGELOG.md
|
|
files: forgit-${{ needs.changelog.outputs.version }}.tar.gz
|