|
|
@@ -511,41 +511,44 @@ func doDebianSource(cmdline []string) {
|
|
|
debuild.Dir = pkgdir
|
|
|
build.MustRun(debuild)
|
|
|
|
|
|
- changes := fmt.Sprintf("%s_%s_source.changes", meta.Name(), meta.VersionString())
|
|
|
- changes = filepath.Join(*workdir, changes)
|
|
|
+ var (
|
|
|
+ basename = fmt.Sprintf("%s_%s", meta.Name(), meta.VersionString())
|
|
|
+ source = filepath.Join(*workdir, basename+".tar.xz")
|
|
|
+ dsc = filepath.Join(*workdir, basename+".dsc")
|
|
|
+ changes = filepath.Join(*workdir, basename+"_source.changes")
|
|
|
+ )
|
|
|
if *signer != "" {
|
|
|
build.MustRunCommand("debsign", changes)
|
|
|
}
|
|
|
if *upload != "" {
|
|
|
- uploadDebianSource(*workdir, *upload, *sshUser, changes)
|
|
|
+ ppaUpload(*workdir, *upload, *sshUser, []string{source, dsc, changes})
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func uploadDebianSource(workdir, ppa, sshUser, changes string) {
|
|
|
- // Create the dput config file.
|
|
|
- dputConfig := filepath.Join(workdir, "dput.cf")
|
|
|
+func ppaUpload(workdir, ppa, sshUser string, files []string) {
|
|
|
p := strings.Split(ppa, "/")
|
|
|
if len(p) != 2 {
|
|
|
log.Fatal("-upload PPA name must contain single /")
|
|
|
}
|
|
|
- templateData := map[string]string{
|
|
|
- "LaunchpadUser": p[0],
|
|
|
- "LaunchpadPPA": p[1],
|
|
|
- "LaunchpadSSH": sshUser,
|
|
|
+ if sshUser == "" {
|
|
|
+ sshUser = p[0]
|
|
|
}
|
|
|
+ incomingDir := fmt.Sprintf("~%s/ubuntu/%s", p[0], p[1])
|
|
|
+ // Create the SSH identity file if it doesn't exist.
|
|
|
+ var idfile string
|
|
|
if sshkey := getenvBase64("PPA_SSH_KEY"); len(sshkey) > 0 {
|
|
|
- idfile := filepath.Join(workdir, "sshkey")
|
|
|
- ioutil.WriteFile(idfile, sshkey, 0600)
|
|
|
- templateData["IdentityFile"] = idfile
|
|
|
+ idfile = filepath.Join(workdir, "sshkey")
|
|
|
+ if _, err := os.Stat(idfile); os.IsNotExist(err) {
|
|
|
+ ioutil.WriteFile(idfile, sshkey, 0600)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // Upload
|
|
|
+ dest := sshUser + "@ppa.launchpad.net"
|
|
|
+ if err := build.UploadSFTP(idfile, dest, incomingDir, files); err != nil {
|
|
|
+ log.Fatal(err)
|
|
|
}
|
|
|
- build.Render("build/dput-launchpad.cf", dputConfig, 0644, templateData)
|
|
|
-
|
|
|
- // Run dput to do the upload.
|
|
|
- dput := exec.Command("dput", "-c", dputConfig, "--no-upload-log", ppa, changes)
|
|
|
- dput.Stdin = strings.NewReader("Yes\n") // accept SSH host key
|
|
|
- build.MustRun(dput)
|
|
|
}
|
|
|
|
|
|
func getenvBase64(variable string) []byte {
|