Skip to content

Commit b169207

Browse files
Merge branch 'master' into test
2 parents c2418af + 885b8ea commit b169207

File tree

9 files changed

+88
-43
lines changed
  • src
    • collections/news
      • 2025
        • 2025-11-12-meshery-enterprise
        • 2025-11-16-cncf-honors-innovators-and-defenders-community-awards
        • 2025-11-23-kubecon-2025-cncf-to-standardize-ai-workloads
        • 2025-12-01-cncf-honours-cloud-native-pioneers-2025-community-awards
      • 2026
      • news-template/0000-00-00-news-title
    • sections/Company/News-grid

9 files changed

+88
-43
lines changed

gatsby-node.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,9 @@ exports.createPages = async ({ actions, graphql, reporter }) => {
146146
}
147147
) {
148148
nodes {
149+
frontmatter {
150+
category
151+
}
149152
fields {
150153
slug
151154
}
@@ -386,6 +389,22 @@ exports.createPages = async ({ actions, graphql, reporter }) => {
386389
const blogs = res.data.blogPosts.nodes;
387390
const resources = res.data.resourcePosts.nodes;
388391
const news = res.data.newsPosts.nodes;
392+
393+
const VALID_NEWS_CATEGORIES = new Set(["Coverage", "Press Release"]);
394+
const invalidNewsItems = news.filter(
395+
({ frontmatter }) => !VALID_NEWS_CATEGORIES.has(frontmatter.category),
396+
);
397+
if (invalidNewsItems.length > 0) {
398+
invalidNewsItems.forEach(({ frontmatter, internal }) => {
399+
reporter.error(
400+
`Invalid news category "${frontmatter.category}" in ${internal.contentFilePath}. Must be one of: ${[...VALID_NEWS_CATEGORIES].join(", ")}.`,
401+
);
402+
});
403+
reporter.panicOnBuild(
404+
"News category validation failed. Fix the categories listed above.",
405+
);
406+
return;
407+
}
389408
const books = res.data.bookPosts.nodes;
390409
const events = res.data.eventPosts.nodes;
391410
const programs = res.data.programPosts.nodes;

src/collections/news/2025/2025-11-12-meshery-enterprise/index.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ date: 2025-11-12 19:00:00 +0530
55
author: Cloud Native Now
66
thumbnail: ./Layer5-Kanvas-Designer-img.webp
77
darkthumbnail: ./Layer5-Kanvas-Designer-img.webp
8-
category: "Press Coverage"
8+
category: Coverage
99
description: "Announced at KubeCon + CloudNativeCon North America 2025, Kanvas extends the Meshery framework with visual tools, collaborative workspaces, and role-based access control for managing Kubernetes environments"
1010
source_url: https://cloudnativenow.com/features/layer5-debuts-enterprise-edition-of-meshery-for-configuring-kubernetes/
1111
tags:

src/collections/news/2025/2025-11-16-cncf-honors-innovators-and-defenders-community-awards/index.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ date: 2025-11-16 08:00:00 -0530
55
author: Cloud Native Computing Foundation (CNCF)
66
thumbnail: ./kubecon-2025.webp
77
darkthumbnail: ./kubecon-2025.webp
8-
category: "Press Coverage"
8+
category: Coverage
99
description: "CNCF’s 2025 Community Awards at KubeCon + CloudNativeCon North America spotlights contributors, end users, mentors, and community heroes, with Layer5 founder Lee Calcote honored for his mentorship leadership."
1010
tags:
1111
- Announcements

src/collections/news/2025/2025-11-23-kubecon-2025-cncf-to-standardize-ai-workloads/index.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ date: 2025-11-23 06:00:00 +0530
55
author: ITOps Times
66
thumbnail: ./kubecon25.webp
77
darkthumbnail: ./kubecon25.webp
8-
category: "News Press"
8+
category: Coverage
99
eurl: https://itopstimes.com/kubernetes/kubecon-2025-cncf-to-standardize-ai-workloads/
1010
source_url: https://itopstimes.com/kubernetes/kubecon-2025-cncf-to-standardize-ai-workloads/
1111
tags:

src/collections/news/2025/2025-12-01-cncf-honours-cloud-native-pioneers-2025-community-awards/index.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ date: 2025-12-01 08:00:00 -0530
55
author: ChannelLife Canada
66
thumbnail: ./channellife-cncf-2025.webp
77
darkthumbnail: ./channellife-cncf-2025.webp
8-
category: "Press Coverage"
8+
category: Coverage
99
description: "ChannelLife covers CNCF's 2025 Community Awards, highlighting Layer5 founder Lee Calcote's recognition with the inaugural Outstanding Mentor Award for supporting hundreds of mentees."
1010
eurl: https://channellife.ca/story/cncf-honours-cloud-native-pioneers-at-2025-community-awards
1111
tags:

src/collections/news/2026/2026-01-21-docker-kanvas-kubernetes-dominance/index.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ thumbnail: ./docker-kanvas-infoq.webp
77
darkthumbnail: ./docker-kanvas-infoq.png
88
eurl: https://www.infoq.com/news/2026/01/docker-kanvas-cloud-deployment/
99
source_url: https://www.infoq.com/news/2026/01/docker-kanvas-cloud-deployment/
10-
category: "Press Coverage"
10+
category: Coverage
1111
description: "Docker has launched Kanvas, a new platform designed to bridge the gap between local development and cloud production. By automating the conversion of Docker Compose files into Kubernetes artefacts, the tool challenges established solutions like Helm and Kustomize. Developed with Layer5, it marks a shift toward Infrastructure as Code, offering visualisations to simplify cloud-native deployments."
1212
tags:
1313
- Press

src/collections/news/2026/2026-03-25/index.mdx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ date: 2026-03-25 09:00:00 +0100
55
author: Compare the Cloud
66
thumbnail: ./news-hero.webp
77
darkthumbnail: ./news-hero.webp
8-
category: "Press Coverage"
8+
category: Coverage
99
description: "At KubeCon EU 2026 in Amsterdam, Meshery maintainers announced general availability of Meshery v1.0, introducing Infrastructure as Design and new Kanvas tooling to make infrastructure visible, verifiable, and collaborative."
1010
tags:
1111
- Announcements
@@ -17,6 +17,7 @@ type: News
1717
presskit: ""
1818
resource: false
1919
published: true
20+
source_url: https://www.comparethecloud.net/news/meshery-v1-0-reaches-general-availability-at-kubecon-eu/
2021
---
2122

2223
import { Link } from "gatsby";
Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,27 @@
11
---
2-
title: "An example news headline here"
3-
subtitle: "A sample subtitle about growing together as a community and building a project that matters"
2+
type: News # Must be "News"
3+
title: "" # Mandatory. The title of the news item, which will appear in the listing and on the news item page. This should be a concise summary of the news content.
4+
subtitle: "" # Optional. A short description or tagline for the news item.
45
date: 2020-06-01 12:15:05 +0000
5-
author: The Newsroom
6-
thumbnail_svg: ./sample.webp
7-
darkthumbnail_svg: ./sample.webp
8-
source_url: https://original-source.com/article
9-
published: false
10-
---
11-
12-
{/* A template and instructions for creating news entries.
6+
author: "" # "The Newsroom" for Layer5 releases, or the name of the publication for coverage items for "Coverage" category news; e.g. "TechCrunch", "The New Stack", etc.
7+
thumbnail: ./hero.webp # Mandatory. Path to the thumbnail image for light mode (relative to this file) and can be .wepb, .png, .jpg, or .svg.
8+
darkthumbnail: ./hero-dark.webp # Mandatory. Path to the thumbnail image for dark mode (relative to this file) and can be .wepb, .png, .jpg, or .svg.
9+
description: "" # Mandatory. A brief description of the news item that will appear in the listing and on the news item page. This should be a concise summary of the news content.
10+
category: Coverage # Must be either "Coverage" or "Release". This is used to determine which section of the news collection this item will be listed under. See the "Coverage" and "Release" sections of the news listing page for examples. If the category is not one of these two values, the news item will not be listed on the website.
11+
tags: [] # Mandatory. An array of tags for the news item, such as ["Meshery", "KubeCon", "CNCF"].
12+
presskit: "" # Optional. A URL to a press kit or additional resources related to the news item.
13+
resource: false # Mandatory. A boolean indicating whether this news item is a resource that should be listed in the resources section of the website. If true, it will be included in the resources section; if false or omitted, it will not be included in the resources section but will still appear in the news listing.
14+
published: true # Mandatory A boolean indicating whether the news item is published. If true, it will be visible on the website; if false, it will be hidden until ready for publication.
15+
source_url: "" # Mandatory. URL to the original article for "Originally published at" attribution.
1316

14-
subtitle: If the "subtitle" variable is not defined, then put subtitle:""
15-
source_url: URL to the original article for "Originally published at" attribution.
16-
published: "true" when ready to be public
17+
---
1718

18-
Make a copy of this news template. Do not delete this template.
19-
Any styles to be defined can be defined in News.style.js and the class can be used here */}
19+
{/* A template and instructions for creating news entries. Any styles to be defined can be defined in News.style.js and the class can be used here */}
2020

2121
import { NewsWrapper } from "../../News.style.js";
2222

2323
<NewsWrapper>
2424

25-
<div className="test">
26-
2725
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
2826

29-
</div>
30-
3127
</NewsWrapper>

src/sections/Company/News-grid/index.js

Lines changed: 47 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -18,26 +18,33 @@ function colorchange(id) {
1818
element.classList.toggle("mystyle");
1919
}
2020
const NewsGrid = ({ data }) => {
21+
const { coverageCount, releasesCount } = data.allMdx.nodes.reduce(
22+
(acc, { frontmatter: { category } }) => {
23+
if (category.includes("Coverage")) acc.coverageCount++;
24+
if (category.includes("Press Release")) acc.releasesCount++;
25+
return acc;
26+
},
27+
{ coverageCount: 0, releasesCount: 0 },
28+
);
29+
2130
const [searchQuery, setSearchQuery] = useState("");
2231
const { queryResults, searchData } = useDataList(
2332
data.allMdx.nodes,
2433
setSearchQuery,
2534
searchQuery,
2635
["frontmatter", "title"],
27-
"id"
36+
"id",
2837
);
2938
const [news, setNews] = useState(queryResults);
30-
useEffect( () => {
39+
useEffect(() => {
3140
setNews(queryResults);
3241
if (coverageFiltered == true) {
3342
setNews(filteredCoverage);
3443
}
3544
if (pressReleaseFiltered == true) {
3645
setNews(filteredPressRelease);
3746
}
38-
}, [queryResults]
39-
40-
);
47+
}, [queryResults]);
4148
const filteredCoverage = queryResults.filter((obj) => {
4249
return obj.frontmatter.category.includes("Coverage");
4350
});
@@ -47,65 +54,87 @@ const NewsGrid = ({ data }) => {
4754

4855
const filterCoverage = () => {
4956
colorchange("coverage");
50-
if (coverageFiltered == false && pressReleaseFiltered == false){
57+
if (coverageFiltered == false && pressReleaseFiltered == false) {
5158
setNews(filteredCoverage);
5259
coverageFiltered = true;
5360
} else if (coverageFiltered == false && pressReleaseFiltered == true) {
5461
colorchange("press-release");
5562
setNews(filteredCoverage);
5663
coverageFiltered = true;
5764
pressReleaseFiltered = false;
58-
} else if (coverageFiltered == true && pressReleaseFiltered == false){
65+
} else if (coverageFiltered == true && pressReleaseFiltered == false) {
5966
setNews(queryResults);
6067
coverageFiltered = false;
6168
}
6269
};
6370
const filterPressRelease = () => {
6471
colorchange("press-release");
65-
if (pressReleaseFiltered == false && coverageFiltered == false){
72+
if (pressReleaseFiltered == false && coverageFiltered == false) {
6673
setNews(filteredPressRelease);
6774
pressReleaseFiltered = true;
6875
} else if (pressReleaseFiltered == false && coverageFiltered == true) {
6976
colorchange("coverage");
7077
setNews(filteredPressRelease);
7178
pressReleaseFiltered = true;
7279
coverageFiltered = false;
73-
} else if (pressReleaseFiltered == true && coverageFiltered == false){
80+
} else if (pressReleaseFiltered == true && coverageFiltered == false) {
7481
setNews(queryResults);
7582
pressReleaseFiltered = false;
7683
}
7784
};
7885
return (
7986
<NewsPageWrapper>
80-
<PageHeader title="Layer5 in the News" path="News" img={rss_feed_icon} feedlink="/news/feed.xml" />
87+
<PageHeader
88+
title="Layer5 in the News"
89+
path="News"
90+
img={rss_feed_icon}
91+
feedlink="/news/feed.xml"
92+
/>
8193

8294
<div>
8395
<Container>
8496
<div className="news-grid-wrapper">
8597
<div className="filter-buttons">
8698
<div className="button-container">
87-
<Button id="coverage" onClick={filterCoverage} className="coverage-button">Coverage</Button>
88-
<Button id="press-release" onClick={filterPressRelease} className="press-release-button">Press-Release</Button>
99+
<Button
100+
id="coverage"
101+
onClick={filterCoverage}
102+
className="coverage-button"
103+
>
104+
Coverage ({coverageCount})
105+
</Button>
106+
<Button
107+
id="press-release"
108+
onClick={filterPressRelease}
109+
className="press-release-button"
110+
>
111+
Releases ({releasesCount})
112+
</Button>
89113
</div>
90114
<div className="search">
91115
<div className="searchBox">
92-
<SearchBox searchQuery={searchQuery} searchData={searchData} focusSearch={true}/>
116+
<SearchBox
117+
searchQuery={searchQuery}
118+
searchData={searchData}
119+
focusSearch={true}
120+
/>
93121
</div>
94122
</div>
95123
</div>
96124

97-
<Row style={{
98-
flexWrap: "wrap"
99-
}}
125+
<Row
126+
style={{
127+
flexWrap: "wrap",
128+
}}
100129
>
101130
{news.length < 1 && (
102131
<Col $xs={12} $sm={6}>
103-
No News post that matches the title "{searchQuery}" found.
132+
No news matches the title "{searchQuery}" found.
104133
</Col>
105134
)}
106135
{news.map(({ id, frontmatter, fields }) => (
107136
<Col $xs={12} $sm={6} $lg={4} key={id}>
108-
<Card frontmatter={frontmatter} fields={fields}/>
137+
<Card frontmatter={frontmatter} fields={fields} />
109138
</Col>
110139
))}
111140
</Row>

0 commit comments

Comments
 (0)