Skip to content

Commit 380a434

Browse files
nedtwiggclaude
andcommitted
Polish Supply Chain page and fill in libappindicator crate metadata
- Show the dependency count inline beside each section title and let descriptions contain explicit newlines (whitespace-pre-line). - Tighten the intro copy and bundled-runtime description. - Add cargo author/homepage overrides for libappindicator and libappindicator-sys, whose published Cargo.toml omits both, so they link to tauri-apps/libappindicator-rs and credit Tauri Apps Contributors instead of rendering "Unknown". Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 1136672 commit 380a434

3 files changed

Lines changed: 31 additions & 30 deletions

File tree

website/scripts/generate-deps.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,18 @@ for (const dep of deps) {
261261

262262
deps.sort((a, b) => a.name.localeCompare(b.name));
263263

264+
// Manual overrides for Cargo crates whose published Cargo.toml omits author or
265+
// homepage metadata. Keyed by crate name. libappindicator{,-sys} ship empty
266+
// `authors`/`homepage`/`repository`, so cargo metadata yields null for both.
267+
const cargoMissingAuthor = {
268+
"libappindicator": "Tauri Apps Contributors",
269+
"libappindicator-sys": "Tauri Apps Contributors",
270+
};
271+
const cargoMissingHomepage = {
272+
"libappindicator": "https://github.com/tauri-apps/libappindicator-rs",
273+
"libappindicator-sys": "https://github.com/tauri-apps/libappindicator-rs",
274+
};
275+
264276
function getCargoHomepage(pkg) {
265277
return pkg.homepage || pkg.repository || pkg.documentation || null;
266278
}
@@ -275,8 +287,8 @@ function cargoPackageEntry(pkg) {
275287
name: pkg.name,
276288
version: pkg.version,
277289
license: normalizeLicense(pkg.license),
278-
author: formatCargoAuthor(pkg.authors),
279-
homepage: getCargoHomepage(pkg),
290+
author: formatCargoAuthor(pkg.authors) ?? cargoMissingAuthor[pkg.name] ?? null,
291+
homepage: getCargoHomepage(pkg) ?? cargoMissingHomepage[pkg.name] ?? null,
280292
};
281293
}
282294

website/src/data/dependencies-cargo.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1281,15 +1281,15 @@
12811281
"name": "libappindicator",
12821282
"version": "0.9.0",
12831283
"license": "MIT OR Apache-2.0",
1284-
"author": null,
1285-
"homepage": null
1284+
"author": "Tauri Apps Contributors",
1285+
"homepage": "https://github.com/tauri-apps/libappindicator-rs"
12861286
},
12871287
{
12881288
"name": "libappindicator-sys",
12891289
"version": "0.9.0",
12901290
"license": "MIT OR Apache-2.0",
1291-
"author": null,
1292-
"homepage": null
1291+
"author": "Tauri Apps Contributors",
1292+
"homepage": "https://github.com/tauri-apps/libappindicator-rs"
12931293
},
12941294
{
12951295
"name": "libc",

website/src/pages/SupplyChain.tsx

Lines changed: 13 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -119,23 +119,23 @@ function DependencySection({
119119
title,
120120
count,
121121
description,
122-
unit = "packages",
123122
children,
124123
}: {
125124
title: string;
126125
count: number;
127126
description: string;
128-
unit?: string;
129127
children: ReactNode;
130128
}) {
131129
return (
132130
<section className="mt-12">
133131
<div className="mb-4 flex flex-col gap-1 border-b border-[var(--color-text)]/10 pb-3 md:flex-row md:items-end md:justify-between">
134132
<div>
135-
<h2 className="font-display text-xl">{title}</h2>
136-
<p className="text-sm opacity-60">{description}</p>
133+
<div className="flex items-baseline gap-2">
134+
<h2 className="font-display text-xl">{title}</h2>
135+
<div className="font-mono text-md opacity-50">({count})</div>
136+
</div>
137+
<p className="text-sm opacity-60 whitespace-pre-line">{description}</p>
137138
</div>
138-
<div className="font-mono text-sm opacity-50">{count} {count === 1 ? unit.replace(/s$/, "") : unit}</div>
139139
</div>
140140
{children}
141141
</section>
@@ -154,40 +154,30 @@ export function Component() {
154154
</h1>
155155
<p className="text-base text-[var(--color-text)]/70 mb-2">
156156
Dormouse is a terminal, so users trust it with shells, source trees, credentials, and
157-
local files. Our security procedures are documented in full (and audited nightly) in{" "}
157+
local files. Our security procedures are documented in full (and audited nightly and immediately before every release) in{" "}
158158
<a
159159
href={securityPolicyUrl}
160160
className={link()}
161161
target="_blank"
162162
rel="noopener noreferrer"
163163
>
164164
SECURITY.md
165-
</a>. Here's how we protect that trust:
165+
</a>, here is a summary:
166166
</p>
167167
<ul className="text-base text-[var(--color-text)]/70 mb-2 list-disc space-y-1 pl-5">
168168
<li>
169-
We wait at least a day before adopting any newly published dependency, giving scanners
170-
and registries time to catch and pull malicious releases before they reach our build.
169+
We wait at least 24 hours before adopting any newly published dependency.
171170
</li>
172171
<li>
173-
Publishing secrets for the VS Code extension are gated in a CI environment that
174-
requires two separate maintainer accounts to approve a release.
172+
Signing and auto-update secrets for the Standalone app are stored offline, never in CI.
175173
</li>
176174
<li>
177-
Signing and auto-update secrets for the Standalone app are stored offline,
178-
never in CI.
175+
Publishing secrets for the VS Code extension are stored in CI locked by two separate maintainer accounts.
179176
</li>
180177
</ul>
181178

182179
<p className="text-base text-[var(--color-text)]/70 mb-2">
183-
The Standalone app also bundles a Node.js runtime, pinned to an exact version and verified
184-
against the shipped binary at build time. The npm dependencies below ship in both the VS Code extension and the
185-
Standalone app; the Cargo crates belong to the Standalone app alone and cover its full locked build graph,
186-
including build-time and platform-specific crates that aren't all linked into the final binary. Thank you to every
187-
author and contributor below.
188-
</p>
189-
190-
<p className="text-base text-[var(--color-text)]/70 mb-10">
180+
All bundled libraries are listed below. Thank you to every author and contributor.
191181
Thanks also to{" "}
192182
<a
193183
href="https://github.com/reowens/ascii-splash"
@@ -226,16 +216,15 @@ export function Component() {
226216
<DependencySection
227217
title="Bundled Runtime"
228218
count={runtimeDeps.length}
229-
unit="runtimes"
230-
description="The Node.js runtime shipped as a Tauri sidecar with the Standalone app, pinned exactly in standalone/.node-version and verified against the bundled binary at build time, so this version provably matches what ships. Node bundles V8, OpenSSL, and other components under their own licenses. The VS Code extension bundles no runtime — it runs on the editor's own Electron Node, the same runtime VS Code uses for its integrated terminal."
219+
description={"The Standalone app ships a bundled NodeJS, which bundles other components under their own licenses.\nThe VS Code extension bundles no runtime — it runs on the editor's own Electron Node."}
231220
>
232221
<PackageTable deps={runtimeDeps} />
233222
</DependencySection>
234223

235224
<DependencySection
236225
title="npm Dependencies"
237226
count={npmDeps.length}
238-
description="Runtime npm packages used by the standalone app, VS Code extension, and shared terminal UI."
227+
description="Runtime npm packages used by both the Standalone app and the VS Code extension."
239228
>
240229
<PackageTable deps={npmDeps} />
241230
</DependencySection>

0 commit comments

Comments
 (0)