name: Squiggle packages check

on:
  push:
    branches:
      - master
      - develop
  pull_request:
    branches:
      - master
      - develop

jobs:
  pre_check:
    name: Precheck for skipping redundant jobs
    runs-on: ubuntu-latest
    outputs:
      should_skip_lang: ${{ steps.skip_lang_check.outputs.should_skip }}
      should_skip_components: ${{ steps.skip_components_check.outputs.should_skip }}
      should_skip_website: ${{ steps.skip_website_check.outputs.should_skip }}
    steps:
      - id: skip_lang_check
        name: Check if the changes are about squiggle-lang src files
        uses: fkirc/skip-duplicate-actions@v3.4.1
        with:
          paths: '["packages/squiggle-lang/**"]'
      - id: skip_components_check
        name: Check if the changes are about components src files
        uses: fkirc/skip-duplicate-actions@v3.4.1
        with:
          paths: '["packages/components/**"]'
      - id: skip_website_check
        name: Check if the changes are about website src files
        uses: fkirc/skip-duplicate-actions@v3.4.1
        with:
          paths: '["packages/website/**"]'

  lang-lint:
    name: Language lint
    runs-on: ubuntu-latest
    needs: pre_check
    if: ${{ needs.pre_check.outputs.should_skip_lang != 'true' }}
    defaults:
      run:
        shell: bash
        working-directory: packages/squiggle-lang
    steps:
      - uses: actions/checkout@v2
      - name: Install Dependencies
        run: cd ../../ && yarn
      - name: Check rescript lint
        run: yarn lint:rescript
      - name: Check javascript, typescript, and markdown lint
        uses: creyD/prettier_action@v4.2
        with:
          dry: true
          prettier_options: --check packages/squiggle-lang

  lang-build-test-bundle:
    name: Language build, test, and bundle
    runs-on: ubuntu-latest
    needs: pre_check
    if: ${{ needs.pre_check.outputs.should_skip_lang != 'true' }}
    defaults:
      run:
        shell: bash
        working-directory: packages/squiggle-lang
    steps:
      - uses: actions/checkout@v2
      - name: Install dependencies from monorepo level
        run: cd ../../ && yarn
      - name: Build rescript codebase
        run: yarn build
      - name: Run tests
        run: yarn test
      - name: Run webpack
        run: yarn bundle
      - name: Upload coverage report
        run: yarn coverage:ci

  components-lint:
    name: Components lint
    runs-on: ubuntu-latest
    needs: pre_check
    if: ${{ needs.pre_check.outputs.should_skip_components != 'true' }}
    defaults:
      run:
        shell: bash
        working-directory: packages/components
    steps:
      - uses: actions/checkout@v2
      - name: Check javascript, typescript, and markdown lint
        uses: creyD/prettier_action@v4.2
        with:
          dry: true
          prettier_options: --check packages/components

  components-bundle-build:
    name: Components bundle and build
    runs-on: ubuntu-latest
    needs: pre_check
    if: ${{ (needs.pre_check.outputs.should_skip_components != 'true') || (needs.pre_check.outputs.should_skip_lang != 'true') }}
    defaults:
      run:
        shell: bash
        working-directory: packages/components
    steps:
      - uses: actions/checkout@v2
      - name: Install dependencies from monorepo level
        run: cd ../../ && yarn
      - name: Build rescript codebase in squiggle-lang
        run: cd ../squiggle-lang && yarn build
      - name: Run webpack
        run: yarn bundle
      - name: Build storybook
        run: yarn build

  website-lint:
    name: Website lint
    runs-on: ubuntu-latest
    needs: pre_check
    if: ${{ needs.pre_check.outputs.should_skip_website != 'true' }}
    defaults:
      run:
        shell: bash
        working-directory: packages/website
    steps:
      - uses: actions/checkout@v2
      - name: Check javascript, typescript, and markdown lint
        uses: creyD/prettier_action@v4.2
        with:
          dry: true
          prettier_options: --check packages/website

  website-build:
    name: Website build
    runs-on: ubuntu-latest
    needs: pre_check
    if: ${{ (needs.pre_check.outputs.should_skip_website != 'true') || (needs.pre_check.outputs.should_skip_lang != 'true')  || (needs.pre_check.outputs.should_skip_components != 'true') }}
    defaults:
      run:
        shell: bash
        working-directory: packages/website
    steps:
      - uses: actions/checkout@v2
      - name: Install dependencies from monorepo level
        run: cd ../../ && yarn
      - name: Build rescript in squiggle-lang
        run: cd ../squiggle-lang && yarn build
      - name: Build website assets
        run: yarn build