Skip to content

Refactor

Refactor #893

# This file is part of ToolFactory JVM driver.
#
# Hosted at: https://github.com/toolfactory/jvm-driver
#
# - -
#
# The MIT License (MIT)
#
# Copyright (c) 2021 Luke Hutchison, Roberto Gentili
#
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
# documentation files (the "Software"), to deal in the Software without restriction, including without
# limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
# the Software, and to permit persons to whom the Software is furnished to do so, subject to the following
# conditions:
#
# The above copyright notice and this permission notice shall be included in all copies or substantial
# portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
# LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
# EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
# OR OTHER DEALINGS IN THE SOFTWARE.
#
name: Build and release if requested
on:
push:
branches:
- main
paths:
- "**.sh"
- "**.cmd"
- "**.java"
# - ".github/workflows/**"
- "**.properties"
- "**.xml"
jobs:
#To ensure compatibility with the Java 7 version the build must never be run with a JDK version higher than 19
elaborate-java-hook-module:
name: Elaborate java hook module (${{ matrix.os }})
strategy:
fail-fast: true
max-parallel: 1
matrix:
architecture: [x64]
os: [ubuntu-latest, macOS-latest, windows-latest]
java: [19]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v3
with:
java-version: ${{ matrix.java }}
distribution: 'zulu'
architecture: ${{ matrix.architecture }}
- if: startsWith(matrix.os, 'ubuntu') || startsWith(matrix.os, 'macOS')
name: Change the permissions of the build script of external classes
run: chmod +x ./java-hook/compileExternalClasses.sh
- name: Build hook classes
run: mvn -B clean compile -Dproject_jdk_version=${{ matrix.java }} -DskipTests=true --file ./java-hook/pom.xml
- if: github.event_name == 'push' && (endsWith(github.event.head_commit.message, 'Releasing new version') || contains(github.event.head_commit.message, 'Generating external artifacts')) && startsWith(matrix.os, 'windows')
name: Push hook classes
run: |
git config user.name "${{ github.event.head_commit.committer.name }}"
git config user.email "${{ github.event.head_commit.committer.email }}"
git pull origin ${{github.ref}}
git add .
git commit -am "Generated hook classes" --allow-empty
git push
build-and-test-with-zulu-JDK:
name: ${{ matrix.os }} ${{ matrix.architecture }}, JVM ${{ matrix.distribution }} ${{ matrix.java }}
needs: [elaborate-java-hook-module]
strategy:
fail-fast: false
max-parallel: 15
matrix:
architecture: [x86, x64]
distribution: [zulu]
os: [ubuntu-latest, macOS-latest, windows-latest]
java: [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
exclude:
- os: macOS-latest
architecture: x86
- architecture: x64
java: 10
- architecture: x86
java: 20
- architecture: x86
java: 21
- architecture: x86
java: 22
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v3
with:
java-version: ${{ matrix.java }}
distribution: ${{ matrix.distribution }}
architecture: ${{ matrix.architecture }}
- name: Update repositories
run: |
git config user.name "${{ github.event.head_commit.committer.name }}"
git config user.email "${{ github.event.head_commit.committer.email }}"
git pull origin ${{github.ref}}
- name: Build and test with Java 7 target
if: ${{ fromJSON(matrix.java) <= 19 }}
run: mvn -B clean test -DskipTests=false --file ./java/pom.xml
- name: Build and test with Java 8 target
if: ${{ fromJSON(matrix.java) > 19}}
run: mvn -B clean test -Dproject_jdk_version=8 -DskipTests=false --file ./java/pom.xml
build-and-test-with-liberica-JDK:
name: ${{ matrix.os }} ${{ matrix.architecture }}, JVM ${{ matrix.distribution }} ${{ matrix.java }}
needs: [elaborate-java-hook-module]
strategy:
fail-fast: false
max-parallel: 15
matrix:
architecture: [x86, x64]
distribution: [liberica]
os: [ubuntu-latest, macOS-latest, windows-latest]
java: [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]
exclude:
- os: macOS-latest
architecture: x86
- java: 9
- java: 10
- architecture: x86
os: ubuntu-latest
java: 20
- architecture: x86
os: ubuntu-latest
java: 21
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v3
with:
java-version: ${{ matrix.java }}
distribution: ${{ matrix.distribution }}
architecture: ${{ matrix.architecture }}
- name: Update repositories
run: |
git config user.name "${{ github.event.head_commit.committer.name }}"
git config user.email "${{ github.event.head_commit.committer.email }}"
git pull origin ${{github.ref}}
- name: Build and test with Java 7 target
if: ${{ fromJSON(matrix.java) <= 19 }}
run: mvn -B clean test -DskipTests=false --file ./java/pom.xml
- name: Build and test with Java 8 target
if: ${{ fromJSON(matrix.java) > 19}}
run: mvn -B clean test -Dproject_jdk_version=8 -DskipTests=false --file ./java/pom.xml
build-and-test-with-semeru-JDK:
name: ${{ matrix.os }} ${{ matrix.architecture }}, JVM ${{ matrix.distribution }} ${{ matrix.java }}
needs: [elaborate-java-hook-module]
strategy:
fail-fast: false
max-parallel: 15
matrix:
architecture: [x64]
distribution: [semeru]
os: [ubuntu-latest, macOS-latest, windows-latest]
java: [11, 16, 17, 18, 19, 20]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v3
with:
java-version: ${{ matrix.java }}
distribution: ${{ matrix.distribution }}
architecture: ${{ matrix.architecture }}
- name: Update repositories
run: |
git config user.name "${{ github.event.head_commit.committer.name }}"
git config user.email "${{ github.event.head_commit.committer.email }}"
git pull origin ${{github.ref}}
- name: Build and test with Java 7 target
if: ${{ fromJSON(matrix.java) <= 19 }}
run: mvn -B clean test -DskipTests=false --file ./java/pom.xml
- name: Build and test with Java 8 target
if: ${{ fromJSON(matrix.java) > 19}}
run: mvn -B clean test -Dproject_jdk_version=8 -DskipTests=false --file ./java/pom.xml
build-and-test-with-temurin-JDK:
name: ${{ matrix.os }} ${{ matrix.architecture }}, JVM ${{ matrix.distribution }} ${{ matrix.java }}
needs: [elaborate-java-hook-module]
strategy:
fail-fast: false
max-parallel: 15
matrix:
architecture: [x64]
distribution: [temurin]
os: [ubuntu-latest, macOS-latest, windows-latest]
java: [11, 16, 17, 18, 19, 20]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v3
with:
java-version: ${{ matrix.java }}
distribution: ${{ matrix.distribution }}
architecture: ${{ matrix.architecture }}
- name: Update repositories
run: |
git config user.name "${{ github.event.head_commit.committer.name }}"
git config user.email "${{ github.event.head_commit.committer.email }}"
git pull origin ${{github.ref}}
- name: Build and test with Java 7 target
if: ${{ fromJSON(matrix.java) <= 19 }}
run: mvn -B clean test -DskipTests=false --file ./java/pom.xml
- name: Build and test with Java 8 target
if: ${{ fromJSON(matrix.java) > 19}}
run: mvn -B clean test -Dproject_jdk_version=8 -DskipTests=false --file ./java/pom.xml
build-and-test-with-ea-JDK:
if: ${{ false }}
name: ${{ matrix.os }} ${{ matrix.architecture }}, JVM ${{ matrix.distribution }} ${{ matrix.java }}
needs: [elaborate-java-hook-module]
strategy:
fail-fast: false
max-parallel: 15
matrix:
architecture: [x86, x64]
distribution: [zulu]
os: [ubuntu-latest, macOS-latest, windows-latest]
java: [22-ea]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v3
with:
java-version: ${{ matrix.java }}
distribution: ${{ matrix.distribution }}
architecture: ${{ matrix.architecture }}
- name: Update repositories
run: |
git config user.name "${{ github.event.head_commit.committer.name }}"
git config user.email "${{ github.event.head_commit.committer.email }}"
git pull origin ${{github.ref}}
- name: Build and test with Java 8 target
run: mvn -B clean test -DskipTests=false -Dproject_jdk_version=8 --file ./java/pom.xml
#To ensure compatibility with the Java 7 version the build must never be run with a JDK version higher than 19
release:
# needs: [elaborate-java-hook-module]
needs: [build-and-test-with-zulu-JDK, build-and-test-with-liberica-JDK, build-and-test-with-semeru-JDK, build-and-test-with-temurin-JDK]
name: Release if requested
runs-on: ubuntu-latest
if: github.event_name == 'push' && endsWith(github.event.head_commit.message, 'Releasing new version')
steps:
- uses: actions/checkout@v3
- name: Set up JDK 19
uses: actions/setup-java@v3
with:
java-version: 19
distribution: 'zulu'
server-id: ossrh
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
- name: Publish to the Maven central repository
run: |
export GPG_TTY=$(tty)
echo "${{ secrets.gpg_private_key }}" | gpg --batch --import
git config user.name "${{ github.event.head_commit.committer.name }}"
git config user.email "${{ github.event.head_commit.committer.email }}"
git pull origin ${{github.ref}}
mv ./java/pom.xml ./java/temp-pom.xml
mv ./java/sa-pom.xml ./java/pom.xml
mv ./java/temp-pom.xml ./java/sa-pom.xml
git commit -am "Swithcing pom for releasing"
git push
mvn -B release:prepare release:perform -DskipTests=true -Dgpg.passphrase="${{ secrets.gpg_passphrase }}" -Dgpg.keyname=${{ secrets.gpg_key_id }} -Drepository.url=https://${GITHUB_ACTOR}:${{ secrets.GITHUB_TOKEN }}@github.com/${GITHUB_REPOSITORY}.git --file ./java/pom.xml
mv ./java/pom.xml ./java/temp-pom.xml
mv ./java/sa-pom.xml ./java/pom.xml
mv ./java/temp-pom.xml ./java/sa-pom.xml
newVersion=$(sed -n -r 's%.*<version>[[:space:]]*(.*-SNAPSHOT)</version>.*%\1%p' ./java/sa-pom.xml)
sed -r -i "s%<version>[[:space:]]*(.*-SNAPSHOT)</version>%<version>${newVersion}</version>%" ./java/pom.xml
git commit -am "Prepare for next development iteration"
git push
env:
MAVEN_USERNAME: ${{ secrets.nexus_username }}
MAVEN_PASSWORD: ${{ secrets.nexus_password }}