Move the OSBuildStagesToRPMs function, associated test, and RPM type from the worker into the rpmmd subpackge. We will use this function in the cloud API to compile the NEVRAs for the new metadata endpoint.
123 lines
2.6 KiB
Go
123 lines
2.6 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
"path"
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/osbuild/osbuild-composer/internal/rpmmd"
|
|
"github.com/osbuild/osbuild-composer/internal/upload/koji"
|
|
)
|
|
|
|
func main() {
|
|
var taskID int
|
|
var server, user, password, name, version, release, arch, filename string
|
|
flag.IntVar(&taskID, "task-id", 0, "id of owning task")
|
|
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.NewFromPlain(server, "osbuild", "osbuildpass", http.DefaultTransport)
|
|
if err != nil {
|
|
println(err.Error())
|
|
return
|
|
}
|
|
defer func() {
|
|
err := k.Logout()
|
|
if err != nil {
|
|
log.Print("logging out of koji failed ", err)
|
|
}
|
|
}()
|
|
|
|
hash, length, err := k.Upload(file, dir, path.Base(filename))
|
|
if err != nil {
|
|
println(err.Error())
|
|
return
|
|
}
|
|
|
|
build := koji.ImageBuild{
|
|
TaskID: uint64(taskID),
|
|
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{},
|
|
RPMs: []rpmmd.RPM{},
|
|
},
|
|
}
|
|
output := []koji.Image{
|
|
{
|
|
BuildRootID: 1,
|
|
Filename: path.Base(filename),
|
|
FileSize: length,
|
|
Arch: arch,
|
|
ChecksumType: "md5",
|
|
MD5: hash,
|
|
Type: "image",
|
|
RPMs: []rpmmd.RPM{},
|
|
Extra: koji.ImageExtra{
|
|
Info: koji.ImageExtraInfo{
|
|
Arch: arch,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
initResult, err := k.CGInitBuild(build.Name, build.Version, build.Release)
|
|
if err != nil {
|
|
println(err.Error())
|
|
return
|
|
}
|
|
|
|
build.BuildID = uint64(initResult.BuildID)
|
|
|
|
importResult, err := k.CGImport(build, buildRoots, output, dir, initResult.Token)
|
|
if err != nil {
|
|
println(err.Error())
|
|
return
|
|
}
|
|
|
|
fmt.Printf("Success, build id: %d\n", importResult.BuildID)
|
|
}
|