diff --git a/.github/workflows/check-misskey-js-autogen.yml b/.github/workflows/check-misskey-js-autogen.yml new file mode 100644 index 000000000..0b34cdc20 --- /dev/null +++ b/.github/workflows/check-misskey-js-autogen.yml @@ -0,0 +1,127 @@ +name: Check Misskey JS autogen + +on: + pull_request: + branches: + - master + - develop + paths: + - packages/backend/** + +jobs: + check-misskey-js-autogen: + runs-on: ubuntu-latest + permissions: + pull-requests: write + + env: + api_json_names: "api-base.json api-head.json" + + steps: + - name: checkout + uses: actions/checkout@v4 + with: + submodules: true + + - name: setup pnpm + uses: pnpm/action-setup@v2 + with: + version: 8 + + - name: setup node + id: setup-node + uses: actions/setup-node@v4 + with: + node-version-file: '.node-version' + cache: pnpm + + - name: install dependencies + run: pnpm i --frozen-lockfile + + - name: wait get-api-diff + uses: lewagon/wait-on-check-action@v1.3.3 + with: + ref: ${{ github.event.pull_request.head.sha }} + check-regexp: get-from-misskey .+ + repo-token: ${{ secrets.GITHUB_TOKEN }} + wait-interval: 30 + + - name: Download artifact + uses: actions/github-script@v7 + with: + script: | + const fs = require('fs'); + + const workflows = await github.rest.actions.listWorkflowRunsForRepo({ + owner: context.repo.owner, + repo: context.repo.repo, + head_sha: `${{ github.event.pull_request.head.sha }}` + }).then(x => x.data.workflow_runs); + + console.log(workflows.map(x => ({name: x.name, title: x.display_title}))); + + const run_id = workflows.find(x => x.name.includes("Get api.json from Misskey")).id; + + let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({ + owner: context.repo.owner, + repo: context.repo.repo, + run_id: run_id, + }); + + let matchArtifacts = allArtifacts.data.artifacts.filter((artifact) => { + return artifact.name.startsWith("api-artifact-") || artifact.name == "api-artifact" + }); + + await Promise.all(matchArtifacts.map(async (artifact) => { + let download = await github.rest.actions.downloadArtifact({ + 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: build autogen + run: |- + for name in $(echo $api_json_names) + do + checksum=$(mktemp) + mv $name packages/misskey-js/generator/api.json + + cd packages/misskey-js/generator + pnpm run generate + find built -type f -exec sh -c 'echo $(sed -E "s/^\s+\*\s+generatedAt:.+$//" {} | sha256sum | cut -d" " -f 1) {}' \; > $checksum + cd ../../.. + cp $checksum ${name}_checksum + done + + - name: check update for type definitions + run: diff $(echo -n ${api_json_names} | awk -v RS=" " '{ printf "%s_checksum ", $0 }') + + - name: send message + if: failure() + uses: thollander/actions-comment-pull-request@v2 + with: + comment_tag: check-misskey-js-autogen + message: |- + Thank you for sending us a great Pull Request! 👍 + Please regenerate misskey-js type definitions! 🙏 + + example: + ```sh + pnpm run build-misskey-js-with-types + ``` + + - name: send message + if: success() + uses: thollander/actions-comment-pull-request@v2 + with: + comment_tag: check-misskey-js-autogen + mode: delete + message: "Thank you!"