name: Continuous Integration on: push: paths-ignore: - "**.md" - "tools/**" pull_request: paths-ignore: - "**.md" - "tools/**" schedule: - cron: 0 11 * * 1-5 jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 - name: Setup node uses: actions/setup-node@v2 with: node-version: 14 check-latest: true - name: Store node version variable id: node run: | echo "::set-output name=version::$(node -v)" - name: Cache node_modules uses: actions/cache@v2 id: node_modules with: path: node_modules key: ${{ runner.os }}-node_modules-${{ hashFiles('package.json') }}-${{ steps.node.outputs.version }} - name: Install dependencies run: npx panva/npm-install-retry if: ${{ steps.node_modules.outputs.cache-hit != 'true' }} - name: Cache dist uses: actions/cache@v2 id: dist with: path: dist key: dist-${{ hashFiles('src/**/*.ts') }}-${{ hashFiles('tsconfig/*.json') }} - run: sed -i -e "s/-i ''/-i/g" package.json - run: sed -i -e "s/gcp/cp/g" package.json - name: Build run: npm run build-all if: ${{ steps.dist.outputs.cache-hit != 'true' }} - run: git reset HEAD --hard test: needs: - build continue-on-error: ${{ matrix.experimental || false }} strategy: fail-fast: false matrix: node-version: - 12.20.0 - 12 - 14.15.0 - 14 include: - experimental: true node-version: '>=15' runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 - name: Setup node uses: actions/setup-node@v2 with: node-version: ${{ matrix.node-version }} check-latest: true - name: Store node version variable id: node run: | echo "::set-output name=version::$(node -v)" - name: Cache node_modules uses: actions/cache@v2 id: node_modules with: path: node_modules key: ${{ runner.os }}-node_modules-${{ hashFiles('package.json') }}-${{ steps.node.outputs.version }} - name: Install dependencies run: npx panva/npm-install-retry if: ${{ steps.node_modules.outputs.cache-hit != 'true' }} - name: Load cached dist uses: actions/cache@v2 id: dist with: path: dist key: dist-${{ hashFiles('src/**/*.ts') }}-${{ hashFiles('tsconfig/*.json') }} - name: Test Node.js crypto run: npm run test - name: Test Node.js crypto w/ CryptoKey run: npm run test-cryptokey if: ${{ !startsWith(matrix.node-version, '14') && !startsWith(matrix.node-version, '12') }} - name: Test Web Cryptography API run: npm run test-webcrypto if: ${{ !startsWith(matrix.node-version, '14') && !startsWith(matrix.node-version, '12') }} - run: git reset HEAD --hard test-electron: needs: - build strategy: matrix: electron-version: - 12.0.0 - latest runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 - name: Setup node uses: actions/setup-node@v2 with: node-version: 14 check-latest: true - name: Store node version variable id: node run: | echo "::set-output name=version::$(node -v)" - name: Cache node_modules uses: actions/cache@v2 id: node_modules with: path: node_modules key: ${{ runner.os }}-node_modules-${{ hashFiles('package.json') }}-${{ steps.node.outputs.version }} - name: Install dependencies run: npx panva/npm-install-retry if: ${{ steps.node_modules.outputs.cache-hit != 'true' }} - name: Load cached dist uses: actions/cache@v2 id: dist with: path: dist key: dist-${{ hashFiles('src/**/*.ts') }}-${{ hashFiles('tsconfig/*.json') }} - name: Install Electron run: npm install --global xvfb-maybe electron@${{ matrix.electron-version }} - name: Test Electron crypto run: xvfb-maybe electron ./test/.electron - run: git reset HEAD --hard browserstack: env: BROWSERSTACK_USERNAME: ${{ secrets.BROWSERSTACK_USERNAME }} BROWSERSTACK_ACCESS_KEY: ${{ secrets.BROWSERSTACK_ACCESS_KEY }} needs: - build runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 - name: Setup node uses: actions/setup-node@v2 with: node-version: 14 - name: Store node version variable id: node run: | echo "::set-output name=version::$(node -v)" - name: Cache node_modules uses: actions/cache@v2 id: node_modules with: path: node_modules key: ${{ runner.os }}-node_modules-${{ hashFiles('package.json') }}-${{ steps.node.outputs.version }} - name: Install dependencies run: npx panva/npm-install-retry if: ${{ steps.node_modules.outputs.cache-hit != 'true' }} - name: Load cached dist uses: actions/cache@v2 id: dist with: path: dist key: dist-${{ hashFiles('src/**/*.ts') }}-${{ hashFiles('tsconfig/*.json') }} - run: npm run test-browser - run: git reset HEAD --hard prepare-release: needs: - browserstack - test - test-electron runs-on: ubuntu-latest if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags') && github.repository == 'panva/jose' }} steps: - name: Checkout uses: actions/checkout@v2 with: fetch-depth: 2 - name: Setup node uses: actions/setup-node@v2 with: node-version: 14 - run: node tools/release-notes env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}