]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
🔨 Refactor translation script to allow committing in place (#14687)
authorSebastián Ramírez <tiangolo@gmail.com>
Sun, 11 Jan 2026 00:03:50 +0000 (16:03 -0800)
committerGitHub <noreply@github.com>
Sun, 11 Jan 2026 00:03:50 +0000 (00:03 +0000)
.github/workflows/translate.yml
scripts/translate.py

index e6edc5aababcd7f61e2d4ccde7e9b0f7b357ccb0..734a3782fce00daa44d8387efc155304396303a2 100644 (file)
@@ -30,6 +30,11 @@ on:
         type: string
         required: false
         default: ""
+      commit_in_place:
+        description: Whether to commit changes directly instead of making a PR
+        type: boolean
+        required: false
+        default: false
 
 jobs:
   langs:
@@ -109,3 +114,4 @@ jobs:
           LANGUAGE: ${{ matrix.lang }}
           EN_PATH: ${{ github.event.inputs.en_path }}
           COMMAND: ${{ matrix.command }}
+          COMMIT_IN_PLACE: ${{ github.event.inputs.commit_in_place }}
index c7e6c7ea19bfe2c496522f9754c914fbc206c756..eba4ad6a2f90fb0d53f9e63d3c0c4a75e9fe8caa 100644 (file)
@@ -360,6 +360,9 @@ def make_pr(
     command: Annotated[str | None, typer.Option(envvar="COMMAND")] = None,
     github_token: Annotated[str, typer.Option(envvar="GITHUB_TOKEN")],
     github_repository: Annotated[str, typer.Option(envvar="GITHUB_REPOSITORY")],
+    commit_in_place: Annotated[
+        bool, typer.Option(envvar="COMMIT_IN_PLACE", show_default=True)
+    ] = False,
 ) -> None:
     print("Setting up GitHub Actions git user")
     repo = git.Repo(Path(__file__).absolute().parent.parent)
@@ -371,14 +374,22 @@ def make_pr(
         ["git", "config", "user.email", "github-actions[bot]@users.noreply.github.com"],
         check=True,
     )
-    branch_name = "translate"
-    if language:
-        branch_name += f"-{language}"
-    if command:
-        branch_name += f"-{command}"
-    branch_name += f"-{secrets.token_hex(4)}"
-    print(f"Creating a new branch {branch_name}")
-    subprocess.run(["git", "checkout", "-b", branch_name], check=True)
+    current_branch = repo.active_branch.name
+    if current_branch == "master" and commit_in_place:
+        print("Can't commit directly to master")
+        raise typer.Exit(code=1)
+
+    if not commit_in_place:
+        branch_name = "translate"
+        if language:
+            branch_name += f"-{language}"
+        if command:
+            branch_name += f"-{command}"
+        branch_name += f"-{secrets.token_hex(4)}"
+        print(f"Creating a new branch {branch_name}")
+        subprocess.run(["git", "checkout", "-b", branch_name], check=True)
+    else:
+        print(f"Committing in place on branch {current_branch}")
     print("Adding updated files")
     git_path = Path("docs")
     subprocess.run(["git", "add", str(git_path)], check=True)
@@ -391,17 +402,20 @@ def make_pr(
     subprocess.run(["git", "commit", "-m", message], check=True)
     print("Pushing branch")
     subprocess.run(["git", "push", "origin", branch_name], check=True)
-    print("Creating PR")
-    g = Github(github_token)
-    gh_repo = g.get_repo(github_repository)
-    body = (
-        message
-        + "\n\nThis PR was created automatically using LLMs."
-        + f"\n\nIt uses the prompt file https://github.com/fastapi/fastapi/blob/master/docs/{language}/llm-prompt.md."
-        + "\n\nIn most cases, it's better to make PRs updating that file so that the LLM can do a better job generating the translations than suggesting changes in this PR."
-    )
-    pr = gh_repo.create_pull(title=message, body=body, base="master", head=branch_name)
-    print(f"Created PR: {pr.number}")
+    if not commit_in_place:
+        print("Creating PR")
+        g = Github(github_token)
+        gh_repo = g.get_repo(github_repository)
+        body = (
+            message
+            + "\n\nThis PR was created automatically using LLMs."
+            + f"\n\nIt uses the prompt file https://github.com/fastapi/fastapi/blob/master/docs/{language}/llm-prompt.md."
+            + "\n\nIn most cases, it's better to make PRs updating that file so that the LLM can do a better job generating the translations than suggesting changes in this PR."
+        )
+        pr = gh_repo.create_pull(
+            title=message, body=body, base="master", head=branch_name
+        )
+        print(f"Created PR: {pr.number}")
     print("Finished")