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

      - 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

      - 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 user_proj_example
          # make user_project_wrapper
          make my_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-io_ports-rtl 
          # make verify-la_test1-rtl 
          # make verify-la_test2-rtl 
          # make verify-mprj_stimulus-rtl 
          # make verify-wb_port-rtl

      - name: Run DV GL tests
        run: |
          make verify-io_ports-gl 
          # make verify-la_test1-gl 
          # make verify-la_test2-gl 
          # make verify-mprj_stimulus-gl 
          # make verify-wb_port-gl

        #  user_project_flow_sky130B:
        #    timeout-minutes: 720
        #    runs-on: ubuntu-latest
        #    needs: [pdk]
        #    steps:
        #      - uses: actions/checkout@v2
        #
        #      - 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-io_ports-rtl 
        #          make verify-la_test1-rtl 
        #          make verify-la_test2-rtl 
        #          make verify-mprj_stimulus-rtl 
        #          make verify-wb_port-rtl
        #
        #      - name: Run DV GL tests
        #        run: |
        #          make verify-io_ports-gl 
        #          make verify-la_test1-gl 
        #          make verify-la_test2-gl 
        #          make verify-mprj_stimulus-gl 
        #          make verify-wb_port-gl
