diff --git a/.github/workflows/ci-maven-publish-release.yaml b/.github/workflows/ci-maven-publish-release.yaml
new file mode 100644
index 00000000..4bcd5788
--- /dev/null
+++ b/.github/workflows/ci-maven-publish-release.yaml
@@ -0,0 +1,53 @@
+name: CI - Maven Publish Release
+
+on:
+ push:
+ tags:
+ - 'v*'
+ workflow_dispatch:
+ # Publish nightly builds
+ schedule:
+ - cron: '0 0 * * *' # run at midnight UTC
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Set up JDK 17
+ uses: actions/setup-java@v3
+ with:
+ distribution: temurin
+ java-version: 17
+ server-id: ossrh
+ server-username: MAVEN_USERNAME
+ server-password: MAVEN_PASSWORD
+ - name: Checkout code
+ uses: actions/checkout@v3
+ with:
+ fetch-depth: 0
+ - name: Install Protoc
+ uses: arduino/setup-protoc@v1
+ with:
+ repo-token: ${{ secrets.GITHUB_TOKEN }}
+ - name: Build and Verify
+ run: mvn --no-transfer-progress --batch-mode verify
+ - name: Package surefire test results
+ if: failure()
+ run: |
+ rm -rf test-results
+ mkdir test-results
+ find . -type d -name "*surefire*" -exec cp --parents -R {} test-results/ \;
+ zip -r test-results.zip test-results
+ - name: Upload test results
+ uses: actions/upload-artifact@v3
+ if: failure()
+ with:
+ name: test-results
+ path: test-results.zip
+ - name: Publish to the Maven Central Repository
+ run: mvn --batch-mode deploy
+ env:
+ MAVEN_USERNAME: ${{ secrets.SONATYPE_USERNAME }}
+ MAVEN_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }}
diff --git a/pom.xml b/pom.xml
index b26806a3..069845ce 100644
--- a/pom.xml
+++ b/pom.xml
@@ -52,10 +52,15 @@
- github
- GitHub Packages
- https://maven.pkg.github.com/streamnative/oxia-java
+ ossrh
+ Central Repository OSSRH
+ https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/
+
+ ossrh
+ Snapshot Repository OSSRH
+ https://s01.oss.sonatype.org/content/repositories/snapshots
+