@tutti-os/nexight-devops 0.5.3 → 0.5.4
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.
- package/README.md +5 -4
- package/dist/cli.js +31 -4
- package/dist/cli.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -48,6 +48,7 @@ nexight-devops ppe-lane status --all
|
|
|
48
48
|
nexight-devops release prepare
|
|
49
49
|
nexight-devops release hotfix
|
|
50
50
|
nexight-devops release approve
|
|
51
|
+
nexight-devops release rollback
|
|
51
52
|
nexight-devops release rollback tutti-server
|
|
52
53
|
```
|
|
53
54
|
|
|
@@ -64,11 +65,11 @@ nexight-devops release rollback tutti-server
|
|
|
64
65
|
- `admin computer log-recall` exposes the lower-level task operations for troubleshooting and recovery.
|
|
65
66
|
- `datafinder` validates access, reads dashboards/reports, runs trusted local JavaScript queries, and exposes fixed reliability queries.
|
|
66
67
|
- `diagnose shared-agent` runs a bounded, read-only CloudWatch playbook that correlates room descriptor results, Owner lease observations, client version, and HTTP failures. It verifies the production AWS account before querying and supports stable `--json` output.
|
|
67
|
-
- `ppe-lane deploy` deploys selected backend repositories and the optional `zk-web/canvas` staging artifact to a PPE lane.
|
|
68
|
-
- `ppe-lane destroy` checks existing lane instances and triggers destroy workflows after a lane-name confirmation.
|
|
69
|
-
- `ppe-lane status` queries AWS Cloud Map for one lane, or all lanes with `--all`.
|
|
68
|
+
- `ppe-lane deploy` deploys selected backend repositories, including `tutti-server`, and the optional `zk-web/canvas` staging artifact to a PPE lane.
|
|
69
|
+
- `ppe-lane destroy` checks existing lane instances and triggers destroy workflows after a lane-name confirmation. `tutti-server` must be selected explicitly for destruction.
|
|
70
|
+
- `ppe-lane status` queries AWS Cloud Map for one lane, or all lanes with `--all`, including `tutti-server`.
|
|
70
71
|
- `release prepare`, `release hotfix`, and `release approve` run the controlled release lifecycle through GitHub Actions and approval issues.
|
|
71
|
-
- `release rollback tutti-server` reads the current production image and up to ten recent Helm deployments directly when local read access to the production cluster is available. Otherwise it retrieves the verified list through GitHub Actions. The selected image is always revalidated and restored by GitHub Actions, followed by health checks. Use `--revision <number> --yes` for scripted selection and confirmation.
|
|
72
|
+
- `release rollback` lets you choose `tutti-server` interactively; `release rollback tutti-server` selects it directly. The command reads the current production image and up to ten recent Helm deployments directly when local read access to the production cluster is available. Otherwise it retrieves the verified list through GitHub Actions. The selected image is always revalidated and restored by GitHub Actions, followed by health checks. Use `--revision <number> --yes` with the explicit repository for scripted selection and confirmation.
|
|
72
73
|
|
|
73
74
|
## Controlled Release
|
|
74
75
|
|
package/dist/cli.js
CHANGED
|
@@ -4018,6 +4018,17 @@ var ppeLaneCanvasTarget = {
|
|
|
4018
4018
|
|
|
4019
4019
|
// src/constants/ppe-lane-repos.ts
|
|
4020
4020
|
var ppeLaneRepos = [
|
|
4021
|
+
{
|
|
4022
|
+
key: "tutti-server",
|
|
4023
|
+
label: "tutti-server",
|
|
4024
|
+
repoFullName: "tutti-lab/tutti-server",
|
|
4025
|
+
deployWorkflowFile: "deploy-lane.yml",
|
|
4026
|
+
destroyWorkflowFile: "destroy-lane.yml",
|
|
4027
|
+
defaultRef: "main",
|
|
4028
|
+
defaultDestroySelection: false,
|
|
4029
|
+
cloudMapServiceId: "srv-izinli73rwxpf2dr",
|
|
4030
|
+
serviceName: "tutti-server"
|
|
4031
|
+
},
|
|
4021
4032
|
{
|
|
4022
4033
|
key: "zk-agent-engine",
|
|
4023
4034
|
label: "zk-agent-engine",
|
|
@@ -4463,7 +4474,11 @@ var runPpeLaneDestroy = async () => {
|
|
|
4463
4474
|
const lane = validatePpeLaneName(await ui.input({ message: t("ppeLane.destroy.enterLane") }));
|
|
4464
4475
|
const selectedKeys = await ui.checkbox({
|
|
4465
4476
|
message: t("ppeLane.destroy.selectRepos"),
|
|
4466
|
-
choices: ppeLaneRepos.map((repo) => ({
|
|
4477
|
+
choices: ppeLaneRepos.map((repo) => ({
|
|
4478
|
+
value: repo.key,
|
|
4479
|
+
name: repo.label,
|
|
4480
|
+
checked: repo.defaultDestroySelection !== false
|
|
4481
|
+
}))
|
|
4467
4482
|
});
|
|
4468
4483
|
if (selectedKeys.length === 0) {
|
|
4469
4484
|
throw new CliError(t("ppeLane.destroy.atLeastOneRepo"), 1);
|
|
@@ -5086,6 +5101,14 @@ import { mkdtemp as mkdtemp3, readFile as readFile3, rm as rm2 } from "fs/promis
|
|
|
5086
5101
|
import { tmpdir } from "os";
|
|
5087
5102
|
import { join as join5 } from "path";
|
|
5088
5103
|
|
|
5104
|
+
// src/constants/rollback-targets.ts
|
|
5105
|
+
var tuttiServerRollbackTarget = {
|
|
5106
|
+
key: "tutti-server",
|
|
5107
|
+
label: "tutti-server",
|
|
5108
|
+
repoFullName: "tutti-lab/tutti-server"
|
|
5109
|
+
};
|
|
5110
|
+
var rollbackTargets = [tuttiServerRollbackTarget];
|
|
5111
|
+
|
|
5089
5112
|
// src/commands/release/rollback-local.ts
|
|
5090
5113
|
var CLUSTER = "arn:aws:eks:us-east-1:250509935467:cluster/nexight-ojo-us-east-1";
|
|
5091
5114
|
var REPOSITORY = "250509935467.dkr.ecr.us-east-1.amazonaws.com/nexight/tutti/tutti-server";
|
|
@@ -5173,7 +5196,7 @@ var fetchLocalRollbackCatalog = async () => {
|
|
|
5173
5196
|
};
|
|
5174
5197
|
|
|
5175
5198
|
// src/commands/release/rollback.ts
|
|
5176
|
-
var REPO =
|
|
5199
|
+
var REPO = tuttiServerRollbackTarget.repoFullName;
|
|
5177
5200
|
var WORKFLOW = "rollback.yml";
|
|
5178
5201
|
var SHA256 = /^sha256:[0-9a-f]{64}$/;
|
|
5179
5202
|
var SINGAPORE_TIME = new Intl.DateTimeFormat("sv-SE", {
|
|
@@ -5341,8 +5364,12 @@ var runTuttiRollback = async (options) => {
|
|
|
5341
5364
|
logger.info(run.htmlUrl);
|
|
5342
5365
|
};
|
|
5343
5366
|
var registerReleaseRollbackCommand = (program) => {
|
|
5344
|
-
program.command("rollback").description("Restore a recent production image").argument("
|
|
5345
|
-
|
|
5367
|
+
program.command("rollback").description("Restore a recent production image").argument("[repository]", "Rollback target; omit to choose interactively").option("--revision <number>", "Select a recent Helm revision without the chooser").option("--yes", "Skip the final confirmation").action(async (repository, options) => {
|
|
5368
|
+
const selected = repository ?? await ui.select({
|
|
5369
|
+
message: "Select a repository to roll back",
|
|
5370
|
+
choices: rollbackTargets.map((target) => ({ name: target.label, value: target.key }))
|
|
5371
|
+
});
|
|
5372
|
+
if (selected !== tuttiServerRollbackTarget.key) {
|
|
5346
5373
|
throw new CliError("Only tutti-server is currently supported", 1);
|
|
5347
5374
|
}
|
|
5348
5375
|
await runTuttiRollback(options);
|