name: Test application generation

on:
  push:
    branches:
      - main

  pull_request:
    types: [opened, synchronize, reopened]

jobs:
  prettier-check:
    name: Prettier check
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2
      - name: Install dependencies
        run: npm install
      - name: Run prettier check
        run: npm run format:check

  test-schematics:
    name: Test schematics
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2
      - name: Install dependencies
        run: npm install
      - name: Run schematics tests
        run: npm run test

  generate-application:
    name: Generate application
    needs: [test-schematics, prettier-check]
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2
      - name: Install dependencies
        run: npm install
      - name: Install schematics CLI
        run: npm install --location=global @angular-devkit/schematics-cli@latest
      - name: Build schematics
        run: npm run build
      - name: Link npm package
        run: npm link
      - name: Generate application
        run: janush --name=janush-auto-generated-app --types={web,cloud} --modules={authentication,api,usersManagement} --e2e --e2e-module=Cypress --skip-install --is-auto-generated
      - name: Upload generated application
        uses: actions/upload-artifact@master
        with:
          name: janush-auto-generated-app
          path: janush-auto-generated-app

  test-web:
    name: Test web
    needs: [generate-application]
    runs-on: ubuntu-latest
    steps:
      - name: Download generated application
        uses: actions/download-artifact@master
        with:
          name: janush-auto-generated-app
          path: janush-auto-generated-app
      - name: Install dependencies
        working-directory: ./janush-auto-generated-app/web
        run: npm install
      - name: Run tests
        working-directory: ./janush-auto-generated-app/web
        run: npm run test -- --watchAll=false
        env:
          CI: true

  test-cloud:
    name: Test cloud
    needs: [generate-application]
    runs-on: ubuntu-latest
    steps:
      - name: Download generated application
        uses: actions/download-artifact@master
        with:
          name: janush-auto-generated-app
          path: janush-auto-generated-app
      - name: Install dependencies
        working-directory: ./janush-auto-generated-app/cloud
        run: npm install
      - name: Run tests
        working-directory: ./janush-auto-generated-app/cloud
        run: npm run test -- --watchAll=false
        env:
          CI: true

  push-to-dedicated-repo:
    name: Push to dedicated repo
    if: github.ref == 'refs/heads/main'
    needs: [test-web, test-cloud]
    runs-on: ubuntu-latest
    steps:
      - name: Download generated application
        uses: actions/download-artifact@master
        with:
          name: janush-auto-generated-app
          path: janush-auto-generated-app
      - name: Push to dedicated repo
        env:
          BOT_PERSONAL_ACCESS_TOKEN: ${{ secrets.BOT_PERSONAL_ACCESS_TOKEN }}
        run: |
          cd janush-auto-generated-app
          git config --global user.name JanushBot
          git config --global user.email janush@codeandpepper.com
          git init -b main
          git add .
          git commit -m "Automatically generated by JanushBot (SHA: $GITHUB_SHA)"
          git push https://${BOT_PERSONAL_ACCESS_TOKEN}@github.com/codeandpepper/janush.app.git main --force
      - name: Wait until janush.app pipeline is done
        uses: convictional/trigger-workflow-and-wait@v1.6.1
        with:
          owner: codeandpepper
          repo: janush.app
          github_token: ${{ secrets.BOT_PERSONAL_ACCESS_TOKEN }}
          workflow_file_name: main.yml
          wait_interval: 30
