mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-06 11:18:54 -05:00
Change things up with Crowdin and release-related workflows (#4833)
* Alternative way of doing Crowdin... * Limit the upload translations workflow to V3/develop * Make the workflow close and reopen the PR automatically while I'm at it * Add a workflow for preparing PRs for release * Make the crowdin env vars local to the step requiring them * Move dev bump to Publish Release workflow
This commit is contained in:
parent
54bbdd61e1
commit
c5fbf5fb94
32
.github/workflows/crowdin_upload_strings.yml
vendored
Normal file
32
.github/workflows/crowdin_upload_strings.yml
vendored
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
name: Crowdin - Upload strings
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- V3/develop
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
if: github.repository == 'Cog-Creators/Red-DiscordBot'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
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 crowdin
|
||||||
|
pip install redgettext==3.3
|
||||||
|
- name: Generate source files
|
||||||
|
run: |
|
||||||
|
make gettext
|
||||||
|
- name: Upload source files
|
||||||
|
run: |
|
||||||
|
make upload_translations
|
||||||
|
env:
|
||||||
|
CROWDIN_API_KEY: ${{ secrets.crowdin_token}}
|
||||||
|
CROWDIN_PROJECT_ID: ${{ secrets.crowdin_identifier }}
|
||||||
104
.github/workflows/prepare_release.yml
vendored
Normal file
104
.github/workflows/prepare_release.yml
vendored
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
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'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
crowdin_download_translations:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
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 crowdin
|
||||||
|
|
||||||
|
- name: Download translations
|
||||||
|
run: |
|
||||||
|
make download_translations
|
||||||
|
env:
|
||||||
|
CROWDIN_API_KEY: ${{ secrets.crowdin_token}}
|
||||||
|
CROWDIN_PROJECT_ID: ${{ secrets.crowdin_identifier }}
|
||||||
|
|
||||||
|
- name: Create Pull Request
|
||||||
|
id: cpr_crowdin
|
||||||
|
uses: peter-evans/create-pull-request@v3
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
commit-message: Automated Crowdin downstream
|
||||||
|
title: "[i18n] Automated Crowdin downstream"
|
||||||
|
body: |
|
||||||
|
This is an automated PR.
|
||||||
|
Please ensure that there are no errors or invalid files are in the PR.
|
||||||
|
labels: "Automated PR, Category: i18n, Changelog Entry: Skipped"
|
||||||
|
branch: "automated/i18n"
|
||||||
|
author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
|
||||||
|
|
||||||
|
- name: Close and reopen the PR with different token to trigger CI
|
||||||
|
uses: actions/github-script@v3
|
||||||
|
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
|
||||||
|
steps:
|
||||||
|
# Checkout repository and install Python
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
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 }}
|
||||||
|
|
||||||
|
- name: Create Pull Request
|
||||||
|
id: cpr_bump_stable
|
||||||
|
uses: peter-evans/create-pull-request@v3
|
||||||
|
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.
|
||||||
|
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>
|
||||||
|
|
||||||
|
- name: Close and reopen the PR with different token to trigger CI
|
||||||
|
uses: actions/github-script@v3
|
||||||
|
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}));
|
||||||
50
.github/workflows/publish_crowdin.yml
vendored
50
.github/workflows/publish_crowdin.yml
vendored
@ -1,50 +0,0 @@
|
|||||||
name: Publish to Crowdin
|
|
||||||
on:
|
|
||||||
schedule:
|
|
||||||
- cron: '0 12 * * THU'
|
|
||||||
workflow_dispatch:
|
|
||||||
repository_dispatch:
|
|
||||||
types: crowdin
|
|
||||||
|
|
||||||
env:
|
|
||||||
CROWDIN_API_KEY: ${{ secrets.crowdin_token}}
|
|
||||||
CROWDIN_PROJECT_ID: ${{ secrets.crowdin_identifier }}
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
deploy:
|
|
||||||
if: github.repository == 'Cog-Creators/Red-DiscordBot'
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: Set up Python
|
|
||||||
uses: actions/setup-python@v2
|
|
||||||
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 crowdin
|
|
||||||
pip install redgettext==3.3
|
|
||||||
- name: Generate source files
|
|
||||||
run: |
|
|
||||||
make gettext
|
|
||||||
- name: Upload source files
|
|
||||||
run: |
|
|
||||||
make upload_translations
|
|
||||||
- name: Download translations
|
|
||||||
run: |
|
|
||||||
make download_translations
|
|
||||||
- name: Create Pull Request
|
|
||||||
uses: peter-evans/create-pull-request@v3
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
commit-message: Automated Crowdin downstream
|
|
||||||
title: "[i18n] Automated Crowdin downstream"
|
|
||||||
body: |
|
|
||||||
This is an automated PR.
|
|
||||||
Please ensure that there are no errors or invalid files are in the PR.
|
|
||||||
labels: "Automated PR, Category: i18n, Changelog Entry: Skipped"
|
|
||||||
branch: "automated/i18n"
|
|
||||||
author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
|
|
||||||
27
.github/workflows/publish_pypi.yml
vendored
27
.github/workflows/publish_pypi.yml
vendored
@ -1,27 +0,0 @@
|
|||||||
name: Publish to PyPI
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- "*"
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
deploy:
|
|
||||||
if: github.repository == 'Cog-Creators/Red-DiscordBot'
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: Set up Python
|
|
||||||
uses: actions/setup-python@v2
|
|
||||||
with:
|
|
||||||
python-version: '3.8'
|
|
||||||
- name: Install dependencies
|
|
||||||
run: |
|
|
||||||
python -m pip install --upgrade pip
|
|
||||||
pip install setuptools wheel twine
|
|
||||||
- name: Build and publish
|
|
||||||
env:
|
|
||||||
TWINE_USERNAME: __token__
|
|
||||||
TWINE_PASSWORD: ${{ secrets.pypi_token }}
|
|
||||||
run: |
|
|
||||||
python setup.py sdist bdist_wheel
|
|
||||||
twine upload dist/*
|
|
||||||
67
.github/workflows/publish_release.yml
vendored
Normal file
67
.github/workflows/publish_release.yml
vendored
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
name: Publish the release
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- "*"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
release_to_pypi:
|
||||||
|
if: github.repository == 'Cog-Creators/Red-DiscordBot'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: '3.8'
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
pip install setuptools wheel twine
|
||||||
|
- name: Build and publish
|
||||||
|
env:
|
||||||
|
TWINE_USERNAME: __token__
|
||||||
|
TWINE_PASSWORD: ${{ secrets.pypi_token }}
|
||||||
|
run: |
|
||||||
|
python setup.py sdist bdist_wheel
|
||||||
|
twine upload dist/*
|
||||||
|
|
||||||
|
pr_dev_bump:
|
||||||
|
needs: release_to_pypi
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
# Version bump to development version
|
||||||
|
- name: Update Red version number to dev
|
||||||
|
id: bump_version_dev
|
||||||
|
run: |
|
||||||
|
python .github/workflows/scripts/bump_version.py
|
||||||
|
env:
|
||||||
|
PYTHONPATH: ${{ github.workspace }}:${{ env.PYTHONPATH }}
|
||||||
|
DEV_BUMP: '1'
|
||||||
|
|
||||||
|
- name: Create Pull Request
|
||||||
|
id: cpr_bump_dev
|
||||||
|
uses: peter-evans/create-pull-request@v3
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
commit-message: Version bump to ${{ steps.bump_version_dev.outputs.new_version }}
|
||||||
|
title: Version bump to ${{ steps.bump_version_dev.outputs.new_version }}
|
||||||
|
body: |
|
||||||
|
This is an automated PR.
|
||||||
|
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_dev.outputs.new_version }}"
|
||||||
|
author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
|
||||||
|
|
||||||
|
- name: Close and reopen the PR with different token to trigger CI
|
||||||
|
uses: actions/github-script@v3
|
||||||
|
env:
|
||||||
|
PR_NUMBER: ${{ steps.cpr_bump_dev.outputs.pull-request-number }}
|
||||||
|
PR_OPERATION: ${{ steps.cpr_bump_dev.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}));
|
||||||
45
.github/workflows/scripts/bump_version.py
vendored
Normal file
45
.github/workflows/scripts/bump_version.py
vendored
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
import os
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
from typing import Match
|
||||||
|
|
||||||
|
import redbot
|
||||||
|
|
||||||
|
|
||||||
|
version_info = None
|
||||||
|
|
||||||
|
|
||||||
|
def repl(match: Match[str]) -> str:
|
||||||
|
global version_info
|
||||||
|
|
||||||
|
new_stable_version = os.environ.get("NEW_STABLE_VERSION", "auto")
|
||||||
|
if new_stable_version == "auto":
|
||||||
|
version_info = redbot.VersionInfo.from_str(match.group("version"))
|
||||||
|
version_info.dev_release = None
|
||||||
|
else:
|
||||||
|
version_info = redbot.VersionInfo.from_str(new_stable_version)
|
||||||
|
|
||||||
|
if int(os.environ.get("DEV_BUMP", 0)):
|
||||||
|
version_info.micro += 1
|
||||||
|
version_info.dev_release = 1
|
||||||
|
|
||||||
|
return f'__version__ = "{version_info}"'
|
||||||
|
|
||||||
|
|
||||||
|
with open("redbot/__init__.py", encoding="utf-8") as fp:
|
||||||
|
new_contents, found = re.subn(
|
||||||
|
pattern=r'^__version__ = "(?P<version>[^"]*)"$',
|
||||||
|
repl=repl,
|
||||||
|
string=fp.read(),
|
||||||
|
count=1,
|
||||||
|
flags=re.MULTILINE,
|
||||||
|
)
|
||||||
|
|
||||||
|
if not found:
|
||||||
|
print("Couldn't find `__version__` line!")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
with open("redbot/__init__.py", "w", encoding="utf-8", newline="\n") as fp:
|
||||||
|
fp.write(new_contents)
|
||||||
|
|
||||||
|
print(f"::set-output name=new_version::{version_info}")
|
||||||
25
.github/workflows/scripts/close_and_reopen_pr.js
vendored
Normal file
25
.github/workflows/scripts/close_and_reopen_pr.js
vendored
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
module.exports = (async function ({github, context}) {
|
||||||
|
const pr_number = process.env.PR_NUMBER;
|
||||||
|
const pr_operation = process.env.PR_OPERATION;
|
||||||
|
let sleep_time = 0;
|
||||||
|
|
||||||
|
if (!['created', 'updated'].includes(pr_operation)) {
|
||||||
|
console.log('PR was not created as there were no changes.')
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const new_state of ['closed', 'open']) {
|
||||||
|
// some sleep time needed to make sure API handles open after close
|
||||||
|
if (sleep_time)
|
||||||
|
await new Promise(r => setTimeout(r, sleep_time));
|
||||||
|
|
||||||
|
github.issues.update({
|
||||||
|
issue_number: pr_number,
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
state: new_state
|
||||||
|
});
|
||||||
|
|
||||||
|
sleep_time = 2000;
|
||||||
|
}
|
||||||
|
})
|
||||||
Loading…
x
Reference in New Issue
Block a user