diff --git a/src/check-published/index.ts b/src/check-published/index.ts index c87c1ef..c143266 100644 --- a/src/check-published/index.ts +++ b/src/check-published/index.ts @@ -7,7 +7,7 @@ import { promisify } from 'node:util'; import { exec } from 'node:child_process'; import { debug } from 'debug'; -import slackPost from './slack'; +import slackPost, { postErrorToSlack } from './slack'; const execAsync = promisify(exec); @@ -29,11 +29,28 @@ async function getVersionFromNPM(packageName: string): Promise { export async function main(): Promise { log('Action starting'); - const mainPackageJson = await getLocalPackageJson('package.json'); + let mainPackageJson: PackageJSON; + try { + mainPackageJson = await getLocalPackageJson('package.json'); + } catch { + const errorMessage = 'Action failed - could not read package.json'; + await postErrorToSlack(errorMessage); + log(errorMessage); + throw new Error(errorMessage); + } + log(`Main package.json - name ${mainPackageJson.name} - version ${mainPackageJson.version}`); // run npm show to get the latest version published - const latestVersion = await getVersionFromNPM(mainPackageJson.name); + let latestVersion: string; + try { + latestVersion = await getVersionFromNPM(mainPackageJson.name); + } catch { + const errorMessage = `Action failed - could not get latest version from npm - name: ${mainPackageJson.name}`; + await postErrorToSlack(errorMessage); + throw new Error(errorMessage); + } + log(`Latest version published - ${latestVersion}`); if (mainPackageJson.version !== latestVersion) { diff --git a/src/check-published/slack.ts b/src/check-published/slack.ts index c2a72e7..6505150 100644 --- a/src/check-published/slack.ts +++ b/src/check-published/slack.ts @@ -16,17 +16,7 @@ export interface SlackMessage { ]; } -export default async function (serviceName: string, mainVersion: string, npmVersion: string): Promise { - const slackMessage: SlackMessage = { - text: `*${serviceName} - missing publish*`, - attachments: [ - { - color: 'danger', - text: `*Details* \n - version in main: *${mainVersion}* \n - npm version published: *${npmVersion}*`, - }, - ], - }; - +async function postSlackMessage(slackMessage: SlackMessage): Promise { try { const slackUrl = process.env['SLACK_PUBLISH_MISMATCH']; assert(slackUrl); @@ -41,3 +31,29 @@ export default async function (serviceName: string, mainVersion: string, npmVers throw new Error(`slack HTTP POST Error: ${String(slackPostError)}`); } } + +export async function postErrorToSlack(errorMessage: string): Promise { + const slackMessage: SlackMessage = { + text: `*Check Published Failure*`, + attachments: [ + { + color: 'danger', + text: `*Details* \n - ${errorMessage}*`, + }, + ], + }; + await postSlackMessage(slackMessage); +} + +export default async function (serviceName: string, mainVersion: string, npmVersion: string): Promise { + const slackMessage: SlackMessage = { + text: `*${serviceName} - missing publish*`, + attachments: [ + { + color: 'danger', + text: `*Details* \n - version in main: *${mainVersion}* \n - npm version published: *${npmVersion}*`, + }, + ], + }; + await postSlackMessage(slackMessage); +}