@@ -126,19 +126,20 @@ jobs:
126126
127127 - name : Update projects.json for release branch
128128 env :
129+ GH_TOKEN : ${{ inputs.token || secrets.token || secrets.GH_ACTIONS_REPO_TOKEN }}
129130 PROJECT : ${{ inputs.project }}
130131 SOURCE_BRANCH : ${{ inputs.branch }}
131132 RELEASE_BRANCH : release/${{ steps.setup.outputs.release-version }}
132133 RELEASE_TRAIN : ${{ inputs.release-train }}
133134 run : |
134- python3 << 'PYEOF'
135+ cat > /tmp/update_projects.py << 'PYEOF'
135136 import json, os, re, sys
136137
137- project = os.environ['PROJECT']
138- source_branch = os.environ['SOURCE_BRANCH']
138+ project = os.environ['PROJECT']
139+ source_branch = os.environ['SOURCE_BRANCH']
139140 release_branch = os.environ['RELEASE_BRANCH']
140141
141- with open('config/projects .json') as f:
142+ with open('/tmp/projects_original .json') as f:
142143 config = json.load(f)
143144
144145 is_commercial = project.endswith('-commercial')
@@ -160,7 +161,6 @@ jobs:
160161
161162 print(f"JDKs for {source_branch} in {base_project}/{src_type}: {jdks}")
162163
163- # Ensure project entry and commercial section exist
164164 if base_project not in config:
165165 config[base_project] = {}
166166 if 'commercial' not in config[base_project]:
@@ -192,7 +192,6 @@ jobs:
192192 print("No changes needed to projects.json.")
193193 sys.exit(0)
194194
195- # Serialize preserving compact single-line string arrays (matching existing style)
196195 raw = json.dumps(config, indent=2)
197196 def collapse_str_arrays(m):
198197 try:
@@ -204,20 +203,32 @@ jobs:
204203 return m.group(0)
205204 raw = re.sub(r'\[[\s\S]*?\]', collapse_str_arrays, raw)
206205
207- with open('config/projects .json', 'w') as f:
206+ with open('/tmp/projects_updated .json', 'w') as f:
208207 f.write(raw + '\n')
209208 print("projects.json written.")
210209 PYEOF
211210
212- git config user.name "github-actions[bot]"
213- git config user.email "github-actions[bot]@users.noreply.github.com"
214- git add config/projects.json
215- if git diff --cached --quiet; then
216- echo "No changes to projects.json — nothing to commit."
211+ # Fetch current projects.json and its blob SHA from main
212+ file_response=$(gh api "repos/spring-cloud/spring-cloud-github-actions/contents/config/projects.json?ref=main")
213+ current_sha=$(echo "$file_response" | jq -r '.sha')
214+ echo "$file_response" | jq -r '.content' | tr -d '\n' | base64 -d > /tmp/projects_original.json
215+ cp /tmp/projects_original.json /tmp/projects_updated.json
216+
217+ python3 /tmp/update_projects.py
218+
219+ if diff -q /tmp/projects_original.json /tmp/projects_updated.json > /dev/null 2>&1; then
220+ echo "No changes to projects.json — nothing to push."
217221 else
218- git commit -m "Adding ${RELEASE_BRANCH} for ${PROJECT} as part of joining ${RELEASE_TRAIN}"
219- git push origin HEAD:main
220- echo "projects.json committed and pushed to main."
222+ new_content_b64=$(base64 -w 0 /tmp/projects_updated.json)
223+ jq -n \
224+ --arg message "Adding ${RELEASE_BRANCH} for ${PROJECT} as part of joining ${RELEASE_TRAIN}" \
225+ --arg content "$new_content_b64" \
226+ --arg sha "$current_sha" \
227+ '{message: $message, content: $content, sha: $sha, branch: "main"}' | \
228+ gh api "repos/spring-cloud/spring-cloud-github-actions/contents/config/projects.json" \
229+ --method PUT \
230+ --input -
231+ echo "projects.json updated on main."
221232 fi
222233
223234 - name : Trigger release-train-join workflow and wait
0 commit comments