Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions .github/workflows/publish-api.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: Publish API

on:
push:
tags:
- "api-v*"

permissions:
contents: read

jobs:
publish:
name: Publish liquidjava-api to Maven Central
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Ensure tag is on main
run: |
git fetch origin main
TAG_COMMIT="$(git rev-list -n 1 "$GITHUB_REF_NAME")"
git merge-base --is-ancestor "$TAG_COMMIT" origin/main

- name: Set up JDK 20
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "20"
cache: maven
server-id: central
server-username: CENTRAL_USERNAME
server-password: CENTRAL_PASSWORD
gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }}
gpg-passphrase: GPG_PASSPHRASE

- name: Publish API
run: ./mvnw -f liquidjava-api/pom.xml -B --fail-fast -Dgpg.skip=false -Dmaven.deploy.skip=false clean deploy
env:
CENTRAL_USERNAME: ${{ secrets.CENTRAL_USERNAME }}
CENTRAL_PASSWORD: ${{ secrets.CENTRAL_PASSWORD }}
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
45 changes: 45 additions & 0 deletions .github/workflows/publish-verifier.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: Publish verifier

on:
push:
tags:
- "v*"

permissions:
contents: read

jobs:
publish:
name: Publish liquidjava-verifier to Maven Central
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Ensure tag is on main
run: |
git fetch origin main
TAG_COMMIT="$(git rev-list -n 1 "$GITHUB_REF_NAME")"
git merge-base --is-ancestor "$TAG_COMMIT" origin/main

- name: Set up JDK 20
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "20"
cache: maven
server-id: central
server-username: CENTRAL_USERNAME
server-password: CENTRAL_PASSWORD
gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }}
gpg-passphrase: GPG_PASSPHRASE

- name: Publish verifier
run: ./mvnw -f liquidjava-verifier/pom.xml -B --fail-fast -Dgpg.skip=false -Dmaven.deploy.skip=false clean deploy
env:
CENTRAL_USERNAME: ${{ secrets.CENTRAL_USERNAME }}
CENTRAL_PASSWORD: ${{ secrets.CENTRAL_PASSWORD }}
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
3 changes: 2 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{
"java.configuration.updateBuildConfiguration": "automatic"
"java.configuration.updateBuildConfiguration": "automatic",
"java.autobuild.enabled": false
}
5 changes: 3 additions & 2 deletions liquidjava-api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,8 @@
<configuration>
<publishingServerId>central</publishingServerId>
<skipPublishing>${maven.deploy.skip}</skipPublishing>
<!-- <autoPublish>true</autoPublish> -->
<autoPublish>true</autoPublish>
<waitUntil>published</waitUntil>
</configuration>
</plugin>
</plugins>
Expand All @@ -163,4 +164,4 @@
<gpg.skip>true</gpg.skip>
<maven.deploy.skip>true</maven.deploy.skip>
</properties>
</project>
</project>
3 changes: 2 additions & 1 deletion liquidjava-verifier/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,8 @@
<configuration>
<publishingServerId>central</publishingServerId>
<skipPublishing>${maven.deploy.skip}</skipPublishing>
<!-- <autoPublish>true</autoPublish> -->
<autoPublish>true</autoPublish>
<waitUntil>published</waitUntil>
</configuration>
</plugin>
</plugins>
Expand Down
61 changes: 54 additions & 7 deletions release.sh
Original file line number Diff line number Diff line change
@@ -1,20 +1,67 @@
#!/bin/bash
#!/usr/bin/env bash

if [ -z "$1" ]; then
echo "Usage: $0 <api|verifier>"
set -euo pipefail

if [ $# -ne 2 ]; then
echo "Usage: $0 <api|verifier> <version>"
exit 1
fi

MODULE=$1
VERSION=$2

if [ "$MODULE" != "api" ] && [ "$MODULE" != "verifier" ]; then
echo "Invalid module: $MODULE"
echo "Usage: $0 <api|verifier>"
echo "Usage: $0 <api|verifier> <version>"
exit 1
fi

if ! [[ "$VERSION" =~ ^[0-9]+(\.[0-9]+){1,2}(-[A-Za-z0-9.-]+)?$ ]]; then
echo "Invalid version: $VERSION"
echo "Expected format: 1.2.3"
exit 1
fi

MODULE_DIR="liquidjava-$MODULE"
POM="$MODULE_DIR/pom.xml"

if [ "$MODULE" = "api" ]; then
TAG="api-v$VERSION"
else
TAG="v$VERSION"
fi

CURRENT_BRANCH=$(git branch --show-current)
if [ "$CURRENT_BRANCH" != "main" ]; then
echo "Release must be run from main. Current branch: $CURRENT_BRANCH"
exit 1
fi

if [ -n "$(git status --porcelain)" ]; then
echo "Worktree must be clean before releasing."
git status --short
exit 1
fi

if git rev-parse "$TAG" >/dev/null 2>&1; then
echo "Tag already exists: $TAG"
exit 1
fi

perl -0pi -e "s#(<artifactId>$MODULE_DIR</artifactId>\\s*<version>)[^<]+(</version>)#\${1}$VERSION\${2}#" "$POM"

if git diff --quiet -- "$POM"; then
echo "$POM is already at version $VERSION"
exit 1
fi

./mvnw -f "$POM" -B --fail-fast -Dgpg.skip=true -Dmaven.deploy.skip=true clean verify

git add "$POM"
git commit -m "Release $MODULE_DIR $VERSION"
git tag "$TAG"

git push origin main
git push origin "$TAG"

cd "$MODULE_DIR"
mvn -Dgpg.skip=false -Dmaven.deploy.skip=false clean deploy
cd ..
echo "Created and pushed $TAG. GitHub Actions will publish $MODULE_DIR to Maven Central."
Loading