Skip to content
Merged
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
3 changes: 2 additions & 1 deletion .claude/settings.local.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@
"Bash(./gradlew tasks:*)",
"Bash(./gradlew jreleaserConfig 2>&1 | tail -30)",
"Bash(find:*)",
"Bash(chmod:*)"
"Bash(chmod:*)",
"Bash(gh release:*)"
]
}
}
52 changes: 52 additions & 0 deletions .github/workflows/github-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
name: Github release

on:
workflow_dispatch:
workflow_call:
secrets:
FLAMINGOCK_JRELEASER_GITHUB_TOKEN:
required: true
FLAMINGOCK_JRELEASER_MAVENCENTRAL_USERNAME:
required: true
FLAMINGOCK_JRELEASER_MAVENCENTRAL_PASSWORD:
required: true
FLAMINGOCK_JRELEASER_GPG_PUBLIC_KEY:
required: true
FLAMINGOCK_JRELEASER_GPG_SECRET_KEY:
required: true
FLAMINGOCK_JRELEASER_GPG_PASSPHRASE:
required: true

jobs:
github-release:
runs-on: ubuntu-latest
steps:
- name: Checkout project
uses: actions/checkout@v2
with:
fetch-depth: 0

- name: Cache Gradle packages
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
~/.gradle/build-cache
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-

- name: Set up Java
uses: graalvm/setup-graalvm@v1
with:
java-version: '17'
distribution: 'graalvm-community'

- name: Publish Release to Github
run: ./gradlew jreleaserRelease --stacktrace --no-daemon
env:
JRELEASER_GITHUB_TOKEN: ${{ secrets.FLAMINGOCK_JRELEASER_GITHUB_TOKEN }}
JRELEASER_GPG_PUBLIC_KEY: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_PUBLIC_KEY }}
JRELEASER_GPG_SECRET_KEY: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_SECRET_KEY }}
JRELEASER_GPG_PASSPHRASE: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_PASSPHRASE }}
79 changes: 79 additions & 0 deletions .github/workflows/module-release-graalvm.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
name: Module release(graalVM)

on:
workflow_call:
inputs:
module:
description: "The module to be released (empty for mono-project)"
required: false
default: ""
type: string

secrets:
FLAMINGOCK_JRELEASER_GITHUB_TOKEN:
required: true
FLAMINGOCK_JRELEASER_MAVENCENTRAL_USERNAME:
required: true
FLAMINGOCK_JRELEASER_MAVENCENTRAL_PASSWORD:
required: true
FLAMINGOCK_JRELEASER_GPG_PUBLIC_KEY:
required: true
FLAMINGOCK_JRELEASER_GPG_SECRET_KEY:
required: true
FLAMINGOCK_JRELEASER_GPG_PASSPHRASE:
required: true

jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Checkout project
uses: actions/checkout@v2
with:
fetch-depth: 0

- name: Cache Gradle packages
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
~/.gradle/build-cache
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-

- name: Set up Java
uses: graalvm/setup-graalvm@v1
with:
java-version: '17'
distribution: 'graalvm-community'
github-token: ${{ secrets.FLAMINGOCK_JRELEASER_GITHUB_TOKEN }}

- name: Set up GPG
run: |
echo "$GPG_SECRET_KEY" > private.asc
gpg --import --batch private.asc
env:
GPG_SECRET_KEY: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_SECRET_KEY }}

- name: Prepare maven publish
run: |
if [ -n "${{ inputs.module }}" ]; then
./gradlew publish -Pmodule=${{ inputs.module }}
else
./gradlew publish
fi
env:
JRELEASER_MAVENCENTRAL_USERNAME: ${{ secrets.FLAMINGOCK_JRELEASER_MAVENCENTRAL_USERNAME }}
JRELEASER_MAVENCENTRAL_PASSWORD: ${{ secrets.FLAMINGOCK_JRELEASER_MAVENCENTRAL_PASSWORD }}

- name: Release to Maven Central portal
run: ./infra/module-release-with-retry.sh ${{ inputs.module }} 5 20
env:
JRELEASER_GITHUB_TOKEN: ${{ secrets.FLAMINGOCK_JRELEASER_GITHUB_TOKEN }}
JRELEASER_MAVENCENTRAL_USERNAME: ${{ secrets.FLAMINGOCK_JRELEASER_MAVENCENTRAL_USERNAME }}
JRELEASER_MAVENCENTRAL_PASSWORD: ${{ secrets.FLAMINGOCK_JRELEASER_MAVENCENTRAL_PASSWORD }}
JRELEASER_GPG_PUBLIC_KEY: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_PUBLIC_KEY }}
JRELEASER_GPG_SECRET_KEY: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_SECRET_KEY }}
JRELEASER_GPG_PASSPHRASE: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_PASSPHRASE }}
89 changes: 20 additions & 69 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,72 +34,23 @@ jobs:
run: ./gradlew clean build

release:
needs: [ build ]
runs-on: ubuntu-latest
steps:
- name: Checkout project
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Cache Gradle packages
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
~/.gradle/build-cache
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-

- name: Set up Java
uses: graalvm/setup-graalvm@v1
with:
java-version: '17'
distribution: 'graalvm-community'
github-token: ${{ secrets.FLAMINGOCK_JRELEASER_GITHUB_TOKEN }}

- name: Set up GPG
run: |
echo "$GPG_SECRET_KEY" > private.asc
gpg --import --batch private.asc
env:
GPG_SECRET_KEY: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_SECRET_KEY }}

- name: Prepare maven publish
run: ./gradlew publish
env:
JRELEASER_MAVENCENTRAL_USERNAME: ${{ secrets.FLAMINGOCK_JRELEASER_MAVENCENTRAL_USERNAME }}
JRELEASER_MAVENCENTRAL_PASSWORD: ${{ secrets.FLAMINGOCK_JRELEASER_MAVENCENTRAL_PASSWORD }}

- name: Deploy to Maven Central portal
run: ./infra/release-with-retry.sh 900 100 20
env:
JRELEASER_MAVENCENTRAL_USERNAME: ${{ secrets.FLAMINGOCK_JRELEASER_MAVENCENTRAL_USERNAME }}
JRELEASER_MAVENCENTRAL_PASSWORD: ${{ secrets.FLAMINGOCK_JRELEASER_MAVENCENTRAL_PASSWORD }}
JRELEASER_GPG_PUBLIC_KEY: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_PUBLIC_KEY }}
JRELEASER_GPG_SECRET_KEY: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_SECRET_KEY }}
JRELEASER_GPG_PASSPHRASE: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_PASSPHRASE }}

- name: Generate changelog
run: ./gradlew jreleaserChangelog --no-daemon
env:
JRELEASER_GITHUB_TOKEN: ${{ secrets.FLAMINGOCK_JRELEASER_GITHUB_TOKEN }}
JRELEASER_MAVENCENTRAL_USERNAME: ${{ secrets.FLAMINGOCK_JRELEASER_MAVENCENTRAL_USERNAME }}
JRELEASER_MAVENCENTRAL_PASSWORD: ${{ secrets.FLAMINGOCK_JRELEASER_MAVENCENTRAL_PASSWORD }}
JRELEASER_GPG_PUBLIC_KEY: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_PUBLIC_KEY }}
JRELEASER_GPG_SECRET_KEY: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_SECRET_KEY }}
JRELEASER_GPG_PASSPHRASE: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_PASSPHRASE }}

- name: Create GitHub release
run: |
VERSION=$(grep '^version' build.gradle.kts | head -1 | sed 's/.*"\(.*\)".*/\1/')
PRERELEASE_FLAG=$(echo "$VERSION" | grep -qiE '(beta|alpha|rc|snapshot)' && echo "--prerelease" || echo "")
gh release create "v${VERSION}" \
--title "Release v${VERSION}" \
--notes-file build/jreleaser/release/CHANGELOG.md \
$PRERELEASE_FLAG \
--repo "${{ github.repository }}"
env:
GH_TOKEN: ${{ secrets.FLAMINGOCK_JRELEASER_GITHUB_TOKEN }}
needs: [build]
uses: ./.github/workflows/module-release-graalvm.yml
secrets:
FLAMINGOCK_JRELEASER_GITHUB_TOKEN: ${{ secrets.FLAMINGOCK_JRELEASER_GITHUB_TOKEN }}
FLAMINGOCK_JRELEASER_MAVENCENTRAL_USERNAME: ${{ secrets.FLAMINGOCK_JRELEASER_MAVENCENTRAL_USERNAME }}
FLAMINGOCK_JRELEASER_MAVENCENTRAL_PASSWORD: ${{ secrets.FLAMINGOCK_JRELEASER_MAVENCENTRAL_PASSWORD }}
FLAMINGOCK_JRELEASER_GPG_PUBLIC_KEY: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_PUBLIC_KEY }}
FLAMINGOCK_JRELEASER_GPG_SECRET_KEY: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_SECRET_KEY }}
FLAMINGOCK_JRELEASER_GPG_PASSPHRASE: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_PASSPHRASE }}

github-release:
needs: [release]
uses: ./.github/workflows/github-release.yml
secrets:
FLAMINGOCK_JRELEASER_GITHUB_TOKEN: ${{ secrets.FLAMINGOCK_JRELEASER_GITHUB_TOKEN }}
FLAMINGOCK_JRELEASER_MAVENCENTRAL_USERNAME: ${{ secrets.FLAMINGOCK_JRELEASER_MAVENCENTRAL_USERNAME }}
FLAMINGOCK_JRELEASER_MAVENCENTRAL_PASSWORD: ${{ secrets.FLAMINGOCK_JRELEASER_MAVENCENTRAL_PASSWORD }}
FLAMINGOCK_JRELEASER_GPG_PUBLIC_KEY: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_PUBLIC_KEY }}
FLAMINGOCK_JRELEASER_GPG_SECRET_KEY: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_SECRET_KEY }}
FLAMINGOCK_JRELEASER_GPG_PASSPHRASE: ${{ secrets.FLAMINGOCK_JRELEASER_GPG_PASSPHRASE }}
112 changes: 80 additions & 32 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,20 @@ plugins {


group = "io.flamingock"
version = "1.0.0-beta.7"
version = "1.0.0-beta.10"

val flamingockVersion = "1.2.0-beta.1"
val flamingockVersion = "1.2.0-beta.2"//only for test
val templateApiVersion = "1.3.1"
val coreApiVersion = "1.3.0"

repositories {
mavenLocal()
mavenCentral()
}

dependencies {
implementation("io.flamingock:flamingock-core-api:${flamingockVersion}")//we need nullable
implementation("io.flamingock:flamingock-template-api:$flamingockVersion")
implementation("io.flamingock:flamingock-core-api:${coreApiVersion}") //we need nullable, NonLockGuarded, etc.
implementation("io.flamingock:flamingock-template-api:$templateApiVersion")
implementation("org.slf4j:slf4j-api:1.7.36")
compileOnly("org.mongodb:mongodb-driver-sync:4.0.0")

Expand Down Expand Up @@ -162,42 +164,88 @@ afterEvaluate {
}
}

// Part 1: Release management config — always present (used by jreleaserRelease)
jreleaser {
project {
inceptionYear = "2024"
author("dieppa")
author("osantana")
author("bercianor")
author("dfrigolet")
description = "MongoDB change templates for document database operations using Flamingock"
inceptionYear.set("2024")
authors.set(setOf("dieppa", "osantana", "bercianor", "dfrigolet"))
description.set("MongoDB change templates for document database operations using Flamingock")
}
signing {
active = org.jreleaser.model.Active.ALWAYS
armored = true
}
deploy {
maven {
mavenCentral {
create("sonatype") {
active = org.jreleaser.model.Active.ALWAYS
url = "https://central.sonatype.com/api/v1/publisher"
stagingRepository("build/staging-deploy")
applyMavenCentralRules = true
maxRetries = 90
retryDelay = 20
gitRootSearch.set(true)
release {
github {
update {
enabled.set(true)
sections.set(setOf(org.jreleaser.model.UpdateSection.TITLE, org.jreleaser.model.UpdateSection.BODY, org.jreleaser.model.UpdateSection.ASSETS))
}
prerelease {
pattern.set("^(0\\..*|.*-(beta\\.?\\d*|snapshot\\.?\\d*|alpha\\.?\\d*|rc\\.?\\d*|RC\\.?\\d*)\$)")
}
changelog {
enabled.set(true)
formatted.set(org.jreleaser.model.Active.ALWAYS)
sort.set(org.jreleaser.model.Changelog.Sort.DESC)
links.set(true)
preset.set("conventional-commits")
releaseName.set("Release {{tagName}}")
content.set("""
## Changelog
{{changelogChanges}}
{{changelogContributors}}
""".trimIndent())
categoryTitleFormat.set("### {{categoryTitle}}")
format.set(
"""|- {{commitShortHash}}
| {{#commitIsConventional}}
|{{#conventionalCommitIsBreakingChange}}:rotating_light: {{/conventionalCommitIsBreakingChange}}
|{{#conventionalCommitScope}}**{{conventionalCommitScope}}**: {{/conventionalCommitScope}}
|{{conventionalCommitDescription}}
|{{#conventionalCommitBreakingChangeContent}} - *{{conventionalCommitBreakingChangeContent}}*{{/conventionalCommitBreakingChangeContent}}
|{{/commitIsConventional}}
|{{^commitIsConventional}}{{commitTitle}}{{/commitIsConventional}}
|{{#commitHasIssues}}, closes{{#commitIssues}} {{issue}}{{/commitIssues}}{{/commitHasIssues}}
|{{#contributorName}} ({{contributorName}}){{/contributorName}}
|""".trimMargin().replace("\n", "").replace("\r", "")
)
contributors {
enabled.set(true)
format.set("- {{contributorName}} ({{contributorUsernameAsLink}})")
}
}
}
}
release {
github {
overwrite = true
changelog {
formatted = org.jreleaser.model.Active.ALWAYS
preset = "conventional-commits"
}

// Part 2: Deploy config — only when deploying to Maven Central (not needed for jreleaserRelease)
val isReleasing = gradle.startParameter.taskNames.any {
it in listOf("jreleaserFullRelease", "jreleaserDeploy", "publish")
}

if (isReleasing) {
jreleaser {
signing {
active.set(org.jreleaser.model.Active.ALWAYS)
armored = true
enabled = true
}
release {
github {
skipRelease.set(true)
skipTag.set(true)
}
prerelease {
pattern = ".*(?:beta|alpha|rc|snapshot).*"
}
deploy {
maven {
mavenCentral {
create("sonatype") {
active.set(org.jreleaser.model.Active.ALWAYS)
applyMavenCentralRules.set(true)
url.set("https://central.sonatype.com/api/v1/publisher")
stagingRepository("build/staging-deploy")
maxRetries.set(90)
retryDelay.set(20)
}
}
}
}
}
Expand Down
Loading
Loading