diff --git a/.forgejo/workflows/milestone.yml b/.forgejo/workflows/milestone.yml
new file mode 100644
index 0000000000..ac1aefa3b9
--- /dev/null
+++ b/.forgejo/workflows/milestone.yml
@@ -0,0 +1,29 @@
+# Copyright 2024 The Forgejo Authors
+# SPDX-License-Identifier: MIT
+#
+# This workflow is triggered on pull_request_target and runs from
+# the forgejo branch so that it does not need to be backported.
+# If it was triggered on pull_request, it would have to exist on all
+# stable branches.
+#
+name: milestone
+
+on:
+  pull_request_target:
+    types:
+      - opened
+
+jobs:
+  set:
+    if: vars.ROLE == 'forgejo-coding'
+    runs-on: docker
+    container:
+      image: 'code.forgejo.org/oci/node:20-bookworm'
+    steps:
+      - uses: https://code.forgejo.org/forgejo/set-milestone@v1.0.0
+        with:
+          forgejo: https://codeberg.org
+          repository: forgejo/forgejo
+          token: ${{ secrets.SET_MILESTONE_TOKEN }}
+          pr-number: ${{ github.event.pull_request.number }}
+          verbose: ${{ vars.SET_MILESTONE_VERBOSE }}