From 6a8e57b659184ad7f9880eba8a1e7d7037afb9d6 Mon Sep 17 00:00:00 2001 From: Zahari Dichev Date: Tue, 20 Jan 2026 12:16:40 +0000 Subject: [PATCH 1/4] refactor(justfile): pull latest edge in development image Signed-off-by: Zahari Dichev --- justfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/justfile b/justfile index 3e049b60d9..ddea33415f 100644 --- a/justfile +++ b/justfile @@ -189,8 +189,8 @@ docker *args='--output=type=docker': && _clean-cache --build-arg PROFILE='{{ profile }}' \ --build-arg LINKERD2_PROXY_VENDOR='{{ LINKERD2_PROXY_VENDOR }}' \ --build-arg LINKERD2_PROXY_VERSION='{{ LINKERD2_PROXY_VERSION }}' \ + --build-arg LINKERD2_IMAGE='ghcr.io/linkerd/proxy:{{ if linkerd-tag == "" { _latest-edge-tag } else { linkerd-tag } }}' \ --no-cache-filter=runtime \ - {{ if linkerd-tag == '' { '' } else { '--build-arg=RUNTIME_IMAGE=ghcr.io/linkerd/proxy:' + linkerd-tag } }} \ {{ if features != "" { "--build-arg PROXY_FEATURES=" + features } else { "" } }} \ {{ if DOCKER_BUILDX_CACHE_DIR == '' { '' } else { '--cache-from=type=local,src=' + DOCKER_BUILDX_CACHE_DIR + ' --cache-to=type=local,dest=' + DOCKER_BUILDX_CACHE_DIR } }} \ {{ args }} @@ -242,6 +242,7 @@ action-dev-check: ## linkerd-tag := env_var_or_default('LINKERD_TAG', '') +_latest-edge-tag := `curl -sL https://api.github.com/repos/linkerd/linkerd2/releases 2>/dev/null | jq -r '[.[] | select(.tag_name | startswith("edge-")) | .tag_name] | first' || echo "edge-25.11.3"` _controller-image := 'ghcr.io/linkerd/controller' _policy-image := 'ghcr.io/linkerd/controller' _init-image := 'ghcr.io/linkerd/proxy' From 5906845c93a63ee3a1ad032e2125f3f72903067a Mon Sep 17 00:00:00 2001 From: Zahari Dichev Date: Tue, 20 Jan 2026 12:22:50 +0000 Subject: [PATCH 2/4] do not fall back to hardcoded value Signed-off-by: Zahari Dichev --- justfile | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/justfile b/justfile index ddea33415f..635d02653a 100644 --- a/justfile +++ b/justfile @@ -242,7 +242,17 @@ action-dev-check: ## linkerd-tag := env_var_or_default('LINKERD_TAG', '') -_latest-edge-tag := `curl -sL https://api.github.com/repos/linkerd/linkerd2/releases 2>/dev/null | jq -r '[.[] | select(.tag_name | startswith("edge-")) | .tag_name] | first' || echo "edge-25.11.3"` +_latest-edge-tag := if linkerd-tag != '' { linkerd-tag } else { ``` + tag=$(curl -sL https://api.github.com/repos/linkerd/linkerd2/releases 2>/dev/null \ + | jq -r '[.[] | select(.tag_name | startswith("edge-")) | .tag_name] | first') + if [ -z "$tag" ] || [ "$tag" = "null" ]; then + echo "ERROR: Failed to fetch latest edge tag from GitHub API." >&2 + echo " Set LINKERD_TAG environment variable to specify a tag manually." >&2 + exit 1 + fi + echo "$tag" +``` } + _controller-image := 'ghcr.io/linkerd/controller' _policy-image := 'ghcr.io/linkerd/controller' _init-image := 'ghcr.io/linkerd/proxy' From 04f3c77bf27a29743a8001cf8607477aa84a04ba Mon Sep 17 00:00:00 2001 From: Zahari Dichev Date: Wed, 21 Jan 2026 13:47:53 +0000 Subject: [PATCH 3/4] use _latest-edge-tag everywhere Signed-off-by: Zahari Dichev --- justfile | 37 +++++++++++++++---------------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/justfile b/justfile index 635d02653a..38cfb03416 100644 --- a/justfile +++ b/justfile @@ -189,7 +189,7 @@ docker *args='--output=type=docker': && _clean-cache --build-arg PROFILE='{{ profile }}' \ --build-arg LINKERD2_PROXY_VENDOR='{{ LINKERD2_PROXY_VENDOR }}' \ --build-arg LINKERD2_PROXY_VERSION='{{ LINKERD2_PROXY_VERSION }}' \ - --build-arg LINKERD2_IMAGE='ghcr.io/linkerd/proxy:{{ if linkerd-tag == "" { _latest-edge-tag } else { linkerd-tag } }}' \ + --build-arg LINKERD2_IMAGE='ghcr.io/linkerd/proxy:{{ _latest-edge-tag }}' \ --no-cache-filter=runtime \ {{ if features != "" { "--build-arg PROXY_FEATURES=" + features } else { "" } }} \ {{ if DOCKER_BUILDX_CACHE_DIR == '' { '' } else { '--cache-from=type=local,src=' + DOCKER_BUILDX_CACHE_DIR + ' --cache-to=type=local,dest=' + DOCKER_BUILDX_CACHE_DIR } }} \ @@ -241,8 +241,8 @@ action-dev-check: ## Linkerd ## -linkerd-tag := env_var_or_default('LINKERD_TAG', '') -_latest-edge-tag := if linkerd-tag != '' { linkerd-tag } else { ``` +_linkerd-tag := env_var_or_default('LINKERD_TAG', '') +_latest-edge-tag := if _linkerd-tag != '' { _linkerd-tag } else { ``` tag=$(curl -sL https://api.github.com/repos/linkerd/linkerd2/releases 2>/dev/null \ | jq -r '[.[] | select(.tag_name | startswith("edge-")) | .tag_name] | first') if [ -z "$tag" ] || [ "$tag" = "null" ]; then @@ -260,13 +260,6 @@ _init-image := 'ghcr.io/linkerd/proxy' _kubectl := 'just-k3d kubectl' _linkerd := 'linkerd --context=k3d-$(just-k3d --evaluate K3D_CLUSTER_NAME)' -_tag-set: - #!/usr/bin/env bash - if [ -z '{{ linkerd-tag }}' ]; then - echo "linkerd-tag must be set" >&2 - exit 1 - fi - _k3d-ready: @just-k3d ready @@ -276,19 +269,19 @@ export K3S_DISABLE := "local-storage,traefik,servicelb,metrics-server@server:*" k3d-create: && _k3d-ready @just-k3d create -k3d-load-linkerd: _tag-set _k3d-ready +k3d-load-linkerd: _k3d-ready for i in \ - '{{ _controller-image }}:{{ linkerd-tag }}' \ - '{{ _policy-image }}:{{ linkerd-tag }}' \ - '{{ _init-image }}:{{ linkerd-tag }}' \ + '{{ _controller-image }}:{{ _latest-edge-tag }}' \ + '{{ _policy-image }}:{{ _latest-edge-tag }}' \ + '{{ _init-image }}:{{ _latest-edge-tag }}' \ ; do \ docker pull -q "$i" ; \ done @just-k3d import \ '{{ docker-image }}' \ - '{{ _controller-image }}:{{ linkerd-tag }}' \ - '{{ _policy-image }}:{{ linkerd-tag }}' \ - '{{ _init-image }}:{{ linkerd-tag }}' + '{{ _controller-image }}:{{ _latest-edge-tag }}' \ + '{{ _policy-image }}:{{ _latest-edge-tag }}' \ + '{{ _init-image }}:{{ _latest-edge-tag }}' # Install crds on the test cluster. _linkerd-crds-install: _k3d-ready @@ -300,18 +293,18 @@ _linkerd-crds-install: _k3d-ready --timeout={{ wait-timeout }} # Install linkerd on the test cluster using test images. -linkerd-install *args='': _tag-set k3d-load-linkerd _linkerd-crds-install && _linkerd-ready +linkerd-install *args='': k3d-load-linkerd _linkerd-crds-install && _linkerd-ready {{ _linkerd }} install \ --set='imagePullPolicy=Never' \ --set='controllerImage={{ _controller-image }}' \ - --set='linkerdVersion={{ linkerd-tag }}' \ + --set='linkerdVersion={{ _latest-edge-tag }}' \ --set='policyController.image.name={{ _policy-image }}' \ - --set='policyController.image.version={{ linkerd-tag }}' \ + --set='policyController.image.version={{ _latest-edge-tag }}' \ --set='proxy.image.name={{ _init-image }}' \ - --set='proxy.image.version={{ linkerd-tag }}' \ + --set='proxy.image.version={{ _latest-edge-tag }}' \ --set='proxy.logLevel=linkerd=debug\,info' \ --set='proxyInit.image.name={{ _init-image }}' \ - --set='proxyInit.image.version={{ linkerd-tag }}' \ + --set='proxyInit.image.version={{ _latest-edge-tag }}' \ {{ args }} \ | {{ _kubectl }} apply -f - From f78a3d05d9958898221063276fb70773ee7d12cd Mon Sep 17 00:00:00 2001 From: Zahari Dichev Date: Fri, 23 Jan 2026 13:51:32 +0000 Subject: [PATCH 4/4] feedback Signed-off-by: Zahari Dichev --- justfile | 42 ++++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/justfile b/justfile index 38cfb03416..71be8243d4 100644 --- a/justfile +++ b/justfile @@ -189,7 +189,7 @@ docker *args='--output=type=docker': && _clean-cache --build-arg PROFILE='{{ profile }}' \ --build-arg LINKERD2_PROXY_VENDOR='{{ LINKERD2_PROXY_VENDOR }}' \ --build-arg LINKERD2_PROXY_VERSION='{{ LINKERD2_PROXY_VERSION }}' \ - --build-arg LINKERD2_IMAGE='ghcr.io/linkerd/proxy:{{ _latest-edge-tag }}' \ + --build-arg LINKERD2_IMAGE='ghcr.io/linkerd/proxy:{{ linkerd-tag }}' \ --no-cache-filter=runtime \ {{ if features != "" { "--build-arg PROXY_FEATURES=" + features } else { "" } }} \ {{ if DOCKER_BUILDX_CACHE_DIR == '' { '' } else { '--cache-from=type=local,src=' + DOCKER_BUILDX_CACHE_DIR + ' --cache-to=type=local,dest=' + DOCKER_BUILDX_CACHE_DIR } }} \ @@ -241,8 +241,10 @@ action-dev-check: ## Linkerd ## -_linkerd-tag := env_var_or_default('LINKERD_TAG', '') -_latest-edge-tag := if _linkerd-tag != '' { _linkerd-tag } else { ``` +linkerd-tag := if env_var_or_default('LINKERD_TAG', '') != '' { + env('LINKERD_TAG') + } else { + ``` tag=$(curl -sL https://api.github.com/repos/linkerd/linkerd2/releases 2>/dev/null \ | jq -r '[.[] | select(.tag_name | startswith("edge-")) | .tag_name] | first') if [ -z "$tag" ] || [ "$tag" = "null" ]; then @@ -251,7 +253,8 @@ _latest-edge-tag := if _linkerd-tag != '' { _linkerd-tag } else { ``` exit 1 fi echo "$tag" -``` } + ``` +} _controller-image := 'ghcr.io/linkerd/controller' _policy-image := 'ghcr.io/linkerd/controller' @@ -260,6 +263,13 @@ _init-image := 'ghcr.io/linkerd/proxy' _kubectl := 'just-k3d kubectl' _linkerd := 'linkerd --context=k3d-$(just-k3d --evaluate K3D_CLUSTER_NAME)' +_tag-set: + #!/usr/bin/env bash + if [ -z '{{ linkerd-tag }}' ]; then + echo "linkerd-tag must be set" >&2 + exit 1 + fi + _k3d-ready: @just-k3d ready @@ -269,19 +279,19 @@ export K3S_DISABLE := "local-storage,traefik,servicelb,metrics-server@server:*" k3d-create: && _k3d-ready @just-k3d create -k3d-load-linkerd: _k3d-ready +k3d-load-linkerd: _tag-set _k3d-ready for i in \ - '{{ _controller-image }}:{{ _latest-edge-tag }}' \ - '{{ _policy-image }}:{{ _latest-edge-tag }}' \ - '{{ _init-image }}:{{ _latest-edge-tag }}' \ + '{{ _controller-image }}:{{ linkerd-tag }}' \ + '{{ _policy-image }}:{{ linkerd-tag }}' \ + '{{ _init-image }}:{{ linkerd-tag }}' \ ; do \ docker pull -q "$i" ; \ done @just-k3d import \ '{{ docker-image }}' \ - '{{ _controller-image }}:{{ _latest-edge-tag }}' \ - '{{ _policy-image }}:{{ _latest-edge-tag }}' \ - '{{ _init-image }}:{{ _latest-edge-tag }}' + '{{ _controller-image }}:{{ linkerd-tag }}' \ + '{{ _policy-image }}:{{ linkerd-tag }}' \ + '{{ _init-image }}:{{ linkerd-tag }}' # Install crds on the test cluster. _linkerd-crds-install: _k3d-ready @@ -293,18 +303,18 @@ _linkerd-crds-install: _k3d-ready --timeout={{ wait-timeout }} # Install linkerd on the test cluster using test images. -linkerd-install *args='': k3d-load-linkerd _linkerd-crds-install && _linkerd-ready +linkerd-install *args='': _tag-set k3d-load-linkerd _linkerd-crds-install && _linkerd-ready {{ _linkerd }} install \ --set='imagePullPolicy=Never' \ --set='controllerImage={{ _controller-image }}' \ - --set='linkerdVersion={{ _latest-edge-tag }}' \ + --set='linkerdVersion={{ linkerd-tag }}' \ --set='policyController.image.name={{ _policy-image }}' \ - --set='policyController.image.version={{ _latest-edge-tag }}' \ + --set='policyController.image.version={{ linkerd-tag }}' \ --set='proxy.image.name={{ _init-image }}' \ - --set='proxy.image.version={{ _latest-edge-tag }}' \ + --set='proxy.image.version={{ linkerd-tag }}' \ --set='proxy.logLevel=linkerd=debug\,info' \ --set='proxyInit.image.name={{ _init-image }}' \ - --set='proxyInit.image.version={{ _latest-edge-tag }}' \ + --set='proxyInit.image.version={{ linkerd-tag }}' \ {{ args }} \ | {{ _kubectl }} apply -f -