Skip to content

Commit b8d64a5

Browse files
committed
merge
2 parents 885ebd0 + 7356014 commit b8d64a5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+731
-310
lines changed

.github/workflows/ci.yaml

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ jobs:
9898

9999
build-current:
100100
name: Build current
101-
runs-on: ubuntu-latest
101+
runs-on: embedded-cluster
102102
needs:
103103
- git-sha
104104
outputs:
@@ -135,6 +135,11 @@ jobs:
135135
with:
136136
setup-go: false
137137

138+
- name: Install dagger
139+
run: |
140+
curl -fsSL https://dl.dagger.io/dagger/install.sh | sh
141+
sudo mv ./bin/dagger /usr/local/bin/dagger
142+
138143
- name: Build
139144
env:
140145
APP_CHANNEL_ID: 2cHXb1RCttzpR0xvnNWyaZCgDBP
@@ -174,7 +179,7 @@ jobs:
174179
175180
build-previous-k0s:
176181
name: Build previous k0s
177-
runs-on: ubuntu-latest
182+
runs-on: embedded-cluster
178183
needs:
179184
- git-sha
180185
outputs:
@@ -211,6 +216,11 @@ jobs:
211216
with:
212217
setup-go: false
213218

219+
- name: Install dagger
220+
run: |
221+
curl -fsSL https://dl.dagger.io/dagger/install.sh | sh
222+
sudo mv ./bin/dagger /usr/local/bin/dagger
223+
214224
- name: Build
215225
env:
216226
APP_CHANNEL_ID: 2cHXb1RCttzpR0xvnNWyaZCgDBP
@@ -248,7 +258,7 @@ jobs:
248258
249259
build-upgrade:
250260
name: Build upgrade
251-
runs-on: ubuntu-latest
261+
runs-on: embedded-cluster
252262
needs:
253263
- git-sha
254264
outputs:
@@ -285,6 +295,11 @@ jobs:
285295
with:
286296
setup-go: false
287297

298+
- name: Install dagger
299+
run: |
300+
curl -fsSL https://dl.dagger.io/dagger/install.sh | sh
301+
sudo mv ./bin/dagger /usr/local/bin/dagger
302+
288303
- name: Build
289304
env:
290305
APP_CHANNEL_ID: 2cHXb1RCttzpR0xvnNWyaZCgDBP

.github/workflows/image-deps-updater.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ jobs:
8080
INPUT_VELERO_AWS_PLUGIN_VERSION: ${{ github.event.inputs.velero_aws_plugin_version }}
8181
INPUT_KUBECTL_VERSION: ${{ github.event.inputs.kubectl_version }}
8282
INPUT_SEAWEEDFS_VERSION: ${{ github.event.inputs.seaweedfs_version }}
83+
ARCHS: "amd64,arm64"
8384
run: |
8485
chmod +x ./output/bin/buildtools
8586
./output/bin/buildtools update images ${{ matrix.addon }}

.github/workflows/image-scan.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ jobs:
3939
- name: Setup melange
4040
uses: ./.github/actions/setup-melange
4141

42+
- name: Install dagger
43+
run: |
44+
curl -fsSL https://dl.dagger.io/dagger/install.sh | sh
45+
sudo mv ./bin/dagger /usr/local/bin/dagger
46+
4247
- name: Build and push local-artifact-mirror image
4348
id: local-artifact-mirror
4449
run: |

.github/workflows/release-prod.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,11 @@ jobs:
6969
- name: Setup melange
7070
uses: ./.github/actions/setup-melange
7171

72+
- name: Install dagger
73+
run: |
74+
curl -fsSL https://dl.dagger.io/dagger/install.sh | sh
75+
sudo mv ./bin/dagger /usr/local/bin/dagger
76+
7277
- name: Build and push operator image
7378
id: operator-image
7479
env:
@@ -119,6 +124,11 @@ jobs:
119124
- name: Setup melange
120125
uses: ./.github/actions/setup-melange
121126

127+
- name: Install dagger
128+
run: |
129+
curl -fsSL https://dl.dagger.io/dagger/install.sh | sh
130+
sudo mv ./bin/dagger /usr/local/bin/dagger
131+
122132
- name: Build and push local-artifact-mirror image
123133
id: local-artifact-mirror
124134
env:

.github/workflows/update-addons.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ jobs:
6969
INPUT_OPENEBS_CHART_VERSION: ${{ github.event.inputs.openebs_chart_version }}
7070
INPUT_VELERO_CHART_VERSION: ${{ github.event.inputs.velero_chart_version }}
7171
INPUT_SEAWEEDFS_CHART_VERSION: ${{ github.event.inputs.seaweedfs_chart_version }}
72+
ARCHS: "amd64,arm64"
7273
run: |
7374
chmod 755 ./output/bin/buildtools
7475
./output/bin/buildtools update addon ${{ matrix.addon }}

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@ go.work.sum
1515
.gocache
1616
.gomodcache
1717
/local-dev/
18-
18+
*.tmp

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -219,11 +219,11 @@ vet: static
219219

220220
.PHONY: e2e-tests
221221
e2e-tests: embedded-release
222-
go test -timeout 60m -parallel 1 -failfast -v ./e2e
222+
go test -timeout 60m -ldflags="$(LD_FLAGS)" -parallel 1 -failfast -v ./e2e
223223

224224
.PHONY: e2e-test
225225
e2e-test:
226-
go test -timeout 60m -v ./e2e -run $(TEST_NAME)$
226+
go test -timeout 60m -ldflags="$(LD_FLAGS)" -v ./e2e -run $(TEST_NAME)$
227227

228228
.PHONY: build-ttl.sh
229229
build-ttl.sh:

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ Additionally, it includes a Registry when deployed in air gap mode.
2121
- Helm CLI
2222
- AWS CLI
2323
- jq
24+
- Dagger
2425

2526
### Running the Development Environment
2627

cmd/buildtools/addon.go

Lines changed: 62 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -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

3962
func (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

111151
func (c *addonComponent) getPackageNameAndVersion(ctx context.Context, upstreamVersion string) (string, string, error) {

cmd/buildtools/adminconsole.go

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package main
22

33
import (
44
"fmt"
5-
"runtime"
65
"strings"
76

87
"github.com/replicatedhq/embedded-cluster/pkg/addons/adminconsole"
@@ -70,20 +69,11 @@ var updateAdminConsoleAddonCommand = &cli.Command{
7069
return fmt.Errorf("failed to get images from admin console chart: %w", err)
7170
}
7271

73-
for _, image := range images {
74-
component, ok := adminconsoleImageComponents[RemoveTagFromImage(image)]
75-
if !ok {
76-
return fmt.Errorf("no component found for image %s", image)
77-
}
78-
repo, tag, err := component.resolveImageRepoAndTag(c.Context, image)
79-
if err != nil {
80-
return fmt.Errorf("failed to resolve image and tag for %s: %w", image, err)
81-
}
82-
newimage := adminconsole.Metadata.Images[component.name]
83-
newimage.Repo = repo
84-
newimage.Tag[runtime.GOARCH] = tag
85-
newmeta.Images[component.name] = newimage
72+
metaImages, err := UpdateImages(c.Context, adminconsoleImageComponents, adminconsole.Metadata.Images, images)
73+
if err != nil {
74+
return fmt.Errorf("failed to update images: %w", err)
8675
}
76+
newmeta.Images = metaImages
8777

8878
logrus.Infof("saving addon manifest")
8979
if err := newmeta.Save("adminconsole"); err != nil {

cmd/buildtools/embeddedclusteroperator.go

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"fmt"
66
"os"
77
"os/exec"
8-
"runtime"
98
"strings"
109

1110
"github.com/replicatedhq/embedded-cluster/pkg/addons/embeddedclusteroperator"
@@ -123,24 +122,11 @@ func updateOperatorAddonImages(ctx context.Context, chartURL string, chartVersio
123122
// chart.
124123
images = append(images, "docker.io/library/busybox:latest")
125124

126-
if err := ApkoLogin(); err != nil {
127-
return fmt.Errorf("failed to apko login: %w", err)
128-
}
129-
130-
for _, image := range images {
131-
component, ok := operatorImageComponents[RemoveTagFromImage(image)]
132-
if !ok {
133-
return fmt.Errorf("no component found for image %s", image)
134-
}
135-
repo, tag, err := component.resolveImageRepoAndTag(ctx, image)
136-
if err != nil {
137-
return fmt.Errorf("failed to resolve image and tag for %s: %w", image, err)
138-
}
139-
newimage := embeddedclusteroperator.Metadata.Images[component.name]
140-
newimage.Repo = repo
141-
newimage.Tag[runtime.GOARCH] = tag
142-
newmeta.Images[component.name] = newimage
125+
metaImages, err := UpdateImages(ctx, operatorImageComponents, embeddedclusteroperator.Metadata.Images, images)
126+
if err != nil {
127+
return fmt.Errorf("failed to update images: %w", err)
143128
}
129+
newmeta.Images = metaImages
144130

145131
logrus.Infof("saving addon manifest")
146132
if err := newmeta.Save("embeddedclusteroperator"); err != nil {

cmd/buildtools/k0s.go

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package main
33
import (
44
"fmt"
55
"os"
6-
"runtime"
76

87
"github.com/Masterminds/semver/v3"
98
k0sv1beta1 "github.com/k0sproject/k0s/pkg/apis/k0s/v1beta1"
@@ -78,29 +77,16 @@ var updateK0sImagesCommand = &cli.Command{
7877
logrus.Infof("updating k0s images")
7978

8079
newmeta := release.K0sMetadata{
81-
Images: make(map[string]release.K0sImage),
80+
Images: make(map[string]release.AddonImage),
8281
}
8382

8483
k0sImages := config.ListK0sImages(k0sv1beta1.DefaultClusterConfig())
8584

86-
if err := ApkoLogin(); err != nil {
87-
return fmt.Errorf("failed to apko login: %w", err)
88-
}
89-
90-
for _, image := range k0sImages {
91-
component, ok := k0sImageComponents[RemoveTagFromImage(image)]
92-
if !ok {
93-
return fmt.Errorf("no component found for image %s", image)
94-
}
95-
repo, tag, err := component.resolveImageRepoAndTag(c.Context, image)
96-
if err != nil {
97-
return fmt.Errorf("failed to resolve image and tag for %s: %w", image, err)
98-
}
99-
newimage := config.Metadata.Images[component.name]
100-
newimage.Image = repo
101-
newimage.Version[runtime.GOARCH] = tag
102-
newmeta.Images[component.name] = newimage
85+
metaImages, err := UpdateImages(c.Context, k0sImageComponents, config.Metadata.Images, k0sImages)
86+
if err != nil {
87+
return fmt.Errorf("failed to update images: %w", err)
10388
}
89+
newmeta.Images = metaImages
10490

10591
logrus.Infof("saving k0s metadata")
10692
if err := newmeta.Save(); err != nil {

0 commit comments

Comments
 (0)