Skip to content

Add http4k benchmark (see #451) #430

Add http4k benchmark (see #451)

Add http4k benchmark (see #451) #430

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 }}
BUILDENV_IMAGE_BASE: ghcr.io/renaissance-benchmarks/renaissance-buildenv
BUILDENV_IMAGE_VERSION: v19
jobs:
# Hack: this job exposes selected 'env' variables as job outputs so that other
# jobs can use them in job-level keys, such as 'container', where access to
# the 'env' context is prohibited. We cannot use the external 'vars' context,
# because we need the values of the common 'env' variables to be versioned.
setup:
runs-on: ubuntu-latest
outputs:
BUILDENV_IMAGE_BASE: ${{ steps.vars.outputs.BUILDENV_IMAGE_BASE }}
BUILDENV_IMAGE_VERSION: ${{ steps.vars.outputs.BUILDENV_IMAGE_VERSION }}
steps:
- name: Expose specific variables as outputs
id: vars
# Expose common values from the 'env' context inside the 'run' key.
run: |
echo "BUILDENV_IMAGE_BASE=${{ env.BUILDENV_IMAGE_BASE }}" >> "$GITHUB_OUTPUT"
echo "BUILDENV_IMAGE_VERSION=${{ env.BUILDENV_IMAGE_VERSION }}" >> "$GITHUB_OUTPUT"
style:
needs: setup
runs-on: ubuntu-latest
container: ${{ format('{0}:{1}-openjdk25', needs.setup.outputs.BUILDENV_IMAGE_BASE, needs.setup.outputs.BUILDENV_IMAGE_VERSION) }}
# We rarely build for more than 3 minutes
timeout-minutes: 10
steps:
- name: Git checkout
uses: actions/checkout@v6
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@v5
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:
needs: setup
runs-on: ubuntu-latest
container: ${{ format('{0}:{1}-openjdk21', needs.setup.outputs.BUILDENV_IMAGE_BASE, needs.setup.outputs.BUILDENV_IMAGE_VERSION) }}
# We rarely build for more than 3 minutes
timeout-minutes: 10
steps:
- name: Git checkout
uses: actions/checkout@v6
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@v5
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@v7
with:
name: main-jar
path: target/renaissance-*.jar
retention-days: ${{ env.ARTIFACT_RETENTION_DAYS }}
- name: Upload JMH JAR
uses: actions/upload-artifact@v7
with:
name: jmh-jar
path: renaissance-jmh/target/renaissance-*.jar
retention-days: ${{ env.ARTIFACT_RETENTION_DAYS }}
readme:
needs: [setup, build]
runs-on: ubuntu-latest
container: ${{ format('{0}:{1}-openjdk25', needs.setup.outputs.BUILDENV_IMAGE_BASE, needs.setup.outputs.BUILDENV_IMAGE_VERSION) }}
# We rarely build for more than 3 minutes
timeout-minutes: 10
steps:
- name: Git checkout
uses: actions/checkout@v6
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@v8
with:
name: main-jar
path: target
- name: Check generated files are up-to-date
shell: bash
run: tools/ci/check-markdown.sh
run:
needs: [setup, build]
strategy:
fail-fast: false
matrix:
include:
- os: linux
image: temurin-jdk11
- os: linux
image: temurin-jdk17
- os: linux
image: temurin-jdk21
- os: linux
image: temurin-jdk25
- os: linux
image: openjdk26
- 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: 25
- os: macos
java: 11
- os: macos
java: 17
- os: macos
java: 21
- os: macos
java: 25
# The following two settings 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 only supported on Linux.
# - Workaround: avoid newer images (with Fedora 42) for JDK 11.
runs-on: ${{ (matrix.os == 'linux') && 'ubuntu' || matrix.os }}-latest
container: >-
${{
(matrix.os == 'linux') && format(
'{0}:{1}-{2}', needs.setup.outputs.BUILDENV_IMAGE_BASE,
(matrix.image == 'openjdk11' && 'v15') || needs.setup.outputs.BUILDENV_IMAGE_VERSION,
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@v6
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@v5
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@v8
with:
name: main-jar
path: target
- name: Fetch pre-built JMH JAR
uses: actions/download-artifact@v8
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:
needs: [setup, build]
runs-on: ubuntu-latest
container: ${{ format('{0}:{1}-openjdk11-with-ant-gcc', needs.setup.outputs.BUILDENV_IMAGE_BASE, 'v15') }}
# We rarely run over 10 minutes anyway.
timeout-minutes: 30
steps:
- name: Git checkout
uses: actions/checkout@v6
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@v5
with:
key: coursier_cache-${{ runner.os }}-${{ hashFiles('build.sbt') }}
path: ${{ env.COURSIER_CACHE }}
- name: Fetch pre-built main JAR
uses: actions/download-artifact@v8
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