Skip to content

Release

Release #32

Workflow file for this run

# This workflow will create a release when a `v*` tag is pushed
# For more information see: https://github.com/actions/create-release
on:
push:
tags:
- 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10
workflow_dispatch:
name: Release
jobs:
build:
name: Build & Test
runs-on: ubuntu-latest
env:
LD_LIBRARY_PATH: "/usr/lib/x86_64-linux-gnu"
strategy:
matrix:
jdk: [8, 11, 17, 21, 24]
steps:
- uses: actions/checkout@v2
- name: Cache M2 local repository
uses: actions/cache@v4
with:
path: ~/.m2/repository
key: m2
- name: Install dependencies
run: |
sudo apt-get -y update
sudo apt-get -y install libopenblas-dev libarpack2-dev gcc-aarch64-linux-gnu gcc-riscv64-linux-gnu gcc-x86-64-linux-gnu
# Build with JDK 17
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: 17
distribution: temurin
- name: Build
run: mvn --batch-mode compile test-compile
# Test with JDK ${{ matrix.jdk }}
- name: Set up JDK ${{ matrix.jdk }}
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.jdk }}
distribution: temurin
- name: Test
run: mvn --batch-mode --projects blas,lapack,arpack surefire:test
release:
name: Release
runs-on: ubuntu-latest
needs: [build]
# Map step output to job output
outputs:
release_upload_url: ${{ steps.create_release.outputs.upload_url }}
steps:
- uses: actions/checkout@v2
- name: Cache M2 local repository
uses: actions/cache@v4
with:
path: ~/.m2/repository
key: m2
- name: Install dependencies
run: |
sudo apt-get -y update
sudo apt-get -y install gcc-aarch64-linux-gnu gcc-x86-64-linux-gnu
- name: Set up JDK 17
uses: actions/setup-java@v4
with: # running setup-java again overwrites the settings.xml
java-version: 17
distribution: temurin
server-id: ossrh
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }}
- name: Publish to Sonatype OSSRH
run: mvn --batch-mode -DskipTests=true deploy
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
- name: Upload Benchmarks
uses: actions/upload-artifact@v4
with:
name: benchmarks
path: benchmarks/target/netlib-benchmarks.jar
if-no-files-found: error
- name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: ${{ github.ref }}
draft: true
benchmark:
name: Run benchmarks
runs-on: [self-hosted, linux, x64]
needs: [release]
strategy:
matrix:
jdk: [8, 11, 17]
implementation: ["java", "native"]
filter: ["dev.ludovic.netlib.benchmarks.blas.l1", "dev.ludovic.netlib.benchmarks.blas.l2", "dev.ludovic.netlib.benchmarks.blas.l3"]
include:
- jdk: 17
implementation: "java"
filter: "dev.ludovic.netlib.benchmarks.blas.l1"
jvmArgs: "--add-modules=jdk.incubator.vector,jdk.incubator.foreign -Dforeign.restricted=permit"
- jdk: 17
implementation: "java"
filter: "dev.ludovic.netlib.benchmarks.blas.l2"
jvmArgs: "--add-modules=jdk.incubator.vector,jdk.incubator.foreign -Dforeign.restricted=permit"
- jdk: 17
implementation: "java"
filter: "dev.ludovic.netlib.benchmarks.blas.l3"
jvmArgs: "--add-modules=jdk.incubator.vector,jdk.incubator.foreign -Dforeign.restricted=permit"
steps:
- name: Set up JDK ${{ matrix.jdk }}
uses: actions/setup-java@v1
with:
java-version: ${{ matrix.jdk }}
- name: Download Benchmarks
id: download_benchmarks
uses: actions/download-artifact@v2
with:
name: benchmarks
- name: Run benchmark
run: java -jar "${{steps.download_benchmarks.outputs.download-path}}/netlib-benchmarks.jar" "${{ matrix.filter }}" -p "implementation=${{ matrix.implementation }}" -jvmArgs "${{ matrix.jvmArgs }}" -rf json -rff "jmh-results-jdk${{ matrix.jdk }}-${{ matrix.filter }}-${{ matrix.implementation }}.json"
- name: Upload JMH results
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.release.outputs.release_upload_url }}
asset_path: jmh-results-jdk${{ matrix.jdk }}-${{ matrix.filter }}-${{ matrix.implementation }}.json
asset_name: jmh-results-jdk${{ matrix.jdk }}-${{ matrix.filter }}-${{ matrix.implementation }}.json
asset_content_type: application/json