Skip to content

Commit 14b69f7

Browse files
authored
Merge branch 'main' into feat/helm
2 parents a761b4a + fd3218c commit 14b69f7

49 files changed

Lines changed: 7033 additions & 7769 deletions

Some content is hidden

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

.gitignore

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,11 @@ ehthumbs.db
5151
*.iml
5252
*.ipr
5353
*.iws
54+
._*.png
55+
._*.webp
56+
._*.svg
57+
5458

5559
# Tests
5660
coverage/
5761
.jest/
58-
59-
# Vitepress
60-
.vitepress/dist
61-
.vitepress/cache
62-
.backup
63-
.remark-cache/

.markdownlint-cli2.jsonc

Lines changed: 0 additions & 6 deletions
This file was deleted.

.markdownlint.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@
44
"MD033": false,
55
"MD024": false,
66
"MD038" :false,
7-
"MD029": false
7+
"MD029": false,
8+
"MD034": false
89
}

.remarkignore

Lines changed: 0 additions & 64 deletions
This file was deleted.

.remarkrc.js

Lines changed: 0 additions & 38 deletions
This file was deleted.

README.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
22

33
This repository contains the official documentation for the DeployStack ecosystem. Visit [deploystack.io](https://deploystack.io) to learn more about our platform.
44

5-
![GitHub Release](https://img.shields.io/github/v/release/deploystackio/documentation)
6-
![GitHub deployments](https://img.shields.io/github/deployments/deploystackio/documentation/Production?label=Production)
7-
85
## Project Structure
96

107
Key directories in this repository:

check-links.js

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
// check-links.js
2+
import fs from 'fs';
3+
import path from 'path';
4+
import { fileURLToPath } from 'url';
5+
import fetch from 'node-fetch';
6+
7+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
8+
9+
// Read a markdown file and extract all markdown links
10+
const extractLinks = (content) => {
11+
const linkRegex = /\[([^\]]+)\]\(([^)]+)\)/g;
12+
const links = [];
13+
let match;
14+
15+
while ((match = linkRegex.exec(content)) !== null) {
16+
links.push({
17+
text: match[1],
18+
url: match[2],
19+
full: match[0]
20+
});
21+
}
22+
23+
return links;
24+
};
25+
26+
// Check if a local file exists
27+
const checkLocalFile = (linkPath, filePath) => {
28+
if (linkPath.startsWith('/docs/')) {
29+
// Remove hash fragment before checking file existence
30+
const [baseUrl] = linkPath.split('#');
31+
const localPath = path.join(process.cwd(), baseUrl);
32+
33+
try {
34+
fs.accessSync(localPath, fs.constants.F_OK);
35+
console.log(` ✅ ${linkPath}`);
36+
return true;
37+
} catch (err) {
38+
console.log(` ❌ ${linkPath} → File not found`);
39+
return false;
40+
}
41+
}
42+
return null; // not a local file
43+
};
44+
45+
// Check external URL
46+
const checkExternalUrl = async (url) => {
47+
try {
48+
const response = await fetch(url, {
49+
method: 'HEAD',
50+
timeout: 5000
51+
});
52+
if (response.ok) {
53+
console.log(` ✅ ${url}`);
54+
return true;
55+
} else {
56+
console.log(` ❌ ${url} → Status: ${response.status}`);
57+
return false;
58+
}
59+
} catch (error) {
60+
console.log(` ❌ ${url} → Error: ${error.message}`);
61+
return false;
62+
}
63+
};
64+
65+
// Process a single markdown file
66+
const processFile = async (filePath) => {
67+
const relativePath = path.relative(process.cwd(), filePath);
68+
console.log(`\nFILE: ${relativePath}`);
69+
70+
const content = fs.readFileSync(filePath, 'utf8');
71+
const links = extractLinks(content);
72+
73+
if (links.length === 0) {
74+
console.log(' No hyperlinks found!\n');
75+
return true;
76+
}
77+
78+
console.log(` ${links.length} links found:`);
79+
80+
let allValid = true;
81+
for (const link of links) {
82+
if (link.url.startsWith('/docs/')) {
83+
const isValid = checkLocalFile(link.url, filePath);
84+
if (!isValid) allValid = false;
85+
} else if (link.url.startsWith('http')) {
86+
const isValid = await checkExternalUrl(link.url);
87+
if (!isValid) allValid = false;
88+
} else if (link.url.startsWith('#')) {
89+
// Skip same-file anchors
90+
console.log(` ➡️ ${link.url} (same-file anchor)`);
91+
} else {
92+
console.log(` ⚠️ ${link.url} → Skipped (not a local or HTTP link)`);
93+
}
94+
}
95+
96+
console.log('');
97+
return allValid;
98+
};
99+
100+
// Process all markdown files in docs directory
101+
const processDirectory = async (dir) => {
102+
let allValid = true;
103+
const files = fs.readdirSync(dir);
104+
105+
for (const file of files) {
106+
const filePath = path.join(dir, file);
107+
const stat = fs.statSync(filePath);
108+
109+
if (stat.isDirectory()) {
110+
const isValid = await processDirectory(filePath);
111+
if (!isValid) allValid = false;
112+
} else if (file.endsWith('.md')) {
113+
const isValid = await processFile(filePath);
114+
if (!isValid) allValid = false;
115+
}
116+
}
117+
118+
return allValid;
119+
};
120+
121+
// Start processing
122+
console.log('📝 Checking markdown links...\n');
123+
processDirectory('docs').then(allValid => {
124+
if (!allValid) {
125+
console.log('❌ Some links are invalid!');
126+
process.exit(1);
127+
}
128+
console.log('✅ All links are valid!');
129+
});
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
<mxfile host="Electron" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/26.0.9 Chrome/128.0.6613.186 Electron/32.2.5 Safari/537.36" version="26.0.9">
2+
<diagram name="Seite-1" id="Gjpo2csS5-b6mWFYLMsI">
3+
<mxGraphModel dx="1114" dy="794" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" math="0" shadow="0">
4+
<root>
5+
<mxCell id="0" />
6+
<mxCell id="1" parent="0" />
7+
<mxCell id="DkQQ7b9g_ovJa4es4mWr-2" value="App Project Repository" style="swimlane;fontStyle=1;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" vertex="1" parent="1">
8+
<mxGeometry x="80" y="80" width="240" height="90" as="geometry">
9+
<mxRectangle x="40" y="40" width="100" height="30" as="alternateBounds" />
10+
</mxGeometry>
11+
</mxCell>
12+
<mxCell id="DkQQ7b9g_ovJa4es4mWr-3" value="I.e.: Change file:" style="text;strokeColor=none;fillColor=default;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;" vertex="1" parent="DkQQ7b9g_ovJa4es4mWr-2">
13+
<mxGeometry y="30" width="240" height="30" as="geometry" />
14+
</mxCell>
15+
<mxCell id="DkQQ7b9g_ovJa4es4mWr-4" value=".deploystack/docker-run.txt" style="text;strokeColor=none;fillColor=default;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;fontFamily=Courier New;" vertex="1" parent="DkQQ7b9g_ovJa4es4mWr-2">
16+
<mxGeometry y="60" width="240" height="30" as="geometry" />
17+
</mxCell>
18+
<mxCell id="DkQQ7b9g_ovJa4es4mWr-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="DkQQ7b9g_ovJa4es4mWr-7" target="DkQQ7b9g_ovJa4es4mWr-10">
19+
<mxGeometry relative="1" as="geometry" />
20+
</mxCell>
21+
<mxCell id="DkQQ7b9g_ovJa4es4mWr-7" value="DeployStack GitHub App&lt;div&gt;Event on file Change&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
22+
<mxGeometry x="400" y="95" width="160" height="60" as="geometry" />
23+
</mxCell>
24+
<mxCell id="DkQQ7b9g_ovJa4es4mWr-8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="DkQQ7b9g_ovJa4es4mWr-3" target="DkQQ7b9g_ovJa4es4mWr-7">
25+
<mxGeometry relative="1" as="geometry" />
26+
</mxCell>
27+
<mxCell id="DkQQ7b9g_ovJa4es4mWr-18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="DkQQ7b9g_ovJa4es4mWr-9" target="DkQQ7b9g_ovJa4es4mWr-15">
28+
<mxGeometry relative="1" as="geometry" />
29+
</mxCell>
30+
<mxCell id="DkQQ7b9g_ovJa4es4mWr-9" value="DeployStack Backend" style="swimlane;fontStyle=1;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" vertex="1" parent="1">
31+
<mxGeometry x="640" y="80" width="230" height="90" as="geometry">
32+
<mxRectangle x="40" y="40" width="100" height="30" as="alternateBounds" />
33+
</mxGeometry>
34+
</mxCell>
35+
<mxCell id="DkQQ7b9g_ovJa4es4mWr-10" value="Validate Change within .deploystack" style="text;strokeColor=none;fillColor=default;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;" vertex="1" parent="DkQQ7b9g_ovJa4es4mWr-9">
36+
<mxGeometry y="30" width="230" height="30" as="geometry" />
37+
</mxCell>
38+
<mxCell id="DkQQ7b9g_ovJa4es4mWr-12" value="directory" style="text;strokeColor=none;fillColor=default;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;" vertex="1" parent="DkQQ7b9g_ovJa4es4mWr-9">
39+
<mxGeometry y="60" width="230" height="30" as="geometry" />
40+
</mxCell>
41+
<mxCell id="DkQQ7b9g_ovJa4es4mWr-14" value="DeployStack Backend" style="swimlane;fontStyle=1;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" vertex="1" parent="1">
42+
<mxGeometry x="120" y="240" width="230" height="90" as="geometry">
43+
<mxRectangle x="40" y="40" width="100" height="30" as="alternateBounds" />
44+
</mxGeometry>
45+
</mxCell>
46+
<mxCell id="DkQQ7b9g_ovJa4es4mWr-15" value="Re-create IaC templates with new" style="text;strokeColor=none;fillColor=default;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;" vertex="1" parent="DkQQ7b9g_ovJa4es4mWr-14">
47+
<mxGeometry y="30" width="230" height="30" as="geometry" />
48+
</mxCell>
49+
<mxCell id="DkQQ7b9g_ovJa4es4mWr-17" value="values from docker-run.txt file" style="text;strokeColor=none;fillColor=default;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;" vertex="1" parent="DkQQ7b9g_ovJa4es4mWr-14">
50+
<mxGeometry y="60" width="230" height="30" as="geometry" />
51+
</mxCell>
52+
<mxCell id="DkQQ7b9g_ovJa4es4mWr-19" value="deploy-templates repository" style="swimlane;fontStyle=1;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" vertex="1" parent="1">
53+
<mxGeometry x="450" y="240" width="230" height="90" as="geometry">
54+
<mxRectangle x="40" y="40" width="100" height="30" as="alternateBounds" />
55+
</mxGeometry>
56+
</mxCell>
57+
<mxCell id="DkQQ7b9g_ovJa4es4mWr-20" value="Push changes to IaC public repository" style="text;strokeColor=none;fillColor=default;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;" vertex="1" parent="DkQQ7b9g_ovJa4es4mWr-19">
58+
<mxGeometry y="30" width="230" height="30" as="geometry" />
59+
</mxCell>
60+
<mxCell id="DkQQ7b9g_ovJa4es4mWr-21" value="deploystackio/deploy-templates" style="text;strokeColor=none;fillColor=default;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;" vertex="1" parent="DkQQ7b9g_ovJa4es4mWr-19">
61+
<mxGeometry y="60" width="230" height="30" as="geometry" />
62+
</mxCell>
63+
<mxCell id="DkQQ7b9g_ovJa4es4mWr-22" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="DkQQ7b9g_ovJa4es4mWr-15" target="DkQQ7b9g_ovJa4es4mWr-20">
64+
<mxGeometry relative="1" as="geometry" />
65+
</mxCell>
66+
</root>
67+
</mxGraphModel>
68+
</diagram>
69+
</mxfile>
14.6 KB
Loading
13.4 KB
Loading

0 commit comments

Comments
 (0)