-
Notifications
You must be signed in to change notification settings - Fork 0
137 lines (115 loc) · 4.51 KB
/
Copy pathupdate-versions.yml
File metadata and controls
137 lines (115 loc) · 4.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
name: Update Runner Versions
on:
schedule:
- cron: "0 6 * * *" # daily 06:00 UTC
workflow_dispatch:
# Configuration for version tracking - add new components here
env:
COMPONENTS: >-
[
{"var": "RUNNER_VERSION", "repo": "actions/runner", "name": "Runner",
"prefix": "v"},
{"var": "RUNNER_CONTAINER_HOOKS_VERSION", "repo":
"actions/runner-container-hooks", "name": "Container Hooks", "prefix": "v"},
{"var": "DOCKER_VERSION", "repo": "moby/moby", "name": "Docker", "prefix":
"docker-v"},
{"var": "BUILDX_VERSION", "repo": "docker/buildx", "name": "Buildx",
"prefix": "v"} ]
jobs:
update-versions:
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Set up Git
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
- name: Load current versions
id: versions
uses: falti/dotenv-action@v1.1.4
with:
log-variables: true
export-variables: true
keys-case: "upper"
- name: Fetch latest releases
id: fetch_latest
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
# Load configuration from top-level env using jq
COMPONENTS='${{ env.COMPONENTS }}'
# Fetch latest version for each component
echo "$COMPONENTS" | jq -c '.[]' | while read -r component; do
VAR=$(echo "$component" | jq -r '.var')
REPO=$(echo "$component" | jq -r '.repo')
PREFIX=$(echo "$component" | jq -r '.prefix')
TAG=$(gh api repos/$REPO/releases -q '.[0].tag_name')
LATEST="${TAG#$PREFIX}" # Strip prefix from tag
echo "LATEST_$VAR=$LATEST" >> $GITHUB_ENV
echo "Fetched $VAR: $LATEST from $REPO (tag: $TAG)"
done
- name: Update .env if needed
id: update
run: |
# Load configuration from top-level env using jq
COMPONENTS='${{ env.COMPONENTS }}'
UPDATED=false
# Update .env for each changed version
while read -r component; do
VAR=$(echo "$component" | jq -r '.var')
CURRENT="${!VAR}"
LATEST_VAR="LATEST_$VAR"
LATEST="${!LATEST_VAR}"
if [ "$CURRENT" != "$LATEST" ]; then
echo "Updating $VAR: $CURRENT → $LATEST"
sed -i "s/^$VAR=.*/$VAR=$LATEST/" .env
UPDATED=true
fi
done < <(echo "$COMPONENTS" | jq -c '.[]')
echo "UPDATED=$UPDATED" >> $GITHUB_OUTPUT
echo "UPDATED=$UPDATED"
- name: Show changes
if: steps.update.outputs.UPDATED == 'true'
run: git diff --color=always
- name: Create or update PR if versions changed
if: steps.update.outputs.UPDATED == 'true'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
shell: bash
run: |
# Load configuration from top-level env using jq
COMPONENTS='${{ env.COMPONENTS }}'
BRANCH=update-runner-versions
git checkout -B $BRANCH
COMMIT_MSG="Update component versions"
MSG_LINES=()
# Build message lines for changed versions
while read -r component; do
VAR=$(echo "$component" | jq -r '.var')
REPO=$(echo "$component" | jq -r '.repo')
FRIENDLY=$(echo "$component" | jq -r '.name')
CURRENT="${!VAR}"
LATEST_VAR="LATEST_$VAR"
LATEST="${!LATEST_VAR}"
if [ "$CURRENT" != "$LATEST" ]; then
MSG_LINES+=("- $FRIENDLY: [$CURRENT](https://github.com/$REPO/releases/tag/v$CURRENT) → [$LATEST](https://github.com/$REPO/releases/tag/v$LATEST)")
fi
done < <(echo "$COMPONENTS" | jq -c '.[]')
if [ ${#MSG_LINES[@]} -gt 0 ]; then
COMMIT_MSG=$(printf "Update component versions\n\n%s" "$(printf "%s\n" "${MSG_LINES[@]}")")
fi
git add .env
git commit -m "$COMMIT_MSG"
git push --set-upstream origin $BRANCH --force
# Check if a PR already exists
EXISTING_PR=$(gh pr list --head $BRANCH --json number -q '.[0].number')
if [ -z "$EXISTING_PR" ]; then
gh pr create \
--title "Update component versions" \
--body "$COMMIT_MSG" \
--base main \
--head $BRANCH
else
echo "PR already exists: #$EXISTING_PR"
fi