diff --git a/.github/workflows/python-tests.yaml b/.github/workflows/python-tests.yaml index 3fd327296..0b6a53741 100644 --- a/.github/workflows/python-tests.yaml +++ b/.github/workflows/python-tests.yaml @@ -119,8 +119,12 @@ jobs: - name: Install Renode (Linux) if: runner.os == 'Linux' + env: + # renovate: datasource=github-releases depName=renode/renode + RENODE_VERSION: v1.16.1 run: | - wget https://github.com/renode/renode/releases/download/v1.16.1/renode_1.16.1_amd64.deb -O /tmp/renode.deb + RENODE_TAG="${RENODE_VERSION#v}" + wget "https://github.com/renode/renode/releases/download/${RENODE_VERSION}/renode_${RENODE_TAG}_amd64.deb" -O /tmp/renode.deb sudo apt-get install -y /tmp/renode.deb - name: Install Qemu (macOS) @@ -144,14 +148,19 @@ jobs: uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 with: path: python/packages/jumpstarter-driver-qemu/images - key: fedora-cloud-43-1.6 + key: fedora-cloud-${{ env.FEDORA_CLOUD_VERSION }} + env: + FEDORA_CLOUD_VERSION: "43-1.6" - name: Download Fedora Cloud images if: steps.cache-fedora-cloud-images.outputs.cache-hit != 'true' + env: + FEDORA_CLOUD_VERSION: "43-1.6" run: | + FEDORA_RELEASE="${FEDORA_CLOUD_VERSION%%-*}" for arch in aarch64 x86_64; do - curl -L --fail --output "python/packages/jumpstarter-driver-qemu/images/Fedora-Cloud-Base-Generic-43-1.6.${arch}.qcow2" \ - "https://iad.mirror.rackspace.com/fedora/releases/43/Cloud/${arch}/images/Fedora-Cloud-Base-Generic-43-1.6.${arch}.qcow2" + curl -L --fail --output "python/packages/jumpstarter-driver-qemu/images/Fedora-Cloud-Base-Generic-${FEDORA_CLOUD_VERSION}.${arch}.qcow2" \ + "https://iad.mirror.rackspace.com/fedora/releases/${FEDORA_RELEASE}/Cloud/${arch}/images/Fedora-Cloud-Base-Generic-${FEDORA_CLOUD_VERSION}.${arch}.qcow2" done - name: Run pytest diff --git a/controller/Makefile b/controller/Makefile index f057b134f..a986914fb 100644 --- a/controller/Makefile +++ b/controller/Makefile @@ -5,6 +5,7 @@ IMG ?= quay.io/jumpstarter-dev/jumpstarter-controller:latest DOCKER_REPO = $(shell echo $(IMG) | cut -d: -f1) DOCKER_TAG = $(shell echo $(IMG) | cut -d: -f2) # ENVTEST_K8S_VERSION refers to the version of kubebuilder assets to be downloaded by envtest binary. +# renovate: datasource=github-releases depName=kubernetes/kubernetes extractVersion=^v(?.+)$ ENVTEST_K8S_VERSION = 1.30.0 # Version information @@ -224,11 +225,16 @@ KIND = $(LOCALBIN)/kind GRPCURL = $(LOCALBIN)/grpcurl ## Tool Versions -KUSTOMIZE_VERSION ?= v5.4.1 -CONTROLLER_TOOLS_VERSION ?= v0.16.3 +# renovate: datasource=github-releases depName=kubernetes-sigs/kustomize extractVersion=^kustomize/(?v\d+\.\d+\.\d+)$ +KUSTOMIZE_VERSION ?= v5.6.0 +# renovate: datasource=github-releases depName=kubernetes-sigs/controller-tools +CONTROLLER_TOOLS_VERSION ?= v0.18.0 ENVTEST_VERSION ?= $(shell go list -m -f "{{ .Version }}" sigs.k8s.io/controller-runtime | awk -F'[v.]' '{printf "release-%d.%d", $$2, $$3}') +# renovate: datasource=github-releases depName=golangci/golangci-lint GOLANGCI_LINT_VERSION ?= v2.5.0 +# renovate: datasource=github-releases depName=kubernetes-sigs/kind KIND_VERSION ?= v0.27.0 +# renovate: datasource=github-releases depName=fullstorydev/grpcurl GRPCURL_VERSION ?= v1.9.2 .PHONY: kustomize @@ -241,9 +247,12 @@ controller-gen: $(CONTROLLER_GEN) ## Download controller-gen locally if necessar $(CONTROLLER_GEN): $(LOCALBIN) $(call go-install-tool,$(CONTROLLER_GEN),sigs.k8s.io/controller-tools/cmd/controller-gen,$(CONTROLLER_TOOLS_VERSION)) +# renovate: datasource=docker depName=docker.io/bufbuild/buf +BUF_VERSION ?= 1.71.0 + .PHONY: protobuf-gen protobuf-gen: - podman run --volume "$(shell pwd):/workspace" --workdir /workspace docker.io/bufbuild/buf:latest generate + podman run --volume "$(shell pwd):/workspace" --workdir /workspace docker.io/bufbuild/buf:$(BUF_VERSION) generate .PHONY: envtest envtest: $(ENVTEST) ## Download setup-envtest locally if necessary. diff --git a/controller/deploy/operator/Makefile b/controller/deploy/operator/Makefile index 9448672e1..5e572a906 100644 --- a/controller/deploy/operator/Makefile +++ b/controller/deploy/operator/Makefile @@ -60,7 +60,10 @@ endif # Set the Operator SDK version to use. By default, what is installed on the system is used. # This is useful for CI or a project to utilize a specific version of the operator-sdk toolkit. +# renovate: datasource=github-releases depName=operator-framework/operator-sdk OPERATOR_SDK_VERSION ?= v1.41.1 +# renovate: datasource=github-releases depName=operator-framework/operator-registry +OPM_VERSION ?= v1.55.0 # Image URL to use all building/pushing image targets IMG ?= $(IMAGE_TAG_BASE):$(VERSION) @@ -247,12 +250,15 @@ ENVTEST ?= $(LOCALBIN)/setup-envtest GOLANGCI_LINT = $(LOCALBIN)/golangci-lint ## Tool Versions +# renovate: datasource=github-releases depName=kubernetes-sigs/kustomize extractVersion=^kustomize/(?v\d+\.\d+\.\d+)$ KUSTOMIZE_VERSION ?= v5.6.0 +# renovate: datasource=github-releases depName=kubernetes-sigs/controller-tools CONTROLLER_TOOLS_VERSION ?= v0.18.0 #ENVTEST_VERSION is the version of controller-runtime release branch to fetch the envtest setup script (i.e. release-0.20) ENVTEST_VERSION ?= $(shell go list -m -f "{{ .Version }}" sigs.k8s.io/controller-runtime | awk -F'[v.]' '{printf "release-%d.%d", $$2, $$3}') #ENVTEST_K8S_VERSION is the version of Kubernetes to use for setting up ENVTEST binaries (i.e. 1.31) ENVTEST_K8S_VERSION ?= $(shell go list -m -f "{{ .Version }}" k8s.io/api | awk -F'[v.]' '{printf "1.%d", $$3}') +# renovate: datasource=github-releases depName=golangci/golangci-lint GOLANGCI_LINT_VERSION ?= v2.5.0 .PHONY: kustomize @@ -362,7 +368,7 @@ ifeq (,$(shell which opm 2>/dev/null)) set -e ;\ mkdir -p $(dir $(OPM)) ;\ OS=$(shell go env GOOS) && ARCH=$(shell go env GOARCH) && \ - curl -sSLo $(OPM) https://github.com/operator-framework/operator-registry/releases/download/v1.55.0/$${OS}-$${ARCH}-opm ;\ + curl -sSLo $(OPM) https://github.com/operator-framework/operator-registry/releases/download/$(OPM_VERSION)/$${OS}-$${ARCH}-opm ;\ chmod +x $(OPM) ;\ } else diff --git a/controller/deploy/operator/config/scorecard/patches/basic.config.yaml b/controller/deploy/operator/config/scorecard/patches/basic.config.yaml index 8237b70d8..8d8eb18c1 100644 --- a/controller/deploy/operator/config/scorecard/patches/basic.config.yaml +++ b/controller/deploy/operator/config/scorecard/patches/basic.config.yaml @@ -4,6 +4,7 @@ entrypoint: - scorecard-test - basic-check-spec + # renovate: image image: quay.io/operator-framework/scorecard-test:v1.41.1 labels: suite: basic diff --git a/controller/deploy/operator/config/scorecard/patches/olm.config.yaml b/controller/deploy/operator/config/scorecard/patches/olm.config.yaml index 416660a77..469eefc2c 100644 --- a/controller/deploy/operator/config/scorecard/patches/olm.config.yaml +++ b/controller/deploy/operator/config/scorecard/patches/olm.config.yaml @@ -4,6 +4,7 @@ entrypoint: - scorecard-test - olm-bundle-validation + # renovate: image image: quay.io/operator-framework/scorecard-test:v1.41.1 labels: suite: olm @@ -14,6 +15,7 @@ entrypoint: - scorecard-test - olm-crds-have-validation + # renovate: image image: quay.io/operator-framework/scorecard-test:v1.41.1 labels: suite: olm @@ -24,6 +26,7 @@ entrypoint: - scorecard-test - olm-crds-have-resources + # renovate: image image: quay.io/operator-framework/scorecard-test:v1.41.1 labels: suite: olm @@ -34,6 +37,7 @@ entrypoint: - scorecard-test - olm-spec-descriptors + # renovate: image image: quay.io/operator-framework/scorecard-test:v1.41.1 labels: suite: olm @@ -44,6 +48,7 @@ entrypoint: - scorecard-test - olm-status-descriptors + # renovate: image image: quay.io/operator-framework/scorecard-test:v1.41.1 labels: suite: olm diff --git a/controller/deploy/operator/test/utils/utils.go b/controller/deploy/operator/test/utils/utils.go index a39fca970..555344f67 100644 --- a/controller/deploy/operator/test/utils/utils.go +++ b/controller/deploy/operator/test/utils/utils.go @@ -28,10 +28,12 @@ import ( ) const ( + // renovate: datasource=github-releases depName=prometheus-operator/prometheus-operator prometheusOperatorVersion = "v0.77.1" prometheusOperatorURL = "https://github.com/prometheus-operator/prometheus-operator/" + "releases/download/%s/bundle.yaml" + // renovate: datasource=github-releases depName=cert-manager/cert-manager certmanagerVersion = "v1.19.2" certmanagerURLTmpl = "https://github.com/cert-manager/cert-manager/releases/download/%s/cert-manager.yaml" ) diff --git a/controller/hack/demoenv/exporters-statefulset.yaml b/controller/hack/demoenv/exporters-statefulset.yaml index 766cebcc5..46e31b8b0 100644 --- a/controller/hack/demoenv/exporters-statefulset.yaml +++ b/controller/hack/demoenv/exporters-statefulset.yaml @@ -16,7 +16,7 @@ spec: restartPolicy: Always containers: - name: jumpstarter-exporter - image: quay.io/jumpstarter-dev/jumpstarter:0.5.0 + image: quay.io/jumpstarter-dev/jumpstarter:latest imagePullPolicy: IfNotPresent env: - name: JUMPSTARTER_GRPC_INSECURE diff --git a/controller/hack/demoenv/vcan-exporters-statefulset.yaml b/controller/hack/demoenv/vcan-exporters-statefulset.yaml index 651c6fe2c..94cb44540 100644 --- a/controller/hack/demoenv/vcan-exporters-statefulset.yaml +++ b/controller/hack/demoenv/vcan-exporters-statefulset.yaml @@ -16,7 +16,7 @@ spec: restartPolicy: Always containers: - name: jumpstarter-exporter - image: quay.io/jumpstarter-dev/jumpstarter:0.5.0 + image: quay.io/jumpstarter-dev/jumpstarter:latest imagePullPolicy: IfNotPresent env: - name: JUMPSTARTER_GRPC_INSECURE diff --git a/controller/test/utils/utils.go b/controller/test/utils/utils.go index 0deb50a31..fe909c7c2 100644 --- a/controller/test/utils/utils.go +++ b/controller/test/utils/utils.go @@ -26,12 +26,14 @@ import ( ) const ( - prometheusOperatorVersion = "v0.72.0" + // renovate: datasource=github-releases depName=prometheus-operator/prometheus-operator + prometheusOperatorVersion = "v0.77.1" prometheusOperatorURL = "https://github.com/prometheus-operator/prometheus-operator/" + "releases/download/%s/bundle.yaml" - certmanagerVersion = "v1.14.4" - certmanagerURLTmpl = "https://github.com/jetstack/cert-manager/releases/download/%s/cert-manager.yaml" + // renovate: datasource=github-releases depName=cert-manager/cert-manager + certmanagerVersion = "v1.19.2" + certmanagerURLTmpl = "https://github.com/cert-manager/cert-manager/releases/download/%s/cert-manager.yaml" ) func warnError(err error) { diff --git a/e2e/setup-e2e.sh b/e2e/setup-e2e.sh index 1eebb24ec..fb58e84d0 100755 --- a/e2e/setup-e2e.sh +++ b/e2e/setup-e2e.sh @@ -58,7 +58,9 @@ install_dependencies() { # Step 2: Install e2e tools (cfssl, cfssljson, yq) as prebuilt binaries E2E_TOOLS_BIN="$REPO_ROOT/.e2e/bin" +# renovate: datasource=github-releases depName=cloudflare/cfssl extractVersion=^v(?.+)$ CFSSL_VERSION="1.6.5" +# renovate: datasource=github-releases depName=mikefarah/yq YQ_VERSION="v4.52.5" # SHA256 checksums for prebuilt binaries (from upstream release assets) diff --git a/protocol/Makefile b/protocol/Makefile index 4df02346a..7ac8e5efd 100644 --- a/protocol/Makefile +++ b/protocol/Makefile @@ -1,5 +1,7 @@ -BUF_IMAGE=docker.io/bufbuild/buf:latest -BUF=podman run --volume "$(shell pwd):/workspace" --workdir /workspace docker.io/bufbuild/buf:latest +# renovate: datasource=docker depName=docker.io/bufbuild/buf +BUF_VERSION=1.71.0 +BUF_IMAGE=docker.io/bufbuild/buf:$(BUF_VERSION) +BUF=podman run --volume "$(shell pwd):/workspace" --workdir /workspace $(BUF_IMAGE) all: lint diff --git a/python/Containerfile b/python/Containerfile index ea9bb606b..39c331d55 100644 --- a/python/Containerfile +++ b/python/Containerfile @@ -12,6 +12,7 @@ RUN dnf install -y python3 ustreamer libusb1 android-tools python3-libgpiod curl dnf clean all && \ rm -rf /var/cache/dnf +# renovate: datasource=github-releases depName=jumpstarter-dev/fls ARG FLS_VERSION=0.3.0 RUN ARCH=$(uname -m) && \ SUFFIX="linux" && \ diff --git a/python/packages/jumpstarter-kubernetes/jumpstarter_kubernetes/cluster/operator.py b/python/packages/jumpstarter-kubernetes/jumpstarter_kubernetes/cluster/operator.py index 7987682a8..a81003e68 100644 --- a/python/packages/jumpstarter-kubernetes/jumpstarter_kubernetes/cluster/operator.py +++ b/python/packages/jumpstarter-kubernetes/jumpstarter_kubernetes/cluster/operator.py @@ -7,6 +7,7 @@ from ..exceptions import ClusterOperationError from .common import GRPC_NODEPORT, LOGIN_NODEPORT, ROUTER_NODEPORT, run_command, run_command_with_output +# renovate: datasource=github-releases depName=cert-manager/cert-manager CERTMANAGER_VERSION = "v1.19.2" OPERATOR_INSTALLER_URL_TEMPLATE = ( "https://github.com/jumpstarter-dev/jumpstarter/releases/download/{version}/operator-installer.yaml" diff --git a/renovate.jsonc b/renovate.jsonc index ac7b294a4..184450b61 100644 --- a/renovate.jsonc +++ b/renovate.jsonc @@ -68,6 +68,102 @@ "depNameTemplate": "astral-sh/uv", "datasourceTemplate": "github-releases", "versioningTemplate": "semver" + }, + { + "description": "Track GitHub release binaries in Makefiles via inline annotations", + "customType": "regex", + "managerFilePatterns": [ + "/(^|/)Makefile$/" + ], + "matchStrings": [ + "#\\s*renovate:\\s*datasource=(?[^\\s]+)\\s+depName=(?[^\\s]+)(?:\\s+extractVersion=(?[^\\s]+))?\\n[A-Z0-9_]+\\s*\\??=\\s*(?[^\\s]+)" + ] + }, + { + "description": "Track versioned ARG dependencies in Containerfiles/Dockerfiles via inline annotations", + "customType": "regex", + "managerFilePatterns": [ + "/(^|/)[Cc]ontainerfile[^/]*$/", + "/(^|/)[Dd]ockerfile[^/]*$/" + ], + "matchStrings": [ + "#\\s*renovate:\\s*datasource=(?[^\\s]+)\\s+depName=(?[^\\s]+)(?:\\s+extractVersion=(?[^\\s]+))?\\nARG\\s+[A-Z0-9_]+=(?[^\\s]+)" + ] + }, + { + "description": "Track GitHub release binaries in shell scripts via inline annotations", + "customType": "regex", + "managerFilePatterns": [ + "/(^|/)[^/]+\\.sh$/" + ], + "matchStrings": [ + "#\\s*renovate:\\s*datasource=(?[^\\s]+)\\s+depName=(?[^\\s]+)(?:\\s+extractVersion=(?[^\\s]+))?\\n[A-Z0-9_]+=(?:\"|')(?[^\"']+)(?:\"|')" + ] + }, + { + "description": "Track GitHub release binaries in GitHub Actions YAML env blocks", + "customType": "regex", + "managerFilePatterns": [ + "/(^|/)\\.github/workflows/[^/]+\\.ya?ml$/" + ], + "matchStrings": [ + "#\\s*renovate:\\s*datasource=(?[^\\s]+)\\s+depName=(?[^\\s]+)(?:\\s+extractVersion=(?[^\\s]+))?\\n\\s+[A-Z0-9_]+:\\s*(?[^\\s]+)" + ] + }, + { + "description": "Track versioned dependencies in Go source files via inline annotations", + "customType": "regex", + "managerFilePatterns": [ + "/(^|/)[^/]+\\.go$/" + ], + "matchStrings": [ + "//\\s*renovate:\\s*datasource=(?[^\\s]+)\\s+depName=(?[^\\s]+)\\n\\s+\\w+\\s*=\\s*\"(?[^\"]+)\"" + ] + }, + { + "description": "Track versioned dependencies in Python source files via inline annotations", + "customType": "regex", + "managerFilePatterns": [ + "/(^|/)[^/]+\\.py$/" + ], + "matchStrings": [ + "#\\s*renovate:\\s*datasource=(?[^\\s]+)\\s+depName=(?[^\\s]+)\\n[A-Z0-9_]+\\s*=\\s*\"(?[^\"]+)\"" + ] + }, + { + "description": "Track container image references in YAML via '# renovate: image' annotations", + "customType": "regex", + "managerFilePatterns": [ + "/(^|/)[^/]+\\.ya?ml$/" + ], + "matchStrings": [ + "#\\s*renovate:\\s*image\\n\\s+image:\\s*(?[^:\\s]+):(?[^\\s]+)" + ], + "datasourceTemplate": "docker" + }, + { + "description": "Track buf protobuf plugin versions (protocolbuffers/python -> protobuf releases)", + "customType": "regex", + "managerFilePatterns": [ + "/(^|/)buf\\.gen\\.ya?ml$/" + ], + "matchStrings": [ + "remote:\\s*buf\\.build/protocolbuffers/(?python):(?v[^\\s]+)" + ], + "depNameTemplate": "protocolbuffers/protobuf", + "datasourceTemplate": "github-releases" + }, + { + "description": "Track buf community plugin versions (nipunn1313-mypy, nipunn1313-mypy-grpc); uses pypi datasource for mypy-protobuf", + "customType": "regex", + "managerFilePatterns": [ + "/(^|/)buf\\.gen\\.ya?ml$/" + ], + "matchStrings": [ + "remote:\\s*buf\\.build/community/nipunn1313-mypy(?:-grpc)?:v(?[^\\s]+)" + ], + "depNameTemplate": "mypy-protobuf", + "datasourceTemplate": "pypi" } ], "packageRules": [ @@ -246,6 +342,60 @@ ], "allowedVersions": "/^\\d+\\.\\d+\\.\\d+$/", "automerge": false + }, + { + "description": "Group operator tooling (operator-sdk, OPM, scorecard-test)", + "groupName": "operator-tooling", + "matchDepNames": [ + "operator-framework/operator-sdk", + "operator-framework/operator-registry", + "quay.io/operator-framework/scorecard-test" + ] + }, + { + "description": "Group e2e test tools (cfssl, yq)", + "groupName": "e2e-test-tools", + "matchDepNames": [ + "cloudflare/cfssl", + "mikefarah/yq" + ] + }, + { + "description": "Group infrastructure manifests (cert-manager, prometheus-operator)", + "groupName": "infrastructure-manifests", + "matchDepNames": [ + "cert-manager/cert-manager", + "prometheus-operator/prometheus-operator" + ] + }, + { + "description": "Group Go build tools across both controller Makefiles", + "groupName": "go-build-tools", + "matchManagers": [ + "custom.regex" + ], + "matchDepNames": [ + "kubernetes-sigs/kustomize", + "kubernetes-sigs/controller-tools", + "golangci/golangci-lint", + "kubernetes-sigs/kind", + "fullstorydev/grpcurl" + ] + }, + { + "description": "Group bufbuild/buf container image across Makefiles", + "groupName": "buf-tooling", + "matchDepNames": [ + "docker.io/bufbuild/buf" + ] + }, + { + "description": "Group buf protobuf plugins", + "groupName": "buf-protobuf-plugins", + "matchDepNames": [ + "protocolbuffers/protobuf", + "mypy-protobuf" + ] } ] }