mirror of
				https://github.com/NotAShelf/nvf.git
				synced 2025-10-29 18:33:53 +00:00 
			
		
		
		
	ci: build previws for the website on doc changes
This commit is contained in:
		
					parent
					
						
							
								73660af2e3
							
						
					
				
			
			
				commit
				
					
						7324474ef8
					
				
			
		
					 1 changed files with 172 additions and 0 deletions
				
			
		
							
								
								
									
										172
									
								
								.github/workflows/docs-preview.yml
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										172
									
								
								.github/workflows/docs-preview.yml
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,172 @@ | |||
| name: Build and Preview Manual | ||||
| 
 | ||||
| on: | ||||
|   workflow_dispatch: | ||||
|   pull_request: | ||||
|     types: [opened, synchronize, reopened, closed] | ||||
|     paths: | ||||
|       - ".github/workflows/docs-preview.yml" | ||||
|       - "modules/**" | ||||
|       - "docs/**" | ||||
| 
 | ||||
| # Defining permissions here passes it to all workflows. | ||||
| # https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/controlling-permissions-for-github_token | ||||
| permissions: | ||||
|   contents: write | ||||
|   pull-requests: write | ||||
|   issues: write | ||||
| 
 | ||||
| concurrency: | ||||
|   group: ${{ github.workflow }}-${{ github.ref }} | ||||
|   cancel-in-progress: true | ||||
| 
 | ||||
| jobs: | ||||
|   build-preview: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - name: Install Nix | ||||
|         uses: DeterminateSystems/nix-installer-action@main | ||||
|       - uses: DeterminateSystems/magic-nix-cache-action@main | ||||
| 
 | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v4 | ||||
| 
 | ||||
|       - name: Set default git branch (to reduce log spam) | ||||
|         run: git config --global init.defaultBranch main | ||||
| 
 | ||||
|       - name: Build documentation packages | ||||
|         run: nix build .#docs-html --print-build-logs | ||||
| 
 | ||||
|       - name: Deploy to GitHub Pages preview | ||||
|         run: | | ||||
|           PR_NUMBER=${{ github.event.pull_request.number }} | ||||
|           BRANCH_NAME="gh-pages" | ||||
|           PREVIEW_DIR="docs-preview-${PR_NUMBER}" | ||||
| 
 | ||||
|           # Clone the gh-pages branch and move to the preview subdirectory | ||||
|           git clone --single-branch --branch $BRANCH_NAME https://github.com/${{ github.repository }} gh-pages | ||||
|           cd gh-pages | ||||
| 
 | ||||
|           mkdir -p $PREVIEW_DIR | ||||
| 
 | ||||
|           # Copy the build files to the preview subdirectory | ||||
|           cp -rvf ../result/share/doc/nvf/* ./$PREVIEW_DIR | ||||
| 
 | ||||
|           # Configure git to use the GitHub Actions token for authentication | ||||
|           git config --global user.name "GitHub Actions" | ||||
|           git config --global user.email "actions@github.com" | ||||
| 
 | ||||
|           # Set the GitHub token for authentication | ||||
|           git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }} | ||||
| 
 | ||||
|           # Add and commit the changes | ||||
|           git add --all | ||||
|           git commit -m "Deploy PR #${PR_NUMBER} preview" || echo "No changes to commit" | ||||
|           git push --force origin $BRANCH_NAME | ||||
| 
 | ||||
|   comment-url: | ||||
|     needs: build-preview | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - name: Prepare Environment | ||||
|         id: prelude | ||||
|         run: | | ||||
|           PR_NUMBER=${{ github.event.pull_request.number }} | ||||
|           URL="https://${{ github.repository_owner }}.github.io/nvf/docs-preview-${PR_NUMBER}/" | ||||
| 
 | ||||
|           # Propagate non-interpolatable environment vars | ||||
|           echo "URL=$URL" >> "$GITHUB_OUTPUT" | ||||
|           echo "REV=$GITHUB_SHA" >> "$GITHUB_OUTPUT" | ||||
|           echo "ACTOR=$GITHUB_ACTOR" >> "$GITHUB_OUTPUT" | ||||
|           echo "REF=$GITHUB_HEAD_REF" >> "$GITHUB_OUTPUT" | ||||
|           echo "RUNS=$GITHUB_RUN_NUMBER" >> "$GITHUB_OUTPUT" | ||||
| 
 | ||||
|           echo "Live Preview URL: $URL" | ||||
|           echo "Rev: $GITHUB_SHA" | ||||
|           echo "Actor: $GITHUB_ACTOR" | ||||
|           echo "Ref: "$GITHUB_HEAD_REF" | ||||
|           echo "Reruns: "$GITHUB_RUN_NUMBER" | ||||
| 
 | ||||
|           echo "### :rocket: Live Preview Deployed " >> "$GITHUB_STEP_SUMMARY" | ||||
|           echo "Preview can be found at ${URL}" >> "$GITHUB_STEP_SUMMARY" | ||||
| 
 | ||||
|       - name: Find Comment | ||||
|         uses: peter-evans/find-comment@v3 | ||||
|         id: fc | ||||
|         with: | ||||
|           comment-author: "github-actions[bot]" | ||||
|           issue-number: ${{ github.event.pull_request.number }} | ||||
|           body-includes: "Live preview deployed" | ||||
| 
 | ||||
|       - name: Post live preview comment | ||||
|         uses: peter-evans/create-or-update-comment@v4 | ||||
|         env: | ||||
|           COMMENT_ID: ${{ steps.fc.outputs.comment-id }} | ||||
|           URL: ${{ steps.prelude.outputs.URL }} | ||||
|           GITHUB_SHA: ${{ steps.prelude.outputs.REV }} | ||||
|           ACTOR: ${{ steps.prelude.outputs.ACTOR }} | ||||
|           REF: ${{ steps.prelude.outputs.REF }} | ||||
|           RUNS: ${{ steps.prelude.outputs.RUNS }} | ||||
|         with: | ||||
|           comment-id: ${{ env.COMMENT_ID }} | ||||
|           issue-number: ${{ github.event.pull_request.number }} # issue number also applies to pull requests | ||||
|           edit-mode: replace # replace previous body | ||||
|           body: | | ||||
|             ### :rocket: Live preview deployed from ${{ env.GITHUB_SHA }} | ||||
| 
 | ||||
|             View it [here](${{ env.URL }}): | ||||
| 
 | ||||
|             <details> | ||||
|               <summary><strong>Debug Information</strong></summary> | ||||
|               <p>Triggered by: ${{ env.ACTOR }}</p> | ||||
|               <p><code>HEAD</code> at: ${{ env.REF }}</p> | ||||
|               <p>Reruns: ${{ env.RUNS }}</p> | ||||
|             </details> | ||||
| 
 | ||||
|   cleanup: | ||||
|     if: ${{ github.event.pull_request.merged == true || github.event.pull_request.state == 'closed' }} | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - name: Checkout repository | ||||
|         uses: actions/checkout@v4 | ||||
| 
 | ||||
|       - name: Delete preview for closed/merged PR | ||||
|         run: | | ||||
|           PR_NUMBER=${{ github.event.pull_request.number }} | ||||
|           BRANCH_NAME="gh-pages" | ||||
|           PREVIEW_DIR="docs-preview-${PR_NUMBER}" | ||||
| 
 | ||||
|           # Clone the gh-pages branch | ||||
|           git clone --single-branch --branch $BRANCH_NAME https://github.com/${{ github.repository }} gh-pages | ||||
|           cd gh-pages | ||||
| 
 | ||||
|           # Check if the preview directory exists, and delete it if it does | ||||
|           if [ -d "$PREVIEW_DIR" ]; then | ||||
|             echo "Deleting preview directory $PREVIEW_DIR" | ||||
|             rm -rf $PREVIEW_DIR | ||||
|           else | ||||
|             echo "Preview directory $PREVIEW_DIR does not exist. Skipping deletion." | ||||
|           fi | ||||
| 
 | ||||
|           # Configure git to use the GitHub Actions token for authentication | ||||
|           git config --global user.name "GitHub Actions" | ||||
|           git config --global user.email "actions@github.com" | ||||
| 
 | ||||
|           # Set the GitHub token for authentication | ||||
|           git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }} | ||||
| 
 | ||||
|           # Add and commit the changes (only if there's something to delete) | ||||
|           git add . | ||||
|           git diff --quiet || git commit -m "Remove preview for PR #${PR_NUMBER}" | ||||
|           git push origin $BRANCH_NAME | ||||
| 
 | ||||
|   cleanup-comment: | ||||
|     needs: cleanup | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - name: Post cleanup verification | ||||
|         uses: peter-evans/create-or-update-comment@v4 | ||||
|         with: | ||||
|           issue-number: ${{ github.event.pull_request.number }} | ||||
|           body: | | ||||
|             ✅ Preview has been deleted successfully! | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue