name: CI on: push: branches: [ master ] 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 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 browser-test: strategy: matrix: config: - os: ubuntu-latest name: Linux Firefox Stable targetBrowser: Firefox_Stable xvfb: true - os: ubuntu-latest name: Linux Chrome Stable targetBrowser: Chrome_Stable xvfb: true - os: macos-latest name: OSX Safari Stable targetBrowser: Safari_Stable - os: macos-latest name: iOS Simulator Safari 12 targetBrowser: Safari_IOS_12 xcode: /Applications/Xcode_10.3.app - os: macos-latest name: iOS Simulator Safari 13 targetBrowser: Safari_IOS_13 xcode: /Applications/Xcode_11.6_beta.app - os: macos-latest name: iOS Simulator Safari 14 targetBrowser: Safari_IOS_14 xcode: /Applications/Xcode_12_beta.app - os: windows-latest name: Windows Internet Explorer 9 (Emulated) targetBrowser: IE_9 - os: windows-latest name: Windows Internet Explorer 10 (Emulated) targetBrowser: IE_10 - os: windows-latest name: Windows Internet Explorer 11 targetBrowser: IE_11 runs-on: ${{ matrix.config.os }} name: ${{ matrix.config.name }} env: TARGET_BROWSER: ${{ matrix.config.targetBrowser }} needs: 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: Download library uses: actions/download-artifact@v2 with: name: dist path: dist - name: Download test-runner uses: actions/download-artifact@v2 with: name: build path: build - name: xcode selection if: ${{ matrix.config.xcode != '' }} run: sudo xcode-select -s "${{ matrix.config.xcode }}" - name: Run browser tests if: ${{ matrix.config.xvfb != true }} run: npm run karma - name: Start Xvfb if: ${{ matrix.config.xvfb == true }} run: Xvfb :99 & - name: Run browser tests if: ${{ matrix.config.xvfb == true }} run: DISPLAY=:99 npm run karma - name: Upload screenshots uses: actions/upload-artifact@v2 with: name: ReftestResults path: tmp/reftests