Skip to content

Commit 02d7b2e

Browse files
committed
ci: add scheduled workflow to update tool versions
Runs weekly (Monday 08:00 UTC) and on manual dispatch. Checks latest releases for Argo, Kargo, and pack CLIs and opens a PR when updates are available. https://claude.ai/code/session_01RofXXAMZxK4irobNYjYn3W
1 parent 51c2b52 commit 02d7b2e

1 file changed

Lines changed: 101 additions & 0 deletions

File tree

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
name: Update tool versions
2+
3+
on:
4+
schedule:
5+
- cron: "0 8 * * 1" # Every Monday at 08:00 UTC
6+
workflow_dispatch:
7+
8+
permissions:
9+
contents: write
10+
pull-requests: write
11+
12+
jobs:
13+
update-tools:
14+
runs-on: ubuntu-latest
15+
steps:
16+
- name: Checkout
17+
uses: actions/checkout@v4
18+
19+
- name: Fetch latest tool versions
20+
id: versions
21+
env:
22+
GH_TOKEN: ${{ github.token }}
23+
run: |
24+
get_latest_version() {
25+
local repo="$1"
26+
gh api "repos/${repo}/releases/latest" --jq '.tag_name' | sed 's/^v//'
27+
}
28+
29+
ARGO_LATEST=$(get_latest_version "argoproj/argo-workflows")
30+
KARGO_LATEST=$(get_latest_version "akuity/kargo")
31+
PACK_LATEST=$(get_latest_version "buildpacks/pack")
32+
33+
echo "argo=${ARGO_LATEST}" >> "$GITHUB_OUTPUT"
34+
echo "kargo=${KARGO_LATEST}" >> "$GITHUB_OUTPUT"
35+
echo "pack=${PACK_LATEST}" >> "$GITHUB_OUTPUT"
36+
37+
ARGO_CURRENT=$(grep -oP 'ARGO_VERSION=\K[0-9.]+' Containerfile)
38+
KARGO_CURRENT=$(grep -oP 'KARGO_VERSION=\K[0-9.]+' Containerfile)
39+
PACK_CURRENT=$(grep -oP 'PACK_VERSION=\K[0-9.]+' Containerfile)
40+
41+
echo "argo_current=${ARGO_CURRENT}" >> "$GITHUB_OUTPUT"
42+
echo "kargo_current=${KARGO_CURRENT}" >> "$GITHUB_OUTPUT"
43+
echo "pack_current=${PACK_CURRENT}" >> "$GITHUB_OUTPUT"
44+
45+
UPDATES=""
46+
if [ "${ARGO_CURRENT}" != "${ARGO_LATEST}" ]; then
47+
UPDATES="${UPDATES}- Argo Workflows CLI: ${ARGO_CURRENT} -> ${ARGO_LATEST}\n"
48+
fi
49+
if [ "${KARGO_CURRENT}" != "${KARGO_LATEST}" ]; then
50+
UPDATES="${UPDATES}- Kargo CLI: ${KARGO_CURRENT} -> ${KARGO_LATEST}\n"
51+
fi
52+
if [ "${PACK_CURRENT}" != "${PACK_LATEST}" ]; then
53+
UPDATES="${UPDATES}- pack (Buildpacks): ${PACK_CURRENT} -> ${PACK_LATEST}\n"
54+
fi
55+
56+
if [ -z "${UPDATES}" ]; then
57+
echo "has_updates=false" >> "$GITHUB_OUTPUT"
58+
echo "No updates found."
59+
else
60+
echo "has_updates=true" >> "$GITHUB_OUTPUT"
61+
# Use a delimiter for multiline output
62+
{
63+
echo "summary<<EOF"
64+
echo -e "${UPDATES}"
65+
echo "EOF"
66+
} >> "$GITHUB_OUTPUT"
67+
echo -e "Updates found:\n${UPDATES}"
68+
fi
69+
70+
- name: Update versions in Containerfile and manifest
71+
if: steps.versions.outputs.has_updates == 'true'
72+
env:
73+
ARGO_LATEST: ${{ steps.versions.outputs.argo }}
74+
KARGO_LATEST: ${{ steps.versions.outputs.kargo }}
75+
PACK_LATEST: ${{ steps.versions.outputs.pack }}
76+
ARGO_CURRENT: ${{ steps.versions.outputs.argo_current }}
77+
KARGO_CURRENT: ${{ steps.versions.outputs.kargo_current }}
78+
PACK_CURRENT: ${{ steps.versions.outputs.pack_current }}
79+
run: |
80+
if [ "${ARGO_CURRENT}" != "${ARGO_LATEST}" ]; then
81+
sed -i "s/ARGO_VERSION=${ARGO_CURRENT}/ARGO_VERSION=${ARGO_LATEST}/g" Containerfile manifest.yaml
82+
fi
83+
if [ "${KARGO_CURRENT}" != "${KARGO_LATEST}" ]; then
84+
sed -i "s/KARGO_VERSION=${KARGO_CURRENT}/KARGO_VERSION=${KARGO_LATEST}/g" Containerfile manifest.yaml
85+
fi
86+
if [ "${PACK_CURRENT}" != "${PACK_LATEST}" ]; then
87+
sed -i "s/PACK_VERSION=${PACK_CURRENT}/PACK_VERSION=${PACK_LATEST}/g" Containerfile manifest.yaml
88+
fi
89+
90+
- name: Create pull request
91+
if: steps.versions.outputs.has_updates == 'true'
92+
uses: peter-evans/create-pull-request@v7
93+
with:
94+
commit-message: "chore: update tool versions"
95+
branch: chore/update-tool-versions
96+
title: "chore: update tool versions"
97+
body: |
98+
Automated tool version updates:
99+
100+
${{ steps.versions.outputs.summary }}
101+
labels: dependencies

0 commit comments

Comments
 (0)