Skip to content

Commit

Permalink
Add updatecli configuration to update vsphere cpi and csi charts (#5326)
Browse files Browse the repository at this point in the history
* Add updatecli configuration to update vsphere cpi and csi charts

Signed-off-by: galal-hussein <[email protected]>

* use updatecli version v0.72.0

Signed-off-by: galal-hussein <[email protected]>

* remove updatecli default steps and add vsphere charts

Signed-off-by: galal-hussein <[email protected]>

---------

Signed-off-by: galal-hussein <[email protected]>
  • Loading branch information
galal-hussein authored Jul 16, 2024
1 parent c08cb89 commit b704157
Show file tree
Hide file tree
Showing 7 changed files with 230 additions and 82 deletions.
2 changes: 2 additions & 0 deletions .github/workflows/updatecli.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ jobs:

- name: Install Updatecli
uses: updatecli/updatecli-action@v2
with:
version: v0.72.0

- name: Delete leftover UpdateCLI branches
run: |
Expand Down
81 changes: 81 additions & 0 deletions updatecli/scripts/update_chart_and_images.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
#!/bin/bash

info()
{
echo '[INFO] ' "$@"
}
warn()
{
echo '[WARN] ' "$@" >&2
}
fatal()
{
echo '[ERROR] ' "$@" >&2
exit 1
}

update_chart_version() {
info "updating chart ${1} in ${CHART_VERSIONS_FILE}"
CURRENT_VERSION=$(yq -r '.charts[] | select(.filename == "/charts/'"${1}"'.yaml") | .version' ${CHART_VERSIONS_FILE})
NEW_VERSION=${2}
if [ "${CURRENT_VERSION}" != "${NEW_VERSION}" ]; then
info "found version ${CURRENT_VERSION}, updating to ${NEW_VERSION}"
chart_updated=true
if test "$DRY_RUN" == "false"; then
sed -i "s/${CURRENT_VERSION}/${NEW_VERSION}/g" ${CHART_VERSIONS_FILE}
else
info "dry-run is enabled, no changes will occur"
fi
else
info "no new version found"
fi
}

update_chart_images() {
info "downloading chart ${1} version ${2} to extract image versions"
CHART_URL="https://github.com/rancher/rke2-charts/raw/main/assets/${1}/${1}-${2}.tgz"
curl -s -L ${CHART_URL} | tar xzv ${1}/values.yaml 1> /dev/null
if test "$chart_updated" == "true"; then
# get all images and tags for the latest constraint
IMAGES_TAG=$(yq -y -r '.versionOverrides[] | select( .constraint == "~ 1.27" or .constraint == ">= 1.24 < 1.28") | .values' ${1}/values.yaml | grep -E "repo|tag")
while IFS= read -r line ; do
if grep "repo" <<< ${line} &> /dev/null; then
image=${line#*: }
tag_line=$(echo "${IMAGES_TAG}" | grep -A1 ${image} 2>&1| sed -n '2 p' | tr -d " ")
tag=${tag_line#*:}
target_image=$(grep ${image} ${CHART_AIRGAP_IMAGES_FILE})
if [ -z "${target_image}" ]; then
fatal "image ${image} not found in the airgap scripts"
fi
target_tag=${target_image#*:}
if [ "$target_tag" != "${tag}" ]; then
info updating image ${image} in airgap script from version ${target_tag} to ${tag}
if test "$DRY_RUN" == "false"; then
sed -r -i 's~(.*'${image}':).*~\1'${tag}'~g' ${CHART_AIRGAP_IMAGES_FILE}
else
info "dry-run is enabled, no changes will occur"
fi
else
info "image ${image} did not update from version ${tag}"
fi
else
continue
fi
done <<< "$IMAGES_TAG"
else
info "no new version found"
fi
# removing downloaded artifacts
rm -rf ${1}/
}

CHART_VERSIONS_FILE="charts/chart_versions.yaml"
CHART_AIRGAP_IMAGES_FILE="scripts/build-images"


CHART_NAME=${1}
CHART_VERSION=${2}
chart_updated=false

update_chart_version ${CHART_NAME} ${CHART_VERSION}
update_chart_images ${CHART_NAME} ${CHART_VERSION}
29 changes: 29 additions & 0 deletions updatecli/scripts/validate_version.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#!/bin/bash

info()
{
echo '[INFO] ' "$@"
}
warn()
{
echo '[WARN] ' "$@" >&2
}
fatal()
{
echo '[ERROR] ' "$@" >&2
exit 1
}


CHART_VERSIONS_FILE="charts/chart_versions.yaml"


CHART_NAME=${1}
CHART_VERSION=${2}

CURRENT_VERSION=$(yq -r '.charts[] | select(.filename == "/charts/'"${1}"'.yaml") | .version' ${CHART_VERSIONS_FILE})
if [ "${CURRENT_VERSION}" != "${CHART_VERSION}" ]; then
info "chart ${CHART_NAME} should be updated from version ${CURRENT_VERSION} to ${CHART_VERSION}"
exit 0
fi
fatal "chart ${CHART_NAME} has the latest version"
81 changes: 0 additions & 81 deletions updatecli/updatecli.d/updatecli.yml

This file was deleted.

59 changes: 59 additions & 0 deletions updatecli/updatecli.d/vsphere-cpi.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# This small test makes sure that updatecli is working properly on a repo.
# To test this:
# have "UPDATECLI_GITHUB_ACTOR" env set to your github username
# have "UPDATECLI_GITHUB_TOKEN" env set to your github token
# have the latest version of updatecli installed
# 'updatecli diff -v updatecli/values.yaml -c updatecli/updatecli.d/vsphere-cpi.yml'
# In the future, more useful files should be added to this directory.
---
name: "Update vsphere csi/cpi charts and images"
# Make sure we can pull in github repos from multiple orgs
scms:
rke2:
kind: "github"
spec:
user: "{{ .github.user }}"
email: "{{ .github.email }}"
username: "{{ requiredEnv .github.username }}"
token: '{{ requiredEnv .github.token }}'
owner: rancher
repository: rke2
branch: master

sources:
vsphere-cpi:
name: "Get vsphere-cpi chart version"
kind: "helmchart"
spec:
url: https://rancher.github.io/rke2-charts
name: rancher-vsphere-cpi
versionfilter:
kind: "latest"

conditions:
vsphereCPIVersionShouldBeUpdated:
name: "Check if vsphere-cpi chart should be updated or not"
kind: shell
sourceid: vsphere-cpi
spec:
command: bash ./updatecli/scripts/validate_version.sh rancher-vsphere-cpi

targets:
updateVsphereCPI:
name: "Update the vsphere-cpi airgap images"
kind: "shell"
scmid: "rke2"
sourceid: vsphere-cpi
spec:
command: bash ./updatecli/scripts/update_chart_and_images.sh rancher-vsphere-cpi

actions:
github:
kind: "github/pullrequest"
scmid: "rke2"
spec:
automerge: false
draft: false
mergemethod: squash
parent: false
title: "Update vsphere-cpi chart"
59 changes: 59 additions & 0 deletions updatecli/updatecli.d/vsphere-csi.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# This small test makes sure that updatecli is working properly on a repo.
# To test this:
# have "UPDATECLI_GITHUB_ACTOR" env set to your github username
# have "UPDATECLI_GITHUB_TOKEN" env set to your github token
# have the latest version of updatecli installed
# 'updatecli diff -v updatecli/values.yaml -c updatecli/updatecli.d/vsphere-csi.yml'
# In the future, more useful files should be added to this directory.
---
name: "Update vsphere csi/cpi charts and images"
# Make sure we can pull in github repos from multiple orgs
scms:
rke2:
kind: "github"
spec:
user: "{{ .github.user }}"
email: "{{ .github.email }}"
username: "{{ requiredEnv .github.username }}"
token: '{{ requiredEnv .github.token }}'
owner: rancher
repository: rke2
branch: master

sources:
vsphere-csi:
name: "Get vsphere-csi chart version"
kind: "helmchart"
spec:
url: https://rancher.github.io/rke2-charts
name: rancher-vsphere-csi
versionfilter:
kind: "latest"

conditions:
vsphereCSIVersionShouldBeUpdated:
name: "Check if vsphere-csi chart should be updated or not"
kind: shell
sourceid: vsphere-csi
spec:
command: bash ./updatecli/scripts/validate_version.sh rancher-vsphere-csi

targets:
updateVsphereCSI:
name: "Update the vsphere-csi airgap images"
kind: "shell"
scmid: "rke2"
sourceid: vsphere-csi
spec:
command: bash ./updatecli/scripts/update_chart_and_images.sh rancher-vsphere-csi

actions:
github:
kind: "github/pullrequest"
scmid: "rke2"
spec:
automerge: false
draft: false
mergemethod: squash
parent: false
title: "Update vsphere-csi chart"
1 change: 0 additions & 1 deletion updatecli/validate.yml

This file was deleted.

0 comments on commit b704157

Please sign in to comment.