Просмотр исходного кода

devide reg-suit reusable workflow

Yuki Takei 4 лет назад
Родитель
Сommit
680c2dbbb6

+ 62 - 3
.github/workflows/ci-app-prod.yml

@@ -6,23 +6,82 @@ on:
 
 
 jobs:
 jobs:
 
 
-  test-suit-base:
-    uses: weseek/growi/.github/workflows/reusable-app-prod.yml@support/vrt-with-cypress
+  run-reg-suit-sync-expected:
+    uses: weseek/growi/.github/workflows/reusable-app-reg-suit.yml@support/vrt-with-cypress
     with:
     with:
       node-version: 14.x
       node-version: 14.x
       checkout-ref: ${{ github.event.pull_request.head.ref }}
       checkout-ref: ${{ github.event.pull_request.head.ref }}
+      run-sync-expected: true
+    secrets:
+      REG_NOTIFY_GITHUB_PLUGIN_CLIENTID: ${{ secrets.REG_NOTIFY_GITHUB_PLUGIN_CLIENTID }}
+      AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
+      AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+      SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
+
+
+ test-prod-base:
+    needs: [run-reg-suit-sync-expected]
+
+    uses: weseek/growi/.github/workflows/reusable-app-prod.yml@support/vrt-with-cypress
+
+    if: ${{ !needs.run-reg-suit-sync-expected.outputs.EXPECTED_IMAGES_EXIST }}
+
+    with:
+      node-version: 14.x
+      checkout-ref: ${{ github.event.pull_request.base.ref }}
       skip-launching-test: true
       skip-launching-test: true
+      cypress-report-artifact-name: Cypress report for base
+    secrets:
+      REG_NOTIFY_GITHUB_PLUGIN_CLIENTID: ${{ secrets.REG_NOTIFY_GITHUB_PLUGIN_CLIENTID }}
+      AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
+      AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+      SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
+
+
+  run-reg-suit-base:
+    needs: [test-prod-base]
+
+    uses: weseek/growi/.github/workflows/reusable-app-reg-suit.yml@support/vrt-with-cypress
+
+    with:
+      node-version: 14.x
+      checkout-ref: ${{ github.event.pull_request.base.ref }}
+      run-sync-expected: true
+      run-compare: true
+      run-publish: true
+      cypress-report-artifact-name: Cypress report for base
     secrets:
     secrets:
       REG_NOTIFY_GITHUB_PLUGIN_CLIENTID: ${{ secrets.REG_NOTIFY_GITHUB_PLUGIN_CLIENTID }}
       REG_NOTIFY_GITHUB_PLUGIN_CLIENTID: ${{ secrets.REG_NOTIFY_GITHUB_PLUGIN_CLIENTID }}
       AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
       AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
       AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
       AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
       SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
       SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
 
 
-  test-suit-head:
+
+  test-prod-head:
     uses: weseek/growi/.github/workflows/reusable-app-prod.yml@support/vrt-with-cypress
     uses: weseek/growi/.github/workflows/reusable-app-prod.yml@support/vrt-with-cypress
     with:
     with:
       node-version: 14.x
       node-version: 14.x
       checkout-ref: ${{ github.event.pull_request.head.ref }}
       checkout-ref: ${{ github.event.pull_request.head.ref }}
+      cypress-report-artifact-name: Cypress report for head
+    secrets:
+      REG_NOTIFY_GITHUB_PLUGIN_CLIENTID: ${{ secrets.REG_NOTIFY_GITHUB_PLUGIN_CLIENTID }}
+      AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
+      AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+      SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
+
+
+  run-reg-suit-head:
+    needs: [run-reg-suit-base, test-prod-head]
+
+    uses: weseek/growi/.github/workflows/reusable-app-reg-suit.yml@support/vrt-with-cypress
+
+    with:
+      node-version: 14.x
+      checkout-ref: ${{ github.event.pull_request.head.ref }}
+      run-sync-expected: true
+      run-compare: true
+      run-publish: true
+      cypress-report-artifact-name: Cypress report for head
     secrets:
     secrets:
       REG_NOTIFY_GITHUB_PLUGIN_CLIENTID: ${{ secrets.REG_NOTIFY_GITHUB_PLUGIN_CLIENTID }}
       REG_NOTIFY_GITHUB_PLUGIN_CLIENTID: ${{ secrets.REG_NOTIFY_GITHUB_PLUGIN_CLIENTID }}
       AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
       AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}

+ 4 - 75
.github/workflows/reusable-app-prod.yml

@@ -11,13 +11,10 @@ on:
         default: ${{ github.head_ref }}
         default: ${{ github.head_ref }}
       skip-launching-test:
       skip-launching-test:
         type: boolean
         type: boolean
-    secrets:
-      REG_NOTIFY_GITHUB_PLUGIN_CLIENTID:
-        required: true
-      AWS_ACCESS_KEY_ID:
-        required: true
-      AWS_SECRET_ACCESS_KEY:
+      cypress-report-artifact-name:
         required: true
         required: true
+        type: string
+    secrets:
       SLACK_WEBHOOK_URL:
       SLACK_WEBHOOK_URL:
         required: true
         required: true
 
 
@@ -263,7 +260,7 @@ jobs:
       if: always()
       if: always()
       uses: actions/upload-artifact@v2
       uses: actions/upload-artifact@v2
       with:
       with:
-        name: Cypress Report
+        name: ${{ inputs.cypress-report-artifact-name }}
         path: |
         path: |
           packages/app/test/cypress/screenshots
           packages/app/test/cypress/screenshots
           packages/app/test/cypress/videos
           packages/app/test/cypress/videos
@@ -277,71 +274,3 @@ jobs:
         channel: '#ci'
         channel: '#ci'
         isCompactMode: true
         isCompactMode: true
         url: ${{ secrets.SLACK_WEBHOOK_URL }}
         url: ${{ secrets.SLACK_WEBHOOK_URL }}
-
-
-
-  run-reg-suit:
-    needs: [run-cypress]
-
-    if: always()
-
-    # use secrets for "VRT" environment
-    # https://github.com/weseek/growi/settings/environments/376165508/edit
-    environment: VRT
-
-    runs-on: ubuntu-latest
-
-    steps:
-    - uses: actions/checkout@v2
-      with:
-        ref: ${{ inputs.checkout-ref }}
-        fetch-depth: 0
-
-    - uses: actions/setup-node@v2
-      with:
-        node-version: ${{ inputs.node-version }}
-        cache: 'yarn'
-        cache-dependency-path: '**/yarn.lock'
-
-    - name: Cache/Restore node_modules
-      uses: actions/cache@v2
-      with:
-        path: |
-          **/node_modules
-        key: node_modules-${{ runner.OS }}-node${{ inputs.node-version }}-${{ hashFiles('**/yarn.lock') }}
-        restore-keys: |
-          node_modules-${{ runner.OS }}-node${{ inputs.node-version }}-
-
-    - name: lerna bootstrap
-      run: |
-        npx lerna bootstrap -- --frozen-lockfile
-
-    - name: Download screenshots taken by cypress
-      uses: actions/download-artifact@v2
-      with:
-        name: Cypress Report
-        path: packages/app/test/cypress
-
-    - name: debug
-      run: |
-        ls -R packages/app/test/cypress
-
-    - name: Run reg-suit
-      working-directory: ./packages/app
-      run: |
-        yarn reg:run
-      env:
-        REG_NOTIFY_GITHUB_PLUGIN_CLIENTID: ${{ secrets.REG_NOTIFY_GITHUB_PLUGIN_CLIENTID }}
-        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
-        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
-        SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
-
-    - name: Slack Notification
-      uses: weseek/ghaction-slack-notification@master
-      if: failure()
-      with:
-        type: ${{ job.status }}
-        job_name: '*Node CI for growi - run-reg-suit (${{ inputs.node-version }})*'
-        channel: '#ci'
-        isCompactMode: true
-        url: ${{ secrets.SLACK_WEBHOOK_URL }}

+ 102 - 0
.github/workflows/reusable-app-reg-suit.yml

@@ -0,0 +1,102 @@
+name: Reusable build app workflow for production
+
+on:
+  workflow_call:
+    inputs:
+      node-version:
+        required: true
+        type: string
+      checkout-ref:
+        type: string
+        default: ${{ github.head_ref }}
+      run-sync-expected:
+        type: boolean
+      run-compare:
+        type: boolean
+      run-publish:
+        type: boolean
+      cypress-report-artifact-name:
+        type: string
+    secrets:
+      REG_NOTIFY_GITHUB_PLUGIN_CLIENTID:
+        required: true
+      AWS_ACCESS_KEY_ID:
+        required: true
+      AWS_SECRET_ACCESS_KEY:
+        required: true
+      SLACK_WEBHOOK_URL:
+        required: true
+    outputs:
+      EXPECTED_IMAGES_EXIST: ${{ jobs.run-reg-suit.outputs.EXPECTED_IMAGES_EXIST }}
+
+
+jobs:
+
+  run-reg-suit:
+    # use secrets for "VRT" environment
+    # https://github.com/weseek/growi/settings/environments/376165508/edit
+    environment: VRT
+
+    env:
+      REG_NOTIFY_GITHUB_PLUGIN_CLIENTID: ${{ secrets.REG_NOTIFY_GITHUB_PLUGIN_CLIENTID }}
+      AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
+      AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+      SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
+
+    runs-on: ubuntu-latest
+
+    outputs:
+      EXPECTED_IMAGES_EXIST: ${{ steps.check-expected-images.outputs.EXPECTED_IMAGES_EXIST }}
+
+    steps:
+    - uses: actions/checkout@v2
+      with:
+        ref: ${{ inputs.checkout-ref }}
+        fetch-depth: 0
+
+    - uses: actions/setup-node@v2
+      with:
+        node-version: ${{ inputs.node-version }}
+        cache: 'yarn'
+        cache-dependency-path: '**/yarn.lock'
+
+    - name: Run reg-suit sync-expected
+      if: ${{ inputs.run-sync-expected }}
+      working-directory: ./packages/app
+      run: |
+        npx reg-suit sync-expected
+
+    - name: Check expected images exist
+      if: ${{ inputs.run-sync-expected }}
+      id: check-expected-images
+      run: |
+        echo "::set-output name=EXPECTED_IMAGES_EXIST::`if [ -d .reg/expected/screenshots ]; then echo true; fi`"
+
+    - name: Download screenshots taken by cypress
+      if: ${{ inputs.run-compare }}
+      uses: actions/download-artifact@v2
+      with:
+        name: ${{ inputs/cypress-report-artifact-name }}
+        path: packages/app/test/cypress
+
+    - name: Run reg-suit compare
+      if: ${{ inputs.run-compare }}
+      working-directory: ./packages/app
+      run: |
+        npx reg-suit compare
+
+    - name: Run reg-suit publish
+      if: ${{ inputs.run-publish }}
+      working-directory: ./packages/app
+      run: |
+        npx reg-suit publish -n
+
+    - name: Slack Notification
+      uses: weseek/ghaction-slack-notification@master
+      if: failure()
+      with:
+        type: ${{ job.status }}
+        job_name: '*Node CI for growi - run-reg-suit (${{ inputs.node-version }})*'
+        channel: '#ci'
+        isCompactMode: true
+        url: ${{ secrets.SLACK_WEBHOOK_URL }}