summaryrefslogtreecommitdiff
path: root/.github/workflows/report-api-diff.yml
diff options
context:
space:
mode:
authoranatawa12 <anatawa12@icloud.com>2023-10-24 06:16:40 +0900
committerGitHub <noreply@github.com>2023-10-24 06:16:40 +0900
commitb22066b9a26beffc03ecc499ed861366dfaf4340 (patch)
treedfafbf67ff2cb5a1157774b67524d827cad027c8 /.github/workflows/report-api-diff.yml
parentfeat: Facilitates the rollback of migration operations (#12109) (diff)
downloadsharkey-b22066b9a26beffc03ecc499ed861366dfaf4340.tar.gz
sharkey-b22066b9a26beffc03ecc499ed861366dfaf4340.tar.bz2
sharkey-b22066b9a26beffc03ecc499ed861366dfaf4340.zip
ci: fix pull_req時にAPI diffの実行ができない (#12123)
* initial commit for report-api-diff.yml * add api-{base,head}.json into api-artifact * try to get pull request id from github.event.workflow_run.pull_requests * Update report-api-diff.yml * Update report-api-diff.yml * remove save-pr-number
Diffstat (limited to '.github/workflows/report-api-diff.yml')
-rw-r--r--.github/workflows/report-api-diff.yml92
1 files changed, 92 insertions, 0 deletions
diff --git a/.github/workflows/report-api-diff.yml b/.github/workflows/report-api-diff.yml
new file mode 100644
index 0000000000..9e7f47f923
--- /dev/null
+++ b/.github/workflows/report-api-diff.yml
@@ -0,0 +1,92 @@
+name: Report API Diff
+
+on:
+ workflow_run:
+ types: [completed]
+ workflows:
+ - Get api.json from Misskey # get-api-diff.yml
+
+jobs:
+ compare-diff:
+ runs-on: ubuntu-latest
+ if: ${{ github.event.workflow_run.conclusion == 'success' }}
+ permissions:
+ pull-requests: write
+
+# api-artifact
+ steps:
+ - name: Download artifact
+ uses: actions/github-script@v6
+ with:
+ script: |
+ let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ run_id: context.payload.workflow_run.id,
+ });
+ let matchArtifact = allArtifacts.data.artifacts.filter((artifact) => {
+ return artifact.name == "api-artifact"
+ })[0];
+ let download = await github.rest.actions.downloadArtifact({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ artifact_id: matchArtifact.id,
+ archive_format: 'zip',
+ });
+ let fs = require('fs');
+ fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/api-artifact.zip`, Buffer.from(download.data));
+ - name: Extract artifact
+ run: unzip api-artifact.zip -d artifacts
+ - name: Load PR Number
+ id: load-pr-num
+ env:
+ PULL_REQUESTS: ${{ toJson(github.event.workflow_run.pull_requests.*) }}
+ REPO_ID: ${{ github.repository_id }}
+ run: |
+ # find first pull requests that targets this repository
+ PR_NUMBER="$(echo "$PULL_REQUESTS" \
+ | jq --arg REPO_ID "$REPO_ID" '[.[] | select ($REPO_ID == (.base.repo.id | tostring)) | .number ][0]')"
+ echo "pr-number=$PR_NUMBER" >> "$GITHUB_OUTPUT"
+
+ - name: Output base
+ run: cat ./artifacts/api-base.json
+ - name: Output head
+ run: cat ./artifacts/api-head.json
+ - name: Arrange json files
+ run: |
+ jq '.' ./artifacts/api-base.json > ./api-base.json
+ jq '.' ./artifacts/api-head.json > ./api-head.json
+ - name: Get diff of 2 files
+ run: diff -u --label=base --label=head ./api-base.json ./api-head.json | cat > api.json.diff
+ - name: Get full diff
+ run: diff --label=base --label=head --new-line-format='+%L' --old-line-format='-%L' --unchanged-line-format=' %L' ./api-base.json ./api-head.json | cat > api-full.json.diff
+ - name: Echo full diff
+ run: cat ./api-full.json.diff
+ - name: Upload full diff to Artifact
+ uses: actions/upload-artifact@v3
+ with:
+ name: api-artifact
+ path: |
+ api-full.json.diff
+ api-base.json
+ api-head.json
+ - id: out-diff
+ name: Build diff Comment
+ run: |
+ cat <<- EOF > ./output.md
+ このPRによるapi.jsonの差分
+ <details>
+ <summary>差分はこちら</summary>
+
+ \`\`\`diff
+ $(cat ./api.json.diff)
+ \`\`\`
+ </details>
+
+ [Get diff files from Workflow Page](https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID})
+ EOF
+ - uses: thollander/actions-comment-pull-request@v2
+ with:
+ pr_number: ${{ steps.load-pr-num.outputs.pr-number }}
+ comment_tag: show_diff
+ filePath: ./output.md