Skip to content

Commit cac2ccb

Browse files
Merge branch 'main' into fix/overlap
2 parents ffe5719 + a324bfd commit cac2ccb

257 files changed

Lines changed: 22858 additions & 664 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/main.yml

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ jobs:
2121
# Steps represent a sequence of tasks that will be executed as part of the job
2222
steps:
2323
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
24-
- uses: actions/checkout@v2
24+
- uses: actions/checkout@v4
2525

2626
- name: Set Node.js 22.x
2727
uses: actions/setup-node@v3
@@ -52,4 +52,47 @@ jobs:
5252
invalidation: /docs*
5353
delete-removed: true
5454
cache: "public, max-age:86400"
55-
private: true
55+
private: true
56+
57+
- name: Submit docs URLs to IndexNow
58+
env:
59+
INDEXNOW_KEY: ${{ secrets.INDEXNOW_KEY }}
60+
continue-on-error: true
61+
run: |
62+
# Use the built sitemap as the source of truth for URLs.
63+
SITEMAP="build/docs/sitemap.xml"
64+
if [ ! -f "$SITEMAP" ]; then
65+
echo "Sitemap not found at $SITEMAP, skipping IndexNow"
66+
exit 0
67+
fi
68+
69+
URLS=$(grep -oP '<loc>\K[^<]+' "$SITEMAP" || true)
70+
71+
if [ -z "$URLS" ]; then
72+
echo "No URLs found in sitemap, skipping"
73+
exit 0
74+
fi
75+
76+
URL_COUNT=$(echo "$URLS" | wc -l)
77+
echo "Submitting $URL_COUNT docs URLs to IndexNow"
78+
79+
KEY="${INDEXNOW_KEY:-9ded60b43b8b40578588fc42b04c3e5d}"
80+
JSON_URLS=$(echo "$URLS" | jq -R -s 'split("\n") | map(select(length > 0))' || true)
81+
82+
if [ -z "$JSON_URLS" ]; then
83+
echo "Failed to build JSON URL list, skipping"
84+
exit 0
85+
fi
86+
87+
RESPONSE_FILE=$(mktemp)
88+
HTTP_CODE=$(curl -s -o "$RESPONSE_FILE" -w "%{http_code}" -X POST "https://api.indexnow.org/indexnow" \
89+
-H "Content-Type: application/json" \
90+
-d "{\"host\":\"keploy.io\",\"key\":\"$KEY\",\"urlList\":$JSON_URLS}" || echo "000")
91+
92+
echo "IndexNow response: $HTTP_CODE"
93+
if [ "$HTTP_CODE" -ge 400 ] || [ "$HTTP_CODE" = "000" ]; then
94+
echo "IndexNow submission failed (HTTP $HTTP_CODE) — will not block deployment."
95+
echo "Verify the key file is hosted at https://keploy.io/${KEY}.txt"
96+
cat "$RESPONSE_FILE" 2>/dev/null || true
97+
fi
98+
rm -f "$RESPONSE_FILE"

.github/workflows/vale-lint-action.yml

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,18 @@ jobs:
99
steps:
1010
- uses: actions/checkout@v4.1.1
1111

12-
# Set up Vale Action
12+
# Set up Vale Action — only lint changed lines to avoid flagging pre-existing issues.
1313
- uses: errata-ai/vale-action@v2.1.1
1414
with:
15-
# Filter mode can be set to: added, diff_context, file, nofilter
16-
filter_mode: nofilter
17-
# Set the reporter to display the output: github-pr-check, github-pr-review, github-check
15+
# Only check lines added/modified in the PR diff.
16+
filter_mode: diff_context
17+
# Set the reporter to display the output
1818
reporter: github-pr-check
1919
# Fails the action if there are errors
2020
fail_on_error: true
21-
# Lint the files in the "versioned_docs/version-3.0.0/" directory
22-
files: 'versioned_docs/version-3.0.0'
21+
# Lint docs across all versioned directories
22+
files: 'versioned_docs'
2323
# Specify the Vale version
2424
version: 3.0.3
2525
env:
26-
# GitHub token for authentication, automatically set by GitHub Actions
2726
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}

docs/gsoc/contribution-guide.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ keywords:
66
- GSoC
77
- Open Source
88
- Hacktoberfest
9+
toc_min_heading_level: 2
10+
toc_max_heading_level: 2
911
---
1012

1113
# Getting Started with Google Summer of Code (GSoC)

docusaurus.config.js

Lines changed: 141 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,11 @@ module.exports = {
3131
"docusaurus-tailwindcss-loader",
3232
],
3333
themeConfig: {
34-
canonicalBase: "https://www.keploy.io/",
34+
tableOfContents: {
35+
minHeadingLevel: 2,
36+
maxHeadingLevel: 2,
37+
},
38+
canonicalBase: "https://keploy.io/",
3539
metadata: [
3640
{
3741
description: "Documentation for Keploy Backend Test Generator",
@@ -51,8 +55,37 @@ module.exports = {
5155
"API testing, Keploy docs, incident replay, network calls, code paths, test scenarios, code coverage, stubs, junit, go-test, live environment, production incidents, open source, regression tests, ai tests",
5256
},
5357
{name: "twitter:card", content: "summary_large_image"},
58+
{
59+
property: "og:image",
60+
content: "https://keploy.io/images/keploy-hero.png",
61+
},
62+
{property: "og:image:width", content: "1200"},
63+
{property: "og:image:height", content: "630"},
5464
],
5565
headTags: [
66+
// Google Fonts - DM Sans (loaded via headTags instead of CSS @import)
67+
{
68+
tagName: "link",
69+
attributes: {
70+
rel: "preconnect",
71+
href: "https://fonts.googleapis.com",
72+
},
73+
},
74+
{
75+
tagName: "link",
76+
attributes: {
77+
rel: "preconnect",
78+
href: "https://fonts.gstatic.com",
79+
crossorigin: "anonymous",
80+
},
81+
},
82+
{
83+
tagName: "link",
84+
attributes: {
85+
rel: "stylesheet",
86+
href: "https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;700&display=swap",
87+
},
88+
},
5689
// Preconnect tag
5790
{
5891
tagName: "link",
@@ -67,15 +100,55 @@ module.exports = {
67100
type: "application/ld+json",
68101
},
69102
innerHTML: JSON.stringify({
70-
"@context": "https://schema.org/",
71-
"@type": "Product",
72-
description:
73-
"Keploy - Open source tool that generates integration tests like unit tests with mocks or stubs from API calls.",
74-
keywords:
75-
"API testing, incident replay, network calls, code paths, test scenarios, code coverage, stubs, junit, go-test, live environment, production incidents, open source, regression tests, ai tests",
103+
"@context": "https://schema.org",
104+
"@type": "SoftwareApplication",
76105
name: "Keploy",
77-
url: "https://keploy.io/",
78-
logo: "https://keploy.io/docs/img/favicon.png",
106+
description:
107+
"Keploy is an open-source, AI-powered testing agent and sandboxing platform that automatically generates test cases, dependency mocks, and production-like sandboxes from real user traffic using eBPF. It helps developers achieve 90% test coverage in minutes with zero code changes. Native support is available on Linux; macOS and Windows require a Linux environment such as Lima, WSL, or Docker.",
108+
applicationCategory: "DeveloperTool",
109+
applicationSubCategory: "Test Automation",
110+
operatingSystem: "Linux",
111+
license: "https://www.apache.org/licenses/LICENSE-2.0",
112+
softwareHelp: "https://keploy.io/docs/",
113+
codeRepository: "https://github.com/keploy/keploy",
114+
downloadUrl: "https://github.com/keploy/keploy/releases",
115+
isAccessibleForFree: true,
116+
url: "https://keploy.io",
117+
featureList: [
118+
"Automatic test case generation from real user traffic",
119+
"Production-like sandbox environments from captured traffic",
120+
"AI-powered dependency virtualization and mock generation",
121+
"Record and replay testing with eBPF kernel capture",
122+
"AI noise detection for flaky test elimination",
123+
"Legacy application testing without code changes",
124+
"Migration regression testing against production baselines",
125+
"Continuous validation in CI/CD pipelines",
126+
"Multi-language support (Go, Java, TypeScript, Python)",
127+
],
128+
keywords: [
129+
"test automation",
130+
"API testing",
131+
"API test generation",
132+
"unit testing",
133+
"integration testing",
134+
"mock generation",
135+
"dependency virtualization",
136+
"eBPF-based testing",
137+
"record and replay",
138+
"production sandbox",
139+
],
140+
programmingLanguage: [
141+
"Go",
142+
"Java",
143+
"TypeScript",
144+
"JavaScript",
145+
"Python",
146+
],
147+
publisher: {
148+
"@type": "Organization",
149+
name: "Keploy",
150+
url: "https://keploy.io",
151+
},
79152
}),
80153
},
81154
{
@@ -88,7 +161,30 @@ module.exports = {
88161
"@type": "Organization",
89162
name: "Keploy",
90163
url: "https://keploy.io/",
91-
logo: "https://keploy.io/docs/img/favicon.png",
164+
logo: "https://keploy.io/images/keploy-logo-full.svg",
165+
foundingDate: "2021-01-01",
166+
knowsAbout: [
167+
"API Testing",
168+
"Test Automation",
169+
"eBPF-based Testing",
170+
"Dependency Virtualization",
171+
"AI-Powered Testing",
172+
],
173+
award: [
174+
"API World 2023 Award: Best in API Infrastructure",
175+
"CNCF Landscape",
176+
"Google for Startups Accelerator",
177+
"Google Summer of Code Mentoring Organization",
178+
],
179+
sameAs: [
180+
"https://github.com/keploy",
181+
"https://twitter.com/Keployio",
182+
"https://www.linkedin.com/company/keploy",
183+
"https://www.youtube.com/@keploy",
184+
"https://www.gartner.com/reviews/product/keploy-618993540",
185+
"https://www.g2.com/products/keploy/reviews",
186+
"https://www.capterra.in/software/1070466/Keploy",
187+
],
92188
}),
93189
},
94190
{
@@ -150,7 +246,7 @@ module.exports = {
150246
items: [
151247
{
152248
label: "Integration Testing",
153-
to: "server/installation",
249+
to: "server/install",
154250
},
155251
{
156252
label: "API Testing (AI)",
@@ -215,7 +311,7 @@ module.exports = {
215311
</svg></a>
216312
</div>
217313
<div className="footer__icons footer">
218-
<a class="footer__link-item" href="https://docs.google.com/forms/d/e/1FAIpQLSdj9q7dyRh3D7ZzRExHLWRRkNPOnLnFfrbKqSwqH3Ur4HzP4g/viewform">Have a Keploy use-case? Let's Talk!</a>
314+
<a class="footer__link-item" href="https://calendar.app.google/cXVaj6hbMUjvmrnt9" target="_blank" rel="noopener noreferrer"> Have a Keploy use-case? Let's Talk!</a>
219315
</div>
220316
<div class="footer__copyright"><span class="footer__block">Copyright © ${new Date().getFullYear()} </span> Keploy Inc.</div>
221317
<div>
@@ -248,11 +344,11 @@ module.exports = {
248344
/**
249345
* Whether to display the author who last updated the doc.
250346
*/
251-
showLastUpdateAuthor: false,
347+
showLastUpdateAuthor: true,
252348
/**
253349
* Whether to display the last date the doc was updated.
254350
*/
255-
showLastUpdateTime: false,
351+
showLastUpdateTime: true,
256352
/**
257353
* Skip the next release docs when versioning is enabled.
258354
* This will not generate HTML files in the production build for documents
@@ -261,6 +357,9 @@ module.exports = {
261357
// excludeNextVersionDocs: false,
262358
lastVersion: "4.0.0",
263359
versions: {
360+
"4.0.0": {
361+
label: "3.0.0",
362+
},
264363
"1.0.0": {
265364
label: "1.0.0",
266365
path: "1.0.0",
@@ -271,13 +370,8 @@ module.exports = {
271370
path: "2.0.0",
272371
banner: "unmaintained",
273372
},
274-
"3.0.0": {
275-
label: "3.0.0",
276-
path: "3.0.0",
277-
banner: "unmaintained",
278-
},
279373
},
280-
onlyIncludeVersions: ["1.0.0", "2.0.0", "3.0.0", "4.0.0"],
374+
onlyIncludeVersions: ["1.0.0", "2.0.0", "4.0.0"],
281375
includeCurrentVersion: true, // excludeNextVersionDocs is now deprecated
282376
// // below remark plugin disabled until we can figure out why it is not transpiling to ESNext properly - swyx
283377
remarkPlugins: [
@@ -354,6 +448,26 @@ module.exports = {
354448
//cacheTime: 600 * 1000, // 600 sec - cache purge period
355449
changefreq: "weekly",
356450
priority: 0.5,
451+
filename: "sitemap.xml",
452+
createSitemapItems: async (params) => {
453+
const {defaultCreateSitemapItems, ...rest} = params;
454+
const items = await defaultCreateSitemapItems(rest);
455+
return items.map((item) => {
456+
if (item.url.includes("/quickstart/")) {
457+
return {...item, priority: 0.8, changefreq: "weekly"};
458+
}
459+
if (
460+
item.url.includes("/concepts/") ||
461+
item.url.includes("/keploy-explained/")
462+
) {
463+
return {...item, priority: 0.7, changefreq: "weekly"};
464+
}
465+
if (item.url.includes("/keploy-cloud/")) {
466+
return {...item, priority: 0.6, changefreq: "monthly"};
467+
}
468+
return item;
469+
});
470+
},
357471
},
358472
},
359473
],
@@ -375,6 +489,13 @@ module.exports = {
375489
async: true,
376490
defer: true,
377491
},
492+
{
493+
src: "https://telemetry.keploy.io/sessions/sdk.js",
494+
async: true,
495+
defer: true,
496+
"data-endpoint": "https://telemetry.keploy.io/sessions/collect",
497+
"data-source": "docs",
498+
},
378499
/*{
379500
src: "/docs/scripts/chat.js",
380501
async: true,

netlify.toml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,12 @@
88

99
## Note: if you are looking for Redirects
1010
# they have been moved to /static/_redirects to make it more manageable - swyx
11+
12+
# Security headers for all pages
13+
[[headers]]
14+
for = "/*"
15+
[headers.values]
16+
X-Frame-Options = "SAMEORIGIN"
17+
X-Content-Type-Options = "nosniff"
18+
Referrer-Policy = "strict-origin-when-cross-origin"
19+
Permissions-Policy = "camera=(), microphone=(), geolocation=()"

package.json

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@
2222
"dependencies": {
2323
"@docsearch/core": "^4.5.0",
2424
"@docsearch/react": "^4.5.0",
25-
"@docusaurus/core": "^3.7.0",
26-
"@docusaurus/plugin-sitemap": "^3.7.0",
27-
"@docusaurus/preset-classic": "^3.7.0",
25+
"@docusaurus/core": "3.9.2",
26+
"@docusaurus/plugin-sitemap": "3.9.2",
27+
"@docusaurus/preset-classic": "3.9.2",
2828
"@mdx-js/react": "^3.0.0",
2929
"ajv": "^6.12.6",
3030
"ajv-keywords": "^3.5.2",
@@ -54,7 +54,7 @@
5454
]
5555
},
5656
"devDependencies": {
57-
"@docusaurus/plugin-client-redirects": "^3.7.0",
57+
"@docusaurus/plugin-client-redirects": "3.9.2",
5858
"@tailwindcss/typography": "^0.5.0",
5959
"autoprefixer": "^10.4.0",
6060
"docusaurus": "^1.14.7",
@@ -73,5 +73,8 @@
7373
},
7474
"engines": {
7575
"node": ">=18.0"
76+
},
77+
"resolutions": {
78+
"webpackbar": "7.0.0"
7679
}
7780
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"name": "docusaurus-tailwindcss-loader",
3+
"version": "1.0.0",
4+
"private": true,
5+
"main": "index.js"
6+
}

src/components/EcosystemSupport.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ export const EcosystemSupport = () => {
6868
</div>
6969

7070
<Link
71-
to="https://forms.gle/example-sponsorship"
71+
to="https://forms.gle/3jgWe8MLxS5DuZfK6"
7272
className="inline-flex w-full items-center justify-center gap-2 rounded-xl bg-gradient-to-r from-amber-500 to-orange-500 px-5 py-2.5 text-sm font-semibold text-white shadow-lg shadow-amber-500/25 transition-all duration-200 hover:from-amber-600 hover:to-orange-600 hover:text-white hover:shadow-amber-500/40 hover:no-underline"
7373
>
7474
Apply for sponsorship

0 commit comments

Comments
 (0)