From 0402bfe34236e0941d51e0aa2e8e4513529e2cc7 Mon Sep 17 00:00:00 2001 From: Ethan Mosbaugh Date: Fri, 26 Jul 2024 22:10:34 -0700 Subject: [PATCH 1/4] chore: separate lam mod --- .github/workflows/ci.yaml | 6 +- .github/workflows/image-scan.yaml | 3 + .github/workflows/lam.yaml | 68 ++++++ Makefile | 140 +---------- chainguard.mk | 95 ++++++++ cmd/embedded-cluster/install.go | 2 +- cmd/embedded-cluster/join.go | 2 +- cmd/embedded-cluster/metadata.go | 21 +- cmd/embedded-cluster/restore.go | 7 +- cmd/embedded-cluster/shell.go | 2 +- cmd/embedded-cluster/uninstall.go | 2 +- cmd/embedded-cluster/update.go | 2 +- cmd/embedded-cluster/version.go | 13 +- deploy/images/utils/apko.tmpl.yaml | 3 - deploy/local-artifact-mirror/Dockerfile | 12 - go.mod | 6 +- go.sum | 2 - lam/.gitignore | 2 + lam/Makefile | 38 +++ .../cmd}/local-artifact-mirror/artifact.go | 0 lam/cmd/local-artifact-mirror/fs.go | 47 ++++ lam/cmd/local-artifact-mirror/fs_test.go | 87 +++++++ lam/cmd/local-artifact-mirror/k8s.go | 24 ++ .../cmd}/local-artifact-mirror/main.go | 0 .../cmd}/local-artifact-mirror/pull.go | 13 +- .../cmd}/local-artifact-mirror/serve.go | 3 +- .../deploy}/apko.tmpl.yaml | 0 .../deploy}/melange.tmpl.yaml | 6 +- lam/go.mod | 84 +++++++ lam/go.sum | 225 ++++++++++++++++++ {pkg => lam/pkg}/tgzutils/tgz.go | 0 pkg/addons/adminconsole/adminconsole.go | 5 +- pkg/addons/applier.go | 2 +- .../embeddedclusteroperator.go | 22 +- pkg/addons/options.go | 2 +- pkg/airgap/containerd.go | 2 +- pkg/airgap/materialize.go | 2 +- pkg/airgap/remap.go | 2 +- pkg/config/config.go | 2 +- pkg/goods/materializer.go | 2 +- pkg/highavailability/registry.go | 3 +- pkg/highavailability/seaweed.go | 3 +- pkg/logging/logging.go | 2 +- pkg/metrics/reporter.go | 5 +- pkg/preflights/output.go | 2 +- pkg/preflights/preflights.go | 2 +- pkg/versions/versions.go | 18 ++ {pkg => sdk}/defaults/defaults.go | 13 - {pkg => sdk}/defaults/provider.go | 0 {pkg => sdk}/defaults/provider_test.go | 0 sdk/go.mod | 17 ++ sdk/go.sum | 22 ++ 52 files changed, 815 insertions(+), 228 deletions(-) create mode 100644 .github/workflows/lam.yaml create mode 100644 chainguard.mk delete mode 100644 deploy/local-artifact-mirror/Dockerfile create mode 100644 lam/.gitignore create mode 100644 lam/Makefile rename {cmd => lam/cmd}/local-artifact-mirror/artifact.go (100%) create mode 100644 lam/cmd/local-artifact-mirror/fs.go create mode 100644 lam/cmd/local-artifact-mirror/fs_test.go create mode 100644 lam/cmd/local-artifact-mirror/k8s.go rename {cmd => lam/cmd}/local-artifact-mirror/main.go (100%) rename {cmd => lam/cmd}/local-artifact-mirror/pull.go (96%) rename {cmd => lam/cmd}/local-artifact-mirror/serve.go (97%) rename {deploy/images/local-artifact-mirror => lam/deploy}/apko.tmpl.yaml (100%) rename {deploy/packages/local-artifact-mirror => lam/deploy}/melange.tmpl.yaml (77%) create mode 100644 lam/go.mod create mode 100644 lam/go.sum rename {pkg => lam/pkg}/tgzutils/tgz.go (100%) create mode 100644 pkg/versions/versions.go rename {pkg => sdk}/defaults/defaults.go (83%) rename {pkg => sdk}/defaults/provider.go (100%) rename {pkg => sdk}/defaults/provider_test.go (100%) create mode 100644 sdk/go.mod create mode 100644 sdk/go.sum diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 878380737..fcaef48ad 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -1,7 +1,11 @@ name: CI on: - pull_request: {} + pull_request: + paths-ignore: + - 'lam/**' push: + paths-ignore: + - 'lam/**' branches: - main concurrency: diff --git a/.github/workflows/image-scan.yaml b/.github/workflows/image-scan.yaml index e02f97aa7..cc0efdd81 100644 --- a/.github/workflows/image-scan.yaml +++ b/.github/workflows/image-scan.yaml @@ -5,6 +5,9 @@ on: - cron: '0 0 * * *' workflow_dispatch: {} push: + # TODO: add this once we have all images in the metadata.yaml + # paths: + # - '**/metadata.yaml' branches: - main diff --git a/.github/workflows/lam.yaml b/.github/workflows/lam.yaml new file mode 100644 index 000000000..0db618968 --- /dev/null +++ b/.github/workflows/lam.yaml @@ -0,0 +1,68 @@ +name: Local artifact mirror + +on: + pull_request: + paths: + - 'sdk/**' + - 'lam/**' + push: + tags: + - "lam/*.*.*" + +permissions: + contents: write + +jobs: + build-image: + name: Build image + runs-on: ubuntu-latest + defaults: + run: + working-directory: lam + env: + LOCAL_ARTIFACT_MIRROR_IMAGE: replicated/embedded-cluster-local-artifact-mirror + REGISTRY: docker.io + USERNAME: ${{ secrets.DOCKERHUB_USER }} + PASSWORD: ${{ secrets.DOCKERHUB_PASSWORD }} + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Cache Melange + uses: actions/cache@v4 + with: + path: | + build/.melange-cache + key: melange-cache + + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version-file: lam/go.mod + + - name: Setup Docker + uses: docker/setup-buildx-action@v3 + + - name: Setup Melange + uses: chainguard-dev/actions/setup-melange@main + + - name: Build local-artifact-mirror binary + run: make bin/local-artifact-mirror + + - name: Build local-artifact-mirror package + run: make build-local-artifact-mirror-package + + - name: Bundle repo + if: startsWith(github.ref, 'refs/tags/') + run: | + cd build + tar -czvf repo.tar.gz packages + + - name: Release + uses: softprops/action-gh-release@v2 + if: startsWith(github.ref, 'refs/tags/') + with: + files: | + bin/local-artifact-mirror-*-* + build/melange.rsa.pub + build/repo.tar.gz diff --git a/Makefile b/Makefile index e60f8a779..afe0105a5 100644 --- a/Makefile +++ b/Makefile @@ -20,15 +20,14 @@ PREVIOUS_K0S_BINARY_SOURCE_OVERRIDE = TROUBLESHOOT_VERSION = v0.97.0 KOTS_VERSION = v$(shell awk '/^version/{print $$2}' pkg/addons/adminconsole/static/metadata.yaml | sed 's/\([0-9]\+\.[0-9]\+\.[0-9]\+\).*/\1/') KOTS_BINARY_URL_OVERRIDE = -LOCAL_ARTIFACT_MIRROR_IMAGE ?= replicated/embedded-cluster-local-artifact-mirror -LOCAL_ARTIFACT_MIRROR_IMAGE_VERSION ?= $(subst +,-,$(VERSION)) -LOCAL_ARTIFACT_MIRROR_IMAGE_LOCATION = proxy.replicated.com/anonymous/$(LOCAL_ARTIFACT_MIRROR_IMAGE):$(LOCAL_ARTIFACT_MIRROR_IMAGE_VERSION) +# TODO: move this to a manifest file +LOCAL_ARTIFACT_MIRROR_IMAGE ?= proxy.replicated.com/anonymous/replicated/embedded-cluster-local-artifact-mirror:1.8.0-k8s-1.29-40-g380cf43-dirty@sha256:56c3acdc66404a419d6661328c618dfe8497f49383f05d61cf52ae6101ad7690 LD_FLAGS = \ - -X github.com/replicatedhq/embedded-cluster/pkg/defaults.K0sVersion=$(K0S_VERSION) \ - -X github.com/replicatedhq/embedded-cluster/pkg/defaults.Version=$(VERSION) \ - -X github.com/replicatedhq/embedded-cluster/pkg/defaults.TroubleshootVersion=$(TROUBLESHOOT_VERSION) \ - -X github.com/replicatedhq/embedded-cluster/pkg/defaults.KubectlVersion=$(KUBECTL_VERSION) \ - -X github.com/replicatedhq/embedded-cluster/pkg/defaults.LocalArtifactMirrorImage=$(LOCAL_ARTIFACT_MIRROR_IMAGE_LOCATION) \ + -X github.com/replicatedhq/embedded-cluster/pkg/versions.K0sVersion=$(K0S_VERSION) \ + -X github.com/replicatedhq/embedded-cluster/pkg/versions.Version=$(VERSION) \ + -X github.com/replicatedhq/embedded-cluster/pkg/versions.TroubleshootVersion=$(TROUBLESHOOT_VERSION) \ + -X github.com/replicatedhq/embedded-cluster/pkg/versions.KubectlVersion=$(KUBECTL_VERSION) \ + -X github.com/replicatedhq/embedded-cluster/pkg/versions.LocalArtifactMirrorImage=$(LOCAL_ARTIFACT_MIRROR_IMAGE) \ -X github.com/replicatedhq/embedded-cluster/pkg/addons/adminconsole.ChartRepoOverride=$(ADMIN_CONSOLE_CHART_REPO_OVERRIDE) \ -X github.com/replicatedhq/embedded-cluster/pkg/addons/adminconsole.KurlProxyImageOverride=$(ADMIN_CONSOLE_KURL_PROXY_IMAGE_OVERRIDE) \ -X github.com/replicatedhq/embedded-cluster/pkg/addons/adminconsole.KotsVersion=$(KOTS_VERSION) \ @@ -81,10 +80,8 @@ pkg/goods/bins/kubectl-preflight: Makefile pkg/goods/bins/local-artifact-mirror: Makefile mkdir -p pkg/goods/bins - go build \ - -tags osusergo,netgo \ - -ldflags="-s -w -extldflags=-static" \ - -o pkg/goods/bins/local-artifact-mirror ./cmd/local-artifact-mirror + $(MAKE) -C lam bin/local-artifact-mirror + cp lam/bin/local-artifact-mirror-$(GOOS)-$(GOARCH) pkg/goods/bins/local-artifact-mirror pkg/goods/internal/bins/kubectl-kots: Makefile mkdir -p pkg/goods/internal/bins @@ -187,91 +184,6 @@ scan: --ignore-unfixed \ ./ -.PHONY: build-utils-image -build-utils-image: export IMAGE ?= $(EMBEDDED_OPERATOR_UTILS_IMAGE):$(EMBEDDED_OPERATOR_UTILS_IMAGE_VERSION) -build-utils-image: export PACKAGE_VERSION ?= $(EMBEDDED_OPERATOR_UTILS_IMAGE_VERSION) -build-utils-image: export APKO_CONFIG = deploy/images/utils/apko.tmpl.yaml -build-utils-image: apko-build - -.PHONY: build-and-push-utils-image -build-and-push-utils-image: export IMAGE ?= $(EMBEDDED_OPERATOR_UTILS_IMAGE):$(EMBEDDED_OPERATOR_UTILS_IMAGE_VERSION) -build-and-push-utils-image: export PACKAGE_VERSION ?= $(EMBEDDED_OPERATOR_UTILS_IMAGE_VERSION) -build-and-push-utils-image: export APKO_CONFIG = deploy/images/utils/apko.tmpl.yaml -build-and-push-utils-image: apko-login apko-build-and-publish - -.PHONY: build-local-artifact-mirror-image -build-local-artifact-mirror-image: export IMAGE ?= $(LOCAL_ARTIFACT_MIRROR_IMAGE):$(LOCAL_ARTIFACT_MIRROR_IMAGE_VERSION) -build-local-artifact-mirror-image: export PACKAGE_VERSION ?= $(LOCAL_ARTIFACT_MIRROR_IMAGE_VERSION) -build-local-artifact-mirror-image: export MELANGE_CONFIG = deploy/packages/local-artifact-mirror/melange.tmpl.yaml -build-local-artifact-mirror-image: export APKO_CONFIG = deploy/images/local-artifact-mirror/apko.tmpl.yaml -build-local-artifact-mirror-image: melange-build apko-build - -.PHONY: build-and-push-local-artifact-mirror-image -build-and-push-local-artifact-mirror-image: export IMAGE ?= $(LOCAL_ARTIFACT_MIRROR_IMAGE):$(LOCAL_ARTIFACT_MIRROR_IMAGE_VERSION) -build-and-push-local-artifact-mirror-image: export PACKAGE_VERSION ?= $(LOCAL_ARTIFACT_MIRROR_IMAGE_VERSION) -build-and-push-local-artifact-mirror-image: export MELANGE_CONFIG = deploy/packages/local-artifact-mirror/melange.tmpl.yaml -build-and-push-local-artifact-mirror-image: export APKO_CONFIG = deploy/images/local-artifact-mirror/apko.tmpl.yaml -build-and-push-local-artifact-mirror-image: melange-build apko-login apko-build-and-publish - -CHAINGUARD_TOOLS_USE_DOCKER = 0 -ifeq ($(CHAINGUARD_TOOLS_USE_DOCKER),"1") -MELANGE_CACHE_DIR ?= /go/pkg/mod -APKO_CMD = docker run -v $(shell pwd):/work -w /work -v $(shell pwd)/build/.docker:/root/.docker cgr.dev/chainguard/apko -MELANGE_CMD = docker run --privileged --rm -v $(shell pwd):/work -w /work -v "$(shell go env GOMODCACHE)":${MELANGE_CACHE_DIR} cgr.dev/chainguard/melange -else -MELANGE_CACHE_DIR ?= build/.melange-cache -APKO_CMD = apko -MELANGE_CMD = melange -endif - -$(MELANGE_CACHE_DIR): - mkdir -p $(MELANGE_CACHE_DIR) - -.PHONY: apko-build -apko-build: export ARCHS ?= amd64 -apko-build: check-env-IMAGE apko-template - cd build && ${APKO_CMD} \ - build apko.yaml ${IMAGE} apko.tar \ - --arch ${ARCHS} - -.PHONY: apko-build-and-publish -apko-build-and-publish: export ARCHS ?= amd64 -apko-build-and-publish: check-env-IMAGE apko-template - cd build && ${APKO_CMD} \ - publish apko.yaml ${IMAGE} \ - --arch ${ARCHS} | tee digest - -.PHONY: apko-login -apko-login: - rm -f build/.docker/config.json - @ { [ "${PASSWORD}" = "" ] || [ "${USERNAME}" = "" ] ; } || \ - ${APKO_CMD} \ - login -u "${USERNAME}" \ - --password "${PASSWORD}" "${REGISTRY}" - -.PHONY: melange-build -melange-build: export ARCHS ?= amd64 -melange-build: $(MELANGE_CACHE_DIR) melange-template - ${MELANGE_CMD} \ - keygen build/melange.rsa - ${MELANGE_CMD} \ - build build/melange.yaml \ - --arch ${ARCHS} \ - --signing-key build/melange.rsa \ - --cache-dir=$(MELANGE_CACHE_DIR) \ - --source-dir . \ - --out-dir build/packages/ - -.PHONY: melange-template -melange-template: check-env-MELANGE_CONFIG check-env-PACKAGE_VERSION - mkdir -p build - envsubst '$${PACKAGE_VERSION}' < ${MELANGE_CONFIG} > build/melange.yaml - -.PHONY: apko-template -apko-template: check-env-APKO_CONFIG check-env-PACKAGE_VERSION - mkdir -p build - envsubst '$${PACKAGE_NAME} $${PACKAGE_VERSION} $${UPSTREAM_VERSION}' < ${APKO_CONFIG} > build/apko.yaml - .PHONY: buildtools buildtools: mkdir -p pkg/goods/bins pkg/goods/internal/bins @@ -283,39 +195,5 @@ cache-files: export EMBEDDED_OPERATOR_BINARY_URL_OVERRIDE cache-files: ./scripts/cache-files.sh -## Location to install dependencies to -LOCALBIN ?= $(shell pwd)/bin -$(LOCALBIN): - mkdir -p $(LOCALBIN) - -## Tool Binaries -MELANGE ?= $(LOCALBIN)/melange -APKO ?= $(LOCALBIN)/apko - -# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set) -ifeq (,$(shell go env GOBIN)) -GOBIN=$(shell go env GOPATH)/bin -else -GOBIN=$(shell go env GOBIN) -endif - -melange: $(MELANGE) -$(MELANGE): $(LOCALBIN) - go install chainguard.dev/melange@latest && \ - test -s $(GOBIN)/melange && \ - ln -sf $(GOBIN)/melange $(LOCALBIN)/melange - -apko: $(APKO) -$(APKO): $(LOCALBIN) - go install chainguard.dev/apko@latest && \ - test -s $(GOBIN)/apko && \ - ln -sf $(GOBIN)/apko $(LOCALBIN)/apko - print-%: @echo -n $($*) - -check-env-%: - @ if [ "${${*}}" = "" ]; then \ - echo "Environment variable $* not set"; \ - exit 1; \ - fi diff --git a/chainguard.mk b/chainguard.mk new file mode 100644 index 000000000..ca6ce90b7 --- /dev/null +++ b/chainguard.mk @@ -0,0 +1,95 @@ +SHELL := /bin/bash + +## Location to install dependencies to +LOCALBIN ?= $(shell pwd)/bin +$(LOCALBIN): + mkdir -p $(LOCALBIN) + +## Tool Binaries +MELANGE ?= $(LOCALBIN)/melange +APKO ?= $(LOCALBIN)/apko + +# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set) +ifeq (,$(shell go env GOBIN)) +GOBIN=$(shell go env GOPATH)/bin +else +GOBIN=$(shell go env GOBIN) +endif + +melange: $(MELANGE) +$(MELANGE): $(LOCALBIN) + go install chainguard.dev/melange@latest && \ + test -s $(GOBIN)/melange && \ + ln -sf $(GOBIN)/melange $(LOCALBIN)/melange + +apko: $(APKO) +$(APKO): $(LOCALBIN) + go install chainguard.dev/apko@latest && \ + test -s $(GOBIN)/apko && \ + ln -sf $(GOBIN)/apko $(LOCALBIN)/apko + +CHAINGUARD_TOOLS_USE_DOCKER = 0 +ifeq ($(CHAINGUARD_TOOLS_USE_DOCKER),"1") +MELANGE_CACHE_DIR ?= /go/pkg/mod +APKO_CMD = docker run -v $(shell pwd):/work -w /work -v $(shell pwd)/build/.docker:/root/.docker cgr.dev/chainguard/apko +MELANGE_CMD = docker run --privileged --rm -v $(shell pwd):/work -w /work -v "$(shell go env GOMODCACHE)":${MELANGE_CACHE_DIR} cgr.dev/chainguard/melange +else +MELANGE_CACHE_DIR ?= build/.melange-cache +APKO_CMD = apko +MELANGE_CMD = melange +endif + +$(MELANGE_CACHE_DIR): + mkdir -p $(MELANGE_CACHE_DIR) + +.PHONY: apko-build +apko-build: ARCHS ?= amd64 +apko-build: check-env-IMAGE apko-template + cd build && ${APKO_CMD} \ + build apko.yaml ${IMAGE} apko.tar \ + --arch ${ARCHS} + +.PHONY: apko-build-and-publish +apko-build-and-publish: ARCHS ?= amd64 +apko-build-and-publish: check-env-IMAGE apko-template + cd build && ${APKO_CMD} \ + publish apko.yaml ${IMAGE} \ + --arch ${ARCHS} | tee digest + +.PHONY: apko-login +apko-login: + rm -f build/.docker/config.json + @ { [ "${PASSWORD}" = "" ] || [ "${USERNAME}" = "" ] ; } || \ + ${APKO_CMD} \ + login -u "${USERNAME}" \ + --password "${PASSWORD}" "${REGISTRY}" + +.PHONY: melange-build +melange-build: ARCHS ?= amd64 +melange-build: MELANGE_SOURCE_DIR ?= . +melange-build: $(MELANGE_CACHE_DIR) melange-template + ${MELANGE_CMD} \ + keygen build/melange.rsa + ${MELANGE_CMD} \ + build build/melange.yaml \ + --arch ${ARCHS} \ + --signing-key build/melange.rsa \ + --cache-dir=$(MELANGE_CACHE_DIR) \ + --source-dir $(MELANGE_SOURCE_DIR) \ + --out-dir build/packages/ + +.PHONY: melange-template +melange-template: check-env-MELANGE_CONFIG check-env-PACKAGE_VERSION + mkdir -p build + envsubst '$${PACKAGE_VERSION}' < ${MELANGE_CONFIG} > build/melange.yaml + +.PHONY: apko-template +apko-template: check-env-APKO_CONFIG check-env-PACKAGE_VERSION + mkdir -p build + envsubst '$${PACKAGE_NAME} $${PACKAGE_VERSION} $${UPSTREAM_VERSION}' < ${APKO_CONFIG} > build/apko.yaml + +check-env-%: + @ if [ "${${*}}" = "" ]; then \ + echo "Environment variable $* not set"; \ + exit 1; \ + fi diff --git a/cmd/embedded-cluster/install.go b/cmd/embedded-cluster/install.go index 92733dde9..fc6021306 100644 --- a/cmd/embedded-cluster/install.go +++ b/cmd/embedded-cluster/install.go @@ -16,7 +16,6 @@ import ( "github.com/replicatedhq/embedded-cluster/pkg/addons" "github.com/replicatedhq/embedded-cluster/pkg/airgap" "github.com/replicatedhq/embedded-cluster/pkg/config" - "github.com/replicatedhq/embedded-cluster/pkg/defaults" "github.com/replicatedhq/embedded-cluster/pkg/goods" "github.com/replicatedhq/embedded-cluster/pkg/helpers" "github.com/replicatedhq/embedded-cluster/pkg/metrics" @@ -24,6 +23,7 @@ import ( "github.com/replicatedhq/embedded-cluster/pkg/prompts" "github.com/replicatedhq/embedded-cluster/pkg/release" "github.com/replicatedhq/embedded-cluster/pkg/spinner" + "github.com/replicatedhq/embedded-cluster/sdk/defaults" "github.com/replicatedhq/troubleshoot/pkg/apis/troubleshoot/v1beta2" ) diff --git a/cmd/embedded-cluster/join.go b/cmd/embedded-cluster/join.go index dc51aab13..026e56ad4 100644 --- a/cmd/embedded-cluster/join.go +++ b/cmd/embedded-cluster/join.go @@ -23,13 +23,13 @@ import ( "github.com/replicatedhq/embedded-cluster/pkg/airgap" "github.com/replicatedhq/embedded-cluster/pkg/config" - "github.com/replicatedhq/embedded-cluster/pkg/defaults" "github.com/replicatedhq/embedded-cluster/pkg/helpers" "github.com/replicatedhq/embedded-cluster/pkg/highavailability" "github.com/replicatedhq/embedded-cluster/pkg/kubeutils" "github.com/replicatedhq/embedded-cluster/pkg/metrics" "github.com/replicatedhq/embedded-cluster/pkg/prompts" "github.com/replicatedhq/embedded-cluster/pkg/spinner" + "github.com/replicatedhq/embedded-cluster/sdk/defaults" ) // JoinCommandResponse is the response from the kots api we use to fetch the k0s join token. diff --git a/cmd/embedded-cluster/metadata.go b/cmd/embedded-cluster/metadata.go index 10cf47a6f..fe6eb6657 100644 --- a/cmd/embedded-cluster/metadata.go +++ b/cmd/embedded-cluster/metadata.go @@ -13,10 +13,11 @@ import ( "github.com/replicatedhq/embedded-cluster/pkg/addons/adminconsole" "github.com/replicatedhq/embedded-cluster/pkg/addons/embeddedclusteroperator" "github.com/replicatedhq/embedded-cluster/pkg/config" - "github.com/replicatedhq/embedded-cluster/pkg/defaults" "github.com/replicatedhq/embedded-cluster/pkg/goods" "github.com/replicatedhq/embedded-cluster/pkg/helpers" "github.com/replicatedhq/embedded-cluster/pkg/release" + "github.com/replicatedhq/embedded-cluster/pkg/versions" + "github.com/replicatedhq/embedded-cluster/sdk/defaults" ) var metadataCommand = &cli.Command{ @@ -48,18 +49,18 @@ func gatherVersionMetadata() (*types.ReleaseMetadata, error) { addons.Quiet(), ) - versions, err := applier.Versions(config.AdditionalCharts()) + versionsMap, err := applier.Versions(config.AdditionalCharts()) if err != nil { return nil, fmt.Errorf("unable to get versions: %w", err) } - versions["Kubernetes"] = defaults.K0sVersion - versions["Installer"] = defaults.Version - versions["Troubleshoot"] = defaults.TroubleshootVersion - versions["Kubectl"] = defaults.KubectlVersion + versionsMap["Kubernetes"] = versions.K0sVersion + versionsMap["Installer"] = versions.Version + versionsMap["Troubleshoot"] = versions.TroubleshootVersion + versionsMap["Kubectl"] = versions.KubectlVersion channelRelease, err := release.GetChannelRelease() if err == nil && channelRelease != nil { - versions[defaults.BinaryName()] = channelRelease.VersionLabel + versionsMap[defaults.BinaryName()] = channelRelease.VersionLabel } sha, err := goods.K0sBinarySHA256() @@ -70,11 +71,11 @@ func gatherVersionMetadata() (*types.ReleaseMetadata, error) { artifacts := map[string]string{ "kots": fmt.Sprintf("kots-binaries/%s.tar.gz", adminconsole.KotsVersion), "operator": fmt.Sprintf("operator-binaries/%s.tar.gz", embeddedclusteroperator.Metadata.Version), - "local-artifact-mirror-image": defaults.LocalArtifactMirrorImage, + "local-artifact-mirror-image": versions.LocalArtifactMirrorImage, } meta := types.ReleaseMetadata{ - Versions: versions, + Versions: versionsMap, K0sSHA: sha, Artifacts: artifacts, } @@ -126,7 +127,7 @@ func gatherVersionMetadata() (*types.ReleaseMetadata, error) { } meta.Images = append(meta.Images, images...) - meta.Images = append(meta.Images, defaults.LocalArtifactMirrorImage) + meta.Images = append(meta.Images, versions.LocalArtifactMirrorImage) meta.Images = helpers.UniqueStringSlice(meta.Images) sort.Strings(meta.Images) diff --git a/cmd/embedded-cluster/restore.go b/cmd/embedded-cluster/restore.go index 831395c57..e474f6f58 100644 --- a/cmd/embedded-cluster/restore.go +++ b/cmd/embedded-cluster/restore.go @@ -22,12 +22,13 @@ import ( "github.com/replicatedhq/embedded-cluster/pkg/airgap" "github.com/replicatedhq/embedded-cluster/pkg/config" "github.com/replicatedhq/embedded-cluster/pkg/constants" - "github.com/replicatedhq/embedded-cluster/pkg/defaults" "github.com/replicatedhq/embedded-cluster/pkg/kotscli" "github.com/replicatedhq/embedded-cluster/pkg/kubeutils" "github.com/replicatedhq/embedded-cluster/pkg/prompts" "github.com/replicatedhq/embedded-cluster/pkg/release" "github.com/replicatedhq/embedded-cluster/pkg/spinner" + "github.com/replicatedhq/embedded-cluster/pkg/versions" + "github.com/replicatedhq/embedded-cluster/sdk/defaults" "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" velerov1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" @@ -374,8 +375,8 @@ func isBackupRestorable(backup *velerov1.Backup, rel *release.ChannelRelease, is if backup.Annotations["kots.io/embedded-cluster"] != "true" { return false, "is not an embedded cluster backup" } - if v := strings.TrimPrefix(backup.Annotations["kots.io/embedded-cluster-version"], "v"); v != strings.TrimPrefix(defaults.Version, "v") { - return false, fmt.Sprintf("has a different embedded cluster version (%q) than the current version (%q)", v, defaults.Version) + if v := strings.TrimPrefix(backup.Annotations["kots.io/embedded-cluster-version"], "v"); v != strings.TrimPrefix(versions.Version, "v") { + return false, fmt.Sprintf("has a different embedded cluster version (%q) than the current version (%q)", v, versions.Version) } if backup.Status.Phase != velerov1.BackupPhaseCompleted { return false, fmt.Sprintf("has a status of %q", backup.Status.Phase) diff --git a/cmd/embedded-cluster/shell.go b/cmd/embedded-cluster/shell.go index 61356b66b..313985439 100644 --- a/cmd/embedded-cluster/shell.go +++ b/cmd/embedded-cluster/shell.go @@ -14,7 +14,7 @@ import ( "github.com/urfave/cli/v2" "golang.org/x/term" - "github.com/replicatedhq/embedded-cluster/pkg/defaults" + "github.com/replicatedhq/embedded-cluster/sdk/defaults" ) const welcome = ` diff --git a/cmd/embedded-cluster/uninstall.go b/cmd/embedded-cluster/uninstall.go index e7392ac82..4268b37bf 100644 --- a/cmd/embedded-cluster/uninstall.go +++ b/cmd/embedded-cluster/uninstall.go @@ -17,10 +17,10 @@ import ( corev1 "k8s.io/api/core/v1" "sigs.k8s.io/controller-runtime/pkg/client" - "github.com/replicatedhq/embedded-cluster/pkg/defaults" "github.com/replicatedhq/embedded-cluster/pkg/helpers" "github.com/replicatedhq/embedded-cluster/pkg/kubeutils" "github.com/replicatedhq/embedded-cluster/pkg/prompts" + "github.com/replicatedhq/embedded-cluster/sdk/defaults" ) type etcdMembers struct { diff --git a/cmd/embedded-cluster/update.go b/cmd/embedded-cluster/update.go index cfccce2a0..effaaed40 100644 --- a/cmd/embedded-cluster/update.go +++ b/cmd/embedded-cluster/update.go @@ -7,9 +7,9 @@ import ( "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" - "github.com/replicatedhq/embedded-cluster/pkg/defaults" "github.com/replicatedhq/embedded-cluster/pkg/kotscli" "github.com/replicatedhq/embedded-cluster/pkg/release" + "github.com/replicatedhq/embedded-cluster/sdk/defaults" ) var updateCommand = &cli.Command{ diff --git a/cmd/embedded-cluster/version.go b/cmd/embedded-cluster/version.go index d5e32ed4e..93627f942 100644 --- a/cmd/embedded-cluster/version.go +++ b/cmd/embedded-cluster/version.go @@ -11,8 +11,9 @@ import ( "github.com/replicatedhq/embedded-cluster/pkg/addons" "github.com/replicatedhq/embedded-cluster/pkg/config" - "github.com/replicatedhq/embedded-cluster/pkg/defaults" "github.com/replicatedhq/embedded-cluster/pkg/release" + "github.com/replicatedhq/embedded-cluster/pkg/versions" + "github.com/replicatedhq/embedded-cluster/sdk/defaults" ) var versionCommand = &cli.Command{ @@ -25,7 +26,7 @@ var versionCommand = &cli.Command{ }, Action: func(c *cli.Context) error { opts := []addons.Option{addons.Quiet(), addons.WithoutPrompt()} - versions, err := addons.NewApplier(opts...).Versions(config.AdditionalCharts()) + applierVersions, err := addons.NewApplier(opts...).Versions(config.AdditionalCharts()) if err != nil { return fmt.Errorf("unable to get versions: %w", err) } @@ -35,16 +36,16 @@ var versionCommand = &cli.Command{ if err == nil && channelRelease != nil { writer.AppendRow(table.Row{defaults.BinaryName(), channelRelease.VersionLabel}) } - writer.AppendRow(table.Row{"Installer", defaults.Version}) - writer.AppendRow(table.Row{"Kubernetes", defaults.K0sVersion}) + writer.AppendRow(table.Row{"Installer", versions.Version}) + writer.AppendRow(table.Row{"Kubernetes", versions.K0sVersion}) keys := []string{} - for k := range versions { + for k := range applierVersions { keys = append(keys, k) } sort.Strings(keys) for _, k := range keys { - version := versions[k] + version := applierVersions[k] if !strings.HasPrefix(version, "v") { version = fmt.Sprintf("v%s", version) } diff --git a/deploy/images/utils/apko.tmpl.yaml b/deploy/images/utils/apko.tmpl.yaml index 022c8e8a0..2bfb05c18 100644 --- a/deploy/images/utils/apko.tmpl.yaml +++ b/deploy/images/utils/apko.tmpl.yaml @@ -15,6 +15,3 @@ accounts: uid: 65532 gid: 65532 run-as: 65532 - -environment: - VERSION: ${PACKAGE_VERSION} diff --git a/deploy/local-artifact-mirror/Dockerfile b/deploy/local-artifact-mirror/Dockerfile deleted file mode 100644 index 1ff7ac132..000000000 --- a/deploy/local-artifact-mirror/Dockerfile +++ /dev/null @@ -1,12 +0,0 @@ -# this dockerfile builds an image containing the local-artifact-mirror binary -# installed on /usr/local/bin/local-artifact-mirror. -FROM golang:1.22 AS builder -WORKDIR /src -COPY go.mod go.sum ./ -RUN go mod download -COPY . . -RUN make pkg/goods/bins/local-artifact-mirror - -FROM cgr.dev/chainguard/wolfi-base:latest -COPY --from=builder /src/pkg/goods/bins/local-artifact-mirror /usr/local/bin/local-artifact-mirror -ENTRYPOINT ["/usr/local/bin/local-artifact-mirror"] diff --git a/go.mod b/go.mod index 02d5ddd11..2a04e2c05 100644 --- a/go.mod +++ b/go.mod @@ -2,6 +2,8 @@ module github.com/replicatedhq/embedded-cluster go 1.22.5 +replace github.com/replicatedhq/embedded-cluster/sdk => ./sdk + require ( github.com/AlecAivazis/survey/v2 v2.3.7 github.com/aws/aws-sdk-go v1.54.19 @@ -21,6 +23,7 @@ require ( github.com/replicatedhq/embedded-cluster-kinds v1.4.7 github.com/replicatedhq/embedded-cluster-operator v0.40.2 github.com/replicatedhq/embedded-cluster-utils v1.0.0 + github.com/replicatedhq/embedded-cluster/sdk v0.0.0-00010101000000-000000000000 github.com/replicatedhq/kotskinds v0.0.0-20240621115447-55148ce032e4 github.com/replicatedhq/troubleshoot v0.97.0 github.com/sirupsen/logrus v1.9.3 @@ -34,7 +37,6 @@ require ( helm.sh/helm/v3 v3.15.3 k8s.io/api v0.30.3 k8s.io/apimachinery v0.30.3 - oras.land/oras-go/v2 v2.5.0 sigs.k8s.io/controller-runtime v0.18.4 sigs.k8s.io/yaml v1.4.0 ) @@ -210,7 +212,7 @@ require ( github.com/xrash/smetrics v0.0.0-20240312152122-5f08fbb34913 // indirect github.com/zitadel/oidc/v2 v2.7.0 // indirect go.mongodb.org/mongo-driver v1.14.0 // indirect - go.uber.org/multierr v1.11.0 + go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/net v0.27.0 // indirect golang.org/x/oauth2 v0.20.0 // indirect diff --git a/go.sum b/go.sum index 976bfc27c..b19088124 100644 --- a/go.sum +++ b/go.sum @@ -783,8 +783,6 @@ k8s.io/utils v0.0.0-20231121161247-cf03d44ff3cf h1:iTzha1p7Fi83476ypNSz8nV9iR993 k8s.io/utils v0.0.0-20231121161247-cf03d44ff3cf/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= oras.land/oras-go v1.2.5 h1:XpYuAwAb0DfQsunIyMfeET92emK8km3W4yEzZvUbsTo= oras.land/oras-go v1.2.5/go.mod h1:PuAwRShRZCsZb7g8Ar3jKKQR/2A/qN+pkYxIOd/FAoo= -oras.land/oras-go/v2 v2.5.0 h1:o8Me9kLY74Vp5uw07QXPiitjsw7qNXi8Twd+19Zf02c= -oras.land/oras-go/v2 v2.5.0/go.mod h1:z4eisnLP530vwIOUOJeBIj0aGI0L1C3d53atvCBqZHg= sigs.k8s.io/controller-runtime v0.18.4 h1:87+guW1zhvuPLh1PHybKdYFLU0YJp4FhJRmiHvm5BZw= sigs.k8s.io/controller-runtime v0.18.4/go.mod h1:TVoGrfdpbA9VRFaRnKgk9P5/atA0pMwq+f+msb9M8Sg= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= diff --git a/lam/.gitignore b/lam/.gitignore new file mode 100644 index 000000000..d5697ecf6 --- /dev/null +++ b/lam/.gitignore @@ -0,0 +1,2 @@ +build/ +bin/ diff --git a/lam/Makefile b/lam/Makefile new file mode 100644 index 000000000..3d5bbe001 --- /dev/null +++ b/lam/Makefile @@ -0,0 +1,38 @@ +SHELL := /bin/bash + +-include ../chainguard.mk + +GOOS ?= $(shell go env GOOS) +GOARCH ?= $(shell go env GOARCH) + +export PACKAGE_VERSION ?= $(shell git describe --tags --dirty) +export IMAGE_NAME ?= replicated/embedded-cluster-local-artifact-mirror +export IMAGE_TAG ?= $(shell echo "$PACKAGE_VERSION" | sed 's/+/-/') +export IMAGE ?= $(IMAGE_NAME):$(IMAGE_TAG) + +export MELANGE_CONFIG := deploy/melange.tmpl.yaml +export MELANGE_SOURCE_DIR := ../ +export APKO_CONFIG := deploy/apko.tmpl.yaml + +.PHONY: bin/local-artifact-mirror +bin/local-artifact-mirror: + mkdir -p bin + go build \ + -tags osusergo,netgo \ + -ldflags="-s -w -extldflags=-static" \ + -o bin/local-artifact-mirror-$(GOOS)-$(GOARCH) ./cmd/local-artifact-mirror + +.PHONY: build-local-artifact-mirror-package +build-local-artifact-mirror-package: export MELANGE_CONFIG = deploy/melange.tmpl.yaml +build-local-artifact-mirror-package: + $(MAKE) melange-build + +.PHONY: build-local-artifact-mirror-image +build-local-artifact-mirror-image: build-local-artifact-mirror-package apko-build + +.PHONY: build-and-push-local-artifact-mirror-image +build-and-push-local-artifact-mirror-image: build-local-artifact-mirror-package apko-build-and-publish + +.PHONY: clean +clean: + rm -rf bin build diff --git a/cmd/local-artifact-mirror/artifact.go b/lam/cmd/local-artifact-mirror/artifact.go similarity index 100% rename from cmd/local-artifact-mirror/artifact.go rename to lam/cmd/local-artifact-mirror/artifact.go diff --git a/lam/cmd/local-artifact-mirror/fs.go b/lam/cmd/local-artifact-mirror/fs.go new file mode 100644 index 000000000..99b494bf0 --- /dev/null +++ b/lam/cmd/local-artifact-mirror/fs.go @@ -0,0 +1,47 @@ +package main + +import ( + "fmt" + "io" + "os" +) + +// moveFile moves a file from one location to another, overwriting the destination if it +// exists. File mode is preserved. +func moveFile(src, dst string) error { + srcinfo, err := os.Stat(src) + if err != nil { + return fmt.Errorf("unable to stat %s: %s", src, err) + } + + if srcinfo.IsDir() { + return fmt.Errorf("unable to move directory %s", src) + } + + srcfp, err := os.Open(src) + if err != nil { + return fmt.Errorf("unable to open source file: %s", err) + } + defer srcfp.Close() + + opts := os.O_CREATE | os.O_WRONLY | os.O_TRUNC + dstfp, err := os.OpenFile(dst, opts, srcinfo.Mode()) + if err != nil { + return fmt.Errorf("unable to open destination file: %s", err) + } + defer dstfp.Close() + + if _, err := io.Copy(dstfp, srcfp); err != nil { + return fmt.Errorf("unable to copy file: %s", err) + } + + if err := dstfp.Sync(); err != nil { + return fmt.Errorf("unable to sync file: %s", err) + } + + if err := os.Remove(src); err != nil { + return fmt.Errorf("unable to remove source file: %s", err) + } + + return nil +} diff --git a/lam/cmd/local-artifact-mirror/fs_test.go b/lam/cmd/local-artifact-mirror/fs_test.go new file mode 100644 index 000000000..fde086264 --- /dev/null +++ b/lam/cmd/local-artifact-mirror/fs_test.go @@ -0,0 +1,87 @@ +package main + +import ( + "fmt" + "os" + "testing" + + "github.com/stretchr/testify/assert" +) + +func Test_moveFile(t *testing.T) { + srcContent := []byte("test") + srcFile, err := os.CreateTemp("", "source-*") + assert.NoError(t, err) + defer os.Remove(srcFile.Name()) + defer srcFile.Close() + + _, err = srcFile.Write(srcContent) + assert.NoError(t, err) + + dstFile, err := os.CreateTemp("", "destination-*") + assert.NoError(t, err) + defer os.Remove(dstFile.Name()) + defer dstFile.Close() + + err = moveFile(srcFile.Name(), dstFile.Name()) + assert.NoError(t, err) + + _, err = os.Stat(dstFile.Name()) + assert.NoError(t, err) + + content, err := os.ReadFile(dstFile.Name()) + assert.NoError(t, err) + assert.Equal(t, srcContent, content) +} + +func Test_moveFile_PreserveMode(t *testing.T) { + srcContent := []byte("test") + srcFile, err := os.CreateTemp("", "source-*") + assert.NoError(t, err) + defer os.Remove(srcFile.Name()) + defer srcFile.Close() + + _, err = srcFile.Write(srcContent) + assert.NoError(t, err) + + err = os.Chmod(srcFile.Name(), 0755) + assert.NoError(t, err) + + defer os.Remove("/tmp/testbin") + err = moveFile(srcFile.Name(), "/tmp/testbin") + assert.NoError(t, err) + + info, err := os.Stat("/tmp/testbin") + assert.NoError(t, err) + assert.Equal(t, os.FileMode(0755), info.Mode()) +} + +func Test_moveFile_Directory(t *testing.T) { + srcDir, err := os.MkdirTemp("", "sourcedir-*") + assert.NoError(t, err) + defer os.RemoveAll(srcDir) + err = moveFile(srcDir, "destination") + assert.Error(t, err) +} + +func Test_moveFile_Symlink(t *testing.T) { + srcFile, err := os.CreateTemp("", "source-*") + assert.NoError(t, err) + _, err = srcFile.Write([]byte("test")) + assert.NoError(t, err) + defer os.Remove(srcFile.Name()) + defer srcFile.Close() + + symlinkPath := fmt.Sprintf("%s-symlink", srcFile.Name()) + err = os.Symlink(srcFile.Name(), symlinkPath) + assert.NoError(t, err) + defer os.Remove(symlinkPath) + + err = moveFile(symlinkPath, "/tmp/destination") + assert.NoError(t, err) + defer os.RemoveAll("/tmp/destination") + + target, err := os.Readlink(symlinkPath) + assert.Error(t, err) + assert.Empty(t, target) +} diff --git a/lam/cmd/local-artifact-mirror/k8s.go b/lam/cmd/local-artifact-mirror/k8s.go new file mode 100644 index 000000000..4c356ddeb --- /dev/null +++ b/lam/cmd/local-artifact-mirror/k8s.go @@ -0,0 +1,24 @@ +package main + +import ( + "fmt" + "io" + + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/client/config" + "sigs.k8s.io/controller-runtime/pkg/log" + "sigs.k8s.io/controller-runtime/pkg/log/zap" +) + +// kubeClient returns a new kubernetes client. +func kubeClient() (client.Client, error) { + k8slogger := zap.New(func(o *zap.Options) { + o.DestWriter = io.Discard + }) + log.SetLogger(k8slogger) + cfg, err := config.GetConfig() + if err != nil { + return nil, fmt.Errorf("unable to process kubernetes config: %w", err) + } + return client.New(cfg, client.Options{}) +} diff --git a/cmd/local-artifact-mirror/main.go b/lam/cmd/local-artifact-mirror/main.go similarity index 100% rename from cmd/local-artifact-mirror/main.go rename to lam/cmd/local-artifact-mirror/main.go diff --git a/cmd/local-artifact-mirror/pull.go b/lam/cmd/local-artifact-mirror/pull.go similarity index 96% rename from cmd/local-artifact-mirror/pull.go rename to lam/cmd/local-artifact-mirror/pull.go index 63dd8f203..08333ee0a 100644 --- a/cmd/local-artifact-mirror/pull.go +++ b/lam/cmd/local-artifact-mirror/pull.go @@ -9,18 +9,15 @@ import ( "os/exec" "path/filepath" + "github.com/replicatedhq/embedded-cluster-kinds/apis/v1beta1" + "github.com/replicatedhq/embedded-cluster/lam/pkg/tgzutils" + "github.com/replicatedhq/embedded-cluster/sdk/defaults" "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/apimachinery/pkg/types" "sigs.k8s.io/controller-runtime/pkg/client" - - "github.com/replicatedhq/embedded-cluster-kinds/apis/v1beta1" - "github.com/replicatedhq/embedded-cluster/pkg/defaults" - "github.com/replicatedhq/embedded-cluster/pkg/helpers" - "github.com/replicatedhq/embedded-cluster/pkg/kubeutils" - "github.com/replicatedhq/embedded-cluster/pkg/tgzutils" ) // These constant define the expected names of the files in the registry. @@ -40,7 +37,7 @@ var pullCommand = &cli.Command{ Name: "pull", Usage: "Pull artifacts for an airgap installation", Before: func(c *cli.Context) (err error) { - if kubecli, err = kubeutils.KubeClient(); err != nil { + if kubecli, err = kubeClient(); err != nil { return fmt.Errorf("unable to create kube client: %w", err) } return nil @@ -85,7 +82,7 @@ var imagesCommand = &cli.Command{ dst := filepath.Join(defaults.EmbeddedClusterImagesSubDir(), ImagesArtifactName) src := filepath.Join(location, ImagesArtifactName) logrus.Infof("%s > %s", src, dst) - if err := helpers.MoveFile(src, dst); err != nil { + if err := moveFile(src, dst); err != nil { return fmt.Errorf("unable to move images bundle: %w", err) } diff --git a/cmd/local-artifact-mirror/serve.go b/lam/cmd/local-artifact-mirror/serve.go similarity index 97% rename from cmd/local-artifact-mirror/serve.go rename to lam/cmd/local-artifact-mirror/serve.go index 2a2badd23..20a7f3a3c 100644 --- a/cmd/local-artifact-mirror/serve.go +++ b/lam/cmd/local-artifact-mirror/serve.go @@ -10,9 +10,8 @@ import ( "syscall" "time" + "github.com/replicatedhq/embedded-cluster/sdk/defaults" "github.com/urfave/cli/v2" - - "github.com/replicatedhq/embedded-cluster/pkg/defaults" ) // serveCommand starts a http server that serves files from the /var/lib/embedded-cluster diff --git a/deploy/images/local-artifact-mirror/apko.tmpl.yaml b/lam/deploy/apko.tmpl.yaml similarity index 100% rename from deploy/images/local-artifact-mirror/apko.tmpl.yaml rename to lam/deploy/apko.tmpl.yaml diff --git a/deploy/packages/local-artifact-mirror/melange.tmpl.yaml b/lam/deploy/melange.tmpl.yaml similarity index 77% rename from deploy/packages/local-artifact-mirror/melange.tmpl.yaml rename to lam/deploy/melange.tmpl.yaml index a00d9f012..4a998a49c 100644 --- a/deploy/packages/local-artifact-mirror/melange.tmpl.yaml +++ b/lam/deploy/melange.tmpl.yaml @@ -21,12 +21,12 @@ pipeline: - runs: | set -exuo pipefail - rm -f pkg/goods/bins/local-artifact-mirror + rm -rf bin mkdir -p ${{targets.contextdir}}/usr/bin mkdir -p ${{targets.contextdir}}/usr/local/bin - make pkg/goods/bins/local-artifact-mirror - cp pkg/goods/bins/local-artifact-mirror ${{targets.contextdir}}/usr/bin/local-artifact-mirror + make -C lam bin/local-artifact-mirror + cp lam/bin/local-artifact-mirror-$(go env GOOS)-$(go env GOARCH) ${{targets.contextdir}}/usr/bin/local-artifact-mirror # support for legacy path ln -s /usr/bin/local-artifact-mirror ${{targets.contextdir}}/usr/local/bin/local-artifact-mirror - uses: strip diff --git a/lam/go.mod b/lam/go.mod new file mode 100644 index 000000000..a17357337 --- /dev/null +++ b/lam/go.mod @@ -0,0 +1,84 @@ +module github.com/replicatedhq/embedded-cluster/lam + +go 1.22.5 + +replace github.com/replicatedhq/embedded-cluster/sdk => ../sdk + +require ( + github.com/replicatedhq/embedded-cluster-kinds v1.4.7 + github.com/replicatedhq/embedded-cluster/sdk v0.0.0-00010101000000-000000000000 + github.com/sirupsen/logrus v1.9.3 + github.com/stretchr/testify v1.9.0 + github.com/urfave/cli/v2 v2.27.3 + go.uber.org/multierr v1.11.0 + k8s.io/api v0.30.3 + k8s.io/apimachinery v0.30.3 + oras.land/oras-go/v2 v2.5.0 + sigs.k8s.io/controller-runtime v0.18.4 +) + +require ( + github.com/Masterminds/semver/v3 v3.2.1 // indirect + github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535 // indirect + github.com/containerd/containerd v1.7.17 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect + github.com/cyphar/filepath-securejoin v0.2.4 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/emicklei/go-restful/v3 v3.11.0 // indirect + github.com/evanphx/json-patch v5.9.0+incompatible // indirect + github.com/evanphx/json-patch/v5 v5.9.0 // indirect + github.com/go-logr/logr v1.4.2 // indirect + github.com/go-logr/zapr v1.3.0 // indirect + github.com/go-openapi/jsonpointer v0.20.0 // indirect + github.com/go-openapi/jsonreference v0.20.2 // indirect + github.com/go-openapi/swag v0.22.4 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/protobuf v1.5.4 // indirect + github.com/google/gnostic-models v0.6.8 // indirect + github.com/google/gofuzz v1.2.0 // indirect + github.com/google/uuid v1.3.1 // indirect + github.com/gosimple/slug v1.14.0 // indirect + github.com/gosimple/unidecode v1.0.1 // indirect + github.com/imdario/mergo v0.3.16 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/k0sproject/k0s v1.28.9-0.20240405060519-8dc2b806bd9d // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/mitchellh/copystructure v1.2.0 // indirect + github.com/mitchellh/reflectwalk v1.0.2 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/opencontainers/go-digest v1.0.0 // indirect + github.com/opencontainers/image-spec v1.1.0 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect + github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect + github.com/xeipuuv/gojsonschema v1.2.0 // indirect + github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect + go.uber.org/zap v1.26.0 // indirect + golang.org/x/net v0.26.0 // indirect + golang.org/x/oauth2 v0.12.0 // indirect + golang.org/x/sync v0.7.0 // indirect + golang.org/x/sys v0.21.0 // indirect + golang.org/x/term v0.21.0 // indirect + golang.org/x/text v0.16.0 // indirect + golang.org/x/time v0.3.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/protobuf v1.33.0 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + helm.sh/helm/v3 v3.15.1 // indirect + k8s.io/apiextensions-apiserver v0.30.1 // indirect + k8s.io/client-go v0.30.1 // indirect + k8s.io/klog/v2 v2.120.1 // indirect + k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect + k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect + sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect + sigs.k8s.io/yaml v1.4.0 // indirect +) diff --git a/lam/go.sum b/lam/go.sum new file mode 100644 index 000000000..a1d09be46 --- /dev/null +++ b/lam/go.sum @@ -0,0 +1,225 @@ +github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0= +github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= +github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535 h1:4daAzAu0S6Vi7/lbWECcX0j45yZReDZ56BQsrVBOEEY= +github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= +github.com/containerd/containerd v1.7.17 h1:KjNnn0+tAVQHAoaWRjmdak9WlvnFR/8rU1CHHy8Rm2A= +github.com/containerd/containerd v1.7.17/go.mod h1:vK+hhT4TIv2uejlcDlbVIc8+h/BqtKLIyNrtCZol8lI= +github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4= +github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= +github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= +github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lShz4oaXpDTX2bLe7ls= +github.com/evanphx/json-patch v5.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg= +github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= +github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonpointer v0.20.0 h1:ESKJdU9ASRfaPNOPRx12IUyA1vn3R9GiE3KYD14BXdQ= +github.com/go-openapi/jsonpointer v0.20.0/go.mod h1:6PGzBjjIIumbLYysB73Klnms1mwnU4G3YHOECG3CedA= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= +github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= +github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= +github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gosimple/slug v1.14.0 h1:RtTL/71mJNDfpUbCOmnf/XFkzKRtD6wL6Uy+3akm4Es= +github.com/gosimple/slug v1.14.0/go.mod h1:UiRaFH+GEilHstLUmcBgWcI42viBN7mAb818JrYOeFQ= +github.com/gosimple/unidecode v1.0.1 h1:hZzFTMMqSswvf0LBJZCZgThIZrpDHFXux9KeGmn6T/o= +github.com/gosimple/unidecode v1.0.1/go.mod h1:CP0Cr1Y1kogOtx0bJblKzsVWrqYaqfNOnHzpgWw4Awc= +github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= +github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/k0sproject/k0s v1.28.9-0.20240405060519-8dc2b806bd9d h1:M6/4gxb2RMBhrk2xny2qzPxHbI1dkp9+7ZUix/Xzp7c= +github.com/k0sproject/k0s v1.28.9-0.20240405060519-8dc2b806bd9d/go.mod h1:PO3VvTSDo8XZB2a3FW7S0bIk4S84u2sh0mZmP0hpI+Q= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= +github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= +github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= +github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/onsi/ginkgo/v2 v2.17.1 h1:V++EzdbhI4ZV4ev0UTIj0PzhzOcReJFyJaLjtSF55M8= +github.com/onsi/ginkgo/v2 v2.17.1/go.mod h1:llBI3WDLL9Z6taip6f33H76YcWtJv+7R3HigUjbIBOs= +github.com/onsi/gomega v1.32.0 h1:JRYU78fJ1LPxlckP6Txi/EYqJvjtMrDC04/MM5XRHPk= +github.com/onsi/gomega v1.32.0/go.mod h1:a4x4gW6Pz2yK1MAmvluYme5lvYTn61afQ2ETw/8n4Lg= +github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= +github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/replicatedhq/embedded-cluster-kinds v1.4.7 h1:CR55z8Q2ek90BwwwOEz+P3qFIgc84G7wp/FNs+ctfsw= +github.com/replicatedhq/embedded-cluster-kinds v1.4.7/go.mod h1:AwopUvvGcaWO4mn9DkbPj5RnLuOy756CNLrcaAlmjMo= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/urfave/cli/v2 v2.27.3 h1:/POWahRmdh7uztQ3CYnaDddk0Rm90PyOgIxgW2rr41M= +github.com/urfave/cli/v2 v2.27.3/go.mod h1:m4QzxcD2qpra4z7WhzEGn74WZLViBnMpb1ToCAKdGRQ= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= +github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= +github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= +github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= +go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20220827204233-334a2380cb91 h1:tnebWN09GYg9OLPss1KXj8txwZc6X6uMr6VFdcGNbHw= +golang.org/x/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= +golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4= +golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= +golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= +golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +helm.sh/helm/v3 v3.15.1 h1:22ztacHz4gMqhXNqCQ9NAg6BFWoRUryNLvnkz6OVyw0= +helm.sh/helm/v3 v3.15.1/go.mod h1:fvfoRcB8UKRUV5jrIfOTaN/pG1TPhuqSb56fjYdTKXg= +k8s.io/api v0.30.3 h1:ImHwK9DCsPA9uoU3rVh4QHAHHK5dTSv1nxJUapx8hoQ= +k8s.io/api v0.30.3/go.mod h1:GPc8jlzoe5JG3pb0KJCSLX5oAFIW3/qNJITlDj8BH04= +k8s.io/apiextensions-apiserver v0.30.1 h1:4fAJZ9985BmpJG6PkoxVRpXv9vmPUOVzl614xarePws= +k8s.io/apiextensions-apiserver v0.30.1/go.mod h1:R4GuSrlhgq43oRY9sF2IToFh7PVlF1JjfWdoG3pixk4= +k8s.io/apimachinery v0.30.3 h1:q1laaWCmrszyQuSQCfNB8cFgCuDAoPszKY4ucAjDwHc= +k8s.io/apimachinery v0.30.3/go.mod h1:iexa2somDaxdnj7bha06bhb43Zpa6eWH8N8dbqVjTUc= +k8s.io/client-go v0.30.1 h1:uC/Ir6A3R46wdkgCV3vbLyNOYyCJ8oZnjtJGKfytl/Q= +k8s.io/client-go v0.30.1/go.mod h1:wrAqLNs2trwiCH/wxxmT/x3hKVH9PuV0GGW0oDoHVqc= +k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= +k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= +k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag= +k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= +k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= +k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +oras.land/oras-go/v2 v2.5.0 h1:o8Me9kLY74Vp5uw07QXPiitjsw7qNXi8Twd+19Zf02c= +oras.land/oras-go/v2 v2.5.0/go.mod h1:z4eisnLP530vwIOUOJeBIj0aGI0L1C3d53atvCBqZHg= +sigs.k8s.io/controller-runtime v0.18.4 h1:87+guW1zhvuPLh1PHybKdYFLU0YJp4FhJRmiHvm5BZw= +sigs.k8s.io/controller-runtime v0.18.4/go.mod h1:TVoGrfdpbA9VRFaRnKgk9P5/atA0pMwq+f+msb9M8Sg= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/pkg/tgzutils/tgz.go b/lam/pkg/tgzutils/tgz.go similarity index 100% rename from pkg/tgzutils/tgz.go rename to lam/pkg/tgzutils/tgz.go diff --git a/pkg/addons/adminconsole/adminconsole.go b/pkg/addons/adminconsole/adminconsole.go index fbab43f74..ef9e1f382 100644 --- a/pkg/addons/adminconsole/adminconsole.go +++ b/pkg/addons/adminconsole/adminconsole.go @@ -21,13 +21,14 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "github.com/replicatedhq/embedded-cluster/pkg/addons/registry" - "github.com/replicatedhq/embedded-cluster/pkg/defaults" "github.com/replicatedhq/embedded-cluster/pkg/helpers" "github.com/replicatedhq/embedded-cluster/pkg/kotscli" "github.com/replicatedhq/embedded-cluster/pkg/kubeutils" "github.com/replicatedhq/embedded-cluster/pkg/metrics" "github.com/replicatedhq/embedded-cluster/pkg/release" "github.com/replicatedhq/embedded-cluster/pkg/spinner" + "github.com/replicatedhq/embedded-cluster/pkg/versions" + "github.com/replicatedhq/embedded-cluster/sdk/defaults" ) const ( @@ -64,7 +65,7 @@ func init() { panic(fmt.Sprintf("unable to unmarshal values: %v", err)) } - helmValues["embeddedClusterVersion"] = defaults.Version + helmValues["embeddedClusterVersion"] = versions.Version if AdminConsoleImageOverride != "" { helmValues["images"].(map[string]interface{})["kotsadm"] = AdminConsoleImageOverride diff --git a/pkg/addons/applier.go b/pkg/addons/applier.go index f3496038e..f9b4e8dbe 100644 --- a/pkg/addons/applier.go +++ b/pkg/addons/applier.go @@ -21,10 +21,10 @@ import ( "github.com/replicatedhq/embedded-cluster/pkg/addons/registry" "github.com/replicatedhq/embedded-cluster/pkg/addons/seaweedfs" "github.com/replicatedhq/embedded-cluster/pkg/addons/velero" - "github.com/replicatedhq/embedded-cluster/pkg/defaults" "github.com/replicatedhq/embedded-cluster/pkg/helpers" "github.com/replicatedhq/embedded-cluster/pkg/kubeutils" "github.com/replicatedhq/embedded-cluster/pkg/spinner" + "github.com/replicatedhq/embedded-cluster/sdk/defaults" ) // AddOn is the interface that all addons must implement. diff --git a/pkg/addons/embeddedclusteroperator/embeddedclusteroperator.go b/pkg/addons/embeddedclusteroperator/embeddedclusteroperator.go index 8b8ac5678..366cb7d46 100644 --- a/pkg/addons/embeddedclusteroperator/embeddedclusteroperator.go +++ b/pkg/addons/embeddedclusteroperator/embeddedclusteroperator.go @@ -13,20 +13,20 @@ import ( "github.com/gosimple/slug" embeddedclusterv1beta1 "github.com/replicatedhq/embedded-cluster-kinds/apis/v1beta1" "github.com/replicatedhq/embedded-cluster-kinds/types" - kotsv1beta1 "github.com/replicatedhq/kotskinds/apis/kots/v1beta1" - "github.com/replicatedhq/troubleshoot/pkg/apis/troubleshoot/v1beta2" - "gopkg.in/yaml.v2" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "sigs.k8s.io/controller-runtime/pkg/client" - "github.com/replicatedhq/embedded-cluster/pkg/addons/adminconsole" - "github.com/replicatedhq/embedded-cluster/pkg/defaults" "github.com/replicatedhq/embedded-cluster/pkg/helpers" "github.com/replicatedhq/embedded-cluster/pkg/kubeutils" "github.com/replicatedhq/embedded-cluster/pkg/metrics" "github.com/replicatedhq/embedded-cluster/pkg/release" "github.com/replicatedhq/embedded-cluster/pkg/spinner" + "github.com/replicatedhq/embedded-cluster/pkg/versions" + "github.com/replicatedhq/embedded-cluster/sdk/defaults" + kotsv1beta1 "github.com/replicatedhq/kotskinds/apis/kots/v1beta1" + "github.com/replicatedhq/troubleshoot/pkg/apis/troubleshoot/v1beta2" + "gopkg.in/yaml.v2" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "sigs.k8s.io/controller-runtime/pkg/client" ) const releaseName = "embedded-cluster-operator" @@ -59,8 +59,8 @@ func init() { } helmValues["kotsVersion"] = adminconsole.Metadata.Version - helmValues["embeddedClusterVersion"] = defaults.Version - helmValues["embeddedClusterK0sVersion"] = defaults.K0sVersion + helmValues["embeddedClusterVersion"] = versions.Version + helmValues["embeddedClusterK0sVersion"] = versions.K0sVersion if EmbeddedOperatorImageOverride != "" { // split ImageOverride into the image and tag @@ -176,7 +176,7 @@ func (e *EmbeddedClusterOperator) createVersionMetadataConfigmap(ctx context.Con // we trim out the prefix v from the version and then slugify it, we use // the result as a suffix for the config map name. - slugver := slug.Make(strings.TrimPrefix(defaults.Version, "v")) + slugver := slug.Make(strings.TrimPrefix(versions.Version, "v")) configmap := &corev1.ConfigMap{ ObjectMeta: metav1.ObjectMeta{ Name: fmt.Sprintf("version-metadata-%s", slugver), diff --git a/pkg/addons/options.go b/pkg/addons/options.go index 95e05e203..b1a45100d 100644 --- a/pkg/addons/options.go +++ b/pkg/addons/options.go @@ -7,7 +7,7 @@ import ( "github.com/k0sproject/k0s/pkg/apis/k0s/v1beta1" embeddedclusterv1beta1 "github.com/replicatedhq/embedded-cluster-kinds/apis/v1beta1" "github.com/replicatedhq/embedded-cluster-kinds/types" - "github.com/replicatedhq/embedded-cluster/pkg/defaults" + "github.com/replicatedhq/embedded-cluster/sdk/defaults" ) // Option sets and option on an Applier reference. diff --git a/pkg/airgap/containerd.go b/pkg/airgap/containerd.go index d168cbbcd..76decd74a 100644 --- a/pkg/airgap/containerd.go +++ b/pkg/airgap/containerd.go @@ -5,7 +5,7 @@ import ( "os" "path/filepath" - "github.com/replicatedhq/embedded-cluster/pkg/defaults" + "github.com/replicatedhq/embedded-cluster/sdk/defaults" ) const registryConfigTemplate = ` diff --git a/pkg/airgap/materialize.go b/pkg/airgap/materialize.go index ffc0fdaaa..ce97aed1c 100644 --- a/pkg/airgap/materialize.go +++ b/pkg/airgap/materialize.go @@ -8,7 +8,7 @@ import ( "os" "path/filepath" - "github.com/replicatedhq/embedded-cluster/pkg/defaults" + "github.com/replicatedhq/embedded-cluster/sdk/defaults" ) const K0sImagePath = "/var/lib/k0s/images/images-amd64.tar" diff --git a/pkg/airgap/remap.go b/pkg/airgap/remap.go index 81ba800c5..c15c3e727 100644 --- a/pkg/airgap/remap.go +++ b/pkg/airgap/remap.go @@ -5,7 +5,7 @@ import ( "path/filepath" "github.com/k0sproject/k0s/pkg/apis/k0s/v1beta1" - "github.com/replicatedhq/embedded-cluster/pkg/defaults" + "github.com/replicatedhq/embedded-cluster/sdk/defaults" ) // RemapHelm removes all helm repositories from the cluster config, and changes the upstreams of all helm charts diff --git a/pkg/config/config.go b/pkg/config/config.go index d49cc1372..842101c62 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -15,8 +15,8 @@ import ( k8syaml "sigs.k8s.io/yaml" "github.com/replicatedhq/embedded-cluster/pkg/addons" - "github.com/replicatedhq/embedded-cluster/pkg/defaults" "github.com/replicatedhq/embedded-cluster/pkg/release" + "github.com/replicatedhq/embedded-cluster/sdk/defaults" ) // ReadConfigFile reads the cluster configuration from the provided file. diff --git a/pkg/goods/materializer.go b/pkg/goods/materializer.go index ea81ed3ce..2a21f5bb4 100644 --- a/pkg/goods/materializer.go +++ b/pkg/goods/materializer.go @@ -7,7 +7,7 @@ import ( "io" "os" - "github.com/replicatedhq/embedded-cluster/pkg/defaults" + "github.com/replicatedhq/embedded-cluster/sdk/defaults" ) // Materializer is an entity capable of materialize (write to disk) embedded assets. diff --git a/pkg/highavailability/registry.go b/pkg/highavailability/registry.go index 248692e3d..0e2a970ad 100644 --- a/pkg/highavailability/registry.go +++ b/pkg/highavailability/registry.go @@ -3,8 +3,9 @@ package highavailability import ( "context" "fmt" - "github.com/replicatedhq/embedded-cluster/pkg/defaults" + "github.com/replicatedhq/embedded-cluster/pkg/kubeutils" + "github.com/replicatedhq/embedded-cluster/sdk/defaults" corev1 "k8s.io/api/core/v1" k8serrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" diff --git a/pkg/highavailability/seaweed.go b/pkg/highavailability/seaweed.go index 2979663b8..25b33da97 100644 --- a/pkg/highavailability/seaweed.go +++ b/pkg/highavailability/seaweed.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "github.com/replicatedhq/embedded-cluster/pkg/helpers" embeddedclusterv1beta1 "github.com/replicatedhq/embedded-cluster-kinds/apis/v1beta1" @@ -14,8 +15,8 @@ import ( "k8s.io/apimachinery/pkg/util/intstr" "sigs.k8s.io/controller-runtime/pkg/client" - "github.com/replicatedhq/embedded-cluster/pkg/defaults" "github.com/replicatedhq/embedded-cluster/pkg/kubeutils" + "github.com/replicatedhq/embedded-cluster/sdk/defaults" ) const ( diff --git a/pkg/logging/logging.go b/pkg/logging/logging.go index f705dc08d..f2f54b9e6 100644 --- a/pkg/logging/logging.go +++ b/pkg/logging/logging.go @@ -13,7 +13,7 @@ import ( "github.com/fatih/color" "github.com/sirupsen/logrus" - "github.com/replicatedhq/embedded-cluster/pkg/defaults" + "github.com/replicatedhq/embedded-cluster/sdk/defaults" ) // MaxLogFiles is the maximum number of log files we keep. diff --git a/pkg/metrics/reporter.go b/pkg/metrics/reporter.go index de321d09a..5335f6ca2 100644 --- a/pkg/metrics/reporter.go +++ b/pkg/metrics/reporter.go @@ -11,8 +11,9 @@ import ( "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" - "github.com/replicatedhq/embedded-cluster/pkg/defaults" "github.com/replicatedhq/embedded-cluster/pkg/helpers" + "github.com/replicatedhq/embedded-cluster/pkg/versions" + "github.com/replicatedhq/embedded-cluster/sdk/defaults" kotsv1beta1 "github.com/replicatedhq/kotskinds/apis/kots/v1beta1" ) @@ -60,7 +61,7 @@ func ClusterID() uuid.UUID { func ReportInstallationStarted(ctx context.Context, license *kotsv1beta1.License) { Send(ctx, BaseURL(license), InstallationStarted{ ClusterID: ClusterID(), - Version: defaults.Version, + Version: versions.Version, Flags: strings.Join(os.Args[1:], " "), BinaryName: defaults.BinaryName(), Type: "centralized", diff --git a/pkg/preflights/output.go b/pkg/preflights/output.go index 6c64378b0..146e6db75 100644 --- a/pkg/preflights/output.go +++ b/pkg/preflights/output.go @@ -7,7 +7,7 @@ import ( "os" "github.com/jedib0t/go-pretty/table" - "github.com/replicatedhq/embedded-cluster/pkg/defaults" + "github.com/replicatedhq/embedded-cluster/sdk/defaults" "github.com/sirupsen/logrus" ) diff --git a/pkg/preflights/preflights.go b/pkg/preflights/preflights.go index ddcd940cc..6ba4eff95 100644 --- a/pkg/preflights/preflights.go +++ b/pkg/preflights/preflights.go @@ -11,7 +11,7 @@ import ( "os" "os/exec" - "github.com/replicatedhq/embedded-cluster/pkg/defaults" + "github.com/replicatedhq/embedded-cluster/sdk/defaults" "github.com/replicatedhq/troubleshoot/pkg/apis/troubleshoot/v1beta2" "sigs.k8s.io/yaml" ) diff --git a/pkg/versions/versions.go b/pkg/versions/versions.go new file mode 100644 index 000000000..1df14e6e3 --- /dev/null +++ b/pkg/versions/versions.go @@ -0,0 +1,18 @@ +// Package versions +package versions + +var ( + // Version holds the EmbeddedCluster version. + Version = "v0.0.0" + // K0sVersion holds the version of k0s binary we are embedding. this is + // set at compile time via ldflags. + K0sVersion = "0.0.0" + // TroubleshootVersion holds the version of troubleshoot and preflight + // binaries we are embedding. this is set at compile time via ldflags. + TroubleshootVersion = "0.0.0" + // KubectlVersion holds the version of kubectl binary we are embedding. + KubectlVersion = "0.0.0" + // LocalArtifactMirrorImage holds a reference to where the lam image for + // this version of embedded-cluster is stored. Set at compile time. + LocalArtifactMirrorImage = "" +) diff --git a/pkg/defaults/defaults.go b/sdk/defaults/defaults.go similarity index 83% rename from pkg/defaults/defaults.go rename to sdk/defaults/defaults.go index 6785d6ce6..0351a59f5 100644 --- a/pkg/defaults/defaults.go +++ b/sdk/defaults/defaults.go @@ -4,21 +4,8 @@ package defaults var ( - // Version holds the EmbeddedCluster version. - Version = "v0.0.0" - // K0sVersion holds the version of k0s binary we are embedding. this is - // set at compile time via ldflags. - K0sVersion = "0.0.0" - // TroubleshootVersion holds the version of troubleshoot and preflight - // binaries we are embedding. this is set at compile time via ldflags. - TroubleshootVersion = "0.0.0" - // KubectlVersion holds the version of kubectl binary we are embedding. - KubectlVersion = "0.0.0" // provider holds a global reference to the default provider. provider *Provider - // LocalArtifactMirrorImage holds a reference to where the lam image for - // this version of embedded-cluster is stored. Set at compile time. - LocalArtifactMirrorImage = "" ) // Holds the default no proxy values. diff --git a/pkg/defaults/provider.go b/sdk/defaults/provider.go similarity index 100% rename from pkg/defaults/provider.go rename to sdk/defaults/provider.go diff --git a/pkg/defaults/provider_test.go b/sdk/defaults/provider_test.go similarity index 100% rename from pkg/defaults/provider_test.go rename to sdk/defaults/provider_test.go diff --git a/sdk/go.mod b/sdk/go.mod new file mode 100644 index 000000000..5617904e1 --- /dev/null +++ b/sdk/go.mod @@ -0,0 +1,17 @@ +module github.com/replicatedhq/embedded-cluster/sdk + +go 1.22.5 + +require ( + github.com/gosimple/slug v1.14.0 + github.com/sirupsen/logrus v1.9.3 + github.com/stretchr/testify v1.9.0 +) + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/gosimple/unidecode v1.0.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/sdk/go.sum b/sdk/go.sum new file mode 100644 index 000000000..0e5a3c5c4 --- /dev/null +++ b/sdk/go.sum @@ -0,0 +1,22 @@ +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/gosimple/slug v1.14.0 h1:RtTL/71mJNDfpUbCOmnf/XFkzKRtD6wL6Uy+3akm4Es= +github.com/gosimple/slug v1.14.0/go.mod h1:UiRaFH+GEilHstLUmcBgWcI42viBN7mAb818JrYOeFQ= +github.com/gosimple/unidecode v1.0.1 h1:hZzFTMMqSswvf0LBJZCZgThIZrpDHFXux9KeGmn6T/o= +github.com/gosimple/unidecode v1.0.1/go.mod h1:CP0Cr1Y1kogOtx0bJblKzsVWrqYaqfNOnHzpgWw4Awc= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= From 1c16cc8cd30a747d0fb6ba148785f98f33590537 Mon Sep 17 00:00:00 2001 From: Ethan Mosbaugh Date: Fri, 26 Jul 2024 22:17:48 -0700 Subject: [PATCH 2/4] f --- .github/workflows/ci.yaml | 14 -------------- .github/workflows/lam.yaml | 5 +++-- .github/workflows/release-prod.yaml | 17 ----------------- Makefile | 12 ++++++++++++ 4 files changed, 15 insertions(+), 33 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index fcaef48ad..ab83a0000 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -63,18 +63,6 @@ jobs: - name: Setup Melange uses: chainguard-dev/actions/setup-melange@main - - name: Build and push local-artifact-mirror image - run: | - export SHORT_SHA=dev-${GITHUB_SHA::7} - export LOCAL_ARTIFACT_MIRROR_IMAGE=replicated/embedded-cluster-local-artifact-mirror-staging - export REGISTRY=docker.io - export USERNAME=${{ secrets.DOCKERHUB_USER }} - export PASSWORD=${{ secrets.DOCKERHUB_PASSWORD }} - make apko - make build-and-push-local-artifact-mirror-image VERSION="${SHORT_SHA}" - make build-and-push-local-artifact-mirror-image VERSION="${SHORT_SHA}-previous-k0s" - make build-and-push-local-artifact-mirror-image VERSION="${SHORT_SHA}-upgrade" - - name: Build and push utils image run: | export SHORT_SHA=dev-${GITHUB_SHA::7} @@ -122,7 +110,6 @@ jobs: - name: Build Linux AMD64 and Output Metadata run: | export SHORT_SHA=dev-${GITHUB_SHA::7} - export LOCAL_ARTIFACT_MIRROR_IMAGE=replicated/embedded-cluster-local-artifact-mirror-staging export EMBEDDED_OPERATOR_UTILS_IMAGE=replicated/embedded-cluster-utils-staging make -B embedded-cluster-linux-amd64 K0S_VERSION=$(make print-PREVIOUS_K0S_VERSION) K0S_BINARY_SOURCE_OVERRIDE=$(make print-PREVIOUS_K0S_BINARY_SOURCE_OVERRIDE) VERSION="${SHORT_SHA}-previous-k0s" tar -C output/bin -czvf embedded-cluster-linux-amd64-previous-k0s.tgz embedded-cluster @@ -153,7 +140,6 @@ jobs: - name: Build CI binary run: | export SHORT_SHA=dev-${GITHUB_SHA::7} - export LOCAL_ARTIFACT_MIRROR_IMAGE=replicated/embedded-cluster-local-artifact-mirror-staging export EMBEDDED_OPERATOR_UTILS_IMAGE=replicated/embedded-cluster-utils-staging echo "# channel release object" > e2e/kots-release-install/release.yaml echo 'channelID: "2cHXb1RCttzpR0xvnNWyaZCgDBP"' >> e2e/kots-release-install/release.yaml diff --git a/.github/workflows/lam.yaml b/.github/workflows/lam.yaml index 0db618968..ddd686b96 100644 --- a/.github/workflows/lam.yaml +++ b/.github/workflows/lam.yaml @@ -13,8 +13,7 @@ permissions: contents: write jobs: - build-image: - name: Build image + build-and-release: runs-on: ubuntu-latest defaults: run: @@ -27,6 +26,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 + with: + fetch-depth: 0 - name: Cache Melange uses: actions/cache@v4 diff --git a/.github/workflows/release-prod.yaml b/.github/workflows/release-prod.yaml index d2d63b327..069e3e247 100644 --- a/.github/workflows/release-prod.yaml +++ b/.github/workflows/release-prod.yaml @@ -38,23 +38,6 @@ jobs: - name: Setup Melange uses: chainguard-dev/actions/setup-melange@main - - name: Build and push local-artifact-mirror image (production) - run: | - export REGISTRY=docker.io - export USERNAME=${{ secrets.DOCKERHUB_USER }} - export PASSWORD=${{ secrets.DOCKERHUB_PASSWORD }} - make apko - make build-and-push-local-artifact-mirror-image VERSION=$TAG_NAME - - - name: Build and push local-artifact-mirror image (staging) - run: | - export LOCAL_ARTIFACT_MIRROR_IMAGE=replicated/embedded-cluster-local-artifact-mirror-staging - export REGISTRY=docker.io - export USERNAME=${{ secrets.DOCKERHUB_USER }} - export PASSWORD=${{ secrets.DOCKERHUB_PASSWORD }} - make apko - make build-and-push-local-artifact-mirror-image VERSION=$TAG_NAME - - name: Build and push utils image (production) run: | export REGISTRY=docker.io diff --git a/Makefile b/Makefile index afe0105a5..e99b0954f 100644 --- a/Makefile +++ b/Makefile @@ -184,6 +184,18 @@ scan: --ignore-unfixed \ ./ +.PHONY: build-utils-image +build-utils-image: export IMAGE ?= $(EMBEDDED_OPERATOR_UTILS_IMAGE):$(EMBEDDED_OPERATOR_UTILS_IMAGE_VERSION) +build-utils-image: export PACKAGE_VERSION ?= $(EMBEDDED_OPERATOR_UTILS_IMAGE_VERSION) +build-utils-image: export APKO_CONFIG = deploy/images/utils/apko.tmpl.yaml +build-utils-image: apko-build + +.PHONY: build-and-push-utils-image +build-and-push-utils-image: export IMAGE ?= $(EMBEDDED_OPERATOR_UTILS_IMAGE):$(EMBEDDED_OPERATOR_UTILS_IMAGE_VERSION) +build-and-push-utils-image: export PACKAGE_VERSION ?= $(EMBEDDED_OPERATOR_UTILS_IMAGE_VERSION) +build-and-push-utils-image: export APKO_CONFIG = deploy/images/utils/apko.tmpl.yaml +build-and-push-utils-image: apko-login apko-build-and-publish + .PHONY: buildtools buildtools: mkdir -p pkg/goods/bins pkg/goods/internal/bins From ebb1733809e7fca78d378163c4bfe2dcff4d0486 Mon Sep 17 00:00:00 2001 From: Ethan Mosbaugh Date: Fri, 26 Jul 2024 22:24:43 -0700 Subject: [PATCH 3/4] f --- .github/workflows/lam.yaml | 10 +--------- Makefile | 4 ++++ lam/Makefile | 16 ++-------------- 3 files changed, 7 insertions(+), 23 deletions(-) diff --git a/.github/workflows/lam.yaml b/.github/workflows/lam.yaml index ddd686b96..1e729b9f2 100644 --- a/.github/workflows/lam.yaml +++ b/.github/workflows/lam.yaml @@ -18,11 +18,6 @@ jobs: defaults: run: working-directory: lam - env: - LOCAL_ARTIFACT_MIRROR_IMAGE: replicated/embedded-cluster-local-artifact-mirror - REGISTRY: docker.io - USERNAME: ${{ secrets.DOCKERHUB_USER }} - PASSWORD: ${{ secrets.DOCKERHUB_PASSWORD }} steps: - name: Checkout uses: actions/checkout@v4 @@ -41,9 +36,6 @@ jobs: with: go-version-file: lam/go.mod - - name: Setup Docker - uses: docker/setup-buildx-action@v3 - - name: Setup Melange uses: chainguard-dev/actions/setup-melange@main @@ -51,7 +43,7 @@ jobs: run: make bin/local-artifact-mirror - name: Build local-artifact-mirror package - run: make build-local-artifact-mirror-package + run: make melange-build-local-artifact-mirror - name: Bundle repo if: startsWith(github.ref, 'refs/tags/') diff --git a/Makefile b/Makefile index e99b0954f..5439e0594 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,7 @@ +SHELL := /bin/bash + +-include ../chainguard.mk + VERSION ?= $(shell git describe --tags --dirty) UNAME := $(shell uname) ARCH := $(shell uname -m) diff --git a/lam/Makefile b/lam/Makefile index 3d5bbe001..83425aeb5 100644 --- a/lam/Makefile +++ b/lam/Makefile @@ -6,13 +6,8 @@ GOOS ?= $(shell go env GOOS) GOARCH ?= $(shell go env GOARCH) export PACKAGE_VERSION ?= $(shell git describe --tags --dirty) -export IMAGE_NAME ?= replicated/embedded-cluster-local-artifact-mirror -export IMAGE_TAG ?= $(shell echo "$PACKAGE_VERSION" | sed 's/+/-/') -export IMAGE ?= $(IMAGE_NAME):$(IMAGE_TAG) - export MELANGE_CONFIG := deploy/melange.tmpl.yaml export MELANGE_SOURCE_DIR := ../ -export APKO_CONFIG := deploy/apko.tmpl.yaml .PHONY: bin/local-artifact-mirror bin/local-artifact-mirror: @@ -22,17 +17,10 @@ bin/local-artifact-mirror: -ldflags="-s -w -extldflags=-static" \ -o bin/local-artifact-mirror-$(GOOS)-$(GOARCH) ./cmd/local-artifact-mirror -.PHONY: build-local-artifact-mirror-package -build-local-artifact-mirror-package: export MELANGE_CONFIG = deploy/melange.tmpl.yaml -build-local-artifact-mirror-package: +.PHONY: melange-build-local-artifact-mirror +melange-build-local-artifact-mirror: $(MAKE) melange-build -.PHONY: build-local-artifact-mirror-image -build-local-artifact-mirror-image: build-local-artifact-mirror-package apko-build - -.PHONY: build-and-push-local-artifact-mirror-image -build-and-push-local-artifact-mirror-image: build-local-artifact-mirror-package apko-build-and-publish - .PHONY: clean clean: rm -rf bin build From 38a5ecab0f930880152e5a65dad00c57b4c6a576 Mon Sep 17 00:00:00 2001 From: Ethan Mosbaugh Date: Fri, 26 Jul 2024 22:26:19 -0700 Subject: [PATCH 4/4] f --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 5439e0594..ee9513e60 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ SHELL := /bin/bash --include ../chainguard.mk +include chainguard.mk VERSION ?= $(shell git describe --tags --dirty) UNAME := $(shell uname)