Skip to content

Commit

Permalink
Merge pull request #1498 from aquaproj/feat/checksum-supported_envs
Browse files Browse the repository at this point in the history
Support excluding unneeded os/arch checksum from aqua-checksums.json
  • Loading branch information
suzuki-shunsuke committed Dec 30, 2022
2 parents 36d2107 + 8b2f50c commit f09935e
Show file tree
Hide file tree
Showing 8 changed files with 67 additions and 13 deletions.
40 changes: 40 additions & 0 deletions pkg/checksum/supported_envs.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package checksum

import (
"fmt"

"github.com/aquaproj/aqua/pkg/runtime"
)

func GetRuntimesFromSupportedEnvs(cfgSupportedEnvs, pkgSupportedEnvs []string) ([]*runtime.Runtime, error) {
rts, err := runtime.GetRuntimesFromEnvs(pkgSupportedEnvs)
if err != nil {
return nil, fmt.Errorf("get supported platforms: %w", err)
}
if len(cfgSupportedEnvs) == 0 {
return rts, nil
}
cfgRTs, err := runtime.GetRuntimesFromEnvs(cfgSupportedEnvs)
if err != nil {
return nil, fmt.Errorf("get supported platforms: %w", err)
}

cfgRTMap := make(map[string]struct{}, len(cfgRTs))
for _, rt := range cfgRTs {
cfgRTMap[rt.Env()] = struct{}{}
}

rtMap := make(map[string]*runtime.Runtime, len(rts))
for _, rt := range rts {
env := rt.Env()
if _, ok := cfgRTMap[env]; ok {
rtMap[env] = rt
}
}

rts = make([]*runtime.Runtime, 0, len(rtMap))
for _, rt := range rtMap {
rts = append(rts, rt)
}
return rts, nil
}
3 changes: 3 additions & 0 deletions pkg/config/aqua/checksum.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package aqua

import "github.com/aquaproj/aqua/pkg/config/registry"

func (cfg *Config) ChecksumEnabled() bool {
if cfg == nil {
return false
Expand All @@ -21,6 +23,7 @@ type Checksum struct {
RequireChecksum bool `yaml:"require_checksum" json:"require_checksum,omitempty"`
// SaveCalculatedChecksum bool `yaml:"save_calculated_checksum" json:"-"`
// Excludes []*ChekcsumExclude `json:"-"`
SupportedEnvs registry.SupportedEnvs `yaml:"supported_envs" json:"supported_envs,omitempty"`
}

// type ChekcsumExclude struct {
Expand Down
2 changes: 1 addition & 1 deletion pkg/config/extract.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ func ListPackages(logE *logrus.Entry, cfg *aqua.Config, rt *runtime.Runtime, reg
failed := false
// registry -> package name -> pkgInfo
m := make(map[string]map[string]*registry.PackageInfo, len(registries))
env := rt.GOOS + "/" + rt.GOARCH
env := rt.Env()
for _, pkg := range cfg.Packages {
pkg := pkg
if pkg.Name == "" {
Expand Down
2 changes: 1 addition & 1 deletion pkg/config/registry/supported_envs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ func TestPackageInfo_CheckSupported(t *testing.T) { //nolint:funlen
d := d
t.Run(d.name, func(t *testing.T) {
t.Parallel()
b, err := d.pkgInfo.CheckSupported(d.rt, d.rt.GOOS+"/"+d.rt.GOARCH)
b, err := d.pkgInfo.CheckSupported(d.rt, d.rt.Env())
if d.isErr {
if err == nil {
t.Fatal("error must be returned")
Expand Down
23 changes: 15 additions & 8 deletions pkg/controller/updatechecksum/update.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,13 +112,19 @@ func (ctrl *Controller) updateChecksum(ctx context.Context, logE *logrus.Entry,
namedErr = fmt.Errorf("update a checksum file: %w", err)
}
}()

var supportedEnvs []string
if cfg.Checksum != nil {
supportedEnvs = cfg.Checksum.SupportedEnvs
}

for _, pkg := range pkgs {
logE := logE.WithFields(logrus.Fields{
"package_name": pkg.Package.Name,
"package_version": pkg.Package.Version,
"package_registry": pkg.Package.Registry,
})
if err := ctrl.updatePackage(ctx, logE, checksums, pkg); err != nil {
if err := ctrl.updatePackage(ctx, logE, checksums, pkg, supportedEnvs); err != nil {
failed = true
logerr.WithError(logE, err).Error("update checksums")
}
Expand All @@ -129,30 +135,31 @@ func (ctrl *Controller) updateChecksum(ctx context.Context, logE *logrus.Entry,
return nil
}

func (ctrl *Controller) updatePackage(ctx context.Context, logE *logrus.Entry, checksums *checksum.Checksums, pkg *config.Package) error {
if err := ctrl.getChecksums(ctx, logE, checksums, pkg); err != nil {
func (ctrl *Controller) updatePackage(ctx context.Context, logE *logrus.Entry, checksums *checksum.Checksums, pkg *config.Package, supportedEnvs []string) error {
if err := ctrl.getChecksums(ctx, logE, checksums, pkg, supportedEnvs); err != nil {
return err
}
return nil
}

func (ctrl *Controller) getChecksums(ctx context.Context, logE *logrus.Entry, checksums *checksum.Checksums, pkg *config.Package) error {
func (ctrl *Controller) getChecksums(ctx context.Context, logE *logrus.Entry, checksums *checksum.Checksums, pkg *config.Package, supportedEnvs []string) error {
logE.Info("updating a package checksum")
rts, err := runtime.GetRuntimesFromEnvs(pkg.PackageInfo.SupportedEnvs)
rts, err := checksum.GetRuntimesFromSupportedEnvs(supportedEnvs, pkg.PackageInfo.SupportedEnvs)
if err != nil {
return fmt.Errorf("get supported platforms: %w", err)
}

pkgs, assetNames, err := ctrl.getPkgs(pkg, rts)
if err != nil {
return err
}
checksumFiles := map[string]struct{}{}
for _, rt := range rts {
rt := rt
env := rt.Env()
logE := logE.WithFields(logrus.Fields{
"checksum_env": rt.GOOS + "/" + rt.GOARCH,
"checksum_env": env,
})
env := rt.GOOS + "/" + rt.GOARCH
pkg, ok := pkgs[env]
if !ok {
return errors.New("package isn't found")
Expand All @@ -168,7 +175,7 @@ func (ctrl *Controller) getPkgs(pkg *config.Package, rts []*runtime.Runtime) (ma
pkgs := make(map[string]*config.Package, len(rts))
assets := make(map[string]struct{}, len(rts))
for _, rt := range rts {
env := rt.GOOS + "/" + rt.GOARCH
env := rt.Env()
pkgInfo := pkg.PackageInfo
pkgInfo = pkgInfo.Copy()
pkgInfo.OverrideByRuntime(rt)
Expand Down
2 changes: 1 addition & 1 deletion pkg/log/log.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ func New(rt *runtime.Runtime, version string) *logrus.Entry {
return logrus.WithFields(logrus.Fields{
"aqua_version": version,
"program": "aqua",
"env": rt.GOOS + "/" + rt.GOARCH,
"env": rt.Env(),
})
}

Expand Down
3 changes: 1 addition & 2 deletions pkg/runtime/parse.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package runtime

import (
"errors"
"fmt"
"strings"
)

Expand Down Expand Up @@ -96,7 +95,7 @@ func GetRuntimesFromEnvs(envs []string) ([]*Runtime, error) {
return rts, nil
}
for _, rt := range rts {
id := fmt.Sprintf("%s/%s", rt.GOOS, rt.GOARCH)
id := rt.Env()
if _, ok := ids[id]; ok {
continue
}
Expand Down
5 changes: 5 additions & 0 deletions pkg/runtime/runtime.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package runtime

import (
"fmt"
"os"
"runtime"
)
Expand All @@ -24,6 +25,10 @@ func NewR() *Runtime {
}
}

func (rt *Runtime) Env() string {
return fmt.Sprintf("%s/%s", rt.GOOS, rt.GOARCH)
}

func goos() string {
if s := os.Getenv("AQUA_GOOS"); s != "" {
return s
Expand Down

0 comments on commit f09935e

Please sign in to comment.