Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 20 additions & 3 deletions src/check-published/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand All @@ -29,11 +29,28 @@ async function getVersionFromNPM(packageName: string): Promise<string> {

export async function main(): Promise<void | boolean> {
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) {
Expand Down
38 changes: 27 additions & 11 deletions src/check-published/slack.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,7 @@ export interface SlackMessage {
];
}

export default async function (serviceName: string, mainVersion: string, npmVersion: string): Promise<void> {
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<void> {
try {
const slackUrl = process.env['SLACK_PUBLISH_MISMATCH'];
assert(slackUrl);
Expand All @@ -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<void> {
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<void> {
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);
}