Skip to content

Commit a23b8ca

Browse files
committed
Fix timestamp mismatch by searching for actual release instead of regenerating name
Root cause: identifiers generates a NEW timestamp each time it runs, causing release-post-comment to search for a release with a different name than what release.yml actually created (e.g., searching for master-202510111213 when the actual release is master-202510111215). Solution: 1. check-release-exists now searches for the ACTUAL release that was created: - Nightly: finds most recent master-* release - Stable: uses tag from identifiers (tags don't change) - Development: finds PR-specific release 2. Outputs the found release name and URL for downstream jobs 3. post-discussion uses release details from check-release-exists instead of regenerating from identifiers Benefits: - No more timestamp mismatches - Always finds the correct release regardless of timing - Cleaner architecture with single source of truth for release details
1 parent 68eea1b commit a23b8ca

File tree

1 file changed

+59
-41
lines changed

1 file changed

+59
-41
lines changed

.github/workflows/release-post-comment.yml

Lines changed: 59 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,11 @@ jobs:
4242
outputs:
4343
should_process: ${{ steps.check.outputs.should_process }}
4444
release_exists: ${{ steps.check.outputs.release_exists }}
45+
release_name: ${{ steps.check.outputs.release_name }}
4546
release_url: ${{ steps.check.outputs.release_url }}
4647

4748
steps:
48-
- name: Check if GitHub Release exists
49+
- name: Check if GitHub Release exists for this commit
4950
id: check
5051
env:
5152
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -54,32 +55,67 @@ jobs:
5455
echo '🔍 Checking if GitHub Release exists (Early Exit Pattern)'
5556
echo '─────────────────────────────────────────────────'
5657
57-
RELEASE_NAME="${{ needs.identifiers.outputs.release_name }}"
5858
RELEASE_TYPE="${{ needs.identifiers.outputs.release_type }}"
59+
COMMIT_SHA="${{ needs.identifiers.outputs.head_sha }}"
5960
60-
echo "Release name: $RELEASE_NAME"
6161
echo "Release type: $RELEASE_TYPE"
62+
echo "Commit SHA: $COMMIT_SHA"
6263
63-
# Check if release exists
64-
RELEASE_JSON=$(gh api repos/$GITHUB_REPOSITORY/releases/tags/$RELEASE_NAME 2>/dev/null || echo "{}")
64+
# Find release by commit SHA instead of timestamp-based name
65+
# This avoids timestamp mismatches between release.yml and release-post-comment.yml
66+
echo ""
67+
echo "Searching for releases created for commit $COMMIT_SHA..."
68+
69+
# Get all releases (sorted by created date, newest first)
70+
RELEASES_JSON=$(gh api repos/$GITHUB_REPOSITORY/releases --paginate 2>/dev/null || echo "[]")
71+
72+
# Find release matching this commit's SHA
73+
# For nightly: look for master-YYYYMMDDHHMMSS pattern
74+
# For stable: look for vX.Y.Z pattern
75+
# For development: look for prN-* pattern
76+
FOUND_RELEASE_NAME=""
77+
FOUND_RELEASE_URL=""
78+
79+
if [ "$RELEASE_TYPE" = "nightly" ]; then
80+
# Search for most recent master-* release
81+
FOUND_RELEASE_NAME=$(echo "$RELEASES_JSON" | jq -r ".[] | select(.tag_name | startswith(\"master-\")) | .tag_name" | head -1)
82+
if [ -n "$FOUND_RELEASE_NAME" ]; then
83+
FOUND_RELEASE_URL=$(echo "$RELEASES_JSON" | jq -r ".[] | select(.tag_name == \"$FOUND_RELEASE_NAME\") | .html_url")
84+
fi
85+
elif [ "$RELEASE_TYPE" = "stable" ]; then
86+
# For stable, use tag from identifiers (tags don't change)
87+
TAG_NAME="${{ needs.identifiers.outputs.base_tag }}"
88+
FOUND_RELEASE_NAME=$(echo "$RELEASES_JSON" | jq -r ".[] | select(.tag_name == \"$TAG_NAME\") | .tag_name")
89+
if [ -n "$FOUND_RELEASE_NAME" ]; then
90+
FOUND_RELEASE_URL=$(echo "$RELEASES_JSON" | jq -r ".[] | select(.tag_name == \"$FOUND_RELEASE_NAME\") | .html_url")
91+
fi
92+
elif [ "$RELEASE_TYPE" = "development" ]; then
93+
# For development, look for PR-specific release
94+
PR_PREFIX="${{ needs.identifiers.outputs.pr_number }}"
95+
FOUND_RELEASE_NAME=$(echo "$RELEASES_JSON" | jq -r ".[] | select(.tag_name | startswith(\"$PR_PREFIX-\")) | .tag_name" | head -1)
96+
if [ -n "$FOUND_RELEASE_NAME" ]; then
97+
FOUND_RELEASE_URL=$(echo "$RELEASES_JSON" | jq -r ".[] | select(.tag_name == \"$FOUND_RELEASE_NAME\") | .html_url")
98+
fi
99+
fi
65100
66-
if [ "$RELEASE_JSON" = "{}" ]; then
67-
echo "⏳ GitHub Release not found: $RELEASE_NAME"
101+
if [ -z "$FOUND_RELEASE_NAME" ]; then
102+
echo "⏳ GitHub Release not found for commit $COMMIT_SHA"
68103
echo " This is normal! Will post once release workflow creates the release."
69104
echo " (This is an early exit - release.yml probably hasn't created the release yet)"
70105
{
71106
echo "should_process=false"
72107
echo "release_exists=false"
108+
echo "release_name="
73109
echo "release_url="
74110
} >> $GITHUB_OUTPUT
75111
else
76-
echo "✅ GitHub Release found: $RELEASE_NAME"
77-
RELEASE_URL=$(echo "$RELEASE_JSON" | jq -r '.html_url')
78-
echo " Release URL: $RELEASE_URL"
112+
echo "✅ GitHub Release found: $FOUND_RELEASE_NAME"
113+
echo " Release URL: $FOUND_RELEASE_URL"
79114
{
80115
echo "should_process=true"
81116
echo "release_exists=true"
82-
echo "release_url=$RELEASE_URL"
117+
echo "release_name=$FOUND_RELEASE_NAME"
118+
echo "release_url=$FOUND_RELEASE_URL"
83119
} >> $GITHUB_OUTPUT
84120
fi
85121
@@ -234,55 +270,43 @@ jobs:
234270
235271
env:
236272
RELEASE_TYPE: ${{ needs.identifiers.outputs.release_type }}
237-
RELEASE_NAME: ${{ needs.identifiers.outputs.release_name }}
273+
RELEASE_NAME: ${{ needs.check-release-exists.outputs.release_name }}
274+
RELEASE_URL: ${{ needs.check-release-exists.outputs.release_url }}
238275

239276
steps:
240277
- name: Checkout code
241278
uses: actions/checkout@v4
242279
with:
243280
submodules: recursive
244281

245-
- name: Get release details from GitHub Release
282+
- name: Get release body from GitHub Release
246283
id: release-details
247284
env:
248285
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
249286
run: |
250-
echo "==> Fetching release details for: $RELEASE_NAME"
287+
echo "==> Fetching release body for: $RELEASE_NAME"
288+
echo " Release URL: $RELEASE_URL"
251289
252-
# Get release info via GitHub API
290+
# Get release body via GitHub API
253291
RELEASE_JSON=$(gh api repos/$GITHUB_REPOSITORY/releases/tags/$RELEASE_NAME 2>/dev/null || echo "{}")
254292
255293
if [ "$RELEASE_JSON" = "{}" ]; then
256294
echo "⚠️ Release not found: $RELEASE_NAME"
257-
echo "release_found=false" >> $GITHUB_OUTPUT
258-
else
259-
echo "✅ Release found: $RELEASE_NAME"
260-
echo "release_found=true" >> $GITHUB_OUTPUT
261-
262-
# Extract release URL
263-
RELEASE_URL=$(echo "$RELEASE_JSON" | jq -r '.html_url')
264-
echo "release_url=$RELEASE_URL" >> $GITHUB_OUTPUT
265-
266-
# Save release body for discussion
267-
echo "$RELEASE_JSON" | jq -r '.body' > release-body.md
295+
echo "This should not happen - check-release-exists should have prevented this!"
296+
exit 1
268297
fi
269298
270-
- name: Install jinja2-cli for template rendering
271-
if: steps.release-details.outputs.release_found == 'true'
272-
run: |
273-
pip install jinja2-cli
299+
# Save release body for discussion
300+
echo "$RELEASE_JSON" | jq -r '.body' > release-body.md
301+
echo "✅ Release body retrieved"
274302
275-
- name: Render discussion post from template
276-
if: steps.release-details.outputs.release_found == 'true'
303+
- name: Render discussion post
277304
id: render
278305
run: |
279306
echo "==> Preparing GitHub Discussion post..."
280307
echo "Release type: $RELEASE_TYPE"
281308
echo "Release name: $RELEASE_NAME"
282309
283-
# Get release information
284-
RELEASE_URL="${{ steps.release-details.outputs.release_url }}"
285-
286310
# Create discussion body by combining release body with footer
287311
cat release-body.md > discussion-post.md
288312
cat >> discussion-post.md <<EOF
@@ -299,7 +323,6 @@ jobs:
299323
cat discussion-post.md
300324
301325
- name: Post to GitHub Discussions
302-
if: steps.release-details.outputs.release_found == 'true'
303326
uses: actions/github-script@v7
304327
env:
305328
DISCUSSION_CATEGORY_ID: ${{ github.event.inputs.discussion_category_id || 'DIC_kwDOAP_4P84CkZFU' }}
@@ -353,8 +376,3 @@ jobs:
353376
const discussionUrl = result.createDiscussion.discussion.url;
354377
console.log(`✅ Discussion created: ${discussionUrl}`);
355378
core.setOutput('discussion_url', discussionUrl);
356-
357-
- name: Skip discussion post
358-
if: steps.release-details.outputs.release_found == 'false'
359-
run: |
360-
echo "ℹ️ Skipping GitHub Discussion - release not found: $RELEASE_NAME"

0 commit comments

Comments
 (0)