From 6ac40e6737319f3956ef8e41ccfe7a3aa29e75e5 Mon Sep 17 00:00:00 2001
From: MoyuScript <i@moyu.moe>
Date: Fri, 31 Jul 2020 19:21:02 +0800
Subject: [PATCH] ci: build docs (#2305)

---
 .editorconfig            |   2 +-
 .github/workflows/ci.yml | 229 ++++++++++++++++++++++++++-------------
 2 files changed, 152 insertions(+), 79 deletions(-)

diff --git a/.editorconfig b/.editorconfig
index e3b84d0..58b359a 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -11,7 +11,7 @@ insert_final_newline = true
 indent_style = space
 indent_size = 4
 
-[{azure-pipelines.yml,package.json, ci/*.yml}]
+[{*.yml,package.json}]
 # The indent size used in the `package.json` file cannot be changed
 # https://github.com/npm/npm/pull/3180#issuecomment-16336516
 indent_size = 2
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 0c7ba71..514f7d8 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -7,81 +7,81 @@ on:
       - 'test*'
   pull_request:
     branches: [ master ]
- 
+
 jobs:
   build:
     runs-on: ubuntu-latest
     name: Build
     steps:
-    - uses: actions/checkout@v2
-    - uses: actions/setup-node@v1
-      with:
-        node-version: 12
-    - name: Cache node modules
-      uses: actions/cache@v2
-      env:
-        cache-name: cache-node-modules
-      with:
-        # npm cache files are stored in `~/.npm` on Linux/macOS
-        path: ~/.npm
-        key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
-        restore-keys: |
-          ${{ runner.os }}-build-${{ env.cache-name }}-
-          ${{ runner.os }}-build-
-          ${{ runner.os }}-
-    - name: Npm install
-      run: npm ci
-    - name: Build
-      run: npm run build
-    - name: Pack
-      run: |
-       npm pack
-       mv html2canvas-*.tgz html2canvas.tgz
-       tar --list --verbose --file=html2canvas.tgz
-    - name: Upload npm pack
-      uses: actions/upload-artifact@v2
-      with:
-        name: npm
-        path: html2canvas.tgz
-    - name: Upload dist
-      uses: actions/upload-artifact@v2
-      with:
-        name: dist
-        path: dist
-    - name: Upload build
-      uses: actions/upload-artifact@v2
-      with:
-        name: build
-        path: build
-        
+      - uses: actions/checkout@v2
+      - uses: actions/setup-node@v1
+        with:
+          node-version: 12
+      - name: Cache node modules
+        uses: actions/cache@v2
+        env:
+          cache-name: cache-node-modules
+        with:
+          # npm cache files are stored in `~/.npm` on Linux/macOS
+          path: ~/.npm
+          key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
+          restore-keys: |
+            ${{ runner.os }}-build-${{ env.cache-name }}-
+            ${{ runner.os }}-build-
+            ${{ runner.os }}-
+      - name: Npm install
+        run: npm ci
+      - name: Build
+        run: npm run build
+      - name: Pack
+        run: |
+          npm pack
+          mv html2canvas-*.tgz html2canvas.tgz
+          tar --list --verbose --file=html2canvas.tgz
+      - name: Upload npm pack
+        uses: actions/upload-artifact@v2
+        with:
+          name: npm
+          path: html2canvas.tgz
+      - name: Upload dist
+        uses: actions/upload-artifact@v2
+        with:
+          name: dist
+          path: dist
+      - name: Upload build
+        uses: actions/upload-artifact@v2
+        with:
+          name: build
+          path: build
+
   test:
     runs-on: ubuntu-latest
     name: Test
     steps:
-    - uses: actions/checkout@v2
-    - uses: actions/setup-node@v1
-      with:
-        node-version: 12
-    - name: Cache node modules
-      uses: actions/cache@v2
-      env:
-        cache-name: cache-node-modules
-      with:
-        # npm cache files are stored in `~/.npm` on Linux/macOS
-        path: ~/.npm
-        key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
-        restore-keys: |
-          ${{ runner.os }}-build-${{ env.cache-name }}-
-          ${{ runner.os }}-build-
-          ${{ runner.os }}-
-    - name: Npm install
-      run: npm ci
-    - name: Build
-      run: npm run build
-    - name: Lint
-      run: npm run lint
-    - name: Unit tests
-      run: npm run unittest
+      - uses: actions/checkout@v2
+      - uses: actions/setup-node@v1
+        with:
+          node-version: 12
+      - name: Cache node modules
+        uses: actions/cache@v2
+        env:
+          cache-name: cache-node-modules
+        with:
+          # npm cache files are stored in `~/.npm` on Linux/macOS
+          path: ~/.npm
+          key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
+          restore-keys: |
+            ${{ runner.os }}-build-${{ env.cache-name }}-
+            ${{ runner.os }}-build-
+            ${{ runner.os }}-
+      - name: Npm install
+        run: npm ci
+      - name: Build
+        run: npm run build
+      - name: Lint
+        run: npm run lint
+      - name: Unit tests
+        run: npm run unittest
   browser-test:
     strategy:
       fail-fast: false
@@ -91,22 +91,22 @@ jobs:
             name: Linux Firefox Stable
             targetBrowser: Firefox_Stable
             xvfb: true
-          - os: ubuntu-latest  
+          - os: ubuntu-latest
             name: Linux Chrome Stable
             targetBrowser: Chrome_Stable
             xvfb: true
-          - os: macos-latest  
+          - os: macos-latest
             name: OSX Safari Stable
             targetBrowser: Safari_Stable
-          - os: macos-latest  
+          - os: macos-latest
             name: iOS Simulator Safari 12
             targetBrowser: Safari_IOS_12
             xcode: /Applications/Xcode_10.3.app
-          - os: macos-latest  
+          - os: macos-latest
             name: iOS Simulator Safari 13
             targetBrowser: Safari_IOS_13
             xcode: /Applications/Xcode_11.6_beta.app
-          - os: macos-latest  
+          - os: macos-latest
             name: iOS Simulator Safari 14
             targetBrowser: Safari_IOS_14
             xcode: /Applications/Xcode_12_beta.app
@@ -115,7 +115,7 @@ jobs:
             targetBrowser: IE_9
           - os: windows-latest
             name: Windows Internet Explorer 10 (Emulated)
-            targetBrowser: IE_10  
+            targetBrowser: IE_10
           - os: windows-latest
             name: Windows Internet Explorer 11
             targetBrowser: IE_11
@@ -168,10 +168,11 @@ jobs:
       - name: Upload screenshots
         uses: actions/upload-artifact@v2
         with:
-          name: ReftestResults
-          path: tmp/reftests      
-  publish: 
+          name: reftest-results
+          path: tmp/reftests
+  publish:
     runs-on: ubuntu-latest
+    name: Publish
     if: startsWith(github.ref, 'refs/tags/test')
     needs: browser-test
     steps:
@@ -199,7 +200,7 @@ jobs:
         env:
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
         with:
-          upload_url: ${{ steps.create_release.outputs.upload_url }}  
+          upload_url: ${{ steps.create_release.outputs.upload_url }}
           asset_path: ./dist/html2canvas.js
           asset_name: html2canvas.js
           asset_content_type: text/javascript
@@ -208,7 +209,7 @@ jobs:
         env:
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
         with:
-          upload_url: ${{ steps.create_release.outputs.upload_url }}  
+          upload_url: ${{ steps.create_release.outputs.upload_url }}
           asset_path: ./dist/html2canvas.min.js
           asset_name: html2canvas.min.js
           asset_content_type: text/javascript
@@ -217,7 +218,79 @@ jobs:
         env:
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
         with:
-          upload_url: ${{ steps.create_release.outputs.upload_url }}  
+          upload_url: ${{ steps.create_release.outputs.upload_url }}
           asset_path: ./dist/html2canvas.esm.js
           asset_name: html2canvas.esm.js
           asset_content_type: text/javascript
+  docs:
+    runs-on: ubuntu-latest
+    name: Build docs
+    needs: browser-test
+    steps:
+      - uses: actions/checkout@v2
+      - uses: actions/setup-node@v1
+        with:
+          node-version: 12
+      - name: Cache node modules
+        uses: actions/cache@v2
+        env:
+          cache-name: cache-node-modules
+        with:
+          # npm cache files are stored in `~/.npm` on Linux/macOS
+          path: ~/.npm
+          key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
+          restore-keys: |
+            ${{ runner.os }}-build-${{ env.cache-name }}-
+            ${{ runner.os }}-build-
+            ${{ runner.os }}-
+      - name: Npm install
+        run: npm ci
+      - name: Download library
+        uses: actions/download-artifact@v2
+        with:
+          name: dist
+          path: www/static/dist
+      - name: Download test results
+        uses: actions/download-artifact@v2
+        with:
+          name: reftest-results
+          path: www/static/results
+      - name: Copy reftests to docs website
+        run: cp -R tests/reftests www/static/tests/reftests && cp -R tests/assets www/static/tests/assets && cp tests/test.js www/static/tests/test.js
+      - name: Create reftest result index
+        run: npm run build:reftest-result-list www/static/results/metadata www/src/results.json
+      - name: Create reftest previewer
+        run: npm run build:reftest-preview
+      - name: Clean metadata folder
+        run: rm -rf www/static/results/metadata
+      - name: Build docs
+        run: npm run build && cd www && npm install && npm run build && cd ..
+      - name: Upload docs
+        uses: actions/upload-artifact@v2
+        with:
+          name: docs
+          path: www/public
+      - name: Echo
+        run: echo ${{ github.ref }}
+  publish-docs:
+    runs-on: ubuntu-latest
+    name: Publish Docs
+    if: ${{ github.ref == 'master' }}
+    needs: docs
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          persist-credentials: false
+      - name: Download docs
+        uses: actions/download-artifact@v2
+        with:
+          name: docs
+          path: docs
+      - name: Publish docs
+        uses: JamesIves/github-pages-deploy-action@3.5.9
+        with:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+          BRANCH: gh-pages-test
+          FOLDER: docs
+          SINGLE_COMMIT: true
+          CLEAN: true