Skip to content

Commit

Permalink
Move CI to GitHub actions
Browse files Browse the repository at this point in the history
This commit moves the regular build and snapshot deployment to GitHub
actions, based on a standard actions that are reusable.

Closes gh-447
  • Loading branch information
snicoll committed Jul 13, 2024
1 parent 0bcc787 commit 686dd9d
Show file tree
Hide file tree
Showing 6 changed files with 162 additions and 7 deletions.
44 changes: 44 additions & 0 deletions .github/actions/build/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
name: 'Build'
description: 'Builds the project, optionally publishing it to a local deployment repository'
inputs:
java-version:
required: false
default: '17'
description: 'The Java version to compile and test with'
java-distribution:
required: false
default: 'liberica'
description: 'The Java distribution to use for the build'
publish:
required: false
default: 'false'
description: 'Whether to publish artifacts ready for deployment to Artifactory'
outputs:
version:
description: 'The version that was built'
value: ${{ steps.read-version.outputs.version }}
runs:
using: composite
steps:
- name: Prepare Maven Build
uses: ./.github/actions/prepare-maven-build
with:
java-version: ${{ inputs.java-version }}
java-distribution: ${{ inputs.java-distribution }}
- name: Build
id: build
if: ${{ inputs.publish == 'false' }}
shell: bash
run: ./mvnw --no-transfer-progress --batch-mode --update-snapshots verify
- name: Publish
id: publish
if: ${{ inputs.publish == 'true' }}
shell: bash
run: ./mvnw --no-transfer-progress --batch-mode --update-snapshots -DaltDeploymentRepository=local::file:deployment-repository/ clean deploy -Pspring
- name: Read version from pom.xml
id: read-version
shell: bash
run: |
version=$(sed -n 's/^.*<revision>\(.*\)<\/revision>.*$/\1/p' pom.xml)
echo "Version is $version"
echo "version=$version" >> $GITHUB_OUTPUT
21 changes: 21 additions & 0 deletions .github/actions/prepare-maven-build/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
name: 'Prepare Gradle Build'
description: 'Prepares a Maven build. Sets up Java'
inputs:
java-version:
required: false
default: '17'
description: 'The Java version to use for the build'
java-distribution:
required: false
default: 'liberica'
description: 'The Java distribution to use for the build'
runs:
using: composite
steps:
- name: Set Up Java
uses: actions/setup-java@v4
with:
distribution: ${{ inputs.java-distribution }}
java-version: |
${{ inputs.java-version }}
${{ inputs.java-toolchain == 'true' && '17' || '' }}
17 changes: 17 additions & 0 deletions .github/actions/print-jvm-thread-dumps/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
name: Print JVM thread dumps
description: Prints a thread dump for all running JVMs
runs:
using: composite
steps:
- if: ${{ runner.os == 'Linux' }}
shell: bash
run: |
for jvm_pid in $(jps -q -J-XX:+PerfDisableSharedMem); do
jcmd $jvm_pid Thread.print
done
- if: ${{ runner.os == 'Windows' }}
shell: powershell
run: |
foreach ($jvm_pid in $(jps -q -J-XX:+PerfDisableSharedMem)) {
jcmd $jvm_pid Thread.print
}
30 changes: 30 additions & 0 deletions .github/actions/send-notification/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Send Notification
description: Sends a Google Chat message as a notification of the job's outcome
inputs:
webhook-url:
description: 'Google Chat Webhook URL'
required: true
status:
description: 'Status of the job'
required: true
run-name:
description: 'Name of the run to include in the notification'
default: ${{ format('{0} {1}', github.ref_name, github.job) }}
runs:
using: composite
steps:
- shell: bash
run: |
echo "RUN_URL=${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" >> "$GITHUB_ENV"
- shell: bash
if: ${{ inputs.status == 'success' }}
run: |
curl -X POST '${{ inputs.webhook-url }}' -H 'Content-Type: application/json' -d '{ text: "<${{ env.RUN_URL }}|${{ inputs.run-name }}> was successful"}' || true
- shell: bash
if: ${{ inputs.status == 'failure' }}
run: |
curl -X POST '${{ inputs.webhook-url }}' -H 'Content-Type: application/json' -d '{ text: "<users/all> *<${{ env.RUN_URL }}|${{ inputs.run-name }}> failed*"}' || true
- shell: bash
if: ${{ inputs.status == 'cancelled' }}
run: |
curl -X POST '${{ inputs.webhook-url }}' -H 'Content-Type: application/json' -d '{ text: "<${{ env.RUN_URL }}|${{ inputs.run-name }}> was cancelled"}' || true
42 changes: 42 additions & 0 deletions .github/workflows/build-and-deploy-snapshot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: Build and Deploy Snapshot
on:
push:
branches:
- main
permissions:
actions: write
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
jobs:
build-and-deploy-snapshot:
if: ${{ github.repository == 'spring-projects/spring-retry' }}
name: Build and Deploy Snapshot
runs-on: ubuntu-latest
steps:
- name: Check Out Code
uses: actions/checkout@v4
- name: Build and Publish
id: build-and-publish
uses: ./.github/actions/build
with:
publish: true
- name: Deploy
uses: spring-io/artifactory-deploy-action@26bbe925a75f4f863e1e529e85be2d0093cac116 # v0.0.1
with:
uri: 'https://repo.spring.io'
username: ${{ secrets.ARTIFACTORY_USERNAME }}
password: ${{ secrets.ARTIFACTORY_PASSWORD }}
build-name: 'spring-retry-2.0.x'
repository: 'libs-snapshot-local'
folder: 'deployment-repository'
signing-key: ${{ secrets.GPG_PRIVATE_KEY }}
signing-passphrase: ${{ secrets.GPG_PASSPHRASE }}
- name: Send Notification
uses: ./.github/actions/send-notification
if: always()
with:
webhook-url: ${{ secrets.GOOGLE_CHAT_WEBHOOK_URL }}
status: ${{ job.status }}
run-name: ${{ format('{0} | Linux | Java 17', github.ref_name) }}
outputs:
version: ${{ steps.build-and-publish.outputs.version }}
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,19 @@ permissions:

jobs:
build:
name: Build pull request
name: Build Pull Request
runs-on: ubuntu-latest
if: ${{ github.repository == 'spring-projects/spring-retry' }}
steps:
- name: Set up JDK 17
uses: actions/setup-java@v3
- name: Set Up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'liberica'

- name: Check out code
uses: actions/checkout@v3

- name: Check Out
uses: actions/checkout@v4
- name: Build
run: ./mvnw --batch-mode --update-snapshots verify
- name: Print JVM Thread Dumps When Cancelled
uses: ./.github/actions/print-jvm-thread-dumps
if: cancelled()

0 comments on commit 686dd9d

Please sign in to comment.