mirror of
https://github.com/daylinmorgan/oizys.git
synced 2024-12-22 18:30:43 -06:00
feat: support step summary and cache reset
This commit is contained in:
parent
8eafb2e06b
commit
7cc6a8d1fd
3 changed files with 62 additions and 14 deletions
1
.github/workflows/build.yml
vendored
1
.github/workflows/build.yml
vendored
|
@ -57,6 +57,7 @@ jobs:
|
||||||
build --system-path \
|
build --system-path \
|
||||||
--host "$host" \
|
--host "$host" \
|
||||||
--flake . \
|
--flake . \
|
||||||
|
--verbose \
|
||||||
-- \
|
-- \
|
||||||
--print-build-logs
|
--print-build-logs
|
||||||
done
|
done
|
||||||
|
|
|
@ -5,8 +5,8 @@ import (
|
||||||
|
|
||||||
o "oizys/internal/oizys"
|
o "oizys/internal/oizys"
|
||||||
|
|
||||||
"github.com/charmbracelet/log"
|
|
||||||
"github.com/charmbracelet/lipgloss"
|
"github.com/charmbracelet/lipgloss"
|
||||||
|
"github.com/charmbracelet/log"
|
||||||
cc "github.com/ivanpirog/coloredcobra"
|
cc "github.com/ivanpirog/coloredcobra"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
@ -35,6 +35,7 @@ var (
|
||||||
verbose bool
|
verbose bool
|
||||||
nom bool
|
nom bool
|
||||||
systemPath bool
|
systemPath bool
|
||||||
|
resetCache bool
|
||||||
)
|
)
|
||||||
|
|
||||||
var oizys = o.NewOizys()
|
var oizys = o.NewOizys()
|
||||||
|
@ -47,7 +48,7 @@ var rootCmd = &cobra.Command{
|
||||||
log.Info("running with verbose mode")
|
log.Info("running with verbose mode")
|
||||||
log.SetLevel(log.DebugLevel)
|
log.SetLevel(log.DebugLevel)
|
||||||
}
|
}
|
||||||
oizys.Set(flake, host, cacheName, verbose, systemPath)
|
oizys.Set(flake, host, cacheName, verbose, systemPath, resetCache)
|
||||||
oizys.CheckFlake()
|
oizys.CheckFlake()
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -75,4 +76,5 @@ func init() {
|
||||||
rootCmd.PersistentFlags().StringVar(&flake, "flake", "", "path to flake ($OIZYS_DIR or $HOME/oizys)")
|
rootCmd.PersistentFlags().StringVar(&flake, "flake", "", "path to flake ($OIZYS_DIR or $HOME/oizys)")
|
||||||
rootCmd.PersistentFlags().StringVar(&host, "host", "", "host to build (current host)")
|
rootCmd.PersistentFlags().StringVar(&host, "host", "", "host to build (current host)")
|
||||||
rootCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "show verbose output")
|
rootCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "show verbose output")
|
||||||
|
rootCmd.PersistentFlags().BoolVar(&resetCache, "reset-cache", false, "set narinfo-cache-negative-ttl to 0")
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,28 +19,35 @@ import (
|
||||||
|
|
||||||
// verbose vs debug?
|
// verbose vs debug?
|
||||||
type Oizys struct {
|
type Oizys struct {
|
||||||
flake string
|
flake string
|
||||||
host string
|
host string
|
||||||
cache string
|
cache string
|
||||||
verbose bool
|
githubSummary string
|
||||||
systemPath bool
|
inCI bool
|
||||||
|
verbose bool
|
||||||
|
systemPath bool
|
||||||
|
resetCache bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewOizys() *Oizys {
|
func NewOizys() *Oizys {
|
||||||
|
o := new(Oizys)
|
||||||
|
o.cache = "daylin"
|
||||||
hostname, err := os.Hostname()
|
hostname, err := os.Hostname()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
flake := ""
|
o.host = hostname
|
||||||
oizysDir, ok := os.LookupEnv("OIZYS_DIR")
|
oizysDir, ok := os.LookupEnv("OIZYS_DIR")
|
||||||
if !ok {
|
if !ok {
|
||||||
home := os.Getenv("HOME")
|
home := os.Getenv("HOME")
|
||||||
flake = fmt.Sprintf("%s/%s", home, "oizys")
|
o.flake = fmt.Sprintf("%s/%s", home, "oizys")
|
||||||
} else {
|
} else {
|
||||||
flake = oizysDir
|
o.flake = oizysDir
|
||||||
}
|
}
|
||||||
|
o.githubSummary = os.Getenv("GITHUB_STEP_SUMMARY")
|
||||||
|
o.inCI = o.githubSummary != ""
|
||||||
|
|
||||||
return &Oizys{flake: flake, host: hostname, cache: "daylin"}
|
return o
|
||||||
}
|
}
|
||||||
|
|
||||||
type Derivation struct {
|
type Derivation struct {
|
||||||
|
@ -66,7 +73,6 @@ func (o *Oizys) getSystemPath() string {
|
||||||
// TODO: add spinner?
|
// TODO: add spinner?
|
||||||
// cmd.Stderr = os.Stderr
|
// cmd.Stderr = os.Stderr
|
||||||
s := nixSpinner(o.host)
|
s := nixSpinner(o.host)
|
||||||
// result, err := cmd.CombinedOutput()
|
|
||||||
out, err := cmd.Output()
|
out, err := cmd.Output()
|
||||||
s.Stop()
|
s.Stop()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -102,7 +108,7 @@ func (o *Oizys) Output() string {
|
||||||
|
|
||||||
func (o *Oizys) Set(
|
func (o *Oizys) Set(
|
||||||
flake, host, cache string,
|
flake, host, cache string,
|
||||||
verbose, systemPath bool,
|
verbose, systemPath, resetCache bool,
|
||||||
) {
|
) {
|
||||||
if host != "" {
|
if host != "" {
|
||||||
o.host = host
|
o.host = host
|
||||||
|
@ -115,12 +121,16 @@ func (o *Oizys) Set(
|
||||||
}
|
}
|
||||||
o.verbose = verbose
|
o.verbose = verbose
|
||||||
o.systemPath = systemPath
|
o.systemPath = systemPath
|
||||||
|
o.resetCache = resetCache
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: seperate parsing and displaying of packages
|
||||||
func terminalSize() (int, int) {
|
func terminalSize() (int, int) {
|
||||||
fd := os.Stdout.Fd()
|
fd := os.Stdout.Fd()
|
||||||
if !term.IsTerminal(int(fd)) {
|
if !term.IsTerminal(int(fd)) {
|
||||||
log.Fatal("failed to get terminal size")
|
log.Error("failed to get terminal size")
|
||||||
|
return 80, 0
|
||||||
|
// log.Fatal("failed to get terminal size")
|
||||||
}
|
}
|
||||||
w, h, err := term.GetSize(int(fd))
|
w, h, err := term.GetSize(int(fd))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -320,9 +330,44 @@ func (o *Oizys) NixBuild(nom bool, rest ...string) {
|
||||||
cmd.Args = append(cmd.Args, fmt.Sprintf("%s^*", o.getSystemPath()))
|
cmd.Args = append(cmd.Args, fmt.Sprintf("%s^*", o.getSystemPath()))
|
||||||
}
|
}
|
||||||
cmd.Args = append(cmd.Args, rest...)
|
cmd.Args = append(cmd.Args, rest...)
|
||||||
|
if o.resetCache {
|
||||||
|
cmd.Args = append(cmd.Args, "--narinfo-cache-positive-ttl", "0")
|
||||||
|
}
|
||||||
|
if o.inCI {
|
||||||
|
o.ciPreBuild(cmd)
|
||||||
|
}
|
||||||
runCommand(cmd)
|
runCommand(cmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (o *Oizys) writeToGithubStepSummary(txt string) {
|
||||||
|
f, err := os.OpenFile(o.githubSummary, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
if _, err := f.Write([]byte(txt)); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
if err := f.Close(); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Oizys) ciPreBuild(cmd *exec.Cmd) {
|
||||||
|
// TODO: is this exec.Command call necessary?
|
||||||
|
ciCmd := exec.Command(cmd.Args[0], cmd.Args[1:]...)
|
||||||
|
ciCmd.Args = append(ciCmd.Args, "--dry-run")
|
||||||
|
logCmd(ciCmd)
|
||||||
|
output, err := ciCmd.CombinedOutput()
|
||||||
|
if err != nil {
|
||||||
|
showFailedOutput(output)
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
toBuild, _ := parseDryRun(string(output))
|
||||||
|
o.writeToGithubStepSummary(
|
||||||
|
fmt.Sprintf("# %s\n\n%s", o.host, strings.Join(toBuild.names, "\n")),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
func (o *Oizys) getChecks() []string {
|
func (o *Oizys) getChecks() []string {
|
||||||
attrName := fmt.Sprintf("%s#%s", o.flake, "checks.x86_64-linux")
|
attrName := fmt.Sprintf("%s#%s", o.flake, "checks.x86_64-linux")
|
||||||
cmd := exec.Command("nix", "eval", attrName, "--apply", "builtins.attrNames", "--json")
|
cmd := exec.Command("nix", "eval", attrName, "--apply", "builtins.attrNames", "--json")
|
||||||
|
|
Loading…
Reference in a new issue