mirror of
https://github.com/nexu-io/open-design.git
synced 2026-09-20 06:15:06 +08:00
66 lines
2.5 KiB
TypeScript
66 lines
2.5 KiB
TypeScript
import { appendFileSync } from "node:fs";
|
|
|
|
import { decodeReleaseFeishuBot } from "./lib/feishu/client.ts";
|
|
import {
|
|
buildReleaseFeishuCard,
|
|
loadReleaseNotificationDetails,
|
|
type ReleaseNotificationInput,
|
|
isNotificationReleaseChannel,
|
|
} from "./lib/feishu/release.ts";
|
|
import {
|
|
createFeishuSignedEnvelope,
|
|
optionalEnv,
|
|
postFeishuWebhook,
|
|
} from "./lib/feishu/client.ts";
|
|
|
|
function summary(line: string): void {
|
|
const path = optionalEnv("GITHUB_STEP_SUMMARY");
|
|
if (path.length > 0) appendFileSync(path, `${line}\n`, "utf8");
|
|
console.log(line);
|
|
}
|
|
|
|
const bot = decodeReleaseFeishuBot(optionalEnv("RELEASE_FEISHU_BOT"));
|
|
if (bot == null) {
|
|
summary("Feishu: not configured");
|
|
} else {
|
|
const channel = optionalEnv("RELEASE_CHANNEL");
|
|
if (!isNotificationReleaseChannel(channel)) {
|
|
throw new Error(`unsupported release notification channel: ${channel}`);
|
|
}
|
|
const input: ReleaseNotificationInput = {
|
|
activationCompletedAt: optionalEnv("RELEASE_ACTIVATION_COMPLETED_AT"),
|
|
actor: optionalEnv("RELEASE_ACTOR"),
|
|
branch: optionalEnv("RELEASE_BRANCH"),
|
|
channel,
|
|
commit: optionalEnv("RELEASE_COMMIT"),
|
|
eventName: optionalEnv("RELEASE_EVENT_NAME"),
|
|
macArm64Smoke: optionalEnv("RELEASE_MAC_ARM64_SMOKE"),
|
|
macArm64Url: optionalEnv("RELEASE_MAC_ARM64_URL"),
|
|
macX64Smoke: optionalEnv("RELEASE_MAC_X64_SMOKE"),
|
|
macX64Url: optionalEnv("RELEASE_MAC_X64_URL"),
|
|
metadataUrl: optionalEnv("RELEASE_METADATA_URL"),
|
|
previousCommit: optionalEnv("RELEASE_PREVIOUS_COMMIT"),
|
|
releaseMode: optionalEnv("RELEASE_MODE", "publish"),
|
|
releaseResult: optionalEnv("RELEASE_RESULT", "success"),
|
|
releaseState: optionalEnv("RELEASE_STATE", "complete"),
|
|
repository: optionalEnv("RELEASE_REPOSITORY"),
|
|
runAttempt: optionalEnv("RELEASE_RUN_ATTEMPT"),
|
|
runNumber: optionalEnv("RELEASE_RUN_NUMBER"),
|
|
runUrl: optionalEnv("RELEASE_RUN_URL"),
|
|
stream: optionalEnv("RELEASE_NOTIFICATION_STREAM", "release"),
|
|
version: optionalEnv("RELEASE_VERSION"),
|
|
winX64Smoke: optionalEnv("RELEASE_WIN_X64_SMOKE"),
|
|
winX64Url: optionalEnv("RELEASE_WIN_X64_URL"),
|
|
triggeringActor: optionalEnv("RELEASE_TRIGGERING_ACTOR"),
|
|
workflowName: optionalEnv("RELEASE_WORKFLOW_NAME"),
|
|
};
|
|
const details = await loadReleaseNotificationDetails(
|
|
input,
|
|
fetch,
|
|
optionalEnv("RELEASE_GITHUB_TOKEN"),
|
|
);
|
|
const card = buildReleaseFeishuCard(input, details);
|
|
await postFeishuWebhook(bot.webhook, createFeishuSignedEnvelope(card, bot.signSecret));
|
|
summary(`Feishu: delivered ${channel} ${input.version || "validation"}`);
|
|
}
|