@@ -26,14 +26,37 @@ type addonComponentOptions struct {
2626 latestK8sVersion * semver.Version
2727}
2828
29- func (c * addonComponent ) resolveImageRepoAndTag (ctx context.Context , image string ) (string , string , error ) {
29+ func (c * addonComponent ) buildImage (ctx context.Context , image string , archs string ) (string , error ) {
30+ if c .useUpstreamImage || c .getCustomImageName != nil {
31+ return "" , nil
32+ }
33+ builtImage , err := c .buildApkoImage (ctx , image , archs )
34+ if err != nil {
35+ return "" , fmt .Errorf ("build apko image: %w" , err )
36+ }
37+ return builtImage , nil
38+ }
39+
40+ func (c * addonComponent ) resolveImageRepoAndTag (ctx context.Context , image string , arch string ) (repo string , tag string , err error ) {
3041 if c .useUpstreamImage {
31- return c .resolveUpstreamImageRepoAndTag (ctx , image )
42+ repo , tag , err = c .resolveUpstreamImageRepoAndTag (ctx , image , arch )
43+ if err != nil {
44+ err = fmt .Errorf ("resolve upstream image repo and tag: %w" , err )
45+ }
46+ return
3247 }
3348 if c .getCustomImageName != nil {
34- return c .resolveCustomImageRepoAndTag (ctx , c .getUpstreamVersion (image ))
49+ repo , tag , err = c .resolveCustomImageRepoAndTag (ctx , image , arch )
50+ if err != nil {
51+ err = fmt .Errorf ("resolve custom image repo and tag: %w" , err )
52+ }
53+ return
3554 }
36- return c .resolveApkoImageRepoAndTag (ctx , c .getUpstreamVersion (image ))
55+ repo , tag , err = c .resolveApkoImageRepoAndTag (ctx , image , arch )
56+ if err != nil {
57+ err = fmt .Errorf ("resolve apko image repo and tag: %w" , err )
58+ }
59+ return
3760}
3861
3962func (c * addonComponent ) getUpstreamVersion (image string ) string {
@@ -46,17 +69,19 @@ func (c *addonComponent) getUpstreamVersion(image string) string {
4669 return TagFromImage (image )
4770}
4871
49- func (c * addonComponent ) resolveUpstreamImageRepoAndTag (ctx context.Context , image string ) (string , string , error ) {
50- digest , err := GetImageDigest (ctx , image )
72+ func (c * addonComponent ) resolveUpstreamImageRepoAndTag (ctx context.Context , image string , arch string ) (string , string , error ) {
73+ digest , err := GetImageDigest (ctx , image , arch )
5174 if err != nil {
5275 return "" , "" , fmt .Errorf ("failed to get image %s digest: %w" , image , err )
5376 }
54- tag := fmt .Sprintf ("%s@%s" , TagFromImage (image ), digest )
77+ tag := fmt .Sprintf ("%s-%s @%s" , TagFromImage (image ), arch , digest )
5578 repo := fmt .Sprintf ("proxy.replicated.com/anonymous/%s" , FamiliarImageName (RemoveTagFromImage (image )))
5679 return repo , tag , nil
5780}
5881
59- func (c * addonComponent ) resolveCustomImageRepoAndTag (ctx context.Context , upstreamVersion string ) (string , string , error ) {
82+ func (c * addonComponent ) resolveCustomImageRepoAndTag (ctx context.Context , image string , arch string ) (string , string , error ) {
83+ upstreamVersion := c .getUpstreamVersion (image )
84+
6085 k0sVersion , err := getK0sVersion ()
6186 if err != nil {
6287 return "" , "" , fmt .Errorf ("get k0s version: %w" , err )
@@ -74,38 +99,53 @@ func (c *addonComponent) resolveCustomImageRepoAndTag(ctx context.Context, upstr
7499 if err != nil {
75100 return "" , "" , fmt .Errorf ("failed to get image name for %s: %w" , c .name , err )
76101 }
77- digest , err := GetImageDigest (ctx , customImage )
102+ digest , err := GetImageDigest (ctx , customImage , arch )
78103 if err != nil {
79104 return "" , "" , fmt .Errorf ("failed to get image %s digest: %w" , customImage , err )
80105 }
81- tag := fmt .Sprintf ("%s@%s" , TagFromImage (customImage ), digest )
106+ tag := fmt .Sprintf ("%s-%s @%s" , TagFromImage (customImage ), arch , digest )
82107 repo := fmt .Sprintf ("proxy.replicated.com/anonymous/%s" , FamiliarImageName (RemoveTagFromImage (customImage )))
83108 return repo , tag , nil
84109}
85110
86- func (c * addonComponent ) resolveApkoImageRepoAndTag (ctx context.Context , upstreamVersion string ) (string , string , error ) {
111+ func (c * addonComponent ) resolveApkoImageRepoAndTag (ctx context.Context , image string , arch string ) (string , string , error ) {
112+ builtImage , err := GetImageNameFromBuildFile ("build/image" )
113+ if err != nil {
114+ return "" , "" , fmt .Errorf ("failed to get digest from build file: %w" , err )
115+ }
116+
117+ digest , err := GetImageDigest (ctx , builtImage , arch )
118+ if err != nil {
119+ return "" , "" , fmt .Errorf ("failed to get image %s digest: %w" , builtImage , err )
120+ }
121+ tag := fmt .Sprintf ("%s-%s@%s" , TagFromImage (builtImage ), arch , digest )
122+ repo := fmt .Sprintf ("proxy.replicated.com/anonymous/%s" , FamiliarImageName (RemoveTagFromImage (builtImage )))
123+ return repo , tag , nil
124+ }
125+
126+ func (c * addonComponent ) buildApkoImage (ctx context.Context , image string , archs string ) (string , error ) {
127+ upstreamVersion := c .getUpstreamVersion (image )
128+
87129 packageName , packageVersion , err := c .getPackageNameAndVersion (ctx , upstreamVersion )
88130 if err != nil {
89- return "" , "" , fmt .Errorf ("failed to get package name and version constraint for %s: %w" , c .name , err )
131+ return "" , fmt .Errorf ("get package name and version constraint for %s: %w" , c .name , err )
90132 }
91133
92134 logrus .Infof ("building and publishing %s" , c .name )
93135
94- if err := ApkoBuildAndPublish ( c . name , packageName , packageVersion ); err != nil {
95- return "" , "" , fmt .Errorf ("failed to apko build and publish for %s : %w" , c . name , err )
136+ if err := ApkoLogin ( ); err != nil {
137+ return "" , fmt .Errorf ("apko login : %w" , err )
96138 }
97139
98- builtImage , err := GetImageNameFromBuildFile ("build/image" )
99- if err != nil {
100- return "" , "" , fmt .Errorf ("failed to get digest from build file: %w" , err )
140+ if err := ApkoBuildAndPublish (c .name , packageName , packageVersion , archs ); err != nil {
141+ return "" , fmt .Errorf ("apko build and publish for %s: %w" , c .name , err )
101142 }
102143
103- parts := strings . SplitN ( builtImage , ":" , 2 )
104- if len ( parts ) != 2 {
105- return "" , "" , fmt .Errorf ("invalid image name: %s " , builtImage )
144+ builtImage , err := GetImageNameFromBuildFile ( "build/image" )
145+ if err != nil {
146+ return "" , fmt .Errorf ("get image name from build file : %w " , err )
106147 }
107-
108- return fmt .Sprintf ("proxy.replicated.com/anonymous/%s" , FamiliarImageName (parts [0 ])), parts [1 ], nil
148+ return builtImage , nil
109149}
110150
111151func (c * addonComponent ) getPackageNameAndVersion (ctx context.Context , upstreamVersion string ) (string , string , error ) {
0 commit comments