mmtk 0.32.0

MMTk is a framework for the design and implementation of high-performance and portable memory managers.
Documentation
# This workflow is used to figure out binding pull requests related with
# the given MMTk core pull request.
#
# To make sure that our maintained bindings always work with the latest MMTk core,
# we may run binding tests for a core PR. By default, we run with the master of
# each binding repo in our mmtk organisation. However, if the core PR has changes
# that requires bindings to update, we can no longer run with the master of the binding repos.
# In such a case, we need to specify the binding PRs so our mmtk-core CI knows how to run the
# correct version of the bindings for the tests.
#
# In the cases that we need to update bindings, we expect the core PR to have a comment like the following
# to specify the binding pull requests. Note if any of the following values are omitted, the default values
# will be used (run with the master in mmtk's binding repos).
# Repo is in the format of user/repo. Ref could be sha or branch name.
#
# Note that OpenJDK 11 and OpenJDK 21 are considered two bindings, and their repo and ref names are
# specified separately.  It is allowed to specify one or both of OpenJDK 11 and 21.
#
# ```
# binding-refs
# OPENJDK11_BINDING_REPO=xx/xx
# OPENJDK11_BINDING_REF=xxxxxx
# OPENJDK21_BINDING_REPO=xx/xx
# OPENJDK21_BINDING_REF=xxxxxx
# JIKESRVM_BINDING_REPO=xx/xx
# JIKESRVM_BINDING_REF=xxxxxx
# V8_BINDING_REPO=xx/xx
# V8_BINDING_REF=xxxxxx
# JULIA_BINDING_REPO=xx/xx
# JULIA_BINDING_REF=xxxxxx
# JULIA_VM_REPO=xx/xx
# JULIA_VM_REF=xxxxxx
# RUBY_BINDING_REPO=xx/xx
# RUBY_BINDING_REF=xxxxxx
# ```

name: Fetch Binding PR Info

on:
  workflow_call:
    inputs:
      pull_request:
        type: string
        required: true
    outputs:
      openjdk11_binding_repo:
        description: "The repository of OpenJDK 11 binding, such as {user}/{repo}"
        value: ${{ jobs.binding-refs.outputs.openjdk11_binding_repo}}
      openjdk11_binding_repo_default:
        description: "The default repository of OpenJDK 11 binding, such as {user}/{repo}"
        value: ${{ jobs.binding-refs.outputs.openjdk11_binding_repo_default }}
      openjdk11_binding_ref:
        description: "The git ref of OpenJDK 11 binding, such as sha and branch name"
        value: ${{ jobs.binding-refs.outputs.openjdk11_binding_ref}}
      openjdk11_binding_ref_default:
        description: "The default git ref of OpenJDK 11 binding, such as sha and branch name"
        value: ${{ jobs.binding-refs.outputs.openjdk11_binding_ref_default }}

      openjdk21_binding_repo:
        description: "The repository of OpenJDK 21 binding, such as {user}/{repo}"
        value: ${{ jobs.binding-refs.outputs.openjdk21_binding_repo}}
      openjdk21_binding_repo_default:
        description: "The default repository of OpenJDK 21 binding, such as {user}/{repo}"
        value: ${{ jobs.binding-refs.outputs.openjdk21_binding_repo_default }}
      openjdk21_binding_ref:
        description: "The git ref of OpenJDK 21 binding, such as sha and branch name"
        value: ${{ jobs.binding-refs.outputs.openjdk21_binding_ref}}
      openjdk21_binding_ref_default:
        description: "The default git ref of OpenJDK 21 binding, such as sha and branch name"
        value: ${{ jobs.binding-refs.outputs.openjdk21_binding_ref_default }}

      jikesrvm_binding_repo:
        description: "The repository of JikesRVM binding, such as {user}/{repo}"
        value: ${{ jobs.binding-refs.outputs.jikesrvm_binding_repo}}
      jikesrvm_binding_repo_default:
        description: "The default repository of JikesRVM binding, such as {user}/{repo}"
        value: ${{ jobs.binding-refs.outputs.jikesrvm_binding_repo_default }}
      jikesrvm_binding_ref:
        description: "The git ref of JikesRVM binding, such as sha and branch name"
        value: ${{ jobs.binding-refs.outputs.jikesrvm_binding_ref}}
      jikesrvm_binding_ref_default:
        description: "The default git ref of JikesRVM binding, such as sha and branch name"
        value: ${{ jobs.binding-refs.outputs.jikesrvm_binding_ref_default }}

      v8_binding_repo:
        description: "The repository of V8 binding, such as {user}/{repo}"
        value: ${{ jobs.binding-refs.outputs.v8_binding_repo}}
      v8_binding_repo_default:
        description: "The default repository of V8 binding, such as {user}/{repo}"
        value: ${{ jobs.binding-refs.outputs.v8_binding_repo_default }}
      v8_binding_ref:
        description: "The git ref of V8 binding, such as sha and branch name"
        value: ${{ jobs.binding-refs.outputs.v8_binding_ref}}
      v8_binding_ref_default:
        description: "The default git ref of V8 binding, such as sha and branch name"
        value: ${{ jobs.binding-refs.outputs.v8_binding_ref_default }}

      julia_binding_repo:
        description: "The repository of Julia binding, such as {user}/{repo}"
        value: ${{ jobs.binding-refs.outputs.julia_binding_repo}}
      julia_binding_repo_default:
        description: "The default repository of Julia binding, such as {user}/{repo}"
        value: ${{ jobs.binding-refs.outputs.julia_binding_repo_default }}
      julia_binding_ref:
        description: "The git ref of Julia binding, such as sha and branch name"
        value: ${{ jobs.binding-refs.outputs.julia_binding_ref}}
      julia_binding_ref_default:
        description: "The default git ref of Julia binding, such as sha and branch name"
        value: ${{ jobs.binding-refs.outputs.julia_binding_ref_default }}
      # We further define the Julia version to run with, as we no longer record the Julia
      # version with each binding commit. Instead, we record the binding version with
      # each Julia commit.
      julia_vm_repo:
        description: "The repository of Julia, such as {user}/{repo}"
        value: ${{ jobs.binding-refs.outputs.julia_vm_repo }}
      julia_vm_repo_default:
        description: "The default repository of Julia, such as {user}/{repo}"
        value: ${{ jobs.binding-refs.outputs.julia_vm_repo_default }}
      julia_vm_ref:
        description: "The git ref of Julia, such as sha and branch name"
        value: ${{ jobs.binding-refs.outputs.julia_vm_ref }}
      julia_vm_ref_default:
        description: "The default git ref of Julia, such as sha and branch name"
        value: ${{ jobs.binding-refs.outputs.julia_vm_ref_default }}

      ruby_binding_repo:
        description: "The repository of Ruby binding, such as {user}/{repo}"
        value: ${{ jobs.binding-refs.outputs.ruby_binding_repo}}
      ruby_binding_repo_default:
        description: "The default repository of Ruby binding, such as {user}/{repo}"
        value: ${{ jobs.binding-refs.outputs.ruby_binding_repo_default }}
      ruby_binding_ref:
        description: "The git ref of Ruby binding, such as sha and branch name"
        value: ${{ jobs.binding-refs.outputs.ruby_binding_ref}}
      ruby_binding_ref_default:
        description: "The default git ref of Ruby binding, such as sha and branch name"
        value: ${{ jobs.binding-refs.outputs.ruby_binding_ref_default }}

jobs:
  binding-refs:
    runs-on: ubuntu-latest
    env:
      OPENJDK11_BINDING_REPO_DEFAULT: mmtk/mmtk-openjdk
      OPENJDK11_BINDING_REF_DEFAULT: jdk-11
      OPENJDK21_BINDING_REPO_DEFAULT: mmtk/mmtk-openjdk
      OPENJDK21_BINDING_REF_DEFAULT: jdk-21
      JIKESRVM_BINDING_REPO_DEFAULT: mmtk/mmtk-jikesrvm
      JIKESRVM_BINDING_REF_DEFAULT: master
      V8_BINDING_REPO_DEFAULT: mmtk/mmtk-v8
      V8_BINDING_REF_DEFAULT: master
      JULIA_BINDING_REPO_DEFAULT: mmtk/mmtk-julia
      JULIA_BINDING_REF_DEFAULT: master
      JULIA_VM_REPO_DEFAULT: JuliaLang/julia
      JULIA_VM_REF_DEFAULT: master
      RUBY_BINDING_REPO_DEFAULT: mmtk/mmtk-ruby
      RUBY_BINDING_REF_DEFAULT: master
    outputs:
        openjdk11_binding_repo: ${{ steps.print.outputs.openjdk11_binding_repo }}
        openjdk11_binding_repo_default: ${{ env.OPENJDK11_BINDING_REPO_DEFAULT }}
        openjdk11_binding_ref: ${{ steps.print.outputs.openjdk11_binding_ref }}
        openjdk11_binding_ref_default: ${{ env.OPENJDK11_BINDING_REF_DEFAULT }}
        openjdk21_binding_repo: ${{ steps.print.outputs.openjdk21_binding_repo }}
        openjdk21_binding_repo_default: ${{ env.OPENJDK21_BINDING_REPO_DEFAULT }}
        openjdk21_binding_ref: ${{ steps.print.outputs.openjdk21_binding_ref }}
        openjdk21_binding_ref_default: ${{ env.OPENJDK21_BINDING_REF_DEFAULT }}
        jikesrvm_binding_repo: ${{ steps.print.outputs.jikesrvm_binding_repo }}
        jikesrvm_binding_repo_default: ${{ env.JIKESRVM_BINDING_REPO_DEFAULT }}
        jikesrvm_binding_ref: ${{ steps.print.outputs.jikesrvm_binding_ref }}
        jikesrvm_binding_ref_default: ${{ env.JIKESRVM_BINDING_REF_DEFAULT }}
        v8_binding_repo: ${{ steps.print.outputs.v8_binding_repo }}
        v8_binding_repo_default: ${{ env.V8_BINDING_REPO_DEFAULT }}
        v8_binding_ref: ${{ steps.print.outputs.v8_binding_ref }}
        v8_binding_ref_default: ${{ env.V8_BINDING_REF_DEFAULT }}
        julia_binding_repo: ${{ steps.print.outputs.julia_binding_repo }}
        julia_binding_repo_default: ${{ env.JULIA_BINDING_REPO_DEFAULT }}
        julia_binding_ref: ${{ steps.print.outputs.julia_binding_ref }}
        julia_binding_ref_default: ${{ env.JULIA_BINDING_REF_DEFAULT }}
        julia_vm_repo: ${{ steps.print.outputs.julia_vm_repo }}
        julia_vm_repo_default: ${{ env.JULIA_VM_REPO_DEFAULT }}
        julia_vm_ref: ${{ steps.print.outputs.julia_vm_ref }}
        julia_vm_ref_default: ${{ env.JULIA_VM_REF_DEFAULT }}
        ruby_binding_repo: ${{ steps.print.outputs.ruby_binding_repo }}
        ruby_binding_repo_default: ${{ env.RUBY_BINDING_REPO_DEFAULT }}
        ruby_binding_ref: ${{ steps.print.outputs.ruby_binding_ref }}
        ruby_binding_ref_default: ${{ env.RUBY_BINDING_REF_DEFAULT }}
    steps:
        - name: Check binding revisions
          uses: qinsoon/comment-env-vars@1.1.0
          with:
            pull_request: ${{ inputs.pull_request }}
            token: ${{ secrets.GITHUB_TOKEN }}
            # Note: In the following lines, YAML makes one multi-line string literal from the
            # indented lines after the '|' character, and then GitHub Actions replaces '${{ ... }}'
            # with the expression values, and finally comment-env-vars parses the value of
            # `default_env` (a multi-line string). comment-env-vars splits the string by /[\n\r,]/,
            # and keeps only elements that contain non-blank sub-strings separated by '='.  Both the
            # LHS and RHS of '=' are trimmed.
            default_env: |
              OPENJDK11_BINDING_REPO=${{ env.OPENJDK11_BINDING_REPO_DEFAULT }}
              OPENJDK11_BINDING_REF=${{ env.OPENJDK11_BINDING_REF_DEFAULT }}
              OPENJDK21_BINDING_REPO=${{ env.OPENJDK21_BINDING_REPO_DEFAULT }}
              OPENJDK21_BINDING_REF=${{ env.OPENJDK21_BINDING_REF_DEFAULT }}
              JIKESRVM_BINDING_REPO=${{ env.JIKESRVM_BINDING_REPO_DEFAULT }}
              JIKESRVM_BINDING_REF=${{ env.JIKESRVM_BINDING_REF_DEFAULT }}
              V8_BINDING_REPO=${{ env.V8_BINDING_REPO_DEFAULT }}
              V8_BINDING_REF=${{ env.V8_BINDING_REF_DEFAULT }}
              JULIA_BINDING_REPO=${{ env.JULIA_BINDING_REPO_DEFAULT }}
              JULIA_BINDING_REF=${{ env.JULIA_BINDING_REF_DEFAULT }}
              JULIA_VM_REPO=${{ env.JULIA_VM_REPO_DEFAULT }}
              JULIA_VM_REF=${{ env.JULIA_VM_REF_DEFAULT }}
              RUBY_BINDING_REPO=${{ env.RUBY_BINDING_REPO_DEFAULT }}
              RUBY_BINDING_REF=${{ env.RUBY_BINDING_REF_DEFAULT }}
        - id: print
          run: |
            echo "openjdk11_binding_repo=${{ env.OPENJDK11_BINDING_REPO }}" >> $GITHUB_OUTPUT
            echo "openjdk11_binding_ref=${{ env.OPENJDK11_BINDING_REF }}" >> $GITHUB_OUTPUT
            echo "openjdk21_binding_repo=${{ env.OPENJDK21_BINDING_REPO }}" >> $GITHUB_OUTPUT
            echo "openjdk21_binding_ref=${{ env.OPENJDK21_BINDING_REF }}" >> $GITHUB_OUTPUT
            echo "jikesrvm_binding_repo=${{ env.JIKESRVM_BINDING_REPO }}" >> $GITHUB_OUTPUT
            echo "jikesrvm_binding_ref=${{ env.JIKESRVM_BINDING_REF }}" >> $GITHUB_OUTPUT
            echo "v8_binding_repo=${{ env.V8_BINDING_REPO }}" >> $GITHUB_OUTPUT
            echo "v8_binding_ref=${{ env.V8_BINDING_REF }}" >> $GITHUB_OUTPUT
            echo "julia_binding_repo=${{ env.JULIA_BINDING_REPO }}" >> $GITHUB_OUTPUT
            echo "julia_binding_ref=${{ env.JULIA_BINDING_REF }}" >> $GITHUB_OUTPUT
            echo "julia_vm_repo=${{ env.JULIA_VM_REPO }}" >> $GITHUB_OUTPUT
            echo "julia_vm_ref=${{ env.JULIA_VM_REF }}" >> $GITHUB_OUTPUT
            echo "ruby_binding_repo=${{ env.RUBY_BINDING_REPO }}" >> $GITHUB_OUTPUT
            echo "ruby_binding_ref=${{ env.RUBY_BINDING_REF }}" >> $GITHUB_OUTPUT