diff --git a/.github/workflows/auto-merge.yml b/.github/workflows/auto-merge.yml index dbed685acd..4a450b056f 100644 --- a/.github/workflows/auto-merge.yml +++ b/.github/workflows/auto-merge.yml @@ -31,14 +31,26 @@ jobs: with: pull_request: ${{ needs.get-merged-pr.outputs.pr }} - check-merge-openjdk-pr: + check-merge-openjdk11-pr: uses: ./.github/workflows/auto-merge-inner.yml needs: [get-merged-pr, binding-refs] with: - repo: ${{ needs.binding-refs.outputs.openjdk_binding_repo }} - base_repo: ${{ needs.binding-refs.outputs.openjdk_binding_repo_default }} - ref: ${{ needs.binding-refs.outputs.openjdk_binding_ref }} - base_ref: ${{ needs.binding-refs.outputs.openjdk_binding_ref_default }} + 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 diff --git a/.github/workflows/extended-tests-bindings.yml b/.github/workflows/extended-tests-bindings.yml index 42938aebf4..4f10a3c6a0 100644 --- a/.github/workflows/extended-tests-bindings.yml +++ b/.github/workflows/extended-tests-bindings.yml @@ -62,13 +62,22 @@ jobs: # .github/scripts/ci-test.sh # .github/scripts/ci-style.sh - extended-tests-openjdk: + 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.openjdk_binding_repo }} - ref: ${{ needs.binding-refs.outputs.openjdk_binding_ref }} + 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: diff --git a/.github/workflows/merge-check.yml b/.github/workflows/merge-check.yml index 8dd53785e9..70d2a3ddc8 100644 --- a/.github/workflows/merge-check.yml +++ b/.github/workflows/merge-check.yml @@ -26,7 +26,8 @@ env: "style-check/x86_64-unknown-linux-gnu/stable", "style-check/i686-unknown-linux-gnu/stable", "style-check/x86_64-apple-darwin/stable", - "extended-tests-openjdk / test", + "extended-tests-openjdk11 / test", + "extended-tests-openjdk21 / test", "extended-tests-v8", "extended-tests-jikesrvm", "extended-tests-julia", diff --git a/.github/workflows/micro-bm.yml b/.github/workflows/micro-bm.yml index 59b37cbf20..b54e55b921 100644 --- a/.github/workflows/micro-bm.yml +++ b/.github/workflows/micro-bm.yml @@ -27,6 +27,9 @@ jobs: uses: qinsoon/comment-env-vars@1.1.0 with: token: ${{ secrets.GITHUB_TOKEN }} + # TODO: If we plan to resurrect micro-bm, we need to get the trunk name from a unique .yml + # file so that all GitHub Actions scripts agree upon which branch is the trunk (e.g. + # jdk-11, jdk-21, ...). default_env: 'OPENJDK_BINDING_TRUNK_REF=master,MMTK_CORE_TRUNK_REF=master,OPENJDK_BINDING_BRANCH_REF=master,MMTK_CORE_BRANCH_REF=${{ github.event.pull_request.head.sha }}' # Trunk # - binding diff --git a/.github/workflows/minimal-tests-bindings.yml b/.github/workflows/minimal-tests-bindings.yml index 098f90a2a7..e47b67726f 100644 --- a/.github/workflows/minimal-tests-bindings.yml +++ b/.github/workflows/minimal-tests-bindings.yml @@ -39,10 +39,18 @@ jobs: with: pull_request: ${{ needs.grace-period.outputs.pr-number }} - minimal-tests-openjdk: + minimal-tests-openjdk11: needs: binding-refs uses: ./.github/workflows/binding-tests-openjdk.yml with: - repo: ${{ needs.binding-refs.outputs.openjdk_binding_repo }} - ref: ${{ needs.binding-refs.outputs.openjdk_binding_ref }} + repo: ${{ needs.binding-refs.outputs.openjdk11_binding_repo }} + ref: ${{ needs.binding-refs.outputs.openjdk11_binding_ref }} + test-script: ci-test-minimal.sh + + minimal-tests-openjdk21: + needs: binding-refs + 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-minimal.sh diff --git a/.github/workflows/perf-compare-ci.yml b/.github/workflows/perf-compare-ci.yml index 9484c46ffe..21b8a12e86 100644 --- a/.github/workflows/perf-compare-ci.yml +++ b/.github/workflows/perf-compare-ci.yml @@ -177,13 +177,15 @@ jobs: needs: [binding-refs, mmtk-refs] timeout-minutes: 1440 steps: - # Trunk - we always use master from the mmtk org + # Trunk - we use the default repo and branch as specified in pr-binding-refs. + # TODO: We currently use OpenJDK 11 for performance comparison. + # We should switch to OpenJDK 21 when we are ready, and start a new epoch. # - binding - name: Checkout OpenJDK Binding Trunk uses: actions/checkout@v4 with: - repository: mmtk/mmtk-openjdk - ref: master + repository: ${{ needs.binding-refs.outputs.openjdk11_binding_repo_default }} + ref: ${{ needs.binding-refs.outputs.openjdk11_binding_ref_default }} path: mmtk-openjdk-trunk - name: Checkout OpenJDK for Trunk working-directory: mmtk-openjdk-trunk @@ -200,8 +202,10 @@ jobs: - name: Checkout OpenJDK Binding Branch uses: actions/checkout@v4 with: - repository: ${{ needs.binding-refs.outputs.openjdk_binding_repo }} - ref: ${{ needs.binding-refs.outputs.openjdk_binding_ref }} + # TODO: We currently use OpenJDK 11 for performance comparison. + # We should switch to OpenJDK 21 when we are ready, and start a new epoch. + repository: ${{ needs.binding-refs.outputs.openjdk11_binding_repo }} + ref: ${{ needs.binding-refs.outputs.openjdk11_binding_ref }} path: mmtk-openjdk-branch - name: Checkout OpenJDK for Branch working-directory: mmtk-openjdk-branch diff --git a/.github/workflows/perf-regression-ci.yml b/.github/workflows/perf-regression-ci.yml index 50d9a2bd43..27f6fbd792 100644 --- a/.github/workflows/perf-regression-ci.yml +++ b/.github/workflows/perf-regression-ci.yml @@ -129,6 +129,9 @@ jobs: uses: actions/checkout@v4 with: repository: mmtk/mmtk-openjdk + # TODO: We currently use OpenJDK 11 for performance comparison. + # We should switch to OpenJDK 21 when we are ready, and start a new epoch. + ref: jdk-11 path: latest/mmtk-openjdk - name: Checkout OpenJDK (latest) working-directory: latest/mmtk-openjdk diff --git a/.github/workflows/pr-binding-refs.yml b/.github/workflows/pr-binding-refs.yml index d34caaabd5..b170122267 100644 --- a/.github/workflows/pr-binding-refs.yml +++ b/.github/workflows/pr-binding-refs.yml @@ -12,10 +12,16 @@ # 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 -# OPENJDK_BINDING_REPO=xx/xx -# OPENJDK_BINDING_REF=xxxxxx +# 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 @@ -37,18 +43,31 @@ on: type: string required: true outputs: - openjdk_binding_repo: - description: "The repository of OpenJDK binding, such as {user}/{repo}" - value: ${{ jobs.binding-refs.outputs.openjdk_binding_repo}} - openjdk_binding_repo_default: - description: "The default repository of OpenJDK binding, such as {user}/{repo}" - value: ${{ jobs.binding-refs.outputs.openjdk_binding_repo_default }} - openjdk_binding_ref: - description: "The git ref of OpenJDK binding, such as sha and branch name" - value: ${{ jobs.binding-refs.outputs.openjdk_binding_ref}} - openjdk_binding_ref_default: - description: "The default git ref of OpenJDK binding, such as sha and branch name" - value: ${{ jobs.binding-refs.outputs.openjdk_binding_ref_default }} + 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}" @@ -121,8 +140,10 @@ jobs: binding-refs: runs-on: ubuntu-latest env: - OPENJDK_BINDING_REPO_DEFAULT: mmtk/mmtk-openjdk - OPENJDK_BINDING_REF_DEFAULT: master + 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 @@ -134,10 +155,14 @@ jobs: RUBY_BINDING_REPO_DEFAULT: mmtk/mmtk-ruby RUBY_BINDING_REF_DEFAULT: master outputs: - openjdk_binding_repo: ${{ steps.print.outputs.openjdk_binding_repo }} - openjdk_binding_repo_default: ${{ env.OPENJDK_BINDING_REPO_DEFAULT }} - openjdk_binding_ref: ${{ steps.print.outputs.openjdk_binding_ref }} - openjdk_binding_ref_default: ${{ env.OPENJDK_BINDING_REF_DEFAULT }} + 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 }} @@ -164,11 +189,33 @@ jobs: with: pull_request: ${{ inputs.pull_request }} token: ${{ secrets.GITHUB_TOKEN }} - default_env: 'OPENJDK_BINDING_REPO=${{ env.OPENJDK_BINDING_REPO_DEFAULT }},OPENJDK_BINDING_REF=${{ env.OPENJDK_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 }}' + # 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 "openjdk_binding_repo=${{ env.OPENJDK_BINDING_REPO }}" >> $GITHUB_OUTPUT - echo "openjdk_binding_ref=${{ env.OPENJDK_BINDING_REF }}" >> $GITHUB_OUTPUT + 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 diff --git a/.github/workflows/stress-ci.yml b/.github/workflows/stress-ci.yml index f7904bb2d0..fa00229201 100644 --- a/.github/workflows/stress-ci.yml +++ b/.github/workflows/stress-ci.yml @@ -110,6 +110,9 @@ jobs: uses: actions/checkout@v4 with: repository: mmtk/mmtk-openjdk + # TODO: If we plan to resurrect stress-ci, we need to get the trunk name from a unique .yml + # file so that all GitHub Actions scripts agree upon which branch is the trunk (e.g. + # jdk-11, jdk-21, ...). token: ${{ secrets.CI_ACCESS_TOKEN }} path: mmtk-openjdk submodules: true diff --git a/docs/team/pull_request.md b/docs/team/pull_request.md index c89b0afd52..fed48d0a67 100644 --- a/docs/team/pull_request.md +++ b/docs/team/pull_request.md @@ -14,11 +14,18 @@ can be merged. If an MMTk core PR should be tested with other bindings PRs, one can specify the binding branch that should be tested with by adding a comment like below (see https://github.com/mmtk/mmtk-core/blob/master/.github/workflows/pr-binding-refs.yml). If there are multiple comments that match, the first one is effective. If the info is missing for -a binding, the default repo (`mmtk/mmtk-X`) and branch (`master`) will be used instead. +a binding, the default repo (`mmtk/mmtk-X`) and branch (`master` for most bindings) will be used instead. + +Note that OpenJDK 11 and OpenJDK 21 are considered two bindings. Their default repos are both +`mmtk/mmtk-openjdk`, but their default branches are `jdk-11` and `jdk-21`, respectively. We can +speficy the repo and branch of one of OpenJDK 11 and OpenJDK 21, or both. + ``` binding-refs -OPENJDK_BINDING_REPO=xx/xx -OPENJDK_BINDING_REF=xxxxxx +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