@@ -119,7 +119,8 @@ jobs:
119119
120120 - name : Publish release to manifest backend
121121 env :
122- GH_TOKEN : ${{ secrets.CR_PAT }}
122+ CR_PAT : ${{ secrets.CR_PAT }}
123+ READ_PAT : ${{ secrets.READ_PAT }}
123124 RELEASE_TAG : ${{ steps.source-run.outputs.release_tag }}
124125 SOURCE_SHA : ${{ steps.source-run.outputs.source_sha }}
125126 SOURCE_BRANCH : ${{ steps.source-run.outputs.source_branch }}
@@ -136,6 +137,19 @@ jobs:
136137
137138 source_repo_url="https://github.com/${SOURCE_REPO}"
138139 source_commit_url="${source_repo_url}/commit/${SOURCE_SHA}"
140+ updated_at="$(date -u +'%Y-%m-%dT%H:%M:%SZ')"
141+ release_token_candidates=()
142+ if [[ -n "${CR_PAT}" ]]; then
143+ release_token_candidates+=("${CR_PAT}")
144+ fi
145+ if [[ -n "${READ_PAT}" && "${READ_PAT}" != "${CR_PAT}" ]]; then
146+ release_token_candidates+=("${READ_PAT}")
147+ fi
148+ if [[ "${#release_token_candidates[@]}" -eq 0 ]]; then
149+ echo "No token is available for manifest backend release operations." >&2
150+ exit 1
151+ fi
152+
139153 notes_file="${RUNNER_TEMP}/nsc-release-notes.md"
140154 cat > "${notes_file}" <<EOF
141155 Promoted NSC payload from [\`${SOURCE_REPO}\`](${source_repo_url}).
@@ -144,18 +158,40 @@ jobs:
144158 - source branch: \`${SOURCE_BRANCH}\`
145159 - source event: \`${SOURCE_EVENT}\`
146160 - source run: [\`${RUN_ID}\`](${RUN_URL})
161+
162+ Updated at \`${updated_at}\`.
147163 EOF
148164
149165 release_exists=false
150- if gh release view "${RELEASE_TAG}" --repo "${ASSET_REPO}" >/dev/null 2>&1; then
151- release_exists=true
152- fi
166+ release_id=""
167+ release_token="${release_token_candidates[0]}"
168+ for candidate in "${release_token_candidates[@]}"; do
169+ if release_json="$(GH_TOKEN="${candidate}" gh api "repos/${ASSET_REPO}/releases/tags/${RELEASE_TAG}" 2>/dev/null)"; then
170+ release_exists=true
171+ release_id="$(jq -r '.id' <<<"${release_json}")"
172+ release_token="${candidate}"
173+ break
174+ fi
175+ done
176+ export GH_TOKEN="${release_token}"
153177
154178 if [[ "${release_exists}" == "false" ]]; then
155- gh release create "${RELEASE_TAG}" \
156- --repo "${ASSET_REPO}" \
157- --title "${RELEASE_TAG}" \
158- --notes-file "${notes_file}"
179+ release_created=false
180+ for candidate in "${release_token_candidates[@]}"; do
181+ if GH_TOKEN="${candidate}" gh release create "${RELEASE_TAG}" \
182+ --repo "${ASSET_REPO}" \
183+ --title "${RELEASE_TAG}" \
184+ --notes-file "${notes_file}"; then
185+ release_token="${candidate}"
186+ export GH_TOKEN="${release_token}"
187+ release_created=true
188+ break
189+ fi
190+ done
191+ if [[ "${release_created}" != "true" ]]; then
192+ echo "Failed to create release ${RELEASE_TAG} in ${ASSET_REPO}." >&2
193+ exit 1
194+ fi
159195
160196 mapfile -d '' payload_assets < <(find "${RUNNER_TEMP}/nsc-payload" -maxdepth 1 -type f -print0)
161197 if [[ "${#payload_assets[@]}" -eq 0 ]]; then
@@ -167,11 +203,26 @@ jobs:
167203 gh release upload "${RELEASE_TAG}" "${payload_assets[@]}" --repo "${ASSET_REPO}"
168204 else
169205 echo "Release ${RELEASE_TAG} already exists in ${ASSET_REPO}. Reusing immutable release."
170- if ! gh release edit "${RELEASE_TAG}" \
171- --repo "${ASSET_REPO}" \
172- --title "${RELEASE_TAG}" \
173- --notes-file "${notes_file}"; then
174- echo "Skipping release note refresh for existing ${RELEASE_TAG}." >&2
206+ patch_file="${RUNNER_TEMP}/nsc-release-patch.json"
207+ jq -n \
208+ --arg name "${RELEASE_TAG}" \
209+ --rawfile body "${notes_file}" \
210+ '{name:$name, body:$body}' > "${patch_file}"
211+ release_refreshed=false
212+ for candidate in "${release_token_candidates[@]}"; do
213+ if GH_TOKEN="${candidate}" gh api \
214+ --method PATCH \
215+ "repos/${ASSET_REPO}/releases/${release_id}" \
216+ --input "${patch_file}" >/dev/null 2>&1; then
217+ release_token="${candidate}"
218+ export GH_TOKEN="${release_token}"
219+ release_refreshed=true
220+ break
221+ fi
222+ done
223+ if [[ "${release_refreshed}" != "true" ]]; then
224+ echo "Failed to refresh notes for existing ${RELEASE_TAG}. Provide a token with release edit permissions." >&2
225+ exit 1
175226 fi
176227 fi
177228
0 commit comments