Skip to content
This repository was archived by the owner on Oct 7, 2025. It is now read-only.
Closed
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
66 changes: 50 additions & 16 deletions .github/workflows/ce-provision-publish-docs.yml
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
name: Publish docs

# Run this workflow on demand and every time a new commit pushed to your repository
# Run this workflow on demand or every time a PR is accepted to a main branch
on:
pull_request:
types: [closed]
branches:
- 1.x
- 2.x
workflow_dispatch:

jobs:
# Set the job key. The key is displayed as the job name
# when a job name is not provided
public-docs:
if: ${{ github.event.pull_request.head.ref != 'documentation' }}
# Only run the job if it is not coming from a documentation branch
if: ${{ github.event.pull_request.head.ref != 'docs-${{ github.event.pull_request.base.ref }}' }}
# Name the Job
name: Publish the ce-provision docs to GitHub
# Set the type of machine to run on
Expand All @@ -22,36 +27,65 @@ jobs:
- ${{ github.workspace }}:/home/controller

steps:
- uses: actions/checkout@v4
with:
ref: docs-${{ github.event.pull_request.base.ref }}

# Configure environment
- name: Prepare Git, GitHub CLI and installed CE tools
run: |
/usr/bin/git config --global user.email "sysadm@codeenigma.com"
/usr/bin/git config --global user.name "Code Enigma CI"
/usr/bin/git config --global pull.rebase false
/usr/bin/git config --global --add safe.directory /__w/ce-provision/ce-provision
(type -p wget >/dev/null || (sudo apt update && sudo apt-get install wget -y)) && sudo mkdir -p -m 755 /etc/apt/keyrings && out=$(mktemp) && wget -nv -O$out https://cli.github.com/packages/githubcli-archive-keyring.gpg && cat $out | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null && sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg && echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null && sudo apt update && sudo apt install gh -y
/usr/bin/su - ce-dev -c "cd /home/ce-dev/ce-provision && /usr/bin/git pull origin 2.x"
/usr/bin/su - ce-dev -c "cd /home/ce-dev/ce-deploy && /usr/bin/git pull origin 1.x"

# First build and publish the markdown docs
- name: Build and commit table of contents and README files back to the repo
run: |
/bin/sh contribute/toc.sh
/usr/bin/find . -name "*.md" | xargs git add
/usr/bin/git diff --quiet && git diff --staged --quiet || git commit -am "GitHub Actions - updating markdown docs - ${{ steps.date.outputs.date }}"
/usr/bin/git push

# Create docs pull request
- name: Create a documentation pull request
run: gh pr create --base ${{ github.event.pull_request.base.ref }} --head docs-${{ github.event.pull_request.base.ref }} --title "Documentation update" --body "**Automated pull request** created by GitHub Actions because of a documentation update."
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

# Now build and publish the version of the docs
- name: Install wiki2pages
run: /usr/bin/su - ce-dev -c "/usr/bin/git clone https://github.com/codeenigma/wikis2pages.git /home/ce-dev/build/wiki2pages"

- name: Set up Ansible hosts file
- name: Set up Ansible and SSH
run: |
mkdir -p /home/ce-dev/ansible/bin/hosts
echo "wikis2pages-hugo ansible_host=127.0.0.1" > /home/ce-dev/ansible/bin/hosts/hosts

- name: Set up SSH config
run: |
echo "StrictHostKeyChecking=no" > /home/ce-dev/.ssh/config
cat /home/ce-dev/.ssh/id_rsa.pub > /home/ce-dev/.ssh/authorized_keys
chown ce-dev:ce-dev /home/ce-dev/.ssh/config
chmod 700 /home/ce-dev/.ssh/config
chown ce-dev:ce-dev /home/ce-dev/.ssh/authorized_keys
chmod 700 /home/ce-dev/.ssh/authorized_keys
/usr/sbin/sshd&

- name: Start SSHD
run: /usr/sbin/sshd&

- name: Initialise wiki2pages for ce-provision 2.x
- name: Initialise wiki2pages for ce-provision ${{ github.event.pull_request.base.ref }}
run: |
/usr/bin/su - ce-dev -c "cd /home/ce-dev/build/wiki2pages && /bin/sh init.sh --repo https://github.com/codeenigma/ce-provision.git --branch 2.x --no-ce-dev"
/usr/bin/su - ce-dev -c "cd /home/ce-dev/build/wiki2pages && /bin/sh init.sh --repo https://github.com/codeenigma/ce-provision.git --branch ${{ github.event.pull_request.base.ref }} --no-ce-dev"
/usr/bin/su - ce-dev -c "cd /home/ce-dev/build/wiki2pages && /home/ce-dev/ansible/bin/ansible-playbook -e 'wiki2pages_build_path=/home/ce-dev/build/wiki2pages' -i /home/ce-dev/ansible/bin/hosts /home/ce-dev/build/wiki2pages/ce-dev/ansible/provision.yml"
/usr/bin/su - ce-dev -c "cd /home/ce-dev/build/wiki2pages && /bin/sh set-current.sh --project ce-provision-2.x --no-ce-dev"
/usr/bin/su - ce-dev -c "cd /home/ce-dev/build/wiki2pages && /home/ce-dev/ansible/bin/ansible-playbook -e 'wiki2pages_build_path=/home/ce-dev/build/wiki2pages' -i /home/ce-dev/ansible/bin/hosts /home/ce-dev/build/wiki2pages/ce-dev/ansible/deploy.yml"
ls -la /home/ce-dev/build/wiki2pages/public/ce-provision-2.x/
/usr/bin/su - ce-dev -c "cd /home/ce-dev/build/wiki2pages && /bin/sh set-current.sh --project ce-provision-${{ github.event.pull_request.base.ref }} --no-ce-dev"
/usr/bin/su - ce-dev -c "cd /home/ce-dev/build/wiki2pages && /home/ce-dev/ansible/bin/ansible-playbook -e 'wiki2pages_build_path=/home/ce-dev/build/wiki2pages launch_hugo_server=false' -i /home/ce-dev/ansible/bin/hosts /home/ce-dev/build/wiki2pages/ce-dev/ansible/deploy.yml"
/usr/bin/su - ce-dev -c "cd /home/ce-dev/build/wiki2pages/content/ce-provision-${{ github.event.pull_request.base.ref }} && /bin/sh contribute/toc_hugo.sh"

- name: Run Hugo
run: |
/usr/bin/su - ce-dev -c "cd /home/ce-dev/build/wiki2pages && hugo"

- name: Publish documentation
run: |
/usr/bin/su - ce-dev -c "cd /home/ce-dev/build/wiki2pages && /bin/sh /home/ce-dev/build/wiki2pages/.github-actions-push.sh"
/usr/bin/su - ce-dev -c "cd /home/ce-dev/build/wiki2pages/public/ce-provision-2.x && /usr/bin/git remote add ci https://${{ secrets.DOCS_GITHUB_TOKEN }}@github.com/codeenigma/ce-provision-docs.git"
/usr/bin/su - ce-dev -c "cd /home/ce-dev/build/wiki2pages/public/ce-provision-2.x && /usr/bin/git push ci master"
/usr/bin/su - ce-dev -c "cd /home/ce-dev/build/wiki2pages/public/ce-provision-${{ github.event.pull_request.base.ref }} && /usr/bin/git remote add ci https://${{ secrets.DOCS_GITHUB_TOKEN }}@github.com/codeenigma/ce-provision-docs.git"
/usr/bin/su - ce-dev -c "cd /home/ce-dev/build/wiki2pages/public/ce-provision-${{ github.event.pull_request.base.ref }} && /usr/bin/git push ci master"
4 changes: 1 addition & 3 deletions .github/workflows/ce-provision-test-gitlab.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
name: Run GitLab server test build

# Run this workflow nightly and every time a new commit pushed to your repository
# Run this workflow every time a new commit is pushed to your repository
on:
schedule:
- cron: '30 4 * * *'
pull_request:

jobs:
Expand Down
4 changes: 1 addition & 3 deletions .github/workflows/ce-provision-test-web.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
name: Run web server test build

# Run this workflow nightly and every time a new commit pushed to your repository
# Run this every time a new commit is pushed to your repository
on:
schedule:
- cron: '30 4 * * *'
pull_request:

jobs:
Expand Down
2 changes: 1 addition & 1 deletion contribute/toc.sh
Original file line number Diff line number Diff line change
Expand Up @@ -137,4 +137,4 @@ generate_roles_toc

cp_single_page install
cp_single_page contribute
cp_single_page scripts
cp_single_page scripts
140 changes: 140 additions & 0 deletions contribute/toc_hugo.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