diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml new file mode 100644 index 0000000..8e2dd4e --- /dev/null +++ b/.gitea/workflows/ci.yaml @@ -0,0 +1,9 @@ +name: CI +on: push + +jobs: + build:lagarto-ox-tarball: + runs-on: native + steps: + - uses: https://gitea.com/ScMi1/checkout@v1.4 + - run: ci/make-tarball.sh diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3cdbd5d..d344286 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,6 +1,16 @@ build:lagarto-ox: stage: build + when: manual tags: - nix script: - nix develop -L .#lagarto-ox --command fpga/run-remotely.sh fpgalogin1:ci + +build:lagarto-ox-tarball: + stage: build + when: manual + tags: + - nix + script: + - nix build -L .#nixosConfigurations.lagarto-ox.pkgs.fpga-tarball + - ci/make-tarball.sh result && rm result diff --git a/ci/make-tarball.sh b/ci/make-tarball.sh new file mode 100755 index 0000000..01b2e75 --- /dev/null +++ b/ci/make-tarball.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +set -e + +nix build -L '.#nixosConfigurations.lagarto-ox.pkgs.fpga-tarball' + +cd result +out=/ceph/home/gitlab-runner/public_html/nixos-riscv/ +fn=$(ls | head -1) +cp "$fn" "$out/$fn" +rm -f "$out/latest.tar.zst" +ln -s "$out/$fn" "$out/latest.tar.zst" +rm result + +echo "Pinned: https://jungle.bsc.es/~gitlab-runner/nixos-riscv/$fn" +echo "Latest: https://jungle.bsc.es/~gitlab-runner/nixos-riscv/latest.tar.zst" diff --git a/lagarto-ox.nix b/lagarto-ox.nix index 571cc1c..c5aa356 100644 --- a/lagarto-ox.nix +++ b/lagarto-ox.nix @@ -546,6 +546,91 @@ EOF ''; + # A tarball with all the parts to boot NixOS in a FPGA + fpga-tarball = let + build = config.system.build; + in prev.stdenv.mkDerivation rec { + name = "nixos-riscv"; + src = ./fpga; + + COMMIT = if self ? rev then self.rev + else throw ("Refusing to build tarball from a dirty Git tree!"); + + TOPLEVEL = build.toplevel; + OPENSBI = final.opensbi; + KERNEL = build.kernel; + INITRD = build.initialRamdisk; + ROOTFS = build.sdImage; + UBOOT_ENV = final.uboot-env; + BITSTREAM = final.bitstream; + BOOTROM = final.bootrom; + bitName = builtins.baseNameOf BITSTREAM; + + unpackPhase = '' + mkdir -p src/nixos-riscv + ln -s $src fpga + fpga/upload.sh src/nixos-riscv + chmod +w -R src + sourceRoot=src + ''; + + buildPhase = '' + cat > nixos-riscv/README.txt < + + These files allow you to boot NixOS on Lagarto Ox. They correspond to + this commit: + + https://pm.bsc.es/gitlab/rarias/nixos-riscv/-/commit/${COMMIT} + + Here are the pieces used by this system: + + COMMIT = ${COMMIT} + TOPLEVEL = ${TOPLEVEL} + OPENSBI = ${OPENSBI} + KERNEL = ${KERNEL} + INITRD = ${INITRD} + ROOTFS = ${ROOTFS} + UBOOT_ENV = ${UBOOT_ENV} + BITSTREAM = ${BITSTREAM} + BOOTROM = ${BOOTROM} + + Copy these files into a MEEP FPGA node, then allocate a FPGA node and + run from this directory (don't forget the dot at the end): + + $ ./run-node.sh . + + That would flash the bitstream and NixOS and boot the whole system + until the login, and exit after some inactivity period. You should see + this message near the end: + + __________________ + < Welcome to NixOS > + ------------------ + ^__^ + (oo)_______ + (__) )/ + ||----w | + || || + + If you can read this message then then you have + successfully booted NixOS into the login shell. + + EOF + ''; + + installPhase = '' + mkdir -p $out + tar --zstd -cvf $out/${COMMIT}.tar.zst nixos-riscv + ''; + + nativeBuildInputs = with final.buildPackages; [ rsync zstd ]; + }; + opensbi = prev.opensbi.overrideAttrs (old: rec { #version = "1.4"; version = "1.5";