bizboost 6.4.13 → 6.6.8
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 +97 -11
- package/dist/auth/InteractiveLogin.js +1 -1
- package/dist/auth/PortalAuthClient.d.ts +1 -1
- package/dist/auth/PortalAuthClient.js +1 -1
- package/dist/auth/TokenManager.d.ts +5 -14
- package/dist/auth/TokenManager.d.ts.map +1 -1
- package/dist/auth/TokenManager.js +1 -1
- package/dist/auth/TokenManager.js.map +1 -1
- package/dist/auth/portalTokenStore.d.ts +19 -0
- package/dist/auth/portalTokenStore.d.ts.map +1 -0
- package/dist/auth/portalTokenStore.js +1 -0
- package/dist/auth/portalTokenStore.js.map +1 -0
- package/dist/bin/bizboost201.mjs +2 -0
- package/dist/bin/bizboost202.mjs +2 -0
- package/dist/bin/bizboost203.mjs +2 -0
- package/dist/bin/bizboost204.mjs +2 -0
- package/dist/bin/bizboost205.mjs +2 -0
- package/dist/bin/bizboost206.mjs +2 -0
- package/dist/bin/bizboost207.mjs +2 -0
- package/dist/bin/bizboost208.mjs +2 -0
- package/dist/bin/bizboost209.mjs +2 -0
- package/dist/bin/bizboost210.mjs +2 -0
- package/dist/bin/bizboost211.mjs +2 -0
- package/dist/bin/bizboost212.mjs +2 -0
- package/dist/bin/bizboost213.mjs +2 -0
- package/dist/bin/bizboost214.mjs +2 -0
- package/dist/bin/bizboost215.mjs +2 -0
- package/dist/bin/bizboost216.mjs +2 -0
- package/dist/bin/bizboost217.mjs +2 -0
- package/dist/bin/bizboost218.mjs +2 -0
- package/dist/bin/bizboost219.mjs +2 -0
- package/dist/bin/bizboost220.mjs +2 -0
- package/dist/bin/bizboost221.mjs +2 -0
- package/dist/bin/bizboost222.mjs +2 -0
- package/dist/bin/bizboost223.mjs +2 -0
- package/dist/bin/bizboost224.mjs +2 -0
- package/dist/bin/bizboost225.mjs +2 -0
- package/dist/bin/bizboost226.mjs +2 -0
- package/dist/bin/bizboost227.mjs +2 -0
- package/dist/bin/bizboost228.mjs +2 -0
- package/dist/bin/bizboost229.mjs +2 -0
- package/dist/bin/bizboost230.mjs +2 -0
- package/dist/bin/bizboost231.mjs +2 -0
- package/dist/bin/bizboost232.mjs +2 -0
- package/dist/bin/bizboost233.mjs +2 -0
- package/dist/bin/bizboost234.mjs +2 -0
- package/dist/bin/bizboost235.mjs +2 -0
- package/dist/bin/bizboost236.mjs +2 -0
- package/dist/bin/bizboost237.mjs +2 -0
- package/dist/bin/bizboost238.mjs +2 -0
- package/dist/bin/bizboost239.mjs +2 -0
- package/dist/bin/bizboost240.mjs +2 -0
- package/dist/bin/bizboost241.mjs +2 -0
- package/dist/bin/bizboost242.mjs +2 -0
- package/dist/bin/bizboost243.mjs +2 -0
- package/dist/bin/bizboost244.mjs +2 -0
- package/dist/bin/bizboost245.mjs +2 -0
- package/dist/bin/bizboost246.mjs +2 -0
- package/dist/bin/bizboost247.mjs +2 -0
- package/dist/bin/bizboost248.mjs +2 -0
- package/dist/bin/bizboost249.mjs +2 -0
- package/dist/bin/bizboost250.mjs +2 -0
- package/dist/bin/bizboost251.mjs +2 -0
- package/dist/bin/bizboost252.mjs +2 -0
- package/dist/bin/bizboost253.mjs +2 -0
- package/dist/bin/bizboost254.mjs +2 -0
- package/dist/bin/bizboost255.mjs +2 -0
- package/dist/bin/bizboost256.mjs +2 -0
- package/dist/bin/bizboost257.mjs +2 -0
- package/dist/bin/bizboost258.mjs +2 -0
- package/dist/bin/bizboost259.mjs +2 -0
- package/dist/bin/bizboost260.mjs +2 -0
- package/dist/bin/bizboost261.mjs +2 -0
- package/dist/bin/bizboost262.mjs +2 -0
- package/dist/bin/bizboost263.mjs +2 -0
- package/dist/bin/bizboost264.mjs +2 -0
- package/dist/bin/bizboost265.mjs +2 -0
- package/dist/bin/bizboost266.mjs +2 -0
- package/dist/bin/bizboost267.mjs +2 -0
- package/dist/bin/bizboost268.mjs +2 -0
- package/dist/bin/bizboost269.mjs +2 -0
- package/dist/bin/bizboost270.mjs +2 -0
- package/dist/bin/bizboost271.mjs +2 -0
- package/dist/bin/bizboost272.mjs +2 -0
- package/dist/bin/bizboost273.mjs +2 -0
- package/dist/bin/bizboost274.mjs +2 -0
- package/dist/bin/bizboost275.mjs +2 -0
- package/dist/bin/bizboost276.mjs +2 -0
- package/dist/bin/bizboost277.mjs +2 -0
- package/dist/bin/bizboost278.mjs +2 -0
- package/dist/bin/bizboost279.mjs +2 -0
- package/dist/bin/bizboost280.mjs +2 -0
- package/dist/bin/bizboost281.mjs +2 -0
- package/dist/bin/bizboost282.mjs +2 -0
- package/dist/bin/bizboost283.mjs +2 -0
- package/dist/bin/bizboost284.mjs +2 -0
- package/dist/bin/bizboost285.mjs +2 -0
- package/dist/bin/bizboost286.mjs +2 -0
- package/dist/bin/bizboost287.mjs +2 -0
- package/dist/bin/bizboost288.mjs +2 -0
- package/dist/bin/bizboost289.mjs +2 -0
- package/dist/bin/bizboost290.mjs +2 -0
- package/dist/bin/bizboost291.mjs +2 -0
- package/dist/bin/bizboost292.mjs +2 -0
- package/dist/bin/bizboost293.mjs +2 -0
- package/dist/bin/bizboost294.mjs +2 -0
- package/dist/bin/bizboost295.mjs +2 -0
- package/dist/bin/bizboost296.mjs +2 -0
- package/dist/bin/bizboost297.mjs +2 -0
- package/dist/bin/bizboost298.mjs +2 -0
- package/dist/bin/bizboost299.mjs +2 -0
- package/dist/bin/bizboost300.mjs +2 -0
- package/dist/bin/bluelamp-vscode-base.mjs +1 -1
- package/dist/i18n/en.d.ts +6 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +1 -1
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/index.d.ts +1 -1
- package/dist/i18n/ja.d.ts +6 -1
- package/dist/i18n/ja.d.ts.map +1 -1
- package/dist/i18n/ja.js +1 -1
- package/dist/i18n/ja.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/account-mcp/index.cjs +1 -1
- package/dist/lib/accountAssurance.d.ts +41 -0
- package/dist/lib/accountAssurance.d.ts.map +1 -0
- package/dist/lib/accountAssurance.js +1 -0
- package/dist/lib/accountAssurance.js.map +1 -0
- package/dist/lib/claudeAccount.d.ts +45 -0
- package/dist/lib/claudeAccount.d.ts.map +1 -0
- package/dist/lib/claudeAccount.js +1 -0
- package/dist/lib/claudeAccount.js.map +1 -0
- package/dist/lib/claudeOnboardingSeed.d.ts +131 -0
- package/dist/lib/claudeOnboardingSeed.d.ts.map +1 -0
- package/dist/lib/claudeOnboardingSeed.js +1 -0
- package/dist/lib/claudeOnboardingSeed.js.map +1 -0
- package/dist/lib/debugRedaction.d.ts +42 -0
- package/dist/lib/debugRedaction.d.ts.map +1 -0
- package/dist/lib/debugRedaction.js +1 -0
- package/dist/lib/debugRedaction.js.map +1 -0
- package/dist/lib/headlessLaunch.d.ts +63 -0
- package/dist/lib/headlessLaunch.d.ts.map +1 -0
- package/dist/lib/headlessLaunch.js +1 -0
- package/dist/lib/headlessLaunch.js.map +1 -0
- package/dist/lib/inheritedTenant.d.ts +44 -0
- package/dist/lib/inheritedTenant.d.ts.map +1 -0
- package/dist/lib/inheritedTenant.js +1 -0
- package/dist/lib/inheritedTenant.js.map +1 -0
- package/dist/lib/mcp-server/index.cjs +1 -1
- package/dist/lib/mcp-server/install-package.cjs +1 -0
- package/dist/lib/mcp-server/mcp-version-advisor.cjs +1 -0
- package/dist/lib/mcp-server/portal-api-client.cjs +1 -1
- package/dist/lib/mcpJsonSelfHeal.d.ts +77 -0
- package/dist/lib/mcpJsonSelfHeal.d.ts.map +1 -0
- package/dist/lib/mcpJsonSelfHeal.js +1 -0
- package/dist/lib/mcpJsonSelfHeal.js.map +1 -0
- package/dist/lib/promptFailureGuidance.d.ts +30 -0
- package/dist/lib/promptFailureGuidance.d.ts.map +1 -0
- package/dist/lib/promptFailureGuidance.js +1 -0
- package/dist/lib/promptFailureGuidance.js.map +1 -0
- package/dist/lib/requireFromPackage.cjs +1 -0
- package/dist/lib/slotKeywordResolve.d.ts +69 -0
- package/dist/lib/slotKeywordResolve.d.ts.map +1 -0
- package/dist/lib/slotKeywordResolve.js +1 -0
- package/dist/lib/slotKeywordResolve.js.map +1 -0
- package/dist/lib/tempMcpConfig.d.ts +79 -0
- package/dist/lib/tempMcpConfig.d.ts.map +1 -0
- package/dist/lib/tempMcpConfig.js +1 -0
- package/dist/lib/tempMcpConfig.js.map +1 -0
- package/dist/lib/whoami.d.ts +34 -0
- package/dist/lib/whoami.d.ts.map +1 -0
- package/dist/lib/whoami.js +1 -0
- package/dist/lib/whoami.js.map +1 -0
- package/dist/scripts/generate-commands.js +1 -1
- package/dist/shared/claude-bin.js +1 -0
- package/dist/utils/logger.d.ts +1 -1
- package/package.json +114 -11
- package/verify-release.sh +154 -0
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# bluelamp の公開 tarball が、当社 GitHub Actions が出した正規ビルドであることを
|
|
3
|
+
# 第三者が検証するスクリプト。板 #507 ①。手順の正本: docs/npm-release-verification.md
|
|
4
|
+
#
|
|
5
|
+
# 使い方: ./verify-release.sh <version> 例: ./verify-release.sh 6.6.5
|
|
6
|
+
# インストール済みなら ./node_modules/bluelamp/verify-release.sh <version>
|
|
7
|
+
#
|
|
8
|
+
# ⚠️ このスクリプトは npm パッケージに同梱されているが、**信頼の起点ではない**。
|
|
9
|
+
# 改ざんされた tarball は改ざんされた検証器を同梱できる(検証器と検証対象が同じ袋に入って
|
|
10
|
+
# いる以上、これは原理的に避けられない)。これは繰り返し検証の利便のための道具である。
|
|
11
|
+
# 🔑 信頼の起点は「当社が配る物を一切実行しない」次の 2 手順である:
|
|
12
|
+
# 1. curl で tarball を取り、自分で sha256 を出す
|
|
13
|
+
# 2. その sha256 で公開透明性ログ(Rekor)を引き、人が目で記録を読む
|
|
14
|
+
# 詳細: docs/npm-release-verification.md §5
|
|
15
|
+
#
|
|
16
|
+
# 依存は curl / openssl / node の 3 つだけ(node は bluelamp 利用者なら必ず持つ)。
|
|
17
|
+
# cosign のインストールは不要。当社の認証情報も GitHub アカウントも不要。
|
|
18
|
+
#
|
|
19
|
+
# 🚨 このスクリプトはフォールバックしない。判定材料が欠けた場合も「通す」のではなく赤で落とす
|
|
20
|
+
# (測定不能は赤に倒す)。exit 0 以外はすべて「正規ビルドと確認できなかった」を意味する。
|
|
21
|
+
# exit 0 = 検証通過 / exit 1 = 検証失敗(改ざん・署名なし・身元不一致)/ exit 2 = 測定不能(前提不足)
|
|
22
|
+
|
|
23
|
+
set -euo pipefail
|
|
24
|
+
|
|
25
|
+
PKG="${BLUELAMP_PKG:-bluelamp}"
|
|
26
|
+
# 署名者としてこれ以外を受け付けない(ここが緩むと「誰かが署名した」だけの検証に落ちる)
|
|
27
|
+
EXPECT_REPO="${BLUELAMP_EXPECT_REPO:-mikoto-co-jp/mikoto-monorepo}"
|
|
28
|
+
EXPECT_WORKFLOW="${BLUELAMP_EXPECT_WORKFLOW:-.github/workflows/publish-npm.yml}"
|
|
29
|
+
EXPECT_ISSUER="${BLUELAMP_EXPECT_ISSUER:-https://token.actions.githubusercontent.com}"
|
|
30
|
+
REKOR="${BLUELAMP_REKOR_URL:-https://rekor.sigstore.dev}"
|
|
31
|
+
FULCIO="${BLUELAMP_FULCIO_URL:-https://fulcio.sigstore.dev}"
|
|
32
|
+
REGISTRY="${BLUELAMP_REGISTRY:-https://registry.npmjs.org}"
|
|
33
|
+
|
|
34
|
+
VERSION="${1:-}"
|
|
35
|
+
if [ -z "$VERSION" ]; then
|
|
36
|
+
echo "usage: $0 <version> (例: $0 6.6.5)" >&2
|
|
37
|
+
exit 2
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
for c in curl openssl node; do
|
|
41
|
+
command -v "$c" >/dev/null 2>&1 || { echo "FAIL(測定不能): $c が無い" >&2; exit 2; }
|
|
42
|
+
done
|
|
43
|
+
|
|
44
|
+
WORK="$(mktemp -d)"
|
|
45
|
+
trap 'rm -rf "$WORK"' EXIT
|
|
46
|
+
|
|
47
|
+
say() { printf '%s\n' "$*"; }
|
|
48
|
+
fail() { printf 'FAIL: %s\n' "$*" >&2; exit 1; }
|
|
49
|
+
unmeasurable() { printf 'FAIL(測定不能): %s\n' "$*" >&2; exit 2; }
|
|
50
|
+
|
|
51
|
+
say "== 1. registry から ${PKG}@${VERSION} のメタデータを取得 =="
|
|
52
|
+
curl -sSf "${REGISTRY}/${PKG}/${VERSION}" -o "$WORK/meta.json" \
|
|
53
|
+
|| unmeasurable "${PKG}@${VERSION} を registry から取得できない"
|
|
54
|
+
eval "$(node -e '
|
|
55
|
+
const j=require(process.argv[1]);
|
|
56
|
+
const d=j.dist||{};
|
|
57
|
+
if(!d.tarball||!d.shasum||!d.integrity) { console.log("BAD=1"); process.exit(0); }
|
|
58
|
+
console.log("TARBALL_URL=" + JSON.stringify(d.tarball));
|
|
59
|
+
console.log("EXP_SHA1=" + JSON.stringify(d.shasum));
|
|
60
|
+
console.log("EXP_INTEGRITY=" + JSON.stringify(d.integrity));
|
|
61
|
+
' "$WORK/meta.json")"
|
|
62
|
+
[ "${BAD:-0}" = "1" ] && unmeasurable "registry メタデータに dist.tarball/shasum/integrity が揃っていない"
|
|
63
|
+
say " tarball: $TARBALL_URL"
|
|
64
|
+
|
|
65
|
+
say "== 2. tarball を取得し、registry が公示する digest と一致するか =="
|
|
66
|
+
curl -sSfL "$TARBALL_URL" -o "$WORK/pkg.tgz" || unmeasurable "tarball を取得できない"
|
|
67
|
+
GOT_SHA1="$(openssl dgst -sha1 -r "$WORK/pkg.tgz" | cut -d' ' -f1)"
|
|
68
|
+
GOT_SHA512_B64="$(openssl dgst -sha512 -binary "$WORK/pkg.tgz" | openssl base64 -A)"
|
|
69
|
+
[ "$GOT_SHA1" = "$EXP_SHA1" ] || fail "sha1 不一致 (registry=$EXP_SHA1 / 実物=$GOT_SHA1)"
|
|
70
|
+
[ "sha512-$GOT_SHA512_B64" = "$EXP_INTEGRITY" ] || fail "integrity 不一致 (registry=$EXP_INTEGRITY)"
|
|
71
|
+
SHA256="$(openssl dgst -sha256 -r "$WORK/pkg.tgz" | cut -d' ' -f1)"
|
|
72
|
+
say " OK sha256=$SHA256"
|
|
73
|
+
|
|
74
|
+
say "== 3. 公開 Rekor をこの digest で検索(当社ホスティングは登場しない) =="
|
|
75
|
+
curl -sSf -X POST -H 'Content-Type: application/json' \
|
|
76
|
+
-d "{\"hash\":\"sha256:${SHA256}\"}" "${REKOR}/api/v1/index/retrieve" -o "$WORK/uuids.json" \
|
|
77
|
+
|| unmeasurable "Rekor 検索 API に到達できない"
|
|
78
|
+
UUIDS="$(node -e 'const a=require(process.argv[1]);if(!Array.isArray(a))process.exit(3);console.log(a.join("\n"))' "$WORK/uuids.json")" \
|
|
79
|
+
|| unmeasurable "Rekor の応答を解釈できない"
|
|
80
|
+
[ -n "$UUIDS" ] || fail "この digest に対する署名が公開 Rekor に 1 件も無い(=正規ビルドと確認できない)"
|
|
81
|
+
|
|
82
|
+
say "== 4. Fulcio の信頼バンドルを取得(証明書チェーンの検証に使う) =="
|
|
83
|
+
curl -sSf "${FULCIO}/api/v2/trustBundle" -o "$WORK/tb.json" || unmeasurable "Fulcio 信頼バンドルを取得できない"
|
|
84
|
+
node -e '
|
|
85
|
+
const fs=require("fs"),{execSync}=require("child_process");
|
|
86
|
+
const j=require(process.argv[1]),W=process.argv[2];
|
|
87
|
+
const certs=[]; for(const c of (j.chains||[])) for(const p of (c.certificates||[])) certs.push(p.trim());
|
|
88
|
+
const root=[],inter=[];
|
|
89
|
+
for(const pem of certs){
|
|
90
|
+
fs.writeFileSync(W+"/_t.pem",pem+"\n");
|
|
91
|
+
const s=execSync("openssl x509 -in "+W+"/_t.pem -noout -subject -issuer").toString();
|
|
92
|
+
(s.match(/subject=(.*)/)[1].trim()===s.match(/issuer=(.*)/)[1].trim()?root:inter).push(pem);
|
|
93
|
+
}
|
|
94
|
+
if(!root.length) process.exit(3);
|
|
95
|
+
fs.writeFileSync(W+"/root.pem",root.join("\n")+"\n");
|
|
96
|
+
fs.writeFileSync(W+"/inter.pem",inter.join("\n")+"\n");
|
|
97
|
+
' "$WORK/tb.json" "$WORK" || unmeasurable "Fulcio 信頼バンドルを分解できない"
|
|
98
|
+
|
|
99
|
+
say "== 5. 各エントリを検証(1 件でも全条件を満たせば通過) =="
|
|
100
|
+
PASSED=0
|
|
101
|
+
while IFS= read -r UUID; do
|
|
102
|
+
[ -n "$UUID" ] || continue
|
|
103
|
+
say "-- entry $UUID"
|
|
104
|
+
curl -sSf "${REKOR}/api/v1/log/entries/${UUID}" -o "$WORK/entry.json" || { say " skip: エントリを取得できない"; continue; }
|
|
105
|
+
# body(base64 JSON) から kind / hash / 署名 / 証明書 / integratedTime を取り出す
|
|
106
|
+
if ! node -e '
|
|
107
|
+
const fs=require("fs");const j=require(process.argv[1]),W=process.argv[2],SHA=process.argv[3];
|
|
108
|
+
const k=Object.keys(j)[0], e=j[k];
|
|
109
|
+
const b=JSON.parse(Buffer.from(e.body,"base64").toString());
|
|
110
|
+
if(b.kind!=="hashedrekord") { console.error(" skip: kind="+b.kind); process.exit(3); }
|
|
111
|
+
if((b.spec.data.hash.value||"").toLowerCase()!==SHA) { console.error(" skip: エントリの hash が対象と違う"); process.exit(3); }
|
|
112
|
+
fs.writeFileSync(W+"/sig.bin", Buffer.from(b.spec.signature.content,"base64"));
|
|
113
|
+
fs.writeFileSync(W+"/cert.pem", Buffer.from(b.spec.signature.publicKey.content,"base64").toString());
|
|
114
|
+
fs.writeFileSync(W+"/at.txt", String(e.integratedTime));
|
|
115
|
+
' "$WORK/entry.json" "$WORK" "$SHA256"; then continue; fi
|
|
116
|
+
AT="$(cat "$WORK/at.txt")"
|
|
117
|
+
|
|
118
|
+
# 5-1. 証明書が Fulcio のルートに繋がるか。
|
|
119
|
+
# 🚨 -attime は必須。Fulcio の証明書は 10 分の短命なので、現在時刻で verify すると必ず期限切れで落ちる。
|
|
120
|
+
# 署名時点(Rekor が記録した integratedTime)で有効だったかを問う。
|
|
121
|
+
if ! openssl verify -CAfile "$WORK/root.pem" -untrusted "$WORK/inter.pem" -attime "$AT" "$WORK/cert.pem" >/dev/null 2>&1; then
|
|
122
|
+
say " skip: 証明書が Fulcio のルートに繋がらない"; continue
|
|
123
|
+
fi
|
|
124
|
+
|
|
125
|
+
# 5-2. 署名者の身元。ここが緩むと「誰かが署名した」だけの検証になる
|
|
126
|
+
SAN="$(openssl x509 -in "$WORK/cert.pem" -noout -ext subjectAltName 2>/dev/null | tr -d ' ' | sed -n 's/.*URI:\([^,]*\).*/\1/p' | head -1)"
|
|
127
|
+
case "$SAN" in
|
|
128
|
+
"https://github.com/${EXPECT_REPO}/${EXPECT_WORKFLOW}@"*) : ;;
|
|
129
|
+
*) say " skip: 署名者が当社ワークフローでない (SAN=${SAN:-なし})"; continue ;;
|
|
130
|
+
esac
|
|
131
|
+
if ! openssl x509 -in "$WORK/cert.pem" -noout -text 2>/dev/null | grep -qF "$EXPECT_ISSUER"; then
|
|
132
|
+
say " skip: OIDC 発行者が $EXPECT_ISSUER でない"; continue
|
|
133
|
+
fi
|
|
134
|
+
|
|
135
|
+
# 5-3. その証明書の鍵で、tarball のバイト列に対する署名が検証できるか
|
|
136
|
+
openssl x509 -in "$WORK/cert.pem" -pubkey -noout > "$WORK/cert.pub" 2>/dev/null || { say " skip: 公開鍵を取り出せない"; continue; }
|
|
137
|
+
if ! openssl dgst -sha256 -verify "$WORK/cert.pub" -signature "$WORK/sig.bin" "$WORK/pkg.tgz" >/dev/null 2>&1; then
|
|
138
|
+
say " skip: 署名が tarball と一致しない"; continue
|
|
139
|
+
fi
|
|
140
|
+
|
|
141
|
+
say ""
|
|
142
|
+
say "✅ 検証通過: ${PKG}@${VERSION} は当社 GitHub Actions が出した正規ビルドです"
|
|
143
|
+
say " tarball sha256 : $SHA256"
|
|
144
|
+
say " 署名者(SAN) : $SAN"
|
|
145
|
+
say " OIDC 発行者 : $EXPECT_ISSUER"
|
|
146
|
+
say " 署名時刻 : $(date -u -r "$AT" '+%Y-%m-%dT%H:%M:%SZ' 2>/dev/null || date -u -d "@$AT" '+%Y-%m-%dT%H:%M:%SZ')"
|
|
147
|
+
say " 透明性ログ : ${REKOR}/api/v1/log/entries/${UUID}"
|
|
148
|
+
PASSED=1
|
|
149
|
+
break
|
|
150
|
+
done <<EOF
|
|
151
|
+
$UUIDS
|
|
152
|
+
EOF
|
|
153
|
+
|
|
154
|
+
[ "$PASSED" = "1" ] || fail "全条件を満たすエントリが無かった(=正規ビルドと確認できない)"
|