diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..b1baf7d --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,102 @@ +name: release + +on: + workflow_dispatch: + inputs: + version: + description: "The version to release" + type: string + +permissions: + contents: write + pull-requests: read + statuses: write + packages: write + +jobs: + release: + name: release + runs-on: ubuntu-latest + timeout-minutes: 15 + outputs: + has-changes: ${{ steps.check-changes.outputs.has-changes }} + next-version: ${{ steps.next-version.outputs.NEXT_VERSION }} + commit-hash: ${{ steps.auto-commit-action.outputs.commit_hash }} + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 0 + - uses: jdx/mise-action@v3 + with: + experimental: true + - name: check for changes since last release + id: check-changes + run: | + LAST_TAG=$(git tag -l | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | sort -V | tail -n 1) + if [ -z "$LAST_TAG" ]; then + echo "No previous FlexUI releases found, will release" + echo "has-changes=true" >> $GITHUB_OUTPUT + else + if [ -n "$(git diff --name-only ${LAST_TAG}..HEAD)" ]; then + echo "FlexUI changes found since $LAST_TAG" + echo "has-changes=true" >> $GITHUB_OUTPUT + else + echo "No FlexUI changes since $LAST_TAG" + echo "has-changes=false" >> $GITHUB_OUTPUT + fi + fi + - name: Get next version + id: next-version + if: steps.check-changes.outputs.has-changes == 'true' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + NEXT_VERSION=$(git cliff --config ./cliff.toml --bumped-version) + echo "NEXT_VERSION=$NEXT_VERSION" >> "$GITHUB_OUTPUT" + echo "Next FlexUI version will be: $NEXT_VERSION" + - name: Update CHANGELOG.md + if: steps.check-changes.outputs.has-changes == 'true' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: git cliff --config ./cliff.toml --bump -o ./CHANGELOG.md + - name: Update README.md version + if: steps.check-changes.outputs.has-changes == 'true' + run: | + sed -i -E 's|https://github.com/space-code/flex-ui.git", from: "[0-9]+\.[0-9]+\.[0-9]+"|https://github.com/space-code/flex-ui.git", from: "'"${{ steps.next-version.outputs.NEXT_VERSION }}"'"|g' README.md + echo "Updated README.md with version ${{ steps.next-version.outputs.NEXT_VERSION }}" + - name: Get release notes + id: release-notes + if: steps.check-changes.outputs.has-changes == 'true' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + echo "RELEASE_NOTES<> "$GITHUB_OUTPUT" + + echo "All notable changes to this project will be documented in this file." >> "$GITHUB_OUTPUT" + echo "" >> "$GITHUB_OUTPUT" + echo "The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)," >> "$GITHUB_OUTPUT" + echo "and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html)." >> "$GITHUB_OUTPUT" + echo "" >> "$GITHUB_OUTPUT" + + git cliff --config ./cliff.toml --tag ${{ steps.next-version.outputs.NEXT_VERSION }} --unreleased --strip header | awk 'NF{p=1} p' | tail -n +2 >> "$GITHUB_OUTPUT" + + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Commit changes + id: auto-commit-action + uses: stefanzweifel/git-auto-commit-action@v7 + if: steps.check-changes.outputs.has-changes == 'true' + with: + commit_options: "--allow-empty --no-verify" + tagging_message: ${{ steps.next-version.outputs.NEXT_VERSION }} + skip_dirty_check: true + commit_message: "[Release] FlexUI ${{ steps.next-version.outputs.NEXT_VERSION }}" + - name: Create GitHub Release + uses: softprops/action-gh-release@v2 + if: steps.check-changes.outputs.has-changes == 'true' + with: + draft: false + repository: space-code/flex-ui + name: ${{ steps.next-version.outputs.NEXT_VERSION }} + tag_name: ${{ steps.next-version.outputs.NEXT_VERSION }} + body: ${{ steps.release-notes.outputs.RELEASE_NOTES }} + target_commitish: ${{ steps.auto-commit-action.outputs.commit_hash }} \ No newline at end of file