mmtk 0.32.0

MMTk is a framework for the design and implementation of high-performance and portable memory managers.
Documentation
name: Extended tests - bindings

on:
  pull_request:
    types: [opened, synchronize, reopened, labeled]
    branches:
      - master

concurrency:
  # Cancels pending runs when a PR gets updated.
  group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

jobs:
  # Figure out binding PRs.
  binding-refs:
    if: contains(github.event.pull_request.labels.*.name, 'PR-extended-testing')
    uses: ./.github/workflows/pr-binding-refs.yml
    with:
      pull_request: ${{ github.event.pull_request.number }}

  # Our V8 version is too old, and the required environments are no longer supported.
  # Disable the tests for now, until we plan to upgrade the V8 version and get it working again.
  # See: https://mmtk.zulipchat.com/#narrow/channel/262677-ANU-Research/topic/The.20V8.20binding.20is.20beyond.20repair/near/509115086
  # > After fixing some CI scripts issues, I find that some of the bundled Python code in V8 is depending on Python2,
  # > which has reached EOL long ago, and will no longer be available on Ubuntu 24.04. Ubuntu 22.04 has Python 3 as the default
  # > python executable, which causes the error on the CI. Ubuntu 20.04 will be unsupported the next month, so we can't keep using it.
  # extended-tests-v8:
  #   runs-on: ubuntu-20.04
  #   needs: binding-refs
  #   if: contains(github.event.pull_request.labels.*.name, 'PR-extended-testing')
  #   steps:
  #     - name: Checkout MMTk Core
  #       uses: actions/checkout@v4
  #       with:
  #         path: mmtk-core
  #     - name: Checkout V8 Binding
  #       uses: actions/checkout@v4
  #       with:
  #         repository: ${{ needs.binding-refs.outputs.v8_binding_repo }}
  #         path: mmtk-v8
  #         ref: ${{ needs.binding-refs.outputs.v8_binding_ref }}
  #     - name: Use mmtk-core Rust toolchain for bindings
  #       run: |
  #         cp mmtk-core/rust-toolchain mmtk-v8/mmtk
  #     - name: Overwrite MMTk core in V8 binding
  #       run: |
  #         rm -rf mmtk-v8/repos/*
  #         mkdir -p mmtk-v8/repos/mmtk-core
  #         cp -r mmtk-core/* mmtk-v8/repos/mmtk-core
  #     - name: Setup
  #       run: |
  #         cd mmtk-v8
  #         ./.github/scripts/ci-setup.sh
  #         sed -i 's/^mmtk[[:space:]]=/#ci:mmtk=/g' mmtk/Cargo.toml
  #         sed -i 's/^#[[:space:]]mmtk/mmtk/g' mmtk/Cargo.toml
  #     - name: Test
  #       run: |
  #         cd mmtk-v8
  #         export RUST_BACKTRACE=1
  #         export V8_ROOT=$GITHUB_WORKSPACE/v8_deps
  #         .github/scripts/ci-test.sh
  #         .github/scripts/ci-style.sh

  extended-tests-openjdk11:
    needs: binding-refs
    if: contains(github.event.pull_request.labels.*.name, 'PR-extended-testing')
    uses: ./.github/workflows/binding-tests-openjdk.yml
    with:
      repo: ${{ needs.binding-refs.outputs.openjdk11_binding_repo }}
      ref: ${{ needs.binding-refs.outputs.openjdk11_binding_ref }}
      test-script: ci-test-extended.sh

  extended-tests-openjdk21:
    needs: binding-refs
    if: contains(github.event.pull_request.labels.*.name, 'PR-extended-testing')
    uses: ./.github/workflows/binding-tests-openjdk.yml
    with:
      repo: ${{ needs.binding-refs.outputs.openjdk21_binding_repo }}
      ref: ${{ needs.binding-refs.outputs.openjdk21_binding_ref }}
      test-script: ci-test-extended.sh

  extended-tests-jikesrvm:
    runs-on: ubuntu-22.04
    needs: binding-refs
    if: contains(github.event.pull_request.labels.*.name, 'PR-extended-testing')
    steps:
      - name: Checkout MMTk Core
        uses: actions/checkout@v4
        with:
          path: mmtk-core
      - name: Checkout JikesRVM Binding
        uses: actions/checkout@v4
        with:
          repository: ${{ needs.binding-refs.outputs.jikesrvm_binding_repo }}
          path: mmtk-jikesrvm
          ref: ${{ needs.binding-refs.outputs.jikesrvm_binding_ref }}
      - name: Use mmtk-core Rust toolchain for bindings
        run: |
          cp mmtk-core/rust-toolchain mmtk-jikesrvm/mmtk
      - name: Setup
        run: |
          cd mmtk-jikesrvm
          ./.github/scripts/ci-checkout.sh
          ./.github/scripts/ci-setup.sh
          sed -i 's/^mmtk[[:space:]]=/#ci:mmtk=/g' mmtk/Cargo.toml
          sed -i 's/^#[[:space:]]mmtk/mmtk/g' mmtk/Cargo.toml
      - name: Overwrite MMTk core in JikesRVM binding
        run: |
          cp -r mmtk-core mmtk-jikesrvm/repos
      - name: Test
        run: |
          cd mmtk-jikesrvm
          export RUST_BACKTRACE=1
          ./.github/scripts/ci-test.sh
          ./.github/scripts/ci-style.sh

  extended-tests-julia:
    runs-on: ubuntu-22.04
    needs: binding-refs
    if: contains(github.event.pull_request.labels.*.name, 'PR-extended-testing')
    steps:
      - name: Checkout MMTk Core
        uses: actions/checkout@v4
        with:
          path: mmtk-core
      - name: Checkout Julia Binding
        uses: actions/checkout@v4
        with:
          repository: ${{ needs.binding-refs.outputs.julia_binding_repo }}
          path: mmtk-julia
          ref: ${{ needs.binding-refs.outputs.julia_binding_ref }}
      - name: Use mmtk-core Rust toolchain for bindings
        run: |
          cp mmtk-core/rust-toolchain mmtk-julia/mmtk
      - name: Setup
        run: |
          cd mmtk-julia
          ./.github/scripts/ci-checkout.sh ${{ needs.binding-refs.outputs.julia_vm_repo }} ${{ needs.binding-refs.outputs.julia_vm_ref }}
          ./.github/scripts/ci-setup.sh
          sed -i 's/^mmtk[[:space:]]=/#ci:mmtk=/g' mmtk/Cargo.toml
          sed -i 's/^#[[:space:]]mmtk/mmtk/g' mmtk/Cargo.toml
      # removing these two LLVM installations as they cause a conflict within bindgen
      - name: Hack to make bindgen work for Github images
        run: |
          sudo rm -rf /usr/lib/llvm-14
          sudo rm -rf /usr/lib/llvm-13
      - name: Overwrite MMTk core in Julia binding
        run: |
          mkdir -p mmtk-julia/repos/mmtk-core
          cp -r mmtk-core/* mmtk-julia/repos/mmtk-core
      - name: debug
        run: |
          ls mmtk-julia
          ls mmtk-julia/repos
          ls mmtk-julia/repos/mmtk-core
          cat mmtk-julia/mmtk/Cargo.toml
      - name: Test
        run: |
          cd mmtk-julia
          export RUST_BACKTRACE=1
          ./.github/scripts/ci-test.sh
          ./.github/scripts/ci-style.sh

  extended-tests-ruby:
    # Note: CRuby requires an existing installation of CRuby 3.1.0 or newer to build itself.
    # Ubuntu 22.04 only provides CRuby 3.0.  We need 24.04 or newer.
    runs-on: ubuntu-24.04
    needs: binding-refs
    if: contains(github.event.pull_request.labels.*.name, 'PR-extended-testing')
    strategy:
      fail-fast: true
      matrix:
        debug-level: ["debug", "release"]
    env:
      DEBUG_LEVEL: ${{ matrix.debug-level }}
    steps:
      - name: Checkout MMTk Core
        uses: actions/checkout@v4
        with:
          path: mmtk-core

      - name: Checkout MMTk Ruby binding
        uses: actions/checkout@v4
        with:
          repository: ${{ needs.binding-refs.outputs.ruby_binding_repo }}
          path: mmtk-ruby
          ref: ${{ needs.binding-refs.outputs.ruby_binding_ref }}

      - name: Setup script dependencies
        run: ./.github/scripts/ci-setup-script-deps.sh
        working-directory: mmtk-ruby

      - name: Determine Ruby repository and revision
        id: extract-ruby-revision
        run: python ./.github/scripts/extract-ruby-revision.py ./mmtk/Cargo.toml --github-output=$GITHUB_OUTPUT
        working-directory: mmtk-ruby

      - name: Checkout Ruby
        uses: actions/checkout@v4
        with:
          repository: ${{ steps.extract-ruby-revision.outputs.ruby_repo }}
          ref: ${{ steps.extract-ruby-revision.outputs.ruby_rev }}
          path: ruby

      - name: Override mmtk-core dependency for binding
        run: ./.github/scripts/ci-replace-mmtk-dep.sh ../mmtk-ruby/mmtk/Cargo.toml --mmtk-core-path .
        working-directory: mmtk-core

      - name: Setup environment
        run: ./.github/scripts/ci-setup.sh
        working-directory: mmtk-ruby

      - name: Build MMTk Ruby ${{ matrix.debug-level }}
        run: ./.github/scripts/ci-build.sh
        working-directory: mmtk-ruby

      - name: Run bootstrap tests (btest)
        run: ./.github/scripts/ci-btest.sh
        working-directory: mmtk-ruby

      - name: Run all tests (test-all)
        run: ./.github/scripts/ci-test-all.sh
        working-directory: mmtk-ruby