Skip to content

Commit 533471d

Browse files
authored
feat: scripts & update CI for generating api reference documentation (#429)
1 parent 185ff4f commit 533471d

File tree

3 files changed

+164
-0
lines changed

3 files changed

+164
-0
lines changed
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
name: Generate Docs
2+
3+
on:
4+
push:
5+
branches:
6+
- 'generatedocs/**'
7+
pull_request:
8+
branches:
9+
- 'generatedocs/**'
10+
workflow_dispatch:
11+
12+
env:
13+
BUILDER_VERSION: v0.8.19
14+
BUILDER_SOURCE: releases
15+
# host owned by CRT team to host aws-crt-builder releases. Contact their on-call with any issues
16+
BUILDER_HOST: https://d19elf31gohf1l.cloudfront.net
17+
PACKAGE_NAME: aws-sdk-swift
18+
LINUX_BASE_IMAGE: ubuntu-16-x64
19+
RUN: ${{ github.run_id }}-${{ github.run_number }}
20+
AWS_SDK_SWIFT_CI_DIR: /Users/runner/work/aws-sdk-swift/aws-sdk-swift
21+
AWS_CRT_SWIFT_CI_DIR: /Users/runner/work/aws-sdk-swift/aws-sdk-swift/target/build/deps/aws-crt-swift
22+
SMITHY_SWIFT_CI_DIR: /Users/runner/work/aws-sdk-swift/aws-sdk-swift/target/build/deps/smithy-swift
23+
24+
# This release script is work in progress. We will need to update the script to
25+
# * Ensure that unit tests pass for all targets prior to generating a release
26+
# * Create release based on one of the platform's built results
27+
# * Add Readme.md file in release folder
28+
# * Pin to versions of aws-crt-swift and smithy-swift
29+
#
30+
31+
jobs:
32+
macos-release:
33+
runs-on: macos-11
34+
env:
35+
DEVELOPER_DIR: /Applications/Xcode_12.5.app
36+
steps:
37+
- name: Checkout sources
38+
uses: actions/checkout@v2
39+
- uses: actions/cache@v2
40+
with:
41+
path: |
42+
~/.gradle/caches
43+
~/.gradle/wrapper
44+
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
45+
restore-keys: |
46+
${{ runner.os }}-gradle-
47+
- uses: actions/setup-java@v1
48+
with:
49+
java-version: '11'
50+
- name: Install swift-doc
51+
run: brew install swiftdocorg/formulae/swift-doc
52+
- name: Build and Test ${{ env.PACKAGE_NAME }}
53+
run: |
54+
python3 -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder.pyz')"
55+
chmod a+x builder.pyz
56+
AWS_CRT_SWIFT_CI_DIR="${{ env.AWS_CRT_SWIFT_CI_DIR }}" AWS_SDK_SWIFT_CI_DIR="${{ env.AWS_SDK_SWIFT_CI_DIR }}" SMITHY_SWIFT_CI_DIR="${{ env.SMITHY_SWIFT_CI_DIR }}" ./builder.pyz build -p ${{ env.PACKAGE_NAME }}
57+
./gradlew -p codegen/sdk-codegen build
58+
./gradlew -p codegen/sdk-codegen stageSdks
59+
./scripts/mergeModels.sh release
60+
./scripts/generatePackageSwift.swift > Package.swift
61+
cat Package.swift
62+
./scripts/generateDocs.sh release reference/0.x
63+
./scripts/generateIndexPage.sh reference/0.x
64+
- name: GitHub Pages action
65+
uses: peaceiris/[email protected]
66+
with:
67+
github_token: ${{ secrets.GITHUB_TOKEN }}
68+
publish_branch: gh-pages
69+
publish_dir: reference/0.x
70+
destination_dir: reference/0.x
71+
allow_empty_commit: false # optional, default is false
72+
user_name: AWS CI
73+
user_email: [email protected]
74+
commit_message: Update docs
75+
disable_nojekyll: true

scripts/generateDocs.sh

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#!/bin/bash
2+
usage() {
3+
echo "Usage:"
4+
echo " ./scripts/generateDocs [releaseDir] [outputDirPrefix]"
5+
echo ""
6+
echo "Example:"
7+
echo " ./scripts/generateDocs release reference/0.x"
8+
}
9+
10+
if [ $# -ne 2 ]; then
11+
usage
12+
exit 1
13+
fi
14+
15+
RELDIR=$1
16+
if [ ! -d ${RELDIR} ]; then
17+
echo "Not a directory: ${RELDIR}"
18+
exit 1
19+
fi
20+
21+
OUTDIR_PREFIX="$2"
22+
23+
24+
HAS_SWIFTDOC=`which swift-doc`
25+
if [ $? -ne 0 ]; then
26+
echo "Fatal: Unable to find swift doc"
27+
exit 1
28+
fi
29+
30+
if [ -d ${OUTDIR_PREFIX} ]; then
31+
echo "Error: Directory already exists: ${OUTDIR_PREFIX}"
32+
exit 1
33+
fi
34+
35+
for sdk in `ls ${RELDIR} | grep -e "^AWS"`; do
36+
OUTDIR="${OUTDIR_PREFIX}/${sdk}"
37+
echo "Generating ${sdk}: ${OUTDIR}"
38+
swift doc generate ${RELDIR}/${sdk} --module-name ${sdk} --format html --base-url "/aws-sdk-swift/${OUTDIR}" --output ${OUTDIR}
39+
if [ $? -ne 0 ]; then
40+
echo "Failed on ${sdk}"
41+
exit 1
42+
fi
43+
done

scripts/generateIndexPage.sh

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#!/bin/bash
2+
usage() {
3+
echo "Usage:"
4+
echo " ./scripts/generateIndexPage.sh [outputDirPrefix]"
5+
echo ""
6+
echo "Example:"
7+
echo " ./scripts/generateIndexPage.sh reference/0.x"
8+
}
9+
10+
if [ $# -ne 1 ]; then
11+
usage
12+
exit 1
13+
fi
14+
15+
OUTDIR_PREFIX="$1"
16+
17+
if [ ! -d ${OUTDIR_PREFIX} ]; then
18+
echo "Error: Directory not found: ${OUTDIR_PREFIX}"
19+
exit 1
20+
fi
21+
22+
NUMSERVICES=`ls ${OUTDIR_PREFIX} |grep -e "^AWS" |wc -l | awk '{print $1}'`
23+
if [ $NUMSERVICES -eq 0 ]; then
24+
echo "Error: No services found in : ${OUTDIR_PREFIX}"
25+
exit 1
26+
fi
27+
28+
OUTFILE=${OUTDIR_PREFIX}/index.md
29+
30+
31+
createFileWithLine() {
32+
echo "$1" > ${OUTFILE}
33+
}
34+
appendLine() {
35+
echo "$1" >> ${OUTFILE}
36+
}
37+
38+
createFileWithLine "# AWS SDK Swift API Reference"
39+
for sdk in `ls ${OUTDIR_PREFIX} | grep -e "^AWS"`; do
40+
appendLine "- [${sdk}](${sdk})"
41+
done
42+
echo "Generated file ${OUTFILE}"
43+
44+
OUTFILECONFIG=${OUTDIR_PREFIX}/_config.yml
45+
echo "theme: jekyll-theme-slate" > ${OUTFILECONFIG}
46+
echo "Generated file ${OUTFILECONFIG}"

0 commit comments

Comments
 (0)