pool-ng #6
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Rustdoc PR Preview | |
on: | |
issue_comment: | |
types: [created] | |
pull_request: | |
types: [closed] | |
jobs: | |
rustdoc-preview: | |
# Only run on issue_comment, not on PR close | |
if: github.event_name == 'issue_comment' && github.event.issue.pull_request && contains(github.event.comment.body, '/rustdoc-preview') | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check if commenter is a collaborator | |
id: collaborator-check | |
uses: actions/github-script@v7 | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
const commenter = context.payload.comment.user.login; | |
const owner = context.repo.owner; | |
const repo = context.repo.repo; | |
try { | |
await github.rest.repos.checkCollaborator({ | |
owner, | |
repo, | |
username: commenter | |
}); | |
return true; | |
} catch (e) { | |
return false; | |
} | |
# Only continue if the check passes | |
- name: Fail if not collaborator | |
if: steps.collaborator-check.outputs.result != 'true' | |
run: | | |
echo "Commenter is not a collaborator. Skipping preview build." | |
exit 1 | |
- name: Checkout PR branch | |
uses: actions/checkout@v4 | |
with: | |
# Check out the PR's branch | |
ref: ${{ github.event.pull_request.head.ref }} | |
- name: Install Rust toolchain | |
uses: dtolnay/rust-toolchain@nightly | |
- name: Build rustdoc | |
run: cargo rustdoc --features full -- --cfg docsrs | |
- name: Deploy rustdoc to gh-pages/pr-<PR_NUMBER> | |
uses: peaceiris/actions-gh-pages@v3 | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
publish_dir: ./target/doc | |
# Publish to pr-<PR_NUMBER> subdir | |
destination_dir: pr-${{ github.event.issue.number }} | |
keep_files: true | |
- name: Comment preview link on PR | |
uses: actions/github-script@v7 | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
const pr_number = context.issue.number; | |
const repo = context.repo.repo; | |
const owner = context.repo.owner; | |
const url = `https://${owner}.github.io/${repo}/pr-${pr_number}/`; | |
github.rest.issues.createComment({ | |
issue_number: pr_number, | |
owner, | |
repo, | |
body: `📝 Rustdoc preview for this PR: [View docs](${url})` | |
}); | |
rustdoc-preview-cleanup: | |
# Only run on PR close/merge | |
if: github.event_name == 'pull_request' && github.event.action == 'closed' | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout gh-pages branch | |
uses: actions/checkout@v4 | |
with: | |
ref: gh-pages | |
persist-credentials: true | |
- name: Remove PR preview directory | |
run: | | |
rm -rf pr-${{ github.event.pull_request.number }} | |
- name: Commit and push removal | |
run: | | |
git config user.name "github-actions" | |
git config user.email "[email protected]" | |
git add . | |
git commit -m "Remove rustdoc preview for PR #${{ github.event.pull_request.number }}" || echo "Nothing to commit" | |
git push |