name: Docs on: push: branches: - main pull_request: types: [opened, synchronize, reopened, ready_for_review] merge_group: concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true jobs: isdraft: uses: ./.github/workflows/reusable-isdraft.yml preflight: needs: isdraft uses: ./.github/workflows/reusable-preflight.yml test-doc: runs-on: ${{ needs.preflight.outputs.RUNNER }} timeout-minutes: 60 needs: [preflight] container: image: ${{ needs.preflight.outputs.IMAGE }} steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Clean cargo cache to free disk space run: | cargo clean 2>/dev/null || true rm -rf ~/.cargo/registry/cache 2>/dev/null || true rm -rf ~/.cargo/git/db 2>/dev/null || true - run: cargo test --doc --workspace --locked --all-features id: required env: RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings" SKIP_WASM_BUILD: 1 build-rustdoc: runs-on: ${{ needs.preflight.outputs.RUNNER }} timeout-minutes: 60 if: ${{ needs.preflight.outputs.changes_rust }} needs: [preflight] container: image: ${{ needs.preflight.outputs.IMAGE }} steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Clean cargo cache to free disk space run: | cargo clean 2>/dev/null || true rm -rf ~/.cargo/registry/cache 2>/dev/null || true rm -rf ~/.cargo/git/db 2>/dev/null || true - run: cargo doc --all-features --workspace --no-deps --locked id: required env: SKIP_WASM_BUILD: 1 RUSTDOCFLAGS: "-Dwarnings --default-theme=ayu --html-in-header ./docs/sdk/assets/header.html --extend-css ./docs/sdk/assets/theme.css --html-after-content ./docs/sdk/assets/after-content.html" - run: rm -f ./target/doc/.lock - run: mv ./target/doc ./crate-docs - name: Inject Simple Analytics script run: | script_content="" docs_dir="./crate-docs" inject_simple_analytics() { find "$1" -name '*.html' | xargs -I {} -P "$(nproc)" bash -c 'file="{}"; echo "Adding Simple Analytics script to $file"; sed -i "s||'"$2"'|" "$file";' } inject_simple_analytics "$docs_dir" "$script_content" - run: echo "" > ./crate-docs/index.html - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 with: name: ${{ github.sha }}-doc path: ./crate-docs/ retention-days: 1 if-no-files-found: error build-implementers-guide: runs-on: ubuntu-latest needs: isdraft steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Install mdbook run: | cargo install mdbook --version 0.4.35 --locked - run: mdbook build ./pezkuwi/roadmap/implementers-guide - run: mkdir -p artifacts - run: mv pezkuwi/roadmap/implementers-guide/book artifacts/ - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 with: name: ${{ github.sha }}-guide path: ./artifacts/ retention-days: 1 if-no-files-found: error confirm-required-jobs-passed: runs-on: ubuntu-latest name: All docs jobs passed # If any new job gets added, be sure to add it to this array needs: [test-doc, build-rustdoc, build-implementers-guide] if: always() && !cancelled() steps: - run: | tee resultfile <<< '${{ toJSON(needs) }}' FAILURES=$(cat resultfile | grep '"result": "failure"' | wc -l) if [ $FAILURES -gt 0 ]; then echo "### At least one required job failed ❌" >> $GITHUB_STEP_SUMMARY exit 1 else echo '### Good job! All the required jobs passed 🚀' >> $GITHUB_STEP_SUMMARY fi publish-rustdoc: if: github.ref == 'refs/heads/master' runs-on: ubuntu-latest environment: subsystem-benchmarks needs: [build-rustdoc, build-implementers-guide] steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: ref: gh-pages - uses: actions/create-github-app-token@67018539274d69449ef7c02e8e71183d1719ab42 # v2.1.4 id: app-token with: app-id: ${{ secrets.PEZKUWI_GHPAGES_APP_ID }} private-key: ${{ secrets.PEZKUWI_GHPAGES_APP_KEY }} - name: Ensure destination dir does not exist run: | rm -rf book/ rm -rf ${REF_NAME} env: REF_NAME: ${{ github.head_ref || github.ref_name }} - name: Download rustdocs uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0 with: name: ${{ github.sha }}-doc path: ${{ github.head_ref || github.ref_name }} - name: Download guide uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0 with: name: ${{ github.sha }}-guide path: /tmp - run: mkdir -p book - name: Move book files run: mv /tmp/book/html/* book/ - name: Push changes to gh-pages env: TOKEN: ${{ steps.app-token.outputs.token }} APP_NAME: "pezkuwichain-upd-ghpages" REF_NAME: ${{ github.head_ref || github.ref_name }} Green: "\e[32m" NC: "\e[0m" run: | echo "${Green}Git add${NC}" git add book/ git add ${REF_NAME}/ echo "${Green}git status | wc -l${NC}" git status | wc -l echo "${Green}Add new remote with gh app token${NC}" git remote set-url origin $(git config remote.origin.url | sed "s/github.com/${APP_NAME}:${TOKEN}@github.com/g") echo "${Green}Remove http section that causes issues with gh app auth token${NC}" sed -i.bak '/\[http/d' ./.git/config sed -i.bak '/extraheader/d' ./.git/config echo "${Green}Git push${NC}" git config user.email "ci@pezkuwichain.io" git config user.name "${APP_NAME}" git commit --amend -m "___Updated docs" || echo "___Nothing to commit___" git push origin gh-pages --force