From 8a0e3bf308cf7f1cd7c137183ca2d8ed6aaa0f5d Mon Sep 17 00:00:00 2001 From: BD103 <59022059+BD103@users.noreply.github.com> Date: Mon, 28 Oct 2024 22:15:59 -0400 Subject: [PATCH] Publish `bevy_lint` docs to Github Pages (#160) Closes #155, extracted from #152. While refactoring I moved `extract-rust-version` to a separate, callable workflow that can be used by both `ci.yml` and `docs.yml`. --- .github/workflows/ci.yml | 28 ++------- .github/workflows/docs.yml | 73 ++++++++++++++++++++++ .github/workflows/extract-rust-version.yml | 40 ++++++++++++ 3 files changed, 117 insertions(+), 24 deletions(-) create mode 100644 .github/workflows/docs.yml create mode 100644 .github/workflows/extract-rust-version.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 49282a08..5e5cd102 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,32 +6,12 @@ on: pull_request: workflow_dispatch: +env: + CARGO_TERM_COLOR: always + jobs: - # Find the nightly Rust version and required components from `rust-toolchain.toml` using - # , so that we install can install them in later jobs. extract-rust-version: - name: Extract Rust version - runs-on: ubuntu-latest - outputs: - channel: ${{ steps.toolchain.outputs.toolchain }} - components: ${{ steps.toolchain.outputs.components }} - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Install Taplo - run: | - curl -fsSL https://github.com/tamasfe/taplo/releases/latest/download/taplo-linux-x86_64.gz \ - | gzip -d - | install -m 755 /dev/stdin /usr/local/bin/taplo - - - name: Extract toolchain - id: toolchain - run: | - TOOLCHAIN=$(taplo get -f='rust-toolchain.toml' 'toolchain.channel') - COMPONENTS=$(taplo get -f='rust-toolchain.toml' --separator=', ' 'toolchain.components') - - echo toolchain=$TOOLCHAIN >> $GITHUB_OUTPUT - echo components=$COMPONENTS >> $GITHUB_OUTPUT + uses: ./.github/workflows/extract-rust-version.yml test: name: Run tests diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 00000000..4b7d06a6 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,73 @@ +name: Docs + +on: + push: + branches: [main] + workflow_dispatch: + +env: + CARGO_TERM_COLOR: always + +# Only allow one deployment to run at a time, however do not cancel runs in progress. +concurrency: + group: pages + cancel-in-progress: false + +jobs: + extract-rust-version: + uses: ./.github/workflows/extract-rust-version.yml + + build-lint-docs: + name: Build `bevy_lint` docs + runs-on: ubuntu-latest + needs: extract-rust-version + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install Rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: ${{ needs.extract-rust-version.outputs.channel }} + components: ${{ needs.extract-rust-version.outputs.components }} + + - name: Cache build artifacts + uses: Leafwing-Studios/cargo-cache@v2 + with: + sweep-cache: true + + - name: Build with `rustdoc` + # We don't need to document dependencies since this is not intended to be consumed as a + # library. Furthermore, we pass `--lib` to prevent it from documenting binaries + # automatically. + run: cargo doc --package bevy_lint --no-deps --lib + + - name: Finalize documentation + run: | + # Redirect root `index.html` to `bevy_lint/index.html`. + echo '' > target/doc/index.html + + # Sometimes Github Pages fails to bundle and publish `rustdoc` websites due to the weird + # permissions of this file. Remove it, just in case. + rm --force target/doc/.lock + + - name: Upload pages artifact + uses: actions/upload-pages-artifact@v3 + with: + path: target/doc + + deploy: + name: Deploy docs + runs-on: ubuntu-latest + needs: build-lint-docs + environment: + name: github-pages + url: ${{ steps.deploy.outputs.page_url }} + # These are the permissions required to deploy websites to Github Pages. + permissions: + pages: write + id-token: write + steps: + - name: Deploy to Github Pages + id: deploy + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/extract-rust-version.yml b/.github/workflows/extract-rust-version.yml new file mode 100644 index 00000000..a55dcac5 --- /dev/null +++ b/.github/workflows/extract-rust-version.yml @@ -0,0 +1,40 @@ +# Find the nightly Rust version and required components in `rust-toolchain.toml` using +# . The output of this workflow can then be used in +# `@dtolnay/rust-toolchain` to install Rust. + +name: Extract Rust Version + +on: + workflow_call: + outputs: + channel: + description: The Rustup channel extracted from `rust-toolchain.toml`. + value: ${{ jobs.extract-rust-version.outputs.channel }} + components: + description: A comma-separated list of Rustup components extracted from `rust-toolchain.toml`. + value: ${{ jobs.extract-rust-version.outputs.components }} + +jobs: + extract-rust-version: + name: Extract Rust version + runs-on: ubuntu-latest + outputs: + channel: ${{ steps.toolchain.outputs.channel }} + components: ${{ steps.toolchain.outputs.components }} + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install Taplo + run: | + curl -fsSL https://github.com/tamasfe/taplo/releases/latest/download/taplo-linux-x86_64.gz \ + | gzip -d - | install -m 755 /dev/stdin /usr/local/bin/taplo + + - name: Extract toolchain + id: toolchain + run: | + CHANNEL=$(taplo get -f='rust-toolchain.toml' 'toolchain.channel') + COMPONENTS=$(taplo get -f='rust-toolchain.toml' --separator=', ' 'toolchain.components') + + echo channel=$CHANNEL >> $GITHUB_OUTPUT + echo components=$COMPONENTS >> $GITHUB_OUTPUT