test: add slack onboarding channel smoke (#77575)

This commit is contained in:
Kevin Lin
2026-05-04 16:51:34 -07:00
committed by GitHub
parent cf1bd30509
commit cb9824d6b4
8 changed files with 46 additions and 8 deletions

View File

@@ -83,15 +83,21 @@ function configureMockModel() {
function assertChannelConfig() {
const channel = process.argv[3];
const token = process.argv[4];
const expectedTokens = process.argv.slice(4);
if (expectedTokens.length === 0) {
throw new Error("assert-channel-config requires at least one expected token");
}
const configPath = path.join(process.env.HOME, ".openclaw", "openclaw.json");
const cfg = readJson(configPath);
const entry = cfg.channels?.[channel];
if (!entry || entry.enabled === false) {
throw new Error(`${channel} was not enabled`);
}
if (!JSON.stringify(entry).includes(token)) {
throw new Error(`${channel} token was not persisted`);
const serializedEntry = JSON.stringify(entry);
for (const token of expectedTokens) {
if (!serializedEntry.includes(token)) {
throw new Error(`${channel} token was not persisted`);
}
}
}

View File

@@ -14,9 +14,9 @@ PACKAGE_TGZ="${OPENCLAW_CURRENT_PACKAGE_TGZ:-}"
CHANNEL="${OPENCLAW_NPM_ONBOARD_CHANNEL:-telegram}"
case "$CHANNEL" in
telegram | discord) ;;
telegram | discord | slack) ;;
*)
echo "OPENCLAW_NPM_ONBOARD_CHANNEL must be telegram or discord, got: $CHANNEL" >&2
echo "OPENCLAW_NPM_ONBOARD_CHANNEL must be telegram, discord, or slack, got: $CHANNEL" >&2
exit 1
;;
esac
@@ -69,10 +69,21 @@ case "$CHANNEL" in
telegram)
CHANNEL_TOKEN="123456:openclaw-npm-onboard-token"
DEP_SENTINEL="grammy"
CHANNEL_ADD_ARGS=(--token "$CHANNEL_TOKEN")
CHANNEL_CONFIG_TOKENS=("$CHANNEL_TOKEN")
;;
discord)
CHANNEL_TOKEN="openclaw-npm-onboard-discord-token"
DEP_SENTINEL="discord-api-types"
CHANNEL_ADD_ARGS=(--token "$CHANNEL_TOKEN")
CHANNEL_CONFIG_TOKENS=("$CHANNEL_TOKEN")
;;
slack)
SLACK_BOT_TOKEN="xoxb-openclaw-npm-onboard-slack-token"
SLACK_APP_TOKEN="xapp-openclaw-npm-onboard-slack-token"
DEP_SENTINEL="@slack/bolt"
CHANNEL_ADD_ARGS=(--bot-token "$SLACK_BOT_TOKEN" --app-token "$SLACK_APP_TOKEN")
CHANNEL_CONFIG_TOKENS=("$SLACK_BOT_TOKEN" "$SLACK_APP_TOKEN")
;;
*)
echo "unsupported channel: $CHANNEL" >&2
@@ -138,8 +149,8 @@ node scripts/e2e/lib/npm-onboard-channel-agent/assertions.mjs configure-mock-mod
openclaw_e2e_assert_dep_absent "$DEP_SENTINEL" "$HOME/.openclaw"
echo "Configuring $CHANNEL..."
openclaw channels add --channel "$CHANNEL" --token "$CHANNEL_TOKEN" >/tmp/openclaw-channel-add.log 2>&1
node scripts/e2e/lib/npm-onboard-channel-agent/assertions.mjs assert-channel-config "$CHANNEL" "$CHANNEL_TOKEN"
openclaw channels add --channel "$CHANNEL" "${CHANNEL_ADD_ARGS[@]}" >/tmp/openclaw-channel-add.log 2>&1
node scripts/e2e/lib/npm-onboard-channel-agent/assertions.mjs assert-channel-config "$CHANNEL" "${CHANNEL_CONFIG_TOKENS[@]}"
echo "Checking status surfaces for $CHANNEL..."
openclaw channels status --json >/tmp/openclaw-channels-status.json 2>/tmp/openclaw-channels-status.err

View File

@@ -181,6 +181,11 @@ export const mainLanes = [
"OPENCLAW_NPM_ONBOARD_CHANNEL=discord OPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:npm-onboard-channel-agent",
{ resources: ["service"], stateScenario: "empty", weight: 3 },
),
npmLane(
"npm-onboard-slack-channel-agent",
"OPENCLAW_NPM_ONBOARD_CHANNEL=slack OPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:npm-onboard-channel-agent",
{ resources: ["service"], stateScenario: "empty", weight: 3 },
),
serviceLane("gateway-network", "OPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:gateway-network"),
serviceLane(
"agents-delete-shared-workspace",
@@ -499,6 +504,11 @@ const releasePathPackageUpdateCoreLanes = [
"OPENCLAW_NPM_ONBOARD_CHANNEL=discord OPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:npm-onboard-channel-agent",
{ resources: ["service"], stateScenario: "empty", weight: 3 },
),
npmLane(
"npm-onboard-slack-channel-agent",
"OPENCLAW_NPM_ONBOARD_CHANNEL=slack OPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:npm-onboard-channel-agent",
{ resources: ["service"], stateScenario: "empty", weight: 3 },
),
npmLane("doctor-switch", "OPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:doctor-switch", {
stateScenario: "empty",
weight: 3,

View File

@@ -33,6 +33,10 @@ const pluginPrereleaseDockerLanes = Object.freeze([
"status-diagnostics",
],
},
{
lane: "npm-onboard-slack-channel-agent",
surfaces: ["package-artifact", "gateway-bootstrap", "status-diagnostics"],
},
{
lane: "doctor-switch",
surfaces: ["package-artifact", "doctor-fix"],