name: Package usage

on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - name: Setup Node.js
        uses: actions/setup-node@v1
        with:
          node-version: 14.x
      - name: npm install and build
        run: |
          npm install
          npm run build
      - name: Store build-output for later
        uses: actions/upload-artifact@v2
        with:
          name: build-output
          path: |
            mustache.js
            mustache.mjs

  package:
    runs-on: ubuntu-latest

    needs: build
    steps:
      - uses: actions/checkout@v2
      - name: Setup Node.js
        uses: actions/setup-node@v1
        with:
          node-version: 14.x
      - name: Get build-output from build step
        uses: actions/download-artifact@v2
        with:
          name: build-output
      - name: Create package tarball
        run: |
          export ARCHIVE_FILENAME=$(npm pack | tail -n 1)
          mv $ARCHIVE_FILENAME mustache.tgz
      - name: Store package tarball for later
        uses: actions/upload-artifact@v2
        with:
          name: package-output
          path: mustache.tgz

  common-js-usage:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [10.x, 12.x, 14.x, 15.x]

    needs: package
    steps:
      - uses: actions/checkout@v1
      - name: Setup Node.js
        uses: actions/setup-node@v1
        with:
          node-version: ${{ matrix.node-version }}
      - name: Get package tarball from package step
        uses: actions/download-artifact@v2
        with:
          name: package-output
      - name: Package, install and test
        run: |
          export UNPACK_DESTINATION=$(mktemp -d)
          mv mustache.tgz $UNPACK_DESTINATION
          cp test/module-systems/commonjs-test.js $UNPACK_DESTINATION
          cd $UNPACK_DESTINATION
          npm install mustache.tgz
          node commonjs-test.js

  esm-usage:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [14.x, 15.x]

    needs: package
    steps:
      - uses: actions/checkout@v1
      - name: Setup Node.js
        uses: actions/setup-node@v1
        with:
          node-version: ${{ matrix.node-version }}
      - name: Get package tarball from package step
        uses: actions/download-artifact@v2
        with:
          name: package-output
      - name: Package, install and test
        run: |
          export UNPACK_DESTINATION=$(mktemp -d)
          mv mustache.tgz $UNPACK_DESTINATION
          cp test/module-systems/esm-test.mjs $UNPACK_DESTINATION
          cp test/module-systems/esm-test-exports.mjs $UNPACK_DESTINATION
          cd $UNPACK_DESTINATION
          npm install mustache.tgz
          node esm-test.mjs
          node esm-test-exports.mjs

  browser-usage:
    runs-on: ubuntu-latest

    needs: build
    steps:
      - uses: actions/checkout@v1
      - name: Setup Node.js
        uses: actions/setup-node@v1
        with:
          node-version: 12.x
      - name: Get build-output from build step
        uses: actions/download-artifact@v2
        with:
          name: build-output
      - name: Install and test
        run: |
          npm ci
          npx mocha test/module-systems/browser-test.js

  deno-usage:
    runs-on: ubuntu-latest

    needs: build
    steps:
      - uses: actions/checkout@v1
      - uses: denolib/setup-deno@master
        with:
          deno-version: 'v1.0.0'
      - name: Get build-output from build step
        uses: actions/download-artifact@v2
        with:
          name: build-output
      - run: deno --version
      - run: deno test --allow-net=deno.land test/module-systems/deno-test.ts
