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

Documentation ci pr 1.x #129

Open
wants to merge 11 commits into
base: 1.x
Choose a base branch
from
48 changes: 48 additions & 0 deletions .github/workflows/ce-provision-build-docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Build docs

# Run this workflow every time a new commit pushed to your repository
on: pull_request

jobs:
# Set the job key. The key is displayed as the job name
# when a job name is not provided
build-docs:
# Name the Job
name: Build the documentation
# Set the type of machine to run on
runs-on: ubuntu-20.04

steps:
# Checks out a copy of your repository on the ubuntu-latest machine
- name: Checkout code
if: ${{ github.event.pull_request.head.ref != 'documentation' }}
uses: actions/checkout@v2

# Configures global Git variables for committing
- name: Configure Git
run: |
git config --global user.email "[email protected]"
git config --global user.name "Code Enigma CI"

# Builds the docs
- name: Build documentation
if: ${{ github.event.pull_request.head.ref != 'documentation' }}
run: |
git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}
git fetch
git checkout documentation
contribute/toc.sh
git add docs
git diff --quiet && git diff --staged --quiet || git commit -am 'GitHub Actions - Rebuilt documentation.' && git push origin documentation
shell: bash

# Create docs pull request
- name: Create a documentation pull request
if: ${{ github.event.pull_request.head.ref != 'documentation' && github.event.pull_request.base.ref == '1.x' }}
uses: devops-infra/[email protected]
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
source_branch: documentation
target_branch: ${{ github.event.pull_request.base.ref }}
title: Documentation update.
body: "**Automated pull request** created by GitHub Actions because of a documentation update."
140 changes: 140 additions & 0 deletions contribute/toc.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
#!/bin/sh
# shellcheck disable=SC2094
# shellcheck disable=SC2129
IFS=$(printf '\n\t')
set -e
OWN_DIR=$(dirname "$0")
cd "$OWN_DIR" || exit 1
OWN_DIR=$(git rev-parse --show-toplevel)
cd "$OWN_DIR" || exit 1
OWN_DIR=$(pwd -P)

# @param
# $1 string filepath
cp_role_page(){
RELATIVE=$(realpath --relative-to="$OWN_DIR" "$(dirname "$1")")
if [ ! -d "$OWN_DIR/docs/$RELATIVE" ]; then
mkdir -p "$OWN_DIR/docs/$RELATIVE"
fi
cp "$1" "$OWN_DIR/docs/$RELATIVE.md"
}

# @param
# $1 string folder
cp_single_page(){
if [ ! -d "$OWN_DIR/docs/$1" ]; then
mkdir "$OWN_DIR/docs/$1"
fi
cp "$OWN_DIR/$1/README.md" "$OWN_DIR/docs/$1.md"
}

# @param
# $1 (string) filename
parse_role_variables(){
TMP_MD=$(mktemp)
WRITE=1
# Ensure we have a trailing line.
echo "" >> "$1"
while read -r LINE; do
case $LINE in
'<!--ROLEVARS-->')
echo "$LINE" >> "$TMP_MD"
generate_role_variables "$1"
WRITE=0
;;
'<!--ENDROLEVARS-->')
echo "$LINE" >> "$TMP_MD"
WRITE=1
;;
'<!--TOC-->')
echo "$LINE" >> "$TMP_MD"
WRITE=0
;;
'<!--ENDTOC-->')
echo "$LINE" >> "$TMP_MD"
WRITE=1
;;
*)
if [ $WRITE = 1 ]; then
echo "$LINE" >> "$TMP_MD"
fi
;;
esac
done < "$1"
printf '%s\n' "$(cat "$TMP_MD")" > "$1"
rm "$TMP_MD"
}

# @param
# $1 (string) filename
generate_role_variables(){
VAR_FILE="$(dirname "$1")/defaults/main.yml"
if [ -f "$VAR_FILE" ]; then
echo "## Default variables" >> "$TMP_MD"
echo '```yaml' >> "$TMP_MD"
cat "$VAR_FILE" >> "$TMP_MD"
echo "" >> "$TMP_MD"
echo '```' >> "$TMP_MD"
echo "" >> "$TMP_MD"
fi
}

generate_roles_toc(){
TMP_SIDEBAR=$(mktemp)
WRITE="true"
while read -r LINE; do
case $LINE in
" - [Roles](roles)")
echo "$LINE" >> "$TMP_SIDEBAR"
parse_roles_toc roles 2
WRITE="false"
;;
" -"*)
WRITE="true"
echo "$LINE" >> "$TMP_SIDEBAR"
;;
*)
if [ "$WRITE" = "true" ]; then
echo "$LINE" >> "$TMP_SIDEBAR"
fi
;;
esac
done < "$OWN_DIR/docs/_Sidebar.md"
mv "$TMP_SIDEBAR" "$OWN_DIR/docs/_Sidebar.md"
}

parse_roles_toc(){
ROLES=$(find "$OWN_DIR/$1" -mindepth 2 -maxdepth 2 -name "README.md" | sort)
for ROLE in $ROLES; do
WRITE="true"
INDENT=$(printf %$(($2 * 2))s)
RELATIVE=$(realpath --relative-to="$OWN_DIR" "$(dirname "$ROLE")")
while read -r LINE; do
case $LINE in
"# "*)
if [ "$WRITE" = "true" ]; then
TITLE=$(echo "$LINE" | cut -c 3-)
echo "$INDENT"" - [$TITLE](/$RELATIVE)" >> "$TMP_SIDEBAR"
WRITE="false"
fi
;;
esac
done < "$ROLE"
parse_roles_toc "$RELATIVE" $(($2 + 1))
done
}

rm -rf "$OWN_DIR/docs/roles"
ROLE_PAGES=$(find "$OWN_DIR/roles" -name "README.md")
for ROLE_PAGE in $ROLE_PAGES; do
parse_role_variables "$ROLE_PAGE"
done
for ROLE_PAGE in $ROLE_PAGES; do
cp_role_page "$ROLE_PAGE"
done
generate_roles_toc


cp_single_page install
cp_single_page contribute
cp_single_page scripts
Loading