name: Deploy

on:
  push:
    branches:
      - master
      - beta
    tags:
      - rust-1.**

concurrency:
  group: ${{ github.workflow }}
  cancel-in-progress: false

env:
  TARGET_BRANCH: 'gh-pages'
  SHA: '${{ github.sha }}'
  SSH_REPO: 'git@github.com:${{ github.repository }}.git'

jobs:
  deploy:
    runs-on: ubuntu-latest
    if: github.repository == 'rust-lang/rust-clippy'

    steps:
    # Setup
    - name: Checkout
      uses: actions/checkout@v4
      with:
        # Unsetting this would make so that any malicious package could get our Github Token
        persist-credentials: false

    - name: Checkout
      uses: actions/checkout@v4
      with:
        ref: ${{ env.TARGET_BRANCH }}
        path: 'out'
        # Unsetting this would make so that any malicious package could get our Github Token
        persist-credentials: false

    # Run
    - name: Set tag name
      if: startswith(github.ref, 'refs/tags/')
      run: |
        TAG=$(basename "${TAGNAME}")
        echo "TAG_NAME=$TAG" >> $GITHUB_ENV
      env:
        # Make sure that the reference gets expanded before injecting it
        TAGNAME: ${{ github.ref }}
    - name: Set beta to true
      if: github.ref == 'refs/heads/beta'
      run: echo "BETA=true" >> $GITHUB_ENV

    # We need to check out all files that (transitively) depend on the
    # structure of the gh-pages branch, so that we're able to change that
    # structure without breaking the deployment.
    - name: Use deploy files from master branch
      run: |
        git fetch --no-tags --prune --depth=1 origin master
        git checkout origin/master -- .github/deploy.sh util/versions.py util/gh-pages/versions.html

    # Generate lockfile for caching to avoid build problems with cached deps
    - name: cargo generate-lockfile
      run: cargo generate-lockfile

    - name: Cache
      uses: Swatinem/rust-cache@v2
      with:
        save-if: ${{ github.ref == 'refs/heads/master' }}

    - name: cargo collect-metadata
      run: cargo collect-metadata

    - name: Deploy
      run: |
        eval "$(ssh-agent -s)"
        ssh-add - <<< "${{ secrets.DEPLOY_KEY }}"
        bash .github/deploy.sh
