summaryrefslogtreecommitdiff
path: root/.github/workflows/check-misskey-js-autogen.yml
blob: 8a81e8552183f0bc8bc24c0c4d21336bef9b2bba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
name: Check Misskey JS autogen

on:
  pull_request_target:
    branches:
      - master
      - develop
      - improve-misskey-js-autogen-check
    paths:
      - packages/backend/**

jobs:
  # pull_request_target safety: permissions: read-all, and there are no secrets used in this job
  generate-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@v6.0.1
        with:
          submodules: true
          persist-credentials: false
          ref: refs/pull/${{ github.event.pull_request.number }}/merge

      - name: setup pnpm
        uses: pnpm/action-setup@v4

      - name: setup node
        id: setup-node
        uses: actions/setup-node@v6.1.0
        with:
          node-version-file: '.node-version'
          cache: pnpm

      - name: install dependencies
        run: pnpm i --frozen-lockfile

      # generate api.json
      - 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@v6
        with:
          name: generated-misskey-js
          path: packages/misskey-js/generator/built/autogen

  # pull_request_target safety: permissions: read-all, and no user codes are executed
  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@v6.0.1
        with:
          submodules: true
          persist-credentials: false
          ref: refs/pull/${{ github.event.pull_request.number }}/merge

      - name: Upload From Merged
        uses: actions/upload-artifact@v6
        with:
          name: actual-misskey-js
          path: packages/misskey-js/src/autogen

  # 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@v7
        with:
          name: generated-misskey-js
          path: misskey-js-generated

      - name: download actual-misskey-js
        uses: actions/download-artifact@v7
        with:
          name: actual-misskey-js
          path: misskey-js-actual

      - name: check misskey-js changes
        id: check-changes
        run: |
          diff -r -u --label=generated --label=on-tree ./misskey-js-generated ./misskey-js-actual > misskey-js.diff || true

          if [ -s misskey-js.diff ]; then
            echo "changes=true" >> $GITHUB_OUTPUT
          else
            echo "changes=false" >> $GITHUB_OUTPUT
          fi

      - name: Print full diff
        run: cat ./misskey-js.diff

      - name: send message
        if: steps.check-changes.outputs.changes == 'true'
        uses: thollander/actions-comment-pull-request@v3
        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: steps.check-changes.outputs.changes == 'false'
        uses: thollander/actions-comment-pull-request@v3
        with:
          comment-tag: check-misskey-js-autogen
          mode: delete
          message: "Thank you!"
          create_if_not_exists: false

      - name: Make failure if changes are detected
        if: steps.check-changes.outputs.changes == 'true'
        run: exit 1