Skip to content

Dependency update. Releasing new version #377

Dependency update. Releasing new version

Dependency update. Releasing new version #377

name: Build and release if requested
on:
push:
branches:
- main
paths:
- "**.sh"
- "**.cmd"
- "**.c"
- "**.cpp"
- "**.java"
# - ".github/workflows/**"
- "**.properties"
- "**.xml"
jobs:
elaborate-native-module:
name: Elaborate native module (${{ matrix.os }} ${{ matrix.architecture }})
strategy:
fail-fast: false
max-parallel: 2
matrix:
os: [windows-latest, ubuntu-latest, macOS-latest]
java: [19]
architecture: [x86, x64]
exclude:
- os: macOS-latest
architecture: x86
runs-on: ${{ matrix.os }}
steps:
- 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.architecture, 'x64')
name: Set up C/C++ compiler
run: |
sudo apt update
sudo apt-get -y install g++-aarch64-linux-gnu g++-arm-linux-gnueabi
- if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.architecture, 'x86')
name: Set up C/C++ compiler
run: |
sudo apt update
sudo apt-get -y install doxygen vera++ zlib1g-dev libsnappy-dev \
g++-multilib
- if: startsWith(matrix.os, 'windows-latest') && startsWith(matrix.architecture, 'x86')
name: Set up C/C++ compiler
uses: egor-tensin/setup-mingw@v2
with:
platform: ${{ matrix.architecture }}
version: 12.2.0
- uses: actions/checkout@v3
- name: Build native library
run: mvn -B clean compile -Dproject_jdk_version=${{ matrix.java }} -DskipTests=true --file ./native/pom.xml
- if: startsWith(matrix.os, 'ubuntu-latest') && startsWith(matrix.architecture, 'x64')
name: Build native library for platform group one
run: |
mvn -B clean compile -Dproject_jdk_version=${{ matrix.java }} -Pextra-compilation-one -Dextra-compilation-one-executable=aarch64-linux-gnu-g++ -Dextra-compilation-one-artifact-name-suffix=aarch64 -DskipTests=true --file ./native/pom.xml
# mvn -B clean compile -Dproject_jdk_version=${{ matrix.java }} -Pextra-compilation-one -Dextra-compilation-one-executable=arm-linux-gnueabi-g++ -Dextra-compilation-one-artifact-name-suffix=armeabi-x32 -DskipTests=true --file ./native/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'))
name: Push native library
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 native libraries on ${{ matrix.os }} ${{ matrix.architecture }}" --allow-empty
git push
build-and-test-with-zulu-JDK:
name: ${{ matrix.os }} ${{ matrix.architecture }}, JVM ${{ matrix.distribution }} ${{ matrix.java }}
needs: [elaborate-native-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-native-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-native-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-native-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-native-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: [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 }}