diff options
Diffstat (limited to 'doBuild.debian.go')
| -rw-r--r-- | doBuild.debian.go | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/doBuild.debian.go b/doBuild.debian.go new file mode 100644 index 0000000..e252074 --- /dev/null +++ b/doBuild.debian.go @@ -0,0 +1,166 @@ +// Copyright 2017-2025 WIT.COM Inc. All rights reserved. +// Use of this source code is governed by the GPL 3.0 + +package main + +import ( + "os" + "path/filepath" + + "go.wit.com/lib/debian" + "go.wit.com/lib/fhelp" + "go.wit.com/lib/gui/shell" + "go.wit.com/lib/protobuf/gitpb" + "go.wit.com/log" +) + +var totalBuilt int + +func doBuildDeb() error { + // clean out old deb files + globPattern := filepath.Join(me.homedir, "incoming", "*.deb") + files, err := filepath.Glob(globPattern) + if err != nil { + log.Info("Error during globbing:", err) + return err + } + if len(files) > 0 { + cmd := []string{"rm"} + cmd = append(cmd, files...) + _, err := fhelp.RunRealtimeError(cmd) + return err + } + + initForge() + + found := gitpb.NewRepos() + for check := range me.forge.Repos.IterAll() { + if me.forge.Config.IsReadOnly(check.GetNamespace()) { + continue + } + + if !check.IsBinary() { + continue + } + + found.Append(check) + } + + printPackagingTable(found) + found.ActualSort() + printPackagingTable(found) + // me.forge.PrintTable(found) + + me.forge.ConfigRill(16, 16) + stats := me.forge.RunOnRepos(found, buildDeb) + for s, stat := range stats { + if stat.Err != nil { + log.Info("ERROR WITH buildDeb", s, stat.Err) + return stat.Err + } + } + if totalBuilt == 0 { + // nothing built, no need to talk to mirrors + return nil + } + + if _, err := shell.RunVerbose([]string{"ls", "-l", "/home/jcarr/incoming"}); err != nil { + me.sh.BadExit("aptly failed", nil) + } + + if _, err := fhelp.RunRealtimeError([]string{"do-aptly"}); err != nil { + me.sh.BadExit("aptly failed", nil) + } + return nil +} + +// avoids nil panics +func isDebianRelease() bool { + if argv.Build == nil { + return false + } + if argv.Build.Debian == nil { + return false + } + return argv.Build.Debian.Release +} + +func shouldBuild(repo *gitpb.Repo) string { + if repo.IsDirty() && !argv.Force { + return "no" + } + ver := repo.GetCurrentVersion() + debname := getDebFilename(repo) + if !debian.DebFilenameMatchesVersion(debname, ver) { + return "yes" + } + if argv.All { + return "yes" + } + return "" +} + +func buildDeb(repo *gitpb.Repo) error { + var cmd []string + + outdir := getOutdir(repo) + os.MkdirAll(outdir, 0755) + + if isDebianRelease() { + cmd = []string{"go-deb", "--release", "--namespace", repo.Namespace, "--dir", outdir} + } else { + cmd = []string{"go-deb", "--namespace", repo.Namespace, "--dir", outdir} + } + + if me.forge.Config.IsPrivate(repo.GetNamespace()) { + cmd = []string{"go-deb", "--namespace", repo.Namespace, "--dir", outdir} + // return nil + } + + if shouldBuild(repo) != "yes" { + return nil + } + + if argv.Verbose { + // log.Info("build cmd:", cmd) + cmd = append(cmd, "--verbose") + } + + if argv.DryRun { + log.Info("RUN:", repo.FullPath, cmd) + return nil + } + + log.Info("Building .deb", me.forge.GetPackageVersion(repo), cmd) + var err error + if _, err = repo.RunVerboseOnError(cmd); err != nil { + log.Info(repo.FullPath, cmd) + return err + } + + totalBuilt += 1 + log.Info("build worked", cmd, repo.FullPath) + return nil +} + +func getOutdir(repo *gitpb.Repo) string { + if me.forge.Config.IsPrivate(repo.GetNamespace()) { + return "/home/jcarr/incoming-private" + } + if argv.Force { + return "/home/jcarr/incoming" + } + if repo.GetLastTag() != repo.GetMasterVersion() { + return "/home/jcarr/incoming-devel" + } + + if repo.GetCurrentBranchVersion() != repo.GetMasterVersion() { + return "/home/jcarr/incoming-devel" + } + + if repo.CheckDirty() { + return "/home/jcarr/incoming-devel" + } + + return "/home/jcarr/incoming" +} |
