From e78cdf8dc92a27b6f062508101382aed78464dfd Mon Sep 17 00:00:00 2001 From: Neil Dewhurst Date: Fri, 14 Mar 2025 13:46:54 +0000 Subject: [PATCH] Add workflows to 4.4 --- .github/workflows/docs-deploy-surge.yml | 129 ++++++++++++++++++++++++ .github/workflows/docs-pr-checks.yml | 61 +++++++++++ .github/workflows/docs-teardown.yml | 51 ++++++++++ 3 files changed, 241 insertions(+) create mode 100644 .github/workflows/docs-deploy-surge.yml create mode 100644 .github/workflows/docs-pr-checks.yml create mode 100644 .github/workflows/docs-teardown.yml diff --git a/.github/workflows/docs-deploy-surge.yml b/.github/workflows/docs-deploy-surge.yml new file mode 100644 index 0000000..2399928 --- /dev/null +++ b/.github/workflows/docs-deploy-surge.yml @@ -0,0 +1,129 @@ +# Use this starter workflow to deploy HTML generated by Antora to surge.sh +# Docs are published at --.surge.sh +# +# By default, this workflow runs on completion of a workflow called "Verify docs PR" +# +# This workflow expects the triggering workflow to generate an artifact called "docs" +# - update the reference to "docs" and "docs.zip" in this workflow if your triggering workflow generates an artifact with a different name + +# change to force workflow with no changelog + +name: "Deploy docs preview" + +on: + workflow_run: + workflows: ["Verify docs PR"] + types: + - completed + +jobs: + publish-docs: + # Uncomment this if statement to deploy only when the PR builds cleanly + # if: github.event.workflow_run.conclusion == 'success' + + runs-on: ubuntu-latest + + steps: + - name: "Download built documentation" + uses: actions/github-script@v7 + env: + RUN_ID: ${{ github.event.workflow_run.id }} + WORKSPACE: ${{ github.workspace }} + with: + script: | + var artifacts = await github.rest.actions.listWorkflowRunArtifacts({ + owner: context.repo.owner, + repo: context.repo.repo, + run_id: ${{ env.RUN_ID }}, + }); + + var matchArtifactDocs = artifacts.data.artifacts.filter((artifact) => { + return artifact.name == "docs" + })[0]; + var downloadDocs = await github.rest.actions.downloadArtifact({ + owner: context.repo.owner, + repo: context.repo.repo, + artifact_id: matchArtifactDocs.id, + archive_format: 'zip', + }); + var fs = require('fs'); + fs.writeFileSync('${{ env.WORKSPACE }}/docs.zip', Buffer.from(downloadDocs.data)); + + var matchArtifactChangelog = artifacts.data.artifacts.filter((artifact) => { + return artifact.name == "changelog" + })[0]; + var downloadChangelog = await github.rest.actions.downloadArtifact({ + owner: context.repo.owner, + repo: context.repo.repo, + artifact_id: matchArtifactChangelog.id, + archive_format: 'zip', + }); + fs.writeFileSync('${{ env.WORKSPACE }}/changelog.zip', Buffer.from(downloadChangelog.data)); + + - id: unzip-docs + run: unzip docs.zip + + - id: get-top-dir + run: | + root=$(ls -d */index.html | sed -r 's/(.*)\/index\.html/\1/') + echo "top-dir=$root" >> $GITHUB_OUTPUT + + - id: unzip-changelog + if: ${{ hashFiles('changelog.zip') != '' }} + run: unzip changelog.zip + + - id: get-deploy-id + run: | + deployid=$(> "$GITHUB_OUTPUT" + + - id: get-deploy-url + env: + ORG: ${{ github.event.repository.owner.login }} + REPO: ${{ github.event.repository.name }} + DEPLOYID: ${{ steps.get-deploy-id.outputs.deploy-id }} + run: | + deployurl=$ORG-$REPO-$DEPLOYID.surge.sh + echo "deploy-url=$deployurl" >> $GITHUB_OUTPUT + + - uses: actions/setup-node@v4 + with: + node-version: lts/* + + - name: Deploy docs to surge + shell: bash + env: + DEPLOY_URL: ${{ steps.get-deploy-url.outputs.deploy-url }} + SURGE_TOKEN: "${{ secrets.DOCS_SURGE_TOKEN }}" + SITE_DIR: ${{ steps.get-top-dir.outputs.top-dir }} + run: | + npm install -g surge + surge ./$SITE_DIR $DEPLOY_URL --token "$SURGE_TOKEN" + + # If the PR artifacts include a changelog file, add it to the PR as a comment + # The changelog contains links to new and changed files in the deployed docs + - name: Comment on PR (changelog) + if: ${{ hashFiles('changelog') != '' }} + uses: marocchino/sticky-pull-request-comment@331f8f5b4215f0445d3c07b4967662a32a2d3e31 #v2.9.0 + with: + number: ${{ steps.get-deploy-id.outputs.deploy-id }} + recreate: true + header: docs-pr-changes + path: changelog + GITHUB_TOKEN: ${{ secrets.DOCS_PR_COMMENT_TOKEN }} + + # If there's no changelog, add a generic comment to the PR + - name: Comment on PR (no changelog) + if: ${{ hashFiles('changelog') == '' }} + env: + DEPLOY_URL: ${{ steps.get-deploy-url.outputs.deploy-url }} + uses: marocchino/sticky-pull-request-comment@331f8f5b4215f0445d3c07b4967662a32a2d3e31 #v2.9.0 + with: + number: ${{ steps.get-deploy-id.outputs.deploy-id }} + header: docs-pr-changes + message: | + Looks like you've updated the documentation! + + Check out your changes at https://${{ env.DEPLOY_URL }} + GITHUB_TOKEN: ${{ secrets.DOCS_PR_COMMENT_TOKEN }} diff --git a/.github/workflows/docs-pr-checks.yml b/.github/workflows/docs-pr-checks.yml new file mode 100644 index 0000000..a896369 --- /dev/null +++ b/.github/workflows/docs-pr-checks.yml @@ -0,0 +1,61 @@ + +name: "Verify docs PR" + +on: + pull_request: + branches: + - "main" + - "dev" + - "5.x" + - "4.4" + +jobs: + + # Generate HTML + docs-build-pr: + uses: neo4j/docs-tools/.github/workflows/reusable-docs-build.yml@v1.2.0 + with: + deploy-id: ${{ github.event.number }} + retain-artifacts: 14 + + # Parse the json log output from the HTML build, and output warnings and errors as annotations + # Optionally, fail the build if there are warnings or errors + # By default, the job fails if there are errors, passes if there are warnings only. + docs-verify-pr: + needs: docs-build-pr + uses: neo4j/docs-tools/.github/workflows/reusable-docs-verify.yml@v1.2.0 + with: + failOnWarnings: true + + # Get lists of changes in the PR + # - all updated asciidoc files + # - all updated asciidoc pages + # - all new asciidoc pages + docs-changes-pr: + runs-on: ubuntu-latest + outputs: + asciidoc-files: ${{ steps.get-file-changes.outputs.asciidoc_all_changed_files }} + pages-modified: ${{ steps.get-file-changes.outputs.pages_modified_files }} + pages-added: ${{ steps.get-file-changes.outputs.pages_added_files }} + steps: + - name: Get file changes + id: get-file-changes + uses: tj-actions/changed-files@cbda684547adc8c052d50711417fa61b428a9f88 # v41.1.2 + with: + separator: ',' + files_yaml: | + pages: + - modules/**/pages/**/*.adoc + asciidoc: + - modules/**/*.adoc + + # Generate a PR comment if the docs are using the pageList extension + # The extension maps asciidoc source files to their HTML output paths + # The comment will contain links to new and changed pages in the deployed HTML docs + docs-updates-comment-pr: + if: needs.docs-build-pr.outputs.pages-listed == 'success' + needs: [docs-build-pr, docs-changes-pr] + uses: neo4j/docs-tools/.github/workflows/reusable-docs-pr-changes.yml@v1.2.0 + with: + pages-modified: ${{ needs.docs-changes-pr.outputs.pages-modified }} + pages-added: ${{ needs.docs-changes-pr.outputs.pages-added }} diff --git a/.github/workflows/docs-teardown.yml b/.github/workflows/docs-teardown.yml new file mode 100644 index 0000000..690b0c0 --- /dev/null +++ b/.github/workflows/docs-teardown.yml @@ -0,0 +1,51 @@ +# copy this workflow into your repo +name: "Documentation Teardown" + +on: + pull_request_target: + branches: + - "main" + - "dev" + - "5.x" + - "4.4" + types: + - closed + +jobs: + teardown-docs: + runs-on: ubuntu-latest + + steps: + - uses: actions/setup-node@v4 + with: + node-version: lts/* + + - id: get-deploy-url + env: + ORG: ${{ github.event.repository.owner.login }} + REPO: ${{ github.event.repository.name }} + DEPLOYID: ${{ github.event.pull_request.number }} + run: | + deployurl=$ORG-$REPO-$DEPLOYID.surge.sh + echo "deploy-url=$deployurl" >> $GITHUB_OUTPUT + + - name: Teardown documentation + shell: bash + env: + SURGE_TOKEN: "${{ secrets.DOCS_SURGE_TOKEN }}" + DEPLOY_URL: ${{ steps.get-deploy-url.outputs.deploy-url }} + run: | + npm install -g surge + surge teardown $DEPLOY_URL --token "$SURGE_TOKEN" + + - name: Comment on PR + uses: marocchino/sticky-pull-request-comment@331f8f5b4215f0445d3c07b4967662a32a2d3e31 #v2.9.0 + with: + number: ${{ github.event.pull_request.number }} + header: docs-pr-changes + message: | + Thanks for the documentation updates. + + The preview documentation has now been torn down - reopening this PR will republish it. + GITHUB_TOKEN: ${{ secrets.DOCS_PR_COMMENT_TOKEN }} +