name: CI

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - '**'

jobs:
  setup:
    runs-on: ubuntu-latest
    timeout-minutes: 30
    outputs:
      plugins: ${{ steps.packages.outputs.paths }}
    steps:
      - name: Cancel Previous Runs
        uses: styfle/cancel-workflow-action@ce177499ccf9fd2aded3b0426c97e5434c2e8a73
        with:
          access_token: ${{ secrets.GITHUB_TOKEN }}
      - uses: actions/checkout@v2
      - name: Restore Dependency Cache
        id: cache-modules
        uses: actions/cache@v2
        with:
          path: |
            node_modules
            */node_modules
          key: dependency-cache-${{ hashFiles('package.json', '*/package.json') }}
      - run: npm install
      - id: files
        uses: imhoffd/get-changed-files@v2
        with:
          format: 'json'
      - id: packages
        uses: ./.github/actions/changed-packages
        with:
          files: ${{ steps.files.outputs.all }}
  lint:
    runs-on: macos-latest
    timeout-minutes: 30
    needs:
      - setup
    steps:
      - uses: actions/setup-node@v1
        with:
          node-version: 14.x
      - uses: actions/checkout@v2
      - name: Restore Dependency Cache
        id: cache-modules
        uses: actions/cache@v2
        with:
          path: |
            node_modules
            */node_modules
          key: dependency-cache-${{ hashFiles('package.json', '*/package.json') }}
      - run: npm install
      - run: npm run lint
  verify-ios:
    runs-on: macos-latest
    if: needs.setup.outputs.plugins != '[]'
    timeout-minutes: 30
    needs:
      - setup
      - lint
    strategy:
      matrix:
        xcode:
          - /Applications/Xcode_12.4.app
        plugin: ${{ fromJson(needs.setup.outputs.plugins) }}
    steps:
      - run: sudo xcode-select --switch ${{ matrix.xcode }}
      - uses: actions/setup-node@v1
        with:
          node-version: 14.x
      - uses: actions/checkout@v2
      - name: Restore Dependency Cache
        id: cache-modules
        uses: actions/cache@v2
        with:
          path: |
            node_modules
            */node_modules
          key: dependency-cache-${{ hashFiles('package.json', '*/package.json') }}
      - run: npm install
      - run: npm run verify:ios
        working-directory: ${{ matrix.plugin }}
  verify-android:
    runs-on: ubuntu-latest
    if: needs.setup.outputs.plugins != '[]'
    timeout-minutes: 30
    needs:
      - setup
      - lint
    strategy:
      matrix:
        plugin: ${{ fromJson(needs.setup.outputs.plugins) }}
    steps:
      - uses: actions/setup-node@v1
        with:
          node-version: 14.x
      - uses: actions/checkout@v2
      - name: Restore Dependency Cache
        id: cache-modules
        uses: actions/cache@v2
        with:
          path: |
            node_modules
            */node_modules
          key: dependency-cache-${{ hashFiles('package.json', '*/package.json') }}
      - run: npm install
      - run: npm run verify:android
        working-directory: ${{ matrix.plugin }}
  verify-web:
    runs-on: ubuntu-latest
    if: needs.setup.outputs.plugins != '[]'
    timeout-minutes: 30
    needs:
      - setup
      - lint
    strategy:
      matrix:
        plugin: ${{ fromJson(needs.setup.outputs.plugins) }}
    steps:
      - uses: actions/setup-node@v1
        with:
          node-version: 14.x
      - uses: actions/checkout@v2
      - name: Restore Dependency Cache
        id: cache-modules
        uses: actions/cache@v2
        with:
          path: |
            node_modules
            */node_modules
          key: dependency-cache-${{ hashFiles('package.json', '*/package.json') }}
      - run: npm install
      - run: npm run verify:web
        working-directory: ${{ matrix.plugin }}
# deploy:
#   runs-on: macos-latest
#   if: github.event_name == 'push' && github.ref == 'refs/heads/main'
#   timeout-minutes: 30
#   needs:
#     - setup
#     - lint
#     - verify-ios
#     - verify-android
#     - verify-web
#   steps:
#     - uses: actions/setup-node@v1
#       with:
#         node-version: 14.x
#     - uses: actions/checkout@v2
#       with:
#         fetch-depth: 0
#     - name: Restore Dependency Cache
#       id: cache-modules
#       uses: actions/cache@v2
#       with:
#         path: |
#           node_modules
#           */node_modules
#         key: dependency-cache-${{ hashFiles('package.json', '*/package.json') }}
#     - run: npm install
#     - run: echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" >> .npmrc
#     - run: npx lerna publish from-git --yes
