<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Automation on doug.sh</title>
    <link>https://doug.sh/categories/automation/</link>
    <description>Recent content in Automation on doug.sh</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Thu, 23 Apr 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://doug.sh/categories/automation/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Give Your Coding Agent a Journal</title>
      <link>https://doug.sh/posts/give-your-coding-agent-a-journal/</link>
      <pubDate>Thu, 23 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://doug.sh/posts/give-your-coding-agent-a-journal/</guid>
      <description>&lt;h1 id=&#34;journaling&#34;&gt;Journaling &lt;a href=&#34;#journaling&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Coding agents forget what they just did. The session ends, context gets compacted, or you walk away for lunch, and when you come back the agent is ready to try the same fix that failed an hour ago. The usual memory setups (&lt;code&gt;CLAUDE.md&lt;/code&gt;, project wikis, and so on) are fine for things that don&amp;rsquo;t change much, but they don&amp;rsquo;t capture what&amp;rsquo;s actually happening in the task you&amp;rsquo;re working on right now.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Route53 as a Key Value Store, 2026 Edition</title>
      <link>https://doug.sh/posts/route53-as-a-key-value-store-2026-edition/</link>
      <pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://doug.sh/posts/route53-as-a-key-value-store-2026-edition/</guid>
      <description>&lt;h1 id=&#34;five-years-later&#34;&gt;Five Years Later &lt;a href=&#34;#five-years-later&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Back in 2021 I &lt;a &#xA;    href=&#34;https://doug.sh/posts/route53-keyvalue-store/&#34;&#xA;    &#xA;    &#xA;    &#xA;&gt;&#xA;    wrote about using Route53 Private Hosted Zone TXT records as a key-value store for GitHub Actions&#xA;&lt;/a&gt;. The trick is still good in 2026 — Route53 is cheap, durable, globally replicated, and you almost certainly already have an AWS account. I still use it.&lt;/p&gt;&#xA;&lt;p&gt;But the &lt;em&gt;implementation&lt;/em&gt; in that post has aged badly. Two things in particular:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;It authenticates with long-lived &lt;code&gt;AWS_ACCESS_KEY_ID&lt;/code&gt; / &lt;code&gt;AWS_SECRET_ACCESS_KEY&lt;/code&gt; repo secrets. In 2026, that&amp;rsquo;s malpractice. GitHub OIDC for AWS shipped in late 2021 — a few weeks after the original post — and there&amp;rsquo;s no good reason to keep static AWS keys in a GitHub repo anymore.&lt;/li&gt;&#xA;&lt;li&gt;The Get action ends with &lt;code&gt;echo &amp;quot;::set-output name=value::$VALUE&amp;quot;&lt;/code&gt;. That workflow command was deprecated in October 2022 and disabled by default in 2023. &lt;strong&gt;The original Get action no longer works on a current &lt;code&gt;ubuntu-latest&lt;/code&gt; runner.&lt;/strong&gt; Embarrassing, but here we are.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;There are a few smaller polish items too — fragile quote-stripping with &lt;code&gt;tr&lt;/code&gt;, a &lt;code&gt;payload.json&lt;/code&gt; file written to disk, no escaping if your value happens to contain a &lt;code&gt;&amp;quot;&lt;/code&gt;. Let&amp;rsquo;s fix all of it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Route53 as a Key Value Store in GitHub Actions</title>
      <link>https://doug.sh/posts/using-route53-as-a-key-value-store-in-github-actions/</link>
      <pubDate>Mon, 13 Dec 2021 00:00:00 +0000</pubDate>
      <guid>https://doug.sh/posts/using-route53-as-a-key-value-store-in-github-actions/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;2026 update:&lt;/strong&gt; &lt;a &#xA;    href=&#34;https://doug.sh/posts/route53-keyvalue-store-2026/&#34;&#xA;    &#xA;    &#xA;    &#xA;&gt;&#xA;    a modernized version of this post is here&#xA;&lt;/a&gt; — uses OIDC instead of static AWS keys and fixes the deprecated &lt;code&gt;::set-output&lt;/code&gt; syntax that broke the Get action on current runners.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h1 id=&#34;the-need&#34;&gt;The Need &lt;a href=&#34;#the-need&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;GitHub Actions is great, but one thing it’s missing is a form of persistence, or simple key-value store. Sure, you could persist to a git repo - and that might be the right move, depending on the use case. But, what if you just want to store a string or two that you&amp;rsquo;ll need later?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Composite Actions with GitHub Actions</title>
      <link>https://doug.sh/posts/using-composite-actions-with-github-actions/</link>
      <pubDate>Sat, 11 Sep 2021 00:00:00 +0000</pubDate>
      <guid>https://doug.sh/posts/using-composite-actions-with-github-actions/</guid>
      <description>&lt;h1 id=&#34;basics&#34;&gt;Basics &lt;a href=&#34;#basics&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;When developing new automations it&amp;rsquo;s best to make each component as modular and reusable as possible. When using GitHub Actions, Composite Actions may be your answer for quick development and reusability.&lt;/p&gt;&#xA;&lt;p&gt;Composite Actions allow you to execute multiple shell steps by calling the Action. These shell steps can be bash, python, nodejs, or powershell. This functionality can be very powerful when you have logic you often want to reuse.&lt;/p&gt;&#xA;&lt;p&gt;Take for example, running a small Python script that requires a dependency in an Actions Workflow. You could create a Composite Action that:&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
