Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add release automation to Airbase #419

Merged
merged 2 commits into from
Aug 5, 2024
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
17 changes: 17 additions & 0 deletions .github/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
changelog:
exclude:
labels:
- ignore-for-release
categories:
- title: Breaking Changes 🛠
labels:
- breaking
- title: Improvements 🎉
labels:
- improvement
- title: Dependency updates 📦
labels:
- dependency
- title: Others
labels:
- "*"
115 changes: 115 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
name: Release new version

on:
workflow_dispatch:
inputs:
push:
description: 'Push artifacts to Central and commits to the repository'
required: true
default: true
type: 'boolean'

jobs:
release:
runs-on: ubuntu-latest
permissions:
contents: write
packages: write
env:
STAGED_REPOSITORY: target/checkout/target/staging-deploy

steps:
- name: Check if release is running from master
run: |
if [ "${GITHUB_REF}" != "refs/heads/master" ]; then
echo "Release is only allowed from master branch"
exit 1
fi

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

- name: Install java
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
gpg-private-key: ${{ secrets.JRELEASER_GPG_SECRET_KEY }}
gpg-passphrase: MAVEN_GPG_PASSPHRASE
cache: 'maven'

- name: Configure git
run: |
git config user.name "Airlift Release"
git config user.email "[email protected]"

- name: Lock branch before release
uses: github/lock@v2
id: release-lock
with:
mode: 'lock'

- name: Run mvn release:prepare
env:
MAVEN_GPG_PASSPHRASE: ${{ secrets.JRELEASER_GPG_PASSPHRASE }}
run: |
./mvnw -B release:prepare -Poss-release,oss-stage

- name: Determine release version
run: |
export VERSION=$(grep 'scm.tag=' release.properties | cut -d'=' -f2)
echo "VERSION=${VERSION}" >> $GITHUB_ENV
echo "Releasing version: ${VERSION}"

- name: Run mvn release:perform to local staging
env:
MAVEN_GPG_PASSPHRASE: ${{ secrets.JRELEASER_GPG_PASSPHRASE }}
run: |
./mvnw -B release:perform -Poss-release,oss-stage

- name: Display git status and history
run: |
git status
git log --oneline -n 2

- name: List locally staged artifacts
run: |
find ${{ env.STAGED_REPOSITORY }} -type f

- name: Run JReleaser
uses: jreleaser/release-action@v2
env:
JRELEASER_PROJECT_VERSION: ${{ env.VERSION }}
JRELEASER_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
JRELEASER_GPG_PUBLIC_KEY: ${{ vars.JRELEASER_GPG_PUBLIC_KEY }}
JRELEASER_GPG_SECRET_KEY: ${{ secrets.JRELEASER_GPG_SECRET_KEY }}
JRELEASER_GPG_PASSPHRASE: ${{ secrets.JRELEASER_GPG_PASSPHRASE }}
JRELEASER_NEXUS2_MAVEN_CENTRAL_USERNAME: ${{ secrets.JRELEASER_NEXUS2_MAVEN_CENTRAL_USERNAME }}
JRELEASER_NEXUS2_MAVEN_CENTRAL_TOKEN: ${{ secrets.JRELEASER_NEXUS2_MAVEN_CENTRAL_TOKEN }}
JRELEASER_NEXUS2_END_STAGE: ${{ inputs.push && 'RELEASE' || 'CLOSE' }}
JRELEASER_SKIP_RELEASE: ${{ inputs.push && 'false' || 'true' }}
with:
setup-java: false

- name: Push git changes
if: ${{ inputs.push }}
run: |
git status
git push origin master

- name: Unlock branch after a release
uses: github/lock@v2
id: release-unlock
with:
mode: 'unlock'

- name: Upload JReleaser logs
if: always()
uses: actions/upload-artifact@v4
with:
name: jreleaser-logs
path: |
out/jreleaser/trace.log
out/jreleaser/output.properties
21 changes: 21 additions & 0 deletions airbase/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1650,6 +1650,27 @@
</build>
</profile>

<!-- this is not activated by default so we don't break existing releases -->
<profile>
<id>oss-stage</id>
<properties>
<!-- Stage files to the local directory, JReleaser will push them to OSSRH -->
<altDeploymentRepository>local::file:./target/staging-deploy</altDeploymentRepository>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<!-- we will push commits and tags manually in the workflow -->
<pushChanges>false</pushChanges>
</configuration>
</plugin>
</plugins>
</build>
</profile>

<profile>
<id>ci</id>
<build>
Expand Down
76 changes: 76 additions & 0 deletions jreleaser.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# Hooks that will run on the CI to generate the summary of the steps
hooks:
condition: '"{{ Env.CI }}" == true'
script:
before:
- filter:
includes: ['session']
run: |
echo "### {{command}}" >> $GITHUB_STEP_SUMMARY
echo "| Step | Outcome |" >> $GITHUB_STEP_SUMMARY
echo "| ---- | ------- |" >> $GITHUB_STEP_SUMMARY
success:
- filter:
excludes: ['session']
run: 'echo "| {{event.name}} | :white_check_mark: |" >> $GITHUB_STEP_SUMMARY'
- filter:
includes: ['session']
run: echo "" >> $GITHUB_STEP_SUMMARY
failure:
- filter:
excludes: ['session']
run: 'echo "| {{event.name}} | :x: |" >> $GITHUB_STEP_SUMMARY'
- filter:
includes: ['session']
run: |
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Failure" >> $GITHUB_STEP_SUMMARY
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
echo "{{event.stacktrace}}\`\`\`" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY

# Project configuration
project:
name: airbase
description: Base POM for Airlift
license: Apache-2
java:
groupId: io.airlift
multiProject: true

# Ordered as defined in the https://jreleaser.org/guide/latest/concepts/workflow.html#_full_release
signing:
active: ALWAYS
armored: true

# Deploy to OSSRH
deploy:
maven:
pomchecker:
failOnWarning: false # We don't want to fail the build on warnings
failOnError: false # We don't want to fail the build on errors
nexus2:
maven-central:
active: ALWAYS
url: https://oss.sonatype.org/service/local
snapshotUrl: https://oss.sonatype.org/content/repositories/snapshots/
javadocJar: false # Not every module has javadoc (packaging)
closeRepository: true
releaseRepository: true
stagingRepositories:
- target/checkout/target/staging-deploy

# Release to Github
release:
github:
owner: airlift
overwrite: true # if tag already exists, overwrite it
skipTag: true # created by the release plugin
branch: master
uploadAssets: NEVER
tagName: '{{projectVersion}}'
files: false
draft: false
releaseNotes:
enabled: true
configurationFile: .github/release.yml
19 changes: 19 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -146,5 +146,24 @@
</plugins>
</build>
</profile>
<profile>
<id>oss-stage</id>
<properties>
<!-- Stage files to the local directory, JReleaser will push them to OSSRH -->
<altDeploymentRepository>local::file:./target/staging-deploy</altDeploymentRepository>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<!-- we will push commits and tags manually in the workflow -->
<pushChanges>false</pushChanges>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
Loading