name: reusable regression on: workflow_call: inputs: suite: description: Regression suite from scripts/regress.py required: true type: string pdk: description: PDK matrix selected by scripts/regress.py required: true type: string profile: description: Primary profile used for setup and environment checks required: true type: string retention_days: description: Report artifact retention required: false default: 30 type: number timeout_minutes: description: Maximum job duration required: false default: 360 type: number toolset: description: Space-separated locked tools required by this suite required: false default: verilator sv2v iverilog yosys opensta openocd sbt riscv_gnu type: string full_flow_checks: description: Check Yosys and OpenSTA environments before running the suite required: false default: true type: boolean formal_checks: description: Check the SBY, Yosys, sv2v, and Bitwuzla formal environment before the suite required: false default: false type: boolean permissions: contents: read jobs: regression: runs-on: ubuntu-22.04 timeout-minutes: ${{ inputs.timeout_minutes }} env: PIP_DISABLE_PIP_VERSION_CHECK: "1" steps: - name: Check out repository uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: Restore locked source dependencies uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 with: path: | app/coremark/coremark-main app/fatfs/ff16 physical/pdk/IHP-Open-PDK physical/pdk/gf180mcu-pdk physical/pdk/icsprout55-pdk physical/pdk/skywater-pdk rtl/managed/clusterip/archinfo rtl/managed/clusterip/common rtl/managed/clusterip/crc rtl/managed/clusterip/ps2 rtl/managed/clusterip/pwm rtl/managed/clusterip/rng rtl/managed/clusterip/rtc rtl/managed/clusterip/wdg rtl/managed/third_party rtl/managed/mpw .cache/retrosoc/pdk .cache/retrosoc/stamps key: sources-${{ inputs.pdk }}-${{ runner.os }}-${{ hashFiles('dependencies/dependencies.lock.json') }} - name: Restore locked toolchains uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 with: path: | .cache/retrosoc/downloads .cache/retrosoc/toolchains key: tools-${{ runner.os }}-${{ hashFiles('dependencies/dependencies.lock.json') }} - name: Restore Verilator compiler cache uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 with: path: .cache/retrosoc/ccache key: ccache-${{ runner.os }}-${{ hashFiles('dependencies/dependencies.lock.json') }}-${{ github.sha }}-${{ github.run_id }}-${{ github.run_attempt }} restore-keys: | ccache-${{ runner.os }}-${{ hashFiles('dependencies/dependencies.lock.json') }}-${{ github.sha }}- ccache-${{ runner.os }}-${{ hashFiles('dependencies/dependencies.lock.json') }}- - name: Install build Python dependency run: python3 -m pip install --requirement requirements/build.txt - name: Set up locked EDA and compiler tools uses: ./.github/actions/locked-tools with: tools: ${{ inputs.toolset }} - name: Set up locked source dependencies run: make CONFIG=${{ inputs.profile }} setup - name: Check behavioral environments run: | make CONFIG=${{ inputs.profile }} \ SIMU=IVERILOG SYNTH=NONE STA=NONE doctor make CONFIG=${{ inputs.profile }} \ SIMU=VERILATOR SYNTH=NONE STA=NONE doctor - name: Check synthesis and timing environments if: inputs.full_flow_checks run: | make CONFIG=${{ inputs.profile }} \ SIMU=IVERILOG SYNTH=YOSYS STA=NONE doctor make CONFIG=${{ inputs.profile }} \ SIMU=IVERILOG SYNTH=NONE STA=OPENSTA doctor - name: Check formal environment if: inputs.formal_checks run: make CONFIG=${{ inputs.profile }} formal-doctor - name: Run ${{ inputs.suite }} regression run: >- python3 scripts/regress.py --root . --suite "${{ inputs.suite }}" --pdk "${{ inputs.pdk }}" --behavioral-only - name: Upload reports and structured results if: always() uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3 with: name: ${{ inputs.suite }}-regression-${{ github.run_id }}-${{ github.run_attempt }} path: | build/**/meta/*.json build/**/formal/**/*.sby build/**/formal/**/*.smt2 build/**/formal/**/*.vcd build/**/formal/**/*.yw build/**/formal/**/status build/**/*.log build/**/*.rpt if-no-files-found: warn retention-days: ${{ inputs.retention_days }}