## ## Github workflow for auto-opening a PR on the docs.blockstack 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 env: ROBOT_OWNER: kantai-robot ROBOT_REPO: docs.blockstack TARGET_OWNER: blockstack TARGET_REPO: docs.blockstack TARGET_REPOSITORY: blockstack/docs.blockstack on: push: branches: [master] jobs: dist: runs-on: ubuntu-latest env: ROBOT_BRANCH: ${{ format('auto/clarity-ref-{0}', github.sha) }} steps: - uses: actions/checkout@v2 - name: 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 uses: actions/checkout@v2 with: token: ${{ secrets.DOCS_GITHUB_TOKEN }} repository: ${{ env.TARGET_REPOSITORY }} path: docs.blockstack - name: Branch and commit id: push run: | cd docs.blockstack 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 "::set-output name=open_pr::0" else git remote add robot https://github.com/$ROBOT_OWNER/$ROBOT_REPO git commit -m "auto: update Clarity references JSONs from stacks-blockchain@${GITHUB_SHA}" git push robot $ROBOT_BRANCH echo "::set-output name=open_pr::1" fi - name: Open PR if: ${{ steps.push.outputs.open_pr == '1' }} uses: actions/github-script@v2 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-blockchain", body: "Update API documentation from the latest in `stacks-blockchain`", });