CI with Github Actions
I have slowly been learning how to use Github actions to help me build microchips.
It’s harder than it should be to get a working toolchain up. There are lots of repositories, submodules, docker images, environment variables, and they all have to be exactly right. If not, either the flow won’t work correctly, or you’ll make some GDS that will fail the precheck or tapeout tests.
For the course, I have a VM and a set of instructions to do a manual install.
And sometimes the instructions start failing. The most recent fail was due to some more hidden state - the default submodule that caravel_user_project installs was updated automatically by a github action.
So I have now put all the instructions into a Github action: https://github.com/mattvenn/project0_test
Every night, this project automatically:
- installs Magic - used to build the PDK,
- clones caravel_user_project and builds OpenLane and the PDK,
- builds the example project GDS,
- builds the final submission GDS,
- saves the GDS and build summaries.
If anything goes wrong, I get an email and I can correct the instructions before the next person registers for my course.
I’m also working on an action that will test if a project is ready for group submission with the multi project tools. The idea is that you could add this action to your repo and it would continually check that all the required tests pass and even build the GDS ready for submission.
CI development🤮
— Matthew Venn (@matthewvenn) January 3, 2022
CI with the green status badge 🥳https://t.co/fHAa06nwPD
This github action installs the Sky130 PDK, OpenLane, runs a suite of tests and prepares a design for a https://t.co/WIpZRIBZ60 @Efabless MPW run.
Next step: harden the HDL into GDS! pic.twitter.com/pWjleFQ5kL
Update
The group project action and multi tools actions are both live and working well. We use them regularly now, including for MPW6, MPW7, and MPW8 submissions, as well as Tiny Tapeout and GF180.
Here’s a video explaining how GitHub actions are used to generate the GDS files for Tiny Tapeout: