<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Romain Lespinasse</title>
    <description>The latest articles on Forem by Romain Lespinasse (@rlespinasse).</description>
    <link>https://forem.com/rlespinasse</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F138535%2F2e585c63-1474-4a60-a22c-e2e6f3a0d0f1.jpg</url>
      <title>Forem: Romain Lespinasse</title>
      <link>https://forem.com/rlespinasse</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/rlespinasse"/>
    <language>en</language>
    <item>
      <title>Open Source Maintenance: Do I Need to Update My License Year?</title>
      <dc:creator>Romain Lespinasse</dc:creator>
      <pubDate>Fri, 20 Feb 2026 22:05:18 +0000</pubDate>
      <link>https://forem.com/rlespinasse/open-source-maintenance-do-i-need-to-update-my-license-year-4o8e</link>
      <guid>https://forem.com/rlespinasse/open-source-maintenance-do-i-need-to-update-my-license-year-4o8e</guid>
      <description>&lt;p&gt;If you’ve been maintaining a project since 2019 and have reached a milestone like &lt;strong&gt;v5.x&lt;/strong&gt;, you might wonder if that "2019" in your &lt;code&gt;LICENSE&lt;/code&gt; file makes your project look abandoned. &lt;/p&gt;

&lt;p&gt;Here is a quick guide on how to handle license dates effectively without overthinking it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The "First Publication" Rule
&lt;/h2&gt;

&lt;p&gt;In an MIT or Apache license, the year (e.g., &lt;code&gt;Copyright (c) 2019&lt;/code&gt;) marks the &lt;strong&gt;year of first publication&lt;/strong&gt;. &lt;br&gt;
It isn't an expiration date. However, as your project evolves through major versions, your code changes significantly.&lt;/p&gt;
&lt;h3&gt;
  
  
  Using the Copyright Range
&lt;/h3&gt;

&lt;p&gt;Instead of choosing between the start year and the current year, the professional standard is to use a &lt;strong&gt;range&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bad:&lt;/strong&gt; &lt;code&gt;Copyright (c) 2019&lt;/code&gt; (Looks abandoned)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better:&lt;/strong&gt; &lt;code&gt;Copyright (c) 2026&lt;/code&gt; (Wipes out the history of the original work)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best:&lt;/strong&gt; &lt;code&gt;Copyright (c) 2019-2026&lt;/code&gt; (Protects the original v1.0 and the current v5.x)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  When to Update (The SemVer Strategy)
&lt;/h2&gt;

&lt;p&gt;If you follow &lt;strong&gt;Semantic Versioning&lt;/strong&gt;, you don't need to touch the license for every patch. &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Version Type&lt;/th&gt;
&lt;th&gt;Update License?&lt;/th&gt;
&lt;th&gt;Reason&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Major (v5.0.0)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Highly Recommended&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Significant refactors or breaking changes are new "works."&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Minor (v5.1.0)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Recommended&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;New features should be covered under the latest year.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Patch (v5.1.1)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Optional&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Bug fixes rarely require a copyright update.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  Automation: The "Set and Forget" Method
&lt;/h2&gt;

&lt;p&gt;If you find manual updates tedious, you can use a GitHub Action to check your license at the start of every year.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/FantasticFiasco/action-update-license-year" rel="noopener noreferrer"&gt;&lt;code&gt;FantasticFiasco/action-update-license-year&lt;/code&gt;&lt;/a&gt; GitHub Action will handle it for you.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Update copyright year(s) in license file&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;schedule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;cron&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;3&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*'&lt;/span&gt; &lt;span class="c1"&gt;# 03:00 AM on January 1&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;update-license-year&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
        &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v6&lt;/span&gt;
              &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
                  &lt;span class="na"&gt;fetch-depth&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;FantasticFiasco/action-update-license-year@v3&lt;/span&gt;
              &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
                  &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.GITHUB_TOKEN }}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This action will detect your &lt;code&gt;2019&lt;/code&gt; start date and automatically transform it into &lt;code&gt;2019-2026&lt;/code&gt;, keeping your project looking active and professional.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;For a project spanning several years, simply update your license header to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Copyright (c) 2019-2026 [Your Name]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This tells the world your project is established, battle-tested since 2019, and actively maintained in 2026.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 Note&lt;br&gt;
This post was originally published on &lt;a href="https://www.romainlespinasse.dev/posts/maintaining-license-years/" rel="noopener noreferrer"&gt;my personal blog&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>opensource</category>
      <category>licensing</category>
      <category>maintenance</category>
      <category>semver</category>
    </item>
    <item>
      <title>The Simplest Way to Make Just Interactive: Use --choose</title>
      <dc:creator>Romain Lespinasse</dc:creator>
      <pubDate>Fri, 20 Feb 2026 22:02:50 +0000</pubDate>
      <link>https://forem.com/rlespinasse/the-simplest-way-to-make-just-interactive-use-choose-402a</link>
      <guid>https://forem.com/rlespinasse/the-simplest-way-to-make-just-interactive-use-choose-402a</guid>
      <description>&lt;h2&gt;
  
  
  The "Native" Way
&lt;/h2&gt;

&lt;p&gt;While you &lt;em&gt;can&lt;/em&gt; manually pipe &lt;code&gt;just --list&lt;/code&gt; into &lt;code&gt;fzf&lt;/code&gt;, &lt;code&gt;just&lt;/code&gt; has a built-in feature that handles this natively.&lt;br&gt;
If you have &lt;code&gt;fzf&lt;/code&gt; installed, you don't need a custom recipe at all.&lt;/p&gt;
&lt;h3&gt;
  
  
  The One-Liner
&lt;/h3&gt;

&lt;p&gt;Simply run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;just &lt;span class="nt"&gt;--choose&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command automatically parses your recipes, opens &lt;code&gt;fzf&lt;/code&gt;, and executes your selection once you hit Enter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Level Up with Shell Aliases
&lt;/h2&gt;

&lt;p&gt;If you find yourself running specific types of tasks frequently, you can combine &lt;code&gt;just --choose&lt;/code&gt; with a shell alias.&lt;br&gt;
This is perfect for filtering down to specific "namespaces" if you use a prefix naming convention (e.g., &lt;code&gt;docker-build&lt;/code&gt;, &lt;code&gt;docker-up&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Add this to your &lt;code&gt;.zshrc&lt;/code&gt; or &lt;code&gt;.bashrc&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# General interactive just&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;j&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'just --choose'&lt;/span&gt;

&lt;span class="c"&gt;# Interactive just filtered for Docker tasks only&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;jd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'just --choose --chooser "fzf --query=docker"'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Customizing the UI
&lt;/h2&gt;

&lt;p&gt;You can customize the look and feel of the chooser globally by setting the &lt;code&gt;JUST_CHOOSER&lt;/code&gt; environment variable.&lt;br&gt;
This allows you to add colors or change the layout without touching your &lt;code&gt;justfile&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;JUST_CHOOSER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'fzf --header "⚡ Select Task" --height 40% --layout reverse --border'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why this is better:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Zero Boilerplate:&lt;/strong&gt; You don't need to pollute your &lt;code&gt;justfile&lt;/code&gt; with a "menu" recipe.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean Output:&lt;/strong&gt; It respects docstrings and ignores internal recipes (those starting with an underscore).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speed:&lt;/strong&gt; It’s a single binary call rather than a chain of piped commands.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The "One-Touch" Justfile
&lt;/h2&gt;

&lt;p&gt;If you want the interactive menu to appear by default when you just type &lt;code&gt;just&lt;/code&gt; in your terminal, add this to the top of your file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Run the interactive chooser by default
default:
    @just --choose
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Ultimately, using &lt;code&gt;just --choose&lt;/code&gt; transforms your justfile from a static list of commands into a dynamic, user-friendly CLI.&lt;/p&gt;

&lt;p&gt;By moving away from manual piping and embracing built-in flags and environment variables, you reduce maintenance overhead while significantly improving your daily terminal workflow.&lt;/p&gt;

&lt;p&gt;Whether you’re automating a complex Docker environment or just looking for a faster way to trigger local builds, making your tools interactive by default ensures that your productivity stays as high as your command-line efficiency.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 Note&lt;br&gt;
This post was originally published on &lt;a href="https://www.romainlespinasse.dev/posts/interactive-just-recipes/" rel="noopener noreferrer"&gt;my personal blog&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>terminal</category>
      <category>productivity</category>
      <category>just</category>
      <category>fzf</category>
    </item>
    <item>
      <title>Batch Resize Images on macOS via CLI (The Native Way)</title>
      <dc:creator>Romain Lespinasse</dc:creator>
      <pubDate>Fri, 20 Feb 2026 21:59:38 +0000</pubDate>
      <link>https://forem.com/rlespinasse/batch-resize-images-on-macos-via-cli-the-native-way-598p</link>
      <guid>https://forem.com/rlespinasse/batch-resize-images-on-macos-via-cli-the-native-way-598p</guid>
      <description>&lt;p&gt;If you often need to resize dozens of images tucked away in various subdirectories. &lt;br&gt;
While apps like Photoshop or Lightroom are powerful, they are overkill for a simple task: &lt;strong&gt;resizing all &lt;code&gt;png&lt;/code&gt; files to a maximum of 200px.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Forget installing heavy dependencies like ImageMagick. &lt;br&gt;
macOS comes with a built-in "secret weapon" called &lt;strong&gt;Sips&lt;/strong&gt; (Scriptable Image Processing System).&lt;/p&gt;
&lt;h2&gt;
  
  
  The Scenario
&lt;/h2&gt;

&lt;p&gt;You have a project structure like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/assets/products/category-a/item1.png&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/assets/products/category-b/item2.png&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You want to resize these to &lt;strong&gt;200px (max side)&lt;/strong&gt; and save them as &lt;code&gt;_200px.png&lt;/code&gt; in the same folders, keeping the originals intact.&lt;/p&gt;
&lt;h2&gt;
  
  
  The One-Liner Solution
&lt;/h2&gt;

&lt;p&gt;Open your terminal, navigate to your root folder, and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;find &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;-name&lt;/span&gt; &lt;span class="s2"&gt;"*.png"&lt;/span&gt; &lt;span class="nt"&gt;-exec&lt;/span&gt; sh &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s1"&gt;'sips -Z 200 "$1" --out "${1%.png}_200px.png"'&lt;/span&gt; _ &lt;span class="o"&gt;{}&lt;/span&gt; &lt;span class="se"&gt;\;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Breaking Down the Command
&lt;/h3&gt;

&lt;p&gt;To understand what's happening under the hood, let's look at the components:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command Part&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;find .&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Searches the current directory and all subfolders.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-name "*.png"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Filters only the files ending with your specific suffix.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sips -Z 200&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Resizes the image so the largest dimension is 200px (preserving aspect ratio).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--out ...&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Specifies the output path so we don't overwrite the original.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;${1%.png}_200px.png&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A shell trick to strip the &lt;code&gt;.png&lt;/code&gt; extension and append our new suffix.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Why Sips?
&lt;/h2&gt;

&lt;p&gt;Sips is remarkably fast because it is optimized for the macOS file system and hardware. &lt;br&gt;
Unlike other tools, it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Respects Color Profiles:&lt;/strong&gt; It uses Apple's ColorSync technology.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Zero Install:&lt;/strong&gt; It has been part of macOS for decades.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Smart Scaling:&lt;/strong&gt; Using the &lt;code&gt;-Z&lt;/code&gt; flag ensures your images never look "stretched" as it maintains the original proportions.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Pro Tip:&lt;/strong&gt; If you want to overwrite the original files instead of creating new ones, simply use:&lt;/p&gt;


&lt;pre class="highlight plaintext"&gt;&lt;code&gt;find . -name "*.png" -exec sips -Z 200 {} \;
&lt;/code&gt;&lt;/pre&gt;

&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Next time you're preparing thumbnails for a gallery or optimizing assets for a website, don't reach for a GUI.&lt;br&gt;
The power of the macOS CLI is right at your fingertips.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 Note&lt;br&gt;
This post was originally published on &lt;a href="https://www.romainlespinasse.dev/posts/macos-resize-using-sips/" rel="noopener noreferrer"&gt;my personal blog&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>macos</category>
      <category>terminal</category>
      <category>sips</category>
    </item>
    <item>
      <title>How to Add a Photo to an Existing Page in a PDF Using macOS Preview</title>
      <dc:creator>Romain Lespinasse</dc:creator>
      <pubDate>Fri, 20 Feb 2026 21:56:49 +0000</pubDate>
      <link>https://forem.com/rlespinasse/how-to-add-a-photo-to-an-existing-page-in-a-pdf-using-macos-preview-ho9</link>
      <guid>https://forem.com/rlespinasse/how-to-add-a-photo-to-an-existing-page-in-a-pdf-using-macos-preview-ho9</guid>
      <description>&lt;p&gt;If you have ever tried to paste an image into a PDF using the macOS Preview app, you probably ran into a highly frustrating issue. &lt;/p&gt;

&lt;p&gt;Instead of dropping the image onto the page you are currently viewing, Preview insists on pasting the image as a completely new, blank page. &lt;/p&gt;

&lt;p&gt;Preview doesn't have a standard "Insert Image" button. However, there is a hidden workaround that lets you paste a photo as a movable, resizable object directly onto an existing PDF page. &lt;/p&gt;

&lt;h3&gt;
  
  
  The "Paste-Into-Itself" Method
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Open the image:&lt;/strong&gt; Double-click your photo to open it in the Preview app.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Copy the image:&lt;/strong&gt; Press &lt;strong&gt;Command + A&lt;/strong&gt; (⌘A) to select the entire image, then press &lt;strong&gt;Command + C&lt;/strong&gt; (⌘C) to copy it to your clipboard.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Paste it into itself:&lt;/strong&gt; Without leaving your image window, press &lt;strong&gt;Command + V&lt;/strong&gt; (⌘V) to paste. &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;How to know it worked:&lt;/strong&gt; This creates a duplicate "object" layer directly on top of your original image. The new layer will have a bounding box with little blue dots on the corners.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Select and copy the new object:&lt;/strong&gt; This is the most crucial step! Make sure you explicitly click on that newly pasted image layer so that those blue corner dots are actively selected. &lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;Once it is selected, press &lt;strong&gt;Command + C&lt;/strong&gt; (⌘C) to copy this specific &lt;em&gt;object&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Open your PDF:&lt;/strong&gt; Switch over to the PDF document you want to edit (also opened in Preview).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Select the target page:&lt;/strong&gt; Click directly in the middle of the actual PDF page where you want the image to go. &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Warning:&lt;/strong&gt; Do not click the thumbnail in the sidebar, or Preview will default back to creating a new page.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Paste and adjust:&lt;/strong&gt; Press &lt;strong&gt;Command + V&lt;/strong&gt; (⌘V). &lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;Your image should now drop successfully onto your PDF page! &lt;/p&gt;

&lt;p&gt;From there, you can click and drag it into position and use the blue corner dots to resize it to fit perfectly. &lt;/p&gt;

&lt;p&gt;When you are finished, just hit &lt;strong&gt;Command + S&lt;/strong&gt; (⌘S) to save your newly updated PDF.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 Note&lt;br&gt;
This post was originally published on &lt;a href="https://www.romainlespinasse.dev/posts/photo-in-pdf-macos-preview/" rel="noopener noreferrer"&gt;my personal blog&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>macos</category>
      <category>preview</category>
      <category>pdf</category>
      <category>apple</category>
    </item>
    <item>
      <title>Optimizing Shared GitLab Pipelines: Flexibility and Maintainability</title>
      <dc:creator>Romain Lespinasse</dc:creator>
      <pubDate>Fri, 20 Feb 2026 21:45:30 +0000</pubDate>
      <link>https://forem.com/rlespinasse/optimizing-shared-gitlab-pipelines-flexibility-and-maintainability-7p8</link>
      <guid>https://forem.com/rlespinasse/optimizing-shared-gitlab-pipelines-flexibility-and-maintainability-7p8</guid>
      <description>&lt;h2&gt;
  
  
  The Challenge
&lt;/h2&gt;

&lt;p&gt;A colleague seeks to modify the script section of a job in a shared GitLab pipeline, facing hardcoded configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;  &lt;span class="c1"&gt;# https://gitlab.com/rlespinasse/foobar-shared-ci-templates/-/blob/main/pipeline-with-hardcoded-values.yml&lt;/span&gt;
  &lt;span class="na"&gt;test-branch&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;stage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;test&lt;/span&gt;
    &lt;span class="na"&gt;before_script&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;ls&lt;/span&gt;
    &lt;span class="na"&gt;script&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;# it's for the example, the script can be more complex&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;ls ./wrong-folder&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This rigid setup causes pipeline failure in their project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;  &lt;span class="c1"&gt;# https://gitlab.com/rlespinasse/foobar-project/-/blob/main/.gitlab-ci.yml&lt;/span&gt;
  &lt;span class="na"&gt;include&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;project&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;rlespinasse/foobar-shared-ci-templates'&lt;/span&gt;
      &lt;span class="na"&gt;ref&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;HEAD&lt;/span&gt;
      &lt;span class="na"&gt;file&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/pipeline-with-hardcoded-values.yml'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; ./wrong-folder
  &lt;span class="nb"&gt;ls&lt;/span&gt;: cannot access &lt;span class="s1"&gt;'./wrong-folder'&lt;/span&gt;: No such file or directory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Ideal Solution
&lt;/h2&gt;

&lt;p&gt;The optimal approach involves implementing &lt;a href="https://docs.gitlab.com/ee/ci/yaml/includes.html#override-included-configuration-values" rel="noopener noreferrer"&gt;variables as configuration points&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;  &lt;span class="c1"&gt;# https://gitlab.com/rlespinasse/foobar-shared-ci-templates/-/blob/main/pipeline-with-variables.yml&lt;/span&gt;
  &lt;span class="na"&gt;variables&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;FOLDER_TO_TEST&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;wrong-folder&lt;/span&gt;

  &lt;span class="na"&gt;test-branch&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;stage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;test&lt;/span&gt;
    &lt;span class="na"&gt;before_script&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;ls&lt;/span&gt;
    &lt;span class="na"&gt;script&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;ls ./${FOLDER_TO_TEST}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This method allows for easy customization:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;  &lt;span class="c1"&gt;# https://gitlab.com/rlespinasse/foobar-project/-/merge_requests/2&lt;/span&gt;
  &lt;span class="na"&gt;include&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;project&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;rlespinasse/foobar-shared-ci-templates'&lt;/span&gt;
      &lt;span class="na"&gt;ref&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;HEAD&lt;/span&gt;
      &lt;span class="na"&gt;file&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/pipeline-with-variables.yml'&lt;/span&gt;

  &lt;span class="na"&gt;variables&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;FOLDER_TO_TEST&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;folder&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; ./&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;FOLDER_TO_TEST&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;
  some-file
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Temporary Workaround
&lt;/h2&gt;

&lt;p&gt;In the meantime, one can override only the &lt;code&gt;script&lt;/code&gt; part:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;  &lt;span class="c1"&gt;# https://gitlab.com/rlespinasse/foobar-project/-/merge_requests/1&lt;/span&gt;
  &lt;span class="na"&gt;include&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;project&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;rlespinasse/foobar-shared-ci-templates'&lt;/span&gt;
      &lt;span class="na"&gt;ref&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;HEAD&lt;/span&gt;
      &lt;span class="na"&gt;file&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/pipeline-with-hardcoded-values.yml'&lt;/span&gt;

  &lt;span class="na"&gt;test-branch&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;stage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;test&lt;/span&gt;
    &lt;span class="na"&gt;script&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;ls ./folder&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; ./folder
  some-file
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;While functional, this temporary solution may lead to divergences and maintenance issues.&lt;/p&gt;

&lt;p&gt;It's recommended to contribute to open source or innersource projects (especially during &lt;a href="https://hacktoberfest.com/" rel="noopener noreferrer"&gt;Hacktoberfest&lt;/a&gt;) by proposing the addition of variables.&lt;br&gt;
This would allow users to adapt shared pipeline behaviors to their needs while preserving the original intent.&lt;/p&gt;

&lt;h3&gt;
  
  
  Explore the code
&lt;/h3&gt;

&lt;p&gt;You can explore the code on those repositories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/rlespinasse/foobar-shared-ci-templates" rel="noopener noreferrer"&gt;https://gitlab.com/rlespinasse/foobar-shared-ci-templates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/rlespinasse/foobar-project" rel="noopener noreferrer"&gt;https://gitlab.com/rlespinasse/foobar-project&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 Note&lt;br&gt;
This post was originally published on &lt;a href="https://www.romainlespinasse.dev/posts/optimizing-shared-gitlab-pipelines/" rel="noopener noreferrer"&gt;my personal blog&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>gitlab</category>
      <category>cicd</category>
    </item>
    <item>
      <title>Hacktoberfest 2020: Lessons learned as Maintainer</title>
      <dc:creator>Romain Lespinasse</dc:creator>
      <pubDate>Sun, 01 Nov 2020 18:11:06 +0000</pubDate>
      <link>https://forem.com/rlespinasse/hacktoberfest-2020-lessons-learned-57kg</link>
      <guid>https://forem.com/rlespinasse/hacktoberfest-2020-lessons-learned-57kg</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;In addition of my participation for the 4th time in a row, This year report will focus on my activity as Maintainer.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  as Creator
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Project ideas come from everywhere, don't limit yourself and create a public repository even when you may be the only user.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Don't be perfect from the start, you can improve your project during its lifetime.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can choose any name for your project, sometimes a descriptive name, sometimes a play of words.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  as Maintainer
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Learn to say &lt;strong&gt;no&lt;/strong&gt; as Maintainer or to choose your own way to deal with a situation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Don't support all releases of your project all the time, you can depreciate version series.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Don't be afraid to &lt;code&gt;archived&lt;/code&gt; a project if you unmaintained it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Don't put yourself under pressure to respond quickly as possible to issues or pull-requests submissions.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;This post may be edited overtime with new lessons:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't stop learning&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>hacktoberfest</category>
      <category>maintainer</category>
      <category>creator</category>
      <category>lessons</category>
    </item>
    <item>
      <title>Hacktoberfest 2020: github-slug-action Maintainer</title>
      <dc:creator>Romain Lespinasse</dc:creator>
      <pubDate>Sun, 01 Nov 2020 17:49:47 +0000</pubDate>
      <link>https://forem.com/rlespinasse/hacktoberfest-2020-maintainer-of-github-slug-action-49bi</link>
      <guid>https://forem.com/rlespinasse/hacktoberfest-2020-maintainer-of-github-slug-action-49bi</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;In addition of my participation for the 4th time in a row, This year report will focus on my activity as Maintainer.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Some projects ideas can start from a colleague tweet.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/rlespinasse" rel="noopener noreferrer"&gt;
        rlespinasse
      &lt;/a&gt; / &lt;a href="https://github.com/rlespinasse/github-slug-action" rel="noopener noreferrer"&gt;
        github-slug-action
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      GitHub Action to expose slug value of GitHub environment variables inside your GitHub workflow
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;This idea behind &lt;code&gt;github-slug-action&lt;/code&gt; is one of them (tweet in French)&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1191827751751299074-278" src="https://platform.twitter.com/embed/Tweet.html?id=1191827751751299074"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1191827751751299074-278');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1191827751751299074&amp;amp;theme=dark"
  }



 &lt;/p&gt;

&lt;p&gt;From this &lt;code&gt;SLUG&lt;/code&gt; variable need, I start to develop my first GitHub Action. Using docker-based container and some bash script with &lt;code&gt;sed&lt;/code&gt; or &lt;code&gt;cut&lt;/code&gt;, I create the first version of this action quickly.&lt;/p&gt;
&lt;h2&gt;
  
  
  master end-of-life
&lt;/h2&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1254456661886066689-635" src="https://platform.twitter.com/embed/Tweet.html?id=1254456661886066689"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1254456661886066689-635');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1254456661886066689&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;After sometimes, &lt;code&gt;github-slug-action&lt;/code&gt; start to be used by multiples projects and some enhancements have been asked.&lt;/p&gt;

&lt;p&gt;This lead to a version bump to &lt;code&gt;2.x&lt;/code&gt; due to a breaking change in April 2020. Due to that breaking change, I take the decision to change my branching strategy to adopt a &lt;code&gt;vX.Y&lt;/code&gt; branch naming to better manage this type of change.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;master&lt;/code&gt; branch have been depreciated&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/rlespinasse/github-slug-action/issues/15" rel="noopener noreferrer"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        github-slug-action - master branch EOL
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#15&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/rlespinasse" rel="noopener noreferrer"&gt;
        &lt;img class="github-liquid-tag-img" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Favatars2.githubusercontent.com%2Fu%2F1280212%3Fv%3D4" alt="rlespinasse avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/rlespinasse" rel="noopener noreferrer"&gt;rlespinasse&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/rlespinasse/github-slug-action/issues/15" rel="noopener noreferrer"&gt;&lt;time&gt;Apr 26, 2020&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;p&gt;Due to changes into the branches management, the &lt;code&gt;master&lt;/code&gt; branch is not longer supported and will be removed in few months (&lt;em&gt;EOL: 2020-10-25&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;After a search, here is the list of projects who use &lt;code&gt;master&lt;/code&gt; branch for this action inside their workflows.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[x] danielr1996/docker-action-multitag#4&lt;/li&gt;
&lt;li&gt;[x] doerfli/feedscraper#93&lt;/li&gt;
&lt;li&gt;[x] patou/liste-envies#97&lt;/li&gt;
&lt;li&gt;[ ] kingkool68/testing-github-actions#1&lt;/li&gt;
&lt;li&gt;[x] TardisBank/TardisBank#48&lt;/li&gt;
&lt;li&gt;[x] feinoujc/node-app#1&lt;/li&gt;
&lt;li&gt;[x] dormdev/dormdev#5&lt;/li&gt;
&lt;li&gt;[x] 7mind/izumi-docker#1&lt;/li&gt;
&lt;li&gt;[x] elmerfdz/rebuild-dndc#31&lt;/li&gt;
&lt;li&gt;[x] VladPodilnyk/d4s-example#2&lt;/li&gt;
&lt;li&gt;[x] LuanaFn/avas-denuncia-backend#12&lt;/li&gt;
&lt;li&gt;[x] time-machine-project/requests-for-comments#9&lt;/li&gt;
&lt;li&gt;[x] chiffre-io/push#44&lt;/li&gt;
&lt;li&gt;[x] elmerfdz/docker-traktarr#8&lt;/li&gt;
&lt;li&gt;[x] elmerfdz/docker-statping#15&lt;/li&gt;
&lt;li&gt;[x] yngwi/requests-for-comments_test#6&lt;/li&gt;
&lt;li&gt;[x] jupitermoney/base-images#2&lt;/li&gt;
&lt;li&gt;[x] elmerfdz/docker-bind#5&lt;/li&gt;
&lt;li&gt;[x] zio/izumi-reflect#21&lt;/li&gt;
&lt;li&gt;[x] PlayQ/d4s#48&lt;/li&gt;
&lt;li&gt;[x] doerfli/rss-mock-server#8&lt;/li&gt;
&lt;li&gt;[x] thecodingmachine/workadventure#58&lt;/li&gt;
&lt;li&gt;[ ] voxeet/voxeet-uxkit-react#2&lt;/li&gt;
&lt;li&gt;[x] Meemaw/Insight#17&lt;/li&gt;
&lt;li&gt;[ ] kingkool68/wordpress-child-themes#25&lt;/li&gt;
&lt;/ul&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/rlespinasse/github-slug-action/issues/15" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;A removal of the &lt;code&gt;master&lt;/code&gt; branch have been plan 6-months later. This work is complete.&lt;br&gt;
Some repositories still used the &lt;code&gt;master&lt;/code&gt; branch and a pull-request to migrate have been created of each of them during October before the &lt;code&gt;master&lt;/code&gt; branch deletion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TIP&lt;/strong&gt;: Use &lt;a href="https://dependabot.com/github-actions/" rel="noopener noreferrer"&gt;&lt;code&gt;Dependabot&lt;/code&gt;&lt;/a&gt; to manage versions of used GitHub Actions in your workflows&lt;/p&gt;
&lt;h2&gt;
  
  
  Docker-based GitHub Action limitation
&lt;/h2&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/rlespinasse/github-slug-action/issues/16" rel="noopener noreferrer"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        Other operating systems support
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#16&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/aminya" rel="noopener noreferrer"&gt;
        &lt;img class="github-liquid-tag-img" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Favatars0.githubusercontent.com%2Fu%2F16418197%3Fv%3D4" alt="aminya avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/aminya" rel="noopener noreferrer"&gt;aminya&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/rlespinasse/github-slug-action/issues/16" rel="noopener noreferrer"&gt;&lt;time&gt;Jun 28, 2020&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;p&gt;What dependency this is using that prevents it from running on other operating systems?&lt;/p&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/rlespinasse/github-slug-action/issues/16" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Currently, a docker-based GitHub Action can only run on Linux-based workflows.&lt;/p&gt;

&lt;p&gt;In order to manage Windows-based and Macos-based workflows, the action need to be rewrite as Javascript-based action. In September 2020, &lt;a href="https://github.com/Ameausoone" rel="noopener noreferrer"&gt;@Ameausoone&lt;/a&gt; have took up the challenge to migrate to Typescript.&lt;/p&gt;

&lt;p&gt;Thanks you.&lt;/p&gt;

&lt;h2&gt;
  
  
  GitHub Action CVE
&lt;/h2&gt;

&lt;p&gt;During the Hacktoberfest, the GitHub Action have been impacted by a &lt;a href="https://en.wikipedia.org/wiki/Common_Vulnerabilities_and_Exposures" rel="noopener noreferrer"&gt;CVE&lt;/a&gt; on one of the GitHub Action core feature that been in used : &lt;a href="https://github.com/actions/toolkit/security/advisories/GHSA-mfwh-5m23-j46w" rel="noopener noreferrer"&gt;GHSA-mfwh-5m23-j46w&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Thanks you &lt;a href="https://github.com/boolooper" rel="noopener noreferrer"&gt;@boolooper&lt;/a&gt; for the reporting.&lt;/p&gt;

&lt;p&gt;On maintained branches, all impacted versions have been updated to fix this CVE and an advisory have been created on the project : &lt;a href="https://github.com/rlespinasse/github-slug-action/security/advisories/GHSA-7f32-hm4h-w77q" rel="noopener noreferrer"&gt;GHSA-7f32-hm4h-w77q&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before Hacktoberfest 2020
&lt;/h2&gt;

&lt;p&gt;Thanks to &lt;a href="https://github.com/Ameausoone" rel="noopener noreferrer"&gt;@Ameausoone&lt;/a&gt;, &lt;a href="https://github.com/m4rcs" rel="noopener noreferrer"&gt;@m4rcs&lt;/a&gt;, and &lt;a href="https://github.com/php-coder" rel="noopener noreferrer"&gt;@php-coder&lt;/a&gt; for yours contributions before this year event.&lt;/p&gt;

</description>
      <category>hacktoberfest</category>
      <category>maintainer</category>
      <category>opensource</category>
      <category>githubaction</category>
    </item>
    <item>
      <title>Hacktoberfest 2020: drawio-cli and drawio-export Maintainer</title>
      <dc:creator>Romain Lespinasse</dc:creator>
      <pubDate>Sun, 01 Nov 2020 17:49:31 +0000</pubDate>
      <link>https://forem.com/rlespinasse/hacktoberfest-2020-maintainer-of-drawio-cli-and-drawio-export-1018</link>
      <guid>https://forem.com/rlespinasse/hacktoberfest-2020-maintainer-of-drawio-cli-and-drawio-export-1018</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;In addition of my participation for the 4th time in a row, This year report will focus on my activity as Maintainer.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Earlier this year, I want to be able to automatically export diagrams from a &lt;code&gt;drawio&lt;/code&gt; file. This need lead to the creation of 2 new open-sources projects :&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/rlespinasse" rel="noopener noreferrer"&gt;
        rlespinasse
      &lt;/a&gt; / &lt;a href="https://github.com/rlespinasse/drawio-export" rel="noopener noreferrer"&gt;
        drawio-export
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Export Draw.io diagrams using docker
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/rlespinasse" rel="noopener noreferrer"&gt;
        rlespinasse
      &lt;/a&gt; / &lt;a href="https://github.com/rlespinasse/drawio-cli" rel="noopener noreferrer"&gt;
        drawio-cli
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      CLI for Draw.io
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The &lt;code&gt;drawio-cli&lt;/code&gt; project is responsible to generate a docker image with a &lt;strong&gt;raw&lt;/strong&gt; cli of drawio (thanks &lt;a href="https://github.com/jgraph/drawio-desktop" rel="noopener noreferrer"&gt;drawio-desktop&lt;/a&gt;) for that.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;drawio-export&lt;/code&gt; project use the &lt;code&gt;drawio-cli&lt;/code&gt; project to enhance initial export capabilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Support latest version of Drawio-desktop
&lt;/h2&gt;

&lt;p&gt;At the beginning of Hacktoberfest, &lt;a href="https://github.com/danquah" rel="noopener noreferrer"&gt;@danquash&lt;/a&gt; start working of this &lt;a href="https://github.com/rlespinasse/drawio-cli/issues/4" rel="noopener noreferrer"&gt;issue&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After an awesome work on debugging the version bump issues, he have create 2 pull-requests (1 on each project)&lt;/p&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/rlespinasse/drawio-cli/pull/5" rel="noopener noreferrer"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        Support drawio 13.x
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#5&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/danquah" rel="noopener noreferrer"&gt;
        &lt;img class="github-liquid-tag-img" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Favatars0.githubusercontent.com%2Fu%2F999542%3Fv%3D4" alt="danquah avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/danquah" rel="noopener noreferrer"&gt;danquah&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/rlespinasse/drawio-cli/pull/5" rel="noopener noreferrer"&gt;&lt;time&gt;Oct 02, 2020&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;p&gt;As discussed in #4
This pull-requests bumps the drawio-version to 13.7.3 (latest according to &lt;a href="https://github.com/jgraph/drawio-desktop/releases/tag/v13.7.3" rel="noopener noreferrer"&gt;https://github.com/jgraph/drawio-desktop/releases/tag/v13.7.3&lt;/a&gt;) and installes a required dependency.&lt;/p&gt;
&lt;p&gt;Apparently the newer version of drawio requires some arguments to come last, without this last change electron simply quits with a&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Error: input file/directory not found
&lt;/code&gt;&lt;/pre&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/rlespinasse/drawio-cli/pull/5" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/rlespinasse/drawio-export/pull/29" rel="noopener noreferrer"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        Support draweio 13.x
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#29&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/danquah" rel="noopener noreferrer"&gt;
        &lt;img class="github-liquid-tag-img" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Favatars0.githubusercontent.com%2Fu%2F999542%3Fv%3D4" alt="danquah avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/danquah" rel="noopener noreferrer"&gt;danquah&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/rlespinasse/drawio-export/pull/29" rel="noopener noreferrer"&gt;&lt;time&gt;Oct 02, 2020&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;p&gt;Closely related to &lt;a href="https://github.com/rlespinasse/drawio-cli/pull/5" rel="noopener noreferrer"&gt;https://github.com/rlespinasse/drawio-cli/pull/5&lt;/a&gt; and &lt;a href="https://github.com/rlespinasse/drawio-cli/pull/4" rel="noopener noreferrer"&gt;https://github.com/rlespinasse/drawio-cli/pull/4&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This PR moves an argument to the end of the line as seems to be required by newer versions of drawio.&lt;/p&gt;
&lt;p&gt;Without this we get a "Error: input file/directory not found" error (tested with version 13.7.3 of jgraph/drawio-desktop)&lt;/p&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/rlespinasse/drawio-export/pull/29" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Thanks to him.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enhancements on drawio-export
&lt;/h2&gt;

&lt;p&gt;Some &lt;code&gt;enhancement&lt;/code&gt; issues have been &lt;a href="https://github.com/rlespinasse/drawio-export/contribute" rel="noopener noreferrer"&gt;available for contribution&lt;/a&gt; during this Hacktoberfest 2020.&lt;/p&gt;

&lt;p&gt;This new &lt;code&gt;--on-changes&lt;/code&gt; option, to improve the speed of diagrams generation, have been develop by &lt;a href="https://github.com/Nico385412" rel="noopener noreferrer"&gt;@Nico385412&lt;/a&gt;.&lt;/p&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/rlespinasse/drawio-export/pull/34" rel="noopener noreferrer"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        feat(option): add on-changes-option
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#34&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/Nico385412" rel="noopener noreferrer"&gt;
        &lt;img class="github-liquid-tag-img" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Favatars3.githubusercontent.com%2Fu%2F9024389%3Fv%3D4" alt="Nico385412 avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/Nico385412" rel="noopener noreferrer"&gt;Nico385412&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/rlespinasse/drawio-export/pull/34" rel="noopener noreferrer"&gt;&lt;time&gt;Oct 11, 2020&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;p&gt;resolves #15&lt;/p&gt;
&lt;p&gt;I'm not an expert in shell but this pr do the job, i would like to know your opinion on it :D&lt;/p&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/rlespinasse/drawio-export/pull/34" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Thanks to him.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before Hacktoberfest 2020
&lt;/h2&gt;

&lt;p&gt;Thanks to &lt;a href="https://github.com/bogaertg" rel="noopener noreferrer"&gt;@bogaertg&lt;/a&gt; and &lt;a href="https://github.com/Decat-SimonA" rel="noopener noreferrer"&gt;@Decat-SimonA&lt;/a&gt; for yours contributions before this year event.&lt;/p&gt;

</description>
      <category>hacktoberfest</category>
      <category>maintainer</category>
      <category>opensource</category>
      <category>drawio</category>
    </item>
    <item>
      <title>Everybody has a testing environment</title>
      <dc:creator>Romain Lespinasse</dc:creator>
      <pubDate>Sun, 20 Sep 2020 18:42:14 +0000</pubDate>
      <link>https://forem.com/rlespinasse/everybody-has-a-testing-environment-7p</link>
      <guid>https://forem.com/rlespinasse/everybody-has-a-testing-environment-7p</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Everybody has a testing environment.&lt;/strong&gt;&lt;br&gt;
Some people are lucky enough enough to have a totally separate environment to run production in.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;From &lt;a href="https://twitter.com/stahnma/status/634849376343429120" rel="noopener noreferrer"&gt;@stahnma&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I love this motto, and you?&lt;/p&gt;

</description>
      <category>quote</category>
      <category>motto</category>
      <category>production</category>
      <category>testing</category>
    </item>
    <item>
      <title>Keep your draw.io diagrams in sync inside your repository</title>
      <dc:creator>Romain Lespinasse</dc:creator>
      <pubDate>Sun, 16 Aug 2020 19:39:22 +0000</pubDate>
      <link>https://forem.com/rlespinasse/keep-your-draw-io-diagrams-in-sync-inside-your-repository-bka</link>
      <guid>https://forem.com/rlespinasse/keep-your-draw-io-diagrams-in-sync-inside-your-repository-bka</guid>
      <description>&lt;h3&gt;
  
  
  My Workflow
&lt;/h3&gt;

&lt;p&gt;You have &lt;a href="https://app.diagrams.net/" rel="noopener noreferrer"&gt;Draw.io&lt;/a&gt; diagram files on your repository? You export them manually to have them as images (png, jpg) or pdf?&lt;/p&gt;

&lt;p&gt;You can keep your diagrams as exported images (png, jpg) or pdf and keep them synchronized when the diagram files are updated.&lt;/p&gt;

&lt;h3&gt;
  
  
  Submission Category:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Maintainer Must-Haves&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Yaml File or Link to Code
&lt;/h3&gt;

&lt;p&gt;Example to keep your draw.io files exported as PNG files with associated Asciidoctor pages.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Keep draw.io export synchronized&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;master&lt;/span&gt;
    &lt;span class="na"&gt;paths&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;**.drawio"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;.github/workflows/drawio-export.yml&lt;/span&gt;
&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;drawio-export&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Checkout sources&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v2&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.GH_TOKEN }}&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Export drawio files to asciidoctor and png files&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;docker://rlespinasse/drawio-export:v3.x&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;args&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;--fileext adoc --folder drawio-assets --transparent --on-changes&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Get author and committer info from HEAD commit&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;rlespinasse/git-commit-data-action@v1.x&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Commit changed files&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;stefanzweifel/git-auto-commit-action@v4.1.6&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;commit_message&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;docs:&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sync&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;draw.io&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;exported&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;files"&lt;/span&gt;
          &lt;span class="na"&gt;commit_user_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;${{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;env.GIT_COMMIT_COMMITTER_NAME&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"&lt;/span&gt;
          &lt;span class="na"&gt;commit_user_email&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;${{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;env.GIT_COMMIT_COMMITTER_EMAIL&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"&lt;/span&gt;
          &lt;span class="na"&gt;commit_author&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;${{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;env.GIT_COMMIT_AUTHOR&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Additional Resources / Info
&lt;/h3&gt;

&lt;p&gt;Learn more about the &lt;code&gt;drawio-export&lt;/code&gt; docker image.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/rlespinasse" rel="noopener noreferrer"&gt;
        rlespinasse
      &lt;/a&gt; / &lt;a href="https://github.com/rlespinasse/drawio-export" rel="noopener noreferrer"&gt;
        drawio-export
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Export Draw.io diagrams using docker
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Contributions welcome&lt;/p&gt;

</description>
      <category>actionshackathon</category>
      <category>github</category>
      <category>opensource</category>
      <category>drawio</category>
    </item>
    <item>
      <title>Access commit info for your release and deployment workflows</title>
      <dc:creator>Romain Lespinasse</dc:creator>
      <pubDate>Sun, 16 Aug 2020 19:26:23 +0000</pubDate>
      <link>https://forem.com/rlespinasse/access-commit-info-for-your-release-and-deployment-workflows-4h09</link>
      <guid>https://forem.com/rlespinasse/access-commit-info-for-your-release-and-deployment-workflows-4h09</guid>
      <description>&lt;h3&gt;
  
  
  My Workflow
&lt;/h3&gt;

&lt;p&gt;Need to access git commit information in your workflow like this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Get author and committer info from HEAD commit&lt;/span&gt;
  &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;rlespinasse/git-commit-data-action@v1.x&lt;/span&gt;

&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Commit changed files&lt;/span&gt;
  &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;stefanzweifel/git-auto-commit-action@v4.1.6&lt;/span&gt;
  &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;commit_message&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Automated&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;commit&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;message"&lt;/span&gt;
    &lt;span class="na"&gt;commit_user_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;${{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;env.GIT_COMMIT_COMMITTER_NAME&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"&lt;/span&gt;
    &lt;span class="na"&gt;commit_user_email&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;${{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;env.GIT_COMMIT_COMMITTER_EMAIL&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"&lt;/span&gt;
    &lt;span class="na"&gt;commit_author&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;${{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;env.GIT_COMMIT_AUTHOR&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Submission Category:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;DIY Deployments&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Yaml File or Link to Code
&lt;/h3&gt;

&lt;p&gt;This action source code is available on &lt;a href="https://github.com/rlespinasse/git-commit-data-action" rel="noopener noreferrer"&gt;https://github.com/rlespinasse/git-commit-data-action&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Expose git commit data&lt;/span&gt;
  &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;rlespinasse/git-commit-data-action@v1.x&lt;/span&gt;

&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Print git commit data&lt;/span&gt;
  &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
    &lt;span class="s"&gt;echo "Get author info"&lt;/span&gt;
    &lt;span class="s"&gt;echo " - ${{ env.GIT_COMMIT_AUTHOR }}"&lt;/span&gt;
    &lt;span class="s"&gt;echo " - ${{ env.GIT_COMMIT_AUTHOR_NAME }}"&lt;/span&gt;
    &lt;span class="s"&gt;echo " - ${{ env.GIT_COMMIT_AUTHOR_EMAIL }}"&lt;/span&gt;
    &lt;span class="s"&gt;echo "Get committer info"&lt;/span&gt;
    &lt;span class="s"&gt;echo " - ${{ env.GIT_COMMIT_COMMITTER }}"&lt;/span&gt;
    &lt;span class="s"&gt;echo " - ${{ env.GIT_COMMIT_COMMITTER_NAME }}"&lt;/span&gt;
    &lt;span class="s"&gt;echo " - ${{ env.GIT_COMMIT_COMMITTER_EMAIL }}"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Additional Resources / Info
&lt;/h3&gt;

&lt;p&gt;Currently, use on my client project. If you use it, tell me.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/rlespinasse" rel="noopener noreferrer"&gt;
        rlespinasse
      &lt;/a&gt; / &lt;a href="https://github.com/rlespinasse/git-commit-data-action" rel="noopener noreferrer"&gt;
        git-commit-data-action
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Action to expose git commit info
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Contributions welcome&lt;/p&gt;

</description>
      <category>actionshackathon</category>
      <category>github</category>
      <category>opensource</category>
      <category>git</category>
    </item>
    <item>
      <title>Use Slug variables for your release and deployment workflows</title>
      <dc:creator>Romain Lespinasse</dc:creator>
      <pubDate>Sun, 16 Aug 2020 18:55:44 +0000</pubDate>
      <link>https://forem.com/rlespinasse/use-slug-variable-for-your-release-and-deployment-workflows-558o</link>
      <guid>https://forem.com/rlespinasse/use-slug-variable-for-your-release-and-deployment-workflows-558o</guid>
      <description>&lt;h3&gt;
  
  
  My Workflow
&lt;/h3&gt;

&lt;p&gt;Want to use the branch name in an url during a deployment? Want to use a commit hash in a release process?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/rlespinasse/github-slug-action#github-slug-action" rel="noopener noreferrer"&gt;Slug it&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This action give you access to multiple slug version of some GitHub variables to be use on your release or deployment workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Submission Category:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Maintainer Must-Haves&lt;/li&gt;
&lt;li&gt;DIY Deployments&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Yaml File or Link to Code
&lt;/h3&gt;

&lt;p&gt;This action source code is available on &lt;a href="https://github.com/rlespinasse/github-slug-action" rel="noopener noreferrer"&gt;https://github.com/rlespinasse/github-slug-action&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Inject slug/short variables&lt;/span&gt;
  &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;rlespinasse/github-slug-action@v2.x&lt;/span&gt;

&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Print slug/short variables&lt;/span&gt;
  &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
    &lt;span class="s"&gt;echo "Slug variables"&lt;/span&gt;
    &lt;span class="s"&gt;echo "   ref        : ${{ env.GITHUB_REF_SLUG }}"&lt;/span&gt;
    &lt;span class="s"&gt;echo "   head ref   : ${{ env.GITHUB_HEAD_REF_SLUG }}"&lt;/span&gt;
    &lt;span class="s"&gt;echo "   base ref   : ${{ env.GITHUB_BASE_REF_SLUG }}"&lt;/span&gt;
    &lt;span class="s"&gt;echo "   event ref  : ${{ env.GITHUB_EVENT_REF_SLUG }}"&lt;/span&gt;
    &lt;span class="s"&gt;echo "   repository : ${{ env.GITHUB_REPOSITORY_SLUG }}"&lt;/span&gt;
    &lt;span class="s"&gt;echo "Slug URL variables"&lt;/span&gt;
    &lt;span class="s"&gt;echo "   ref        : ${{ env.GITHUB_REF_SLUG_URL }}"&lt;/span&gt;
    &lt;span class="s"&gt;echo "   head ref   : ${{ env.GITHUB_HEAD_REF_SLUG_URL }}"&lt;/span&gt;
    &lt;span class="s"&gt;echo "   base ref   : ${{ env.GITHUB_BASE_REF_SLUG_URL }}"&lt;/span&gt;
    &lt;span class="s"&gt;echo "   event ref  : ${{ env.GITHUB_EVENT_REF_SLUG_URL }}"&lt;/span&gt;
    &lt;span class="s"&gt;echo "   repository : ${{ env.GITHUB_REPOSITORY_SLUG_URL }}"&lt;/span&gt;
    &lt;span class="s"&gt;echo "Short SHA variables"&lt;/span&gt;
    &lt;span class="s"&gt;echo "   sha        : ${{ env.GITHUB_SHA_SHORT }}"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Additional Resources / Info
&lt;/h3&gt;

&lt;p&gt;Some repositories already using it like&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Delegation-numerique-en-sante/mesconseilscovid/blob/master/.github/workflows/build.yml" rel="noopener noreferrer"&gt;Delegation-numerique-en-sante/mesconseilscovid&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ibm-garage-cloud/ibm-garage-cli-tools/blob/master/.github/workflows/release.yaml" rel="noopener noreferrer"&gt;ibm-garage-cloud/ibm-garage-cli-tools&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And more on &lt;a href="https://github.com/search?q=%22rlespinasse%2Fgithub-slug-action%22&amp;amp;type=Code" rel="noopener noreferrer"&gt;GitHub search page&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/rlespinasse" rel="noopener noreferrer"&gt;
        rlespinasse
      &lt;/a&gt; / &lt;a href="https://github.com/rlespinasse/github-slug-action" rel="noopener noreferrer"&gt;
        github-slug-action
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      GitHub Action to expose slug value of GitHub environment variables inside your GitHub workflow
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Contributions welcome&lt;/p&gt;

</description>
      <category>actionshackathon</category>
      <category>github</category>
      <category>opensource</category>
      <category>slug</category>
    </item>
  </channel>
</rss>
