diff --git a/.github/workflows/release-to-maven-central.yml b/.github/workflows/release-to-maven-central.yml
new file mode 100644
index 000000000..c0f5a9724
--- /dev/null
+++ b/.github/workflows/release-to-maven-central.yml
@@ -0,0 +1,52 @@
+name: Publish release to Maven Central
+
+on:
+ push:
+ tags:
+ - 'v?[0-9]+.[0-9]+.[0-9]+*' # Trigger on tags like v1.0.0, 1.2.3, v1.2.3.Alpha1 etc.
+
+jobs:
+ publish:
+ # Only run this job for the main repository, not for forks
+ if: github.repository == 'a2aproject/a2a-java'
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Set up JDK 17
+ uses: actions/setup-java@v4
+ with:
+ java-version: '17'
+ distribution: 'temurin'
+ cache: maven
+
+ # Use secrets to import GPG key
+ - name: Import GPG key
+ uses: crazy-max/ghaction-import-gpg@v6
+ with:
+ gpg_private_key: ${{ secrets.GPG_SIGNING_KEY }}
+ passphrase: ${{ secrets.GPG_SIGNING_PASSPHRASE }}
+
+ # Create settings.xml for Maven since it needs the 'central-a2asdk-temp' server.
+ # Populate wqith username and password from secrets
+ - name: Create settings.xml
+ run: |
+ mkdir -p ~/.m2
+ echo "central-a2asdk-temp${{ secrets.CENTRAL_TOKEN_USERNAME }}${{ secrets.CENTRAL_TOKEN_PASSWORD }}" > ~/.m2/settings.xml
+
+ # Deploy to Maven Central
+ # -s uses the settings file we created.
+ - name: Publish to Maven Central
+ run: >
+ mvn -B deploy
+ -s ~/.m2/settings.xml
+ -P release
+ -DskipTests
+ -Drelease.auto.publish=true
+ env:
+ # GPG passphrase is set as an environment variable for the gpg plugin to use
+ GPG_PASSPHRASE: ${{ secrets.GPG_SIGNING_PASSPHRASE }}
diff --git a/pom.xml b/pom.xml
index aa7122fa5..48564f77a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -62,6 +62,9 @@
true
+
+
+ false
@@ -206,6 +209,7 @@
central-a2asdk-temp
+ ${release.auto.publish}