Skip to content

Commit a42d131

Browse files
committed
Fix projects.json update
1 parent 0a6811d commit a42d131

1 file changed

Lines changed: 26 additions & 15 deletions

File tree

.github/workflows/join-release-train.yml

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)