ci: Check Misskey JS autogenを様々改善 (#13718)

This commit is contained in:
anatawa12 2024-04-15 22:11:17 +09:00 committed by GitHub
parent c687b4eaa5
commit ca0d148a78
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -5,24 +5,23 @@ on:
branches: branches:
- master - master
- develop - develop
- improve-misskey-js-autogen-check
paths: paths:
- packages/backend/** - packages/backend/**
jobs: jobs:
check-misskey-js-autogen: # pull_request_target safety: permissions: read-all, and there are no secrets used in this job
generate-misskey-js:
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions: permissions:
pull-requests: write contents: read
if: ${{ github.event.pull_request.mergeable == null || github.event.pull_request.mergeable == true }}
env:
api_json_name: "api-head.json"
steps: steps:
- name: checkout - name: checkout
uses: actions/checkout@v4.1.1 uses: actions/checkout@v4.1.1
with: with:
submodules: true submodules: true
ref: ${{ github.event.pull_request.head.sha }} ref: refs/pull/${{ github.event.pull_request.number }}/merge
- name: setup pnpm - name: setup pnpm
uses: pnpm/action-setup@v3 uses: pnpm/action-setup@v3
@ -39,79 +38,81 @@ jobs:
- name: install dependencies - name: install dependencies
run: pnpm i --frozen-lockfile run: pnpm i --frozen-lockfile
- name: wait get-api-diff # generate api.json
uses: lewagon/wait-on-check-action@v1.3.3 - name: Copy Config
run: cp .config/example.yml .config/default.yml
- name: Build
run: pnpm build
- name: Generate API JSON
run: pnpm --filter backend generate-api-json
# build misskey js
- name: Build misskey-js
run: |-
cp packages/backend/built/api.json packages/misskey-js/generator/api.json
pnpm run --filter misskey-js-type-generator generate
# packages/misskey-js/generator/built/autogen
- name: Upload Generated
uses: actions/upload-artifact@v4
with: with:
ref: ${{ github.event.pull_request.head.sha }} name: generated-misskey-js
check-regexp: get-from-misskey .+ path: packages/misskey-js/generator/built/autogen
repo-token: ${{ secrets.GITHUB_TOKEN }}
wait-interval: 30
- name: Download artifact # pull_request_target safety: permissions: read-all, and there are no secrets used in this job
uses: actions/github-script@v7.0.1 get-actual-misskey-js:
runs-on: ubuntu-latest
permissions:
contents: read
if: ${{ github.event.pull_request.mergeable == null || github.event.pull_request.mergeable == true }}
steps:
- name: checkout
uses: actions/checkout@v4.1.1
with: with:
script: | submodules: true
const fs = require('fs'); ref: refs/pull/${{ github.event.pull_request.number }}/merge
const workflows = await github.rest.actions.listWorkflowRunsForRepo({ - name: Upload From Merged
owner: context.repo.owner, uses: actions/upload-artifact@v4
repo: context.repo.repo, with:
head_sha: `${{ github.event.pull_request.head.sha }}` name: actual-misskey-js
}).then(x => x.data.workflow_runs); path: packages/misskey-js/src/autogen
console.log(workflows.map(x => ({name: x.name, title: x.display_title}))); # pull_request_target safety: nothing is cloned from repository
comment-misskey-js-autogen:
runs-on: ubuntu-latest
needs: [generate-misskey-js, get-actual-misskey-js]
permissions:
pull-requests: write
steps:
- name: download generated-misskey-js
uses: actions/download-artifact@v4
with:
name: generated-misskey-js
path: misskey-js-generated
const run_id = workflows.find(x => x.name.includes("Get api.json from Misskey")).id; - name: download actual-misskey-js
uses: actions/download-artifact@v4
with:
name: actual-misskey-js
path: misskey-js-actual
let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({ - name: check misskey-js changes
owner: context.repo.owner, id: check-changes
repo: context.repo.repo, run: |
run_id: run_id, diff -r -u --label=generated --label=on-tree ./misskey-js-generated ./misskey-js-actual > misskey-js.diff || true
});
let matchArtifacts = allArtifacts.data.artifacts.filter((artifact) => { if [ -s misskey-js.diff ]; then
return artifact.name.startsWith("api-artifact-") || artifact.name == "api-artifact" echo "changes=true" >> $GITHUB_OUTPUT
}); else
echo "changes=false" >> $GITHUB_OUTPUT
fi
await Promise.all(matchArtifacts.map(async (artifact) => { - name: Print full diff
let download = await github.rest.actions.downloadArtifact({ run: cat ./misskey-js.diff
owner: context.repo.owner,
repo: context.repo.repo,
artifact_id: artifact.id,
archive_format: 'zip',
});
await fs.promises.writeFile(`${process.env.GITHUB_WORKSPACE}/${artifact.name}.zip`, Buffer.from(download.data));
}));
- name: unzip artifacts
run: |-
find . -mindepth 1 -maxdepth 1 -type f -name '*.zip' -exec unzip {} -d . ';'
ls -la
- name: get head checksum
run: |-
checksum=$(realpath head_checksum)
cd packages/misskey-js/src
find autogen -type f -exec sh -c 'echo $(sed -E "s/^\s+\*\s+generatedAt:.+$//" {} | sha256sum | cut -d" " -f 1) {}' \; > $checksum
cd ../../..
- name: build autogen
run: |-
checksum=$(realpath ${api_json_name}_checksum)
mv $api_json_name packages/misskey-js/generator/api.json
cd packages/misskey-js/generator
pnpm run generate
cd built
find autogen -type f -exec sh -c 'echo $(sed -E "s/^\s+\*\s+generatedAt:.+$//" {} | sha256sum | cut -d" " -f 1) {}' \; > $checksum
cd ../../../..
- name: check update for type definitions
run: diff head_checksum ${api_json_name}_checksum
- name: send message - name: send message
if: failure() if: steps.check-changes.outputs.changes == 'true'
uses: thollander/actions-comment-pull-request@v2 uses: thollander/actions-comment-pull-request@v2
with: with:
comment_tag: check-misskey-js-autogen comment_tag: check-misskey-js-autogen
@ -125,7 +126,7 @@ jobs:
``` ```
- name: send message - name: send message
if: success() if: steps.check-changes.outputs.changes == 'false'
uses: thollander/actions-comment-pull-request@v2 uses: thollander/actions-comment-pull-request@v2
with: with:
comment_tag: check-misskey-js-autogen comment_tag: check-misskey-js-autogen