name: Deploy
on:
  release:
    types: [created]

defaults:
  run:
    shell: bash

permissions:
  contents: write

jobs:
  release:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        include:
          - target: aarch64-unknown-linux-musl
            os: ubuntu-22.04
          - target: x86_64-unknown-linux-gnu
            os: ubuntu-22.04
          - target: x86_64-unknown-linux-musl
            os: ubuntu-22.04
          - target: x86_64-apple-darwin
            os: macos-latest
          - target: aarch64-apple-darwin
            os: macos-latest
          - target: x86_64-pc-windows-msvc
            os: windows-latest
    name: Deploy ${{ matrix.target }}
    steps:
    - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0  # v7.0.0
    - name: Install Rust
      run: ci/install-rust.sh stable ${{ matrix.target }}
    - name: Build asset
      run: ci/make-release-asset.sh ${{ matrix.os }} ${{ matrix.target }}
    - name: Update release with new asset
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      run: gh release upload $MDBOOK_TAG $MDBOOK_ASSET
  pages:
    name: GitHub Pages
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0  # v7.0.0
    - name: Install Rust (rustup)
      run: rustup update stable --no-self-update && rustup default stable
    - name: Deploy the User Guide to GitHub Pages using the gh-pages branch
      run: ci/publish-guide.sh
  publish:
    name: Publish to crates.io
    runs-on: ubuntu-latest
    permissions:
      # Required for OIDC token exchange
      id-token: write
    environment: publish
    steps:
      - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0  # v7.0.0
      - name: Install Rust (rustup)
        run: rustup update stable --no-self-update && rustup default stable
      - name: Authenticate with crates.io
        id: auth
        uses: rust-lang/crates-io-auth-action@c6f97d42243bad5fab37ca0427f495c86d5b1a18  # v1.0.5
      - name: Publish
        env:
          CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}
        run: cargo publish --workspace --no-verify
