From 499b1920756388f9933be0005bf5f3e04e11dbd1 Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sun, 31 May 2026 10:47:26 +0200 Subject: [PATCH 1/5] Add new function to collect vcs data Signed-off-by: Philippe Ombredanne --- website/docusaurus.config.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 6f7038b..dc9c8ee 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -5,6 +5,27 @@ // See: https://docusaurus.io/docs/api/docusaurus-config import { themes as prismThemes } from 'prism-react-renderer'; +import { execSync } from 'node:child_process'; + +// Run git to get versions, and commit date when buildingg. +// Fall-back to defaulst for non-git clones/tarballs/plain dir upload +function vcs_info() { + const run = (cmd) => execSync(cmd, { encoding: 'utf8' }).trim(); + try { + return { + version: run('git describe --always --tags --dirty'), + commit_date: run('git log -1 --format=%cI'), + // also strip trailing slash + repo_url: run('git config --get remote.origin.url').replace(/\/$/, ''), + }; + } catch { + return { + version: 'unknown', + commit_date: '', + repo_url: 'https://github.com/aboutcode-org/www.aboutcode.org', + }; + } +} // Deployment target: local | gh | dreamhost /** @type {'local' | 'gh' | 'dreamhost'} */ @@ -41,6 +62,10 @@ const config = { tagline: 'Open data, tools, and standards for the software supply chains', favicon: 'img/favicon.ico', + customFields: { + vcs_info: vcs_info(), + }, + markdown: { format: 'detect', // Auto-detects: .md = plain Markdown (CommonMark), .mdx = MDX From 33ab0a9dcf403bca3f1ea3b6f5948f8ae1db2478 Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sun, 31 May 2026 18:38:31 +0200 Subject: [PATCH 2/5] Add vcs git details to footer This help track exactly the current deployed commit and origin Signed-off-by: Philippe Ombredanne --- website/docusaurus.config.js | 10 ++++++---- website/src/css/custom.css | 12 ++++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index dc9c8ee..0435f68 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -56,15 +56,17 @@ const siteConfig = { // Define const for the footer icon paths. const currentBaseUrl = siteConfig[deployTarget].baseUrl +const vcs = vcs_info(); +const buildLine = vcs.version === 'unknown' + ? '' + : ``; + /** @type {import('@docusaurus/types').Config} */ const config = { title: 'AboutCode.org', tagline: 'Open data, tools, and standards for the software supply chains', favicon: 'img/favicon.ico', - customFields: { - vcs_info: vcs_info(), - }, markdown: { @@ -221,7 +223,7 @@ const config = { { label: 'Terms of Use', to: '/terms' }, { label: 'Credits', to: '/docs/about/credits' }, ], - copyright: `Copyright AboutCode Europe ASBL.   Content licensed under CC-BY-SA-4.0.   Built with Docusaurus.`, + copyright: `Copyright (c) AboutCode Europe ASBL.   Content licensed under CC-BY-SA-4.0.${buildLine}`, }, prism: { theme: prismThemes.github, diff --git a/website/src/css/custom.css b/website/src/css/custom.css index a41d92e..ba2847a 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -89,3 +89,15 @@ .footer { background-color: #2b3a5e; } + +.footer__build { + margin-top: 0.5rem; + font-size: 0.75rem; + opacity: 0.55; +} + +.footer__build a { + color: inherit; + border-bottom: 1px dotted currentColor; + text-decoration: none; +} From 2e5dc40468a46881cc685170b874cd38b44c4026 Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sun, 31 May 2026 20:51:51 +0200 Subject: [PATCH 3/5] Split grids in featured and others Only show featured on home page and then link to a new Environments page Signed-off-by: Philippe Ombredanne --- website/docusaurus.config.js | 6 +- website/src/components/EcosystemGrid/index.js | 90 +++++++++++++++---- .../EcosystemGrid/styles.module.css | 30 +++++++ .../src/components/HomepageContent/index.js | 8 +- website/src/pages/environments.js | 34 +++++++ 5 files changed, 148 insertions(+), 20 deletions(-) create mode 100644 website/src/pages/environments.js diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 0435f68..261e06f 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -59,7 +59,7 @@ const currentBaseUrl = siteConfig[deployTarget].baseUrl const vcs = vcs_info(); const buildLine = vcs.version === 'unknown' ? '' - : ``; + : ``; /** @type {import('@docusaurus/types').Config} */ const config = { @@ -160,6 +160,10 @@ const config = { label: 'Projects', position: 'left' }, + { to: '/environments', + label: 'Environments', + position: 'left' + }, { type: 'dropdown', label: 'About', diff --git a/website/src/components/EcosystemGrid/index.js b/website/src/components/EcosystemGrid/index.js index 64d4f81..d7e1828 100644 --- a/website/src/components/EcosystemGrid/index.js +++ b/website/src/components/EcosystemGrid/index.js @@ -229,8 +229,17 @@ function GridItem({ item }) { ); } -function GridSection({ id, title, items, header_link, intro }) { + +// Grid section comes either as a summary with see all link, or no link for +// the full envt. page +function GridSection({ id, title, items, header_link, intro, see_all }) { const headerLinkHref = useBaseUrl(header_link?.url || '/'); + const seeAllHref = useBaseUrl(see_all?.url || '/'); + + const introWithSeeAll = intro && see_all + ? React.cloneElement(intro, {}, ...React.Children.toArray(intro.props.children), ' ', + {see_all.label}.) + : intro; return (

@@ -239,7 +248,7 @@ function GridSection({ id, title, items, header_link, intro }) { <>{' - '}{header_link.label}... )}

- {intro &&
{intro}
} + {introWithSeeAll &&
{introWithSeeAll}
}
{items.map((item) => ( @@ -249,7 +258,56 @@ function GridSection({ id, title, items, header_link, intro }) { ); } -export default function EcosystemGrid() { +// Feature only the most common on home, with links to see all. + +const featured_licenses = [ + 'MIT', 'Apache-2.0', 'GPL-2.0', 'GPL-3.0', 'BSD-2-Clause', + 'BSD-3-Clause', 'LGPL-2.0', 'LGPL-2.1', 'LGPL-3.0', +].map((label) => licenses.find((v) => v.label === label)); + +const featured_vulnerability_sources = [ + 'NVD', 'CVE', 'GitHub Advisories', 'GitLab Advisories', 'OSV.dev', + 'npm Advisories', 'PyPA', 'Ruby Advisory DB', 'Rust Advisory DB', +].map((label) => vulnerability_sources.find((v) => v.label === label)); + +const featured_package_ecosystems = [ + 'npm', 'PyPI', 'Maven', 'NuGet', 'RubyGems', + 'Cargo', 'Composer', 'Conda', 'Docker', +].map((label) => package_ecosystems.find((v) => v.label === label)); + + +export default function EcosystemGrid({ featured = false }) { + if (featured) { + return ( +
+ AboutCode tracks over 2,500+ curated licenses across 12 categories. Browse all 2,500+ licenses in the LicenseDB. Industry-leading license detection is backed by over 35,000 license notices used as detection rules.

} + see_all={{ label: 'See more supported licenses', url: '/environments/#licensing' }} + /> + AboutCode collects, correlates, and improves vulnerabilities from multiple advisory data sources, privileging upstream data.

} + see_all={{ label: 'See more tracked vulnerability sources', url: '/environments/#vuln-sources' }} + /> + The AboutCode package database and scanners track millions of packages from most package ecosystems.

} + see_all={{ label: 'See more supported package ecosystems', url: '/environments/#pkg-ecosystems' }} + /> +
+ ); + } + return (
AboutCode tracks over 2,500+ curated licenses across 12 categories. Browse all 2,500+ licenses in the LicenseDB. Industry-leading license detection is backed by over 35,000 license notices used as detection rules.

} /> + The AboutCode package database and scanners track millions of packages from most package ecosystems.

} + /> AboutCode collects, correlates, and improves vulnerabilities from multiple advisory data sources, privileging upstream data.

} /> The AboutCode package database and scanners track millions of packages from most package ecosystems.

} - /> + id="vuln-reference-data" + title="Vulnerability severity and other reference data" + items={vulnerability_reference_data} + header_link={{ label: 'Get started with software security', url: '/docs/getting_started/software-security/' }} + intro={

AboutCode imports vulnerability reference data in key industry formats, mapping these to PURL.

} + /> AboutCode supports extraction of most archive, compressed, package, and disk image file formats.

} /> - AboutCode imports vulnerability reference data in key industry formats, mapping these to PURL.

} - />
); } diff --git a/website/src/components/EcosystemGrid/styles.module.css b/website/src/components/EcosystemGrid/styles.module.css index 727c8fa..a66df42 100644 --- a/website/src/components/EcosystemGrid/styles.module.css +++ b/website/src/components/EcosystemGrid/styles.module.css @@ -138,3 +138,33 @@ [data-theme='dark'] .cellLabel { color: #c8d0e0; } + +.moreList { + margin: 0.25rem 0 0 0; + padding-left: 1.25rem; + font-size: 0.9rem; + line-height: 1.6; +} + +.moreList a { + color: #2a6bc7; + text-decoration: none; + font-weight: 500; +} + +.moreList a:hover { + text-decoration: underline; +} + +.moreCount { + color: #6b7a99; + font-size: 0.8rem; +} + +.moreSummary { + color: #2b3a5e; +} + +[data-theme='dark'] .moreSummary { + color: #c8d0e0; +} diff --git a/website/src/components/HomepageContent/index.js b/website/src/components/HomepageContent/index.js index 8d7e6ae..dc9fa35 100644 --- a/website/src/components/HomepageContent/index.js +++ b/website/src/components/HomepageContent/index.js @@ -126,14 +126,16 @@ export default function HomepageContent() { className={styles.sectionHeader} style={{ marginBottom: '15px', marginTop: '15px' }} > -

Supported ecosystems, languages, licenses, and data sources

+

Supported ecosystems, languages, licenses, and data sources - See all environments

AboutCode tools support a large number of licenses, package ecosystems, programming languages, and vulnerability data sources, all identified using{' '} - Package-URL (PURL) or SPDX license expressions.

+ Package-URL (PURL) or SPDX license expressions. + See a few highlights below; the full set of supported Environments + also includes operating systems, programming languages, binary and archive formats, and more data sources.

- +
diff --git a/website/src/pages/environments.js b/website/src/pages/environments.js new file mode 100644 index 0000000..ff45d17 --- /dev/null +++ b/website/src/pages/environments.js @@ -0,0 +1,34 @@ +import React from 'react'; +import Layout from '@theme/Layout'; +import EcosystemGrid from '@site/src/components/EcosystemGrid'; +import styles from '@site/src/components/HomepageContent/styles.module.css'; + +export default function Environments() { + return ( + +
+
+
+

Environments

+
+
+

AboutCode tools support a large number of licenses, + package ecosystems, programming languages, operating + systems, binary and archive formats, and vulnerability + data sources, all identified using{' '} + Package-URL (PURL) or + SPDX license expressions.

+
+ +
+
+
+
+ ); +} From ab2da5ed0d72b74ec0ebc1bf10254e4ca1fa470d Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sun, 31 May 2026 20:58:32 +0200 Subject: [PATCH 4/5] Move supporters to bottom of home And add link to meetings Signed-off-by: Philippe Ombredanne --- .../src/components/HomepageContent/index.js | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/website/src/components/HomepageContent/index.js b/website/src/components/HomepageContent/index.js index dc9fa35..1470b9d 100644 --- a/website/src/components/HomepageContent/index.js +++ b/website/src/components/HomepageContent/index.js @@ -68,18 +68,6 @@ export default function HomepageContent() { -
-
-

Supporters

-
-
- -
-
-
+
+
+

Supporters

+
+
+ +

+ Join the conversation,{' '} + or contribute to{' '} + AboutCode projects to help make the software + supply chains healthier and safer! +

+
+
+
); From f9ede0a466f2c810d958d994e6c917a783fe25e6 Mon Sep 17 00:00:00 2001 From: Philippe Ombredanne Date: Sun, 31 May 2026 23:10:52 +0200 Subject: [PATCH 5/5] Minor content update Signed-off-by: Philippe Ombredanne --- website/src/pages/environments.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/pages/environments.js b/website/src/pages/environments.js index ff45d17..6d7caa5 100644 --- a/website/src/pages/environments.js +++ b/website/src/pages/environments.js @@ -7,7 +7,7 @@ export default function Environments() { return (