Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 102 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -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<<EOF" >> "$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 }}