From 48c1157c610c9959d38257018b31d55e0dfd0b96 Mon Sep 17 00:00:00 2001 From: Predrag Rogic Date: Sat, 28 Sep 2024 19:44:42 +0100 Subject: [PATCH 1/2] automate kube-vip version update --- .github/workflows/update-kube-vip-version.yml | 48 ++++++++++++++ Makefile | 5 ++ .../update_kube_vip_version.go | 62 +++++++++++++++++++ pkg/minikube/cluster/ha/kube-vip/kube-vip.go | 4 +- 4 files changed, 117 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/update-kube-vip-version.yml create mode 100644 hack/update/kube_vip_version/update_kube_vip_version.go diff --git a/.github/workflows/update-kube-vip-version.yml b/.github/workflows/update-kube-vip-version.yml new file mode 100644 index 000000000000..bf917f8fb789 --- /dev/null +++ b/.github/workflows/update-kube-vip-version.yml @@ -0,0 +1,48 @@ +name: "update-kube-vip-version" +on: + workflow_dispatch: + schedule: + # every Monday at around 3 am pacific/10 am UTC + - cron: "0 10 * * 1" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.23.0' +permissions: + contents: read + +jobs: + bump-kube-vip-version: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 + - uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 + with: + go-version: ${{env.GO_VERSION}} + - name: Bump kube-vip version + id: bumpKubeVip + run: | + echo "OLD_VERSION=$(DEP=kube-vip make get-dependency-version)" >> "$GITHUB_OUTPUT" + make update-kube-vip-version + echo "NEW_VERSION=$(DEP=kube-vip make get-dependency-version)" >> "$GITHUB_OUTPUT" + # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings + echo "changes<> "$GITHUB_OUTPUT" + echo "$(git status --porcelain)" >> "$GITHUB_OUTPUT" + echo "EOF" >> "$GITHUB_OUTPUT" + - name: Create PR + if: ${{ steps.bumpKubeVip.outputs.changes != '' }} + uses: peter-evans/create-pull-request@5e914681df9dc83aa4e4905692ca88beb2f9e91f + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'HA (multi-control plane): Update kube-vip from ${{ steps.bumpKubeVip.outputs.OLD_VERSION }} to ${{ steps.bumpKubeVip.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_kube_vip_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'HA (multi-control plane): Update kube-vip from ${{ steps.bumpKubeVip.outputs.OLD_VERSION }} to ${{ steps.bumpKubeVip.outputs.NEW_VERSION }}' + labels: ok-to-test + body: | + The kube-vip project released a [new version](https://github.com/kube-vip/kube-vip) + + This PR was auto-generated by `make update-kube-vip-version` using [update-kube-vip-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-kube-vip-version.yml) CI Workflow. diff --git a/Makefile b/Makefile index 9ef1cb2111bd..15d916f703bc 100644 --- a/Makefile +++ b/Makefile @@ -1255,3 +1255,8 @@ get-dependency-version: .PHONY: generate-licenses generate-licenses: ./hack/generate_licenses.sh + +.PHONY: update-kube-vip-version +update-kube-vip-version: + (cd hack/update/kube_vip_version && \ + go run update_kube_vip_version.go) diff --git a/hack/update/kube_vip_version/update_kube_vip_version.go b/hack/update/kube_vip_version/update_kube_vip_version.go new file mode 100644 index 000000000000..ab921e9f44fd --- /dev/null +++ b/hack/update/kube_vip_version/update_kube_vip_version.go @@ -0,0 +1,62 @@ +/* +Copyright 2024 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "context" + "time" + + "k8s.io/klog/v2" + + "k8s.io/minikube/hack/update" +) + +const ( + // default context timeout + cxTimeout = 5 * time.Minute +) + +var ( + schema = map[string]update.Item{ + "pkg/minikube/cluster/ha/kube-vip/kube-vip.go": { + Replace: map[string]string{ + `image: ghcr.io/kube-vip/kube-vip:.*`: `image: ghcr.io/kube-vip/kube-vip:{{.StableVersion}}`, + }, + }, + } +) + +// Data holds stable kube-vip version in semver format. +type Data struct { + StableVersion string +} + +func main() { + // set a context with defined timeout + ctx, cancel := context.WithTimeout(context.Background(), cxTimeout) + defer cancel() + + // get kube-vip stable version + stable, err := update.StableVersion(ctx, "kube-vip", "kube-vip") + if err != nil { + klog.Fatalf("Unable to get kube-vip stable version: %v", err) + } + data := Data{StableVersion: stable} + klog.Infof("kube-vip stable version: %s", stable) + + update.Apply(schema, data) +} diff --git a/pkg/minikube/cluster/ha/kube-vip/kube-vip.go b/pkg/minikube/cluster/ha/kube-vip/kube-vip.go index d945978313d6..ed7d19a9d7c2 100644 --- a/pkg/minikube/cluster/ha/kube-vip/kube-vip.go +++ b/pkg/minikube/cluster/ha/kube-vip/kube-vip.go @@ -32,8 +32,8 @@ import ( const Manifest = "kube-vip.yaml" // KubeVipTemplate is kube-vip static pod config template -// ref: https://kube-vip.io/docs/installation/static/ -// update: regenerate with: +// ref: https://kube-vip.io/docs/installation/static/#generating-a-manifest +// note: to check if the latest kube-vip version introduces any significant changes, compare the current one with a latest default manifest generated with: // // export KVVERSION=$(curl -sL https://api.github.com/repos/kube-vip/kube-vip/releases | jq -r ".[0].name") // docker run --rm ghcr.io/kube-vip/kube-vip:$KVVERSION manifest pod --interface eth0 --address 192.168.42.17 --controlplane --arp --leaderElection From 3f50524844093661ba972ec4d0356a0656e50251 Mon Sep 17 00:00:00 2001 From: Predrag Rogic Date: Sat, 28 Sep 2024 19:51:14 +0100 Subject: [PATCH 2/2] add kube-vip to get_version --- hack/update/get_version/get_version.go | 1 + 1 file changed, 1 insertion(+) diff --git a/hack/update/get_version/get_version.go b/hack/update/get_version/get_version.go index c09783161965..7d52a7731901 100644 --- a/hack/update/get_version/get_version.go +++ b/hack/update/get_version/get_version.go @@ -60,6 +60,7 @@ var dependencies = map[string]dependency{ "istio-operator": {addonsFile, `istio/operator:(.*)@`}, "kindnetd": {"pkg/minikube/bootstrapper/images/images.go", `kindnetd:(.*)"`}, "kong": {addonsFile, `kong:(.*)@`}, + "kube-vip": {"pkg/minikube/cluster/ha/kube-vip/kube-vip.go", `image: ghcr.io/kube-vip/kube-vip:(.*)`}, "volcano": {addonsFile, `volcanosh/vc-webhook-manager:(.*)@`}, "kong-ingress-controller": {addonsFile, `kong/kubernetes-ingress-controller:(.*)@`}, "kubectl": {addonsFile, `bitnami/kubectl:(.*)@`},