Skip to content

CI: build once, reuse for all runs (see #454) #317

CI: build once, reuse for all runs (see #454)

CI: build once, reuse for all runs (see #454) #317

Workflow file for this run

name: Main
on:
push:
branches: [master]
pull_request:
env:
COURSIER_CACHE: ${{ github.workspace }}/.cache/coursier
# Retention period of the generated artifacts (main and JMH Renaissance JARs)
# (Using the pseudo-ternary operator here, the retention can be 1 to 90 days)
ARTIFACT_RETENTION_DAYS: ${{ ((github.event_name == 'push') && (github.ref == 'refs/heads/master')) && 30 || 4 }}
jobs:
style:
runs-on: ubuntu-latest
container: "ghcr.io/renaissance-benchmarks/renaissance-buildenv:v12-openjdk23"
# We rarely build for more than 3 minutes
timeout-minutes: 10
steps:
- name: Git checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Fix Git safe directory
shell: bash
run: git config --global --add safe.directory $GITHUB_WORKSPACE
- name: Coursier downloads cache
uses: actions/cache@v4
with:
key: coursier_cache-${{ runner.os }}-${{ hashFiles('build.sbt') }}
path: ${{ env.COURSIER_CACHE }}
- name: Check file encoding
shell: bash
run: tools/ci/check-encoding.sh
- name: Check source code formatting
shell: bash
run: tools/ci/check-formatting.sh
build:
runs-on: ubuntu-latest
container: "ghcr.io/renaissance-benchmarks/renaissance-buildenv:v12-openjdk11-with-ant-gcc"
# We rarely build for more than 3 minutes
timeout-minutes: 10
steps:
- name: Git checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Fix Git safe directory
shell: bash
run: git config --global --add safe.directory $GITHUB_WORKSPACE
- name: Environment configuration
shell: bash
run: tools/ci/pre-show-env.sh
- name: Coursier downloads cache
uses: actions/cache@v4
with:
key: coursier_cache-${{ runner.os }}-${{ hashFiles('build.sbt') }}
path: ${{ env.COURSIER_CACHE }}
- name: Build both base & JMH bundles
shell: bash
run: tools/ci/build-both.sh
- name: Check JMH bundle
shell: bash
run: tools/ci/check-jmh.sh
- name: Upload the main JAR
uses: actions/upload-artifact@v4
with:
name: main-jar
path: target/renaissance-*.jar
retention-days: ${{ env.ARTIFACT_RETENTION_DAYS }}
- name: Upload JMH JAR
uses: actions/upload-artifact@v4
with:
name: jmh-jar
path: renaissance-jmh/target/renaissance-*.jar
retention-days: ${{ env.ARTIFACT_RETENTION_DAYS }}
readme:
needs: build
runs-on: ubuntu-latest
container: "ghcr.io/renaissance-benchmarks/renaissance-buildenv:v12-openjdk23"
# We rarely build for more than 3 minutes
timeout-minutes: 10
steps:
- name: Git checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Fix Git safe directory
shell: bash
run: git config --global --add safe.directory $GITHUB_WORKSPACE
- name: Fetch pre-built main JAR
uses: actions/download-artifact@v4
with:
name: main-jar
path: target
- name: Check generated files are up-to-date
shell: bash
run: tools/ci/check-markdown.sh
run:
needs: build
strategy:
fail-fast: false
matrix:
include:
- os: linux
image: openjdk11
- os: linux
image: openjdk17
- os: linux
image: openjdk21
- os: linux
image: openjdk23
- os: linux
image: openj9-openjdk11
- os: linux
image: openj9-openjdk17
- os: linux
image: openj9-openjdk21
- os: windows
java: 11
- os: windows
java: 17
- os: windows
java: 21
- os: windows
java: 23
- os: macos
java: 11
- os: macos
java: 17
- os: macos
java: 21
- os: macos
java: 23
# The following two lines are a bit of a hack:
# - We use only short OS name in the matrix to have short build names.
# - We need to set container to null on Windows and Mac as containers are
# supported on Linux only
runs-on: ${{ (matrix.os == 'linux') && 'ubuntu' || matrix.os }}-latest
container: ${{ (matrix.os == 'linux') && format('ghcr.io/renaissance-benchmarks/renaissance-buildenv:v12-{0}', matrix.image) || null }}
# We rarely run over 17 minutes but a runaway JMH can loop forever.
timeout-minutes: 30
steps:
- name: Git checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Fix Git safe directory
shell: bash
run: git config --global --add safe.directory $GITHUB_WORKSPACE
- name: Setup correct Java version
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: ${{ matrix.java }}
if: ${{ matrix.os != 'linux' }}
- name: Environment configuration
shell: bash
run: tools/ci/pre-show-env.sh
- name: Fetch pre-built main JAR
uses: actions/download-artifact@v4
with:
name: main-jar
path: target
- name: Fetch pre-built JMH JAR
uses: actions/download-artifact@v4
with:
name: jmh-jar
path: renaissance-jmh/target
- name: Run the suite
shell: bash
run: tools/ci/bench-base.sh
- name: Run the suite in standalone mode
shell: bash
run: tools/ci/bench-standalone.sh
- name: Run the suite with JMH
shell: bash
run: tools/ci/bench-jmh.sh
plugins:
runs-on: ubuntu-latest
needs: build
container: "ghcr.io/renaissance-benchmarks/renaissance-buildenv:v12-openjdk11-with-ant-gcc"
# We rarely run over 10 minutes anyway.
timeout-minutes: 30
steps:
- name: Git checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Fix Git safe directory
shell: bash
run: git config --global --add safe.directory $GITHUB_WORKSPACE
- name: Environment configuration
shell: bash
run: tools/ci/pre-show-env.sh
- name: Coursier downloads cache
uses: actions/cache@v4
with:
key: coursier_cache-${{ runner.os }}-${{ hashFiles('build.sbt') }}
path: ${{ env.COURSIER_CACHE }}
- name: Fetch pre-built main JAR
uses: actions/download-artifact@v4
with:
name: main-jar
path: target
- name: Build plugins
shell: bash
run: tools/ci/build-plugins.sh
- name: Run the suite with all plugins
shell: bash
run: tools/ci/bench-plugins.sh