You've already forked library-registry
mirror of
https://github.com/arduino/library-registry.git
synced 2025-07-29 14:01:15 +03:00
Bumps [carlosperate/download-file-action](https://github.com/carlosperate/download-file-action) from 1 to 2. - [Release notes](https://github.com/carlosperate/download-file-action/releases) - [Commits](https://github.com/carlosperate/download-file-action/compare/v1...v2) --- updated-dependencies: - dependency-name: carlosperate/download-file-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
689 lines
27 KiB
YAML
689 lines
27 KiB
YAML
name: Manage PRs
|
|
|
|
env:
|
|
SUBMISSION_PARSER_VERSION: 1.1.1 # See: https://github.com/arduino/library-manager-submission-parser/releases
|
|
MAINTAINERS: |
|
|
# GitHub user names to request reviews from in cases where PRs can't be managed automatically.
|
|
- per1234
|
|
CHECK_SUBMISSIONS_FAIL_FLAG_ARTIFACT: check-submissions-failed
|
|
ERROR_MESSAGE_PREFIX: ":x: **ERROR:** "
|
|
|
|
on:
|
|
# pull_request_target trigger is used instead of pull_request so the token will have the write permissions needed to
|
|
# comment and merge.
|
|
# Note that this means the version of the workflow from the PR base ref will be used as opposed to the head ref, as is
|
|
# the case with pull_request triggered workflows.
|
|
# See: https://docs.github.com/actions/reference/events-that-trigger-workflows#pull_request_target
|
|
pull_request_target:
|
|
types:
|
|
- opened
|
|
- ready_for_review
|
|
- synchronize
|
|
issue_comment:
|
|
types:
|
|
- created
|
|
- edited
|
|
|
|
concurrency:
|
|
group: ${{ github.event.pull_request.number }}${{ github.event.issue.number }}
|
|
cancel-in-progress: >-
|
|
${{
|
|
(
|
|
github.event_name == 'pull_request_target' &&
|
|
github.event.pull_request.draft == false
|
|
) ||
|
|
(
|
|
github.event_name == 'issue_comment' &&
|
|
github.event.issue.pull_request != '' &&
|
|
github.event.issue.state == 'open' &&
|
|
contains(github.event.comment.body, 'ArduinoBot')
|
|
)
|
|
}}
|
|
|
|
jobs:
|
|
diff:
|
|
if: >
|
|
(
|
|
github.event_name == 'pull_request_target' &&
|
|
github.event.pull_request.draft == false
|
|
) ||
|
|
(
|
|
github.event_name == 'issue_comment' &&
|
|
github.event.issue.pull_request != '' &&
|
|
github.event.issue.state == 'open' &&
|
|
contains(github.event.comment.body, 'ArduinoBot')
|
|
)
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
artifact: ${{ steps.configuration.outputs.artifact }}
|
|
path: ${{ steps.configuration.outputs.path }}
|
|
filename: ${{ steps.configuration.outputs.filename }}
|
|
head: ${{ steps.head.outputs.head }}
|
|
|
|
env:
|
|
# See: https://docs.github.com/rest/reference/pulls#custom-media-types-for-pull-requests
|
|
DIFF_IDENTIFIER: diff
|
|
JSON_IDENTIFIER: raw+json
|
|
|
|
steps:
|
|
- name: Set configuration outputs
|
|
id: configuration
|
|
run: |
|
|
echo "::set-output name=artifact::diff"
|
|
echo "::set-output name=path::${{ runner.temp }}"
|
|
echo "::set-output name=filename::${{ env.DIFF_IDENTIFIER }}"
|
|
|
|
- name: Comment on comment trigger to provide feedback
|
|
if: github.event_name == 'issue_comment'
|
|
uses: octokit/request-action@v2.x
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
# NOTE: "Unexpected input(s) ..." warnings for the arbitrary octokit/request-action inputs are normal and
|
|
# expected.
|
|
route: POST /repos/{owner}/{repo}/issues/{issue_number}/comments
|
|
owner: ${{ github.repository_owner }}
|
|
repo: ${{ github.event.repository.name }}
|
|
issue_number: ${{ github.event.issue.number }}
|
|
body: |
|
|
|
|
|
Hello! I'm checking your submission again.
|
|
|
|
- name: Get PR data
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
# Two API requests are necessary, one for the PR diff and another for the metadata.
|
|
# It's necessary to reference both pull_request.number and issue.number because only one of the two are
|
|
# defined depending on whether the workflow is triggered by PR or comment event.
|
|
parallel \
|
|
' \
|
|
curl \
|
|
--fail \
|
|
--output "${{ steps.configuration.outputs.path }}/{}" \
|
|
--header "Authorization: token $GITHUB_TOKEN" \
|
|
--header "Accept: application/vnd.github.v3.{}" \
|
|
https://api.github.com/repos/${{ github.repository_owner }}/${{ github.event.repository.name }}/pulls/${{ github.event.pull_request.number }}${{ github.event.issue.number }}
|
|
' \
|
|
::: \
|
|
${{ env.DIFF_IDENTIFIER }} \
|
|
${{ env.JSON_IDENTIFIER }}
|
|
|
|
- name: Get head SHA of diff
|
|
id: head
|
|
run: echo "::set-output name=head::$(jq -c .head.sha "${{ steps.configuration.outputs.path }}/${{ env.JSON_IDENTIFIER }}")"
|
|
|
|
- name: Upload diff file to workflow artifact
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
path: ${{ steps.configuration.outputs.path }}/${{ steps.configuration.outputs.filename }}
|
|
name: ${{ steps.configuration.outputs.artifact }}
|
|
|
|
parse:
|
|
needs:
|
|
- diff
|
|
runs-on: ubuntu-latest
|
|
|
|
outputs:
|
|
type: ${{ steps.parse-request.outputs.type }}
|
|
error: ${{ steps.parse-request.outputs.error }}
|
|
arduinoLintLibraryManagerSetting: ${{ steps.parse-request.outputs.arduinoLintLibraryManagerSetting }}
|
|
submissions: ${{ steps.parse-request.outputs.submissions }}
|
|
index-entry: ${{ steps.parse-request.outputs.index-entry }}
|
|
indexer-logs-urls: ${{ steps.parse-request.outputs.indexer-logs-urls }}
|
|
|
|
steps:
|
|
- name: Checkout local repository
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Download submission parser
|
|
id: download-parser
|
|
uses: carlosperate/download-file-action@v2
|
|
with:
|
|
file-url: https://github.com/arduino/library-registry-submission-parser/releases/download/${{ env.SUBMISSION_PARSER_VERSION }}/parser
|
|
location: ${{ runner.temp }}
|
|
|
|
- name: Download diff
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
path: ${{ needs.diff.outputs.path }}
|
|
name: ${{ needs.diff.outputs.artifact }}
|
|
|
|
- name: Remove no longer needed artifact
|
|
uses: geekyeggo/delete-artifact@v2
|
|
with:
|
|
name: ${{ needs.diff.outputs.artifact }}
|
|
|
|
- name: Parse request
|
|
id: parse-request
|
|
run: |
|
|
chmod u+x "${{ steps.download-parser.outputs.file-path }}"
|
|
REQUEST="$( \
|
|
"${{ steps.download-parser.outputs.file-path }}" \
|
|
--diffpath="${{ needs.diff.outputs.path }}/${{ needs.diff.outputs.filename }}" \
|
|
--repopath="${{ github.workspace }}" \
|
|
--listname="repositories.txt" \
|
|
)"
|
|
# Due to limitations of the GitHub Actions workflow system, dedicated outputs must be created for use in
|
|
# certain workflow fields.
|
|
echo "::set-output name=type::$(echo "$REQUEST" | jq -r -c '.type')"
|
|
echo "::set-output name=error::$(echo "$REQUEST" | jq -r -c '.error')"
|
|
echo "::set-output name=arduinoLintLibraryManagerSetting::$(echo "$REQUEST" | jq -r -c '.arduinoLintLibraryManagerSetting')"
|
|
echo "::set-output name=submissions::$(echo "$REQUEST" | jq -c '.submissions')"
|
|
echo "::set-output name=index-entry::$(echo "$REQUEST" | jq -r -c '.indexEntry')"
|
|
echo "::set-output name=indexer-logs-urls::$(echo "$REQUEST" | jq -r -c '.indexerLogsURLs')"
|
|
|
|
label:
|
|
needs:
|
|
- parse
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Label PR
|
|
uses: octokit/request-action@v2.x
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
route: PUT /repos/{owner}/{repo}/issues/{issue_number}/labels
|
|
owner: ${{ github.repository_owner }}
|
|
repo: ${{ github.event.repository.name }}
|
|
issue_number: ${{ github.event.pull_request.number }}${{ github.event.issue.number }}
|
|
labels: |
|
|
- "topic: ${{ needs.parse.outputs.type }}"
|
|
|
|
parse-fail:
|
|
needs:
|
|
- parse
|
|
if: needs.parse.outputs.error != ''
|
|
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Comment on error detected while parsing PR
|
|
uses: octokit/request-action@v2.x
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
route: POST /repos/{owner}/{repo}/issues/{issue_number}/comments
|
|
owner: ${{ github.repository_owner }}
|
|
repo: ${{ github.event.repository.name }}
|
|
issue_number: ${{ github.event.pull_request.number }}${{ github.event.issue.number }}
|
|
body: |
|
|
|
|
|
Hi @${{ github.actor }}
|
|
A problem was found with your pull request:
|
|
|
|
${{ env.ERROR_MESSAGE_PREFIX }}${{ needs.parse.outputs.error }}
|
|
|
|
Please resolve this error. The checks will automatically run again once that is done.
|
|
|
|
More information:
|
|
https://github.com/${{ github.repository }}/blob/main/README.md#if-the-problem-is-with-the-pull-request
|
|
|
|
check-submissions:
|
|
name: Check ${{ matrix.submission.submissionURL }}
|
|
needs:
|
|
- parse
|
|
if: >
|
|
needs.parse.outputs.type == 'submission' ||
|
|
needs.parse.outputs.type == 'modification'
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
fail-fast: false
|
|
|
|
# A matrix job will run for each of the submission URLs
|
|
matrix:
|
|
submission: ${{ fromJson(needs.parse.outputs.submissions) }}
|
|
|
|
steps:
|
|
- name: Set environment variables
|
|
run: |
|
|
echo "JSON_REPORT_PATH=${{ runner.temp }}/report.json" >> "$GITHUB_ENV"
|
|
echo "TEXT_REPORT_PATH=${{ runner.temp }}/report.txt" >> "$GITHUB_ENV"
|
|
echo "ARDUINO_LINT_INSTALLATION_PATH=${{ runner.temp }}/arduino-lint" >> "$GITHUB_ENV"
|
|
echo "PASS=true" >> "$GITHUB_ENV" # This variable stores the checks result
|
|
echo "FAIL_FLAG_PATH=${{ runner.temp }}/.check-submissions-failed" >> "$GITHUB_ENV"
|
|
|
|
# Submission PRs can be handled without maintainer involvement
|
|
- name: Remove prior review requests
|
|
uses: octokit/request-action@v2.x
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
route: DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers
|
|
owner: ${{ github.repository_owner }}
|
|
repo: ${{ github.event.repository.name }}
|
|
pull_number: ${{ github.event.pull_request.number }}${{ github.event.issue.number }}
|
|
reviewers: ${{ env.MAINTAINERS }}
|
|
|
|
- name: Comment on error detected while parsing submission
|
|
if: matrix.submission.error != ''
|
|
uses: octokit/request-action@v2.x
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
route: POST /repos/{owner}/{repo}/issues/{issue_number}/comments
|
|
owner: ${{ github.repository_owner }}
|
|
repo: ${{ github.event.repository.name }}
|
|
issue_number: ${{ github.event.pull_request.number }}${{ github.event.issue.number }}
|
|
body: |
|
|
|
|
|
A problem was found with your submission ${{ matrix.submission.submissionURL }}
|
|
|
|
${{ env.ERROR_MESSAGE_PREFIX }}${{ matrix.submission.error }}
|
|
|
|
- name: Set checks result to fail if error detected by submission parser
|
|
if: matrix.submission.error != ''
|
|
run: echo "PASS=false" >> "$GITHUB_ENV"
|
|
|
|
- name: Install Arduino Lint
|
|
if: env.PASS == 'true'
|
|
run: |
|
|
mkdir --parents "${{ env.ARDUINO_LINT_INSTALLATION_PATH }}"
|
|
curl \
|
|
-fsSL \
|
|
https://raw.githubusercontent.com/arduino/arduino-lint/main/etc/install.sh \
|
|
| \
|
|
BINDIR="${{ env.ARDUINO_LINT_INSTALLATION_PATH }}" \
|
|
sh
|
|
|
|
# actions/checkout can't be used because it only supports GitHub repos, while libraries may use other Git hosts
|
|
- name: Clone submission
|
|
if: env.PASS == 'true'
|
|
run: |
|
|
git clone \
|
|
--branch ${{ matrix.submission.tag }} \
|
|
--depth 1 ${{ matrix.submission.normalizedURL }} \
|
|
"${{ matrix.submission.repositoryName }}"
|
|
|
|
- name: Lint submission
|
|
id: arduino-lint
|
|
if: env.PASS == 'true'
|
|
continue-on-error: true # Error on linter rule violations is expected
|
|
run: |
|
|
export ARDUINO_LINT_OFFICIAL="${{ matrix.submission.official }}"
|
|
|
|
"${{ env.ARDUINO_LINT_INSTALLATION_PATH }}/arduino-lint" \
|
|
--compliance=permissive \
|
|
--format=text \
|
|
--library-manager=${{ needs.parse.outputs.arduinoLintLibraryManagerSetting }} \
|
|
--project-type=library \
|
|
--recursive=false \
|
|
--report-file="${{ env.JSON_REPORT_PATH }}" \
|
|
"${{ matrix.submission.repositoryName }}" > \
|
|
"${{ env.TEXT_REPORT_PATH }}"
|
|
|
|
- name: Read Arduino Lint reports
|
|
id: read-lint-report
|
|
if: env.PASS == 'true'
|
|
run: |
|
|
echo "::set-output name=json-report::$(jq -c . "${{ env.JSON_REPORT_PATH }}")"
|
|
|
|
# In order to use the text format report as a step output, it's necessary to do some character replacements.
|
|
TEXT_REPORT=$(cat "${{ env.TEXT_REPORT_PATH }}")
|
|
TEXT_REPORT="${TEXT_REPORT//'%'/'%25'}"
|
|
TEXT_REPORT="${TEXT_REPORT//$'\n'/'%0A'}"
|
|
TEXT_REPORT="${TEXT_REPORT//$'\r'/'%0D'}"
|
|
echo "::set-output name=text-report::$TEXT_REPORT"
|
|
|
|
- name: Comment on Arduino Lint warning
|
|
if: >
|
|
env.PASS == 'true'
|
|
&& fromJson(steps.read-lint-report.outputs.json-report).summary.warningCount > 0
|
|
&& fromJson(steps.read-lint-report.outputs.json-report).summary.errorCount == 0
|
|
uses: octokit/request-action@v2.x
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
route: POST /repos/{owner}/{repo}/issues/{issue_number}/comments
|
|
owner: ${{ github.repository_owner }}
|
|
repo: ${{ github.event.repository.name }}
|
|
issue_number: ${{ github.event.pull_request.number }}${{ github.event.issue.number }}
|
|
body: |
|
|
|
|
|
[Arduino Lint](https://github.com/arduino/arduino-lint) has suggestions for possible improvements to ${{ matrix.submission.submissionURL }}:
|
|
|
|
```
|
|
${{ steps.read-lint-report.outputs.text-report }}
|
|
```
|
|
|
|
- name: Comment on Arduino Lint error
|
|
if: >
|
|
env.PASS == 'true'
|
|
&& fromJson(steps.read-lint-report.outputs.json-report).summary.errorCount > 0
|
|
uses: octokit/request-action@v2.x
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
route: POST /repos/{owner}/{repo}/issues/{issue_number}/comments
|
|
owner: ${{ github.repository_owner }}
|
|
repo: ${{ github.event.repository.name }}
|
|
issue_number: ${{ github.event.pull_request.number }}${{ github.event.issue.number }}
|
|
body: |
|
|
|
|
|
${{ env.ERROR_MESSAGE_PREFIX }}[Arduino Lint](https://github.com/arduino/arduino-lint) found errors with ${{ matrix.submission.submissionURL }}:
|
|
|
|
```
|
|
${{ steps.read-lint-report.outputs.text-report }}
|
|
```
|
|
|
|
- name: Set checks result to fail if error detected by Arduino Lint
|
|
if: >
|
|
env.PASS == 'true'
|
|
&& steps.arduino-lint.outcome == 'failure'
|
|
run: echo "PASS=false" >> "$GITHUB_ENV"
|
|
|
|
- name: Create failure flag file
|
|
if: env.PASS == 'false'
|
|
run: touch ${{ env.FAIL_FLAG_PATH }} # Arbitrary file to provide content for the flag artifact
|
|
|
|
# The value of a job matrix output is set by whichever job happened to run last, not of use for this application.
|
|
# So it's necessary to use an alternative means of indicating that at least one submission failed the checks.
|
|
- name: Upload failure flag artifact
|
|
if: env.PASS == 'false'
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
if-no-files-found: error
|
|
path: ${{ env.FAIL_FLAG_PATH }}
|
|
name: ${{ env.CHECK_SUBMISSIONS_FAIL_FLAG_ARTIFACT }}
|
|
|
|
check-submissions-result:
|
|
needs: check-submissions
|
|
runs-on: ubuntu-latest
|
|
|
|
outputs:
|
|
pass: ${{ steps.failure-flag-exists.outcome == 'failure' }}
|
|
|
|
steps:
|
|
- name: Check for existence of submission check failure flag artifact
|
|
id: failure-flag-exists
|
|
uses: actions/download-artifact@v3
|
|
continue-on-error: true
|
|
with:
|
|
name: ${{ env.CHECK_SUBMISSIONS_FAIL_FLAG_ARTIFACT }}
|
|
|
|
check-submissions-fail:
|
|
needs:
|
|
- check-submissions-result
|
|
if: needs.check-submissions-result.outputs.pass == 'false'
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Comment instructions to fix errors detected during submission checks
|
|
uses: octokit/request-action@v2.x
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
route: POST /repos/{owner}/{repo}/issues/{issue_number}/comments
|
|
owner: ${{ github.repository_owner }}
|
|
repo: ${{ github.event.repository.name }}
|
|
issue_number: ${{ github.event.pull_request.number }}${{ github.event.issue.number }}
|
|
body: |
|
|
|
|
|
Thanks for your interest in contributing to the Arduino Library Manager index @${{ github.actor }}
|
|
Please resolve the error(s) mentioned in the previous comment.
|
|
|
|
After resolving the issue, trigger this check again by doing one of the following:
|
|
|
|
- **Commit the required change to the branch you submitted this pull request from.**
|
|
- **Comment here, mentioning `@ArduinoBot` in the comment.**
|
|
|
|
:exclamation: **NOTE**: It is not necessary to open a new pull request. :exclamation:
|
|
|
|
More information:
|
|
https://github.com/${{ github.repository }}/blob/main/README.md#if-the-problem-is-with-the-pull-request
|
|
|
|
merge:
|
|
needs:
|
|
- diff
|
|
- parse
|
|
- check-submissions-result
|
|
# Only merge submissions that passed all checks
|
|
if: >
|
|
needs.parse.outputs.type == 'submission'
|
|
&& needs.check-submissions-result.outputs.pass == 'true'
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
pass: ${{ steps.merge.outcome == 'success' }}
|
|
status: ${{ steps.merge.outputs.status }}
|
|
|
|
steps:
|
|
- name: Approve pull request
|
|
uses: octokit/request-action@v2.x
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
route: POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews
|
|
owner: ${{ github.repository_owner }}
|
|
repo: ${{ github.event.repository.name }}
|
|
pull_number: ${{ github.event.pull_request.number }}${{ github.event.issue.number }}
|
|
event: APPROVE
|
|
|
|
- name: Merge pull request
|
|
id: merge
|
|
continue-on-error: true # Error in some situations (e.g., merge conflict) is expected
|
|
uses: octokit/request-action@v2.x
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
route: PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge
|
|
owner: ${{ github.repository_owner }}
|
|
repo: ${{ github.event.repository.name }}
|
|
pull_number: ${{ github.event.pull_request.number }}${{ github.event.issue.number }}
|
|
sha: ${{ needs.diff.outputs.head }}
|
|
merge_method: squash
|
|
|
|
- name: Checkout index source branch
|
|
if: steps.merge.outcome == 'success'
|
|
uses: actions/checkout@v3
|
|
with:
|
|
ref: production
|
|
|
|
- name: Add index source file entry for submissions
|
|
if: steps.merge.outcome == 'success'
|
|
run: |
|
|
INDEX_SOURCE_FILE_PATH="${{ github.workspace }}/registry.txt"
|
|
git config --global user.email "bot@arduino.cc"
|
|
git config --global user.name "ArduinoBot"
|
|
echo "${{ needs.parse.outputs.index-entry }}" >> "$INDEX_SOURCE_FILE_PATH"
|
|
git add --update "$INDEX_SOURCE_FILE_PATH"
|
|
echo \
|
|
-e \
|
|
"Add submission # ${{ github.event.pull_request.number }}${{ github.event.issue.number }}\n\n${{ github.event.repository.html_url }}/pull/${{ github.event.pull_request.number }}${{ github.event.issue.number }}" \
|
|
| \
|
|
git commit \
|
|
--file -
|
|
git push
|
|
|
|
- name: Comment that submission was accepted
|
|
if: steps.merge.outcome == 'success'
|
|
uses: octokit/request-action@v2.x
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
route: POST /repos/{owner}/{repo}/issues/{issue_number}/comments
|
|
owner: ${{ github.repository_owner }}
|
|
repo: ${{ github.event.repository.name }}
|
|
issue_number: ${{ github.event.pull_request.number }}${{ github.event.issue.number }}
|
|
body: |
|
|
|
|
|
Your submission has now been accepted! Thanks for your contribution to the Arduino Library Manager index.
|
|
|
|
The library(s) will be available for installation via Library Manager within a day's time.
|
|
|
|
You can check the logs from the Library Manager indexer for your library(s) here:
|
|
${{ needs.parse.outputs.indexer-logs-urls }}
|
|
|
|
merge-fail:
|
|
needs:
|
|
- merge
|
|
# Only run if the PR could not be merged
|
|
if: needs.merge.outputs.pass == 'false'
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Comment on merge fail due to out of sync PR head branch causing downgraded token
|
|
if: needs.merge.outputs.status == '403'
|
|
uses: octokit/request-action@v2.x
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
route: POST /repos/{owner}/{repo}/issues/{issue_number}/comments
|
|
owner: ${{ github.repository_owner }}
|
|
repo: ${{ github.event.repository.name }}
|
|
issue_number: ${{ github.event.pull_request.number }}${{ github.event.issue.number }}
|
|
body: |
|
|
|
|
|
${{ env.ERROR_MESSAGE_PREFIX }}Your submission meets all requirements. However, the pull request could not be merged.
|
|
|
|
Please follow this guide to sync your fork:
|
|
https://docs.github.com/github/collaborating-with-pull-requests/working-with-forks/syncing-a-fork
|
|
|
|
Once that is done, it will be merged automatically.
|
|
|
|
- name: Comment on merge conflict
|
|
if: needs.merge.outputs.status == '405'
|
|
uses: octokit/request-action@v2.x
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
route: POST /repos/{owner}/{repo}/issues/{issue_number}/comments
|
|
owner: ${{ github.repository_owner }}
|
|
repo: ${{ github.event.repository.name }}
|
|
issue_number: ${{ github.event.pull_request.number }}${{ github.event.issue.number }}
|
|
body: |
|
|
|
|
|
${{ env.ERROR_MESSAGE_PREFIX }}Your submission meets all requirements. However, the pull request could not be merged.
|
|
|
|
Please follow this guide to resolve a merge conflict:
|
|
https://docs.github.com/github/collaborating-with-issues-and-pull-requests/resolving-a-merge-conflict-on-github
|
|
|
|
Once that is done, it will be merged automatically.
|
|
|
|
- name: Comment on diff head/PR head mismatch
|
|
if: needs.merge.outputs.status == '409'
|
|
uses: octokit/request-action@v2.x
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
route: POST /repos/{owner}/{repo}/issues/{issue_number}/comments
|
|
owner: ${{ github.repository_owner }}
|
|
repo: ${{ github.event.repository.name }}
|
|
issue_number: ${{ github.event.pull_request.number }}${{ github.event.issue.number }}
|
|
body: |
|
|
|
|
|
It looks like there may have been an update to the pull request. If so, I'll check it again now.
|
|
|
|
- name: Fail on unidentified merge failure
|
|
if: >
|
|
needs.merge.outputs.status != '403' &&
|
|
needs.merge.outputs.status != '405' &&
|
|
needs.merge.outputs.status != '409'
|
|
run: exit 1 # Trigger the `unexpected-fail` job
|
|
|
|
not-submission:
|
|
needs:
|
|
- parse
|
|
# These request types can't be automatically approved.
|
|
if: >
|
|
needs.parse.outputs.type != 'submission' &&
|
|
needs.parse.outputs.type != 'invalid'
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Comment on required review
|
|
uses: octokit/request-action@v2.x
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
route: POST /repos/{owner}/{repo}/issues/{issue_number}/comments
|
|
owner: ${{ github.repository_owner }}
|
|
repo: ${{ github.event.repository.name }}
|
|
issue_number: ${{ github.event.pull_request.number }}${{ github.event.issue.number }}
|
|
body: |
|
|
|
|
|
Hi @${{ github.actor }}.
|
|
Your pull request has been detected as something other than a Library Manager submission.
|
|
A maintainer will need to review it before it can be merged.
|
|
|
|
If you intended to submit a library, please check the instructions and update your pull request if necessary:
|
|
https://github.com/${{ github.repository }}/blob/main/README.md#instructions
|
|
|
|
unexpected-fail:
|
|
needs:
|
|
# Run after all other jobs
|
|
- parse-fail
|
|
- merge-fail
|
|
- check-submissions-fail
|
|
- label
|
|
- not-submission
|
|
# Run if any job failed. The workflow is configured so that jobs only fail when there is an unexpected error.
|
|
if: failure()
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Label PR to indicate need for maintenance
|
|
uses: octokit/request-action@v2.x
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
route: PUT /repos/{owner}/{repo}/issues/{issue_number}/labels
|
|
owner: ${{ github.repository_owner }}
|
|
repo: ${{ github.event.repository.name }}
|
|
issue_number: ${{ github.event.pull_request.number }}${{ github.event.issue.number }}
|
|
labels: |
|
|
- "status: maintenance required"
|
|
|
|
- name: Comment on unexpected failure
|
|
uses: octokit/request-action@v2.x
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
route: POST /repos/{owner}/{repo}/issues/{issue_number}/comments
|
|
owner: ${{ github.repository_owner }}
|
|
repo: ${{ github.event.repository.name }}
|
|
issue_number: ${{ github.event.pull_request.number }}${{ github.event.issue.number }}
|
|
body: |
|
|
|
|
|
Hi @${{ github.actor }}.
|
|
There was an unexpected failure during automated processing of your pull request.
|
|
This error is unrelated to the content of your pull request.
|
|
|
|
A maintainer has been notified and will investigate as soon as possible.
|
|
|
|
- name: Slack notification of unexpected failure
|
|
uses: rtCamp/action-slack-notify@v2
|
|
env:
|
|
SLACK_WEBHOOK: ${{ secrets.TEAM_TOOLING_CHANNEL_SLACK_WEBHOOK }}
|
|
SLACK_MESSAGE: |
|
|
:warning::warning::warning::warning:
|
|
WARNING: ${{ github.repository }} ${{ github.workflow }} workflow run had an unexpected failure!!!
|
|
:warning::warning::warning::warning:
|
|
SLACK_COLOR: danger
|
|
MSG_MINIMAL: true
|
|
|
|
request-review:
|
|
needs:
|
|
- parse-fail
|
|
- merge-fail
|
|
- not-submission
|
|
- unexpected-fail
|
|
if: >
|
|
always() &&
|
|
(
|
|
needs.parse-fail.result != 'skipped' ||
|
|
needs.merge-fail.result != 'skipped' ||
|
|
needs.not-submission.result != 'skipped' ||
|
|
needs.unexpected-fail.result != 'skipped'
|
|
)
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Request pull request review from maintainer
|
|
if: contains(toJSON(env.MAINTAINERS), github.actor) != true # Don't attempt to request review from PR author.
|
|
uses: octokit/request-action@v2.x
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
route: POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers
|
|
owner: ${{ github.repository_owner }}
|
|
repo: ${{ github.event.repository.name }}
|
|
pull_number: ${{ github.event.pull_request.number }}${{ github.event.issue.number }}
|
|
reviewers: ${{ env.MAINTAINERS }}
|