//go:build workflows package main import "strings" // fixup is a step to work around a Podman regression introduced by a bad // container escape mitigation. var fixup = Step{ Name: "Fix container filesystem", Run: "rm /var/run && ln -sf ../run /var", } // checkout is the standard actions/checkout step. var checkout = Step{Name: "Checkout", Uses: "actions/checkout@v4"} // toolchain is a step for setting up the Go toolchain. var toolchain = Step{ Name: "Set up Go toolchain", Uses: "actions/setup-go@v6", With: []KV[any]{ {"go-version-file", "go.mod"}, }, } // newUploadArtifact returns an actions/upload-artifact step uploading // everything in the result directory as the specified name. func newUploadArtifact(display, name string) Step { return Step{ Name: "Upload " + display, Uses: "actions/upload-artifact@v3", With: Map[any]{ {"name", name}, {"path", "result/*"}, {"retention-days", 1}, }, } } // newCIRequest returns a step for requesting a mbf CI task. func newCIRequest(display, name, id string) Step { return Step{ Name: "Request " + display, ID: id, Run: "HAKUREI_REV=\"$(git rev-parse --short HEAD)\" && " + "/rosa/bin/mbf ci " + name + " " + ". \"$(cat cmd/dist/VERSION)-$HAKUREI_REV\" && " + "echo \"rev=$HAKUREI_REV\" >> \"$GITHUB_OUTPUT\"", } } // download is a step to obtain a hakurei distribution. var download = Step{ Name: "Download hakurei distribution", ID: "download", Uses: "actions/download-artifact@v3", With: []KV[any]{ {"name", "dist-${{ needs.dist.outputs.rev }}"}, {"path", "result"}, }, } // _download is like download, but with race instrument. var _download = Step{ Name: "Download hakurei distribution", ID: "download", Uses: "actions/download-artifact@v3", With: []KV[any]{ {"name", "dist-${{ needs.dist-race.outputs.rev }}-race"}, {"path", "result"}, }, } // install is a step to unpack and deploy a hakurei distribution created by a // step with identifier dist. var install = Step{ Name: "Install hakurei", Run: "HAKUREI_VERSION=\"$(cat cmd/dist/VERSION)\" && " + "tar xf result/hakurei-$HAKUREI_VERSION*-amd64.tar.gz && " + "./hakurei-$HAKUREI_VERSION*-amd64/install.sh && " + "sudo -u ubuntu hakurei version && " + "mkdir /var/empty", } // newTestsuite returns a step for running an integration test suite. func newTestsuite(name, prefix string) Step { return Step{ Name: "Compile and run test suite", Run: prefix + "rm -rf result && " + "go run -tags=testsuite ./cmd/" + name, } } // newPackages returns a job for installing the specified packages with // best-effort caching. Package names must not contain spaces. func newPackages(rev int, repos []string, packages ...string) Step { return Step{ Name: "Install packages", Uses: "awalsh128/cache-apt-pkgs-action@v1", With: []KV[any]{ {"add-repository", strings.Join(repos, " ")}, {"packages", strings.Join(packages, " ")}, {"version", rev}, {"execute_install_scripts", true}, }, } } // newNixOSTest returns a step for running the named NixOS test. func newNixOSTest(name string) Step { return Step{ Name: "Run NixOS test", Run: "nix build " + "--out-link result " + "--print-out-paths " + "--print-build-logs " + "./cmd/hakurei/testsuite#checks.x86_64-linux." + name, } }