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

      - 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
