97ec57e667
### What changes were proposed in this pull request? This PR proposes to handle 404 not found, see https://github.com/apache/spark/pull/32255/checks?check_run_id=2390446579 as an example. If a fork does not have any previous workflow runs, it seems throwing 404 error instead of empty runs. ### Why are the changes needed? To show the correct guidance to contributors. ### Does this PR introduce _any_ user-facing change? No, dev-only. ### How was this patch tested? Manually tested at https://github.com/HyukjinKwon/spark/pull/48. See https://github.com/HyukjinKwon/spark/runs/2391469416 as an example. Closes #32258 from HyukjinKwon/SPARK-35120-followup. Authored-by: HyukjinKwon <gurwls223@apache.org> Signed-off-by: Gengliang Wang <ltnwgl@gmail.com>
126 lines
5.1 KiB
YAML
126 lines
5.1 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]
|
|
|
|
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,
|
|
})
|
|
}
|