From 44a378c46e1efac8a8f632f2d92da6a6dbad54f5 Mon Sep 17 00:00:00 2001
From: anatawa12 <anatawa12@icloud.com>
Date: Thu, 23 Nov 2023 20:17:21 +0900
Subject: [PATCH] Use generate-api-json for api.json diff GitHub comment
 (#12408)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* ci: use generate-api-json to get api.json changes

* restore copying default.yml

* refactor: get api.json with single workflow

* ci: api.jsonのdiffをbackendが変更されたときのみ取るように
---
 .github/workflows/get-api-diff.yml | 148 ++++-------------------------
 1 file changed, 19 insertions(+), 129 deletions(-)

diff --git a/.github/workflows/get-api-diff.yml b/.github/workflows/get-api-diff.yml
index 8e3437ad86..e6de226e6b 100644
--- a/.github/workflows/get-api-diff.yml
+++ b/.github/workflows/get-api-diff.yml
@@ -6,9 +6,12 @@ on:
     branches:
       - master
       - develop
+    paths:
+      - packages/backend/**
+      - .github/workflows/get-api-diff.yml
 
 jobs:
-  get-base:
+  get-from-misskey:
     runs-on: ubuntu-latest
     permissions:
       contents: read
@@ -16,27 +19,20 @@ jobs:
     strategy:
       matrix:
         node-version: [20.5.1]
-
-    services:
-      db:
-        image: postgres:13
-        ports:
-          - 5432:5432
-        env:
-          POSTGRES_DB: misskey
-          POSTGRES_HOST_AUTH_METHOD: trust
-          POSTGRES_USER: example-misskey-user
-          POSTGRESS_PASS: example-misskey-pass
-      redis:
-        image: redis:7
-        ports:
-          - 6379:6379
+        api-json-name: [api-base.json, api-head.json]
+        include:
+          - api-json-name: api-base.json
+            repo-name: ${{ github.event.pull_request.base.repo.full_name }}
+            ref: ${{ github.base_ref }}
+          - api-json-name: api-head.json
+            repo-name: ${{ github.event.pull_request.head.repo.full_name }}
+            ref: ${{ github.head_ref }}
 
     steps:
     - uses: actions/checkout@v4.1.1
       with:
-        repository: ${{ github.event.pull_request.base.repo.full_name }}
-        ref: ${{ github.base_ref }}
+        repository: ${{ matrix.repo-name }}
+        ref: ${{ matrix.ref }}
         submodules: true
     - name: Install pnpm
       uses: pnpm/action-setup@v2
@@ -56,121 +52,15 @@ jobs:
       run: cp .config/example.yml .config/default.yml
     - name: Build
       run: pnpm build
-    - name : Migrate
-      run: pnpm migrate
-    - name: Launch misskey
-      run: |
-        screen -S misskey -dm pnpm run dev
-        sleep 30s
-    - name: Wait for Misskey to be ready
-      run: |
-        MAX_RETRIES=12
-        RETRY_DELAY=5
-        count=0
-        until $(curl --output /dev/null --silent --head --fail http://localhost:3000) || [[ $count -eq $MAX_RETRIES ]]; do
-          printf '.'
-          sleep $RETRY_DELAY
-          count=$((count + 1))
-        done
-
-        if [[ $count -eq $MAX_RETRIES ]]; then
-          echo "Failed to connect to Misskey after $MAX_RETRIES attempts."
-          exit 1
-        fi
-    - id: fetch
-      name: Get api.json from Misskey
-      run: |
-        RESULT=$(curl --retry 5 --retry-delay 5 --retry-max-time 60 http://localhost:3000/api.json)
-        echo $RESULT > api-base.json
+    - name: Generate API JSON
+      run: pnpm --filter backend generate-api-json
+    - name: Copy API.json
+      run: cp packages/backend/built/api.json ${{ matrix.api-json-name }}
     - name: Upload Artifact
       uses: actions/upload-artifact@v3
       with:
         name: api-artifact
-        path: api-base.json
-    - name: Kill Misskey Job
-      run: screen -S misskey -X quit
-
-  get-head:
-    runs-on: ubuntu-latest
-    permissions:
-      contents: read
-
-    strategy:
-      matrix:
-        node-version: [20.5.1]
-
-    services:
-      db:
-        image: postgres:13
-        ports:
-          - 5432:5432
-        env:
-          POSTGRES_DB: misskey
-          POSTGRES_HOST_AUTH_METHOD: trust
-          POSTGRES_USER: example-misskey-user
-          POSTGRESS_PASS: example-misskey-pass
-      redis:
-        image: redis:7
-        ports:
-          - 6379:6379
-
-    steps:
-    - uses: actions/checkout@v4.1.1
-      with:
-        repository: ${{ github.event.pull_request.head.repo.full_name }}
-        ref: ${{ github.head_ref }}
-        submodules: true
-    - name: Install pnpm
-      uses: pnpm/action-setup@v2
-      with:
-        version: 8
-        run_install: false
-    - name: Use Node.js ${{ matrix.node-version }}
-      uses: actions/setup-node@v4.0.0
-      with:
-        node-version: ${{ matrix.node-version }}
-        cache: 'pnpm'
-    - run: corepack enable
-    - run: pnpm i --frozen-lockfile
-    - name: Check pnpm-lock.yaml
-      run: git diff --exit-code pnpm-lock.yaml
-    - name: Copy Configure
-      run: cp .config/example.yml .config/default.yml
-    - name: Build
-      run: pnpm build
-    - name : Migrate
-      run: pnpm migrate
-    - name: Launch misskey
-      run: |
-        screen -S misskey -dm pnpm run dev
-        sleep 30s
-    - name: Wait for Misskey to be ready
-      run: |
-        MAX_RETRIES=12
-        RETRY_DELAY=5
-        count=0
-        until $(curl --output /dev/null --silent --head --fail http://localhost:3000) || [[ $count -eq $MAX_RETRIES ]]; do
-          printf '.'
-          sleep $RETRY_DELAY
-          count=$((count + 1))
-        done
-
-        if [[ $count -eq $MAX_RETRIES ]]; then
-          echo "Failed to connect to Misskey after $MAX_RETRIES attempts."
-          exit 1
-        fi
-    - id: fetch
-      name: Get api.json from Misskey
-      run: |
-        RESULT=$(curl --retry 5 --retry-delay 5 --retry-max-time 60 http://localhost:3000/api.json)
-        echo $RESULT > api-head.json
-    - name: Upload Artifact
-      uses: actions/upload-artifact@v3
-      with:
-        name: api-artifact
-        path: api-head.json
-    - name: Kill Misskey Job
-      run: screen -S misskey -X quit
+        path: ${{ matrix.api-json-name }}
 
   save-pr-number:
     runs-on: ubuntu-latest