diff --git a/.github/workflows/drc.yml b/.github/workflows/drc.yml index a28db52..376d524 100644 --- a/.github/workflows/drc.yml +++ b/.github/workflows/drc.yml @@ -18,6 +18,7 @@ name: DRC on: + #push pull_request: types: [opened, reopened] @@ -30,6 +31,9 @@ jobs: - 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 @@ -45,33 +49,96 @@ jobs: klayout -v; mkdir ${{ github.workspace }}/drc/Results result=true; + Zips=0 for file in ${{ steps.changed-files.outputs.all_changed_files }}; do - FileRe="FMD_QNC.*\.gds" + FileRe="\.gds" if [[ $file =~ $FileRe ]]; then - echo "Run DRC for $file"; - path=${{ github.workspace }}/${file}; - resultpath=${{ github.workspace }}/drc/Results/${file//[\/.]/_}.lyrdb; - OUTPUT=$(klayout -b -r ${{ github.workspace }}/drc/drc.lydrc -rd "in_gds"="${path}" -rd "report_file"="${resultpath}") - - re="Number of DRC errors: [0-9]+" - if [[ $OUTPUT =~ $re ]]; then - echo ${BASH_REMATCH}; - NumberRe="[0-9]+" - if [[ $BASH_REMATCH =~ $NumberRe ]]; then - if (($BASH_REMATCH == 0)) - then - echo "DRC pass"; + 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 - else + 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 - else - echo "DRC fail"; - result=false; fi fi done