diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 9fe4bc0dd..3525fa018 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -360,6 +360,12 @@ jobs: needs: [publish-npm, publish-tag] runs-on: ubuntu-latest + outputs: + pr_number: ${{ steps.get-pr.outputs.pr_number }} + primary_package: ${{ steps.post-comment.outputs.primary_package }} + primary_version: ${{ steps.post-comment.outputs.primary_version }} + changelog_url: ${{ steps.post-comment.outputs.changelog_url }} + steps: - name: Get PR Number id: get-pr @@ -385,6 +391,7 @@ jobs: core.setOutput('pr_number', ''); - name: Post Release Comment on PR + id: post-comment if: steps.get-pr.outputs.pr_number != '' uses: actions/github-script@v7 with: @@ -412,11 +419,14 @@ jobs: const aggregators = ['@webex/cc-widgets', '@webex/widgets']; let commentBody; + let primaryPackage = ''; + let primaryVersion = ''; + let changelogUrl = ''; if (hasPackages) { - const primaryPackage = aggregators.find(p => packageVersions[p]) + primaryPackage = aggregators.find(p => packageVersions[p]) || packageEntries[0][0]; - const primaryVersion = packageVersions[primaryPackage]; + primaryVersion = packageVersions[primaryPackage]; const stableVersion = primaryVersion .replace(/-next\..*/, '') .replace(/-[a-z]*\..*/, ''); @@ -432,12 +442,13 @@ jobs: console.log(`Could not read docs/CNAME, using default changelog host: ${e.message}`); } - const changelogUrl = new URL(`https://${cname}/changelog/`); + const changelogUrlObj = new URL(`https://${cname}/changelog/`); if (stableVersion) { - changelogUrl.searchParams.set('stable_version', stableVersion); + changelogUrlObj.searchParams.set('stable_version', stableVersion); } - changelogUrl.searchParams.set('package', primaryPackage); - changelogUrl.searchParams.set('version', primaryVersion); + changelogUrlObj.searchParams.set('package', primaryPackage); + changelogUrlObj.searchParams.set('version', primaryVersion); + changelogUrl = changelogUrlObj.toString(); const tagLinkParts = Object.entries(taggablePackages) .filter(([pkg]) => packageVersions[pkg]) @@ -526,3 +537,70 @@ jobs: } catch (error) { core.warning(`Failed to comment on PR #${prNumber}: ${error.message}`); } + + // Set outputs for downstream jobs + core.setOutput('primary_package', primaryPackage); + core.setOutput('primary_version', primaryVersion); + core.setOutput('changelog_url', changelogUrl); + + notify-webex-space: + name: Send Webex Space Notification + needs: [publish-tag, publish-npm, comment-on-pr] + runs-on: ubuntu-latest + if: always() && github.run_attempt == 1 + + steps: + - name: Post Webex Space Message + env: + WEBEX_BOT_TOKEN: ${{ secrets.WEBEX_BOT_TOKEN }} + WEBEX_ROOM_ID: ${{ secrets.WEBEX_ROOM_ID }} + COMMIT_MESSAGE: ${{ github.event.head_commit.message }} + run: | + PACKAGE="${{ needs.comment-on-pr.outputs.primary_package }}" + VERSION="${{ needs.comment-on-pr.outputs.primary_version }}" + PR_NUMBER="${{ needs.comment-on-pr.outputs.pr_number }}" + CHANGELOG_URL="${{ needs.comment-on-pr.outputs.changelog_url }}" + + if [ -n "${PR_NUMBER}" ]; then + PR_LINK="https://github.com/${{ github.repository }}/pull/${PR_NUMBER}" + else + PR_LINK="" + fi + + PR_TITLE=$(echo "${COMMIT_MESSAGE}" | head -n 1) + + # Build message parts as an array + MESSAGE_PARTS=() + + if [ -n "${VERSION}" ] && [ -n "${PACKAGE}" ]; then + MESSAGE_PARTS+=("**Version:** ${PACKAGE}@${VERSION}") + fi + + if [ -n "${PR_LINK}" ]; then + MESSAGE_PARTS+=("**PR:** [${PR_TITLE}](${PR_LINK})") + fi + + if [ -n "${CHANGELOG_URL}" ]; then + MESSAGE_PARTS+=("**Changelog:** ${CHANGELOG_URL}") + fi + + if [ ${#MESSAGE_PARTS[@]} -eq 0 ]; then + echo "No version or PR info available. Skipping notification." + exit 0 + fi + + # Join parts with double newlines and add extra newline for markdown spacing + MESSAGE=$(printf '%s\n\n' "${MESSAGE_PARTS[@]}" | sed '$ s/\n\n$//') + + echo "Sending message to Webex Space..." + echo "Message content:" + echo "${MESSAGE}" + + BODY=$(jq -n --arg room "${WEBEX_ROOM_ID}" --arg md "${MESSAGE}" '{roomId: $room, markdown: $md}') + curl -sSf \ + -H "Authorization: Bearer ${WEBEX_BOT_TOKEN}" \ + -H "Content-Type: application/json" \ + -d "${BODY}" \ + https://webexapis.com/v1/messages > /dev/null + + echo "Message sent successfully!"