summaryrefslogtreecommitdiff
path: root/doRelease.go
diff options
context:
space:
mode:
Diffstat (limited to 'doRelease.go')
-rw-r--r--doRelease.go175
1 files changed, 175 insertions, 0 deletions
diff --git a/doRelease.go b/doRelease.go
new file mode 100644
index 0000000..887dab9
--- /dev/null
+++ b/doRelease.go
@@ -0,0 +1,175 @@
+package main
+
+import (
+ "bytes"
+ "crypto/sha256"
+ "errors"
+ "fmt"
+ "os"
+ "os/exec"
+ "path/filepath"
+ "strings"
+ "time"
+
+ "go.wit.com/lib/gui/shell"
+ "go.wit.com/log"
+)
+
+func doRelease() (string, error) {
+ // log.Info(r, err2)
+ shell.RunVerbose([]string{"rm", "-rf", "/home/mirrors/wit/dists"})
+ // shell.RunVerbose([]string{"rm", "f", "/home/mirrors/wit/dists/sid/InRelease"})
+ // shell.RunVerbose([]string{"rm", "f", "/home/mirrors/wit/dists/sid/Release"})
+ // shell.RunVerbose([]string{"rm", "f", "/home/mirrors/wit/dists/sid/Release.gpg"})
+
+ // dists.working/sid/main/binary-amd64
+ if err := os.MkdirAll("/home/mirrors/wit/dists/sid/main/binary-amd64", 0755); err != nil {
+ log.Info("did not work", err)
+ } else {
+ log.Info("did work")
+ }
+
+ if me.pb.BaseDir != "/home/mirrors/wit" {
+ me.pb.Filename = "/home/mirrors/wit/mirrors.wit.com.pb"
+ me.pb.BaseDir = "/home/mirrors/wit"
+ me.pb.Save()
+ panic("missing /home/mirrors/wit as BaseDir")
+ }
+
+ if err := os.Chdir(me.pb.BaseDir); err != nil {
+ me.sh.BadExit("no '"+me.pb.BaseDir+"' directory", err)
+ }
+
+ if !shell.IsDir("pool/") {
+ me.sh.BadExit("no "+filepath.Join(me.pb.BaseDir, "pool")+" directory", errors.New("mount -a ? missing wit/pool/"))
+ }
+
+ log.Info("Processing dir", filepath.Join(me.pb.BaseDir, "pool"))
+
+ // arch := "amd64"
+
+ newest := doGetNewest("amd64")
+ newest.SortPackage()
+ thefile := doMakePackagesFile(newest)
+ fullname := "/home/mirrors/wit/dists/sid/main/binary-amd64/Packages"
+ if err := os.WriteFile(fullname, []byte(thefile), os.ModePerm); err != nil {
+ return fullname, err
+ }
+
+ r, err := shell.RunVerbose([]string{"gzip", "-k", fullname})
+ log.Info(r, err)
+ // r, err := shell.RunVerbose([]string{"gzip", fullname})
+ // panic("blah")
+ // shell.RunVerbose([]string{"bzip2", "-k", fullname})
+ // shell.RunVerbose([]string{"bzip2", fullname})
+
+ allfiles, _ := FindFiles("dists/sid/main")
+ for i, filename := range allfiles {
+ log.Info(i, filename)
+ }
+
+ releasePath := filepath.Join("/home/mirrors/wit/dists/sid", "Release")
+
+ rfile, _ := os.OpenFile(releasePath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
+ fmt.Fprintf(rfile, "Origin: WIT.COM Debian Sid\n")
+ fmt.Fprintf(rfile, "Label: WIT.COM Debian Sid\n")
+ fmt.Fprintf(rfile, "Suite: sid\n")
+ fmt.Fprintf(rfile, "Codename: sid\n")
+ fmt.Fprintf(rfile, "Date: %s\n", time.Now().UTC().Format(time.RFC1123Z))
+ fmt.Fprintf(rfile, "Architectures: riscv64 amd64 arm64 all\n")
+ fmt.Fprintf(rfile, "Components: main\n")
+ fmt.Fprintf(rfile, "Description: Tooling for RiscV, Semiconductor Designs & Private Clouds\n")
+
+ /*
+ fmt.Fprintf(rfile, "MD5SUM:\n")
+ for i, filename := range allfiles {
+ log.Info(i, filename)
+ fileBytes, _ := os.ReadFile(filename)
+ sum := fmt.Sprintf("%x", md5.Sum(fileBytes)) // deprecated
+ newfile := strings.TrimPrefix(filename, "dists/sid/")
+ fmt.Fprintf(rfile, " %s %d %s\n", sum, len(fileBytes), newfile)
+ }
+ fmt.Fprintf(rfile, "SHA1:\n")
+ for i, filename := range allfiles {
+ log.Info(i, filename)
+ fileBytes, _ := os.ReadFile(filename)
+ sum := fmt.Sprintf("%x", sha1.Sum(fileBytes))
+ newfile := strings.TrimPrefix(filename, "dists/sid/")
+ fmt.Fprintf(rfile, " %s %d %s\n", sum, len(fileBytes), newfile)
+ }
+ */
+ fmt.Fprintf(rfile, "SHA256:\n")
+ for i, filename := range allfiles {
+ log.Info(i, filename)
+ fileBytes, _ := os.ReadFile(filename)
+ sum := fmt.Sprintf("%x", sha256.Sum256(fileBytes))
+ newfile := strings.TrimPrefix(filename, "dists/sid/")
+ fmt.Fprintf(rfile, " %s %d %s\n", sum, len(fileBytes), newfile)
+ }
+ // fmt.Fprintf(rfile, "SHA1:\n")
+ // fmt.Fprintf(rfile, "SHA256:\n")
+ rfile.Close()
+
+ // Sign the file
+ log.Println("Signing with GPG key:", gpgKeyID)
+
+ distPath := "/home/mirrors/wit/dists/sid"
+ // Create InRelease
+ cmdClearSign := exec.Command("gpg", "--default-key", gpgKeyID, "--clearsign", "-o", filepath.Join(distPath, "InRelease"), releasePath)
+ if err := runCommand(cmdClearSign); err != nil {
+ log.Printf("failed to create InRelease: %v\n", err)
+ }
+
+ // Create Release.gpg
+ cmdDetachedSign := exec.Command("gpg", "--default-key", gpgKeyID, "-abs", "-o", filepath.Join(distPath, "Release.gpg"), releasePath)
+ if err := runCommand(cmdDetachedSign); err != nil {
+ log.Printf("failed to create Release.gpg: %v\n", err)
+ }
+ /*
+ var sum string
+ switch name {
+ case "MD5Sum":
+ sum = fmt.Sprintf("%x", md5.Sum(fileBytes))
+ case "SHA1":
+ sum = fmt.Sprintf("%x", sha1.Sum(fileBytes))
+ case "SHA256":
+ // FIX 3: Use the correct sha256.Sum256 function.
+ sum = fmt.Sprintf("%x", sha256.Sum256(fileBytes))
+ */
+
+ log.Info("Package file:", fullname)
+ log.Info("Release file:", releasePath)
+ log.Info("InRelease file:", filepath.Join(distPath, "InRelease"))
+ cmd := []string{"apt-get", "update"}
+ cmd = append(cmd, "-o", "Dir::Etc::sourcelist=/etc/apt/sources.list.d/wit.list")
+ cmd = append(cmd, "-o", "Dir::Etc::sourceparts=/dev/null")
+ cmd = append(cmd, "-o", "APT::Get::List-Cleanup=0")
+ log.Info("apt update :", cmd)
+ log.Info("")
+ log.Info("Finished Everything")
+ log.Info("")
+
+ if argv.Verbose {
+ log.Info("")
+ shell.RunVerbose(cmd)
+ log.Info("")
+ log.Info("")
+ log.Info("Local file:", "/var/lib/apt/lists/mirrors.wit.com_wit_dists_sid_main_binary-amd64_Packages")
+ log.Info("")
+ shell.RunVerbose([]string{"head", "-n", "15", "/var/lib/apt/lists/mirrors.wit.com_wit_dists_sid_main_binary-amd64_Packages"})
+ log.Info("apt install :", "apt install wit-tools")
+ log.Info("")
+ }
+
+ return "did everything", nil
+}
+
+func runCommand(cmd *exec.Cmd) error {
+ var stderr bytes.Buffer
+ cmd.Stderr = &stderr
+ err := cmd.Run()
+ if err != nil {
+ return fmt.Errorf("command '%s' failed: %v\nStderr: %s", cmd.String(), err, stderr.String())
+ }
+ return nil
+}