## ## Github workflow for auto-opening a PR on the stacks-network/docs repo ## whenever the auto-generated documentation here changes. ## ## It does this using a robot account `kantai-robot` to create a ## _base_ for the PR, the robot doesn't need any permissions to anyone ## else's git repositories. ## name: Open Docs PR defaults: run: shell: bash env: ROBOT_OWNER: kantai-robot ROBOT_REPO: docs.blockstack TARGET_OWNER: stacks-network TARGET_REPO: docs TARGET_REPOSITORY: stacks-network/docs ## Only run when: ## - push to master on: push: branches: - master jobs: dist: name: Open Docs PR runs-on: ubuntu-latest env: ROBOT_BRANCH: ${{ format('auto/clarity-ref-{0}', github.sha) }} steps: - name: Checkout the latest code id: git_checkout uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Build docs id: build_docs env: DOCKER_BUILDKIT: 1 run: rm -rf docs-output && docker build -o docs-output -f ./.github/actions/docsgen/Dockerfile.docsgen . - name: Checkout latest docs id: git_checkout_docs uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 with: token: ${{ secrets.DOCS_GITHUB_TOKEN }} repository: ${{ env.TARGET_REPOSITORY }} path: docs - name: Branch and commit id: push run: | cd docs git config user.email "kantai+robot@gmail.com" git config user.name "PR Robot" git fetch --unshallow git checkout -b $ROBOT_BRANCH cp ../docs-output/clarity-reference.json ./src/_data/clarity-reference.json cp ../docs-output/boot-contracts-reference.json ./src/_data/boot-contracts-reference.json git add src/_data/clarity-reference.json git add src/_data/boot-contracts-reference.json if $(git diff --staged --quiet --exit-code); then echo "No reference.json changes, stopping" echo "open_pr=0" >> "$GITHUB_OUTPUT" else git remote add robot https://github.com/$ROBOT_OWNER/$ROBOT_REPO git commit -m "auto: update Clarity references JSONs from stacks-core@${GITHUB_SHA}" git push robot $ROBOT_BRANCH echo "open_pr=1" >> "$GITHUB_OUTPUT" fi - name: Open PR id: open_pr if: ${{ steps.push.outputs.open_pr == '1' }} uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # v6.4.1 with: github-token: ${{ secrets.DOCS_GITHUB_TOKEN }} script: | // get env vars const process = require("process"); const robot_owner = process.env.ROBOT_OWNER; const robot_branch = process.env.ROBOT_BRANCH; const head = `${robot_owner}:${robot_branch}`; const owner = process.env.TARGET_OWNER; const repo = process.env.TARGET_REPO; console.log(`Checking PR with params: head= ${head} owner= ${owner} repo= ${repo}`); // check if a pull exists const existingPulls = await github.pulls.list({ owner, repo, state: "open" }); const myPulls = existingPulls.data.filter( pull => pull.user.login == robot_owner ); console.log(myPulls); for (myPull of myPulls) { // close any open PRs const pull_number = myPull.number; console.log(`Closing PR: ${ pull_number }`); await github.pulls.update({ owner, repo, pull_number, state: "closed" }); } // Open PR if one doesn't exist console.log("Opening the new PR."); let result = await github.pulls.create({ owner, repo, head, base: "master", title: "Auto: Update API documentation from stacks-core", body: "Update API documentation from the latest in `stacks-core`", });