<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>blog.n11n [tag: actions]</title>
  <link>https://blog.n11n.ca</link>
  <description>Nicholas' blog</description>
  <language>en</language>
  <atom:link href="https://blog.n11n.ca/rss.xml" rel="self" type="application/rss+xml" />

  <item>
    <title>Trigger a remote workflow with Forgejo Actions</title>
    <pubDate>Sat, 31 Jan 2026 00:00:00 +0000</pubDate>
    <link>https://blog.n11n.ca/remote-forgejo-action</link>
    <guid>https://blog.n11n.ca/1</guid>
    <description>How to trigger a workflow in another repository with Forgejo Actions</description>
    <content:encoded><![CDATA[<p>This demonstrates using the <a href="https://codeberg.org/api/swagger">Forgejo API</a> to let a workflow in one repository (<code>from</code>) dispatch a workflow in another (<code>to</code>).</p> <h2>Setup</h2> <p>An <a href="https://forgejo.org/docs/latest/user/token-scope/">access token scoped</a> with <strong>write:repository</strong> permissions must first be created:</p> <p><img src="https://blog.n11n.ca/images/forgejo-access-token.png" alt="User settings > Applications > Access tokens > Generate new token" /></p> <p>Then, add it as a secret named <strong>PAT</strong> in the <code>from</code> repository.</p> <p><em>(make sure Actions are enabled in both repos)</em></p> <h2>"From" workflow</h2> <pre><code># .forgejo/workflows/trigger.yaml</code><br><code>name: Trigger remote</code><br><br><code># trigger for all pushes, adjust accordingly</code><br><code>on:</code><br><code>  push:</code><br><br><code>env:</code><br><code>  SERVER_URL: "git.example.com"</code><br><code>  TARGET_BRANCH: "main"</code><br><code>  TARGET_REPO: "to"</code><br><code>  TARGET_REPO_OWNER: "username"</code><br><code>  WORKFLOW_FILE: "remote.yaml"</code><br><br><code>jobs:</code><br><code>  trigger:</code><br><code>    runs-on: runner-name</code><br><code>    steps:</code><br><code>      - name: Remote trigger</code><br><code>        run: |</code><br><code>          curl -X 'POST' \</code><br><code>            'https://${{ env.SERVER_URL }}/api/v1/repos/${{ env.TARGET_REPO_OWNER }}/${{ env.TARGET_REPO }}/actions/workflows/${{ env.WORKFLOW_FILE }}/dispatches' \</code><br><code>            -H 'Accept: application/json' \</code><br><code>            -H 'Authorization: token ${{ secrets.PAT }}' \</code><br><code>            -H 'Content-Type: application/json' \</code><br><code>            -d '{"ref": "${{ env.TARGET_BRANCH }}"}'</code></pre> <h2>"To" workflow</h2> <pre><code># .forgejo/workflows/remote.yaml</code><br><code>name: Triggered workflow</code><br><br><code># trigger from API dispatch</code><br><code>on:</code><br><code>  repository_dispatch:</code><br><br><code>jobs:</code><br><code>  execute:</code><br><code>    runs-on: runner-name</code><br><code>    steps:</code><br><code>      - name: Remotely triggered</code><br><code>        run: |</code><br><code>          echo "This was triggered remotely"</code></pre> <h3>Also see</h3> <ul> <li> <a href="https://forgejo.org/docs/next/user/actions/reference/">Forgejo Actions | Reference</a> </li> </ul>         <div class="tags"><a href="https://blog.n11n.ca/tag/actions">actions</a> <a href="https://blog.n11n.ca/tag/ci-cd">ci-cd</a> <a href="https://blog.n11n.ca/tag/forgejo">forgejo</a> <a href="https://blog.n11n.ca/tag/git">git</a> <a href="https://blog.n11n.ca/tag/how-to">how-to</a> <a href="https://blog.n11n.ca/tag/self-hosted">self-hosted</a></div> <br>]]></content:encoded>
  </item>
</channel>
</rss>
