diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index a1a5ab5b70f5..98855f4668b4 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -17,11 +17,18 @@ # under the License. # -name: "Pull Request Labeler" +# 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.amrom.workers.devmunity/t/specify-check-suite-when-creating-a-checkrun/118380/10 + +name: "On pull requests" on: pull_request_target jobs: label: + name: Label pull requests runs-on: ubuntu-latest steps: # In order to get back the negated matches like in the old config, diff --git a/.github/workflows/notify_test_workflow.yml b/.github/workflows/notify_test_workflow.yml index 2e459ca8204d..0e30cd2b5442 100644 --- a/.github/workflows/notify_test_workflow.yml +++ b/.github/workflows/notify_test_workflow.yml @@ -1,10 +1,35 @@ -name: Notify test workflow +# +# 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.amrom.workers.devmunity/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" @@ -14,6 +39,10 @@ jobs: 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 would be able to detect. const params = { owner: context.payload.pull_request.head.repo.owner.login, repo: context.payload.pull_request.head.repo.name, @@ -22,19 +51,28 @@ jobs: } const runs = await github.request(endpoint, params) - var runID = runs.data.workflow_runs[0].id + const runID = runs.data.workflow_runs[0].id + const runUrl = "https://github.com/" + + context.payload.pull_request.head.repo.full_name + + "/actions/runs/" + + runID - var msg = "**[Test build #" + runID + "]" - + "(https://github.com/" + context.payload.pull_request.head.repo.full_name - + "/actions/runs/" + runID + ")** " - + "for PR " + context.issue.number - + " at commit [`" + context.payload.pull_request.head.sha.substring(0, 7) + "`]" - + "(https://github.com/" + context.payload.pull_request.head.repo.full_name - + "/commit/" + context.payload.pull_request.head.sha + ")." + const name = 'Build and test' + const head_sha = context.payload.pull_request.head.sha + const status = 'in_progress' - github.issues.createComment({ - issue_number: context.issue.number, - owner: context.payload.repository.owner.login, - repo: context.payload.repository.name, - body: msg + github.checks.create({ + ...context.repo, + name, + head_sha, + status, + output: { + title: 'Test results', + summary: runUrl, + text: JSON.stringify({ + owner: context.payload.pull_request.head.repo.owner.login, + repo: context.payload.pull_request.head.repo.name, + run_id: runID + }) + } }) diff --git a/.github/workflows/update_build_status.yml b/.github/workflows/update_build_status.yml new file mode 100644 index 000000000000..8b6cb73608f2 --- /dev/null +++ b/.github/workflows/update_build_status.yml @@ -0,0 +1,90 @@ +# +# 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.amrom.workers.devmunity/t/specify-check-suite-when-creating-a-checkrun/118380/10 +name: Scheduled + +on: + schedule: + - cron: "*/15 * * * *" + +jobs: + update: + name: Update build status + runs-on: ubuntu-20.04 + steps: + - name: "Update build status" + uses: actions/github-script@v3 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const endpoint = "GET /repos/:owner/:repo/pulls?state=:state" + const params = { + owner: context.repo.owner, + repo: context.repo.repo, + state: 'open' + } + + const maybeReady = ["clean", "has_hooks", "unknown", "unstable"]; + const notReady = ["dirty", "draft"]; + + for await (const prs of github.paginate.iterator(endpoint,params)) { + for await (const pr of prs.data) { + if (pr.mergeable_state == null || maybeReady.includes(pr.mergeable_state)) { + const checkRuns = await github.request('GET /repos/{owner}/{repo}/commits/{ref}/check-runs', { + owner: context.repo.owner, + repo: context.repo.repo, + ref: pr.head.sha + }) + + for await (const cr of checkRuns.data.check_runs) { + if (cr.name == "Build and test") { + const params = JSON.parse(cr.output.text) // text contains parameters to make request in JSON + const run = await github.request('GET /repos/{owner}/{repo}/actions/runs/{run_id}', params) + + // Keep syncing the status of the checks + if (run.data.status == "completed") { + const response = await github.request('PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}', { + owner: context.repo.owner, + repo: context.repo.repo, + check_run_id: cr.id, + output: cr.output, + status: run.data.status, + conclusion: run.data.conclusion + }) + } else { + const response = await github.request('PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}', { + owner: context.repo.owner, + repo: context.repo.repo, + check_run_id: cr.id, + output: cr.output, + status: run.data.status, + }) + } + + break + } + } + } + } + } diff --git a/README.md b/README.md index aa7d1dd338be..6f75edbdfd67 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Apache Spark +# Apache Spark (With out security permission) with append commit Spark is a unified analytics engine for large-scale data processing. It provides high-level APIs in Scala, Java, Python, and R, and an optimized engine that