<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Kazamori Tech Blog]]></title><description><![CDATA[Kazamori Tech Blog]]></description><link>https://blog.kazamori.jp</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 17:35:30 GMT</lastBuildDate><atom:link href="https://blog.kazamori.jp/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Commits integrate with Backlog issue]]></title><description><![CDATA[We are announcing a new feature of Backlog GitHub integration action. You can integrate commits in a GitHub repository with Backlog issue.
Repositories
The repository is here.

https://github.com/kazamori/backlog-github-integration-action

You can se...]]></description><link>https://blog.kazamori.jp/commits-integrate-with-backlog-issue</link><guid isPermaLink="true">https://blog.kazamori.jp/commits-integrate-with-backlog-issue</guid><category><![CDATA[github-actions]]></category><category><![CDATA[Java]]></category><category><![CDATA[GitHub]]></category><dc:creator><![CDATA[Tetsuya Morimoto]]></dc:creator><pubDate>Sat, 30 Apr 2022 10:12:40 GMT</pubDate><content:encoded><![CDATA[<p>We are announcing a new feature of <a target="_blank" href="https://blog.kazamori.jp/backlog-github-integration-action">Backlog GitHub integration action</a>. You can integrate commits in a GitHub repository with Backlog issue.</p>
<h2 id="heading-repositories">Repositories</h2>
<p>The repository is here.</p>
<ul>
<li>https://github.com/kazamori/backlog-github-integration-action</li>
</ul>
<p>You can see the test repository and how it works for a quick look.</p>
<ul>
<li>https://github.com/kazamori/test-gh-actions-repo</li>
</ul>
<h2 id="heading-usage">Usage</h2>
<p>Here we show only workflow YAML configuration. See <a target="_blank" href="https://blog.kazamori.jp/backlog-github-integration-action#heading-usage">the previous post</a> if you need the entire configuration for a newbie to GitHub actions.</p>
<p>This workflow is including two features via <code>pull_request</code> event and <code>push</code> event. I guess that a user who is interested in our custom action wants to use both. We recommend making an independent workflow file since it's easy to maintain: what the workflow is and add/update a feature/configuration.</p>
<pre><code class="lang-yml"><span class="hljs-attr">name:</span> <span class="hljs-string">Backlog</span> <span class="hljs-string">integration</span>

<span class="hljs-attr">on:</span>
  <span class="hljs-attr">pull_request:</span>
    <span class="hljs-attr">types:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">opened</span>
  <span class="hljs-attr">push:</span>
    <span class="hljs-attr">branches:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">main</span>

<span class="hljs-attr">jobs:</span>
  <span class="hljs-attr">backlog-integration:</span>
    <span class="hljs-attr">runs-on:</span> <span class="hljs-string">ubuntu-latest</span>
    <span class="hljs-attr">env:</span>
      <span class="hljs-attr">APP_LOCALE:</span> <span class="hljs-string">"en_US"</span>
      <span class="hljs-attr">APP_LOG_LEVEL:</span> <span class="hljs-string">"debug"</span>
      <span class="hljs-attr">BACKLOG_FQDN:</span> <span class="hljs-string">${{</span> <span class="hljs-string">secrets.BACKLOG_FQDN</span> <span class="hljs-string">}}</span>
      <span class="hljs-attr">BACKLOG_API_KEY:</span> <span class="hljs-string">${{</span> <span class="hljs-string">secrets.BACKLOG_API_KEY</span> <span class="hljs-string">}}</span>
      <span class="hljs-attr">BACKLOG_PROJECT_KEY:</span> <span class="hljs-string">${{</span> <span class="hljs-string">secrets.BACKLOG_PROJECT_KEY</span> <span class="hljs-string">}}</span>
      <span class="hljs-attr">GITHUB_TOKEN:</span> <span class="hljs-string">${{</span> <span class="hljs-string">secrets.GITHUB_TOKEN</span> <span class="hljs-string">}}</span>
    <span class="hljs-attr">steps:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">integrate</span> <span class="hljs-string">the</span> <span class="hljs-string">pull</span> <span class="hljs-string">request</span> <span class="hljs-string">with</span> <span class="hljs-string">backlog</span>
        <span class="hljs-attr">if:</span> <span class="hljs-string">${{</span> <span class="hljs-string">github.event_name</span> <span class="hljs-string">==</span> <span class="hljs-string">'pull_request'</span> <span class="hljs-string">&amp;&amp;</span> <span class="hljs-string">github.event.action</span> <span class="hljs-string">==</span> <span class="hljs-string">'opened'</span> <span class="hljs-string">}}</span>
        <span class="hljs-attr">uses:</span> <span class="hljs-string">kazamori/backlog-github-integration-action@main</span>
        <span class="hljs-attr">with:</span>
          <span class="hljs-attr">subcommand:</span> <span class="hljs-string">"pull_request"</span>
          <span class="hljs-attr">args:</span> <span class="hljs-string">"--repository $<span class="hljs-template-variable">{{ github.repository }}</span> --pr-number $<span class="hljs-template-variable">{{ github.event.number }}</span>"</span>

      <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">integrate</span> <span class="hljs-string">commits</span> <span class="hljs-string">with</span> <span class="hljs-string">backlog</span>
        <span class="hljs-attr">if:</span> <span class="hljs-string">${{</span> <span class="hljs-string">github.event_name</span> <span class="hljs-string">==</span> <span class="hljs-string">'push'</span> <span class="hljs-string">}}</span>
        <span class="hljs-attr">uses:</span> <span class="hljs-string">kazamori/backlog-github-integration-action@main</span>
        <span class="hljs-attr">with:</span>
          <span class="hljs-attr">subcommand:</span> <span class="hljs-string">"push"</span>
          <span class="hljs-attr">args:</span> <span class="hljs-string">"--repository $<span class="hljs-template-variable">{{ github.repository }}</span> --pusher $<span class="hljs-template-variable">{{ github.event.pusher.name }}</span> --commits '$<span class="hljs-template-variable">{{ toJson(github.event.commits) }}</span>'"</span>
</code></pre>
<p>Commits integration is triggered by <code>push</code> event. After this workflow run, a user of <code>BACKLOG_API_KEY</code> will comment and can change the issue status by commits.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1651311762492/WJDkApJ2E.png" alt="backlog-issue-comments2.png" /></p>
<p>It's helpful to change the backlog issue status by a commit message.</p>
<ul>
<li>fix, fixes, fixed -&gt; Resolved</li>
<li>close, closes, closed -&gt; Closed</li>
</ul>
<p>For example, you can change the issue status like this.</p>
<pre><code><span class="hljs-attribute">fix</span> TEST-<span class="hljs-number">1</span>
</code></pre><pre><code><span class="hljs-attribute">closed</span> TEST-<span class="hljs-number">1</span>
</code></pre><h2 id="heading-conclusion">Conclusion</h2>
<p>As you can see, our custom action is easy to use. There are only a few features, though.</p>
<p>We can provide more features depending on the developer's needs. We welcome to <a target="_blank" href="https://github.com/kazamori/backlog-github-integration-action/discussions">discuss them on our repository</a>.</p>
]]></content:encoded></item><item><title><![CDATA[Backlog GitHub integration action]]></title><description><![CDATA[We made a custom GitHub action to integrate with Nulab's Backlog via GitHub events.
Backlog is nice to look and feel and easy to use for us. However, for some reason, it doesn't support GitHub integration. Our company uses repositories on the GitHub ...]]></description><link>https://blog.kazamori.jp/backlog-github-integration-action</link><guid isPermaLink="true">https://blog.kazamori.jp/backlog-github-integration-action</guid><category><![CDATA[github-actions]]></category><category><![CDATA[Java]]></category><category><![CDATA[GitHub]]></category><dc:creator><![CDATA[Tetsuya Morimoto]]></dc:creator><pubDate>Sun, 03 Apr 2022 04:45:41 GMT</pubDate><content:encoded><![CDATA[<p>We made a custom GitHub action to integrate with <a target="_blank" href="https://nulab.com/products/backlog/">Nulab's Backlog</a> via GitHub events.</p>
<p>Backlog is nice to look and feel and easy to use for us. However, for some reason, it doesn't support GitHub integration. Our company uses repositories on the GitHub platform. So, GitHub integration has a profound effect on productivity.</p>
<p>Fortunately, GitHub provides an integration service named <a target="_blank" href="https://docs.github.com/en/actions">GitHub Actions</a>. That makes various workflows via GitHub events, e.g.) making a Pull Request. Also, Nulab provides <a target="_blank" href="https://developer.nulab.com/docs/backlog/">Backlog REST API</a>. So It means we can achieve everything we want to do with GitHub Actions and Backlog REST API.</p>
<h2 id="heading-repositories">Repositories</h2>
<p>The repository is here.</p>
<ul>
<li>https://github.com/kazamori/backlog-github-integration-action</li>
</ul>
<p>You can see the test repository and how it works for a quick look.</p>
<ul>
<li>https://github.com/kazamori/test-gh-actions-repo</li>
</ul>
<h2 id="heading-usage">Usage</h2>
<p>You must configure some tasks to use <code>backlog-github-integration-action</code> (referred to as "the custom action"). We explain them step by step.</p>
<h3 id="heading-set-secrets-for-backlog">Set Secrets for Backlog</h3>
<h4 id="heading-generate-a-new-api-key-for-the-custom-action">Generate a new API Key for the custom action</h4>
<p>Backlog doesn't provide any integration user accounts, we think. So, you may create a new user for integration use only on Backlog. In this article, we made an integration user named "lobster". A developer logs into <code>lobster</code> and generates API Key.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1648956627496/qw2a_6Q5B.png" alt="backlog-user-api-key1.png" /></p>
<h4 id="heading-configure-actoins-secrets">Configure Actoins secrets</h4>
<p>Then, you create new Actions secrets in your GitHub repository. For example, Backlog API Key would be put into <code>BACKLOG_API_KEY</code>. Additionally, you have to set 2 secrets for Backlog: <code>BACKLOG_FQDN</code> and <code>BACKLOG_PROJECT_KEY</code>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1648956829166/AL6P_-lqM.png" alt="github-repo-settings-secrets1.png" /></p>
<pre><code><span class="hljs-attr">BACKLOG_FQDN</span>=<span class="hljs-string">"YOUR-SPACE.backlog.com"</span>
<span class="hljs-attr">BACKLOG_API_KEY</span>=<span class="hljs-string">"..."</span>
<span class="hljs-attr">BACKLOG_PROJECT_KEY</span>=<span class="hljs-string">"TEST"</span>
</code></pre><p>See <a target="_blank" href="https://docs.github.com/en/actions/security-guides/encrypted-secrets">Encrypted secrets</a> for more detail.</p>
<h3 id="heading-create-a-workflow-for-a-pull-request-in-your-repository">Create a workflow for a pull request in your repository.</h3>
<p>Create <a target="_blank" href="https://github.com/kazamori/test-gh-actions-repo/blob/main/.github/workflows/pull_request.yml">.github/workflows/pull_request.yml</a>. This is a trivial example.</p>
<pre><code class="lang-yml"><span class="hljs-attr">name:</span> <span class="hljs-string">Pull</span> <span class="hljs-string">request</span>

<span class="hljs-attr">on:</span>
  <span class="hljs-attr">pull_request:</span>
    <span class="hljs-attr">types:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">opened</span>

<span class="hljs-attr">jobs:</span>
  <span class="hljs-attr">pr-integration:</span>
    <span class="hljs-attr">runs-on:</span> <span class="hljs-string">ubuntu-latest</span>
    <span class="hljs-attr">steps:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">integrate</span> <span class="hljs-string">the</span> <span class="hljs-string">pull</span> <span class="hljs-string">request</span> <span class="hljs-string">with</span> <span class="hljs-string">backlog</span>
        <span class="hljs-attr">if:</span> <span class="hljs-string">${{</span> <span class="hljs-string">github.event_name</span> <span class="hljs-string">==</span> <span class="hljs-string">'pull_request'</span> <span class="hljs-string">&amp;&amp;</span> <span class="hljs-string">github.event.action</span> <span class="hljs-string">==</span> <span class="hljs-string">'opened'</span> <span class="hljs-string">}}</span>
        <span class="hljs-attr">uses:</span> <span class="hljs-string">kazamori/backlog-github-integration-action@main</span>
        <span class="hljs-attr">with:</span>
          <span class="hljs-attr">subcommand:</span> <span class="hljs-string">"pull_request"</span>
          <span class="hljs-attr">args:</span> <span class="hljs-string">"--repository $<span class="hljs-template-variable">{{ github.repository }}</span> --pr-number $<span class="hljs-template-variable">{{ github.event.number }}</span>"</span>
        <span class="hljs-attr">env:</span>
          <span class="hljs-attr">APP_LOCALE:</span> <span class="hljs-string">"en_US"</span>
          <span class="hljs-attr">APP_LOG_LEVEL:</span> <span class="hljs-string">"debug"</span>
          <span class="hljs-attr">BACKLOG_FQDN:</span> <span class="hljs-string">${{</span> <span class="hljs-string">secrets.BACKLOG_FQDN</span> <span class="hljs-string">}}</span>
          <span class="hljs-attr">BACKLOG_API_KEY:</span> <span class="hljs-string">${{</span> <span class="hljs-string">secrets.BACKLOG_API_KEY</span> <span class="hljs-string">}}</span>
          <span class="hljs-attr">BACKLOG_PROJECT_KEY:</span> <span class="hljs-string">${{</span> <span class="hljs-string">secrets.BACKLOG_PROJECT_KEY</span> <span class="hljs-string">}}</span>
          <span class="hljs-attr">GITHUB_TOKEN:</span> <span class="hljs-string">${{</span> <span class="hljs-string">secrets.GITHUB_TOKEN</span> <span class="hljs-string">}}</span>
</code></pre>
<h3 id="heading-confirm-the-custom-action-run">Confirm the custom action run</h3>
<p>Create a branch, commit/push some changes, and create a new Pull Request. The custom actions will work if all configurations are valid.</p>
<p>You can see an actual example of our test repository to run workflows on GitHub actions.</p>
<ul>
<li>https://github.com/kazamori/test-gh-actions-repo/actions</li>
</ul>
<p>After these workflows run, a user of <code>BACKLOG_API_KEY</code> will write the <code>Description</code> field and the issue comments. In the case of our test repository, <code>lobster</code> behaves them.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1648958077031/jrpA42AmX.png" alt="backlog-issue-comments1.png" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1648958255690/jpRmCPpjF.png" alt="backlog-issue-description1.png" /></p>
<p>The link information would be below the previous Pull Request link when another Pull Request is made.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1648958296408/xG04D5SKd.png" alt="backlog-issue-description2.png" /></p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>As you can see, our custom action is easy to use. Currently, the feature is Pull Request only.</p>
<p>But, we can provide more features depending on the developer's needs. We welcome to <a target="_blank" href="https://github.com/kazamori/backlog-github-integration-action/discussions">discuss them on our repository</a>.</p>
<h2 id="heading-edit-2022-04-30">Edit 2022-04-30</h2>
<p>Add a new feature: Commit integration.</p>
<ul>
<li><a target="_blank" href="https://blog.kazamori.jp/commits-integrate-with-backlog-issue">Commits integrate with Backlog issue</a></li>
</ul>
]]></content:encoded></item></channel></rss>