Cog-Creators/Red-DiscordBot

View on GitHub
.github/workflows/prepare_release.yml

Summary

Maintainability
Test Coverage
name: Prepare Release
on:
  workflow_dispatch:
    inputs:
      new_stable_version:
        description: Version number for the new stable release (leave empty to just strip `.dev1`)
        required: false
        default: 'auto'

permissions:
  contents: write
  pull-requests: write

jobs:
  crowdin_download_translations:
    needs: pr_stable_bump
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.8'
      - name: Install dependencies
        run: |
          curl https://artifacts.crowdin.com/repo/GPG-KEY-crowdin | sudo apt-key add -
          echo "deb https://artifacts.crowdin.com/repo/deb/ /" | sudo tee -a /etc/apt/sources.list
          sudo apt-get update -qq
          sudo apt-get install -y crowdin3
          pip install redgettext==3.4.2

      - name: Generate source files
        run: |
          make gettext
      - name: Download translations
        run: |
          make download_translations
        env:
          CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
          CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_IDENTIFIER }}

      - name: Create Pull Request
        id: cpr_crowdin
        uses: peter-evans/create-pull-request@v4
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          commit-message: Automated Crowdin downstream
          title: "Automated Crowdin downstream"
          body: |
            This is an automated PR that is part of Prepare Release automated workflow (2 out of 2).
            Please ensure that there are no errors or invalid files are in the PR.
          labels: "Automated PR, Changelog Entry: Skipped"
          branch: "automated/i18n"
          author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
          milestone: ${{ needs.pr_stable_bump.outputs.milestone_number }}

      - name: Close and reopen the PR with different token to trigger CI
        uses: actions/github-script@v6
        env:
          PR_NUMBER: ${{ steps.cpr_crowdin.outputs.pull-request-number }}
          PR_OPERATION: ${{ steps.cpr_crowdin.outputs.pull-request-operation }}
        with:
          github-token: ${{ secrets.cogcreators_bot_repo_scoped }}
          script: |
            const script = require(
              `${process.env.GITHUB_WORKSPACE}/.github/workflows/scripts/close_and_reopen_pr.js`
            );
            console.log(script({github, context}));

  pr_stable_bump:
    runs-on: ubuntu-latest
    outputs:
      milestone_number: ${{ steps.get_milestone_number.outputs.result }}
    steps:
      # Checkout repository and install Python
      - uses: actions/checkout@v3
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.8'

      # Create PR for stable version bump
      - name: Update Red version number from input
        id: bump_version_stable
        run: |
          python .github/workflows/scripts/bump_version.py
        env:
          PYTHONPATH: ${{ github.workspace }}:${{ env.PYTHONPATH }}
          NEW_STABLE_VERSION: ${{ github.event.inputs.new_stable_version }}

      # Get milestone number of the milestone for the new stable version
      - name: Get milestone number
        id: get_milestone_number
        uses: actions/github-script@v6
        env:
          MILESTONE_TITLE: ${{ steps.bump_version_stable.outputs.new_version }}
        with:
          script: |
            const script = require(
              `${process.env.GITHUB_WORKSPACE}/.github/workflows/scripts/get_milestone_number_by_exact_title.js`
            );
            return await script({github, context});

      - name: Create Pull Request
        id: cpr_bump_stable
        uses: peter-evans/create-pull-request@v4
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          commit-message: Version bump to ${{ steps.bump_version_stable.outputs.new_version }}
          title: Version bump to ${{ steps.bump_version_stable.outputs.new_version }}
          body: |
            This is an automated PR that is part of Prepare Release automated workflow (1 out of 2).
            Please ensure that there are no errors or invalid files are in the PR.
          labels: "Automated PR, Changelog Entry: Skipped"
          branch: "automated/pr_bumps/${{ steps.bump_version_stable.outputs.new_version }}"
          author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
          milestone: ${{ steps.get_milestone_number.outputs.result }}

      - name: Close and reopen the PR with different token to trigger CI
        uses: actions/github-script@v6
        env:
          PR_NUMBER: ${{ steps.cpr_bump_stable.outputs.pull-request-number }}
          PR_OPERATION: ${{ steps.cpr_bump_stable.outputs.pull-request-operation }}
        with:
          github-token: ${{ secrets.cogcreators_bot_repo_scoped }}
          script: |
            const script = require(
              `${process.env.GITHUB_WORKSPACE}/.github/workflows/scripts/close_and_reopen_pr.js`
            );
            console.log(await script({github, context}));