debian-forge-composer/cmd/osbuild-koji/main.go
Tom Gundersen 76515066a8 upload/koji: add helpers to upload to koji
This does not yet actually upload the image, and it only supports empty
images. You need to place a an empty file named <filename>, with a valid
extension (e.g., .qcow2) in /mnt/koji/work/<directory>/.

Signed-off-by: Tom Gundersen <teg@jklm.no>
2020-05-19 13:54:53 +02:00

110 lines
2.2 KiB
Go

package main
import (
"flag"
"fmt"
"os"
"path"
"time"
"github.com/google/uuid"
"github.com/osbuild/osbuild-composer/internal/upload/koji"
)
func main() {
var server, user, password, name, version, release, arch, filename string
flag.StringVar(&server, "server", "", "url to API")
flag.StringVar(&user, "user", "", "koji username")
flag.StringVar(&password, "password", "", "koji password")
flag.StringVar(&name, "name", "", "image name")
flag.StringVar(&version, "version", "", "image verison")
flag.StringVar(&release, "release", "", "image release")
flag.StringVar(&arch, "arch", "", "image architecture")
flag.StringVar(&filename, "filename", "", "filename")
flag.Parse()
id, err := uuid.NewRandom()
if err != nil {
println(err.Error())
return
}
dir := fmt.Sprintf("osbuild-%v", id)
file, err := os.Open(filename)
if err != nil {
println(err.Error())
return
}
defer file.Close()
k, err := koji.New(server)
if err != nil {
println(err.Error())
return
}
err = k.Login("osbuild", "osbuildpass")
if err != nil {
println(err.Error())
return
}
defer k.Logout()
hash, length, err := k.Upload(file, dir, path.Base(filename))
if err != nil {
println(err.Error())
return
}
build := koji.Build{
Name: name,
Version: version,
Release: release,
StartTime: time.Now().Unix(),
EndTime: time.Now().Unix(),
}
buildRoots := []koji.BuildRoot{
{
ID: 1,
Host: koji.Host{
Os: "RHEL8",
Arch: arch,
},
ContentGenerator: koji.ContentGenerator{
Name: "osbuild",
Version: "1",
},
Container: koji.Container{
Type: "nspawn",
Arch: arch,
},
Tools: []koji.Tool{},
Components: []koji.Component{},
},
}
output := []koji.Output{
{
BuildRootID: 1,
Filename: path.Base(filename),
FileSize: length,
Arch: arch,
ChecksumType: "md5",
MD5: hash,
Type: "image",
Components: []koji.Component{},
Extra: koji.OutputExtra{
Image: koji.OutputExtraImageInfo{
Arch: arch,
},
},
},
}
err = k.CGImport(build, buildRoots, output, dir)
if err != nil {
println(err.Error())
return
}
fmt.Printf("Success!\n")
}