Add option for fallback module stream

This commit is contained in:
Mustafa Gezen 2021-04-25 12:58:13 +02:00
parent 32af526744
commit 6fb0ea1997
3 changed files with 83 additions and 68 deletions

View File

@ -42,26 +42,27 @@ import (
) )
var ( var (
sourceRpm string sourceRpm string
sshKeyLocation string sshKeyLocation string
sshUser string sshUser string
upstreamPrefix string upstreamPrefix string
version int version int
storageAddr string storageAddr string
gitCommitterName string gitCommitterName string
gitCommitterEmail string gitCommitterEmail string
modulePrefix string modulePrefix string
rpmPrefix string rpmPrefix string
importBranchPrefix string importBranchPrefix string
branchPrefix string branchPrefix string
singleTag string singleTag string
noDupMode bool noDupMode bool
moduleMode bool moduleMode bool
tmpFsMode string tmpFsMode string
noStorageDownload bool noStorageDownload bool
noStorageUpload bool noStorageUpload bool
manualCommits string manualCommits string
upstreamPrefixHttps string upstreamPrefixHttps string
moduleFallbackStream string
) )
var root = &cobra.Command{ var root = &cobra.Command{
@ -145,28 +146,29 @@ func mn(_ *cobra.Command, _ []string) {
} }
internal.ProcessRPM(&data.ProcessData{ internal.ProcessRPM(&data.ProcessData{
Importer: importer, Importer: importer,
RpmLocation: sourceRpmLocation, RpmLocation: sourceRpmLocation,
UpstreamPrefix: upstreamPrefix, UpstreamPrefix: upstreamPrefix,
SshKeyLocation: sshKeyLocation, SshKeyLocation: sshKeyLocation,
SshUser: sshUser, SshUser: sshUser,
Version: version, Version: version,
BlobStorage: blobStorage, BlobStorage: blobStorage,
GitCommitterName: gitCommitterName, GitCommitterName: gitCommitterName,
GitCommitterEmail: gitCommitterEmail, GitCommitterEmail: gitCommitterEmail,
ModulePrefix: modulePrefix, ModulePrefix: modulePrefix,
ImportBranchPrefix: importBranchPrefix, ImportBranchPrefix: importBranchPrefix,
BranchPrefix: branchPrefix, BranchPrefix: branchPrefix,
SingleTag: singleTag, SingleTag: singleTag,
Authenticator: authenticator, Authenticator: authenticator,
NoDupMode: noDupMode, NoDupMode: noDupMode,
ModuleMode: moduleMode, ModuleMode: moduleMode,
TmpFsMode: tmpFsMode, TmpFsMode: tmpFsMode,
NoStorageDownload: noStorageDownload, NoStorageDownload: noStorageDownload,
NoStorageUpload: noStorageUpload, NoStorageUpload: noStorageUpload,
ManualCommits: manualCs, ManualCommits: manualCs,
UpstreamPrefixHttps: upstreamPrefixHttps, UpstreamPrefixHttps: upstreamPrefixHttps,
FsCreator: fsCreator, ModuleFallbackStream: moduleFallbackStream,
FsCreator: fsCreator,
}) })
} }
@ -196,6 +198,7 @@ func main() {
root.Flags().BoolVar(&noStorageUpload, "no-storage-upload", false, "If enabled, blobs are not uploaded to blob storage") root.Flags().BoolVar(&noStorageUpload, "no-storage-upload", false, "If enabled, blobs are not uploaded to blob storage")
root.Flags().StringVar(&manualCommits, "manual-commits", "", "Comma separated branch and commit list for packages with broken release tags (Format: BRANCH:HASH)") root.Flags().StringVar(&manualCommits, "manual-commits", "", "Comma separated branch and commit list for packages with broken release tags (Format: BRANCH:HASH)")
root.Flags().StringVar(&upstreamPrefixHttps, "upstream-prefix-https", "", "Web version of upstream prefix. Required if module-mode") root.Flags().StringVar(&upstreamPrefixHttps, "upstream-prefix-https", "", "Web version of upstream prefix. Required if module-mode")
root.Flags().StringVar(&moduleFallbackStream, "module-fallback-stream", "", "Override fallback stream. Some module packages are published as collections and mostly use the same stream name, some of them deviate from the main stream")
if err := root.Execute(); err != nil { if err := root.Execute(); err != nil {
log.Fatal(err) log.Fatal(err)

View File

@ -27,27 +27,28 @@ import (
) )
type ProcessData struct { type ProcessData struct {
RpmLocation string RpmLocation string
UpstreamPrefix string UpstreamPrefix string
SshKeyLocation string SshKeyLocation string
SshUser string SshUser string
Version int Version int
GitCommitterName string GitCommitterName string
GitCommitterEmail string GitCommitterEmail string
Mode int Mode int
ModulePrefix string ModulePrefix string
ImportBranchPrefix string ImportBranchPrefix string
BranchPrefix string BranchPrefix string
SingleTag string SingleTag string
Authenticator *ssh.PublicKeys Authenticator *ssh.PublicKeys
Importer ImportMode Importer ImportMode
BlobStorage blob.Storage BlobStorage blob.Storage
NoDupMode bool NoDupMode bool
ModuleMode bool ModuleMode bool
TmpFsMode string TmpFsMode string
NoStorageDownload bool NoStorageDownload bool
NoStorageUpload bool NoStorageUpload bool
ManualCommits []string ManualCommits []string
UpstreamPrefixHttps string UpstreamPrefixHttps string
FsCreator func(branch string) billy.Filesystem ModuleFallbackStream string
FsCreator func(branch string) billy.Filesystem
} }

View File

@ -263,34 +263,45 @@ func patchModuleYaml(pd *data.ProcessData, md *data.ModeData) {
log.Printf("\t- %s", name) log.Printf("\t- %s", name)
} }
defaultBranch := md.PushBranch
if pd.ModuleFallbackStream != "" {
defaultBranch = fmt.Sprintf("%s%d-stream-%s", pd.BranchPrefix, pd.Version, pd.ModuleFallbackStream)
}
for name, rpm := range module.Data.Components.Rpms { for name, rpm := range module.Data.Components.Rpms {
var tipHash string var tipHash string
var pushBranch string var pushBranch string
split := strings.Split(rpm.Ref, "-") split := strings.Split(rpm.Ref, "-")
// TODO: maybe point to correct release tag? but refer to latest for now, // TODO: maybe point to correct release tag? but refer to latest for now,
// we're bootstrapping a new distro for latest RHEL8 anyways. So earlier // we're bootstrapping a new distro for latest RHEL8 anyways. So earlier
// versions are not that important // versions are not that important
if strings.HasPrefix(rpm.Ref, "stream-rhel-rhel-") { if strings.HasPrefix(rpm.Ref, "stream-rhel-rhel-") {
pushBranch = md.PushBranch pushBranch = defaultBranch
} else if strings.HasPrefix(rpm.Ref, "stream-rhel-") { } else if strings.HasPrefix(rpm.Ref, "stream-rhel-") {
repString := fmt.Sprintf("%s%ss-", pd.BranchPrefix, string(split[4][0])) repString := fmt.Sprintf("%s%ss-", pd.BranchPrefix, string(split[4][0]))
newString := fmt.Sprintf("%s%s-", pd.BranchPrefix, string(split[4][0])) newString := fmt.Sprintf("%s%s-", pd.BranchPrefix, string(split[4][0]))
pushBranch = strings.Replace(md.PushBranch, repString, newString, 1) pushBranch = strings.Replace(md.PushBranch, repString, newString, 1)
} else if strings.HasPrefix(rpm.Ref, "stream-") && len(split) == 2 { } else if strings.HasPrefix(rpm.Ref, "stream-") && len(split) == 2 {
pushBranch = md.PushBranch pushBranch = defaultBranch
} else if strings.HasPrefix(rpm.Ref, "stream-") && len(split) == 3 { } else if strings.HasPrefix(rpm.Ref, "stream-") && len(split) == 3 {
// example: ant // example: ant
pushBranch = fmt.Sprintf("%s%d-stream-%s", pd.BranchPrefix, pd.Version, split[2]) pushBranch = fmt.Sprintf("%s%d-stream-%s", pd.BranchPrefix, pd.Version, split[2])
} else if strings.HasPrefix(rpm.Ref, "stream-") { } else if strings.HasPrefix(rpm.Ref, "stream-") {
pushBranch = fmt.Sprintf("%s%s-stream-%s", pd.BranchPrefix, string(split[3][0]), split[1]) pushBranch = fmt.Sprintf("%s%s-stream-%s", pd.BranchPrefix, string(split[3][0]), split[1])
} else if strings.HasPrefix(rpm.Ref, "rhel-") { } else if strings.HasPrefix(rpm.Ref, "rhel-") {
pushBranch = md.PushBranch pushBranch = defaultBranch
} else { } else {
log.Fatal("could not recognize modulemd ref") log.Fatal("could not recognize modulemd ref")
} }
rpm.Ref = pushBranch rpm.Ref = pushBranch
tipHash = getTipStream(pd, name, pushBranch, md.PushBranch, 0) tipHash = getTipStream(pd, name, pushBranch, md.PushBranch, 0)
if tipHash == "0000000000000000000000000000000000000000" {
pushBranch = defaultBranch
rpm.Ref = pushBranch
tipHash = getTipStream(pd, name, pushBranch, md.PushBranch, 0)
}
err = module.Marshal(md.Worktree.Filesystem, mdTxtPath) err = module.Marshal(md.Worktree.Filesystem, mdTxtPath)
if err != nil { if err != nil {