@exabugs/dynamodb-client 1.18.0 → 1.20.0
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/CHANGELOG.md +22 -0
- package/README.md +1 -1
- package/bin/dynamodb-system-change.js +6 -0
- package/dist/integrations/react-admin/components/Alerts/AlertsList.d.ts +18 -0
- package/dist/integrations/react-admin/components/Alerts/AlertsList.d.ts.map +1 -0
- package/dist/integrations/react-admin/components/Alerts/AlertsList.js +34 -0
- package/dist/integrations/react-admin/components/Alerts/AlertsList.js.map +1 -0
- package/dist/integrations/react-admin/components/Alerts/AlertsShow.d.ts +10 -0
- package/dist/integrations/react-admin/components/Alerts/AlertsShow.d.ts.map +1 -0
- package/dist/integrations/react-admin/components/Alerts/AlertsShow.js +24 -0
- package/dist/integrations/react-admin/components/Alerts/AlertsShow.js.map +1 -0
- package/dist/integrations/react-admin/components/Alerts/alertsResource.d.ts +18 -0
- package/dist/integrations/react-admin/components/Alerts/alertsResource.d.ts.map +1 -0
- package/dist/integrations/react-admin/components/Alerts/alertsResource.js +19 -0
- package/dist/integrations/react-admin/components/Alerts/alertsResource.js.map +1 -0
- package/dist/integrations/react-admin/components/Alerts/alertsView.d.ts +51 -0
- package/dist/integrations/react-admin/components/Alerts/alertsView.d.ts.map +1 -0
- package/dist/integrations/react-admin/components/Alerts/alertsView.js +35 -0
- package/dist/integrations/react-admin/components/Alerts/alertsView.js.map +1 -0
- package/dist/integrations/react-admin/components/Alerts/index.d.ts +8 -0
- package/dist/integrations/react-admin/components/Alerts/index.d.ts.map +1 -0
- package/dist/integrations/react-admin/components/Alerts/index.js +5 -0
- package/dist/integrations/react-admin/components/Alerts/index.js.map +1 -0
- package/dist/integrations/react-admin/components/CloudWatchLog/cloudWatchLogUrl.d.ts +16 -0
- package/dist/integrations/react-admin/components/CloudWatchLog/cloudWatchLogUrl.d.ts.map +1 -1
- package/dist/integrations/react-admin/components/CloudWatchLog/cloudWatchLogUrl.js +27 -3
- package/dist/integrations/react-admin/components/CloudWatchLog/cloudWatchLogUrl.js.map +1 -1
- package/dist/integrations/react-admin/components/CloudWatchLog/index.d.ts +2 -2
- package/dist/integrations/react-admin/components/CloudWatchLog/index.d.ts.map +1 -1
- package/dist/integrations/react-admin/components/CloudWatchLog/index.js +1 -1
- package/dist/integrations/react-admin/components/CloudWatchLog/index.js.map +1 -1
- package/dist/integrations/react-admin/components/SystemChanges/SystemChangesList.d.ts +29 -0
- package/dist/integrations/react-admin/components/SystemChanges/SystemChangesList.d.ts.map +1 -0
- package/dist/integrations/react-admin/components/SystemChanges/SystemChangesList.js +38 -0
- package/dist/integrations/react-admin/components/SystemChanges/SystemChangesList.js.map +1 -0
- package/dist/integrations/react-admin/components/SystemChanges/SystemChangesShow.d.ts +9 -0
- package/dist/integrations/react-admin/components/SystemChanges/SystemChangesShow.d.ts.map +1 -0
- package/dist/integrations/react-admin/components/SystemChanges/SystemChangesShow.js +50 -0
- package/dist/integrations/react-admin/components/SystemChanges/SystemChangesShow.js.map +1 -0
- package/dist/integrations/react-admin/components/SystemChanges/index.d.ts +8 -0
- package/dist/integrations/react-admin/components/SystemChanges/index.d.ts.map +1 -0
- package/dist/integrations/react-admin/components/SystemChanges/index.js +5 -0
- package/dist/integrations/react-admin/components/SystemChanges/index.js.map +1 -0
- package/dist/integrations/react-admin/components/SystemChanges/systemChangesResource.d.ts +19 -0
- package/dist/integrations/react-admin/components/SystemChanges/systemChangesResource.d.ts.map +1 -0
- package/dist/integrations/react-admin/components/SystemChanges/systemChangesResource.js +20 -0
- package/dist/integrations/react-admin/components/SystemChanges/systemChangesResource.js.map +1 -0
- package/dist/integrations/react-admin/components/SystemChanges/systemChangesView.d.ts +96 -0
- package/dist/integrations/react-admin/components/SystemChanges/systemChangesView.d.ts.map +1 -0
- package/dist/integrations/react-admin/components/SystemChanges/systemChangesView.js +99 -0
- package/dist/integrations/react-admin/components/SystemChanges/systemChangesView.js.map +1 -0
- package/dist/integrations/react-admin/components/index.d.ts +7 -3
- package/dist/integrations/react-admin/components/index.d.ts.map +1 -1
- package/dist/integrations/react-admin/components/index.js +5 -2
- package/dist/integrations/react-admin/components/index.js.map +1 -1
- package/dist/integrations/react-admin/components/shared/LabeledIf.d.ts +23 -0
- package/dist/integrations/react-admin/components/shared/LabeledIf.d.ts.map +1 -0
- package/dist/integrations/react-admin/components/shared/LabeledIf.js +13 -0
- package/dist/integrations/react-admin/components/shared/LabeledIf.js.map +1 -0
- package/dist/integrations/react-admin/components/shared/messages.d.ts +9 -0
- package/dist/integrations/react-admin/components/shared/messages.d.ts.map +1 -0
- package/dist/integrations/react-admin/components/shared/messages.js +9 -0
- package/dist/integrations/react-admin/components/shared/messages.js.map +1 -0
- package/dist/integrations/react-admin/index.d.ts +6 -2
- package/dist/integrations/react-admin/index.d.ts.map +1 -1
- package/dist/integrations/react-admin/index.js +5 -1
- package/dist/integrations/react-admin/index.js.map +1 -1
- package/dist/server/handler.cjs +3 -3
- package/dist/server/media-handler.cjs +2 -2
- package/dist/server/media-process-handler-dlq.cjs +2 -2
- package/dist/server/media-process-handler.cjs +2 -2
- package/dist/system-changes/index.d.ts +2 -0
- package/dist/system-changes/index.d.ts.map +1 -1
- package/dist/system-changes/index.js +1 -0
- package/dist/system-changes/index.js.map +1 -1
- package/dist/system-changes/labels.d.ts +23 -0
- package/dist/system-changes/labels.d.ts.map +1 -0
- package/dist/system-changes/labels.js +32 -0
- package/dist/system-changes/labels.js.map +1 -0
- package/dist/system-changes/record.d.ts +1 -1
- package/dist/system-changes/record.d.ts.map +1 -1
- package/dist/system-changes/record.js +1 -1
- package/dist/system-changes/record.js.map +1 -1
- package/dist/system-changes/slack.d.ts.map +1 -1
- package/dist/system-changes/slack.js +6 -27
- package/dist/system-changes/slack.js.map +1 -1
- package/dist/tools/dynamodb-system-change/cli.d.ts +35 -0
- package/dist/tools/dynamodb-system-change/cli.d.ts.map +1 -0
- package/dist/tools/dynamodb-system-change/cli.js +226 -0
- package/dist/tools/dynamodb-system-change/cli.js.map +1 -0
- package/dist/tools/dynamodb-system-change/details.d.ts +42 -0
- package/dist/tools/dynamodb-system-change/details.d.ts.map +1 -0
- package/dist/tools/dynamodb-system-change/details.js +59 -0
- package/dist/tools/dynamodb-system-change/details.js.map +1 -0
- package/dist/tools/dynamodb-system-change/index.d.ts +13 -0
- package/dist/tools/dynamodb-system-change/index.d.ts.map +1 -0
- package/dist/tools/dynamodb-system-change/index.js +9 -0
- package/dist/tools/dynamodb-system-change/index.js.map +1 -0
- package/dist/tools/dynamodb-system-change/releases.d.ts +34 -0
- package/dist/tools/dynamodb-system-change/releases.d.ts.map +1 -0
- package/dist/tools/dynamodb-system-change/releases.js +108 -0
- package/dist/tools/dynamodb-system-change/releases.js.map +1 -0
- package/dist/tools/dynamodb-system-change/run.d.ts +2 -0
- package/dist/tools/dynamodb-system-change/run.d.ts.map +1 -0
- package/dist/tools/dynamodb-system-change/run.js +6 -0
- package/dist/tools/dynamodb-system-change/run.js.map +1 -0
- package/dist/tools/dynamodb-system-change/send.d.ts +43 -0
- package/dist/tools/dynamodb-system-change/send.d.ts.map +1 -0
- package/dist/tools/dynamodb-system-change/send.js +97 -0
- package/dist/tools/dynamodb-system-change/send.js.map +1 -0
- package/docs/NOTIFY.md +1 -1
- package/docs/SYSTEM_CHANGES.md +69 -0
- package/package.json +15 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/system-changes/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAEzD,OAAO,EACL,iBAAiB,EACjB,MAAM,EACN,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,cAAc,EACd,UAAU,EACV,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AASrB,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AAWvB,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,kBAAkB,EAClB,YAAY,GACb,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/system-changes/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAEzD,OAAO,EACL,iBAAiB,EACjB,MAAM,EACN,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,cAAc,EACd,UAAU,EACV,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AASrB,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AAWvB,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,kBAAkB,EAClB,YAAY,GACb,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* システム変更履歴の表示の部品(種別・結果の日本語のラベルと、details.lambdaReleases の取り出し。純粋な関数だけ)。
|
|
3
|
+
*
|
|
4
|
+
* Slack の文言(slack.ts)と、管理画面(integrations/react-admin の SystemChangesList / SystemChangesShow)が使う。
|
|
5
|
+
* 同じ表と取り出しを 2 か所に持たない(ADR 0006 の段階 4)。依存は型だけ(ブラウザのバンドルに Lambda の部品を入れない)。
|
|
6
|
+
*/
|
|
7
|
+
import type { SystemChangeKind, SystemChangeResult } from './record.js';
|
|
8
|
+
/** 種別の日本語のラベル(キーの順は SYSTEM_CHANGE_KINDS と同じ。管理画面のフィルタの選択肢の順にもなる) */
|
|
9
|
+
export declare const SYSTEM_CHANGE_KIND_LABELS: Readonly<Record<SystemChangeKind, string>>;
|
|
10
|
+
/** 結果の日本語のラベル(キーの順は SYSTEM_CHANGE_RESULTS と同じ) */
|
|
11
|
+
export declare const SYSTEM_CHANGE_RESULT_LABELS: Readonly<Record<SystemChangeResult, string>>;
|
|
12
|
+
/** details.lambdaReleases の 1 件(ラッパーが infra の終了に埋め込む。change は create / replace / code など) */
|
|
13
|
+
export interface LambdaRelease {
|
|
14
|
+
target: string;
|
|
15
|
+
result: 'succeeded' | 'failed';
|
|
16
|
+
change?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* details.lambdaReleases の値から、形の合う要素だけを取り出す(関数名が空でない文字列、結果が成功・失敗)。
|
|
20
|
+
* 配列でなければ空。change は文字列のときだけ残す
|
|
21
|
+
*/
|
|
22
|
+
export declare function parseLambdaReleases(value: unknown): LambdaRelease[];
|
|
23
|
+
//# sourceMappingURL=labels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"labels.d.ts","sourceRoot":"","sources":["../../src/system-changes/labels.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAExE,oEAAoE;AACpE,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAK/E,CAAC;AAEH,kDAAkD;AAClD,eAAO,MAAM,2BAA2B,EAAE,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAKjF,CAAC;AAEL,6FAA6F;AAC7F,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,EAAE,CASnE"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/** 種別の日本語のラベル(キーの順は SYSTEM_CHANGE_KINDS と同じ。管理画面のフィルタの選択肢の順にもなる) */
|
|
2
|
+
export const SYSTEM_CHANGE_KIND_LABELS = Object.freeze({
|
|
3
|
+
'app-release': 'アプリのリリース',
|
|
4
|
+
ota: 'OTA の配信',
|
|
5
|
+
infra: 'インフラの変更',
|
|
6
|
+
'lambda-release': 'Lambda のリリース',
|
|
7
|
+
});
|
|
8
|
+
/** 結果の日本語のラベル(キーの順は SYSTEM_CHANGE_RESULTS と同じ) */
|
|
9
|
+
export const SYSTEM_CHANGE_RESULT_LABELS = Object.freeze({
|
|
10
|
+
started: '開始',
|
|
11
|
+
succeeded: '成功',
|
|
12
|
+
failed: '失敗',
|
|
13
|
+
});
|
|
14
|
+
/**
|
|
15
|
+
* details.lambdaReleases の値から、形の合う要素だけを取り出す(関数名が空でない文字列、結果が成功・失敗)。
|
|
16
|
+
* 配列でなければ空。change は文字列のときだけ残す
|
|
17
|
+
*/
|
|
18
|
+
export function parseLambdaReleases(value) {
|
|
19
|
+
if (!Array.isArray(value))
|
|
20
|
+
return [];
|
|
21
|
+
return value.flatMap((v) => {
|
|
22
|
+
if (typeof v !== 'object' || v === null)
|
|
23
|
+
return [];
|
|
24
|
+
const { target, result, change } = v;
|
|
25
|
+
if (typeof target !== 'string' || target === '')
|
|
26
|
+
return [];
|
|
27
|
+
if (result !== 'succeeded' && result !== 'failed')
|
|
28
|
+
return [];
|
|
29
|
+
return [{ target, result, ...(typeof change === 'string' ? { change } : {}) }];
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=labels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"labels.js","sourceRoot":"","sources":["../../src/system-changes/labels.ts"],"names":[],"mappings":"AAQA,oEAAoE;AACpE,MAAM,CAAC,MAAM,yBAAyB,GAA+C,MAAM,CAAC,MAAM,CAAC;IACjG,aAAa,EAAE,UAAU;IACzB,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,SAAS;IAChB,gBAAgB,EAAE,cAAc;CACjC,CAAC,CAAC;AAEH,kDAAkD;AAClD,MAAM,CAAC,MAAM,2BAA2B,GACtC,MAAM,CAAC,MAAM,CAAC;IACZ,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,IAAI;CACb,CAAC,CAAC;AASL;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAU,EAAmB,EAAE;QACnD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QACnD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAA4B,CAAC;QAChE,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,EAAE;YAAE,OAAO,EAAE,CAAC;QAC3D,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QAC7D,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** リソース名(Records のコレクション名。管理画面の URL〔/systemChanges/{id}/show〕にも使う) */
|
|
2
2
|
export declare const SYSTEM_CHANGES_RESOURCE = "systemChanges";
|
|
3
|
-
/**
|
|
3
|
+
/** 種別(許可リスト)。日本語のラベル(管理画面・Slack の文言)は labels.ts の SYSTEM_CHANGE_KIND_LABELS */
|
|
4
4
|
export declare const SYSTEM_CHANGE_KINDS: readonly ["app-release", "ota", "infra", "lambda-release"];
|
|
5
5
|
/** 結果(許可リスト) */
|
|
6
6
|
export declare const SYSTEM_CHANGE_RESULTS: readonly ["started", "succeeded", "failed"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../src/system-changes/record.ts"],"names":[],"mappings":"AAQA,sEAAsE;AACtE,eAAO,MAAM,uBAAuB,kBAAkB,CAAC;AAEvD
|
|
1
|
+
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../src/system-changes/record.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
import { cleanLine } from '../notify/policy.js';
|
|
8
8
|
/** リソース名(Records のコレクション名。管理画面の URL〔/systemChanges/{id}/show〕にも使う) */
|
|
9
9
|
export const SYSTEM_CHANGES_RESOURCE = 'systemChanges';
|
|
10
|
-
/**
|
|
10
|
+
/** 種別(許可リスト)。日本語のラベル(管理画面・Slack の文言)は labels.ts の SYSTEM_CHANGE_KIND_LABELS */
|
|
11
11
|
export const SYSTEM_CHANGE_KINDS = ['app-release', 'ota', 'infra', 'lambda-release'];
|
|
12
12
|
/** 結果(許可リスト) */
|
|
13
13
|
export const SYSTEM_CHANGE_RESULTS = ['started', 'succeeded', 'failed'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/system-changes/record.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,sEAAsE;AACtE,MAAM,CAAC,MAAM,uBAAuB,GAAG,eAAe,CAAC;AAEvD
|
|
1
|
+
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/system-changes/record.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../src/system-changes/slack.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../src/system-changes/slack.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAY1E;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAM5F;AA8BD,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CASjD;AAED,8DAA8D;AAC9D,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,MAAM,EAAE,kBAAkB,EAC1B,EAAE,EAAE,MAAM,EACV,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,CAiBR;AAED,0EAA0E;AAC1E,wBAAgB,YAAY,CAC1B,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GACrD,OAAO,CAIT"}
|
|
@@ -9,18 +9,8 @@
|
|
|
9
9
|
* 所要時間(durationMs)があれば「所要 52 秒」の形で足す。
|
|
10
10
|
* 文言は asanowa(ADR-0044)の版に揃えた(ADR 0006 の決定。astro の「記録を省いた Lambda」は使わない)。
|
|
11
11
|
*/
|
|
12
|
+
import { SYSTEM_CHANGE_KIND_LABELS as KIND_LABEL, SYSTEM_CHANGE_RESULT_LABELS as RESULT_LABEL, parseLambdaReleases, } from './labels.js';
|
|
12
13
|
import { SYSTEM_CHANGES_RESOURCE } from './record.js';
|
|
13
|
-
const KIND_LABEL = {
|
|
14
|
-
'app-release': 'アプリのリリース',
|
|
15
|
-
ota: 'OTA の配信',
|
|
16
|
-
infra: 'インフラの変更',
|
|
17
|
-
'lambda-release': 'Lambda のリリース',
|
|
18
|
-
};
|
|
19
|
-
const RESULT_LABEL = {
|
|
20
|
-
started: '開始',
|
|
21
|
-
succeeded: '成功',
|
|
22
|
-
failed: '失敗',
|
|
23
|
-
};
|
|
24
14
|
const RESULT_MARK = {
|
|
25
15
|
started: '▶️',
|
|
26
16
|
succeeded: '✅',
|
|
@@ -33,22 +23,11 @@ const esc = (s) => s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g,
|
|
|
33
23
|
* 形の合わない要素は飛ばす
|
|
34
24
|
*/
|
|
35
25
|
export function lambdaReleaseNames(value) {
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
if (typeof v !== 'object' || v === null)
|
|
42
|
-
continue;
|
|
43
|
-
const { target, result } = v;
|
|
44
|
-
if (typeof target !== 'string' || target === '')
|
|
45
|
-
continue;
|
|
46
|
-
if (result === 'succeeded')
|
|
47
|
-
succeeded.push(target);
|
|
48
|
-
else if (result === 'failed')
|
|
49
|
-
failed.push(target);
|
|
50
|
-
}
|
|
51
|
-
return { succeeded, failed };
|
|
26
|
+
const releases = parseLambdaReleases(value);
|
|
27
|
+
return {
|
|
28
|
+
succeeded: releases.filter((r) => r.result === 'succeeded').map((r) => r.target),
|
|
29
|
+
failed: releases.filter((r) => r.result === 'failed').map((r) => r.target),
|
|
30
|
+
};
|
|
52
31
|
}
|
|
53
32
|
/** details のうち、Slack に出す項目(件数と、リリースされた Lambda の名前)。上限を設けて、長くしない */
|
|
54
33
|
function detailLines(details) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../src/system-changes/slack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../src/system-changes/slack.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type ReleasesLimit } from './details.js';
|
|
2
|
+
import { type RunCommand } from './send.js';
|
|
3
|
+
export interface CliIo {
|
|
4
|
+
out: (s: string) => void;
|
|
5
|
+
/** 標準エラー(改行は呼び出し側が付ける。バイト列も受ける) */
|
|
6
|
+
err: (s: string | Buffer) => void;
|
|
7
|
+
}
|
|
8
|
+
export interface CliDeps {
|
|
9
|
+
env?: NodeJS.ProcessEnv;
|
|
10
|
+
run?: RunCommand;
|
|
11
|
+
newChangeId?: () => string;
|
|
12
|
+
actor?: () => string;
|
|
13
|
+
}
|
|
14
|
+
export declare const USAGE = "\u4F7F\u3044\u65B9:\n dynamodb-system-change start --app <app> --env <env> --command <cmd> [\u5171\u901A]\n \u2192 \u5909\u66F4 ID\uFF08ULID\uFF09\u3092\u6A19\u6E96\u51FA\u529B\u306B\u51FA\u3059\uFF08SKIP_CHANGE_RECORD=1 \u3067\u306F\u4F55\u3082\u51FA\u3055\u306A\u3044\uFF09\n dynamodb-system-change finish --app <app> --env <env> --command <cmd> --exit-code <n>\n [--change-id <id>] [--log <file>] [\u5171\u901A]\n\n --app <app> \u30A2\u30D7\u30EA\u540D\uFF08details.app\u3002\u65E2\u5B9A\u306E\u95A2\u6570\u540D\u30FB\u5BFE\u8C61\u306B\u4F7F\u3046\uFF09\n --env <env> \u74B0\u5883\uFF08details.env\uFF09\n --command <cmd> \u30E9\u30C3\u30D1\u30FC\u306E\u30B3\u30DE\u30F3\u30C9\uFF08details.command\u3002destroy \u3067\u306F\u30EA\u30EA\u30FC\u30B9\u3092\u53D6\u308A\u51FA\u3055\u306A\u3044\uFF09\n --exit-code <n> terraform \u306E\u7D42\u4E86\u30B3\u30FC\u30C9\uFF080 = succeeded\u3001\u305D\u308C\u4EE5\u5916 = failed\u30020 \u4EE5\u5916\u306F details.exit_code\uFF09\n --change-id <id> start \u304C\u51FA\u3057\u305F\u5909\u66F4 ID\uFF08\u7A7A\u306A\u3089 changeId \u306A\u3057\u3067\u8A18\u9332\uFF09\n --log <file> plan / apply \u306E\u30ED\u30B0\uFF08\u4EF6\u6570\u3068 Lambda \u306E\u30EA\u30EA\u30FC\u30B9\u3092\u53D6\u308A\u51FA\u3059\uFF09\n\u5171\u901A:\n --repo <dir> git \u3092\u5B9F\u884C\u3059\u308B\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\uFF08\u65E2\u5B9A: \u30AB\u30EC\u30F3\u30C8\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\uFF09\n --dirty-path <path>... \u672A\u30B3\u30DF\u30C3\u30C8\u306E\u5909\u66F4\u3092\u8ABF\u3079\u308B\u5834\u6240\uFF08\u3042\u308C\u3070 commit \u306B -dirty\u3002\u65E2\u5B9A: \u4F5C\u696D\u30C4\u30EA\u30FC\u5168\u4F53\uFF09\n --function <name> \u8A18\u9332 Lambda\uFF08\u65E2\u5B9A: <app>-<env>-system-change-recorder\uFF09\n --target <target> \u5BFE\u8C61\uFF08\u65E2\u5B9A: terraform:<app>\uFF09\n --region <region> \u65E2\u5B9A: AWS_REGION\u3001\u7121\u3051\u308C\u3070 ap-northeast-1\n --releases-max-items <n|none> lambdaReleases \u306E\u4EF6\u6570\u306E\u4E0A\u9650\uFF08\u65E2\u5B9A: none\uFF09\n --releases-max-bytes <n|none> lambdaReleases \u306E JSON \u306E\u30D0\u30A4\u30C8\u6570\u306E\u4E0A\u9650\uFF08\u65E2\u5B9A: 3000\uFF09\n\n\u74B0\u5883\u5909\u6570: RECORD_DRY_RUN=1\uFF08\u547C\u3073\u51FA\u3055\u305A\u3001\u9001\u308B\u5185\u5BB9\u3092\u6A19\u6E96\u30A8\u30E9\u30FC\u306B\u51FA\u3059\uFF09\u3001SKIP_CHANGE_RECORD=1\uFF08\u8A18\u9332\u3057\u306A\u3044\uFF09\n\u7D42\u4E86\u30B3\u30FC\u30C9: start / finish \u306F\u5E38\u306B 0\uFF08\u8A18\u9332\u306E\u5931\u6557\u3067 apply \u3092\u6B62\u3081\u306A\u3044\uFF09\u3002--help \u306F 0\u3001\u30B5\u30D6\u30B3\u30DE\u30F3\u30C9\u306E\u8AA4\u308A\u306F 2";
|
|
15
|
+
export interface RecordArgs {
|
|
16
|
+
app: string;
|
|
17
|
+
env: string;
|
|
18
|
+
command: string;
|
|
19
|
+
repo?: string;
|
|
20
|
+
dirtyPaths: string[];
|
|
21
|
+
functionName: string;
|
|
22
|
+
target: string;
|
|
23
|
+
region?: string;
|
|
24
|
+
limit: ReleasesLimit;
|
|
25
|
+
exitCode?: number;
|
|
26
|
+
changeId?: string;
|
|
27
|
+
log?: string;
|
|
28
|
+
}
|
|
29
|
+
/** 引数を解釈する(誤りは Error)。`--change-id` と `--log` は空の値を許す(ラッパーの変数が空のとき) */
|
|
30
|
+
export declare function parseRecordArgs(sub: 'start' | 'finish', argv: string[]): RecordArgs;
|
|
31
|
+
/** 終了の details(件数・exit_code・lambdaReleases)。destroy ではリリースを取り出さない */
|
|
32
|
+
export declare function finishDetailsOf(args: RecordArgs): Record<string, unknown>;
|
|
33
|
+
/** CLI 本体。終了コードを返す(process.exitCode は run.ts が設定する) */
|
|
34
|
+
export declare function main(argv: string[], io: CliIo, deps?: CliDeps): number;
|
|
35
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/tools/dynamodb-system-change/cli.ts"],"names":[],"mappings":"AAcA,OAAO,EAA8B,KAAK,aAAa,EAAsB,MAAM,cAAc,CAAC;AAElG,OAAO,EACL,KAAK,UAAU,EAKhB,MAAM,WAAW,CAAC;AAEnB,MAAM,WAAW,KAAK;IACpB,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACzB,mCAAmC;IACnC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,OAAO;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,KAAK,wxFAsBsD,CAAC;AAEzE,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAyBD,uEAAuE;AACvE,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAsDnF;AAYD,qEAAqE;AACrE,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAgBzE;AA8DD,uDAAuD;AACvD,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,GAAE,OAAY,GAAG,MAAM,CAW1E"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `dynamodb-system-change start|finish`: terraform の apply・destroy の開始と終了を、システム変更履歴に記録する
|
|
3
|
+
* (ADR 0006 の段階 5 = (c)。docs/SYSTEM_CHANGES.md の「記録の CLI」)。
|
|
4
|
+
*
|
|
5
|
+
* 各アプリの terraform-wrapper.sh(bash)は残し、記録に送る部分(開始・終了の呼び出し、details の組み立て、
|
|
6
|
+
* Lambda のリリースの取り出し)だけをこの CLI に委ねる。**記録の失敗で apply を止めない**: start / finish は、
|
|
7
|
+
* 引数の誤りを含めて、常に終了コード 0 で終わる(警告は標準エラー)。
|
|
8
|
+
*
|
|
9
|
+
* 受け渡し: start は変更 ID(ULID)を標準出力に 1 行で出す(SKIP_CHANGE_RECORD=1 では何も出さない)。
|
|
10
|
+
* ラッパーはそれをシェルの変数に持ち、finish の `--change-id` に渡す(現行の CHANGE_ID と同じ)。
|
|
11
|
+
*/
|
|
12
|
+
import { readFileSync } from 'node:fs';
|
|
13
|
+
import { ulid } from 'ulid';
|
|
14
|
+
import { DEFAULT_RELEASES_MAX_BYTES, buildFinishDetails } from './details.js';
|
|
15
|
+
import { extractLambdaReleases } from './releases.js';
|
|
16
|
+
import { actorOf, commitOf, sendSystemChange, } from './send.js';
|
|
17
|
+
export const USAGE = `使い方:
|
|
18
|
+
dynamodb-system-change start --app <app> --env <env> --command <cmd> [共通]
|
|
19
|
+
→ 変更 ID(ULID)を標準出力に出す(SKIP_CHANGE_RECORD=1 では何も出さない)
|
|
20
|
+
dynamodb-system-change finish --app <app> --env <env> --command <cmd> --exit-code <n>
|
|
21
|
+
[--change-id <id>] [--log <file>] [共通]
|
|
22
|
+
|
|
23
|
+
--app <app> アプリ名(details.app。既定の関数名・対象に使う)
|
|
24
|
+
--env <env> 環境(details.env)
|
|
25
|
+
--command <cmd> ラッパーのコマンド(details.command。destroy ではリリースを取り出さない)
|
|
26
|
+
--exit-code <n> terraform の終了コード(0 = succeeded、それ以外 = failed。0 以外は details.exit_code)
|
|
27
|
+
--change-id <id> start が出した変更 ID(空なら changeId なしで記録)
|
|
28
|
+
--log <file> plan / apply のログ(件数と Lambda のリリースを取り出す)
|
|
29
|
+
共通:
|
|
30
|
+
--repo <dir> git を実行するディレクトリ(既定: カレントディレクトリ)
|
|
31
|
+
--dirty-path <path>... 未コミットの変更を調べる場所(あれば commit に -dirty。既定: 作業ツリー全体)
|
|
32
|
+
--function <name> 記録 Lambda(既定: <app>-<env>-system-change-recorder)
|
|
33
|
+
--target <target> 対象(既定: terraform:<app>)
|
|
34
|
+
--region <region> 既定: AWS_REGION、無ければ ap-northeast-1
|
|
35
|
+
--releases-max-items <n|none> lambdaReleases の件数の上限(既定: none)
|
|
36
|
+
--releases-max-bytes <n|none> lambdaReleases の JSON のバイト数の上限(既定: ${DEFAULT_RELEASES_MAX_BYTES})
|
|
37
|
+
|
|
38
|
+
環境変数: RECORD_DRY_RUN=1(呼び出さず、送る内容を標準エラーに出す)、SKIP_CHANGE_RECORD=1(記録しない)
|
|
39
|
+
終了コード: start / finish は常に 0(記録の失敗で apply を止めない)。--help は 0、サブコマンドの誤りは 2`;
|
|
40
|
+
const SINGLE = {
|
|
41
|
+
'--app': 'app',
|
|
42
|
+
'--env': 'env',
|
|
43
|
+
'--command': 'command',
|
|
44
|
+
'--repo': 'repo',
|
|
45
|
+
'--function': 'functionName',
|
|
46
|
+
'--target': 'target',
|
|
47
|
+
'--region': 'region',
|
|
48
|
+
'--exit-code': 'exitCode',
|
|
49
|
+
'--change-id': 'changeId',
|
|
50
|
+
'--log': 'log',
|
|
51
|
+
'--releases-max-items': 'maxItems',
|
|
52
|
+
'--releases-max-bytes': 'maxBytes',
|
|
53
|
+
};
|
|
54
|
+
function limitValue(name, v, fallback) {
|
|
55
|
+
if (v === undefined)
|
|
56
|
+
return fallback;
|
|
57
|
+
if (v === 'none')
|
|
58
|
+
return undefined;
|
|
59
|
+
if (!/^\d+$/.test(v))
|
|
60
|
+
throw new Error(`${name} は 0 以上の整数か none`);
|
|
61
|
+
return Number(v);
|
|
62
|
+
}
|
|
63
|
+
/** 引数を解釈する(誤りは Error)。`--change-id` と `--log` は空の値を許す(ラッパーの変数が空のとき) */
|
|
64
|
+
export function parseRecordArgs(sub, argv) {
|
|
65
|
+
const v = {};
|
|
66
|
+
const dirtyPaths = [];
|
|
67
|
+
let inDirty = false;
|
|
68
|
+
for (let i = 0; i < argv.length; i++) {
|
|
69
|
+
const a = argv[i];
|
|
70
|
+
if (a in SINGLE) {
|
|
71
|
+
const value = argv[++i];
|
|
72
|
+
const key = SINGLE[a];
|
|
73
|
+
const allowEmpty = key === 'changeId' || key === 'log';
|
|
74
|
+
if (value === undefined || (!allowEmpty && (value === '' || value.startsWith('--')))) {
|
|
75
|
+
throw new Error(`${a} に値が要る`);
|
|
76
|
+
}
|
|
77
|
+
v[key] = value;
|
|
78
|
+
inDirty = false;
|
|
79
|
+
}
|
|
80
|
+
else if (a === '--dirty-path') {
|
|
81
|
+
inDirty = true;
|
|
82
|
+
}
|
|
83
|
+
else if (a.startsWith('--')) {
|
|
84
|
+
throw new Error(`未知の引数: ${a}`);
|
|
85
|
+
}
|
|
86
|
+
else if (inDirty) {
|
|
87
|
+
dirtyPaths.push(a);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
throw new Error(`位置が不正な引数: ${a}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
for (const k of ['app', 'env', 'command']) {
|
|
94
|
+
if (!v[k])
|
|
95
|
+
throw new Error(`--${k} が要る`);
|
|
96
|
+
}
|
|
97
|
+
const app = v.app;
|
|
98
|
+
const env = v.env;
|
|
99
|
+
let exitCode;
|
|
100
|
+
if (sub === 'finish') {
|
|
101
|
+
if (v.exitCode === undefined || !/^\d+$/.test(v.exitCode)) {
|
|
102
|
+
throw new Error('--exit-code に 0 以上の整数が要る');
|
|
103
|
+
}
|
|
104
|
+
exitCode = Number(v.exitCode);
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
app,
|
|
108
|
+
env,
|
|
109
|
+
command: v.command,
|
|
110
|
+
repo: v.repo,
|
|
111
|
+
dirtyPaths,
|
|
112
|
+
functionName: v.functionName ?? `${app}-${env}-system-change-recorder`,
|
|
113
|
+
target: v.target ?? `terraform:${app}`,
|
|
114
|
+
region: v.region,
|
|
115
|
+
limit: {
|
|
116
|
+
maxItems: limitValue('--releases-max-items', v.maxItems),
|
|
117
|
+
maxBytes: limitValue('--releases-max-bytes', v.maxBytes, DEFAULT_RELEASES_MAX_BYTES),
|
|
118
|
+
},
|
|
119
|
+
exitCode,
|
|
120
|
+
changeId: v.changeId || undefined,
|
|
121
|
+
log: v.log || undefined,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/** ログを読む(読めなければ undefined。不正な UTF-8 は置き換える) */
|
|
125
|
+
function readLog(path) {
|
|
126
|
+
if (!path)
|
|
127
|
+
return undefined;
|
|
128
|
+
try {
|
|
129
|
+
return readFileSync(path).toString('utf8');
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/** 終了の details(件数・exit_code・lambdaReleases)。destroy ではリリースを取り出さない */
|
|
136
|
+
export function finishDetailsOf(args) {
|
|
137
|
+
const exitCode = args.exitCode ?? 0;
|
|
138
|
+
const logText = readLog(args.log);
|
|
139
|
+
let releases = [];
|
|
140
|
+
if (args.command !== 'destroy' && logText !== undefined) {
|
|
141
|
+
try {
|
|
142
|
+
releases = extractLambdaReleases(logText);
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
releases = []; // 現行: 取り出しに失敗したら []
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
try {
|
|
149
|
+
return { ...buildFinishDetails({ exitCode, logText, releases, limit: args.limit }) };
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
return {}; // 現行: 組み立てに失敗したら {}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
function record(args, result, extra, io, deps) {
|
|
156
|
+
const env = deps.env ?? process.env;
|
|
157
|
+
let payload;
|
|
158
|
+
try {
|
|
159
|
+
payload = {
|
|
160
|
+
kind: 'infra',
|
|
161
|
+
result,
|
|
162
|
+
target: args.target,
|
|
163
|
+
commit: commitOf(args.repo, args.dirtyPaths, deps.run),
|
|
164
|
+
actor: (deps.actor ?? actorOf)(),
|
|
165
|
+
// 開始と終了の両方に付ける(記録 Lambda は details を深くマージするので、同じキーが重なっても害はない)
|
|
166
|
+
details: { ...extra, app: args.app, env: args.env, command: args.command },
|
|
167
|
+
...(args.changeId ? { changeId: args.changeId } : {}),
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
io.err('[change-record] ペイロードの作成に失敗しました(記録をスキップ)\n');
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
sendSystemChange(payload, {
|
|
175
|
+
functionName: args.functionName,
|
|
176
|
+
region: args.region || env.AWS_REGION || 'ap-northeast-1',
|
|
177
|
+
dryRun: env.RECORD_DRY_RUN === '1',
|
|
178
|
+
warn: io.err,
|
|
179
|
+
run: deps.run,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
/** start / finish の本体。記録の失敗・引数の誤りでも 0 を返す */
|
|
183
|
+
function runRecord(sub, argv, io, deps) {
|
|
184
|
+
const env = deps.env ?? process.env;
|
|
185
|
+
if (env.SKIP_CHANGE_RECORD === '1')
|
|
186
|
+
return 0;
|
|
187
|
+
let args;
|
|
188
|
+
try {
|
|
189
|
+
args = parseRecordArgs(sub, argv);
|
|
190
|
+
}
|
|
191
|
+
catch (e) {
|
|
192
|
+
io.err(`[change-record] 引数の誤り(記録をスキップ): ${e.message}\n`);
|
|
193
|
+
return 0;
|
|
194
|
+
}
|
|
195
|
+
try {
|
|
196
|
+
if (sub === 'start') {
|
|
197
|
+
const changeId = (deps.newChangeId ?? ulid)();
|
|
198
|
+
// 変更 ID は、記録の成否によらず出す(終了の記録に同じ ID を付ける。現行と同じ)
|
|
199
|
+
io.out(`${changeId}\n`);
|
|
200
|
+
record({ ...args, changeId }, 'started', {}, io, deps);
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
const result = args.exitCode === 0 ? 'succeeded' : 'failed';
|
|
204
|
+
record(args, result, finishDetailsOf(args), io, deps);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
catch (e) {
|
|
208
|
+
io.err(`[change-record] 記録に失敗しました(処理は続行): ${e.message}\n`);
|
|
209
|
+
}
|
|
210
|
+
return 0;
|
|
211
|
+
}
|
|
212
|
+
/** CLI 本体。終了コードを返す(process.exitCode は run.ts が設定する) */
|
|
213
|
+
export function main(argv, io, deps = {}) {
|
|
214
|
+
const [sub, ...rest] = argv;
|
|
215
|
+
// --help はサブコマンドの位置だけで見る(start / finish の引数の値の -h を拾わない)。
|
|
216
|
+
// USAGE は標準エラーに出す(start の標準出力は変更 ID の受け渡しに使うため、汚さない)
|
|
217
|
+
if (sub === '--help' || sub === '-h') {
|
|
218
|
+
io.err(`${USAGE}\n`);
|
|
219
|
+
return 0;
|
|
220
|
+
}
|
|
221
|
+
if (sub === 'start' || sub === 'finish')
|
|
222
|
+
return runRecord(sub, rest, io, deps);
|
|
223
|
+
io.err(`サブコマンドは start か finish(got: ${sub ?? 'なし'})\n\n${USAGE}\n`);
|
|
224
|
+
return 2;
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/tools/dynamodb-system-change/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 終了(succeeded / failed)の記録の `details` を組み立てる(両アプリの terraform-wrapper.sh の finish_change の
|
|
3
|
+
* Python を移植したもの)。純粋な関数だけ(ファイルの読み取りは呼び出し側)。
|
|
4
|
+
*/
|
|
5
|
+
import { type ExtractedLambdaRelease } from './releases.js';
|
|
6
|
+
/** `lambdaReleases` の切り詰めの既定(asanowa の現行: 3000 バイトまで。件数の上限なし) */
|
|
7
|
+
export declare const DEFAULT_RELEASES_MAX_BYTES = 3000;
|
|
8
|
+
export interface ReleasesLimit {
|
|
9
|
+
/** 件数の上限(undefined は無制限)。astro の現行は 30 */
|
|
10
|
+
maxItems?: number;
|
|
11
|
+
/** `lambdaReleases` の JSON(区切りの空白なし、UTF-8)のバイト数の上限(undefined は無制限)。asanowa の現行は 3000 */
|
|
12
|
+
maxBytes?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface FinishDetails {
|
|
15
|
+
add?: number;
|
|
16
|
+
change?: number;
|
|
17
|
+
destroy?: number;
|
|
18
|
+
exit_code?: number;
|
|
19
|
+
lambdaReleases?: ExtractedLambdaRelease[];
|
|
20
|
+
lambdaReleasesOmitted?: number;
|
|
21
|
+
}
|
|
22
|
+
/** ログの最後の完了の行から、件数を取り出す(無ければ undefined) */
|
|
23
|
+
export declare function resourceCountsOf(logText: string): Pick<FinishDetails, 'add' | 'change' | 'destroy'> | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* 失敗を先に並べ(失敗は落とさない)、上限まで残す。入らなかった件数を omitted に返す。
|
|
26
|
+
* 記録 Lambda の details の上限(4096 バイト)に収めるため
|
|
27
|
+
*/
|
|
28
|
+
export declare function limitReleases(releases: readonly ExtractedLambdaRelease[], limit?: ReleasesLimit): {
|
|
29
|
+
items: ExtractedLambdaRelease[];
|
|
30
|
+
omitted: number;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* 終了の details(件数・exit_code・lambdaReleases・lambdaReleasesOmitted。キーの順も現行と同じ)。
|
|
34
|
+
* 件数は、成功(exitCode 0)でログがあるときだけ
|
|
35
|
+
*/
|
|
36
|
+
export declare function buildFinishDetails(input: {
|
|
37
|
+
exitCode: number;
|
|
38
|
+
logText?: string;
|
|
39
|
+
releases: readonly ExtractedLambdaRelease[];
|
|
40
|
+
limit?: ReleasesLimit;
|
|
41
|
+
}): FinishDetails;
|
|
42
|
+
//# sourceMappingURL=details.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"details.d.ts","sourceRoot":"","sources":["../../../src/tools/dynamodb-system-change/details.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,KAAK,sBAAsB,EAAa,MAAM,eAAe,CAAC;AAEvE,iEAAiE;AACjE,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAE/C,MAAM,WAAW,aAAa;IAC5B,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wFAAwF;IACxF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,sBAAsB,EAAE,CAAC;IAC1C,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAMD,2CAA2C;AAC3C,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,GACd,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,SAAS,CAM/D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,SAAS,sBAAsB,EAAE,EAC3C,KAAK,GAAE,aAAwD,GAC9D;IAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAiBtD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAC5C,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB,GAAG,aAAa,CAUhB"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 終了(succeeded / failed)の記録の `details` を組み立てる(両アプリの terraform-wrapper.sh の finish_change の
|
|
3
|
+
* Python を移植したもの)。純粋な関数だけ(ファイルの読み取りは呼び出し側)。
|
|
4
|
+
*/
|
|
5
|
+
import { stripAnsi } from './releases.js';
|
|
6
|
+
/** `lambdaReleases` の切り詰めの既定(asanowa の現行: 3000 バイトまで。件数の上限なし) */
|
|
7
|
+
export const DEFAULT_RELEASES_MAX_BYTES = 3000;
|
|
8
|
+
// `Apply complete! Resources: 1 added, 2 changed, 3 destroyed.` と `Destroy complete! Resources: 3 destroyed.`
|
|
9
|
+
const COMPLETE = /(?:Apply|Destroy) complete! Resources: (\d+) (?:added|destroyed)(?:, (\d+) changed, (\d+) destroyed)?/g;
|
|
10
|
+
/** ログの最後の完了の行から、件数を取り出す(無ければ undefined) */
|
|
11
|
+
export function resourceCountsOf(logText) {
|
|
12
|
+
const ms = [...stripAnsi(logText).matchAll(COMPLETE)];
|
|
13
|
+
const m = ms[ms.length - 1];
|
|
14
|
+
if (!m)
|
|
15
|
+
return undefined;
|
|
16
|
+
if (m[2] === undefined)
|
|
17
|
+
return { add: 0, change: 0, destroy: Number(m[1]) }; // Destroy の短い形
|
|
18
|
+
return { add: Number(m[1]), change: Number(m[2]), destroy: Number(m[3]) };
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 失敗を先に並べ(失敗は落とさない)、上限まで残す。入らなかった件数を omitted に返す。
|
|
22
|
+
* 記録 Lambda の details の上限(4096 バイト)に収めるため
|
|
23
|
+
*/
|
|
24
|
+
export function limitReleases(releases, limit = { maxBytes: DEFAULT_RELEASES_MAX_BYTES }) {
|
|
25
|
+
const sorted = [
|
|
26
|
+
...releases.filter((d) => d.result === 'failed'),
|
|
27
|
+
...releases.filter((d) => d.result !== 'failed'),
|
|
28
|
+
];
|
|
29
|
+
const items = [];
|
|
30
|
+
for (const d of sorted) {
|
|
31
|
+
if (limit.maxItems !== undefined && items.length >= limit.maxItems)
|
|
32
|
+
break;
|
|
33
|
+
if (limit.maxBytes !== undefined &&
|
|
34
|
+
Buffer.byteLength(JSON.stringify([...items, d]), 'utf8') > limit.maxBytes) {
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
items.push({ target: d.target, result: d.result, change: d.change });
|
|
38
|
+
}
|
|
39
|
+
return { items, omitted: sorted.length - items.length };
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 終了の details(件数・exit_code・lambdaReleases・lambdaReleasesOmitted。キーの順も現行と同じ)。
|
|
43
|
+
* 件数は、成功(exitCode 0)でログがあるときだけ
|
|
44
|
+
*/
|
|
45
|
+
export function buildFinishDetails(input) {
|
|
46
|
+
const out = {};
|
|
47
|
+
if (input.exitCode === 0 && input.logText !== undefined) {
|
|
48
|
+
Object.assign(out, resourceCountsOf(input.logText));
|
|
49
|
+
}
|
|
50
|
+
if (input.exitCode !== 0)
|
|
51
|
+
out.exit_code = input.exitCode;
|
|
52
|
+
const { items, omitted } = limitReleases(input.releases, input.limit);
|
|
53
|
+
if (items.length > 0)
|
|
54
|
+
out.lambdaReleases = items;
|
|
55
|
+
if (omitted > 0)
|
|
56
|
+
out.lambdaReleasesOmitted = omitted;
|
|
57
|
+
return out;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=details.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"details.js","sourceRoot":"","sources":["../../../src/tools/dynamodb-system-change/details.ts"],"names":[],"mappings":"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"}
|