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}"
- }
- ]
- ]
-}