Yuki Takei 4 лет назад
Родитель
Сommit
43ff9ebd5a
2 измененных файлов с 20 добавлено и 327 удалено
  1. 9 324
      .github/workflows/ci-app-prod.yml
  2. 11 3
      .github/workflows/reusable-app-prod.yml

+ 9 - 324
.github/workflows/ci-app-prod.yml

@@ -6,330 +6,15 @@ on:
 
 jobs:
 
-  build-prod-node14:
-    runs-on: ubuntu-latest
-
-    strategy:
-      matrix:
-        node-version: [14.x]
-
-    outputs:
-      PROD_FILES: ${{ steps.archive-prod-files.outputs.file }}
-
-    steps:
-    - uses: actions/checkout@v2
-
-    - uses: actions/setup-node@v2
-      with:
-        node-version: ${{ matrix.node-version }}
-        cache: 'yarn'
-        cache-dependency-path: '**/yarn.lock'
-
-    - name: Cache/Restore node_modules
-      id: cache-dependencies
-      uses: actions/cache@v2
-      with:
-        path: |
-          **/node_modules
-        key: node_modules-${{ runner.OS }}-node${{ matrix.node-version }}-${{ hashFiles('**/yarn.lock') }}
-        restore-keys: |
-          node_modules-${{ runner.OS }}-node${{ matrix.node-version }}-
-
-    - name: lerna bootstrap
-      run: |
-        npx lerna bootstrap -- --frozen-lockfile
-
-    - name: Remove unnecessary packages
-      run: |
-        rm -rf packages/slackbot-proxy
-
-    - name: Build
-      run: |
-        yarn lerna run build
-      env:
-        ANALYZE_BUNDLE_SIZE: 1
-
-    - name: Archive production files
-      id: archive-prod-files
-      run: |
-        tar -cf production.tar packages/**/dist packages/app/public
-        echo ::set-output name=file::production.tar
-
-    - name: Upload production files as artifact
-      uses: actions/upload-artifact@v2
-      with:
-        name: Production Files
-        path: ${{ steps.archive-prod-files.outputs.file }}
-
-    - name: Upload report as artifact
-      uses: actions/upload-artifact@v2
-      with:
-        name: Bundle Analyzing Report
-        path: packages/app/report/bundle-analyzer.html
-
-    - name: Slack Notification
-      uses: weseek/ghaction-slack-notification@master
-      if: failure()
-      with:
-        type: ${{ job.status }}
-        job_name: '*Node CI for growi - build-prod (${{ matrix.node-version }})*'
-        channel: '#ci'
-        isCompactMode: true
-        url: ${{ secrets.SLACK_WEBHOOK_URL }}
-
-
-
-  launch-prod-node14:
-    needs: [build-prod-node14]
-    runs-on: ubuntu-latest
-
-    strategy:
-      matrix:
-        node-version: [14.x]
-
-    services:
-      mongodb:
-        image: mongo:4.4
-        ports:
-        - 27017/tcp
-      mongodb36:
-        image: mongo:3.6
-        ports:
-        - 27017/tcp
-
-    steps:
-    - uses: actions/checkout@v2
-
-    - uses: actions/setup-node@v2
-      with:
-        node-version: ${{ matrix.node-version }}
-        cache: 'yarn'
-        cache-dependency-path: '**/yarn.lock'
-
-    - name: Get Date
-      id: get-date
-      run: |
-        echo "::set-output name=dateYmdHM::$(/bin/date -u "+%Y%m%d%H%M")"
-        echo "::set-output name=dateYm::$(/bin/date -u "+%Y%m")"
-
-    - name: Cache/Restore node_modules (not reused)
-      id: cache-dependencies
-      uses: actions/cache@v2
-      with:
-        path: |
-          **/node_modules
-        key: node_modules-build-prod-${{ runner.OS }}-node${{ matrix.node-version }}-${{ steps.get-date.outputs.dateYmdHM }}
-        restore-keys: |
-          node_modules-${{ runner.OS }}-node${{ matrix.node-version }}-${{ hashFiles('**/yarn.lock') }}
-          node_modules-${{ runner.OS }}-node${{ matrix.node-version }}-
-          node_modules-build-prod-${{ runner.OS }}-node${{ matrix.node-version }}-${{ steps.get-date.outputs.dateYm }}
-          node_modules-build-prod-${{ runner.OS }}-node${{ matrix.node-version }}-
-
-    - name: Remove unnecessary packages
-      run: |
-        rm -rf packages/slackbot-proxy
-
-    - name: lerna bootstrap --production
-      run: |
-        npx lerna bootstrap -- --production
-
-    - name: Download production files artifact
-      uses: actions/download-artifact@v2
-      with:
-        name: Production Files
-
-    - name: Extract procution files artifact
-      run: |
-        tar -xf ${{ needs.build-prod-node14.outputs.PROD_FILES }}
-
-    - name: yarn server:ci
-      working-directory: ./packages/app
-      run: |
-        cp config/ci/.env.local.for-ci .env.production.local
-        yarn server:ci
-      env:
-        MONGO_URI: mongodb://localhost:${{ job.services.mongodb.ports['27017'] }}/growi
-    - name: yarn server:ci with MongoDB 3.6
-      working-directory: ./packages/app
-      run: |
-        cp config/ci/.env.local.for-ci .env.production.local
-        yarn server:ci
-      env:
-        MONGO_URI: mongodb://localhost:${{ job.services.mongodb36.ports['27017'] }}/growi
-
-    - name: Slack Notification
-      uses: weseek/ghaction-slack-notification@master
-      if: failure()
-      with:
-        type: ${{ job.status }}
-        job_name: '*Node CI for growi - build-prod (${{ matrix.node-version }})*'
-        channel: '#ci'
-        isCompactMode: true
-        url: ${{ secrets.SLACK_WEBHOOK_URL }}
-
-
-
-  run-cypress-node14:
-    needs: [build-prod-node14]
-
-    runs-on: ubuntu-latest
-    container: cypress/base:14.18.1
-
-    strategy:
-      fail-fast: false
-      matrix:
-        node-version: [14.x]
-        # List string expressions that is comma separated ids of tests in "test/cypress/integration"
-        spec-group: ['1', '2']
-
-    services:
-      mongodb:
-        image: mongo:4.4
-        ports:
-        - 27017/tcp
-
-    steps:
-    - uses: actions/checkout@v2
-
-    - uses: actions/setup-node@v2
-      with:
-        node-version: ${{ matrix.node-version }}
-        cache: 'yarn'
-        cache-dependency-path: '**/yarn.lock'
-
-    # workaround by https://github.com/cypress-io/github-action/issues/407
-    - name: Setup yarn cache settings
-      run: yarn config set cache-folder ~/.cache/yarn
-
-    - name: Cache/Restore node_modules
-      uses: actions/cache@v2
-      with:
-        path: |
-          **/node_modules
-          ~/.cache/Cypress
-        key: node_modules-and-cypress-bin-${{ runner.OS }}-node${{ matrix.node-version }}-${{ hashFiles('**/yarn.lock') }}
-        restore-keys: |
-          node_modules-and-cypress-bin-${{ runner.OS }}-node${{ matrix.node-version }}
-
-    - name: lerna bootstrap
-      run: |
-        npx lerna bootstrap -- --frozen-lockfile
-
-    - name: Download production files artifact
-      uses: actions/download-artifact@v2
-      with:
-        name: Production Files
-
-    - name: Extract procution files artifact
-      run: |
-        tar -xf ${{ needs.build-prod-node14.outputs.PROD_FILES }}
-
-    - name: Determine spec expression
-      id: determine-spec-exp
-      run: |
-        SPEC=`node bin/github-actions/generate-cypress-spec-arg.js --prefix="test/cypress/integration/" --suffix="-*/**" "${{ matrix.spec-group }}"`
-        echo "::set-output name=value::$SPEC"
-
-    - name: Cypress Run
-      uses: cypress-io/github-action@v2
-      with:
-        working-directory: ./packages/app
-        install: false
-        spec: '${{ steps.determine-spec-exp.outputs.value }}'
-        build: |
-          cp config/ci/.env.local.for-ci .env.production.local
-        start: yarn server
-        wait-on: 'http://localhost:3000'
-      env:
-        MONGO_URI: mongodb://mongodb:27017/growi-vrt
-
-    - name: Upload results
-      if: always()
-      uses: actions/upload-artifact@v2
-      with:
-        name: Cypress Report
-        path: |
-          packages/app/test/cypress/screenshots
-          packages/app/test/cypress/videos
-
-    - name: Slack Notification
-      uses: weseek/ghaction-slack-notification@master
-      if: failure()
-      with:
-        type: ${{ job.status }}
-        job_name: '*Node CI for growi - run-cypress (${{ matrix.node-version }})*'
-        channel: '#ci'
-        isCompactMode: true
-        url: ${{ secrets.SLACK_WEBHOOK_URL }}
-
-
-
-  run-reg-suit:
-    needs: [run-cypress-node14]
-
-    if: always()
-
-    # use secrets for "VRT" environment
-    # https://github.com/weseek/growi/settings/environments/376165508/edit
-    environment: VRT
-
-    runs-on: ubuntu-latest
-
-    strategy:
-      matrix:
-        node-version: [14.x]
-
-    steps:
-    - uses: actions/checkout@v2
+  build-prod-base:
+    uses: weseek/growi/.github/workflows/reusable-app-prod.yml@support/vrt-with-cypress
       with:
-        ref: ${{ github.head_ref }}
-        fetch-depth: 0
-
-    - uses: actions/setup-node@v2
-      with:
-        node-version: ${{ matrix.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${{ matrix.node-version }}-${{ hashFiles('**/yarn.lock') }}
-        restore-keys: |
-          node_modules-${{ runner.OS }}-node${{ matrix.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 }}
+        node-version: 14.x
+        checkout-ref: ${{ github.event.pull_request.head.ref }}
 
-    - name: Slack Notification
-      uses: weseek/ghaction-slack-notification@master
-      if: failure()
+  build-prod-head:
+    uses: weseek/growi/.github/workflows/reusable-app-prod.yml@support/vrt-with-cypress
       with:
-        type: ${{ job.status }}
-        job_name: '*Node CI for growi - run-reg-suit (${{ matrix.node-version }})*'
-        channel: '#ci'
-        isCompactMode: true
-        url: ${{ secrets.SLACK_WEBHOOK_URL }}
+        node-version: 14.x
+        checkout-ref: ${{ github.event.pull_request.head.ref }}
+        test-launching: true

+ 11 - 3
.github/workflows/reusable-app-prod.yml

@@ -6,7 +6,9 @@ on:
       node-version:
         required: true
         type: string
-      test-launching:
+      checkout-ref:
+        type: string
+      skip-launching-test:
         type: boolean
 
 jobs:
@@ -19,6 +21,8 @@ jobs:
 
     steps:
     - uses: actions/checkout@v2
+      with:
+        ref: ${{ input.checkout-ref ||  github.head_ref }}
 
     - uses: actions/setup-node@v2
       with:
@@ -84,7 +88,7 @@ jobs:
     needs: [build-prod]
     runs-on: ubuntu-latest
 
-    if: ${{ inputs.test-launching }}
+    if: ${{ !inputs.skip-launching-test }}
 
     services:
       mongodb:
@@ -98,6 +102,8 @@ jobs:
 
     steps:
     - uses: actions/checkout@v2
+      with:
+        ref: ${{ input.checkout-ref ||  github.head_ref }}
 
     - uses: actions/setup-node@v2
       with:
@@ -188,6 +194,8 @@ jobs:
 
     steps:
     - uses: actions/checkout@v2
+      with:
+        ref: ${{ input.checkout-ref ||  github.head_ref }}
 
     - uses: actions/setup-node@v2
       with:
@@ -276,7 +284,7 @@ jobs:
     steps:
     - uses: actions/checkout@v2
       with:
-        ref: ${{ github.head_ref }}
+        ref: ${{ input.checkout-ref ||  github.head_ref }}
         fetch-depth: 0
 
     - uses: actions/setup-node@v2