diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 006489c..684d085 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,6 +1,11 @@ name: Release on: + workflow_dispatch: + inputs: + version: + description: "Release version, for example 0.1.0 or v0.1.0" + required: true push: branches: - "main" @@ -38,21 +43,36 @@ jobs: shell: bash env: HEAD_COMMIT_MESSAGE: ${{ github.event.head_commit.message }} + RELEASE_VERSION: ${{ inputs.version }} run: | - title="${HEAD_COMMIT_MESSAGE%%$'\n'*}" - re="^feat: release v?([0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z.-]+)?)$" - if [[ $title =~ $re ]]; then - v=v${BASH_REMATCH[1]} - echo "version=${v}" >> $GITHUB_OUTPUT - echo "version_without_v=${BASH_REMATCH[1]}" >> $GITHUB_OUTPUT - if [[ ${BASH_REMATCH[1]} == *-* ]]; then - echo "is_prerelease=true" >> $GITHUB_OUTPUT + semver_re="^v?([0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z.-]+)?)$" + if [ -n "$RELEASE_VERSION" ]; then + if [[ $RELEASE_VERSION =~ $semver_re ]]; then + version="${BASH_REMATCH[1]}" else - echo "is_prerelease=false" >> $GITHUB_OUTPUT + echo "version input is not correct (expected: X.Y.Z[-prerelease])" + exit 1 fi else - echo "commit format is not correct (expected: feat: release vX.Y.Z[-prerelease])" - exit 1 + title="${HEAD_COMMIT_MESSAGE%%$'\n'*}" + if [[ $title =~ ^(.*)\ \(#[0-9]+\)$ ]]; then + title="${BASH_REMATCH[1]}" + fi + title_re="^feat: release v?([0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z.-]+)?)$" + if [[ $title =~ $title_re ]]; then + version="${BASH_REMATCH[1]}" + else + echo "commit format is not correct (expected: feat: release vX.Y.Z[-prerelease])" + exit 1 + fi + fi + + echo "version=v${version}" >> $GITHUB_OUTPUT + echo "version_without_v=${version}" >> $GITHUB_OUTPUT + if [[ $version == *-* ]]; then + echo "is_prerelease=true" >> $GITHUB_OUTPUT + else + echo "is_prerelease=false" >> $GITHUB_OUTPUT fi - name: Verify rockspec exists