Skip to content

Commit 780722b

Browse files
committed
add workflow for deploying pr preview , building and pushing Antora docs to ivorysql_web
1 parent 3249e87 commit 780722b

File tree

3 files changed

+424
-145
lines changed

3 files changed

+424
-145
lines changed

.github/workflows/build-pr-auto.yml

Lines changed: 0 additions & 145 deletions
This file was deleted.
Lines changed: 239 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,239 @@
1+
name: Build , Push to web, Deploy Antora Docs
2+
3+
on:
4+
pull_request:
5+
types:
6+
- closed
7+
8+
jobs:
9+
build-and-deploy:
10+
runs-on: ubuntu-latest
11+
if: github.event.pull_request.merged == true
12+
permissions:
13+
contents: write
14+
pull-requests: write
15+
16+
steps:
17+
- name: PR was merged
18+
run: |
19+
echo "PR #${{ github.event.pull_request.number }} was merged into ${{ github.event.pull_request.base.ref }}."
20+
echo "Head commit was: ${{ github.event.pull_request.head.sha }}"
21+
22+
- name: Checkout Documentation Repository (ivorysql_doc)
23+
uses: actions/checkout@v4
24+
with:
25+
path: ivorysql_doc
26+
27+
- name: Checkout Doc Builder Repository (doc_builder)
28+
uses: actions/checkout@v4
29+
with:
30+
repository: ${{ github.repository_owner }}/ivory-doc-builder
31+
path: ivory-doc-builder
32+
33+
- name: Determine Latest Version from ivorysql_docs branches
34+
id: latest_version_step
35+
shell: bash
36+
run: |
37+
echo "Detecting latest version from remote branches of IvorySQL/ivorysql_docs..."
38+
LATEST_VERSION_NUMBER=$( \
39+
git ls-remote --heads --refs "https://github.com/IvorySQL/ivorysql_docs.git" 'refs/heads/v*.*' | \
40+
sed 's_^[^\t]*\trefs/heads/v__g' | \
41+
grep -E '^[0-9]+\.[0-9]+(\.[0-9]+)?$' | \
42+
sort -V | \
43+
tail -n1 \
44+
)
45+
46+
if [[ -z "$LATEST_VERSION_NUMBER" ]]; then
47+
echo "::error::Could not determine latest version from branches. Please check git ls-remote command and repo accessibility."
48+
exit 1
49+
fi
50+
51+
echo "Detected latest version number: $LATEST_VERSION_NUMBER"
52+
echo "version=$LATEST_VERSION_NUMBER" >> "$GITHUB_OUTPUT"
53+
54+
- name: Install yq
55+
run: |
56+
sudo apt-get update -y
57+
sudo apt-get install -y jq
58+
sudo wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/bin/yq
59+
sudo chmod +x /usr/bin/yq
60+
yq --version
61+
62+
- name: Modify Antora Playbooks
63+
working-directory: ./ivory-doc-builder
64+
env:
65+
DETECTED_VERSION: '${{ steps.latest_version_step.outputs.version }}'
66+
START_PAGE_COMPONENT_NAME: "ivorysql-doc"
67+
START_PAGE_FILE_PATH: "welcome.adoc"
68+
run: |
69+
PLAYBOOK_FILES=("antora-playbook-CN.yml" "antora-playbook-EN.yml")
70+
71+
for PLAYBOOK_FILE in "${PLAYBOOK_FILES[@]}"; do
72+
if [ -f "$PLAYBOOK_FILE" ]; then
73+
echo "--- Modifying Playbook: $PLAYBOOK_FILE ---"
74+
echo "Original content of $PLAYBOOK_FILE:"
75+
cat "$PLAYBOOK_FILE"
76+
echo # Newline for better readability
77+
78+
if [[ -n "$DETECTED_VERSION" ]]; then
79+
NEW_START_PAGE="${START_PAGE_COMPONENT_NAME}::v${DETECTED_VERSION}/${START_PAGE_FILE_PATH}"
80+
yq -i ".site.start_page = \"$NEW_START_PAGE\"" "$PLAYBOOK_FILE"
81+
echo "Updated .site.start_page in $PLAYBOOK_FILE to: $NEW_START_PAGE"
82+
else
83+
echo "WARNING: DETECTED_VERSION is empty. Skipping start_page update for $PLAYBOOK_FILE."
84+
fi
85+
echo "Modified content of $PLAYBOOK_FILE:"
86+
cat "$PLAYBOOK_FILE"
87+
echo "--- Finished modification for $PLAYBOOK_FILE ---"
88+
echo # Newline
89+
else
90+
echo "WARNING: Playbook file $PLAYBOOK_FILE not found in $(pwd)."
91+
fi
92+
done
93+
94+
- name: Checkout Web Repository (web)
95+
uses: actions/checkout@v4
96+
with:
97+
repository: ${{ github.repository_owner }}/ivorysql_web
98+
path: www_publish_target
99+
token: ${{ secrets.IVORY_TOKEN }}
100+
101+
- name: Setup Ruby and Bundler
102+
uses: ruby/setup-ruby@v1
103+
with:
104+
ruby-version: '3.0'
105+
106+
- name: Install Asciidoctor PDF and related Gems
107+
run: |
108+
echo "Installing Asciidoctor PDF gems..."
109+
gem install asciidoctor-pdf --version "~>2.3.19"
110+
gem install rouge
111+
112+
- name: Setup Node.js
113+
uses: actions/setup-node@v4
114+
with:
115+
node-version: '22.15'
116+
117+
- name: Install Antora CLI
118+
run: |
119+
echo "Installing Antora packages local..."
120+
npm install --global antora@3.1.7 @antora/lunr-extension @antora/pdf-extension @node-rs/jieba
121+
122+
- name: Build English Documentation
123+
working-directory: ./ivory-doc-builder
124+
run: |
125+
echo "Current directory: $(pwd)"
126+
echo "Building English site..."
127+
ls ../www_publish_target/
128+
npx antora generate --stacktrace --to-dir ../www_publish_target/docs/en antora-playbook-EN.yml
129+
130+
- name: Build Chinese Documentation
131+
working-directory: ./ivory-doc-builder
132+
run: |
133+
echo "Building Chinese site..."
134+
npx antora generate --stacktrace --to-dir ../www_publish_target/docs/cn antora-playbook-CN.yml
135+
136+
- name: Commit and Push to web Repository new branch , pull request
137+
id: commit_push_new_branch
138+
working-directory: ./www_publish_target
139+
env:
140+
OPEN_PUSH_PR: true
141+
run: |
142+
echo "push_pr=${OPEN_PUSH_PR}" >> $GITHUB_OUTPUT
143+
echo "--- Preparing to commit and push changes ---"
144+
echo "--- Git status ---"
145+
GIT_STATUS_OUTPUT=$(git status --porcelain)
146+
echo "${GIT_STATUS_OUTPUT}"
147+
echo "--- End of git status --porcelain output ---"
148+
149+
git config user.name "IvorySQL Actions Bot"
150+
git config user.email "actions-bot@users.noreply.github.com"
151+
152+
if [ -z "${GIT_STATUS_OUTPUT}" ]; then
153+
echo "No changes to commit."
154+
echo "changes_detected=false" >> $GITHUB_OUTPUT
155+
else
156+
echo "Changes detected. Proceeding with add, commit, and push."
157+
if [[ "${OPEN_PUSH_PR}" == "true" ]]; then
158+
NEW_BRANCH_NAME="docs-update-${{ github.run_attempt }}-$(date +'%Y-%m-%d-%H%M%S')"
159+
echo "Generated new branch name: ${NEW_BRANCH_NAME}"
160+
echo "new_branch_name=${NEW_BRANCH_NAME}" >> $GITHUB_OUTPUT
161+
echo "changes_detected=true" >> $GITHUB_OUTPUT
162+
git checkout -b "${NEW_BRANCH_NAME}"
163+
git add .
164+
COMMIT_MESSAGE="docs: Regenerate Antora site from IvorySQL/ivorysql_docs commit ${{ github.event.head_commit.id || github.sha }}"
165+
git commit -m "${COMMIT_MESSAGE}"
166+
git push origin "${NEW_BRANCH_NAME}"
167+
else
168+
echo "Pushing changes to master branch."
169+
git add .
170+
COMMIT_MESSAGE="docs: Regenerate Antora site from IvorySQL/ivorysql_docs commit ${{ github.event.head_commit.id || github.sha }}"
171+
git commit -m "${COMMIT_MESSAGE}"
172+
git push origin master
173+
fi
174+
fi
175+
176+
- name: Create or Update Pull Request with GitHub CLI
177+
id: cpr
178+
if: steps.commit_push_new_branch.outputs.push_pr == 'true' && steps.commit_push_new_branch.outputs.changes_detected == 'true' && steps.commit_push_new_branch.outputs.new_branch_name != ''
179+
working-directory: ./www_publish_target
180+
env:
181+
GH_TOKEN: ${{ secrets.IVORY_TOKEN }}
182+
PARAM_BASE_BRANCH: master
183+
PARAM_HEAD_BRANCH: ${{ steps.commit_push_new_branch.outputs.new_branch_name }}
184+
PARAM_TITLE: "Docs: Automated update from IvorySQL/ivorysql_docs commit ${{ github.event.head_commit.id || github.sha }}"
185+
PARAM_BODY: |
186+
Automated Antora site regeneration based on changes in the IvorySQL/ivorysql_docs repository.
187+
188+
Source commit: `${{ github.server_url }}/${{ github.repository_owner }}/ivorysql_docs/commit/${{ github.event.head_commit.id || github.sha }}`
189+
190+
- Auto-generated by gh pr create
191+
PARAM_DRAFT: "false"
192+
run: |
193+
echo "Attempting to create or update Pull Request for branch '${PARAM_HEAD_BRANCH}' into '${PARAM_BASE_BRANCH}'"
194+
195+
DRAFT_FLAG_STRING=""
196+
if [[ "${PARAM_DRAFT}" == "true" ]]; then
197+
DRAFT_FLAG_STRING="--draft"
198+
fi
199+
200+
echo "Executing: gh pr create --base \"${PARAM_BASE_BRANCH}\" --head \"${PARAM_HEAD_BRANCH}\" --title <title> --body-file <(echo body) ${DRAFT_FLAG_STRING}"
201+
202+
if gh pr create \
203+
--base "${PARAM_BASE_BRANCH}" \
204+
--head "${PARAM_HEAD_BRANCH}" \
205+
--title "${PARAM_TITLE}" \
206+
--body-file <(echo "${PARAM_BODY}") \
207+
${DRAFT_FLAG_STRING}; then
208+
echo "Pull Request created or already exists and metadata might have been updated."
209+
else
210+
echo "'gh pr create' command indicated an issue or no action was taken."
211+
212+
EXISTING_PR_URL=$(gh pr view "${PARAM_HEAD_BRANCH}" --json url -q ".url" 2>/dev/null || echo "")
213+
if [[ -n "$EXISTING_PR_URL" ]]; then
214+
echo "An existing PR was found for branch '${PARAM_HEAD_BRANCH}': ${EXISTING_PR_URL}"
215+
echo "Proceeding to enable auto-merge for this existing PR."
216+
else
217+
echo "::error::Failed to create PR and no existing PR found for branch '${PARAM_HEAD_BRANCH}'. Cannot enable auto-merge."
218+
exit 1
219+
fi
220+
fi
221+
222+
- name: Enable Auto-Merge for PR
223+
if: steps.cpr.outcome == 'success' && steps.commit_push_new_branch.outputs.push_pr == 'true' && steps.commit_push_new_branch.outputs.changes_detected == 'true' && steps.commit_push_new_branch.outputs.new_branch_name != ''
224+
working-directory: ./www_publish_target
225+
env:
226+
GH_TOKEN: ${{ secrets.IVORY_TOKEN }}
227+
PR_HEAD_BRANCH: ${{ steps.commit_push_new_branch.outputs.new_branch_name }}
228+
PR_BASE_BRANCH: master
229+
MERGE_STRATEGY: MERGE
230+
run: |
231+
echo "Attempting to enable auto-merge for PR from branch '$PR_HEAD_BRANCH' to '$PR_BASE_BRANCH'"
232+
if gh pr merge "$PR_HEAD_BRANCH" \
233+
--${MERGE_STRATEGY,,} \
234+
--delete-branch; then
235+
echo "Auto-merge enabled successfully for PR from branch '$PR_HEAD_BRANCH'."
236+
else
237+
echo "::warning::Failed to enable auto-merge for PR from branch '$PR_HEAD_BRANCH'."
238+
echo "This might be because the PR is not mergeable (e.g., has conflicts, is a draft PR), requires reviews, auto-merge is already enabled, or the PR could not be uniquely identified by branch name."
239+
fi

0 commit comments

Comments
 (0)