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
34 changes: 14 additions & 20 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ jobs:
release_version=$(grep "^ext.tempto_version" build.gradle | cut -d"'" -f2 | sed 's/-SNAPSHOT//')
echo "release_version=$release_version"
echo "release_version=$release_version" >> $GITHUB_ENV
echo "next_release_msg=Update build.gradle to next development version" >> $GITHUB_ENV

- name: Get last release version
id: advance_version
Expand All @@ -76,26 +75,27 @@ jobs:
echo "last_version=$last_version"
echo "next_version=$next_version"

- name: Generate CHANGELOG.md
id: generate_changelog
run: |
# Get commits between the latest version and HEAD, excluding changelog commits
changelog=$(git log $last_version..HEAD --pretty=format:"- [%h](https://github.com/${{ github.repository }}/commit/%H) %s" | grep -v "${{ env.next_release_msg }}")
echo "Generating CHANGELOG.md"
echo -e "## Changelog for ${{ env.release_version }}\n\n$changelog\n" > CHANGELOG.md
cat CHANGELOG.md

- name: Update release version and commit
run: |
# Update the version in build.gradle
sed -i "s/ext.tempto_version = '.*'/ext.tempto_version = '${{ env.release_version }}'/" build.gradle
git add CHANGELOG.md build.gradle
git commit -m "Update CHANGELOG.md and build.gradle for version ${{ env.release_version }}"
git add build.gradle
git commit -m "[release-action] release version ${{ env.release_version }}"

- name: Add release tag
run: |
git checkout -b release-${{ env.release_version }}
git tag -a ${{ env.release_version }} -m "Release ${{ env.release_version }}"

- name: Update release version in build.gradle
run: |
git checkout master
# Update the version in build.gradle
sed -i "s/ext.tempto_version = '.*'/ext.tempto_version = '${{ env.next_version}}'/" build.gradle
git add build.gradle
git commit -m "[release-action] prepare for next development iteration"
git checkout release-${{ env.release_version }}

- name: Set up GPG key
run: |
echo "${{ secrets.GPG_SECRET }}" > ${{ env.GPG_KEY_FILE }}
Expand All @@ -119,17 +119,11 @@ jobs:
cat gradle.properties
export NEXUS_USERNAME="${{ secrets.NEXUS_USERNAME }}"
export NEXUS_PASSWORD="${{ secrets.NEXUS_PASSWORD }}"
./gradlew sign publish
./gradlew sign publish publishToMavenCentral
env:
GPG_TTY: $(tty)

- name: Update release version in build.gradle
run: |
# Update the version in build.gradle
sed -i "s/ext.tempto_version = '.*'/ext.tempto_version = '${{ env.next_version}}'/" build.gradle
git add build.gradle
git commit -m "${{ env.next_release_msg }}"

- name: Push changes and tags
run: |
git checkout master
git push origin master --tags
44 changes: 42 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -197,10 +197,10 @@ configure(subprojects - expected_result_generator - tempto_examples) {
}
}
}

repositories {
maven {
url = uri('https://oss.sonatype.org/service/local/staging/deploy/maven2/')
name = 'ossrh-staging-api'
url = 'https://ossrh-staging-api.central.sonatype.com/service/local/staging/deploy/maven2/'
credentials {
username = System.getenv('NEXUS_USERNAME')
password = System.getenv('NEXUS_PASSWORD')
Expand All @@ -210,3 +210,43 @@ configure(subprojects - expected_result_generator - tempto_examples) {
}
}

tasks.register('publishToMavenCentral') {
group = 'publishing'
description = 'Publishes all Maven publications produced by this project to Maven Central.'
dependsOn subprojects.collect { it.tasks.matching { it.name == 'publish' } }.flatten()
doLast {
def username = System.getenv('NEXUS_USERNAME')
def password = System.getenv('NEXUS_PASSWORD')

if (!username || !password) {
throw new org.gradle.api.GradleException(
"NEXUS_USERNAME and NEXUS_PASSWORD environment variables must be set to publish to Maven Central."
)
}

def namespace = System.getenv('NEXUS_NAMESPACE') ?: "io.prestodb"
def credentials = "${username}:${password}"
def token = credentials.bytes.encodeBase64().toString()

def url = "https://ossrh-staging-api.central.sonatype.com/manual/upload/defaultRepository/${namespace}?publishing_type=automatic"
def connection = new URL(url).openConnection()
connection.connectTimeout = 30_000
connection.readTimeout = 30_000
connection.setRequestMethod('POST')
connection.setRequestProperty('Authorization', "Bearer ${token}")
Comment thread
sourcery-ai[bot] marked this conversation as resolved.
connection.setRequestProperty('Content-Type', 'application/json')
connection.setRequestProperty('Accept', 'application/json')
connection.setDoOutput(true)
Comment thread
sourcery-ai[bot] marked this conversation as resolved.

def responseCode = connection.getResponseCode()
def responseBody = responseCode < 400 ?
connection.getInputStream().text :
connection.getErrorStream().text

if (responseCode < 400) {
logger.lifecycle("Successfully triggered automatic Maven Central publishing: ${responseBody}")
} else {
throw new org.gradle.api.GradleException("Failed to publish to Maven Central. HTTP ${responseCode}: ${responseBody}")
}
}
}
Loading