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

ci : Add github action workflow to generate documentation preview #23

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
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
22 changes: 22 additions & 0 deletions .github/workflows/documentation-preview-cleanup-request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: Documentation Preview Cleanup Request

on:
pull_request:
types:
- closed

jobs:
on-close:
runs-on: ubuntu-24.04

steps:
- name: Save the GH context in an artifact
env:
GH_CONTEXT: ${{ toJSON(github) }}
run: echo $GH_CONTEXT > github_context.json
- name: Upload the GH context artifact
uses: actions/upload-artifact@v4
with:
name: github-context
path: github_context.json

43 changes: 43 additions & 0 deletions .github/workflows/documentation-preview-cleanup.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: Documentation Preview Cleanup

on:
workflow_run:
workflows: [Documentation Preview Cleanup Request]
types:
- completed

env:
PREVIEW_PUBLISH_USERNAME: ${{ secrets.PREVIEW_PUBLISH_USERNAME }}
PREVIEW_PUBLISH_REPOSITORY: ${{ secrets.PREVIEW_PUBLISH_REPOSITORY }}
PREVIEW_PUBLISH_BRANCH: ${{ secrets.PREVIEW_PUBLISH_BRANCH }}
PREVIEW_PUBLISH_TOKEN: ${{ secrets.PREVIEW_PUBLISH_TOKEN }}

jobs:
on-close:
if: ${{ github.event.workflow_run.conclusion == 'success' }}
runs-on: ubuntu-24.04

steps:
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: cleanup-info
path: .
run-id: ${{ github.event.workflow_run.id }}
github-token: ${{ github.token }}
- name: Configure Git
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
- name: Extract Pull Request ID from artifact
run: |
echo "PR_NUMBER=$(jq '.event.pull_request.number' github_context.json)" >> $GITHUB_ENV
rm github_context.json
- name: Push updates to external repository
run: |
git clone https://${PREVIEW_PUBLISH_USERNAME}:${PREVIEW_PUBLISH_TOKEN}@github.com/${PREVIEW_PUBLISH_USERNAME}/${PREVIEW_PUBLISH_REPOSITORY}.git -b ${PREVIEW_PUBLISH_BRANCH}
cd ${PREVIEW_PUBLISH_REPOSITORY}
rm -rf preview/pr/${PR_NUMBER}
git add preview/pr/${PR_NUMBER}
git commit -am "cleanup (preview) : remove preview for Pull Request #${PR_NUMBER}"
git push origin ${PREVIEW_PUBLISH_BRANCH}
30 changes: 30 additions & 0 deletions .github/workflows/documentation-preview-request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Documentation Preview Request

on:
pull_request: {}

jobs:
build:
runs-on: ubuntu-24.04

steps:
- name: Check out repository code
uses: actions/checkout@v4
- name: Build docs
run: CI=true make build_docs
- name: Check links in docs
run: make docs_check_links
- name: Create robots.txt
run: |
echo "User-agent: *" > ./public/robots.txt
echo "Disallow: /" >> ./public/robots.txt
- name: Save the GH context in an artifact
env:
GH_CONTEXT: ${{ toJSON(github) }}
run: echo $GH_CONTEXT > ./public/github_context.json
- name: Upload GitHub artifact
uses: actions/upload-artifact@v4
with:
name: documentation
path: public

49 changes: 49 additions & 0 deletions .github/workflows/documentation-preview.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: Documentation Preview Generator

on:
workflow_run:
workflows: [Documentation Preview Request]
types:
- completed

env:
PREVIEW_PUBLISH_USERNAME: ${{ secrets.PREVIEW_PUBLISH_USERNAME }}
PREVIEW_PUBLISH_REPOSITORY: ${{ secrets.PREVIEW_PUBLISH_REPOSITORY }}
PREVIEW_PUBLISH_BRANCH: ${{ secrets.PREVIEW_PUBLISH_BRANCH }}
PREVIEW_PUBLISH_TOKEN: ${{ secrets.PREVIEW_PUBLISH_TOKEN }}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

except token do we really need those as part of secret, might be just env could work?

Copy link
Contributor Author

@rohanKanojia rohanKanojia Feb 4, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right. Apart from GitHub personal access token other options would work just fine as env. Shall I update it ?


jobs:
documentation-preview:
if: ${{ github.event.workflow_run.conclusion == 'success' }}
runs-on: ubuntu-24.04
steps:
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: documentation
path: ./artifact
run-id: ${{ github.event.workflow_run.id }}
github-token: ${{ github.token }}
- name: Extract Pull Request ID from artifact
run: |
echo "PR_NUMBER=$(jq '.event.pull_request.number' ./artifact/github_context.json)" >> $GITHUB_ENV
echo "PR_SHA=$(jq -r '.event.pull_request.head.sha' ./artifact/github_context.json | cut -c 1-7)" >> $GITHUB_ENV
rm ./artifact/github_context.json
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v4
with:
personal_token: ${{ env.PREVIEW_PUBLISH_TOKEN }}
external_repository: ${{ env.PREVIEW_PUBLISH_USERNAME }}/${{ env.PREVIEW_PUBLISH_REPOSITORY }}
publish_dir: ./artifact
publish_branch: ${{ env.PREVIEW_PUBLISH_BRANCH }}
destination_dir: preview/pr/${{ env.PR_NUMBER }}/${{ env.PR_SHA}}
commit_message: "deploy documentation preview to GitHub Pages for PR #${{ env.PR_NUMBER }}"

- name: Comment PR with preview link
run: |
PREVIEW_URL="https://${PREVIEW_PUBLISH_USERNAME}.github.io/${PREVIEW_PUBLISH_REPOSITORY}/preview/pr/${PR_NUMBER}/${PR_SHA}/index.html"
curl -s --request POST \
--url "https://api.github.com/repos/${{ github.repository }}/issues/${PR_NUMBER}/comments" \
--header "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
--header "Content-Type: application/json" \
--data "{\"body\":\"🚀 Documentation preview: ${PREVIEW_URL}\"}"