ci.yml (2625B)
1 name: CI 2 3 on: 4 push: 5 pull_request: 6 7 jobs: 8 build-test-generate: 9 runs-on: ubuntu-latest 10 11 steps: 12 - name: Checkout 13 uses: actions/checkout@v4 14 15 - name: Set up JDK 16 uses: actions/setup-java@v4 17 with: 18 distribution: temurin 19 java-version: 21 20 21 - name: Install sbt 22 run: | 23 sudo apt-get update 24 sudo apt-get install apt-transport-https curl gnupg -yqq 25 echo "deb https://repo.scala-sbt.org/scalasbt/debian all main" | sudo tee /etc/apt/sources.list.d/sbt.list 26 echo "deb https://repo.scala-sbt.org/scalasbt/debian /" | sudo tee /etc/apt/sources.list.d/sbt_old.list 27 curl -sL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x2EE0EA64E40A89B84B2DF73499E82A75642AC823" | sudo -H gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/scalasbt-release.gpg --import 28 sudo chmod 644 /etc/apt/trusted.gpg.d/scalasbt-release.gpg 29 sudo apt-get update 30 sudo apt-get install -y sbt 31 32 - name: Cache sbt 33 uses: actions/cache@v4 34 with: 35 path: | 36 ~/.ivy2/cache 37 ~/.sbt 38 ~/.cache/coursier 39 key: ${{ runner.os }}-sbt-${{ hashFiles('**/build.sbt', '**/project/**') }} 40 restore-keys: | 41 ${{ runner.os }}-sbt- 42 43 - name: Install Verilator 44 run: | 45 sudo apt-get update 46 sudo apt-get install -y verilator 47 48 - name: Install Typst 49 uses: typst-community/setup-typst@v5 50 51 # Ensure sbt & scalafmt plugins are resolved (if needed) 52 - name: sbt update 53 run: sbt update 54 55 - name: Check scalafmt 56 run: | 57 # This assumes you have sbt-scalafmt configured in project/plugins.sbt 58 sbt scalafmtAll 59 # Fail if scalafmt caused changes 60 if ! git diff --quiet **/*.scala; then 61 echo "Code is not scalafmt-formatted. Run 'sbt scalafmtAll' locally." 62 exit 1 63 fi 64 65 - name: Run tests 66 run: sbt test 67 68 - name: Run main (generate Verilog) 69 run: | 70 sbt run 71 cd generated && zip ../perilus.zip ./* 72 73 - name: Compile system diagram to SVG 74 run: | 75 typst compile --format svg doc/perilus.typ doc/perilus.svg 76 77 - name: Upload perilus.zip artifact 78 uses: actions/upload-artifact@v4 79 with: 80 name: perilus 81 path: perilus.zip 82 83 - name: Upload documentation SVG artifact 84 uses: actions/upload-artifact@v4 85 with: 86 name: perilus-doc 87 path: doc/perilus.svg