This repository has been archived by the owner on May 16, 2024. It is now read-only.
/
manifest.go
81 lines (68 loc) · 1.96 KB
/
manifest.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package deploy
import (
"bytes"
"context"
"encoding/json"
"fmt"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/feature/s3/manager"
"github.com/aws/aws-sdk-go-v2/service/s3"
"github.com/common-fate/clio"
"github.com/common-fate/common-fate/pkg/cfaws"
"go.uber.org/zap"
)
type Manifest struct {
// Version is the version of the manifest itself. Used for forwards-compatibility.
Version int `json:"manifestVersion"`
LatestDeploymentVersion string `json:"latestDeploymentVersion"`
}
// PublishManifest updates the manifest.json file in the release bucket.
func PublishManifest(ctx context.Context, releaseBucket, version string) error {
m := Manifest{
LatestDeploymentVersion: version,
Version: 1,
}
mJSON, err := json.Marshal(m)
if err != nil {
return err
}
cfg, err := cfaws.ConfigFromContextOrDefault(ctx)
if err != nil {
return err
}
zap.S().Infow("writing manifest", "bucket", releaseBucket, "manifest", m)
client := s3.NewFromConfig(cfg)
_, err = client.PutObject(ctx, &s3.PutObjectInput{
Bucket: &releaseBucket,
Key: aws.String("manifest.json"),
Body: bytes.NewBuffer(mJSON),
})
return err
}
// GetManifest retrieves the manifest.json file for the current deployment region
func GetManifest(ctx context.Context, region string) (Manifest, error) {
cfg, err := cfaws.ConfigFromContextOrDefault(ctx)
if err != nil {
return Manifest{}, err
}
cfg.Region = region
client := s3.NewFromConfig(cfg)
buffer := manager.NewWriteAtBuffer([]byte{})
bucket := fmt.Sprintf("granted-releases-%s", region)
key := "manifest.json"
clio.Debugw("fetching manifest", "bucket", bucket, "key", key)
downloader := manager.NewDownloader(client)
_, err = downloader.Download(ctx, buffer, &s3.GetObjectInput{
Bucket: &bucket,
Key: &key,
})
if err != nil {
return Manifest{}, err
}
var m Manifest
err = json.Unmarshal(buffer.Bytes(), &m)
if err != nil {
return Manifest{}, err
}
return m, nil
}