name: Release Preparation

on:
  workflow_dispatch:
    inputs:
      version:
        description: 'Selenium version to release'
        required: true
      chrome_channel:
        description: 'Chrome Channel for CDP'
        required: true
        type: choice
        default: "stable"
        options:
          - stable
          - early-stable

jobs:
  update-rust:
    name: Update Rust Version
    runs-on: ubuntu-latest
    steps:
      - name: "Checkout repo"
        uses: actions/checkout@v4
        with:
          persist-credentials: false
          fetch-depth: 0
          fetch-tags: true
      - name: "Prep git"
        run: |
          git config --local user.email "selenium-ci@users.noreply.github.com"
          git config --local user.name "Selenium CI Bot"
          if git rev-parse --verify release-${{ github.event.inputs.version }} >/dev/null 2>&1; then
          git branch -D release-${{ github.event.inputs.version }}
          fi
          git checkout -b release-${{ github.event.inputs.version }}
      - name: Update Rust Version
        run: |
          ./go rust:version[${{ github.event.inputs.version }}]
          ./go rust:version:commit
      - name: Push changes
        uses: ad-m/github-push-action@master
        with:
          github_token: ${{ secrets.SELENIUM_CI_TOKEN }}
          branch: release-${{ github.event.inputs.version }}
          force: true

  selenium-manager:
    name: Release Selenium Manager
    needs: update-rust
    uses: ./.github/workflows/ci-rust.yml
    with:
      release: true
      branch: release-${{ github.event.inputs.version }}
    secrets:
      SELENIUM_CI_TOKEN: ${{ secrets.SELENIUM_CI_TOKEN }}

  update-files:
    name: Update Files
    runs-on: ubuntu-latest
    needs: selenium-manager
    steps:
      - name: "Checkout project"
        uses: actions/checkout@v4
        with:
          persist-credentials: false
          fetch-depth: 0
          fetch-tags: true
          ref: release-${{ github.event.inputs.version }}
      - name: Install Ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: '3.1'
          working-directory: 'rb'
      - name: Setup curl for Ubuntu
        run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev
      - name: "Prep git"
        run: |
          git config --local user.email "selenium-ci@users.noreply.github.com"
          git config --local user.name "Selenium CI Bot"
      - name: Undo rust changelog commit
        run: git reset HEAD~1
      - name: Update everything including early release CDP
        if: ${{ github.event.inputs.chrome_channel == 'early-stable' }}
        run: ./go all:prepare[${{ github.event.inputs.version }},Beta]
      - name: Update everything including released CDP
        if: ${{ github.event.inputs.chrome_channel == 'stable' }}
        run: ./go "all:prepare[${{ github.event.inputs.version }},Stable]"
      - name: Create Pull Request
        uses: peter-evans/create-pull-request@v6
        with:
          token: ${{ secrets.SELENIUM_CI_TOKEN }}
          author: Selenium CI Bot <selenium-ci@users.noreply.github.com>
          delete-branch: true
          branch: release-preparation-${{ github.event.inputs.version }}
          base: trunk
          title: "[build] Prepare for release of Selenium ${{ github.event.inputs.version }}"
          body: |
            **Warning: Manually update the changelogs before merging**

            This PR:
              * Updates Rust version for Selenium Manager release
              * Updates Pinned browser version to coincide with new CDP release
              * Adds support for new CDP version and removes old CDP version
              * Selenium Manager references the new Selenium Manager release
              * Updates Maven Dependencies
              * Adds new authors to authors file
              * Updates all versions for all bindings
              * Generates *rough* change logs for each bindings (please tidy them up before merging this)

            - Auto-generated by [create-pull-request][1]

            [1]: https://github.com/peter-evans/create-pull-request
          labels: C-build
          draft: true
