@@ -25,21 +25,31 @@ local.xpkg.init: $(KUBECTL)
2525 fi
2626 @$(OK ) patching Crossplane with dev sidecar
2727
28+ LOCAL_XPKG_DIGEST ?= sha256:0000000000000000000000000000000000000000000000000000000000000000
29+
2830local.xpkg.sync : local.xpkg.init $(CROSSPLANE_CLI )
2931 @$(INFO ) copying local xpkg cache to Crossplane pod
3032 @mkdir -p $(XPKG_OUTPUT_DIR ) /cache/xpkg.crossplane.internal/dev
31- @# given "project-name-v0.17.0-3.gb4eee9f.dirty.xpkg" regex returns "project-name:v0.17.0-3.gb4eee9f.dirty.gz"
33+ @# Extract each .xpkg and place it under two cache keys so that both
34+ @# Crossplane <=2.1 and >=2.2 find the package with pullPolicy: Never.
35+ @# - <source>@<digest>.gz — Crossplane <=2.1 uses GetSource() as cache key
36+ @# - <friendlyid>.gz — Crossplane >=2.2 uses FriendlyID() as cache key
37+ @# FriendlyID is ToDNSLabel(truncate(source,50) + "-" + truncate(digest,12)),
38+ @# where ToDNSLabel maps non-alphanumeric chars to "-" and caps at 63 chars.
39+ @# See https://github.com/crossplane/crossplane/blob/v2.2.0-rc.1/internal/xpkg/name.go
3240 @for pkg in $(XPKG_OUTPUT_DIR ) /linux_* /* ; do \
33- extractedname=$$(basename $$pkg | sed 's/-v\(\([0-9]* \) [.]\( [0-9]* \) [.]\( [0-9]* \) .* \)\. xpkg/:v\1 .gz/' ); \
34- $(CROSSPLANE_CLI ) xpkg extract --from-xpkg $$ pkg -o $(XPKG_OUTPUT_DIR ) /cache/xpkg.crossplane.internal/dev/$$ extractedname; \
41+ pkgname=$$(basename $$pkg | sed 's/-v\([0-9]* \.[0-9]* \.[0-9]* .* \) \. xpkg//' ); \
42+ $(CROSSPLANE_CLI ) xpkg extract --from-xpkg $$ pkg -o " $( XPKG_OUTPUT_DIR) /cache/xpkg.crossplane.internal/dev/$$ pkgname@$( LOCAL_XPKG_DIGEST) .gz" ; \
43+ friendlyid=$$(printf '%.50s-%.12s' "xpkg.crossplane.internal/dev/$$pkgname" "$(LOCAL_XPKG_DIGEST ) " | sed 's/[^a-z0-9]/-/g' | cut -c1-63 | sed 's/-*$$//' ) ; \
44+ cp " $( XPKG_OUTPUT_DIR) /cache/xpkg.crossplane.internal/dev/$$ pkgname@$( LOCAL_XPKG_DIGEST) .gz" $(XPKG_OUTPUT_DIR ) /cache/$$ friendlyid.gz; \
3545 done
3646 @XPPOD=$$($(KUBECTL ) -n $(CROSSPLANE_NAMESPACE ) get pod -l app=crossplane,patched=true -o jsonpath="{.items[0].metadata.name}") ; \
3747 $(KUBECTL ) -n $(CROSSPLANE_NAMESPACE ) cp $(XPKG_OUTPUT_DIR ) /cache -c dev $$ XPPOD:/tmp
3848 @$(OK ) copying local xpkg cache to Crossplane pod
3949
4050local.xpkg.deploy.configuration.% : local.xpkg.sync
4151 @$(INFO ) deploying configuration package $* $(VERSION )
42- @echo ' {"apiVersion":"pkg.crossplane.io/v1","kind":"Configuration","metadata":{"name":"$*"},"spec":{"package":"xpkg.crossplane.internal/dev/$*:$(VERSION).gz ","packagePullPolicy":"Never"}}' | $(KUBECTL ) apply -f -
52+ @echo ' {"apiVersion":"pkg.crossplane.io/v1","kind":"Configuration","metadata":{"name":"$*"},"spec":{"package":"xpkg.crossplane.internal/dev/$*@$(LOCAL_XPKG_DIGEST) ","packagePullPolicy":"Never"}}' | $(KUBECTL ) apply -f -
4353 @$(OK ) deploying configuration package $* $(VERSION )
4454
4555local.xpkg.deploy.provider.% : $(KIND ) local.xpkg.sync
@@ -53,5 +63,5 @@ local.xpkg.deploy.provider.%: $(KIND) local.xpkg.sync
5363 else \
5464 echo ' {"apiVersion":"pkg.crossplane.io/v1beta1","kind":"DeploymentRuntimeConfig","metadata":{"name":"runtimeconfig-$*"},"spec":{"deploymentTemplate":{"spec":{"selector":{},"strategy":{},"template":{"spec":{"containers":[{"args":["--debug"],"image":"$(BUILD_REGISTRY)/$*-$(ARCH)","name":"package-runtime"}]}}}}}}' | $(KUBECTL ) apply -f -; \
5565 fi
56- @echo ' {"apiVersion":"pkg.crossplane.io/v1","kind":"Provider","metadata":{"name":"$*"},"spec":{"package":"xpkg.crossplane.internal/dev/$*:$(VERSION).gz ","skipDependencyResolution": $(XPKG_SKIP_DEP_RESOLUTION), "packagePullPolicy":"Never","runtimeConfigRef":{"name":"runtimeconfig-$*"}}}' | $(KUBECTL ) apply -f -
66+ @echo ' {"apiVersion":"pkg.crossplane.io/v1","kind":"Provider","metadata":{"name":"$*"},"spec":{"package":"xpkg.crossplane.internal/dev/$*@$(LOCAL_XPKG_DIGEST) ","skipDependencyResolution": $(XPKG_SKIP_DEP_RESOLUTION), "packagePullPolicy":"Never","runtimeConfigRef":{"name":"runtimeconfig-$*"}}}' | $(KUBECTL ) apply -f -
5767 @$(OK ) deploying provider package $* $(VERSION )
0 commit comments