mirror of
https://github.com/edgelesssys/constellation.git
synced 2025-05-14 20:22:13 -04:00
hack: implement new api for add-version script
Signed-off-by: Paul Meyer <49727155+katexochen@users.noreply.github.com>
This commit is contained in:
parent
e461b6385a
commit
f23a2fe073
6 changed files with 192 additions and 57 deletions
|
@ -36,6 +36,7 @@ import (
|
|||
var errVersionListMissing = errors.New("version list does not exist")
|
||||
|
||||
const (
|
||||
skipRefStr = "-"
|
||||
imageKind = "image"
|
||||
defaultRegion = "eu-central-1"
|
||||
defaultBucket = "cdn-constellation-backend"
|
||||
|
@ -50,6 +51,9 @@ func main() {
|
|||
flags := flags{
|
||||
version: flag.String("version", "", "Version to add (format: \"v1.2.3\")"),
|
||||
stream: flag.String("stream", "", "Stream to add the version to"),
|
||||
ref: flag.String("ref", "", "Ref to add the version to"),
|
||||
release: flag.Bool("release", false, "Whether the version is a release"),
|
||||
dryRun: flag.Bool("dryrun", false, "Whether to run in dry-run mode (no changes are made)"),
|
||||
region: flag.String("region", defaultRegion, "AWS region"),
|
||||
bucket: flag.String("bucket", defaultBucket, "S3 bucket"),
|
||||
distributionID: flag.String("distribution-id", defaultDistributionID, "cloudfront distribution id"),
|
||||
|
@ -60,7 +64,7 @@ func main() {
|
|||
}
|
||||
|
||||
updateFetcher := versionsapi.New()
|
||||
versionManager, err := newVersionManager(ctx, *flags.region, *flags.bucket, *flags.distributionID)
|
||||
versionManager, err := newVersionManager(ctx, *flags.region, *flags.bucket, *flags.distributionID, *flags.dryRun, log)
|
||||
if err != nil {
|
||||
log.With(zap.Error(err)).Fatalf("Failed to create version uploader")
|
||||
}
|
||||
|
@ -68,6 +72,7 @@ func main() {
|
|||
ver := version{
|
||||
versionStr: *flags.version,
|
||||
stream: *flags.stream,
|
||||
ref: *flags.ref,
|
||||
}
|
||||
|
||||
if err := ensureMinorVersion(ctx, versionManager, ver, log); err != nil {
|
||||
|
@ -101,6 +106,7 @@ func ensureMinorVersion(ctx context.Context, versionManager *versionManager, ver
|
|||
if errors.Is(err, errVersionListMissing) {
|
||||
log.Infof("Version list for minor versions under %q does not exist. Creating new list.", ver.Major())
|
||||
minorVerList = &versionsapi.List{
|
||||
Ref: ver.Ref(),
|
||||
Stream: ver.Stream(),
|
||||
Granularity: "major",
|
||||
Base: ver.Major(),
|
||||
|
@ -132,6 +138,7 @@ func ensurePatchVersion(ctx context.Context, versionManager *versionManager, ver
|
|||
if errors.Is(err, errVersionListMissing) {
|
||||
log.Infof("Version list for patch versions under %q does not exist. Creating new list.", ver.MajorMinor())
|
||||
pathVerList = &versionsapi.List{
|
||||
Ref: ver.Ref(),
|
||||
Stream: ver.Stream(),
|
||||
Granularity: "minor",
|
||||
Base: ver.MajorMinor(),
|
||||
|
@ -160,6 +167,7 @@ func ensurePatchVersion(ctx context.Context, versionManager *versionManager, ver
|
|||
type version struct {
|
||||
versionStr string
|
||||
stream string
|
||||
ref string
|
||||
}
|
||||
|
||||
func (v *version) MajorMinorPatch() string {
|
||||
|
@ -190,16 +198,23 @@ func (v *version) URL(gran granularity) string {
|
|||
}
|
||||
|
||||
func (v *version) JSONPath(gran granularity) string {
|
||||
return path.Join(constants.CDNVersionsPath, "stream", v.stream, gran.String(), v.WithGranularity(gran), imageKind+".json")
|
||||
return path.Join(constants.CDNAPIPrefix, "ref", v.ref, "stream", v.stream, "versions", gran.String(), v.WithGranularity(gran), imageKind+".json")
|
||||
}
|
||||
|
||||
func (v *version) Stream() string {
|
||||
return v.stream
|
||||
}
|
||||
|
||||
func (v *version) Ref() string {
|
||||
return v.ref
|
||||
}
|
||||
|
||||
type flags struct {
|
||||
version *string
|
||||
stream *string
|
||||
ref *string
|
||||
release *bool
|
||||
dryRun *bool
|
||||
region *string
|
||||
bucket *string
|
||||
distributionID *string
|
||||
|
@ -209,9 +224,29 @@ func (f *flags) validate() error {
|
|||
if err := validateVersion(*f.version); err != nil {
|
||||
return err
|
||||
}
|
||||
if *f.stream == "" {
|
||||
return errors.New("stream must be set")
|
||||
|
||||
if *f.ref == "" && !*f.release {
|
||||
if !*f.release {
|
||||
return fmt.Errorf("branch flag must be set for non-release versions")
|
||||
}
|
||||
}
|
||||
if *f.ref != "" && *f.release {
|
||||
return fmt.Errorf("branch flag must not be set for release versions")
|
||||
}
|
||||
if *f.release {
|
||||
*f.ref = skipRefStr
|
||||
}
|
||||
|
||||
ref := versionsapi.CanonicalRef(*f.ref)
|
||||
if !versionsapi.IsValidRef(ref) {
|
||||
return fmt.Errorf("invalid ref %q", *f.ref)
|
||||
}
|
||||
*f.ref = ref
|
||||
|
||||
if !versionsapi.IsValidStream(*f.ref, *f.stream) {
|
||||
return fmt.Errorf("invalid stream %q for ref %q", *f.stream, *f.ref)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -226,7 +261,7 @@ func validateVersion(version string) error {
|
|||
}
|
||||
|
||||
func ensureMinorVersionExists(ctx context.Context, fetcher *versionsapi.Fetcher, ver version) error {
|
||||
existingMinorVersions, err := fetcher.MinorVersionsOf(ctx, ver.Stream(), ver.Major(), imageKind)
|
||||
existingMinorVersions, err := fetcher.MinorVersionsOf(ctx, ver.Ref(), ver.Stream(), ver.Major(), imageKind)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -237,7 +272,7 @@ func ensureMinorVersionExists(ctx context.Context, fetcher *versionsapi.Fetcher,
|
|||
}
|
||||
|
||||
func ensurePatchVersionExists(ctx context.Context, fetcher *versionsapi.Fetcher, ver version) error {
|
||||
existingPatchVersions, err := fetcher.PatchVersionsOf(ctx, ver.Stream(), ver.MajorMinor(), imageKind)
|
||||
existingPatchVersions, err := fetcher.PatchVersionsOf(ctx, ver.Ref(), ver.Stream(), ver.MajorMinor(), imageKind)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -255,9 +290,11 @@ type versionManager struct {
|
|||
bucket string
|
||||
distributionID string
|
||||
dirty bool // manager gets dirty on write
|
||||
dryRun bool // no write operations
|
||||
log *logger.Logger
|
||||
}
|
||||
|
||||
func newVersionManager(ctx context.Context, region, bucket, distributionID string) (*versionManager, error) {
|
||||
func newVersionManager(ctx context.Context, region, bucket, distributionID string, dryRun bool, log *logger.Logger) (*versionManager, error) {
|
||||
cfg, err := awsconfig.LoadDefaultConfig(ctx, awsconfig.WithRegion(region))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@ -272,6 +309,8 @@ func newVersionManager(ctx context.Context, region, bucket, distributionID strin
|
|||
uploader: uploader,
|
||||
bucket: bucket,
|
||||
distributionID: distributionID,
|
||||
dryRun: dryRun,
|
||||
log: log,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
@ -308,13 +347,20 @@ func (m *versionManager) updateVersionList(ctx context.Context, list *versionsap
|
|||
return err
|
||||
}
|
||||
|
||||
m.dirty = true
|
||||
|
||||
in := &s3.PutObjectInput{
|
||||
Bucket: aws.String(m.bucket),
|
||||
Key: aws.String(listJSONPath(list)),
|
||||
Body: bytes.NewBuffer(rawList),
|
||||
}
|
||||
|
||||
if m.dryRun {
|
||||
m.log.Infof("dryRun: s3 put object {Bucket: %v, Key: %v, Body: %v", m.bucket, listJSONPath(list), string(rawList))
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
m.dirty = true
|
||||
|
||||
_, err = m.uploader.Upload(ctx, in)
|
||||
|
||||
return err
|
||||
|
@ -369,7 +415,7 @@ func waitForCacheUpdate(ctx context.Context, updateFetcher *versionsapi.Fetcher,
|
|||
}
|
||||
|
||||
func listJSONPath(list *versionsapi.List) string {
|
||||
return path.Join(constants.CDNVersionsPath, "stream", list.Stream, list.Granularity, list.Base, imageKind+".json")
|
||||
return path.Join(constants.CDNAPIPrefix, "ref", list.Ref, "stream", list.Stream, "versions", list.Granularity, list.Base, imageKind+".json")
|
||||
}
|
||||
|
||||
type granularity int
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue