mirror of
https://github.com/edgelesssys/constellation.git
synced 2025-11-15 01:50:44 -05:00
bazel-deps-mirror: upgrade command (#1617)
* bazel-deps-mirror: upgrade command This command can be used to upgrade a dependency. Users are supposed to replace any upstream URLs and run the upgrade command. It replaces the expected hash and uploads the new dep to the mirror.
This commit is contained in:
parent
69de06dd1f
commit
0ece41c146
13 changed files with 476 additions and 29 deletions
|
|
@ -131,41 +131,72 @@ func fixBazelFile(ctx context.Context, fileHelper *bazelfiles.Helper, mirrorUplo
|
|||
return iss, nil
|
||||
}
|
||||
|
||||
func learnHashForRule(ctx context.Context, mirrorUpload mirrorUploader, rule *build.Rule, log *logger.Logger) error {
|
||||
upstreamURLs, err := rules.UpstreamURLs(rule)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
learnedHash, learnErr := mirrorUpload.Learn(ctx, upstreamURLs)
|
||||
if learnErr != nil {
|
||||
return err
|
||||
}
|
||||
rules.SetHash(rule, learnedHash)
|
||||
log.Debugf("Learned hash for rule %s: %s", rule.Name(), learnedHash)
|
||||
return nil
|
||||
}
|
||||
|
||||
func fixRule(ctx context.Context, mirrorUpload mirrorUploader, rule *build.Rule, log *logger.Logger) (changed bool, iss []error) {
|
||||
log.Debugf("Fixing rule: %s", rule.Name())
|
||||
|
||||
// try to learn the hash
|
||||
if hash, err := rules.GetHash(rule); err != nil || hash == "" {
|
||||
if err := learnHashForRule(ctx, mirrorUpload, rule, log); err != nil {
|
||||
// don't try to fix the rule if the hash is missing and we can't learn it
|
||||
iss = append(iss,
|
||||
errors.New("hash attribute is missing and can't learn it from upstream."+
|
||||
"Unable to check if the artifact is already mirrored or upload it"))
|
||||
return false, iss
|
||||
}
|
||||
changed = true
|
||||
}
|
||||
|
||||
// check if the rule is a valid pinned dependency rule (has all required attributes)
|
||||
issue := rules.ValidatePinned(rule)
|
||||
if issue != nil {
|
||||
// don't try to fix the rule if it's invalid
|
||||
iss = append(iss, issue...)
|
||||
return
|
||||
return false, iss
|
||||
}
|
||||
|
||||
// check if the referenced CAS object exists in the mirror and is consistent
|
||||
expectedHash, expectedHashErr := rules.GetHash(rule)
|
||||
if expectedHashErr != nil {
|
||||
// don't try to fix the rule if the hash is missing
|
||||
iss = append(iss,
|
||||
errors.New("hash attribute is missing. unable to check if the artifact is already mirrored or upload it"))
|
||||
return
|
||||
iss = append(iss, expectedHashErr)
|
||||
return false, iss
|
||||
}
|
||||
|
||||
if rules.HasMirrorURL(rule) {
|
||||
changed = rules.Normalize(rule)
|
||||
return
|
||||
changed = rules.Normalize(rule) || changed
|
||||
return changed, iss
|
||||
}
|
||||
|
||||
log.Infof("Artifact %s with hash %s is not yet mirrored. Uploading...", rule.Name(), expectedHash)
|
||||
if uploadErr := mirrorUpload.Mirror(ctx, expectedHash, rules.GetURLs(rule)); uploadErr != nil {
|
||||
// don't try to fix the rule if the upload failed
|
||||
iss = append(iss, uploadErr)
|
||||
return
|
||||
if checkErr := mirrorUpload.Check(ctx, expectedHash); checkErr != nil {
|
||||
log.Infof("Artifact %s with hash %s is not yet mirrored. Uploading...", rule.Name(), expectedHash)
|
||||
if uploadErr := mirrorUpload.Mirror(ctx, expectedHash, rules.GetURLs(rule)); uploadErr != nil {
|
||||
// don't try to fix the rule if the upload failed
|
||||
iss = append(iss, uploadErr)
|
||||
return changed, iss
|
||||
}
|
||||
} else {
|
||||
log.Infof("Artifact %s with hash %s was already uploaded before. Adding to rule...", rule.Name(), expectedHash)
|
||||
}
|
||||
|
||||
// now the artifact is mirrored (if it wasn't already) and we can fix the rule
|
||||
mirrorURL, err := mirrorUpload.MirrorURL(expectedHash)
|
||||
if err != nil {
|
||||
iss = append(iss, err)
|
||||
return
|
||||
return changed, iss
|
||||
}
|
||||
rules.AddURLs(rule, []string{mirrorURL})
|
||||
|
||||
|
|
@ -224,6 +255,7 @@ func parseFixFlags(cmd *cobra.Command) (fixFlags, error) {
|
|||
}
|
||||
|
||||
type mirrorUploader interface {
|
||||
Learn(ctx context.Context, urls []string) (string, error)
|
||||
Check(ctx context.Context, expectedHash string) error
|
||||
Mirror(ctx context.Context, hash string, urls []string) error
|
||||
MirrorURL(hash string) (string, error)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue