diff --git a/.forgejo/workflows/release.yaml b/.forgejo/workflows/release.yaml
new file mode 100644
index 0000000..a574329
--- /dev/null
+++ b/.forgejo/workflows/release.yaml
@@ -0,0 +1,47 @@
+on:
+  push:
+    tags:
+      - v**
+jobs:
+  build-artifacts:
+    runs-on: docker
+    strategy:
+      matrix:
+        tool:
+          - autoinstall
+          - autostart-manage
+    steps:
+      - uses: https://code.forgejo.org/actions/checkout@v3
+      - id: install-dependencies
+        run: |
+          apt update
+          apt install -y make ruby
+          gem install bashly
+        shell: bash
+      - id: run-bashly
+        run: |
+          echo "${{ matrix.tool }}" > .target
+          make generate
+        shell: bash
+      - uses: https://code.forgejo.org/actions/upload-artifact@v3
+        with:
+          name: ${{ matrix.tool }}
+          path: ${{ github.workspace }}/output/${{ matrix.tool }}
+  upload-release:
+    runs-on: docker
+    steps:
+      - uses: https://code.forgejo.org/actions/checkout@v3
+      - uses: https://code.forgejo.org/actions/download-artifact@v3
+        with:
+          path: /tmp/artifacts-in
+          merge-multiple: true # broken "collect-artifacts" used as workaround
+      - id: collect-artifacts
+        run: |
+          mkdir /tmp/artifacts-out
+          mv $(find /tmp/artifacts-in -type f) /tmp/artifacts-out
+        shell: bash
+      - uses: https://code.forgejo.org/actions/forgejo-release@v1
+        with:
+          direction: upload
+          release-dir: /tmp/artifacts-out
+          token: ${{ github.token }}