Skip to content

Publish package to Maven Central and Gradle Plugin Portal #90

Publish package to Maven Central and Gradle Plugin Portal

Publish package to Maven Central and Gradle Plugin Portal #90

Workflow file for this run

name: Publish package to Maven Central and Gradle Plugin Portal
on:
workflow_dispatch:
inputs:
version:
description: 'Release version'
default: ''
jobs:
publish:
runs-on: ${{ matrix.operating-system }}
permissions:
packages: write
contents: write
pull-requests: write
strategy:
fail-fast: false
matrix:
operating-system: [ ubuntu-latest ]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
if: runner.os != 'Linux'
with:
distribution: 'corretto'
java-version: '25'
cache: 'gradle'
- uses: cachix/install-nix-action@v31
if: runner.os == 'Linux'
with:
github_access_token: ${{ secrets.GITHUB_TOKEN }}
- name: Read and update version
shell: bash
run: |
if [[ -n "${{ github.event.inputs.version }}" ]]; then
BASE_VERSION="${{ github.event.inputs.version }}"
else
BASE_VERSION=$(grep "^version=" gradle.properties | cut -d'=' -f2)
fi
echo "VERSION=${BASE_VERSION}" >> $GITHUB_ENV
echo "Version: $BASE_VERSION"
- name: Upload docker image
if: runner.os == 'Linux'
run: |
nix build .#dockerImage
docker load < result
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
IMAGE_ID=ghcr.io/${{ github.repository_owner }}/fray
echo IMAGE_ID=$IMAGE_ID
echo VERSION=$VERSION
docker images
docker tag fray:latest $IMAGE_ID:$VERSION
docker push $IMAGE_ID:$VERSION
- name: Start develop enviroment
run: nix develop
- name: Create jreleaser work directory
run: mkdir -p ./build/jreleaser
- name: Create stage deploy (MacOs)
if: runner.os == 'macOS'
run: ./gradlew :jvmti:publish -Pversion=$VERSION
- name: Create stage deploy (Windows)
if: runner.os == 'Windows'
shell: bash
run: ./gradlew :jvmti:publish -Pversion=$VERSION
- name: Create stage deploy (Linux)
if: runner.os == 'Linux'
run: ./gradlew publish -Pversion=$VERSION
- name: Publish to Maven Central
continue-on-error: true
shell: bash
run: ./gradlew jreleaserFullRelease -Pversion=$VERSION
env:
JRELEASER_MAVENCENTRAL_USERNAME: ${{secrets.JRELEASER_MAVENCENTRAL_USERNAME }}
JRELEASER_MAVENCENTRAL_PASSWORD: ${{secrets.JRELEASER_MAVENCENTRAL_PASSWORD}}
JRELEASER_GPG_PASSPHRASE: ${{secrets.JRELEASER_GPG_PASSPHRASE}}
JRELEASER_GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
JRELEASER_GPG_PUBLIC_KEY: ${{secrets.JRELEASER_GPG_PUBLIC_KEY}}
JRELEASER_GPG_SECRET_KEY: ${{secrets.JRELEASER_GPG_SECRET_KEY}}
- name: Publish to Gradle Plugins Portal
if: runner.os == 'Linux'
run: ./gradlew publishPlugins -Pversion=$VERSION
env:
GRADLE_PUBLISH_KEY: ${{secrets.GRADLE_PUBLISH_KEY}}
GRADLE_PUBLISH_SECRET: ${{secrets.GRADLE_PUBLISH_SECRET}}
- name: Publish to Intellij Marketplace
if: runner.os == 'Linux'
run: ./gradlew publishPlugin -Pversion=$VERSION
env:
ORG_GRADLE_PROJECT_intellijPlatformPublishingToken: ${{secrets.ORG_GRADLE_PROJECT_intellijPlatformPublishingToken}}
- name: Update versions in the project
if: runner.os == 'Linux'
run: |
LATEST_VERSION=${{ env.VERSION }}
IFS='.' read -r MAJOR MINOR PATCH <<< "$LATEST_VERSION"
NEW_PATCH=$((PATCH + 1))
NEW_VERSION="$MAJOR.$MINOR.$NEW_PATCH-SNAPSHOT"
sed -i "s/id(\"org.pastalab.fray.gradle\") version \".*\"/id(\"org.pastalab.fray.gradle\") version \"$LATEST_VERSION\"/" README.md
sed -i "s|<version>.*</version>|<version>$LATEST_VERSION</version>|" README.md
sed -i "s/id(\"org.pastalab.fray.gradle\") version \".*\"/id(\"org.pastalab.fray.gradle\") version \"$LATEST_VERSION\"/" docs/usage.md
sed -i "s|\(FROM ghcr\.io/cmu-pasta/fray:\)[^ ]*|\1$LATEST_VERSION|" docs/usage.md
sed -i "s|fray-core-[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*-SNAPSHOT-all\.jar|fray-core-$LATEST_VERSION-SNAPSHOT-all.jar|g" docs/usage.md
sed -i "s/^version=.*/version=$NEW_VERSION/" gradle.properties
sed -i "s/\\(\\s*version\\s*=\\s*\\)\"[0-9][0-9]*\\.[0-9][0-9]*\\.[0-9][0-9]*.*\";/\\1\"$NEW_VERSION\";/" flake.nix
- name: Release
uses: softprops/action-gh-release@v2
if: runner.os == 'Linux'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: "v${{ env.VERSION }}"
generate_release_notes: true
make_latest: true
- name: Create Pull Request
uses: peter-evans/create-pull-request@v4
if: runner.os == 'Linux'
with:
token: ${{ secrets.GITHUB_TOKEN }} # You need to create your own token with pull request rights
commit-message: update readme
title: Update readme
body: Update readme to reflect release changes
branch: update-readme
base: main