# Copyright 2023 GlobalFoundries PDK Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: LVS regression testing

# Prevent keeping resources busy when a branch/PR is updated
# https://docs.github.com/en/actions/using-jobs/using-concurrency
concurrency:
  group: ${{ github.repository }}-${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

on:
  push:
  pull_request:
  workflow_dispatch:

jobs:
  build_lvs-matrix:
    runs-on: ${{ fromJSON('["ubuntu-latest", "self-hosted"]')[github.repository == 'github/docs-internal'] }}
    outputs:
      lvs_table: ${{ steps.set-matrix.outputs.lvs_table }}
    steps:
      - uses: actions/checkout@v3
      - id: set-matrix
        run: |
          lvs_table=`find -iname '*_extraction.lvs' | grep -i rule_decks | awk -F'/' '{printf "\"%s-%s\",", $2, $NF}' | sed -e "s/^/[/g" -e "s/,$/]/g" -e "s/_extraction.lvs//g" | tr '[:lower:]' '[:upper:]'| sed -e "s/LITE/Lite/g"`
          lvs_table=`echo $lvs_table | jq -c .`
          echo $lvs_table
          echo "lvs_table=$lvs_table" >>$GITHUB_OUTPUT

  lvs_regression:
    needs: build_lvs-matrix
    runs-on: ${{ fromJSON('["ubuntu-latest", "self-hosted"]')[github.repository == 'github/docs-internal'] }}
    strategy:
      fail-fast: false
      matrix:
        part: [lvs]
        test: ${{ fromJson(needs.build_lvs-matrix.outputs.lvs_table) }}

    name: ${{ matrix.part }} | ${{ matrix.test }}

    steps:
      - uses: actions/checkout@v3
        with:
          submodules: 'recursive'
      - name: Testing ${{ matrix.part }} for ${{ matrix.test }}
        run: |
          make test-"$(python3 -c 'print("${{ matrix.part }}".upper())')"-${{ matrix.test }}

  lvs_switch:
    runs-on: ${{ fromJSON('["ubuntu-latest", "self-hosted"]')[github.repository == 'github/docs-internal'] }}
    strategy:
      fail-fast: false
      matrix:
        include:
          - { tool: klayout, part: lvs, test: switch }

    name: ${{ matrix.part }} | ${{ matrix.test }}

    steps:
      - uses: actions/checkout@v3
        with:
          submodules: 'recursive'
      - name: Testing ${{ matrix.part }} for ${{ matrix.test }}
        run: |
          make test-"$(python3 -c 'print("${{ matrix.part }}".upper())')"-${{ matrix.test }}
