name: chipyard-ci-full-flow on: # run ci on pull requests targeting following branches (runs on the merge commit) pull_request: branches: - main - '1.[0-9]*.x' schedule: # run at 00:00 on sunday - cron: "0 0 * * 0" defaults: run: shell: bash -leo pipefail {0} env: REMOTE_WORK_DIR: ${{ secrets.BUILDDIR }}/cy-ci-shared/cy-${{ github.sha }} JAVA_TMP_DIR: /tmp/cy-${{ github.sha }}-full jobs: cancel-prior-workflows: name: cancel-prior-workflows runs-on: ubuntu-latest steps: - name: Cancel Previous Runs uses: styfle/cancel-workflow-action@0.11.0 with: access_token: ${{ github.token }} # Set up a set of boolean conditions to control which branches of the CI # workflow will execute This is based off the conditional job execution # example here: https://github.com/dorny/paths-filter#examples change-filters: name: filter-jobs-on-changes runs-on: ubuntu-latest # Queried by downstream jobs to determine if they should run. outputs: needs-rtl: ${{ steps.filter.outputs.all_count != steps.filter.outputs.skip-rtl_count }} steps: - uses: actions/checkout@v3 - name: Git workaround uses: ./.github/actions/git-workaround - uses: dorny/paths-filter@v2 id: filter with: filters: | all: - '**' # If any of the files changed match, do a doc build docs: &docs-filter - 'docs/**' - '.readthedocs.yml' # If all files match to this filter, skip the main ci pipeline skip-rtl: - *docs-filter - '**/*.md' - '**/.gitignore' - '.github/ISSUE_TEMPLATE/**' setup-repo: name: setup-repo needs: [change-filters, cancel-prior-workflows] if: needs.change-filters.outputs.needs-rtl == 'true' runs-on: jktqos steps: - name: Delete old checkout run: | ls -alh . rm -rf ${{ github.workspace }}/* || true rm -rf ${{ github.workspace }}/.* || true ls -alh . - uses: actions/checkout@v3 - name: Setup repo copy run: | git clone $GITHUB_WORKSPACE ${{ env.REMOTE_WORK_DIR }} - name: Setup repo run: | cd ${{ env.REMOTE_WORK_DIR }} eval "$(conda shell.bash hook)" mkdir ${{ env.JAVA_TMP_DIR }} export MAKEFLAGS="-j32" ./build-setup.sh -f -v run-cfg-finder: name: run-cfg-finder needs: [setup-repo] runs-on: jktqos steps: - name: Run config finder run: | cd ${{ env.REMOTE_WORK_DIR }} eval "$(conda shell.bash hook)" source env.sh cd sims/verilator make find-config-fragments run-tutorial: name: run-tutorial needs: [setup-repo] runs-on: jktqos steps: - name: Run smoke test run: | cd ${{ env.REMOTE_WORK_DIR }} eval "$(conda shell.bash hook)" source env.sh cd sims/verilator make verilog - name: VLSI test run: | cd ${{ env.REMOTE_WORK_DIR }} eval "$(conda shell.bash hook)" source env.sh cd vlsi # NOTE: most conda installs are in separate conda envs because they mess up # each other's versions (for no apparent reason) and we need the latest versions conda config --add channels defaults conda config --add channels litex-hub # installs for example-sky130.yml conda create -y --prefix ./.conda-sky130 open_pdks.sky130a=1.0.399_0_g63dbde9 git clone https://github.com/rahulk29/sram22_sky130_macros.git # installs for example-openroad.yml conda create -y --prefix ./.conda-yosys yosys=0.27_4_gb58664d44 conda create -y --prefix ./.conda-openroad openroad=2.0_7070_g0264023b6 conda create -y --prefix ./.conda-klayout klayout=0.28.5_98_g87e2def28 conda create -y --prefix ./.conda-signoff magic=8.3.376_0_g5e5879c netgen=1.5.250_0_g178b172 echo "# Tutorial configs" > tutorial.yml echo "# pdk" > tutorial.yml echo "technology.sky130.sky130A: $PWD/.conda-sky130/share/pdk/sky130A" >> tutorial.yml echo "technology.sky130.sram22_sky130_macros: $PWD/sram22_sky130_macros" >> tutorial.yml echo "" >> tutorial.yml echo "# tools" >> tutorial.yml echo "synthesis.yosys.yosys_bin: $PWD/.conda-yosys/bin/yosys" >> tutorial.yml echo "par.openroad.openroad_bin: $PWD/.conda-openroad/bin/openroad" >> tutorial.yml echo "par.openroad.klayout_bin: $PWD/.conda-klayout/bin/klayout" >> tutorial.yml echo "drc.magic.magic_bin: $PWD/.conda-signoff/bin/magic" >> tutorial.yml echo "drc.klayout.klayout_bin: $PWD/.conda-klayout/bin/klayout" >> tutorial.yml echo "lvs.netgen.netgen_bin: $PWD/.conda-signoff/bin/netgen" >> tutorial.yml echo "" >> tutorial.yml echo "# speed up tutorial runs & declutter log output" >> tutorial.yml echo "par.openroad.timing_driven: false" >> tutorial.yml echo "par.openroad.write_reports: false" >> tutorial.yml conda config --remove channels litex-hub conda config --remove channels defaults export tutorial=sky130-openroad export EXTRA_CONFS=tutorial.yml export VLSI_TOP=RocketTile make buildfile make syn # NOTE: commenting out for now bc this times out - need to debug why # openroad freezes during some write commands after detailed route # so need to stop the flow & run last step separately # make par HAMMER_EXTRA_ARGS="--stop_after_step extraction" # make redo-par HAMMER_EXTRA_ARGS="--start_before_step extraction" # make drc # make lvs cleanup: name: cleanup needs: [run-tutorial] runs-on: jktqos if: ${{ always() }} steps: - name: Delete repo copy and conda env run: | rm -rf ${{ env.REMOTE_WORK_DIR }} rm -rf ${{ env.JAVA_TMP_DIR }}