bdy 1.25.11-dev → 1.25.12-dev

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bdy",
3
3
  "preferGlobal": false,
4
- "version": "1.25.11-dev",
4
+ "version": "1.25.12-dev",
5
5
  "type": "commonjs",
6
6
  "license": "MIT",
7
7
  "homepage": "https://buddy.works/docs/cli",
@@ -37,6 +37,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  const output_1 = __importDefault(require("../output"));
40
+ const input_1 = __importDefault(require("../input"));
40
41
  const cliError_1 = __importStar(require("../cliError"));
41
42
  const texts_1 = require("../texts");
42
43
  const pipeline_1 = require("../types/pipeline");
@@ -523,13 +524,64 @@ class OutputPipeline {
523
524
  const width = Number.isFinite(termWidth) && termWidth > 2 ? termWidth - 2 : 25;
524
525
  return output_1.default.getTermKitDimColor(` ${'—'.repeat(width)}`);
525
526
  }
526
- static _runActionsLogsHelp(identifier, runId) {
527
- return `${output_1.default.getTermKitDimColor(' To view action logs run: ')}${output_1.default.getTermKitMutedColor(`bdy pip run logs ${identifier} ${runId} <action-run-id>`)}`;
527
+ // Suggested commands are meant to be run verbatim, also by agents in another
528
+ // directory, so they pin the workspace, project and a non-default context the
529
+ // current command resolved - otherwise they could reach a same-named
530
+ // pipeline in a different project
531
+ static _scopeFlags(workspace, project) {
532
+ const context = input_1.default.contextName();
533
+ return ` -w ${workspace} -p ${project}${context && context !== 'default' ? ` --context ${context}` : ''}`;
528
534
  }
529
- static _jsonActionsLogsHelp(identifier, runId, actionRunId) {
535
+ static _runActionsLogsHelp(identifier, runId, flags) {
536
+ return `${output_1.default.getTermKitDimColor(' To view action logs run: ')}${output_1.default.getTermKitMutedColor(`bdy pip run logs ${identifier} ${runId} <action-run-id>${flags}`)}`;
537
+ }
538
+ // Follow-up commands for the state a run ended in: inspect or retry a
539
+ // failure, approve a waiting action, or keep polling a run still going
540
+ static _runNextCommands(identifier, run, failedLogs, flags) {
541
+ const ref = `${identifier} ${run.runId}`;
542
+ switch (run.status) {
543
+ case pipeline_1.PIPELINE_RUN_STATUS.FAILED:
544
+ case pipeline_1.PIPELINE_RUN_STATUS.TERMINATED:
545
+ return [
546
+ ...(failedLogs
547
+ ? []
548
+ : [`bdy pip run status ${ref}${flags} --failed-logs --no-wait`]),
549
+ `bdy pip run retry ${ref}${flags}`,
550
+ ];
551
+ case pipeline_1.PIPELINE_RUN_STATUS.WAITING_FOR_APPLY: {
552
+ const action = (run.actions || []).find((a) => a.status === pipeline_1.PIPELINE_RUN_STATUS.WAITING_FOR_APPLY);
553
+ return [
554
+ `bdy pip run approve ${ref} ${action?.runId || '<action-run-id>'}${flags}`,
555
+ ];
556
+ }
557
+ case pipeline_1.PIPELINE_RUN_STATUS.INITIAL:
558
+ case pipeline_1.PIPELINE_RUN_STATUS.ENQUEUED:
559
+ case pipeline_1.PIPELINE_RUN_STATUS.INPROGRESS:
560
+ case pipeline_1.PIPELINE_RUN_STATUS.TERMINATING:
561
+ case pipeline_1.PIPELINE_RUN_STATUS.WAITING_FOR_VARIABLES:
562
+ case pipeline_1.PIPELINE_RUN_STATUS.WAITING_FOR_SETTABLE_VARIABLES:
563
+ case pipeline_1.PIPELINE_RUN_STATUS.WAITING_FOR_VT_SESSION:
564
+ return [`bdy pip run status ${ref}${flags} --exit-code`];
565
+ default:
566
+ return [];
567
+ }
568
+ }
569
+ static _runNext(identifier, run, failedLogs, isJson, flags) {
570
+ const commands = this._runNextCommands(identifier, run, failedLogs, flags);
571
+ if (!commands.length)
572
+ return;
573
+ if (isJson) {
574
+ output_1.default.json({ type: 'next', commands });
575
+ return;
576
+ }
577
+ commands.forEach((command) => {
578
+ output_1.default.normal(`${output_1.default.getTermKitDimColor(` ${texts_1.TXT_PIPELINE_RUN_NEXT}`)}${output_1.default.getTermKitMutedColor(command)}`);
579
+ });
580
+ }
581
+ static _jsonActionsLogsHelp(identifier, runId, flags, actionRunId) {
530
582
  if (!actionRunId)
531
583
  actionRunId = '<action-run-id>';
532
- return `To view action logs run: \`bdy pip run logs ${identifier} ${runId} ${actionRunId} --format jsonl\``;
584
+ return `To view action logs run: \`bdy pip run logs ${identifier} ${runId} ${actionRunId}${flags} --format jsonl\``;
533
585
  }
534
586
  static _runDetailsFinished(status, finished, tabs) {
535
587
  if (finished &&
@@ -1179,22 +1231,22 @@ class OutputPipeline {
1179
1231
  static jsonInfo(message) {
1180
1232
  output_1.default.json({ type: 'info', message });
1181
1233
  }
1182
- static jsonAction(identifier, runId, action) {
1234
+ static jsonAction(identifier, runId, action, flags) {
1183
1235
  const a = {
1184
1236
  ...action,
1185
1237
  };
1186
1238
  if (action.runId && !a.logs) {
1187
- a.logs = this._jsonActionsLogsHelp(identifier, runId, action.runId);
1239
+ a.logs = this._jsonActionsLogsHelp(identifier, runId, flags, action.runId);
1188
1240
  }
1189
1241
  output_1.default.json({ type: 'action', action: a });
1190
1242
  }
1191
- static jsonRun(identifier, run) {
1243
+ static jsonRun(identifier, run, flags) {
1192
1244
  const r = {
1193
1245
  ...run,
1194
1246
  };
1195
1247
  (r.actions || []).forEach((a) => {
1196
1248
  if (a.runId && !a.logs) {
1197
- a.logs = this._jsonActionsLogsHelp(identifier, run.runId, a.runId);
1249
+ a.logs = this._jsonActionsLogsHelp(identifier, run.runId, flags, a.runId);
1198
1250
  }
1199
1251
  });
1200
1252
  output_1.default.json({ type: 'run', run: r });
@@ -1203,6 +1255,7 @@ class OutputPipeline {
1203
1255
  output_1.default.json({ type: 'log', log });
1204
1256
  }
1205
1257
  static async _runLogsNonInteractive(client, workspace, project, identifier, pipelineId, runId, runActionId, noWait, isJson, semanticExitCode = false) {
1258
+ const flags = this._scopeFlags(workspace, project);
1206
1259
  let action = null;
1207
1260
  let actionLogsStart = 0;
1208
1261
  let lastActionLogsStart = -1;
@@ -1235,7 +1288,7 @@ class OutputPipeline {
1235
1288
  const draw = (logs) => {
1236
1289
  if (!drawnStart && action) {
1237
1290
  if (isJson) {
1238
- this.jsonAction(identifier, runId, action);
1291
+ this.jsonAction(identifier, runId, action, flags);
1239
1292
  }
1240
1293
  else {
1241
1294
  output_1.default.normal(this._runDetailsHeader());
@@ -1290,7 +1343,7 @@ class OutputPipeline {
1290
1343
  if (logsEnd || (drawnStart && noWait && logs)) {
1291
1344
  if (isJson) {
1292
1345
  if (action)
1293
- this.jsonAction(identifier, runId, action);
1346
+ this.jsonAction(identifier, runId, action, flags);
1294
1347
  }
1295
1348
  else {
1296
1349
  if (logsEnd && action?.outputtedVariables.length) {
@@ -1347,9 +1400,11 @@ class OutputPipeline {
1347
1400
  }, false, semanticExitCode);
1348
1401
  }
1349
1402
  static async _runStatusNonInteractive(client, workspace, project, identifier, pipelineId, runId, noWait, noFollow, isJson, semanticExitCode = false, failedLogs = false) {
1403
+ const flags = this._scopeFlags(workspace, project);
1350
1404
  const finishRun = async (run) => {
1351
1405
  if (failedLogs)
1352
1406
  await this.failedActionLogs(client, workspace, project, pipelineId, run, isJson);
1407
+ this._runNext(identifier, run, failedLogs, isJson, flags);
1353
1408
  this._exitByStatus(isJson, run.status, semanticExitCode);
1354
1409
  };
1355
1410
  let run = null;
@@ -1423,7 +1478,7 @@ class OutputPipeline {
1423
1478
  totalFetchesCount += 1;
1424
1479
  if (!noFollow || noWait) {
1425
1480
  if (isJson)
1426
- this.jsonRun(identifier, run);
1481
+ this.jsonRun(identifier, run, flags);
1427
1482
  else
1428
1483
  draw(run);
1429
1484
  }
@@ -1435,7 +1490,7 @@ class OutputPipeline {
1435
1490
  // Even --no-follow must identify the run before reporting an unknown status.
1436
1491
  if (noFollow && !noWait) {
1437
1492
  if (isJson)
1438
- this.jsonRun(identifier, run);
1493
+ this.jsonRun(identifier, run, flags);
1439
1494
  else
1440
1495
  draw(run);
1441
1496
  }
@@ -1446,7 +1501,7 @@ class OutputPipeline {
1446
1501
  await finishRun(run);
1447
1502
  }, false, semanticExitCode);
1448
1503
  if (isJson) {
1449
- this.jsonRun(identifier, run);
1504
+ this.jsonRun(identifier, run, flags);
1450
1505
  }
1451
1506
  else {
1452
1507
  if (totalFetchesCount > 1 || noFollow) {
@@ -1486,7 +1541,7 @@ class OutputPipeline {
1486
1541
  }
1487
1542
  }
1488
1543
  output_1.default.normal(this._dimLine());
1489
- output_1.default.normal(this._runActionsLogsHelp(identifier, runId));
1544
+ output_1.default.normal(this._runActionsLogsHelp(identifier, runId, flags));
1490
1545
  }
1491
1546
  await finishRun(run);
1492
1547
  }
@@ -21,10 +21,10 @@ exports.OPT_COMMAND_ROUTE_SUBDOMAIN = exports.OPT_COMMAND_ROUTE_TYPE = exports.O
21
21
  exports.DESC_COMMAND_ARTIFACT_COMPOSER = exports.DESC_COMMAND_ARTIFACT_VERSION = exports.ERR_COMMAND_DOMAIN_UNAVAILABLE = exports.OPTION_COMMAND_DOMAIN_IDENTIFIER = exports.ERR_COMMAND_DOMAIN_NO_DOMAINS = exports.TXT_COMMAND_DOMAIN_PROMPT_REQUIRED = exports.TXT_COMMAND_DOMAIN_BUY_SELECT_DOMAIN = exports.TXT_COMMAND_DOMAIN_PROVIDE_PROMPT = exports.ERR_COMMAND_DOMAIN_NOT_FOUND = exports.OPT_COMMAND_DOMAIN_ONLY_AVAILABLE = exports.OPT_COMMAND_DOMAIN_SORT = exports.OPT_COMMAND_DOMAIN_PHRASE = exports.OPT_COMMAND_DOMAIN_BUY_OWNER = exports.OPT_COMMAND_DOMAIN_BUY_TLD = exports.DESC_COMMAND_DOMAIN_GET = exports.DESC_COMMAND_DOMAIN_LIST = exports.DESC_COMMAND_DOMAIN_SEARCH = exports.DESC_COMMAND_DOMAIN_BUY = exports.DESC_COMMAND_DOMAIN = exports.ERR_ROUTE_NO_DEFAULT = exports.ERR_WRONG_ROUTE_TARGET = exports.ERR_COMMAND_ROUTE_NO_TARGET = exports.ERR_COMMAND_ROUTE_TYPE = exports.TXT_COMMAND_ROUTES_NOT_FOUND = exports.TXT_COMMAND_DISTROS_NOT_FOUND = exports.TXT_COMMAND_ROUTE_DELETED = exports.TXT_COMMAND_DISTRO_DELETED = exports.TXT_COMMAND_ROUTE_DELETE_CONFIRM = exports.TXT_COMMAND_DISTRO_DELETE_CONFIRM = exports.ERR_COMMAND_DISTRO_ENABLE_DISABLE = exports.ERR_COMMAND_NO_UPDATE = exports.ERR_COMMAND_DISTRO_NOT_FOUND = exports.ERR_COMMAND_SCOPE = exports.TXT_COMMAND_DISTRO_UPDATED = exports.TXT_COMMAND_ROUTE_UPDATED = exports.TXT_ROUTE_SERVE = exports.TXT_COMMAND_ROUTE_CREATED = exports.TXT_COMMAND_DISTRO_CREATED = exports.ERR_COMMAND_SCOPE_NO_ENVIRONMENT = exports.ERR_COMMAND_SCOPE_NO_PROJECT = exports.OPT_COMMAND_DISTRO_DISABLE = exports.OPT_COMMAND_DISTRO_ENABLE = exports.OPT_COMMAND_DISTRO_AGENT_NOTE = exports.OPT_COMMAND_DISTRO_NOTE = exports.OPT_COMMAND_DISTRO_NAME = exports.OPT_COMMAND_ROUTE_TARGET = exports.OPT_COMMAND_ROUTE_AGENT_NOTE = exports.OPT_COMMAND_ROUTE_NOTE = exports.OPT_COMMAND_ROUTE_PATH = exports.OPT_COMMAND_ROUTE_DOMAIN = void 0;
22
22
  exports.TXT_COMMAND_PROJECT_LINK_NAME = exports.TXT_COMMAND_PROJECT_LINK_SELECT_PROJECT = exports.TXT_COMMAND_PROJECT_LINK_TO = exports.TXT_COMMAND_PROJECT_LINK_EXISTING_DESC = exports.TXT_COMMAND_PROJECT_LINK_EXISTING = exports.TXT_COMMAND_PROJECT_LINK_CREATE_NEW_DESC = exports.TXT_COMMAND_PROJECT_LINK_CREATE_NEW = exports.ERR_COMMAND_PROJECT_LINK_DIR_NOT_DIR = exports.TXT_COMMAND_PROJECT_LINK_GIT_REPO_INITIALIZED = exports.TXT_COMMAND_PROJECT_LINK_GIT_REPO = exports.TXT_COMMAND_PROJECT_LINK_DIR_CONFIRM = exports.TXT_COMMAND_PROJECT_LINK_DIR_LINKED = exports.ERR_COMMAND_PROJECT_LINK_DIR_CREATE = exports.OPT_COMMAND_PROJECT_LINK_TRY_NOW = exports.OPT_COMMAND_PROJECT_LINK_SET_GIT_REMOTE = exports.OPT_COMMAND_PROJECT_LINK_HAS_REMOTE = exports.OPT_COMMAND_PROJECT_LINK_DIRECTORY = exports.OPT_COMMAND_PROJECT_LINK_GIT = exports.OPT_COMMAND_PROJECT_LINK_RELINK = exports.DESC_COMMAND_PROJECT_LINK = exports.DESC_COMMAND_PROJECT_LIST = exports.DESC_COMMAND_PROJECT_GIT = exports.DESC_COMMAND_PROJECT_GIT_CREDENTIAL = exports.DESC_COMMAND_PROJECT = exports.TXT_ARTIFACT_VERSION_DOWNLOAD = exports.TXT_ARTIFACT_PUBLISH = exports.TXT_ARTIFACT_CREATED = exports.TXT_ARTIFACT_VERSION_DELETED = exports.TXT_ARTIFACT_DELETED = exports.ERR_COMMAND_ARTIFACT_TYPE = exports.OPT_COMMAND_ARTIFACT_VERSION = exports.OPT_COMMAND_ARTIFACT_IDENTIFIER = exports.OPT_COMMAND_ARTIFACT_CREATE_IDENTIFIER = exports.OPT_COMMAND_ARTIFACT_NAME = exports.OPT_COMMAND_ARTIFACT_TYPE = exports.DESC_COMMAND_ARTIFACT_CREATE = exports.DESC_COMMAND_ARTIFACT_COMPOSER_PUBLISH = exports.DESC_COMMAND_ARTIFACT_GET = exports.TXT_ARTIFACT_DOCKER_LOGIN_FAILED = exports.TXT_ARTIFACT_DOCKER_LOGIN_SUCCESS = exports.TXT_ARTIFACT_VERSION_DELETE_CONFIRM = exports.TXT_ARTIFACT_DELETE_CONFIRM = exports.DESC_COMMAND_ARTIFACT_DELETE = exports.ERR_COMMAND_ARTIFACT_NO_PROJECTS = exports.DESC_COMMAND_ARTIFACT_VERSION_GET = exports.DESC_COMMAND_ARTIFACT_VERSION_LIST = exports.DESC_COMMAND_ARTIFACT_VERSION_DELETE = exports.DESC_COMMAND_ARTIFACT_DOCKER = exports.DESC_COMMAND_ARTIFACT_DOCKER_LOGIN = exports.DESC_COMMAND_ARTIFACT_LIST = void 0;
23
23
  exports.EXAMPLE_TARGET_EXEC_KILL = exports.EXAMPLE_TARGET_EXEC_STATUS = exports.EXAMPLE_TARGET_EXEC_COMMAND = exports.EXAMPLE_TARGET_DELETE = exports.EXAMPLE_TARGET_UPDATE = exports.EXAMPLE_TARGET_CREATE = exports.EXAMPLE_TARGET_GET = exports.EXAMPLE_TARGET_LIST = exports.EXAMPLE_SANDBOX_SNAPSHOT_LIST = exports.EXAMPLE_SANDBOX_SNAPSHOT_GET = exports.EXAMPLE_SANDBOX_SNAPSHOT_DELETE = exports.EXAMPLE_SANDBOX_SNAPSHOT_CREATE = exports.EXAMPLE_SANDBOX_EXEC_STATUS = exports.EXAMPLE_SANDBOX_EXEC_LOGS = exports.EXAMPLE_SANDBOX_APP_STATUS = exports.EXAMPLE_SANDBOX_APP_STOP = exports.EXAMPLE_SANDBOX_APP_REMOVE = exports.EXAMPLE_SANDBOX_APP_ADD = exports.EXAMPLE_SANDBOX_APP_START = exports.EXAMPLE_SANDBOX_APP_LOGS = exports.EXAMPLE_SANDBOX_EXEC_LIST = exports.EXAMPLE_SANDBOX_APP_LIST = exports.EXAMPLE_SANDBOX_EXEC_KILL = exports.EXAMPLE_SANDBOX_SSH = exports.EXAMPLE_SANDBOX_EXEC_COMMAND = exports.EXAMPLE_TUNNEL_START = exports.EXAMPLE_TUNNEL_TCP = exports.EXAMPLE_TUNNEL_TLS = exports.EXAMPLE_AGENT_TUNNEL_START = exports.EXAMPLE_AGENT_TUNNEL_STATUS = exports.EXAMPLE_AGENT_TUNNEL_REMOVE = exports.EXAMPLE_AGENT_TUNNEL_LIST = exports.EXAMPLE_TUNNEL_HTTP = exports.EXAMPLE_SANDBOX_CREATE = exports.EXAMPLE_DISTRO_CREATE = exports.EXAMPLE_ROUTE_CREATE = exports.EXAMPLE_ROUTE_LIST = exports.EXAMPLE_ROUTE_UPDATE = exports.EXAMPLE_ROUTE_DELETE = exports.EXAMPLE_DISTRO_DELETE = exports.EXAMPLE_ROUTE_GET = exports.EXAMPLE_DISTRO_UPDATE = exports.EXAMPLE_DISTRO_GET = exports.EXAMPLE_DISTRO_LIST = exports.EXAMPLE_SANDBOX_CP = exports.TXT_PROJECT_PAGE_EMPTY = exports.ERR_PROJECT_NO_PROJECTS = exports.TXT_LOGIN_SELECT_PROJECT = exports.TXT_COMMAND_PROJECT_CREATED = exports.TXT_COMMAND_PROJECT_LINK_NOT_FOUND = void 0;
24
- exports.EXAMPLE_PIPELINE_RUN_LIST = exports.EXAMPLE_PIPELINE_RUN_FIND = exports.HELP_PIPELINE_RUN_FIND = exports.TXT_PIPELINE_RUN_FIND_MORE = exports.TXT_PIPELINE_RUN_FIND_SUMMARY = exports.TXT_PIPELINE_RUN_FIND_COLUMNS = exports.ERR_PIPELINE_RUN_FIND_FILTER = exports.ERR_PIPELINE_RUN_FIND_LAST = exports.OPTION_PIPELINE_RUN_FIND_STATUS = exports.OPTION_PIPELINE_RUN_FIND_ARTIFACT = exports.OPTION_PIPELINE_RUN_FIND_ENVIRONMENT = exports.OPTION_PIPELINE_RUN_FIND_FROM_REVISION = exports.OPTION_PIPELINE_RUN_FIND_REVISION = exports.OPTION_PIPELINE_RUN_FIND_PR = exports.OPTION_PIPELINE_RUN_FIND_TAG = exports.OPTION_PIPELINE_RUN_FIND_BRANCH = exports.OPTION_PIPELINE_RUN_FIND_LAST = exports.DESC_COMMAND_PIPELINE_RUN_FIND = exports.EXAMPLE_PIPELINE_LIST = exports.EXAMPLE_PIPELINE_YML = exports.EXAMPLE_PIPELINE_GET = exports.EXAMPLE_PIPELINE_UPDATE = exports.EXAMPLE_PIPELINE_DELETE = exports.EXAMPLE_PIPELINE_CREATE = exports.EXAMPLE_PIPELINE_RUN_CANCEL = exports.EXAMPLE_PIPELINE_RUN_APPLY = exports.EXAMPLE_PIPELINE_RUN_LOGS = exports.HELP_PIPELINE_RUN_LOGS = exports.HELP_PIPELINE_RUN_STATUS = exports.HELP_PIPELINE_RUN_JSONL = exports.EXAMPLE_PIPELINE_RUN_STATUS = exports.HELP_PIPELINE_RUN_FAILED_LOGS = exports.TXT_PIPELINE_FAILED_LOGS_ERROR = exports.TXT_PIPELINE_FAILED_LOGS_EMPTY = exports.ERR_PIPELINE_FAILED_LOGS_COUNT = exports.TXT_PIPELINE_FAILED_LOGS_HEADER = exports.OPTION_PIPELINE_RUN_FAILED_LOGS = exports.FAILED_LOGS_LIMIT = exports.EXAMPLE_PIPELINE_RUN_START = exports.EXAMPLE_SANDBOX_ENDPOINT_LIST = exports.EXAMPLE_SANDBOX_ENDPOINT_GET = exports.EXAMPLE_SANDBOX_ENDPOINT_DELETE = exports.EXAMPLE_SANDBOX_ENDPOINT_CREATE = exports.EXAMPLE_ENVIRONMENT_DELETE = exports.EXAMPLE_ENVIRONMENT_UPDATE = exports.EXAMPLE_ENVIRONMENT_CREATE = exports.EXAMPLE_ENVIRONMENT_GET = exports.EXAMPLE_ENVIRONMENT_LIST = exports.EXAMPLE_TARGET_EXEC_LOGS = exports.EXAMPLE_TARGET_EXEC_LIST = void 0;
25
- exports.ERR_YAML_ITEM_MISSING = exports.ERR_YAML_MUST_BE = exports.ERR_YAML_PIPELINE_NOT_OBJECT = exports.ERR_YAML_EMPTY_ARRAY = exports.ERR_YAML_PLAIN_OBJECT = exports.ERR_YAML_NOT_ARRAY = exports.ERR_YAML_PARSE = exports.ERR_YAML_VALIDATE_FAILED_COUNT = exports.TXT_YAML_VALIDATE_ALL_PASS = exports.ERR_YAML_VALIDATE_FAILED = exports.ERR_YAML_VALIDATE_FILE_NOT_FOUND = exports.OPTION_YAML_VALIDATE_FILE = exports.DESC_COMMAND_YAML_VALIDATE = exports.DESC_COMMAND_YAML_ACTIONS_INFO = exports.DESC_COMMAND_YAML_ACTIONS_LIST = exports.DESC_COMMAND_YAML_ACTIONS = exports.DESC_COMMAND_YAML_PIPELINE = exports.DESC_COMMAND_YAML = exports.TXT_ACTION_SUGGESTED_FROM_REPO = exports.TXT_ACTION_USE_LIST = exports.TXT_ACTION_DID_YOU_MEAN = exports.ERR_ACTION_SEARCH_NO_RESULTS = exports.ERR_ACTION_NOT_FOUND = exports.OPTION_ACTION_TYPE = exports.OPTION_ACTION_SEARCH = exports.EXAMPLE_YAML_VALIDATE = exports.EXAMPLE_YAML_ACTIONS_INFO = exports.EXAMPLE_YAML_ACTIONS_LIST = exports.EXAMPLE_YAML_PIPELINE = exports.EXAMPLE_CRAWL_LINK = exports.EXAMPLE_CRAWL_RUN = exports.EXAMPLE_TESTS_CAPTURE = exports.EXAMPLE_TESTS_VISUAL_SESSION_CLOSE = exports.EXAMPLE_TESTS_VISUAL_SESSION_CREATE = exports.EXAMPLE_TESTS_VISUAL_LINK = exports.EXAMPLE_TESTS_VISUAL_UPLOAD = exports.EXAMPLE_TESTS_VISUAL_SETUP = exports.EXAMPLE_TESTS_UNIT_LINK = exports.EXAMPLE_TESTS_UNIT_UPLOAD = exports.EXAMPLE_ARTIFACT_VERSION_DELETE = exports.EXAMPLE_ARTIFACT_VERSION_GET = exports.EXAMPLE_ARTIFACT_VERSION_LIST = exports.EXAMPLE_ARTIFACT_CREATE = exports.EXAMPLE_ARTIFACT_DELETE = exports.EXAMPLE_ARTIFACT_DOWNLOAD = exports.EXAMPLE_ARTIFACT_PUBLISH = exports.EXAMPLE_ARTIFACT_COMPOSER_PUBLISH = exports.EXAMPLE_ARTIFACT_VERSION_CREATE = exports.EXAMPLE_PIPELINE_RUN_RETRY = exports.HELP_PIPELINE_RUN_RETRY = void 0;
26
- exports.ERR_CONTEXT_API = exports.ERR_CONTEXT_PROJECT = exports.ERR_CONTEXT_SOURCE = exports.ERR_CONTEXT_NAME = exports.ERR_CONTEXT_EXISTS = exports.ERR_CONTEXT_RESERVED = exports.ERR_CONTEXT_UNKNOWN = exports.TXT_CONTEXT_LINK_HINT = exports.TXT_CONTEXT_GIT_HINT = exports.TXT_CONTEXT_HINT = exports.OPTION_CONTEXT_API = exports.OPTION_CONTEXT_TOKEN = exports.OPTION_CONTEXT_REMOTE = exports.OPTION_CONTEXT_GIT = exports.OPTION_CONTEXT_LINK = exports.OPTION_CONTEXT_NAME = exports.DESC_CONTEXT_REMOVE = exports.DESC_CONTEXT_USE = exports.DESC_CONTEXT_SHOW = exports.DESC_CONTEXT_LIST = exports.DESC_CONTEXT_ADD = exports.DESC_CONTEXT = exports.OPTION_CONTEXT = exports.HELP_AGENT_STATUS_JSON = exports.HELP_SANDBOX_APP_ADD_JSON = exports.EXAMPLE_CONFIG_GET_TUNNELS = exports.EXAMPLE_CONFIG_GET_TUNNEL = exports.HELP_TARGET_EXEC_LOGS_JSONL = exports.HELP_SANDBOX_EXEC_COMMAND_JSONL = exports.HELP_SANDBOX_EXEC_JSONL = exports.HELP_TARGET_EXEC_COMMAND = exports.HELP_TARGET_EXEC_STATUS = exports.HELP_SANDBOX_EXEC_STATUS = exports.HELP_API_INFO_JSON = exports.HELP_DOMAIN_SEARCH_JSON = exports.HELP_YAML_VALIDATE_JSON = exports.EXAMPLE_AGENT_TAGS_GET = exports.EXAMPLE_AGENT_PROXY_STATUS = exports.EXAMPLE_AGENT_TARGET_STATUS = exports.EXAMPLE_AGENT_VERSION = exports.EXAMPLE_AGENT_STATUS = exports.EXAMPLE_DOMAIN_SEARCH = exports.EXAMPLE_API_LIST = exports.EXAMPLE_API_INFO = exports.ERR_API_SCHEMA_NOT_FOUND = exports.EXAMPLE_SANDBOX_LOGS = exports.ERR_YAML_SCHEMA_READ_FAILED = exports.ERR_YAML_SCHEMA_FETCH_FAILED = exports.TXT_YAML_UNKNOWN_TOP_LEVEL_KEYS = exports.ERR_YAML_ITEM_UNKNOWN = void 0;
27
- exports.HELP_CONTEXT_REMOVE = exports.HELP_CONTEXT_USE = exports.HELP_CONTEXT_SHOW = exports.HELP_CONTEXT_LIST = exports.HELP_CONTEXT_ADD = exports.EXAMPLE_CONTEXT_REMOVE = exports.EXAMPLE_CONTEXT_USE = exports.EXAMPLE_CONTEXT_SHOW = exports.EXAMPLE_CONTEXT_LIST = exports.EXAMPLE_CONTEXT_ADD = exports.TXT_CONTEXT_TOKEN_MISSING = exports.TXT_CONTEXT_TOKEN_AVAILABLE = exports.TXT_CONTEXT_TOKEN_LABEL = exports.TXT_CONTEXT_REMOTE_LABEL = exports.TXT_CONTEXT_API_LABEL = exports.TXT_CONTEXT_PROJECT_LABEL = exports.TXT_CONTEXT_WORKSPACE_LABEL = exports.TXT_CONTEXT_SOURCE_LABEL = exports.TXT_CONTEXT_LABEL = exports.TXT_CONTEXT_REMOVE_CONFIRM = exports.ERR_CONTEXT_GIT_FAILED = exports.ERR_CONTEXT_GIT_TIMEOUT = exports.TXT_CONTEXT_PROJECT_HINT = exports.TXT_CONTEXT_WORKSPACE_HINT = exports.HELP_CONTEXT = exports.TXT_CONTEXT_REMOVED = exports.TXT_CONTEXT_ACTIVE = exports.TXT_CONTEXT_SAVED = exports.ERR_CONTEXT_LINK_INVALID = exports.ERR_CONTEXT_LINK_MISSING = exports.ERR_CONTEXT_GIT_URL = exports.ERR_CONTEXT_GIT_REMOTE = exports.ERR_CONTEXT_GIT_REPO = exports.ERR_CONTEXT_GIT_MISSING = void 0;
24
+ exports.EXAMPLE_PIPELINE_RUN_FIND = exports.HELP_PIPELINE_RUN_FIND = exports.TXT_PIPELINE_RUN_FIND_MORE = exports.TXT_PIPELINE_RUN_FIND_SUMMARY = exports.TXT_PIPELINE_RUN_FIND_COLUMNS = exports.ERR_PIPELINE_RUN_FIND_FILTER = exports.ERR_PIPELINE_RUN_FIND_LAST = exports.OPTION_PIPELINE_RUN_FIND_STATUS = exports.OPTION_PIPELINE_RUN_FIND_ARTIFACT = exports.OPTION_PIPELINE_RUN_FIND_ENVIRONMENT = exports.OPTION_PIPELINE_RUN_FIND_FROM_REVISION = exports.OPTION_PIPELINE_RUN_FIND_REVISION = exports.OPTION_PIPELINE_RUN_FIND_PR = exports.OPTION_PIPELINE_RUN_FIND_TAG = exports.OPTION_PIPELINE_RUN_FIND_BRANCH = exports.OPTION_PIPELINE_RUN_FIND_LAST = exports.DESC_COMMAND_PIPELINE_RUN_FIND = exports.EXAMPLE_PIPELINE_LIST = exports.EXAMPLE_PIPELINE_YML = exports.EXAMPLE_PIPELINE_GET = exports.EXAMPLE_PIPELINE_UPDATE = exports.EXAMPLE_PIPELINE_DELETE = exports.EXAMPLE_PIPELINE_CREATE = exports.EXAMPLE_PIPELINE_RUN_CANCEL = exports.EXAMPLE_PIPELINE_RUN_APPLY = exports.EXAMPLE_PIPELINE_RUN_LOGS = exports.HELP_PIPELINE_RUN_LOGS = exports.HELP_PIPELINE_RUN_STATUS = exports.TXT_PIPELINE_RUN_NEXT = exports.HELP_PIPELINE_RUN_JSONL = exports.EXAMPLE_PIPELINE_RUN_STATUS = exports.HELP_PIPELINE_RUN_FAILED_LOGS = exports.TXT_PIPELINE_FAILED_LOGS_ERROR = exports.TXT_PIPELINE_FAILED_LOGS_EMPTY = exports.ERR_PIPELINE_FAILED_LOGS_COUNT = exports.TXT_PIPELINE_FAILED_LOGS_HEADER = exports.OPTION_PIPELINE_RUN_FAILED_LOGS = exports.FAILED_LOGS_LIMIT = exports.EXAMPLE_PIPELINE_RUN_START = exports.EXAMPLE_SANDBOX_ENDPOINT_LIST = exports.EXAMPLE_SANDBOX_ENDPOINT_GET = exports.EXAMPLE_SANDBOX_ENDPOINT_DELETE = exports.EXAMPLE_SANDBOX_ENDPOINT_CREATE = exports.EXAMPLE_ENVIRONMENT_DELETE = exports.EXAMPLE_ENVIRONMENT_UPDATE = exports.EXAMPLE_ENVIRONMENT_CREATE = exports.EXAMPLE_ENVIRONMENT_GET = exports.EXAMPLE_ENVIRONMENT_LIST = exports.EXAMPLE_TARGET_EXEC_LOGS = exports.EXAMPLE_TARGET_EXEC_LIST = void 0;
25
+ exports.ERR_YAML_MUST_BE = exports.ERR_YAML_PIPELINE_NOT_OBJECT = exports.ERR_YAML_EMPTY_ARRAY = exports.ERR_YAML_PLAIN_OBJECT = exports.ERR_YAML_NOT_ARRAY = exports.ERR_YAML_PARSE = exports.ERR_YAML_VALIDATE_FAILED_COUNT = exports.TXT_YAML_VALIDATE_ALL_PASS = exports.ERR_YAML_VALIDATE_FAILED = exports.ERR_YAML_VALIDATE_FILE_NOT_FOUND = exports.OPTION_YAML_VALIDATE_FILE = exports.DESC_COMMAND_YAML_VALIDATE = exports.DESC_COMMAND_YAML_ACTIONS_INFO = exports.DESC_COMMAND_YAML_ACTIONS_LIST = exports.DESC_COMMAND_YAML_ACTIONS = exports.DESC_COMMAND_YAML_PIPELINE = exports.DESC_COMMAND_YAML = exports.TXT_ACTION_SUGGESTED_FROM_REPO = exports.TXT_ACTION_USE_LIST = exports.TXT_ACTION_DID_YOU_MEAN = exports.ERR_ACTION_SEARCH_NO_RESULTS = exports.ERR_ACTION_NOT_FOUND = exports.OPTION_ACTION_TYPE = exports.OPTION_ACTION_SEARCH = exports.EXAMPLE_YAML_VALIDATE = exports.EXAMPLE_YAML_ACTIONS_INFO = exports.EXAMPLE_YAML_ACTIONS_LIST = exports.EXAMPLE_YAML_PIPELINE = exports.EXAMPLE_CRAWL_LINK = exports.EXAMPLE_CRAWL_RUN = exports.EXAMPLE_TESTS_CAPTURE = exports.EXAMPLE_TESTS_VISUAL_SESSION_CLOSE = exports.EXAMPLE_TESTS_VISUAL_SESSION_CREATE = exports.EXAMPLE_TESTS_VISUAL_LINK = exports.EXAMPLE_TESTS_VISUAL_UPLOAD = exports.EXAMPLE_TESTS_VISUAL_SETUP = exports.EXAMPLE_TESTS_UNIT_LINK = exports.EXAMPLE_TESTS_UNIT_UPLOAD = exports.EXAMPLE_ARTIFACT_VERSION_DELETE = exports.EXAMPLE_ARTIFACT_VERSION_GET = exports.EXAMPLE_ARTIFACT_VERSION_LIST = exports.EXAMPLE_ARTIFACT_CREATE = exports.EXAMPLE_ARTIFACT_DELETE = exports.EXAMPLE_ARTIFACT_DOWNLOAD = exports.EXAMPLE_ARTIFACT_PUBLISH = exports.EXAMPLE_ARTIFACT_COMPOSER_PUBLISH = exports.EXAMPLE_ARTIFACT_VERSION_CREATE = exports.EXAMPLE_PIPELINE_RUN_RETRY = exports.HELP_PIPELINE_RUN_RETRY = exports.EXAMPLE_PIPELINE_RUN_LIST = void 0;
26
+ exports.ERR_CONTEXT_PROJECT = exports.ERR_CONTEXT_SOURCE = exports.ERR_CONTEXT_NAME = exports.ERR_CONTEXT_EXISTS = exports.ERR_CONTEXT_RESERVED = exports.ERR_CONTEXT_UNKNOWN = exports.TXT_CONTEXT_LINK_HINT = exports.TXT_CONTEXT_GIT_HINT = exports.TXT_CONTEXT_HINT = exports.OPTION_CONTEXT_API = exports.OPTION_CONTEXT_TOKEN = exports.OPTION_CONTEXT_REMOTE = exports.OPTION_CONTEXT_GIT = exports.OPTION_CONTEXT_LINK = exports.OPTION_CONTEXT_NAME = exports.DESC_CONTEXT_REMOVE = exports.DESC_CONTEXT_USE = exports.DESC_CONTEXT_SHOW = exports.DESC_CONTEXT_LIST = exports.DESC_CONTEXT_ADD = exports.DESC_CONTEXT = exports.OPTION_CONTEXT = exports.HELP_AGENT_STATUS_JSON = exports.HELP_SANDBOX_APP_ADD_JSON = exports.EXAMPLE_CONFIG_GET_TUNNELS = exports.EXAMPLE_CONFIG_GET_TUNNEL = exports.HELP_TARGET_EXEC_LOGS_JSONL = exports.HELP_SANDBOX_EXEC_COMMAND_JSONL = exports.HELP_SANDBOX_EXEC_JSONL = exports.HELP_TARGET_EXEC_COMMAND = exports.HELP_TARGET_EXEC_STATUS = exports.HELP_SANDBOX_EXEC_STATUS = exports.HELP_API_INFO_JSON = exports.HELP_DOMAIN_SEARCH_JSON = exports.HELP_YAML_VALIDATE_JSON = exports.EXAMPLE_AGENT_TAGS_GET = exports.EXAMPLE_AGENT_PROXY_STATUS = exports.EXAMPLE_AGENT_TARGET_STATUS = exports.EXAMPLE_AGENT_VERSION = exports.EXAMPLE_AGENT_STATUS = exports.EXAMPLE_DOMAIN_SEARCH = exports.EXAMPLE_API_LIST = exports.EXAMPLE_API_INFO = exports.ERR_API_SCHEMA_NOT_FOUND = exports.EXAMPLE_SANDBOX_LOGS = exports.ERR_YAML_SCHEMA_READ_FAILED = exports.ERR_YAML_SCHEMA_FETCH_FAILED = exports.TXT_YAML_UNKNOWN_TOP_LEVEL_KEYS = exports.ERR_YAML_ITEM_UNKNOWN = exports.ERR_YAML_ITEM_MISSING = void 0;
27
+ exports.HELP_CONTEXT_REMOVE = exports.HELP_CONTEXT_USE = exports.HELP_CONTEXT_SHOW = exports.HELP_CONTEXT_LIST = exports.HELP_CONTEXT_ADD = exports.EXAMPLE_CONTEXT_REMOVE = exports.EXAMPLE_CONTEXT_USE = exports.EXAMPLE_CONTEXT_SHOW = exports.EXAMPLE_CONTEXT_LIST = exports.EXAMPLE_CONTEXT_ADD = exports.TXT_CONTEXT_TOKEN_MISSING = exports.TXT_CONTEXT_TOKEN_AVAILABLE = exports.TXT_CONTEXT_TOKEN_LABEL = exports.TXT_CONTEXT_REMOTE_LABEL = exports.TXT_CONTEXT_API_LABEL = exports.TXT_CONTEXT_PROJECT_LABEL = exports.TXT_CONTEXT_WORKSPACE_LABEL = exports.TXT_CONTEXT_SOURCE_LABEL = exports.TXT_CONTEXT_LABEL = exports.TXT_CONTEXT_REMOVE_CONFIRM = exports.ERR_CONTEXT_GIT_FAILED = exports.ERR_CONTEXT_GIT_TIMEOUT = exports.TXT_CONTEXT_PROJECT_HINT = exports.TXT_CONTEXT_WORKSPACE_HINT = exports.HELP_CONTEXT = exports.TXT_CONTEXT_REMOVED = exports.TXT_CONTEXT_ACTIVE = exports.TXT_CONTEXT_SAVED = exports.ERR_CONTEXT_LINK_INVALID = exports.ERR_CONTEXT_LINK_MISSING = exports.ERR_CONTEXT_GIT_URL = exports.ERR_CONTEXT_GIT_REMOTE = exports.ERR_CONTEXT_GIT_REPO = exports.ERR_CONTEXT_GIT_MISSING = exports.ERR_CONTEXT_API = void 0;
28
28
  const utils_1 = require("./utils");
29
29
  exports.ERR_CONFIRM_REQUIRED = 'Confirmation is required in non-interactive mode';
30
30
  exports.TXT_CONFIRM_FORCE_HINT = 'Rerun with --force to perform this operation without prompting.';
@@ -523,6 +523,7 @@ exports.DISCOVERY_TIPS = [
523
523
  'Human-readable identifiers and numeric IDs are not interchangeable. Check the argument description.',
524
524
  "Inspect YAML schemas with 'bdy yaml pipeline' and 'bdy yaml actions info <type>'.",
525
525
  "Find REST operations with 'bdy api list' and inspect them with 'bdy api info <method> <url>'.",
526
+ "Pipeline runs: 'bdy pip get' shows the last run status, 'bdy pip run find' locates a run by branch/PR/revision/status, and 'bdy pip run status <pipeline> <run-id> --exit-code --failed-logs' waits and explains a failure. To deploy and verify in one call use 'bdy pip run start <pipeline> -e <environment> -a <artifact:version> --exit-code'. Run commands end with suggested next commands (JSONL type 'next').",
526
527
  'Check each command for supported output formats: json and jsonl are different; not every command supports them.',
527
528
  'required_scopes: null means undocumented or dynamic; [] means explicitly no token scopes required. Token scopes are separate from the --scope resource option.',
528
529
  "Use 'bdy discover' for an index. Selecting a command without subcommands returns full details automatically; use --full for a whole subtree. Aliases are accepted.",
@@ -2280,6 +2281,10 @@ exports.EXAMPLE_PIPELINE_RUN_START = [
2280
2281
  description: 'run pipeline in given environment with specific artifact version',
2281
2282
  command: 'bdy pip run start pipeline-identifier --environment staging --artifact my_app:1.2.3',
2282
2283
  },
2284
+ {
2285
+ description: 'deploy an artifact version to an environment, wait for the result and exit 0 only when it succeeded',
2286
+ command: 'bdy pip run start pipeline-identifier -e production -a my_app:1.2.3 --exit-code --no-follow --failed-logs',
2287
+ },
2283
2288
  {
2284
2289
  description: 'run pipeline and output only final jsonl',
2285
2290
  command: 'bdy pip run start pipeline-identifier --no-follow --format jsonl',
@@ -2321,7 +2326,7 @@ exports.EXAMPLE_PIPELINE_RUN_STATUS = [
2321
2326
  command: 'bdy pip run status pipeline-identifier run-id --exit-code --no-wait',
2322
2327
  },
2323
2328
  {
2324
- description: 'wait for completion and return its semantic exit code',
2329
+ description: 'wait for completion and return its semantic exit code (run-id can come from executions[0].id of bdy pip run find)',
2325
2330
  command: 'bdy pip run status pipeline-identifier run-id --exit-code --no-follow',
2326
2331
  },
2327
2332
  {
@@ -2355,9 +2360,19 @@ WITH --exit-code:
2355
2360
  Command errors keep their error record and exit 2 or 3.
2356
2361
  Without --exit-code, existing exit codes are unchanged.
2357
2362
  `;
2363
+ exports.TXT_PIPELINE_RUN_NEXT = 'Next: ';
2358
2364
  exports.HELP_PIPELINE_RUN_STATUS = `${exports.HELP_PIPELINE_RUN_JSONL}${HELP_PIPELINE_RUN_EXIT_CODE}
2359
2365
  Exit codes describe the resulting pipeline run, including after start/retry/cancel/approve.
2360
2366
  --no-follow hides intermediate changes but still waits.
2367
+
2368
+ NEXT STEPS:
2369
+ A run that ends FAILED or TERMINATED, waits for approval, or is still in progress
2370
+ is followed by suggested commands: "Next:" lines in text, and in JSONL one record
2371
+ right before the exit record:
2372
+ {"type": "next", "commands": ["bdy pip run retry pipeline-identifier run-id -w workspace -p project"]}
2373
+ Commands carry -w, -p and a non-default --context resolved by this command, so
2374
+ they can be run verbatim from any directory.
2375
+ A successful, skipped or not executed run has no next step.
2361
2376
  `;
2362
2377
  exports.HELP_PIPELINE_RUN_LOGS = `${exports.HELP_PIPELINE_RUN_JSONL}${HELP_PIPELINE_RUN_EXIT_CODE}
2363
2378
  Exit codes describe the selected action execution (action-run-id).
@@ -2535,6 +2550,10 @@ exports.EXAMPLE_PIPELINE_RUN_FIND = [
2535
2550
  description: 'find pull request runs as JSON',
2536
2551
  command: 'bdy pip run find my-pipeline --pr 123 --format json',
2537
2552
  },
2553
+ {
2554
+ description: 'find the newest run for a branch; pass executions[0].id to bdy pip run status',
2555
+ command: 'bdy pip run find my-pipeline --branch main --format json',
2556
+ },
2538
2557
  {
2539
2558
  description: 'find runs for an artifact in an environment without a repository filter',
2540
2559
  command: 'bdy pip run find my-pipeline --environment staging --artifact my-app:1.2.3',
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bdy",
3
3
  "preferGlobal": false,
4
- "version": "1.25.11-dev",
4
+ "version": "1.25.12-dev",
5
5
  "type": "commonjs",
6
6
  "license": "MIT",
7
7
  "homepage": "https://buddy.works/docs/cli",