|
|
@@ -1,6 +1,10 @@
|
|
|
# 🤬 https://github.com/actions/labeler/issues/12 / https://github.community/t5/GitHub-Actions/GitHub-actions-are-severely-limited-on-PRs/m-p/54669/highlight/true#M9249
|
|
|
# (this workflow shouldn't exist)
|
|
|
|
|
|
+# For future reference (in case we're someday able to revert this):
|
|
|
+# - https://github.com/docker-library/official-images/commit/a40bfb3617fb765ccabf9794e55f7cece6281696 (initial labelling)
|
|
|
+# - TODO (initial diffing)
|
|
|
+
|
|
|
name: Periodic Actions
|
|
|
|
|
|
on:
|
|
|
@@ -18,7 +22,8 @@ jobs:
|
|
|
runs-on: ubuntu-latest
|
|
|
timeout-minutes: 15 # given that this runs every 15 minutes, it needs to take less than that to do whatever it is going to do
|
|
|
steps:
|
|
|
- - name: Apply Labels
|
|
|
+ - id: labels
|
|
|
+ name: Apply Labels (and gather "Diff PR" list)
|
|
|
uses: actions/[email protected]
|
|
|
with:
|
|
|
script: |
|
|
|
@@ -30,8 +35,9 @@ jobs:
|
|
|
direction: 'desc',
|
|
|
per_page: 100,
|
|
|
});
|
|
|
+ let pullRequestsThatNeedDiffs = []; // this will hold a list of PR numbers we need to check for up-to-date diffs on
|
|
|
for (let i = 0; i < pulls.length; ++i) {
|
|
|
- let pull = pulls[i];
|
|
|
+ const pull = pulls[i];
|
|
|
const { data: files } = await github.pulls.listFiles({
|
|
|
owner: context.repo.owner,
|
|
|
repo: context.repo.repo,
|
|
|
@@ -56,4 +62,72 @@ jobs:
|
|
|
labels: newLabels,
|
|
|
});
|
|
|
}
|
|
|
+
|
|
|
+ if (currentLabels.concat(newLabels).find((label) => { return label.startsWith('library/') })) {
|
|
|
+ const commentText = 'Diff for ' + pull.head.sha + ':';
|
|
|
+ const { data: comments } = await github.issues.listComments({
|
|
|
+ owner: context.repo.owner,
|
|
|
+ repo: context.repo.repo,
|
|
|
+ issue_number: pull.number,
|
|
|
+ sort: 'created',
|
|
|
+ direction: 'desc',
|
|
|
+ per_page: 100,
|
|
|
+ });
|
|
|
+ let needNewComment = true;
|
|
|
+ for (let j = 0; j < comments.length; ++j) {
|
|
|
+ const comment = comments[j];
|
|
|
+ if (comment.user.login === 'github-actions[bot]') {
|
|
|
+ if (comment.body.includes(commentText)) {
|
|
|
+ needNewComment = false;
|
|
|
+ } else {
|
|
|
+ await github.issues.deleteComment({
|
|
|
+ owner: context.repo.owner,
|
|
|
+ repo: context.repo.repo,
|
|
|
+ comment_id: comment.id,
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (needNewComment) {
|
|
|
+ pullRequestsThatNeedDiffs = pullRequestsThatNeedDiffs.concat([{
|
|
|
+ number: pull.number,
|
|
|
+ text: commentText,
|
|
|
+ }]);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
+ core.setOutput('diffPulls', JSON.stringify({ pulls: pullRequestsThatNeedDiffs, count: pullRequestsThatNeedDiffs.length }));
|
|
|
+ - name: Checkout
|
|
|
+ uses: actions/checkout@v2
|
|
|
+ if: fromJSON(steps.labels.outputs.diffPulls).count > 0
|
|
|
+ - id: diffs
|
|
|
+ name: Generate Diffs
|
|
|
+ run: |
|
|
|
+ pulls="$(
|
|
|
+ jq -c '.pulls[]' <<EOF
|
|
|
+ ${{ steps.labels.outputs.diffPulls }}
|
|
|
+ EOF
|
|
|
+ )"
|
|
|
+ git clone --depth 1 https://github.com/docker-library/bashbrew.git -b master ~/bashbrew
|
|
|
+ ~/bashbrew/bashbrew.sh --version > /dev/null
|
|
|
+ export PATH="$HOME/bashbrew/bin:$PATH"
|
|
|
+ bashbrew --version
|
|
|
+ IFS=$'\n'
|
|
|
+ for pull in $pulls; do
|
|
|
+ number="$(jq -r '.number' <<<"$pull")"
|
|
|
+ text="$(jq -r '.text' <<<"$pull")"
|
|
|
+ diff="$(./diff-pr.sh "$number" 2>&1 || :)"
|
|
|
+ # "Body is too long (maximum is 65536 characters)" (so we'll check for some fudge room and pre-filter the diff)
|
|
|
+ # TODO consider instead creating a Gist (although that requires a separate type of token, so much less interesting)
|
|
|
+ jq -Rcs --arg text "$text" 'rtrimstr("\n") | {
|
|
|
+ body: (
|
|
|
+ "<details>\n<summary>" + $text + "</summary>\n\n```diff\n"
|
|
|
+ + if length < 65000 then . else
|
|
|
+ "TODO diff too large for GitHub comment!\n"
|
|
|
+ + "See: http://github.com/" + env.GITHUB_REPOSITORY + "/actions/runs/" + env.GITHUB_RUN_ID
|
|
|
+ end
|
|
|
+ + "\n```\n\n</details>"
|
|
|
+ ),
|
|
|
+ }' <<<"$diff" | curl -fL --header 'Authorization: token ${{ secrets.GITHUB_TOKEN }}' --header 'Accept: application/vnd.github.v3+json' --data '@-' --request POST "https://api.github.com/repos/$GITHUB_REPOSITORY/issues/$number/comments"
|
|
|
+ done
|
|
|
+ if: fromJSON(steps.labels.outputs.diffPulls).count > 0
|