@@ -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