Skip to content

DRC

DRC #4

Workflow file for this run

#==========================================================================
# Copyright 2024 IHP 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
#
# https://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.
# SPDX-License-Identifier: Apache-2.0
#==========================================================================
name: DRC
on:
#push
pull_request:
types: [opened, reopened]
workflow_dispatch:
jobs:
drc:
runs-on: ubuntu-latest
steps:
- name: Get all files
uses: actions/checkout@master
- name: Check all files
id: changed-files
uses: tj-actions/changed-files@v44
- name: Installing p7zip
run: |
sudo apt-get install p7zip-full
- name: Installing Klayout
run: |
sudo apt update -qq -y
# The dpkg command will fail complaining about missing dependencies.
sudo dpkg -i ./drc/klayout_0.29.6-1_amd64.deb || true
# The apt install command should install the missing dependencies
# needed by KLayout above and finish the install.
sudo apt install -f -y
# Check that KLayout was successfully installed!
klayout -v
- name: drc
run: |
klayout -v;
mkdir ${{ github.workspace }}/drc/Results
result=true;
Zips=0
for file in ${{ steps.changed-files.outputs.all_changed_files }}; do
FileRe="\.gds"
if [[ $file =~ $FileRe ]]; then
ZipRe="\.zip"
GDSRe="\.gds$"
if [[ $file =~ $ZipRe ]]; then
ZIP_FILE="${{ github.workspace }}/${file}"
# Zielverzeichnis für das Entpacken
EXTRACT_DIR="${ZIP_FILE%/*}/Folder$Zips"
# Überprüfen, ob die ZIP-Datei existiert
if [[ ! -f "$ZIP_FILE" ]]; then
echo "ZIP-Datei nicht gefunden: $ZIP_FILE"
exit 1
fi
7z x "$ZIP_FILE" -o"$EXTRACT_DIR"
# Dateiformat, nach dem gesucht wird (z.B. '.txt' für Textdateien)
file_extension=gds
file_array=($(find "$EXTRACT_DIR" -type f -iname "*$file_extension"))
# Ausgabe der Dateien im Array
echo "Gefundene Dateien:"
for ZipContentFile in "${file_array[@]}"; do
echo "$ZipContentFile"
echo "Run DRC for $ZipContentFile";
path=$ZipContentFile;
resultpath=${{ github.workspace }}/drc/Results/${ZipContentFile//[\/.]/_}.lyrdb;
# OUTPUT=$(klayout -b -r ${{ github.workspace }}/drc/drc.lydrc -rd "in_gds"="${path}" -rd "report_file"="${resultpath}")
command_output=$(mktemp)
klayout -b -r ${{ github.workspace }}/drc/drc.lydrc -rd "in_gds"="${path}" -rd "report_file"="${resultpath}" | tee "$command_output"
OUTPUT=$(cat "$command_output")
re="Number of DRC errors: [0-9]+"
if [[ $OUTPUT =~ $re ]]; then
NumberRe="[0-9]+"
if [[ $BASH_REMATCH =~ $NumberRe ]]; then
if (($BASH_REMATCH == 0))
then
echo "DRC pass";
else
echo "DRC fail";
result=false;
fi
else
echo "DRC fail";
result=false;
fi
else
echo "DRC fail";
result=false;
fi
done
Zips=$((Zips + 1))
elif [[ $file =~ $GDSRe ]]; then
echo "Run DRC for $file";
path=${{ github.workspace }}/${file};
resultpath=${{ github.workspace }}/drc/Results/${file//[\/.]/_}.lyrdb;
command_output=$(mktemp)
klayout -b -r ${{ github.workspace }}/drc/drc.lydrc -rd "in_gds"="${path}" -rd "report_file"="${resultpath}" | tee "$command_output"
OUTPUT=$(cat "$command_output")
re="Number of DRC errors: [0-9]+"
if [[ $OUTPUT =~ $re ]]; then
NumberRe="[0-9]+"
if [[ $BASH_REMATCH =~ $NumberRe ]]; then
if (($BASH_REMATCH == 0))
then
echo "DRC pass";
else
echo "DRC fail";
result=false;
fi
else
echo "DRC fail";
result=false;
fi
else
echo "DRC fail";
result=false;
fi
fi
fi
done
if [[ $result == false ]]
then
exit 130
fi
- name: Archive DRC Results
uses: actions/upload-artifact@v4
if: always()
with:
name: DRC-Results
path: ${{ github.workspace }}/drc/Results