-
Notifications
You must be signed in to change notification settings - Fork 65
/
Copy pathgenerate-docs.sh
executable file
·82 lines (62 loc) · 3.33 KB
/
generate-docs.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/bin/bash
# usage: ./etc/generate-docs.sh [new version string]
# exit if any command fails
set -e
if ! command -v jazzy > /dev/null; then
gem install jazzy || { echo "ERROR: Failed to locate or install jazzy; please install yourself with 'gem install jazzy' (you may need to use sudo)"; exit 1; }
fi
if ! command -v sourcekitten > /dev/null; then
echo "ERROR: Failed to locate SourceKitten; please install yourself and/or add to your \$PATH"; exit 1
fi
version=${1}
# Ensure version is non-empty
[ ! -z "${version}" ] || { echo "ERROR: Missing version string"; exit 1; }
# ensure we have fresh build data for the docs generation process
rm -rf .build
# obtain BSON version from Package.resolved
bson_version="$(python3 etc/get_bson_version.py)"
git clone --depth 1 --branch "v${bson_version}" https://github.com/mongodb/swift-bson
working_dir=${PWD}
cd swift-bson
swift package update
sourcekitten doc --spm --module-name SwiftBSON > ${working_dir}/bson-docs.json
cd $working_dir
mkdir Guides-Temp
cp Guides/*.md Guides-Temp/
cp swift-bson/Guides/*.md Guides-Temp/
jazzy_args=(--clean
--github-file-prefix https://github.com/mongodb/mongo-swift-driver/tree/v${version}
--module-version "${version}"
--documentation "Guides-Temp/*.md"
)
# Generate MongoSwift docs
sourcekitten doc --spm --module-name MongoSwift > mongoswift-docs.json
args=("${jazzy_args[@]}" --output "docs-temp/MongoSwift" --module "MongoSwift" --config ".jazzy.yml"
--sourcekitten-sourcefile mongoswift-docs.json,bson-docs.json
--root-url "https://mongodb.github.io/mongo-swift-driver/docs/MongoSwift/")
jazzy "${args[@]}"
# Generate MongoSwiftSync docs
# we have to do some extra work to get re-exported symbols to show up
python3 etc/filter_sourcekitten_output.py
sourcekitten doc --spm --module-name MongoSwiftSync > mongoswiftsync-docs.json
args=("${jazzy_args[@]}" --output "docs-temp/MongoSwiftSync" --module "MongoSwiftSync" --config ".jazzy.yml"
--sourcekitten-sourcefile mongoswift-filtered.json,mongoswiftsync-docs.json,bson-docs.json
--root-url "https://mongodb.github.io/mongo-swift-driver/docs/MongoSwiftSync/")
jazzy "${args[@]}"
rm -rf swift-bson
rm mongoswift-docs.json
rm mongoswift-filtered.json
rm mongoswiftsync-docs.json
rm bson-docs.json
rm -rf Guides-Temp
echo '<html><head><meta http-equiv="refresh" content="0; url=MongoSwift/index.html" /></head></html>' > docs-temp/index.html
# we can only pass a single GitHub file prefix above, so we need to correct the BSON file paths throughout the docs.
# Jazzy generates the links for each file by taking the base path we provide above as --github-file-prefix and tacking on
# the path of each file relative to the project's root directory. since we check out swift-bson from the root of the driver,
# all of the generated URLs for BSON symbols are of the form
# ....mongo-swift-driver/tree/v[driver version]/swift-bson/...
# Here we replace all occurrences of this with the correct GitHub root URL, swift-bson/tree/v[bson version].
# note: we have to pass -print0 to `find` and pass -0 to `xargs` because some of the file names have spaces in them, which by
# default xargs will treat as a delimiter.
find docs-temp -name "*.html" -print0 | \
xargs -0 etc/sed.sh -i "s/mongo-swift-driver\/tree\/v${version}\/swift-bson/swift-bson\/tree\/v${bson_version}/"