CI: build once, reuse for all runs (see #454) #317
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |