Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: interpolate example code in README.md for each package #40

Merged
merged 1 commit into from
Jun 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ jobs:
- run: pnpm install --no-frozen-lockfile
- run: pnpm run test

# Validate that the prepublish hook works.
- run: pnpm run prepublish

# Finally, release (actual publishing only happens on the main branch).
- run: pnpm run release
env:
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
"check": "pnpm turbo check",
"lint": "pnpm turbo lint",
"format": "pnpm turbo format",
"prepublish": "pnpm turbo prepublish",
"release": "pnpm run -r --workspace-concurrency 1 release --"
}
}
2 changes: 1 addition & 1 deletion packages/kurt-open-ai/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ This package implements an adapter for Kurt that works with [OpenAI's GPT models

## Examples

Check the [example folder](https://github.com/FormulaMonks/kurt/tree/main/examples)
[This example code](../../examples/basic/src/openai.ts) shows how to set up and use Kurt with OpenAI.
1 change: 1 addition & 0 deletions packages/kurt-open-ai/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
"format": "pnpm biome format --write .",
"lint": "pnpm biome lint --apply .",
"check": "pnpm biome check .",
"prepublish": "../../scripts/interpolate-example-code.sh README.md",
"release": "pnpm exec semantic-release"
},
"release": {
Expand Down
2 changes: 1 addition & 1 deletion packages/kurt-vertex-ai/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ This package implements an adapter for Kurt that works with [Vertex AI's Gemini

## Examples

Check the [example folder](https://github.com/FormulaMonks/kurt/tree/main/examples)
[This example code](../../examples/basic/src/vertex.ts) shows how to set up and use Kurt with Vertex AI.
1 change: 1 addition & 0 deletions packages/kurt-vertex-ai/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
"format": "pnpm biome format --write .",
"lint": "pnpm biome lint --apply .",
"check": "pnpm biome check .",
"prepublish": "../../scripts/interpolate-example-code.sh README.md",
"release": "pnpm exec semantic-release"
},
"release": {
Expand Down
1 change: 1 addition & 0 deletions packages/kurt/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
"format": "pnpm biome format --write .",
"lint": "pnpm biome lint --apply .",
"check": "pnpm biome check .",
"prepublish": "../../scripts/interpolate-example-code.sh README.md",
"release": "pnpm exec semantic-release"
},
"release": {
Expand Down
49 changes: 49 additions & 0 deletions scripts/interpolate-example-code.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
#!/bin/bash

set -euo pipefail

# This script will modify the given files (all CLI arguments passed to the
# script are interpreted as filenames) to interpolate example code from files.
#
# It looks for lines that look like this:
#
# [This example code](../path/to/file.ts) shows how to do X.
#
# And replaces those occurrences to look like this:
#
# This example code shows how to do X.
#
# ```ts
# // Contents of ../path/to/file.ts
# ```
#
# This simple hack allows us to keep our code examples in separate files
# (which are runnable and testable in CI), while still including them inline in
# the documentation that gets published to npmjs.org for the packages.

for file in "${@}"; do
echo "Interpolating example code in $file"

IFS=''
while read -r line; do
if echo "$line" | grep -E '\[This example code\]\([^)]+\).+$' > /dev/null; then
# If the line contains the pattern indicating a code example, fetch
# the code and print it as a markdown code block.
file_path=$(echo $line | cut -d '(' -f 2 | cut -d ')' -f 1)
file_code=$(cat $file_path)

# Print the line without the code link, followed by the code block.
printf "This example code"; echo "$line" | cut -d ')' -f 2-
echo # Empty line before the snippet
echo '```ts'
cat $file_path
echo '```'
else
# For all lines which don't match the pattern, print them as-is.
echo "$line"
fi
done < "$file" > "$file.tmp"
mv "$file.tmp" "$file"

git diff --color "$file" | cat
done
3 changes: 2 additions & 1 deletion turbo.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
},
"check": {},
"format": {},
"lint": {}
"lint": {},
"prepublish": {}
}
}
Loading