name: CI

on:
  # Runs on Every Push
  push:
  # Runs on Pull Requests
  pull_request:
  workflow_dispatch:

jobs:
  pdk:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          submodules: recursive

      - name: Set up QEMU
        uses: docker/setup-qemu-action@v1

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1

      - name: Export PDK ROOT
        run: echo "PDK_ROOT=/home/runner/work/pdk" >> $GITHUB_ENV
      
      - name: Export OPENLANE ROOT
        run: echo "OPENLANE_ROOT=/home/runner/work/caravel_user_project/openlane" >> $GITHUB_ENV

      - name: Install dependencies
        run: |
          sudo mkdir -p ${{ env.PDK_ROOT }}
          sudo chown -R $USER:$USER ${{ env.PDK_ROOT }}
          make install
          make openlane
          make pdk-with-volare

      - name: Tarball PDK
        run: |
          tar -cf /tmp/pdk.tar -C $PDK_ROOT .

      - name: Upload PDK Tarball
        uses: actions/upload-artifact@v2
        with:
          name: pdk-tarball
          path: /tmp/pdk.tar

  user_project_flow_sky130A:
    timeout-minutes: 720
    runs-on: ubuntu-latest
    needs: [pdk]
    steps:
      - uses: actions/checkout@v2
        with:
          submodules: recursive

      - name: Set up QEMU
        uses: docker/setup-qemu-action@v1

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1

      - name: Export PDK ROOT
        run: echo "PDK_ROOT=/home/runner/work/pdk" >> $GITHUB_ENV

      - name: Export PDK PATH
        run: echo "PDKPATH=/home/runner/work/pdk/sky130A" >> $GITHUB_ENV

      - name: Export PDK
        run: echo "PDK=sky130A" >> $GITHUB_ENV

      - name: Export OPENLANE ROOT
        run: echo "OPENLANE_ROOT=/home/runner/work/caravel_user_project/openlane" >> $GITHUB_ENV

      - name: Download PDK Tarball
        uses: actions/download-artifact@v2
        with:
          name: pdk-tarball
          path: /tmp

      - name: Unpack PDK Tarball
        run: |
          sudo mkdir -p ${{ env.PDK_ROOT }}
          sudo chown -R $USER:$USER ${{ env.PDK_ROOT }}
          tar -xf /tmp/pdk.tar -C $PDK_ROOT .

      - name: Install dependencies
        run: |
          make install
          make install_mcw
          make openlane
          make simenv

      - name: Harden using Openlane
        run: |
          make clean-user_proj_example user_proj_example
          make clean-user_project_wrapper user_project_wrapper

      - name: run precheck
        run: |
          export INPUT_DIRECTORY=$(pwd)
          export PRECHECK_ROOT=$INPUT_DIRECTORY/mpw_precheck
          export OUTPUT_DIRECTORY=$INPUT_DIRECTORY/mpw_precheck_result
          export OUTPUT=$OUTPUT_DIRECTORY/logs/precheck.log
          export PDKPATH=$PDK_ROOT/sky130A

          git clone --depth=1 -b mpw-7d https://github.com/efabless/mpw_precheck.git

          docker run -v "$PRECHECK_ROOT":"$PRECHECK_ROOT" -v "$INPUT_DIRECTORY":"$INPUT_DIRECTORY" -v "${{ env.PDK_ROOT }}":"${{ env.PDK_ROOT }}" -e INPUT_DIRECTORY="$INPUT_DIRECTORY" -e PDK_ROOT="${{ env.PDK_ROOT }}" -e PDKPATH="${{ env.PDKPATH }}" -u $(id -u "$USER"):$(id -g "$USER") efabless/mpw_precheck:latest bash -c "cd $PRECHECK_ROOT; python3 mpw_precheck.py --input_directory $INPUT_DIRECTORY --pdk_path ${{ env.PDKPATH }} --output_directory $OUTPUT_DIRECTORY license makefile consistency xor magic_drc klayout_beol klayout_feol klayout_met_min_ca_density klayout_offgrid klayout_pin_label_purposes_overlapping_drawing klayout_zeroarea"

          cnt=$(grep -c "All Checks Passed" "$OUTPUT")
          if ! [[ $cnt ]]; then cnt=0; fi
          if [[ $cnt -eq 1 ]]; then exit 0; fi
          exit 2
      
      - name: upload failure logs
        if: failure()
        uses: actions/upload-artifact@v2
        with:
          name: error
          path: |
            /home/runner/work/caravel_user_project/caravel_user_project/mpw_precheck_result/logs/*

      - name: Run DV RTL tests
        run: |
          make verify-usb2uart-rtl

      - name: Run DV GL tests
        run: |
          make verify-usb2uart-gl

      - name: Push gds
        #if: github.event_name == 'workflow_dispatch'
        run: |
          ls -la
          git status
          git add def gds lef mag maglef signoff spi/lvs verilog/gl
          git status
          git config user.email "rbacik@hotmail.com"
          git config user.name "roman3017"
          git commit -m "action: update build"
          git push origin HEAD:main

  user_project_flow_sky130B:
    timeout-minutes: 720
    runs-on: ubuntu-latest
    needs: [pdk]
    steps:
      - uses: actions/checkout@v2
        with:
          submodules: recursive

      - name: Set up QEMU
        uses: docker/setup-qemu-action@v1

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1

      - name: Export PDK ROOT
        run: echo "PDK_ROOT=/home/runner/work/pdk" >> $GITHUB_ENV

      - name: Export PDK PATH
        run: echo "PDKPATH=/home/runner/work/pdk/sky130B" >> $GITHUB_ENV

      - name: Export PDK
        run: echo "PDK=sky130B" >> $GITHUB_ENV

      - name: Export OPENLANE ROOT
        run: echo "OPENLANE_ROOT=/home/runner/work/caravel_user_project/openlane" >> $GITHUB_ENV

      - name: Download PDK Tarball
        uses: actions/download-artifact@v2
        with:
          name: pdk-tarball
          path: /tmp

      - name: Unpack PDK Tarball
        run: |
          sudo mkdir -p ${{ env.PDK_ROOT }}
          sudo chown -R $USER:$USER ${{ env.PDK_ROOT }}
          tar -xf /tmp/pdk.tar -C $PDK_ROOT .

      - name: Install dependencies
        run: |
          make install
          make install_mcw
          make openlane
          make simenv

      - name: Harden using Openlane
        run: |
          make user_proj_example
          make user_project_wrapper

      - name: run precheck
        run: |
          export INPUT_DIRECTORY=$(pwd)
          export PRECHECK_ROOT=$INPUT_DIRECTORY/mpw_precheck
          export OUTPUT_DIRECTORY=$INPUT_DIRECTORY/mpw_precheck_result
          export OUTPUT=$OUTPUT_DIRECTORY/logs/precheck.log

          git clone --depth=1 -b mpw-7d https://github.com/efabless/mpw_precheck.git

          docker run -v "$PRECHECK_ROOT":"$PRECHECK_ROOT" -v "$INPUT_DIRECTORY":"$INPUT_DIRECTORY" -v "${{ env.PDK_ROOT }}":"${{ env.PDK_ROOT }}" -e INPUT_DIRECTORY="$INPUT_DIRECTORY" -e PDK_ROOT="${{ env.PDK_ROOT }}" -e PDKPATH="${{ env.PDKPATH }}" -u $(id -u "$USER"):$(id -g "$USER") efabless/mpw_precheck:latest bash -c "cd $PRECHECK_ROOT; python3 mpw_precheck.py --input_directory $INPUT_DIRECTORY --pdk_path ${{ env.PDKPATH }} --output_directory $OUTPUT_DIRECTORY license makefile consistency xor magic_drc klayout_beol klayout_feol klayout_met_min_ca_density klayout_offgrid klayout_pin_label_purposes_overlapping_drawing klayout_zeroarea"

          cnt=$(grep -c "All Checks Passed" "$OUTPUT")
          if ! [[ $cnt ]]; then cnt=0; fi
          if [[ $cnt -eq 1 ]]; then exit 0; fi
          exit 2

      - name: upload failure logs
        if: failure()
        uses: actions/upload-artifact@v2
        with:
          name: error
          path: |
            /home/runner/work/caravel_user_project/caravel_user_project/mpw_precheck_result/logs/*

      - name: Run DV RTL tests
        run: |
          make verify-usb2uart-rtl

      - name: Run DV GL tests
        run: |
          make verify-usb2uart-gl

  tag_repo:
    if: github.event_name == 'workflow_dispatch'
    runs-on: ubuntu-latest
    needs: [user_project_flow_sky130A]
    steps:
      - name: current date
        id: date
        run: echo "::set-output name=date::$(date +'%Y-%m-%d')"
      - name: tag
        uses: tvdias/github-tagger@v0.0.1
        with:
          tag: ${{ steps.date.outputs.date }}
          repo-token: ${{ secrets.GITHUB_TOKEN }}
