|
1 |
| -# This workflow will build a package using Maven and then publish it to GitHub packages when a release is created |
2 |
| -# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#apache-maven-with-a-settings-path |
3 |
| - |
4 |
| -name: Maven Publish |
| 1 | +name: Publish to Maven Central |
5 | 2 |
|
6 | 3 | on:
|
7 |
| - push: |
8 |
| - branches: [ "maven-publish-**" ] |
| 4 | + release: |
| 5 | + types: [published] |
9 | 6 | workflow_dispatch:
|
| 7 | + inputs: |
| 8 | + version: |
| 9 | + description: 'Version to publish (e.g., 0.4.1). Leave empty to use current P version from pom.xml' |
| 10 | + required: false |
| 11 | + type: string |
10 | 12 |
|
11 | 13 | jobs:
|
12 |
| - Maven-Publish-Ubuntu: |
| 14 | + publish: |
13 | 15 | runs-on: ubuntu-latest
|
| 16 | + |
14 | 17 | steps:
|
15 |
| - - uses: actions/checkout@v3 |
16 |
| - - name: Set up Java for publishing to Maven Central Repository |
17 |
| - uses: actions/setup-java@v3 |
18 |
| - with: |
19 |
| - distribution: 'temurin' |
20 |
| - java-version: '11' |
21 |
| - server-id: ossrh |
22 |
| - server-username: MAVEN_USERNAME |
23 |
| - server-password: MAVEN_PASSWORD |
24 |
| - gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} # Value of the GPG private key to import |
25 |
| - gpg-passphrase: MAVEN_GPG_PASSPHRASE # env variable for GPG private key passphrase |
26 |
| - - name: Publish to the Maven Central Repository |
27 |
| - working-directory: Src/PRuntimes/PSymRuntime |
28 |
| - run: mvn --batch-mode deploy -P release -Dmaven.test.skip |
29 |
| - env: |
30 |
| - MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} |
31 |
| - MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} |
32 |
| - MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} |
33 |
| - |
| 18 | + - name: Checkout code |
| 19 | + uses: actions/checkout@v4 |
| 20 | + |
| 21 | + - name: Set up JDK 17 |
| 22 | + uses: actions/setup-java@v4 |
| 23 | + with: |
| 24 | + java-version: '17' |
| 25 | + distribution: 'temurin' |
| 26 | + |
| 27 | + - name: Cache Maven dependencies |
| 28 | + uses: actions/cache@v3 |
| 29 | + with: |
| 30 | + path: ~/.m2 |
| 31 | + key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} |
| 32 | + restore-keys: ${{ runner.os }}-m2 |
| 33 | + |
| 34 | + - name: Import GPG key |
| 35 | + uses: crazy-max/ghaction-import-gpg@v6 |
| 36 | + with: |
| 37 | + gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} |
| 38 | + passphrase: ${{ secrets.GPG_PASSPHRASE }} |
| 39 | + |
| 40 | + - name: Extract version from release |
| 41 | + id: get_version |
| 42 | + run: | |
| 43 | + if [ "${{ github.event_name }}" = "release" ]; then |
| 44 | + VERSION=${{ github.event.release.tag_name }} |
| 45 | + # Remove 'v' prefix if present |
| 46 | + VERSION=${VERSION#v} |
| 47 | + else |
| 48 | + VERSION=${{ github.event.inputs.version }} |
| 49 | + fi |
| 50 | + echo "VERSION=$VERSION" >> $GITHUB_OUTPUT |
| 51 | + echo "Publishing version: $VERSION" |
| 52 | + |
| 53 | + - name: Update PEx version |
| 54 | + run: | |
| 55 | + cd Src/PEx |
| 56 | + # Update the revision property in pom.xml |
| 57 | + sed -i "s/<revision>.*<\/revision>/<revision>${{ steps.get_version.outputs.VERSION }}<\/revision>/" pom.xml |
| 58 | + echo "Updated PEx version to ${{ steps.get_version.outputs.VERSION }}" |
| 59 | + |
| 60 | + - name: Create Maven settings.xml |
| 61 | + run: | |
| 62 | + mkdir -p ~/.m2 |
| 63 | + cat > ~/.m2/settings.xml << 'EOF' |
| 64 | + <?xml version="1.0" encoding="UTF-8"?> |
| 65 | + <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" |
| 66 | + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| 67 | + xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 |
| 68 | + http://maven.apache.org/xsd/settings-1.0.0.xsd"> |
| 69 | + <servers> |
| 70 | + <server> |
| 71 | + <id>central</id> |
| 72 | + <username>${{ secrets.MAVEN_USERNAME }}</username> |
| 73 | + <password>${{ secrets.MAVEN_PASSWORD }}</password> |
| 74 | + </server> |
| 75 | + <server> |
| 76 | + <id>gpg.passphrase</id> |
| 77 | + <passphrase>${{ secrets.GPG_PASSPHRASE }}</passphrase> |
| 78 | + </server> |
| 79 | + </servers> |
| 80 | + </settings> |
| 81 | + EOF |
| 82 | + |
| 83 | + - name: Publish to Maven Central |
| 84 | + run: | |
| 85 | + cd Src/PEx |
| 86 | + mvn clean deploy -P release -DskipTests |
| 87 | + env: |
| 88 | + MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} |
| 89 | + |
| 90 | + - name: Create deployment summary |
| 91 | + run: | |
| 92 | + echo "## 🚀 Maven Central Deployment" >> $GITHUB_STEP_SUMMARY |
| 93 | + echo "Successfully published **PEx ${{ steps.get_version.outputs.VERSION }}** to Maven Central!" >> $GITHUB_STEP_SUMMARY |
| 94 | + echo "" >> $GITHUB_STEP_SUMMARY |
| 95 | + echo "### 📦 Artifact Details" >> $GITHUB_STEP_SUMMARY |
| 96 | + echo "- **Group ID:** io.github.p-org" >> $GITHUB_STEP_SUMMARY |
| 97 | + echo "- **Artifact ID:** pex" >> $GITHUB_STEP_SUMMARY |
| 98 | + echo "- **Version:** ${{ steps.get_version.outputs.VERSION }}" >> $GITHUB_STEP_SUMMARY |
| 99 | + echo "" >> $GITHUB_STEP_SUMMARY |
| 100 | + echo "### 📋 Maven Dependency" >> $GITHUB_STEP_SUMMARY |
| 101 | + echo '```xml' >> $GITHUB_STEP_SUMMARY |
| 102 | + echo '<dependency>' >> $GITHUB_STEP_SUMMARY |
| 103 | + echo ' <groupId>io.github.p-org</groupId>' >> $GITHUB_STEP_SUMMARY |
| 104 | + echo ' <artifactId>pex</artifactId>' >> $GITHUB_STEP_SUMMARY |
| 105 | + echo " <version>${{ steps.get_version.outputs.VERSION }}</version>" >> $GITHUB_STEP_SUMMARY |
| 106 | + echo '</dependency>' >> $GITHUB_STEP_SUMMARY |
| 107 | + echo '```' >> $GITHUB_STEP_SUMMARY |
| 108 | + echo "" >> $GITHUB_STEP_SUMMARY |
| 109 | + echo "🔗 [View on Maven Central](https://central.sonatype.com/artifact/io.github.p-org/pex/${{ steps.get_version.outputs.VERSION }})" >> $GITHUB_STEP_SUMMARY |
0 commit comments