Skip to content

Commit e5c224f

Browse files
Merge pull request #253 from DefangLabs/jordan/samples-docs
Serve samples.md for docs chatbot context
2 parents e28d507 + 240e21f commit e5c224f

File tree

4 files changed

+47
-12
lines changed

4 files changed

+47
-12
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,5 @@ yarn-error.log*
2121

2222
defang
2323
samples
24-
/static/samples-v2.json
24+
/docs/samples.md
25+
/static/samples-v2.json

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
"private": true,
55
"scripts": {
66
"docusaurus": "docusaurus",
7+
"prestart": "./scripts/prebuild.sh",
78
"start": "docusaurus start",
89
"prebuild": "./scripts/prebuild.sh",
910
"build": "docusaurus build",

scripts/prep-samples.js

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ const path = require('path');
33
const YAML = require('yaml');
44

55
const samplesDir = process.argv[2];
6+
let samplesMdContent = ''
67

78
// Inspired by https://github.com/compose-spec/compose-go/blob/main/template/template.go
89
const interpolationRegex =
@@ -23,6 +24,12 @@ directories.forEach((sample) => {
2324
let readme;
2425
try {
2526
readme = fs.readFileSync(path.join(samplesDir, sample, 'README.md'), 'utf8');
27+
// replace the text after the first `#` with a link to the sample
28+
// readme = readme.replace(/^# (.*)/, `# [$1](https://github.com/DefangLabs/samples/tree/main/samples/${sample})`);
29+
readme = readme.replace(/^# (.*)/, (match, p1) => {
30+
return `# [${p1}](https://github.com/DefangLabs/samples/tree/main/samples/${sample})`;
31+
});
32+
samplesMdContent += readme + "\n\n";
2633
} catch (error) {
2734
readme = `# ${sample}`;
2835
}
@@ -34,10 +41,16 @@ directories.forEach((sample) => {
3441
// Languages:
3542
//
3643
// We want to extract the title, short description, tags, and languages from the readme. Tags and languages are comma separated lists.
37-
const title = readme.match(/Title: (.*)/)[1];
38-
const shortDescription = readme.match(/Short Description: (.*)/)[1];
39-
const tags = readme.match(/Tags: (.*)/)[1].split(',').map(tag => tag.trim());
40-
const languages = readme.match(/Languages: (.*)/)[1].split(',').map(language => language.trim());
44+
let title, shortDescription, tags, languages;
45+
try {
46+
title = readme.match(/Title: (.*)/)[1];
47+
shortDescription = readme.match(/Short Description: (.*)/)[1];
48+
tags = readme.match(/Tags: (.*)/)[1].split(',').map(tag => tag.trim());
49+
languages = readme.match(/Languages: (.*)/)[1].split(',').map(language => language.trim());
50+
} catch (error) {
51+
console.log(`@@ Failed to parse readme for sample ${sample}`, error);
52+
return;
53+
}
4154

4255
let configs = new Set();
4356
try {
@@ -96,14 +109,30 @@ directories.forEach((sample) => {
96109

97110
const stringified = JSON.stringify(jsonArray, null, 2);
98111

99-
// fs.writeFileSync(path.join(__dirname, '..', 'samples.json'), stringified);
112+
// exclude any lines which start with '---'
113+
samplesMdContent = samplesMdContent.replace(/---.*\n/g, '');
114+
// exclude any lines which include markdown images `![`
115+
samplesMdContent = samplesMdContent.replace(/^.*!\[.*\]\(.*\).*\n?/gm, '');
100116

101-
// we're going to open up the ../docs/samples.md file and replce [] with the stringified JSON
117+
// increase the header level of all headers in the markdown content
118+
samplesMdContent = samplesMdContent.replace(/^(#{1,6})\s/gm, (match) => {
119+
const headerLevel = match.length - 1; // number of '#' characters
120+
const newHeaderLevel = Math.min(headerLevel + 1, 6);
121+
return '#'.repeat(newHeaderLevel) + ' ';
122+
});
102123

103-
// const samplesMd = path.join(__dirname, '..', 'docs', 'samples.md');
104-
// let samplesMdContents = fs.readFileSync(samplesMd, 'utf8');
105-
// samplesMdContents += `<Samples samples={${stringified}} />`;
106-
// fs.writeFileSync(samplesMd, samplesMdContents);
124+
const frontMatter = `---
125+
sidebar_class_name: hidden
126+
title: Samples
127+
description: A collection of sample applications and configurations for Defang Labs.
128+
---
129+
`;
130+
// prefix samplesMdContent with the front matter
131+
samplesMdContent = frontMatter + "\n\n" + samplesMdContent;
132+
133+
const samplesMd = path.join(__dirname, '..', 'docs', 'samples.md');
134+
console.log(`@@ Writing samples markdown to ${samplesMd}`);
135+
fs.writeFileSync(samplesMd, samplesMdContent);
107136

108137
// save the json to the samples.json file in static
109138
fs.writeFileSync(path.join(__dirname, '..', 'static', 'samples-v2.json'), stringified);

src/css/custom.css

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,4 +137,8 @@ img.unstyled {
137137
to {
138138
background-position: 200% 0;
139139
}
140-
}
140+
}
141+
142+
.menu__list-item.hidden {
143+
display: none;
144+
}

0 commit comments

Comments
 (0)