mmtk 0.32.0

MMTk is a framework for the design and implementation of high-performance and portable memory managers.
Documentation
name: Auto Merge Binding PRs

# Only trigger on push to master. The workflow needs to use repo secrets.
# Triggering on master can make sure we have secrets.
on:
  push:
    branches:
    - master

jobs:
  # Figure out the PR that is merged.
  get-merged-pr:
    runs-on: ubuntu-latest
    outputs:
      commit: ${{ steps.get-commit-hash.outputs.commit }}
      pr: ${{ steps.get-pr.outputs.pr }}
    steps:
      - id: get-commit-hash
        run: |
          echo "commit=${GITHUB_SHA}" >> "$GITHUB_OUTPUT"
          echo "Commit hash: ${GITHUB_SHA}"
      - id: get-pr
        run: |
          for n in {1..5}; do
              echo "Wait 30s then try get the pull request number"
              sleep 30

              echo "Pull request for the commit is below:"
              gh pr list --search "${GITHUB_SHA}" --state merged --repo mmtk/mmtk-core
              echo "Pull request for the commit is above."

              PR_NUMBER=$(gh pr list --search "${GITHUB_SHA}" --state merged --repo mmtk/mmtk-core --json number --jq '.[0].number')

              if [ -n "$PR_NUMBER" ] && [ "$PR_NUMBER" != "null" ]; then
                echo "Found PR: $PR_NUMBER"
                echo "pr=$PR_NUMBER" >> "$GITHUB_OUTPUT"
                echo "Output pr = $PR_NUMBER"
                exit 0
              fi

              echo "PR not found, retrying..."
          done
          echo "We can't find the merged PR for ${GITHUB_SHA}"
          exit 1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  # Figure out binding PRs.
  binding-refs:
    uses: ./.github/workflows/pr-binding-refs.yml
    needs: get-merged-pr
    with:
      pull_request: ${{ needs.get-merged-pr.outputs.pr }}

  check-merge-openjdk11-pr:
    uses: ./.github/workflows/auto-merge-inner.yml
    needs: [get-merged-pr, binding-refs]
    with:
      repo: ${{ needs.binding-refs.outputs.openjdk11_binding_repo }}
      base_repo: ${{ needs.binding-refs.outputs.openjdk11_binding_repo_default }}
      ref: ${{ needs.binding-refs.outputs.openjdk11_binding_ref }}
      base_ref: ${{ needs.binding-refs.outputs.openjdk11_binding_ref_default }}
      core_commit: ${{ needs.get-merged-pr.outputs.commit }}
      update_lockfile: cargo build
    secrets: inherit

  check-merge-openjdk21-pr:
    uses: ./.github/workflows/auto-merge-inner.yml
    needs: [get-merged-pr, binding-refs]
    with:
      repo: ${{ needs.binding-refs.outputs.openjdk21_binding_repo }}
      base_repo: ${{ needs.binding-refs.outputs.openjdk21_binding_repo_default }}
      ref: ${{ needs.binding-refs.outputs.openjdk21_binding_ref }}
      base_ref: ${{ needs.binding-refs.outputs.openjdk21_binding_ref_default }}
      core_commit: ${{ needs.get-merged-pr.outputs.commit }}
      update_lockfile: cargo build
    secrets: inherit

  check-merge-jikesrvm-pr:
    uses: ./.github/workflows/auto-merge-inner.yml
    needs: [get-merged-pr, binding-refs]
    with:
      repo: ${{ needs.binding-refs.outputs.jikesrvm_binding_repo }}
      base_repo: ${{ needs.binding-refs.outputs.jikesrvm_binding_repo_default }}
      ref: ${{ needs.binding-refs.outputs.jikesrvm_binding_ref }}
      base_ref: ${{ needs.binding-refs.outputs.jikesrvm_binding_ref_default }}
      core_commit: ${{ needs.get-merged-pr.outputs.commit }}
      # `cargo generate-lockfile` will update other dependencies. We avoid using it for the bindings.
      # But we do not have a good option for JikesRVM. The Rust project in JikesRVM needs some source files
      # that are generated during its build process. Unless we want to do a full build for JikesRVM, we cannot
      # use `cargo build`. So use `cargo generate-lockfile` instead.
      update_lockfile: cargo generate-lockfile
    secrets: inherit

  check-merge-v8-pr:
    uses: ./.github/workflows/auto-merge-inner.yml
    needs: [get-merged-pr, binding-refs]
    with:
      repo: ${{ needs.binding-refs.outputs.v8_binding_repo }}
      base_repo: ${{ needs.binding-refs.outputs.v8_binding_repo_default }}
      ref: ${{ needs.binding-refs.outputs.v8_binding_ref }}
      base_ref: ${{ needs.binding-refs.outputs.v8_binding_ref_default }}
      core_commit: ${{ needs.get-merged-pr.outputs.commit }}
      update_lockfile: cargo build --features nogc
    secrets: inherit

  check-merge-julia-pr:
    uses: ./.github/workflows/auto-merge-inner.yml
    needs: [get-merged-pr, binding-refs]
    with:
      repo: ${{ needs.binding-refs.outputs.julia_binding_repo }}
      base_repo: ${{ needs.binding-refs.outputs.julia_binding_repo_default }}
      ref: ${{ needs.binding-refs.outputs.julia_binding_ref }}
      base_ref: ${{ needs.binding-refs.outputs.julia_binding_ref_default }}
      core_commit: ${{ needs.get-merged-pr.outputs.commit }}
      # `cargo generate-lockfile` will update other dependencies. We avoid using it for the bindings.
      # mmtk-julia uses bindgen during building and requires the Julia repo. This is a similar situation
      # as mmtk-jikesrvm. To make thigns simpler, we just use `cargo generate-lockfile`.
      update_lockfile: cargo generate-lockfile
    secrets: inherit

  check-merge-ruby-pr:
    uses: ./.github/workflows/auto-merge-inner.yml
    needs: [get-merged-pr, binding-refs]
    with:
      repo: ${{ needs.binding-refs.outputs.ruby_binding_repo }}
      base_repo: ${{ needs.binding-refs.outputs.ruby_binding_repo_default }}
      ref: ${{ needs.binding-refs.outputs.ruby_binding_ref }}
      base_ref: ${{ needs.binding-refs.outputs.ruby_binding_ref_default }}
      core_commit: ${{ needs.get-merged-pr.outputs.commit }}
      update_lockfile: cargo build
    secrets: inherit