<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Knowledge Bits - auto</title><link href="https://jwodder.github.io/kbits/" rel="alternate"></link><link href="https://jwodder.github.io/kbits/feeds/tag.auto.atom.xml" rel="self"></link><id>https://jwodder.github.io/kbits/</id><updated>2024-05-22T00:00:00-04:00</updated><subtitle>References I wish I'd already found</subtitle><entry><title>Integrating auto with bump2version</title><link href="https://jwodder.github.io/kbits/posts/auto-bump2version/" rel="alternate"></link><published>2021-02-11T00:00:00-05:00</published><updated>2021-02-11T00:00:00-05:00</updated><author><name>John T. Wodder II</name></author><id>tag:jwodder.github.io,2021-02-11:/kbits/posts/auto-bump2version/</id><summary type="html">&lt;p class="first last"&gt;&lt;a class="reference external" href="https://github.com/intuit/auto"&gt;&lt;tt class="docutils literal"&gt;auto&lt;/tt&gt;&lt;/a&gt; by Intuit lets you set up automatic creation of tags &amp;amp; releases and
population of changelogs in a GitHub project.  It takes care of determining
the version number for new releases, but, by default, it does not set the
new version number in your code.  This isn’t a problem if your project uses
something like &lt;a class="reference external" href="https://github.com/pypa/setuptools_scm"&gt;&lt;tt class="docutils literal"&gt;setuptools_scm&lt;/tt&gt;&lt;/a&gt; or &lt;a class="reference external" href="https://github.com/python-versioneer/python-versioneer"&gt;&lt;tt class="docutils literal"&gt;versioneer&lt;/tt&gt;&lt;/a&gt; to fetch the version
number from Git, but if your project’s version number is hardcoded in your
code, you’ll need another solution.  &lt;a class="reference external" href="https://github.com/c4urself/bump2version"&gt;&lt;tt class="docutils literal"&gt;bump2version&lt;/tt&gt;&lt;/a&gt; is that solution, and
it can be integrated into &lt;tt class="docutils literal"&gt;auto&lt;/tt&gt; as shown here.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;a class="reference external" href="https://github.com/intuit/auto"&gt;&lt;tt class="docutils literal"&gt;auto&lt;/tt&gt;&lt;/a&gt; by Intuit lets you set up automatic creation of tags &amp;amp; releases and
population of changelogs in a GitHub project.  It takes care of determining the
version number for new releases, but, by default, it does not set the new
version number in your code.  This isn’t a problem if your project uses
something like &lt;a class="reference external" href="https://github.com/pypa/setuptools_scm"&gt;&lt;tt class="docutils literal"&gt;setuptools_scm&lt;/tt&gt;&lt;/a&gt; or &lt;a class="reference external" href="https://github.com/python-versioneer/python-versioneer"&gt;&lt;tt class="docutils literal"&gt;versioneer&lt;/tt&gt;&lt;/a&gt; to fetch the version number
from Git, but if your project’s version number is hardcoded in your code,
you’ll need another solution.  &lt;a class="reference external" href="https://github.com/c4urself/bump2version"&gt;&lt;tt class="docutils literal"&gt;bump2version&lt;/tt&gt;&lt;/a&gt; is that solution, and it can be
integrated into &lt;tt class="docutils literal"&gt;auto&lt;/tt&gt; as follows.&lt;/p&gt;
&lt;div class="section" id="set-up-bump2version"&gt;
&lt;h2&gt;Set up &lt;tt class="docutils literal"&gt;bump2version&lt;/tt&gt;&lt;/h2&gt;
&lt;p&gt;To make your project’s repository usable with &lt;tt class="docutils literal"&gt;bump2version&lt;/tt&gt;, create a
&lt;tt class="docutils literal"&gt;.bumpversion.cfg&lt;/tt&gt; (no “2”!) file as follows:&lt;/p&gt;
&lt;pre class="code ini literal-block"&gt;
&lt;span class="k"&gt;[bumpversion]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c1"&gt;# Replace the value here with your project's current version number:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="na"&gt;current_version&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;0.1.0&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="na"&gt;commit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;True&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c1"&gt;# If integrating with GitHub Actions, you'll need to include &amp;quot;[skip ci]&amp;quot; in&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c1"&gt;# the bump2version commit message in order to prevent auto from running&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c1"&gt;# unnecessarily:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;[skip ci] Bump version: {current_version} → {new_version}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c1"&gt;# auto will be taking care of the tagging for us, so set `tag` to False:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="na"&gt;tag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;False&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c1"&gt;# For each file in your code that contains your project's version number,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c1"&gt;# add a `[bumpversion:file:PATH]` section header, like so:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="k"&gt;[bumpversion:file:src/myproject/__init__.py]&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;With this file in place and &lt;tt class="docutils literal"&gt;bump2version&lt;/tt&gt; installed, you can automatically
update your project’s version number by running &lt;tt class="docutils literal"&gt;bump2version $PART&lt;/tt&gt;, where
&lt;tt class="docutils literal"&gt;$PART&lt;/tt&gt; is the part of the version number to increase (&lt;tt class="docutils literal"&gt;major&lt;/tt&gt;, &lt;tt class="docutils literal"&gt;minor&lt;/tt&gt;,
or &lt;tt class="docutils literal"&gt;patch&lt;/tt&gt;).&lt;/p&gt;
&lt;p&gt;See &lt;a class="reference external" href="https://github.com/c4urself/bump2version/blob/master/README.md"&gt;the bump2version documentation&lt;/a&gt; for more information.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="integrate-with-auto"&gt;
&lt;h2&gt;Integrate with &lt;tt class="docutils literal"&gt;auto&lt;/tt&gt;&lt;/h2&gt;
&lt;p&gt;I assume &lt;a class="reference external" href="https://intuit.github.io/auto/docs/welcome/getting-started"&gt;you’ve already set up auto for your repository&lt;/a&gt;.  To get &lt;tt class="docutils literal"&gt;auto&lt;/tt&gt;
to run &lt;tt class="docutils literal"&gt;bump2version&lt;/tt&gt; automatically at the right time when creating a new
release, use the &lt;a class="reference external" href="https://intuit.github.io/auto/docs/generated/exec"&gt;&lt;tt class="docutils literal"&gt;exec&lt;/tt&gt; plugin&lt;/a&gt; to register an &lt;a class="reference external" href="https://intuit.github.io/auto/docs/plugins/release-lifecycle-hooks#afterchangelog"&gt;&lt;tt class="docutils literal"&gt;afterChangelog&lt;/tt&gt;&lt;/a&gt; hook.  Add the
following to the &lt;tt class="docutils literal"&gt;&amp;quot;plugins&amp;quot;&lt;/tt&gt; field in your repository’s &lt;tt class="docutils literal"&gt;.autorc&lt;/tt&gt; file:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
{
    ...
    &amp;quot;plugins&amp;quot;: [
        ...
        [
            &amp;quot;exec&amp;quot;,
            {
                &amp;quot;afterChangelog&amp;quot;: &amp;quot;bump2version \&amp;quot;$(printf '%s\n' \&amp;quot;$ARG_0\&amp;quot; | jq -r .bump)\&amp;quot;&amp;quot;
            }
        ]
    ]
}
&lt;/pre&gt;
&lt;div class="admonition tip"&gt;
&lt;p class="first admonition-title"&gt;Tip&lt;/p&gt;
&lt;p class="last"&gt;Despite what the &lt;tt class="docutils literal"&gt;exec&lt;/tt&gt; documentation may imply, the &lt;tt class="docutils literal"&gt;$ARG_0&lt;/tt&gt;
environment variable is a JSON object containing the payload passed to the
respective hook.  This means we must extract the semantic version part to
bump using &lt;tt class="docutils literal"&gt;jq&lt;/tt&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="admonition warning"&gt;
&lt;p class="first admonition-title"&gt;Warning&lt;/p&gt;
&lt;p class="last"&gt;&lt;strong&gt;Do not&lt;/strong&gt; use &lt;tt class="docutils literal"&gt;echo&lt;/tt&gt; in place of &lt;tt class="docutils literal"&gt;printf&lt;/tt&gt; here!  The &lt;tt class="docutils literal"&gt;$ARG_0&lt;/tt&gt;
variable contains JSON containing strings with &lt;tt class="docutils literal"&gt;\n&lt;/tt&gt; escape sequences,
which &lt;tt class="docutils literal"&gt;echo&lt;/tt&gt; would convert into newlines, resulting in invalid JSON.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;With this setting in place, &lt;tt class="docutils literal"&gt;auto&lt;/tt&gt; will run &lt;tt class="docutils literal"&gt;bump2version&lt;/tt&gt; on each new
release after populating the changelog, and the commit created by
&lt;tt class="docutils literal"&gt;bump2version&lt;/tt&gt; will be the commit to receive the new version tag.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="integrate-with-github-actions"&gt;
&lt;h2&gt;Integrate with GitHub Actions&lt;/h2&gt;
&lt;p&gt;Assuming you’ve already set up a GitHub Actions workflow for running &lt;tt class="docutils literal"&gt;auto&lt;/tt&gt;
(&lt;a class="reference external" href="https://jwodder.github.io/kbits/posts/auto-post-release/"&gt;see here&lt;/a&gt; for an example), the only
addition needed to support &lt;tt class="docutils literal"&gt;bump2version&lt;/tt&gt; is to install it before running
&lt;tt class="docutils literal"&gt;auto&lt;/tt&gt;:&lt;/p&gt;
&lt;pre class="code yaml literal-block"&gt;
&lt;span class="p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;Set up Python&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;actions/setup-python&amp;#64;v2&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nt"&gt;python-version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;'^3.6'&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;Install bump2version&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;python -m pip install bump2version&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
</content><category term="Programming"></category><category term="GitHub Actions"></category><category term="auto"></category><category term="bump2version"></category><category term="continuous integration"></category></entry><entry><title>Running Extra Steps after Releasing with auto in GitHub Actions</title><link href="https://jwodder.github.io/kbits/posts/auto-post-release/" rel="alternate"></link><published>2020-10-26T00:00:00-04:00</published><updated>2024-05-22T00:00:00-04:00</updated><author><name>John T. Wodder II</name></author><id>tag:jwodder.github.io,2020-10-26:/kbits/posts/auto-post-release/</id><summary type="html">&lt;p class="first last"&gt;Let’s say you’ve set up &lt;a class="reference external" href="https://github.com/intuit/auto"&gt;&lt;tt class="docutils literal"&gt;auto&lt;/tt&gt;&lt;/a&gt; for your project via a GitHub Actions
workflow, and now you want that workflow to carry out additional steps —
such as building &amp;amp; uploading assets — whenever &lt;tt class="docutils literal"&gt;auto&lt;/tt&gt; creates a new
release.  Let’s also say that none of the available plugins for &lt;tt class="docutils literal"&gt;auto&lt;/tt&gt;
covers your use-case and you’re not a JavaScript programmer, so you won’t
be writing a new plugin to do what you want.  How do you adjust your GitHub
Actions workflow to run these extra steps at the right time?  Read to find
out.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Let’s say you’ve set up &lt;a class="reference external" href="https://github.com/intuit/auto"&gt;&lt;tt class="docutils literal"&gt;auto&lt;/tt&gt;&lt;/a&gt; for your project via a GitHub Actions workflow,
and now you want that workflow to carry out additional steps — such as building
&amp;amp; uploading assets — whenever &lt;tt class="docutils literal"&gt;auto&lt;/tt&gt; creates a new release.  Let’s also say
that none of the available plugins for &lt;tt class="docutils literal"&gt;auto&lt;/tt&gt; covers your use-case and you’re
not a JavaScript programmer, so you won’t be writing a new plugin to do what
you want.  How do you adjust your GitHub Actions workflow to run these extra
steps at the right time?  Read on to find out.&lt;/p&gt;
&lt;hr class="docutils" /&gt;
&lt;p&gt;So you’ve got a GitHub Actions workflow for &lt;tt class="docutils literal"&gt;auto&lt;/tt&gt; already set up.
Presumably, it looks something liks this:&lt;/p&gt;
&lt;pre class="code yaml literal-block"&gt;
&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;Auto-release on PR merge&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="nt"&gt;on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="c1"&gt;# This is the closest thing to triggering on a PR merge, as long as you&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="c1"&gt;# don't push directly to master.&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;push&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nt"&gt;branches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;master&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="nt"&gt;jobs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;auto-release&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nt"&gt;runs-on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;ubuntu-latest&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nt"&gt;if&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;!contains(github.event.head_commit.message,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;'ci&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;skip')&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;!contains(github.event.head_commit.message,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;'skip&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;ci')&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nt"&gt;steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;Checkout source&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;actions/checkout&amp;#64;v4&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nt"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nt"&gt;fetch-depth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;0&lt;/span&gt;&lt;span class="w"&gt;

      &lt;/span&gt;&lt;span class="p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;Download latest auto&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p-Indicator"&gt;|&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="no"&gt;auto_download_url=&amp;quot;$(curl -fsSL https://api.github.com/repos/intuit/auto/releases/latest | jq -r '.assets[] | select(.name == &amp;quot;auto-linux.gz&amp;quot;) | .browser_download_url')&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="no"&gt;wget -O- &amp;quot;$auto_download_url&amp;quot; | gunzip &amp;gt; ~/auto&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="no"&gt;chmod a+x ~/auto&lt;/span&gt;&lt;span class="w"&gt;

      &lt;/span&gt;&lt;span class="p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;Create release&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;~/auto shipit&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nt"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nt"&gt;GH_TOKEN&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;${{ secrets.GITHUB_TOKEN }}&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;Now you want to insert further steps that will be triggered whenever &lt;tt class="docutils literal"&gt;auto
shipit&lt;/tt&gt; successfully creates a new release.&lt;/p&gt;
&lt;p&gt;For simple cases — where the commands to run can be expressed in a single shell
command — we can use &lt;tt class="docutils literal"&gt;auto&lt;/tt&gt;’s &lt;a class="reference external" href="https://intuit.github.io/auto/docs/generated/exec"&gt;&lt;tt class="docutils literal"&gt;exec&lt;/tt&gt; plugin&lt;/a&gt; to run the desired commands via
the &lt;tt class="docutils literal"&gt;afterRelease&lt;/tt&gt; hook.  For example, building &amp;amp; uploading a Python package
for PyPI can be integrated into &lt;tt class="docutils literal"&gt;auto&lt;/tt&gt; by adding the following item to the
&lt;tt class="docutils literal"&gt;&amp;quot;plugins&amp;quot;&lt;/tt&gt; field in the repository’s &lt;tt class="docutils literal"&gt;.autorc&lt;/tt&gt; file:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
{
    ...
    &amp;quot;plugins&amp;quot;: [
        ...
        [
            &amp;quot;exec&amp;quot;,
            {
                &amp;quot;afterRelease&amp;quot;: &amp;quot;python -m build &amp;amp;&amp;amp; twine upload/*&amp;quot;
            }
        ]
    ]
}
&lt;/pre&gt;
&lt;p&gt;(This particular example assumes that the appropriate Python dependencies are
already set up earlier in the workflow and that the twine username &amp;amp; password
are passed as environment variables to the &lt;tt class="docutils literal"&gt;~/auto shipit&lt;/tt&gt; step.)&lt;/p&gt;
&lt;p&gt;For more complex post-release activity which can only be implemented as GitHub
Actions steps, we need something else.  Just adding the steps and nothing else
directly to the workflow won’t work, as &lt;tt class="docutils literal"&gt;auto shipit&lt;/tt&gt; doesn’t always create a
new release, such as when a pull request with a &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;skip-release&lt;/span&gt;&lt;/tt&gt; label is
merged, or when a pull request without a &lt;tt class="docutils literal"&gt;release&lt;/tt&gt; label is merged while
&lt;tt class="docutils literal"&gt;onlyPublishWithReleaseLabel&lt;/tt&gt; is set to &lt;tt class="docutils literal"&gt;true&lt;/tt&gt;.  So we need some logic to
test whether there’s a new release.&lt;/p&gt;
&lt;p&gt;Theoretically, one option would be to create a separate workflow that runs
whenever a new tag is pushed or a new GitHub release is created, but this won’t
work with an out-of-the-box setup; &lt;tt class="docutils literal"&gt;auto&lt;/tt&gt; uses &lt;tt class="docutils literal"&gt;GITHUB_TOKEN&lt;/tt&gt; to create the
tag &amp;amp; release, and GitHub Actions workflows &lt;a class="reference external" href="https://docs.github.com/en/actions/using-workflows/triggering-a-workflow#triggering-a-workflow-from-a-workflow"&gt;specifically do not trigger&lt;/a&gt; on
events performed with a &lt;tt class="docutils literal"&gt;GITHUB_TOKEN&lt;/tt&gt;.  You could get this approach to work
by passing &lt;tt class="docutils literal"&gt;auto&lt;/tt&gt; a personal access token instead of &lt;tt class="docutils literal"&gt;GITHUB_TOKEN&lt;/tt&gt;, but
there’s a more direct way to make this work instead that also lets you keep
your release-related workflow steps in a single file.&lt;/p&gt;
&lt;p&gt;Here’s the key trick: By running &lt;a class="reference external" href="https://intuit.github.io/auto/docs/generated/version"&gt;&lt;tt class="docutils literal"&gt;auto version&lt;/tt&gt;&lt;/a&gt; before &lt;tt class="docutils literal"&gt;auto shipit&lt;/tt&gt;, you
find out whether &lt;tt class="docutils literal"&gt;auto&lt;/tt&gt; is about to create a new release, and you can save
the output from &lt;tt class="docutils literal"&gt;auto version&lt;/tt&gt; to use to trigger extra steps later.  If
&lt;tt class="docutils literal"&gt;auto&lt;/tt&gt; is about to create a new release, &lt;tt class="docutils literal"&gt;auto version&lt;/tt&gt; will output the
release level (”&lt;tt class="docutils literal"&gt;patch&lt;/tt&gt;”, “&lt;tt class="docutils literal"&gt;minor&lt;/tt&gt;”, or “&lt;tt class="docutils literal"&gt;major&lt;/tt&gt;”); otherwise, if &lt;tt class="docutils literal"&gt;auto
shipit&lt;/tt&gt; would do nothing, &lt;tt class="docutils literal"&gt;auto version&lt;/tt&gt; just outputs an empty line.&lt;/p&gt;
&lt;p&gt;Hence, insert the following step before the &lt;tt class="docutils literal"&gt;auto shipit&lt;/tt&gt; step:&lt;/p&gt;
&lt;pre class="code yaml literal-block"&gt;
&lt;span class="p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;Check whether a release is due&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;auto-version&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p-Indicator"&gt;|&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="no"&gt;version=&amp;quot;$(~/auto version)&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="no"&gt;echo &amp;quot;version=$version&amp;quot; &amp;gt;&amp;gt; &amp;quot;$GITHUB_OUTPUT&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nt"&gt;GH_TOKEN&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;${{ secrets.GITHUB_TOKEN }}&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;Here, we use a &lt;a class="reference external" href="https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#setting-an-output-parameter"&gt;workflow command&lt;/a&gt; to make the output from &lt;tt class="docutils literal"&gt;auto version&lt;/tt&gt;
available to subsequent steps.  Later steps can then be configured to only run
if a new release is being made by adding an &lt;a class="reference external" href="https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsif"&gt;&lt;tt class="docutils literal"&gt;if&lt;/tt&gt; field&lt;/a&gt; to them, like so:&lt;/p&gt;
&lt;pre class="code yaml literal-block"&gt;
&lt;span class="p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;Build asset for new release&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;if&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;steps.auto-version.outputs.version != ''&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;If you have multiple steps that you want to run after a release, adding an
&lt;tt class="docutils literal"&gt;if&lt;/tt&gt; field to all of them can become excessive; isn’t there a way to apply an
&lt;tt class="docutils literal"&gt;if&lt;/tt&gt; to a whole block of steps?  There is indeed; you can split off the extra
steps into a separate job in the same workflow and have that entire job be
guarded by a single &lt;tt class="docutils literal"&gt;if&lt;/tt&gt;.&lt;/p&gt;
&lt;p&gt;First, in order to make the output from the &lt;tt class="docutils literal"&gt;auto version&lt;/tt&gt; step available to
other jobs in the workflow, you need to add an &lt;a class="reference external" href="https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idoutputs"&gt;&lt;tt class="docutils literal"&gt;outputs&lt;/tt&gt; field&lt;/a&gt; to the original
&lt;tt class="docutils literal"&gt;auto&lt;/tt&gt; job (the one that in the example above is named “&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;auto-release&lt;/span&gt;&lt;/tt&gt;”),
at the same level as the &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;runs-on&lt;/span&gt;&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;steps&lt;/tt&gt; keys.  This &lt;tt class="docutils literal"&gt;outputs&lt;/tt&gt;
field should contain a YAML object mapping a name for the output value to a
&lt;tt class="docutils literal"&gt;${{ &lt;span class="pre"&gt;steps.….outputs.…&lt;/span&gt; }}&lt;/tt&gt; expression that evaluates to the output from the
&lt;tt class="docutils literal"&gt;auto version&lt;/tt&gt; step.  For the example workflow configurations shown so far,
this would mean a configuration like the following:&lt;/p&gt;
&lt;pre class="code yaml literal-block"&gt;
&lt;span class="nt"&gt;jobs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;auto-release&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nt"&gt;runs-on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;ubuntu-latest&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nt"&gt;if&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;!contains(github.event.head_commit.message,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;'ci&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;skip')&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;!contains(github.event.head_commit.message,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;'skip&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;ci')&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="c1"&gt;### vv Add this bit vv ###&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nt"&gt;outputs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nt"&gt;auto-version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;${{ steps.auto-version.outputs.version }}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="c1"&gt;### ^^ Add this bit ^^ ###&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nt"&gt;steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="c1"&gt;# ...&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;With this in place, a new job can be added to the workflow containing all the
steps you want to run after a new release is made.  This new job needs two
special fields (at the same level as &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;runs-on&lt;/span&gt;&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;steps&lt;/tt&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p class="first"&gt;A &lt;a class="reference external" href="https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idneeds"&gt;&lt;tt class="docutils literal"&gt;needs&lt;/tt&gt; field&lt;/a&gt; containing the job ID of the &lt;tt class="docutils literal"&gt;auto&lt;/tt&gt; job (so &lt;tt class="docutils literal"&gt;needs:
&lt;span class="pre"&gt;auto-release&lt;/span&gt;&lt;/tt&gt; for the examples given here) to declare a dependency on it&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p class="first"&gt;An &lt;tt class="docutils literal"&gt;if&lt;/tt&gt; field containing an expression of the form
&lt;tt class="docutils literal"&gt;needs.AUTO_JOB_NAME.outputs.AUTO_VERSION_OUTPUT_NAME != ''&lt;/tt&gt; (so &lt;tt class="docutils literal"&gt;if:
&lt;span class="pre"&gt;needs.auto-release.outputs.auto-version&lt;/span&gt; != ''&lt;/tt&gt; for the examples given here);
this causes the job to be skipped if &lt;tt class="docutils literal"&gt;auto version&lt;/tt&gt; outputs nothing, i.e.,
if no release is made&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The configuration for this new job would then look like:&lt;/p&gt;
&lt;pre class="code yaml literal-block"&gt;
&lt;span class="nt"&gt;jobs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="c1"&gt;# `auto release` job from above omitted&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="c1"&gt;# ...&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nt"&gt;build-and-publish&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nt"&gt;runs-on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;ubuntu-latest&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nt"&gt;needs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;auto-release&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nt"&gt;if&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;needs.auto-release.outputs.auto-version != ''&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nt"&gt;steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="c1"&gt;# ...&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;There’s one more thing to be aware of: If you check out your repository in this
new job, by default the HEAD will be the commit that triggered the workflow
originally and will not include the changelog commit or tag created by
&lt;tt class="docutils literal"&gt;auto&lt;/tt&gt;.  If you need the commit or tag (say, because your project uses
&lt;a class="reference external" href="https://pypi.org/project/setuptools-scm/"&gt;&lt;tt class="docutils literal"&gt;setuptools_scm&lt;/tt&gt;&lt;/a&gt; or the like to derive its version number from Git tags at
build time), you can tell the &lt;tt class="docutils literal"&gt;actions/checkout&lt;/tt&gt; action to check out the
latest commit from the repository by passing the default branch as the &lt;tt class="docutils literal"&gt;ref&lt;/tt&gt;
input like so:&lt;/p&gt;
&lt;pre class="code yaml literal-block"&gt;
&lt;span class="p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;Checkout source&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;actions/checkout&amp;#64;v4&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nt"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;master&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;# or `main` or whatever your default branch is&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="c1"&gt;# This setting is needed to fetch tags:&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nt"&gt;fetch-depth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;0&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;This does come with a caveat, though: in the event that multiple commits or
merges to the default branch were made in quick succession, you may end up
checking out a later commit than the tag that &lt;tt class="docutils literal"&gt;auto&lt;/tt&gt; created.  If this is a
problem, one way to deal with it is to specifically check out the tag for the
latest GitHub release, like so:&lt;/p&gt;
&lt;pre class="code yaml literal-block"&gt;
&lt;span class="p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;Get tag of latest release&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;latest-release&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p-Indicator"&gt;|&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="no"&gt;latest_tag=&amp;quot;$(curl -fsSL https://api.github.com/repos/$GITHUB_REPOSITORY/releases/latest | jq -r .tag_name)&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="no"&gt;echo &amp;quot;tag=$latest_tag&amp;quot; &amp;gt;&amp;gt; &amp;quot;$GITHUB_OUTPUT&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;Checkout source&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;actions/checkout&amp;#64;v4&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nt"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;${{ steps.latest-release.outputs.tag }}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nt"&gt;fetch-depth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;0&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;This, of course, fails if &lt;tt class="docutils literal"&gt;auto&lt;/tt&gt; creates multiple tags in quick succession.
I’m not aware of a decent way to deal with this eventuality; how about
&lt;a class="reference external" href="https://intuit.github.io/auto/docs/welcome/quick-merge"&gt;listening to the docs&lt;/a&gt; and just not running &lt;tt class="docutils literal"&gt;auto&lt;/tt&gt; that often in the first
place?&lt;/p&gt;
&lt;p&gt;Using all of these tricks, your final workflow configuration should look
something like this:&lt;/p&gt;
&lt;pre class="code yaml literal-block"&gt;
&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;Auto-release on PR merge&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="nt"&gt;on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="c1"&gt;# This is the closest thing to triggering on a PR merge, as long as you&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="c1"&gt;# don't push directly to master.&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;push&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nt"&gt;branches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;master&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="nt"&gt;jobs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;auto-release&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nt"&gt;runs-on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;ubuntu-latest&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nt"&gt;if&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;!contains(github.event.head_commit.message,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;'ci&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;skip')&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;!contains(github.event.head_commit.message,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;'skip&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;ci')&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nt"&gt;outputs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nt"&gt;auto-version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;${{ steps.auto-version.outputs.version }}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nt"&gt;steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;Checkout source&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;actions/checkout&amp;#64;v4&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nt"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nt"&gt;fetch-depth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;0&lt;/span&gt;&lt;span class="w"&gt;

      &lt;/span&gt;&lt;span class="p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;Download latest auto&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p-Indicator"&gt;|&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="no"&gt;auto_download_url=&amp;quot;$(curl -fsSL https://api.github.com/repos/intuit/auto/releases/latest | jq -r '.assets[] | select(.name == &amp;quot;auto-linux.gz&amp;quot;) | .browser_download_url')&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="no"&gt;wget -O- &amp;quot;$auto_download_url&amp;quot; | gunzip &amp;gt; ~/auto&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="no"&gt;chmod a+x ~/auto&lt;/span&gt;&lt;span class="w"&gt;

      &lt;/span&gt;&lt;span class="p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;Check whether a release is due&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;auto-version&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p-Indicator"&gt;|&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="no"&gt;version=&amp;quot;$(~/auto version)&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="no"&gt;echo &amp;quot;version=$version&amp;quot; &amp;gt;&amp;gt; &amp;quot;$GITHUB_OUTPUT&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nt"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nt"&gt;GH_TOKEN&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;${{ secrets.GITHUB_TOKEN }}&lt;/span&gt;&lt;span class="w"&gt;

      &lt;/span&gt;&lt;span class="p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;Create release&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;~/auto shipit&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nt"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nt"&gt;GH_TOKEN&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;${{ secrets.GITHUB_TOKEN }}&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nt"&gt;build-and-publish&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nt"&gt;runs-on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;ubuntu-latest&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nt"&gt;needs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;auto-release&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nt"&gt;if&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;needs.auto-release.outputs.auto-version != ''&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nt"&gt;steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;Get tag of latest release&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nt"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;latest-release&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p-Indicator"&gt;|&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="no"&gt;latest_tag=&amp;quot;$(curl -fsSL https://api.github.com/repos/$GITHUB_REPOSITORY/releases/latest | jq -r .tag_name)&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="no"&gt;echo &amp;quot;tag=$latest_tag&amp;quot; &amp;gt;&amp;gt; &amp;quot;$GITHUB_OUTPUT&amp;quot;&lt;/span&gt;&lt;span class="w"&gt;

      &lt;/span&gt;&lt;span class="p-Indicator"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;Checkout source&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;actions/checkout&amp;#64;v4&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nt"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nt"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;${{ steps.latest-release.outputs.tag }}&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nt"&gt;fetch-depth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l-Scalar-Plain"&gt;0&lt;/span&gt;&lt;span class="w"&gt;

      &lt;/span&gt;&lt;span class="c1"&gt;# Remaining steps go here&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="c1"&gt;# ...&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;Enjoy!&lt;/p&gt;
</content><category term="Programming"></category><category term="GitHub Actions"></category><category term="auto"></category><category term="continuous integration"></category></entry></feed>