f3dc549d9c
### What changes were proposed in this pull request? This patch uses the "concurrency" syntax to replace the "cancel job" workflow: - .github/workflows/benchmark.yml - .github/workflows/labeler.yml - .github/workflows/notify_test_workflow.yml - .github/workflows/test_report.yml Remove the .github/workflows/cancel_duplicate_workflow_runs.yml Note that the push/schedule based job are not changed to keep the same config ina4b70758d3
: - .github/workflows/build_and_test.yml - .github/workflows/publish_snapshot.yml - .github/workflows/stale.yml - .github/workflows/update_build_status.yml ### Why are the changes needed? We are using [cancel_duplicate_workflow_runs](a70e66ecfa/.github/workflows/cancel_duplicate_workflow_runs.yml (L1)
) job to cancel previous jobs when a new job is queued. Now, it has been supported by the github action by using ["concurrency"](https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#concurrency) syntax to make sure only a single job or workflow using the same concurrency group. Related: https://github.com/apache/arrow/pull/10416 and https://github.com/potiuk/cancel-workflow-runs ### Does this PR introduce _any_ user-facing change? No ### How was this patch tested? triger the PR manaully Closes #32806 from Yikun/SPARK-X. Authored-by: Yikun Jiang <yikunkero@gmail.com> Signed-off-by: Hyukjin Kwon <gurwls223@apache.org>
130 lines
5.2 KiB
YAML
130 lines
5.2 KiB
YAML
#
|
|
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance
|
|
# with the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing,
|
|
# software distributed under the License is distributed on an
|
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
# KIND, either express or implied. See the License for the
|
|
# specific language governing permissions and limitations
|
|
# under the License.
|
|
#
|
|
|
|
# Intentionally has a general name.
|
|
# because the test status check created in GitHub Actions
|
|
# currently randomly picks any associated workflow.
|
|
# So, the name was changed to make sense in that context too.
|
|
# See also https://github.community/t/specify-check-suite-when-creating-a-checkrun/118380/10
|
|
name: On pull request update
|
|
on:
|
|
pull_request_target:
|
|
types: [opened, reopened, synchronize]
|
|
|
|
concurrency:
|
|
group: ${{ github.repository }}-${{ github.ref }}-${{ github.workflow }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
notify:
|
|
name: Notify test workflow
|
|
runs-on: ubuntu-20.04
|
|
steps:
|
|
- name: "Notify test workflow"
|
|
uses: actions/github-script@v3
|
|
if: ${{ github.base_ref == 'master' }}
|
|
with:
|
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
script: |
|
|
const endpoint = 'GET /repos/:owner/:repo/actions/workflows/:id/runs?&branch=:branch'
|
|
|
|
// TODO: Should use pull_request.user and pull_request.user.repos_url?
|
|
// If a different person creates a commit to another forked repo,
|
|
// it wouldn't be able to detect.
|
|
const params = {
|
|
owner: context.payload.pull_request.head.repo.owner.login,
|
|
repo: context.payload.pull_request.head.repo.name,
|
|
id: 'build_and_test.yml',
|
|
branch: context.payload.pull_request.head.ref,
|
|
}
|
|
|
|
console.log('Ref: ' + context.payload.pull_request.head.ref)
|
|
console.log('SHA: ' + context.payload.pull_request.head.sha)
|
|
|
|
// Wait 3 seconds to make sure the fork repository triggered a workflow.
|
|
await new Promise(r => setTimeout(r, 3000))
|
|
|
|
let runs
|
|
try {
|
|
runs = await github.request(endpoint, params)
|
|
} catch (error) {
|
|
console.error(error)
|
|
// Assume that runs were not found.
|
|
}
|
|
|
|
const name = 'Build and test'
|
|
const head_sha = context.payload.pull_request.head.sha
|
|
let status = 'queued'
|
|
|
|
if (!runs || runs.data.workflow_runs.length === 0) {
|
|
status = 'completed'
|
|
const conclusion = 'action_required'
|
|
|
|
github.checks.create({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
name: name,
|
|
head_sha: head_sha,
|
|
status: status,
|
|
conclusion: conclusion,
|
|
output: {
|
|
title: 'Workflow run detection failed',
|
|
summary: `
|
|
Unable to detect the workflow run for testing the changes in your PR.
|
|
|
|
1. If you did not enable GitHub Actions in your forked repository, please enable it. See also [Disabling or limiting GitHub Actions for a repository](https://docs.github.com/en/github/administering-a-repository/disabling-or-limiting-github-actions-for-a-repository) for more details.
|
|
2. It is possible your branch is based on the old \`master\` branch in Apache Spark, please sync your branch to the latest master branch. For example as below:
|
|
\`\`\`bash
|
|
git fetch upstream
|
|
git rebase upstream/master
|
|
git push origin YOUR_BRANCH --force
|
|
\`\`\``
|
|
}
|
|
})
|
|
} else {
|
|
const runID = runs.data.workflow_runs[0].id
|
|
|
|
if (runs.data.workflow_runs[0].head_sha != context.payload.pull_request.head.sha) {
|
|
throw new Error('There was a new unsynced commit pushed. Please retrigger the workflow.');
|
|
}
|
|
|
|
const runUrl = 'https://github.com/'
|
|
+ context.payload.pull_request.head.repo.full_name
|
|
+ '/actions/runs/'
|
|
+ runID
|
|
|
|
github.checks.create({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
name: name,
|
|
head_sha: head_sha,
|
|
status: status,
|
|
output: {
|
|
title: 'Test results',
|
|
summary: '[See test results](' + runUrl + ')',
|
|
text: JSON.stringify({
|
|
owner: context.payload.pull_request.head.repo.owner.login,
|
|
repo: context.payload.pull_request.head.repo.name,
|
|
run_id: runID
|
|
})
|
|
},
|
|
details_url: runUrl,
|
|
})
|
|
}
|