From 4e15cde332d36f53befb6a1b2eb556400548dd51 Mon Sep 17 00:00:00 2001 From: MaksimZhukov Date: Tue, 25 May 2021 21:00:46 +0300 Subject: [PATCH] Integrate Slack notifications --- .../workflows/release-new-action-version.yml | 19 +----------------- action.yml | 2 ++ dist/index.js | 20 ++++++++++++++++++- package.json | 1 + src/api-utils.ts | 9 ++++++++- src/main.ts | 16 ++++++++++++++- 6 files changed, 46 insertions(+), 21 deletions(-) diff --git a/.github/workflows/release-new-action-version.yml b/.github/workflows/release-new-action-version.yml index cefcc41..ab6a8c0 100644 --- a/.github/workflows/release-new-action-version.yml +++ b/.github/workflows/release-new-action-version.yml @@ -31,21 +31,4 @@ jobs: uses: ./ with: source-tag: ${{ env.TAG_NAME }} - - - name: Send slack message - if: failure() - run: | - curl ` - -X POST ` - -H 'Content-type: application/json' ` - --data '{\"text\":\"Failed to update a major tag for the ${{ github.repository }} action\"}' ` - ${{ secrets.SLACK_WEBHOOK }} - - - name: Send slack message - if: success() - run: | - curl ` - -X POST ` - -H 'Content-type: application/json' ` - --data '{\"text\":\"The ${{ steps.update-major-tag.outputs.major-tag }} tag has been successfully updated for the ${{ github.repository }} action to include changes from the ${{ env.TAG_NAME }}\"}' ` - ${{ secrets.SLACK_WEBHOOK }} \ No newline at end of file + slack-webhook: ${{ secrets.SLACK_WEBHOOK }} \ No newline at end of file diff --git a/action.yml b/action.yml index 99d86a7..f11cd40 100644 --- a/action.yml +++ b/action.yml @@ -4,6 +4,8 @@ inputs: source-tag: description: 'Tag name that the major tag will point to. Examples: v1.2.3, 1.2.3' required: true + slack-webhook: + description: 'Slack Webhook URL to post a message' token: description: 'Token to get an authenticated Octokit' default: ${{ github.token }} diff --git a/dist/index.js b/dist/index.js index d6f8f58..62ada79 100644 --- a/dist/index.js +++ b/dist/index.js @@ -26,9 +26,10 @@ var __importStar = (this && this.__importStar) || function (mod) { return result; }; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.updateTag = exports.validateIfReleaseIsPublished = void 0; +exports.postMessageToSlack = exports.updateTag = exports.validateIfReleaseIsPublished = void 0; const core = __importStar(__nccwpck_require__(2186)); const github_1 = __nccwpck_require__(5438); +const http_client_1 = __nccwpck_require__(9925); async function findTag(tag, octokitClient) { try { const { data: foundTag } = await octokitClient.git.getRef({ @@ -96,6 +97,12 @@ async function updateTag(sourceTag, targetTag, octokitClient) { } } exports.updateTag = updateTag; +async function postMessageToSlack(slackWebhook, message) { + const jsonData = { text: message }; + const http = new http_client_1.HttpClient(); + await http.postJson(slackWebhook, jsonData); +} +exports.postMessageToSlack = postMessageToSlack; /***/ }), @@ -127,6 +134,7 @@ var __importStar = (this && this.__importStar) || function (mod) { Object.defineProperty(exports, "__esModule", ({ value: true })); const core = __importStar(__nccwpck_require__(2186)); const github = __importStar(__nccwpck_require__(5438)); +const github_1 = __nccwpck_require__(5438); const api_utils_1 = __nccwpck_require__(2430); const version_utils_1 = __nccwpck_require__(1534); async function run() { @@ -140,12 +148,22 @@ async function run() { await api_utils_1.updateTag(sourceTagName, majorTag, octokitClient); core.setOutput('major-tag', majorTag); core.info(`The '${majorTag}' major tag now points to the '${sourceTagName}' tag`); + const slackMessage = `The ${majorTag} tag has been successfully updated for the ${github_1.context.repo.repo} action to include changes from the ${sourceTagName}`; + await reportStatusToSlack(slackMessage); } catch (error) { core.setFailed(error.message); + const slackMessage = `Failed to update a major tag for the ${github_1.context.repo.repo} action`; + await reportStatusToSlack(slackMessage); } } ; +async function reportStatusToSlack(message) { + const slackWebhook = core.getInput('slack-webhook'); + if (slackWebhook) { + await api_utils_1.postMessageToSlack(slackWebhook, message); + } +} run(); diff --git a/package.json b/package.json index b22e3f0..df4ec1c 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "@actions/github": "^4.0.0" }, "devDependencies": { + "@actions/http-client": "^1.0.11", "@types/jest": "^26.0.23", "@types/semver": "^7.3.6", "@vercel/ncc": "^0.28.5", diff --git a/src/api-utils.ts b/src/api-utils.ts index fa2ca01..40cf771 100644 --- a/src/api-utils.ts +++ b/src/api-utils.ts @@ -1,6 +1,7 @@ import * as core from '@actions/core'; import { context } from '@actions/github'; import { GitHub } from '@actions/github/lib/utils'; +import { HttpClient } from '@actions/http-client'; interface GitRef { ref: string; @@ -59,7 +60,7 @@ export async function validateIfReleaseIsPublished( tag, }); - if (foundRelease.prerelease){ + if (foundRelease.prerelease) { throw new Error( `The '${foundRelease.name}' release is marked as pre-release. Updating tags for pre-release is not supported` ); @@ -104,4 +105,10 @@ export async function updateTag( sha: sourceTagSHA }); } +} + +export async function postMessageToSlack(slackWebhook: string, message: string): Promise { + const jsonData = {text: message} + const http = new HttpClient(); + await http.postJson(slackWebhook, jsonData); } \ No newline at end of file diff --git a/src/main.ts b/src/main.ts index 12f36e2..5119ab0 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,6 +1,7 @@ import * as core from '@actions/core'; import * as github from '@actions/github'; -import { updateTag, validateIfReleaseIsPublished } from './api-utils'; +import { context } from '@actions/github'; +import { updateTag, validateIfReleaseIsPublished, postMessageToSlack } from './api-utils'; import { validateSemverVersionFromTag, getMajorTagFromFullTag } from './version-utils'; async function run(): Promise { @@ -18,9 +19,22 @@ async function run(): Promise { core.setOutput('major-tag', majorTag); core.info(`The '${majorTag}' major tag now points to the '${sourceTagName}' tag`); + + const slackMessage = `The ${majorTag} tag has been successfully updated for the ${context.repo.repo} action to include changes from the ${sourceTagName}`; + await reportStatusToSlack(slackMessage); } catch (error) { core.setFailed(error.message); + + const slackMessage = `Failed to update a major tag for the ${context.repo.repo} action`; + await reportStatusToSlack(slackMessage); } }; +async function reportStatusToSlack(message: string): Promise { + const slackWebhook = core.getInput('slack-webhook'); + if (slackWebhook) { + await postMessageToSlack(slackWebhook, message); + } +} + run(); \ No newline at end of file