diff --git a/.github/scripts/tag.sh b/.github/scripts/tag.sh deleted file mode 100755 index 7c0f24d..0000000 --- a/.github/scripts/tag.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash - -set -e - -head_tag=$(git describe --exact-match 2>/dev/null || true) - -git log --color=always --format="%C(auto)%h %s%d" | head - -if [[ ${head_tag} =~ [\d{2}\.\d{2}\.\d+] ]] -then - echo "Version tag ${head_tag} already exists." -else - git config --local user.email "github-actions@users.noreply.github.com" - git config --local user.name "github-actions" - version=$(date +'%y.%m.0') - git tag -a ${version} -m "Release ${version}" - git push origin ${version} - git log --color=always --format="%C(auto)%h %s%d" | head -1 - echo "Pushed new tag:" - echo "${REPO_URL}/releases/tag/${version}" -fi diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index a88dfc3..b3892e6 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -1,32 +1,78 @@ name: Release on: + schedule: + # Run on every first day of the month + - cron: '0 0 1 * *' push: tags: - '**' jobs: - release: + changelog: runs-on: ubuntu-latest steps: - - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Create Package - run: tar -czf forgit-${{github.ref_name}}.tar.gz --exclude LICENSE --exclude README.md * - - 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 - if: steps.changelog.outcome == 'success' 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-${{github.ref_name}}.tar.gz + files: forgit-${{ needs.changelog.outputs.version }}.tar.gz diff --git a/.github/workflows/tag.yaml b/.github/workflows/tag.yaml deleted file mode 100644 index 4cf5a27..0000000 --- a/.github/workflows/tag.yaml +++ /dev/null @@ -1,28 +0,0 @@ -name: Tag - -on: - schedule: - # Run on every first day of the month - - cron: '0 0 1 * *' - -jobs: - - tag: - runs-on: ubuntu-latest - steps: - - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - # The COMMIT_KEY secret contains a private SSH key. The associated public key - # has been added as a deploy key in the GitHub project. See: - # https://docs.github.com/en/developers/overview/managing-deploy-keys#deploy-keys - # This is necessary to make commits done by github-actions able to trigger - # further github-actions. See: https://stackoverflow.com/q/60418323/3018229. - ssh-key: "${{secrets.COMMIT_KEY}}" - - - name: Create Tag - run: .github/scripts/tag.sh - env: - REPO_URL: ${{github.server_url}}/${{github.repository}}