diff --git a/.github/workflows/release-to-discord.yml b/.github/workflows/release-to-discord.yml index c239d83..89b0bb3 100644 --- a/.github/workflows/release-to-discord.yml +++ b/.github/workflows/release-to-discord.yml @@ -1,15 +1,13 @@ name: Release to Discord on: - workflow_run: - workflows: ["Release"] - types: [completed] + release: + types: [published] workflow_dispatch: jobs: github-releases-to-discord: runs-on: ubuntu-latest - if: ${{ github.event.workflow_run.conclusion == 'success' || github.event_name == 'workflow_dispatch' }} steps: - name: Checkout uses: actions/checkout@v6 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a20e8d8..efde23f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,13 +1,15 @@ name: Release on: - push: - branches: [main] - workflow_dispatch: + release: + types: [published] permissions: - contents: write - id-token: write + contents: read + +concurrency: + group: release-${{ github.event.release.tag_name }} + cancel-in-progress: false jobs: test: @@ -20,6 +22,8 @@ jobs: steps: - name: Checkout code uses: actions/checkout@v6 + with: + ref: ${{ github.event.release.tag_name }} - name: Set up JDK ${{ matrix.java }} uses: actions/setup-java@v5 @@ -38,14 +42,12 @@ jobs: name: Release runs-on: ubuntu-latest needs: test - if: github.ref == 'refs/heads/main' steps: - name: Checkout code uses: actions/checkout@v6 with: - fetch-depth: 0 - token: ${{ secrets.GITHUB_TOKEN }} + ref: ${{ github.event.release.tag_name }} - name: Set up JDK 17 uses: actions/setup-java@v5 @@ -54,25 +56,26 @@ jobs: distribution: 'temurin' cache: 'gradle' - - name: Setup Node.js - uses: actions/setup-node@v6 - with: - node-version: 20 - - - name: Install semantic-release - run: npm install -g semantic-release @semantic-release/changelog @semantic-release/git @semantic-release/exec - - name: Grant execute permission for gradlew run: chmod +x gradlew - - name: Configure Git + - name: Prepare release version + env: + RELEASE_TAG: ${{ github.event.release.tag_name }} run: | - git config user.name "github-actions[bot]" - git config user.email "github-actions[bot]@users.noreply.github.com" + version="${RELEASE_TAG#v}" - - name: Release + if ! [[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+([.-][0-9A-Za-z.-]+)?$ ]]; then + echo "Release tag must look like v1.2.3 or 1.2.3, got '${RELEASE_TAG}'" + exit 1 + fi + + echo "RELEASE_VERSION=$version" >> "$GITHUB_ENV" + perl -0pi -e "s/^version = '.*'$/version = '$version'/m" build.gradle + RELEASE_VERSION="$version" perl -0pi -e 's|(lettermint\s*)[^<]+()|$1$ENV{RELEASE_VERSION}$2|' pom.xml + + - name: Publish to Maven Central env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }} OSSRH_PASSWORD: ${{ secrets.OSSRH_PASSWORD }} ORG_GRADLE_PROJECT_signingKeyId: ${{ secrets.GPG_KEY_ID }} @@ -80,4 +83,12 @@ jobs: GPG_PRIVATE_KEY_BASE64: ${{ secrets.GPG_PRIVATE_KEY }} run: | export ORG_GRADLE_PROJECT_signingKey=$(echo "$GPG_PRIVATE_KEY_BASE64" | base64 -d) - npx semantic-release + ./gradlew publish --no-daemon + + - name: Release staging repository + env: + OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }} + OSSRH_PASSWORD: ${{ secrets.OSSRH_PASSWORD }} + run: | + curl --fail-with-body -X POST -u "$OSSRH_USERNAME:$OSSRH_PASSWORD" \ + https://ossrh-staging-api.central.sonatype.com/manual/upload/defaultRepository/co.lettermint diff --git a/.github/workflows/update-changelog.yml b/.github/workflows/update-changelog.yml new file mode 100644 index 0000000..22b1a0f --- /dev/null +++ b/.github/workflows/update-changelog.yml @@ -0,0 +1,32 @@ +name: Update Changelog + +on: + release: + types: [released] + +permissions: + contents: write + +jobs: + update: + runs-on: ubuntu-latest + timeout-minutes: 5 + + steps: + - name: Checkout code + uses: actions/checkout@v6 + with: + ref: main + + - name: Update Changelog + uses: stefanzweifel/changelog-updater-action@v1 + with: + latest-version: ${{ github.event.release.name }} + release-notes: ${{ github.event.release.body }} + + - name: Commit updated CHANGELOG + uses: stefanzweifel/git-auto-commit-action@v7 + with: + branch: main + commit_message: Update CHANGELOG + file_pattern: CHANGELOG.md diff --git a/.releaserc.json b/.releaserc.json deleted file mode 100644 index 72fabb2..0000000 --- a/.releaserc.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "branches": ["main"], - "plugins": [ - "@semantic-release/commit-analyzer", - "@semantic-release/release-notes-generator", - "@semantic-release/changelog", - [ - "@semantic-release/exec", - { - "prepareCmd": "sed -i \"s/^version = .*/version = '${nextRelease.version}'/\" build.gradle && sed -i \"s/[0-9]*\\.[0-9]*\\.[0-9]*<\\/version>/${nextRelease.version}<\\/version>/\" pom.xml", - "publishCmd": "./gradlew publish --no-daemon && curl -X POST -u \"$OSSRH_USERNAME:$OSSRH_PASSWORD\" https://ossrh-staging-api.central.sonatype.com/manual/upload/defaultRepository/co.lettermint" - } - ], - "@semantic-release/github", - [ - "@semantic-release/git", - { - "assets": ["CHANGELOG.md", "build.gradle", "pom.xml"], - "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}" - } - ] - ] -}