<?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>DEV Community: Vincent A. Cicirello</title>
    <description>The latest articles on DEV Community by Vincent A. Cicirello (@cicirello).</description>
    <link>https://dev.to/cicirello</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%2F469122%2F085f1955-378c-49cb-866b-21b9ec1f1439.jpeg</url>
      <title>DEV Community: Vincent A. Cicirello</title>
      <link>https://dev.to/cicirello</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cicirello"/>
    <language>en</language>
    <item>
      <title>[Boost]</title>
      <dc:creator>Vincent A. Cicirello</dc:creator>
      <pubDate>Sat, 28 Feb 2026 20:42:36 +0000</pubDate>
      <link>https://dev.to/cicirello/-2c5h</link>
      <guid>https://dev.to/cicirello/-2c5h</guid>
      <description>&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/davorg/your-readme-is-already-a-website-dg7" class="crayons-story__hidden-navigation-link"&gt;Your README Is Already a Website&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/davorg" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F114555%2F673c4753-2096-43a2-89fc-80ba2685b08b.png" alt="davorg profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/davorg" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Dave Cross
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Dave Cross
                
              
              &lt;div id="story-author-preview-content-3296732" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/davorg" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F114555%2F673c4753-2096-43a2-89fc-80ba2685b08b.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Dave Cross&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/davorg/your-readme-is-already-a-website-dg7" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Feb 28&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/davorg/your-readme-is-already-a-website-dg7" id="article-link-3296732"&gt;
          Your README Is Already a Website
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/githubactions"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;githubactions&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/githubpages"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;githubpages&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/readme"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;readme&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/website"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;website&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/davorg/your-readme-is-already-a-website-dg7" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;4&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/davorg/your-readme-is-already-a-website-dg7#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;




</description>
      <category>githubactions</category>
      <category>githubpages</category>
      <category>readme</category>
      <category>website</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Vincent A. Cicirello</dc:creator>
      <pubDate>Sun, 01 Feb 2026 21:04:59 +0000</pubDate>
      <link>https://dev.to/cicirello/-29k9</link>
      <guid>https://dev.to/cicirello/-29k9</guid>
      <description>&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/alvaromontoro/css-art-cat-on-the-moon-595p" class="crayons-story__hidden-navigation-link"&gt;CSS Art: Cat on the Moon&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/alvaromontoro" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F161327%2F2ff05281-db58-4dcb-946a-4b679e4a266b.jpeg" alt="alvaromontoro profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/alvaromontoro" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Alvaro Montoro
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Alvaro Montoro
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png"&gt;&lt;/a&gt;
              
              &lt;div id="story-author-preview-content-3217759" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/alvaromontoro" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F161327%2F2ff05281-db58-4dcb-946a-4b679e4a266b.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Alvaro Montoro&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/alvaromontoro/css-art-cat-on-the-moon-595p" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Feb 1&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/alvaromontoro/css-art-cat-on-the-moon-595p" id="article-link-3217759"&gt;
          CSS Art: Cat on the Moon
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/showdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;showdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/css"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;css&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/html"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;html&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/alvaromontoro/css-art-cat-on-the-moon-595p" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;19&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/alvaromontoro/css-art-cat-on-the-moon-595p#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              2&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            1 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;




</description>
      <category>css</category>
      <category>webdev</category>
      <category>showdev</category>
      <category>html</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Vincent A. Cicirello</dc:creator>
      <pubDate>Thu, 22 Jan 2026 13:12:02 +0000</pubDate>
      <link>https://dev.to/cicirello/-ade</link>
      <guid>https://dev.to/cicirello/-ade</guid>
      <description>&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/nfrankel/checked-exceptions-and-lambdas-3an9" class="crayons-story__hidden-navigation-link"&gt;Checked exceptions and lambdas&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/nfrankel" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F362557%2F479d9637-2db0-4b0a-8070-edbe538c4180.jpg" alt="nfrankel profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/nfrankel" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Nicolas Fränkel
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Nicolas Fränkel
                
              
              &lt;div id="story-author-preview-content-3179935" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/nfrankel" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F362557%2F479d9637-2db0-4b0a-8070-edbe538c4180.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Nicolas Fränkel&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/nfrankel/checked-exceptions-and-lambdas-3an9" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jan 22&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/nfrankel/checked-exceptions-and-lambdas-3an9" id="article-link-3179935"&gt;
          Checked exceptions and lambdas
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/java"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;java&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/exception"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;exception&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/lambda"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;lambda&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/errors"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;errors&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/nfrankel/checked-exceptions-and-lambdas-3an9" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;7&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/nfrankel/checked-exceptions-and-lambdas-3an9#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;




</description>
      <category>java</category>
      <category>exception</category>
      <category>lambda</category>
      <category>errors</category>
    </item>
    <item>
      <title>pyaction reached 8 million pulls from the GitHub Container Registry</title>
      <dc:creator>Vincent A. Cicirello</dc:creator>
      <pubDate>Thu, 09 Oct 2025 21:20:08 +0000</pubDate>
      <link>https://dev.to/cicirello/pyaction-reached-8-million-pulls-from-the-github-container-registry-1bk4</link>
      <guid>https://dev.to/cicirello/pyaction-reached-8-million-pulls-from-the-github-container-registry-1bk4</guid>
      <description>&lt;p&gt;The pyaction Docker container has reached 8 million pulls from the GitHub Container Registry, coinciding with the release of Python 3.14. I have been maintaining, &lt;a href="https://github.com/cicirello/pyaction" rel="noopener noreferrer"&gt;pyaction&lt;/a&gt;, which is a &lt;a href="https://dev.to/cicirello/pyaction-a-docker-container-with-python-git-and-the-github-cli-930"&gt;Docker container with Python, git, and the GitHub CLI&lt;/a&gt;. It has now surpassed 8 million pulls from the &lt;a href="https://github.com/cicirello/pyaction/pkgs/container/pyaction" rel="noopener noreferrer"&gt;GitHub Container Registry&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fojhtl9316p4nnayovk2g.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fojhtl9316p4nnayovk2g.PNG" alt="8 million pulls of pyaction from GitHub Container Registry"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The pyaction container was originally developed to support developing GitHub Actions in Python. There are several GitHub container actions that use pyaction as the base image, and specifically pull it from the GitHub Container Registry. So this likely represents over 8 million runs of those dependent Actions. It is also available from &lt;a href="https://hub.docker.com/r/cicirello/pyaction" rel="noopener noreferrer"&gt;Docker Hub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/cicirello/pyaction" rel="noopener noreferrer"&gt;pyaction&lt;/a&gt; container is a &lt;a href="https://hub.docker.com/_/python" rel="noopener noreferrer"&gt;Python slim image&lt;/a&gt; on top of which I've added &lt;a href="https://curl.se/" rel="noopener noreferrer"&gt;curl&lt;/a&gt;, &lt;a href="https://git-scm.com/" rel="noopener noreferrer"&gt;git&lt;/a&gt;, &lt;a href="https://gnupg.org/" rel="noopener noreferrer"&gt;gpg&lt;/a&gt;, and the &lt;a href="https://cli.github.com/" rel="noopener noreferrer"&gt;GitHub CLI&lt;/a&gt;. The current versions of these within the latest release of pyaction are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python 3.14.0&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/cli/cli/releases/tag/v2.81.0" rel="noopener noreferrer"&gt;GitHub CLI 2.81.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;git 2.47.3&lt;/li&gt;
&lt;li&gt;curl 8.14.1&lt;/li&gt;
&lt;li&gt;gpg 2.4.7&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;The maintainer is not affiliated with GitHub.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Table of Contents:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tagging Convention&lt;/li&gt;
&lt;li&gt;
Installing

&lt;ul&gt;
&lt;li&gt;Docker Pull Command&lt;/li&gt;
&lt;li&gt;Use as a base image in a Dockerfile&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;More Information&lt;/li&gt;

&lt;li&gt;Where You Can Find Me&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tagging Convention
&lt;/h2&gt;

&lt;p&gt;Docker tags include the Python version and optionally the GitHub CLI version. We publish images for older Python versions whenever GitHub releases a new version of the GitHub CLI. At the present time, pyaction supports Python 3.10, 3.11, 3.12, 3.13, and 3.14. Images are tagged as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For the current version of Python (e.g., &lt;code&gt;3.14.0&lt;/code&gt;) and current version of GitHub CLI (e.g., &lt;code&gt;2.81.0&lt;/code&gt;), all of the following tags are available and equivalent: &lt;code&gt;latest&lt;/code&gt;, &lt;code&gt;3.14.0&lt;/code&gt;, &lt;code&gt;3.14&lt;/code&gt;, &lt;code&gt;3.14.0-gh-2.81.0&lt;/code&gt;, &lt;code&gt;3.14.0-gh-2.81&lt;/code&gt;, &lt;code&gt;3.14.0-gh-2&lt;/code&gt;, &lt;code&gt;3.14-gh-2.81.0&lt;/code&gt;, &lt;code&gt;3.14-gh-2.81&lt;/code&gt;, &lt;code&gt;3.14-gh-2&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;For prior versions of Python (&lt;code&gt;3.10&lt;/code&gt;, &lt;code&gt;3.11&lt;/code&gt;, &lt;code&gt;3.12&lt;/code&gt;, &lt;code&gt;3.13&lt;/code&gt;) and current version of GitHub CLI (&lt;code&gt;2.81.0&lt;/code&gt;), all of the following tags are available and equivalent: &lt;code&gt;3.13&lt;/code&gt;, &lt;code&gt;3.13-gh-2.81.0&lt;/code&gt;, &lt;code&gt;3.13-gh-2.81&lt;/code&gt;, &lt;code&gt;3.13-gh-2&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This tag scheme began with version &lt;code&gt;2.75.0&lt;/code&gt; of the GitHub CLI. We don't support pyaction images with earlier versions of the GitHub CLI (other than via older images published with the prior tagging scheme).&lt;/p&gt;

&lt;p&gt;This tag scheme began with Python &lt;code&gt;3.13.5&lt;/code&gt;. Python patch level tags are not available for pyaction prior to Python &lt;code&gt;3.13.5&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing
&lt;/h2&gt;

&lt;p&gt;The pre-built image is hosted on both Docker Hub and the GitHub Container Registry. You can use it in the following ways.&lt;/p&gt;

&lt;h3&gt;
  
  
  Docker Pull Command
&lt;/h3&gt;

&lt;p&gt;Pull the latest image from Docker Hub with the following (or replace the &lt;code&gt;latest&lt;/code&gt; tag with the desired version):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull cicirello/pyaction:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Pull from the Github Container Registry with:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull ghcr.io/cicirello/pyaction:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Use as a base image in a Dockerfile
&lt;/h3&gt;

&lt;p&gt;Use as a base image in a Dockerfile (or replace the &lt;code&gt;latest&lt;/code&gt; tag with the desired version):&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; cicirello/pyaction:latest&lt;/span&gt;

&lt;span class="c"&gt;# The rest of your Dockerfile would go here.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Or you can use as a base image (via the Github Container Registry) with:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; ghcr.io/cicirello/pyaction:latest&lt;/span&gt;

&lt;span class="c"&gt;# The rest of your Dockerfile would go here.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  More Information
&lt;/h2&gt;

&lt;p&gt;Please consider starring pyaction's GitHub repository, and even better using it to develop Actions, or just to use the GitHub CLI:&lt;/p&gt;

&lt;p&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://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/cicirello" rel="noopener noreferrer"&gt;
        cicirello
      &lt;/a&gt; / &lt;a href="https://github.com/cicirello/pyaction" rel="noopener noreferrer"&gt;
        pyaction
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A Docker container with Python, git, and the Github CLI
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;pyaction&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://github.com/cicirello/pyaction#pyaction" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/6ed9753e8d5f466fd535d5e6fa2009bffc6698bf9a8b6393b9e1e2e2a0289924/68747470733a2f2f616374696f6e732e6369636972656c6c6f2e6f72672f696d616765732f7079616374696f6e3634302e706e67" alt="pyaction - A Docker container with Python, git, and the GitHub CLI"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Website for our GitHub Actions and tools for developing them: &lt;a href="https://actions.cicirello.org/" rel="nofollow noopener noreferrer"&gt;https://actions.cicirello.org/&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Summary&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;br&gt;
&lt;thead&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;th&gt;&lt;strong&gt;Docker Hub&lt;/strong&gt;&lt;/th&gt;
&lt;br&gt;
&lt;th&gt;
&lt;br&gt;
&lt;a href="https://hub.docker.com/r/cicirello/pyaction" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9a28638f9db87cc4fdcc9b44faa773bd94734b8969b676a16dd7fa7227a33a6c/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f762f6369636972656c6c6f2f7079616374696f6e3f6c6162656c3d446f636b6572253230487562266c6f676f3d646f636b6572" alt="Docker Image Version (latest by date)"&gt;&lt;/a&gt; &lt;a href="https://hub.docker.com/r/cicirello/pyaction" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/a2f85a2dc3a69ec77150d05cbc578ca09c8dd077351b65f499ed2b3f8827bbff/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6369636972656c6c6f2f7079616374696f6e3f6c6f676f3d646f636b6572" alt="Docker Pulls"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/th&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;/thead&gt;
&lt;br&gt;
&lt;tbody&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;&lt;a href="https://github.com/cicirello/pyaction/pkgs/container/pyaction" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/23d76aa88d6a744732284d1c21e75c7fa62d4c4c6d1a89c2d3742bc63fac58ad/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f762f6369636972656c6c6f2f7079616374696f6e3f6c6162656c3d676863722e696f266c6f676f3d476974487562" alt="GitHub Container Registry (latest by date)"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;&lt;strong&gt;Image Stats&lt;/strong&gt;&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;&lt;a href="https://hub.docker.com/r/cicirello/pyaction" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/c3574811367ddf6d1b2f8ddb4c4b86d9b767349a9dd13c3577b2e054dee673b8/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f696d6167652d73697a652f6369636972656c6c6f2f7079616374696f6e3f6c6f676f3d646f636b6572" alt="Docker Image Size (latest by date)"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;&lt;strong&gt;Build Status&lt;/strong&gt;&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;&lt;a href="https://github.com/cicirello/pyaction/actions/workflows/docker-image.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/cicirello/pyaction/workflows/build/badge.svg" alt="build"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;&lt;a href="https://github.com/cicirello/pyaction/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7f042fecc8a59d0bb1af9281c1078ee3aa9b7c6658a1061a70fba86c0bb655d6/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6369636972656c6c6f2f7079616374696f6e" alt="License"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;&lt;strong&gt;Support&lt;/strong&gt;&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;
&lt;br&gt;
&lt;a href="https://github.com/sponsors/cicirello" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/c0d2fd64144b9ee8d8658f81be36c989670a3aa0cf0640afa32b920f0d7ab3c5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f73706f6e736f722d3330333633443f6c6f676f3d4769744875622d53706f6e736f7273266c6f676f436f6c6f723d23454134414141" alt="GitHub Sponsors"&gt;&lt;/a&gt; &lt;a href="https://liberapay.com/cicirello" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/0db56d2f079586db4447ffe792cd14f076ea87a394644500b3974037e8af20a3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c69626572617061792d4636433931353f6c6f676f3d6c6962657261706179266c6f676f436f6c6f723d626c61636b" alt="Liberapay"&gt;&lt;/a&gt; &lt;a href="https://ko-fi.com/cicirello" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7a2311e958761537ca9572c95228e0022a675c9adb1f7d4cda9f57f8bfe8922e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4b6f2d2d66692d4631363036313f6c6f676f3d6b6f2d6669266c6f676f436f6c6f723d7768697465" alt="Ko-Fi"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;/tbody&gt;
&lt;br&gt;
&lt;/table&gt;&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;This Docker image is designed to support implementing Github Actions
with Python. It starts with the &lt;a href="https://hub.docker.com/_/python" rel="nofollow noopener noreferrer"&gt;official python docker image&lt;/a&gt;
as the base, which is a Debian OS. It specifically uses python:3-slim to keep the image size
down for faster loading of Github Actions that use pyaction. On top of the
base, we've installed &lt;a href="https://curl.se/" rel="nofollow noopener noreferrer"&gt;curl&lt;/a&gt;
&lt;a href="https://gnupg.org/" rel="nofollow noopener noreferrer"&gt;gpg&lt;/a&gt;, &lt;a href="https://git-scm.com/" rel="nofollow noopener noreferrer"&gt;git&lt;/a&gt;, and the
&lt;a href="https://cli.github.com/" rel="noopener noreferrer"&gt;GitHub CLI&lt;/a&gt;. We added curl and gpg because they
are needed to install the GitHub CLI, and they may come in handy anyway
(especially curl) when implementing a GitHub Action.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Blog Posts:&lt;/strong&gt; See a &lt;a href="https://github.com/cicirello/pyaction#blog-posts" rel="noopener noreferrer"&gt;list of blog posts about pyaction&lt;/a&gt; later in this README.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Multiplatform Image&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;pyaction supports the following platforms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;linux/386&lt;/li&gt;
&lt;li&gt;linux/amd64&lt;/li&gt;
&lt;li&gt;linux/arm64&lt;/li&gt;
&lt;li&gt;linux/arm/v7&lt;/li&gt;
&lt;li&gt;linux/arm/v6&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Source Repository and Builds&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;The &lt;a href="https://github.com/cicirello/pyaction" rel="noopener noreferrer"&gt;source repository&lt;/a&gt; is
maintained…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/cicirello/pyaction" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;




&lt;p&gt;For more information about pyaction, see my earlier post here on DEV, as well as an information page about pyaction on the web.&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/cicirello/pyaction-a-docker-container-with-python-git-and-the-github-cli-930" class="crayons-story__hidden-navigation-link"&gt;pyaction: A Docker container with Python, git, and the GitHub CLI&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/cicirello" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F469122%2F085f1955-378c-49cb-866b-21b9ec1f1439.jpeg" alt="cicirello profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/cicirello" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Vincent A. Cicirello
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Vincent A. Cicirello
                
              
              &lt;div id="story-author-preview-content-1311050" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/cicirello" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F469122%2F085f1955-378c-49cb-866b-21b9ec1f1439.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Vincent A. Cicirello&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/cicirello/pyaction-a-docker-container-with-python-git-and-the-github-cli-930" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Dec 28 '22&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/cicirello/pyaction-a-docker-container-with-python-git-and-the-github-cli-930" id="article-link-1311050"&gt;
          pyaction: A Docker container with Python, git, and the GitHub CLI
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ui"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ui&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/software"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;software&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/cicirello/pyaction-a-docker-container-with-python-git-and-the-github-cli-930" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;10&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/cicirello/pyaction-a-docker-container-with-python-git-and-the-github-cli-930#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              1&lt;span class="hidden s:inline"&gt; comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;




&lt;p&gt;

&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://actions.cicirello.org/pyaction/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Factions.cicirello.org%2Fimages%2Fpyaction.png" height="auto" class="m-0"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://actions.cicirello.org/pyaction/" rel="noopener noreferrer" class="c-link"&gt;
            pyaction - A Docker container with Python, git, and the Github CLI
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            The pyaction Docker container is designed to support implementing Github Actions with Python. It starts with the official python slim docker image as the base, using slim to keep the image size down for faster loading of Github Actions that use pyaction. The pyaction container also includes curl, gpg, git, and the GitHub CLI.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Factions.cicirello.org%2Fimages%2Ffavicon.svg"&gt;
          actions.cicirello.org
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;




&lt;h2&gt;
  
  
  Where You Can Find Me
&lt;/h2&gt;

&lt;p&gt;Follow me &lt;a href="https://dev.to/cicirello"&gt;here on DEV&lt;/a&gt; and on &lt;a href="https://github.com/cicirello" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__469122"&gt;
    &lt;a href="/cicirello" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F469122%2F085f1955-378c-49cb-866b-21b9ec1f1439.jpeg" alt="cicirello image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/cicirello"&gt;Vincent A. Cicirello&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/cicirello"&gt;Researcher and educator in A.I., algorithms, evolutionary computation, machine learning, and swarm intelligence&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;




</description>
      <category>github</category>
      <category>docker</category>
      <category>python</category>
      <category>showdev</category>
    </item>
    <item>
      <title>pyaction: Python and the GitHub CLI in a Docker Container</title>
      <dc:creator>Vincent A. Cicirello</dc:creator>
      <pubDate>Thu, 14 Aug 2025 18:36:36 +0000</pubDate>
      <link>https://dev.to/cicirello/pyaction-python-and-the-github-cli-in-a-docker-container-3682</link>
      <guid>https://dev.to/cicirello/pyaction-python-and-the-github-cli-in-a-docker-container-3682</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://actions.cicirello.org/pyaction/" rel="noopener noreferrer"&gt;pyaction&lt;/a&gt; container is a Python slim Docker container with the addition of the GitHub CLI, git, curl, and gpg. Its original motivation was to support developing GitHub Actions with Python, but pyaction can also be used for other purposes (e.g., as an alternate way of using the GitHub CLI). Due to several requests from pyaction users, who wanted to use it with earlier Python versions, we recently changed the tagging convention. The Docker tags for pulling pyaction now include tags specifying the version of Python, and optionally the version of the GitHub CLI that are included in the image. The pyaction container is published to both Docker Hub and the GitHub Container Registry.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The maintainers of pyaction are not affiliated with GitHub; and pyaction is an unofficial installation of the GitHub CLI.&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Table of Contents:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;About the pyaction Docker Container&lt;/li&gt;
&lt;li&gt;New Tagging Convention&lt;/li&gt;
&lt;li&gt;
Installing

&lt;ul&gt;
&lt;li&gt;Docker Pull Command&lt;/li&gt;
&lt;li&gt;Use as a base image in a Dockerfile&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;More Information&lt;/li&gt;

&lt;li&gt;Where You Can Find Me&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  About the pyaction Docker Container
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://github.com/cicirello/pyaction" rel="noopener noreferrer"&gt;pyaction&lt;/a&gt; container is a &lt;a href="https://hub.docker.com/_/python" rel="noopener noreferrer"&gt;Python slim image&lt;/a&gt; on top of which I've added &lt;a href="https://curl.se/" rel="noopener noreferrer"&gt;curl&lt;/a&gt;, &lt;a href="https://git-scm.com/" rel="noopener noreferrer"&gt;git&lt;/a&gt;, &lt;a href="https://gnupg.org/" rel="noopener noreferrer"&gt;gpg&lt;/a&gt;, and the &lt;a href="https://cli.github.com/" rel="noopener noreferrer"&gt;GitHub CLI&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;The original motivation for pyaction was to support implementing GitHub Actions in Python as a &lt;a href="https://docs.github.com/en/actions/creating-actions/creating-a-docker-container-action" rel="noopener noreferrer"&gt;container actions&lt;/a&gt;. Container actions enable implementing a GitHub Action in any language, one only needs a Docker container that includes the relevant language tools (e.g., interpreter, etc) and any other tools needed. To implement a GitHub Action in Python, this would require, at a minimum, Python. Thus, a Python slim image is used as the base of pyaction. A "slim" image is specifically used to keep the container small for faster loading from workflows. The GitHub CLI is then added to the container to enable interfacing with all things GitHub. The GitHub Actions framework itself has the GitHub CLI installed, however, container actions are limited to running only what is installed within the container itself. The pyaction container also has curl installed. Although GitHub Actions is the motivating usecase, pyaction is not limited to this case.&lt;/p&gt;

&lt;p&gt;You can pull pyaction from either &lt;a href="https://hub.docker.com/r/cicirello/pyaction" rel="noopener noreferrer"&gt;Docker Hub&lt;/a&gt; or the &lt;a href="https://github.com/cicirello/pyaction/pkgs/container/pyaction" rel="noopener noreferrer"&gt;GitHub Container Registry&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  New Tagging Convention
&lt;/h2&gt;

&lt;p&gt;Previously, we were using Semantic Versioning for the Docker tags, with each version having a specific combination of Python version and GitHub CLI version. We started getting requests from users of pyaction images with current GitHub CLI and earlier versions of Python. For example, perhaps their application wasn't ready for the next version of Python.&lt;/p&gt;

&lt;p&gt;So, to meet these requests, we changed the tagging convention, such that tags include the Python version and optionally the GitHub CLI version. And we started publishing images for older Python versions whenever GitHub releases a new version of the GitHub CLI. At the present time, pyaction supports Python 3.8, 3.9, 3.10, 3.11, 3.12, and 3.13. Images are tagged as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For the current version of Python (e.g., &lt;code&gt;3.13.6&lt;/code&gt;) and current version of GitHub CLI (e.g., &lt;code&gt;2.76.2&lt;/code&gt;), all of the following tags are available and equivalent: &lt;code&gt;latest&lt;/code&gt;, &lt;code&gt;3.13.6&lt;/code&gt;, &lt;code&gt;3.13&lt;/code&gt;, &lt;code&gt;3.13.6-gh-2.76.2&lt;/code&gt;, &lt;code&gt;3.13.6-gh-2.76&lt;/code&gt;, &lt;code&gt;3.13.6-gh-2&lt;/code&gt;, &lt;code&gt;3.13-gh-2.76.2&lt;/code&gt;, &lt;code&gt;3.13-gh-2.76&lt;/code&gt;, &lt;code&gt;3.13-gh-2&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;For prior versions of Python (&lt;code&gt;3.8&lt;/code&gt;, &lt;code&gt;3.9&lt;/code&gt;, &lt;code&gt;3.10&lt;/code&gt;, &lt;code&gt;3.11&lt;/code&gt;, &lt;code&gt;3.12&lt;/code&gt;) and current version of GitHub CLI (&lt;code&gt;2.76.2&lt;/code&gt;), all of the following tags are available and equivalent: &lt;code&gt;3.12&lt;/code&gt;, &lt;code&gt;3.12-gh-2.76.2&lt;/code&gt;, &lt;code&gt;3.12-gh-2.76&lt;/code&gt;, &lt;code&gt;3.12-gh-2&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This tag scheme began with version &lt;code&gt;2.75.0&lt;/code&gt; of the GitHub CLI. We don't support pyaction images with earlier versions of the GitHub CLI (other than via older images published with the prior tagging scheme).&lt;/p&gt;

&lt;p&gt;This tag scheme began with Python &lt;code&gt;3.13.5&lt;/code&gt;. Python patch level tags are not available for pyaction prior to Python &lt;code&gt;3.13.5&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing
&lt;/h2&gt;

&lt;p&gt;The pre-built image is hosted on both Docker Hub and the GitHub Container Registry. You can use it in the following ways.&lt;/p&gt;

&lt;h3&gt;
  
  
  Docker Pull Command
&lt;/h3&gt;

&lt;p&gt;Pull the latest image from Docker Hub with the following (or replace the &lt;code&gt;latest&lt;/code&gt; tag with the desired version):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull cicirello/pyaction:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Pull from the Github Container Registry with:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull ghcr.io/cicirello/pyaction:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Use as a base image in a Dockerfile
&lt;/h3&gt;

&lt;p&gt;Use as a base image in a Dockerfile (or replace the &lt;code&gt;latest&lt;/code&gt; tag with the desired version):&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; cicirello/pyaction:latest&lt;/span&gt;

&lt;span class="c"&gt;# The rest of your Dockerfile would go here.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Or you can use as a base image (via the Github Container Registry) with:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; ghcr.io/cicirello/pyaction:latest&lt;/span&gt;

&lt;span class="c"&gt;# The rest of your Dockerfile would go here.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  More Information
&lt;/h2&gt;

&lt;p&gt;For more information about pyaction, see earlier posts here on DEV in this series, as well as an information page about pyaction on the web.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://actions.cicirello.org/pyaction/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Factions.cicirello.org%2Fimages%2Fpyaction.png" height="auto" class="m-0"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://actions.cicirello.org/pyaction/" rel="noopener noreferrer" class="c-link"&gt;
            pyaction - A Docker container with Python, git, and the Github CLI
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            The pyaction Docker container is designed to support implementing Github Actions with Python. It starts with the official python slim docker image as the base, using slim to keep the image size down for faster loading of Github Actions that use pyaction. The pyaction container also includes curl, gpg, git, and the GitHub CLI.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Factions.cicirello.org%2Fimages%2Ffavicon.svg"&gt;
          actions.cicirello.org
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Please consider starring pyaction's GitHub repository, and even better using it to develop GitHub Actions, or just to use the GitHub CLI:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/cicirello" rel="noopener noreferrer"&gt;
        cicirello
      &lt;/a&gt; / &lt;a href="https://github.com/cicirello/pyaction" rel="noopener noreferrer"&gt;
        pyaction
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A Docker container with Python, git, and the Github CLI
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;pyaction&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/cicirello/pyaction#pyaction" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/6ed9753e8d5f466fd535d5e6fa2009bffc6698bf9a8b6393b9e1e2e2a0289924/68747470733a2f2f616374696f6e732e6369636972656c6c6f2e6f72672f696d616765732f7079616374696f6e3634302e706e67" alt="pyaction - A Docker container with Python, git, and the GitHub CLI"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Website for our GitHub Actions and tools for developing them: &lt;a href="https://actions.cicirello.org/" rel="nofollow noopener noreferrer"&gt;https://actions.cicirello.org/&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Summary&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Docker Hub&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;
&lt;a href="https://hub.docker.com/r/cicirello/pyaction" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9a28638f9db87cc4fdcc9b44faa773bd94734b8969b676a16dd7fa7227a33a6c/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f762f6369636972656c6c6f2f7079616374696f6e3f6c6162656c3d446f636b6572253230487562266c6f676f3d646f636b6572" alt="Docker Image Version (latest by date)"&gt;&lt;/a&gt; &lt;a href="https://hub.docker.com/r/cicirello/pyaction" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/a2f85a2dc3a69ec77150d05cbc578ca09c8dd077351b65f499ed2b3f8827bbff/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6369636972656c6c6f2f7079616374696f6e3f6c6f676f3d646f636b6572" alt="Docker Pulls"&gt;&lt;/a&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/cicirello/pyaction/pkgs/container/pyaction" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/23d76aa88d6a744732284d1c21e75c7fa62d4c4c6d1a89c2d3742bc63fac58ad/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f762f6369636972656c6c6f2f7079616374696f6e3f6c6162656c3d676863722e696f266c6f676f3d476974487562" alt="GitHub Container Registry (latest by date)"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Image Stats&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://hub.docker.com/r/cicirello/pyaction" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/c3574811367ddf6d1b2f8ddb4c4b86d9b767349a9dd13c3577b2e054dee673b8/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f696d6167652d73697a652f6369636972656c6c6f2f7079616374696f6e3f6c6f676f3d646f636b6572" alt="Docker Image Size (latest by date)"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Build Status&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/cicirello/pyaction/actions/workflows/docker-image.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/cicirello/pyaction/workflows/build/badge.svg" alt="build"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/cicirello/pyaction/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7f042fecc8a59d0bb1af9281c1078ee3aa9b7c6658a1061a70fba86c0bb655d6/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6369636972656c6c6f2f7079616374696f6e" alt="License"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://github.com/sponsors/cicirello" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/c0d2fd64144b9ee8d8658f81be36c989670a3aa0cf0640afa32b920f0d7ab3c5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f73706f6e736f722d3330333633443f6c6f676f3d4769744875622d53706f6e736f7273266c6f676f436f6c6f723d23454134414141" alt="GitHub Sponsors"&gt;&lt;/a&gt; &lt;a href="https://liberapay.com/cicirello" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/0db56d2f079586db4447ffe792cd14f076ea87a394644500b3974037e8af20a3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c69626572617061792d4636433931353f6c6f676f3d6c6962657261706179266c6f676f436f6c6f723d626c61636b" alt="Liberapay"&gt;&lt;/a&gt; &lt;a href="https://ko-fi.com/cicirello" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7a2311e958761537ca9572c95228e0022a675c9adb1f7d4cda9f57f8bfe8922e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4b6f2d2d66692d4631363036313f6c6f676f3d6b6f2d6669266c6f676f436f6c6f723d7768697465" alt="Ko-Fi"&gt;&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;This Docker image is designed to support implementing Github Actions
with Python. It starts with the &lt;a href="https://hub.docker.com/_/python" rel="nofollow noopener noreferrer"&gt;official python docker image&lt;/a&gt;
as the base, which is a Debian OS. It specifically uses python:3-slim to keep the image size
down for faster loading of Github Actions that use pyaction. On top of the
base, we've installed &lt;a href="https://curl.se/" rel="nofollow noopener noreferrer"&gt;curl&lt;/a&gt;
&lt;a href="https://gnupg.org/" rel="nofollow noopener noreferrer"&gt;gpg&lt;/a&gt;, &lt;a href="https://git-scm.com/" rel="nofollow noopener noreferrer"&gt;git&lt;/a&gt;, and the
&lt;a href="https://cli.github.com/" rel="noopener noreferrer"&gt;GitHub CLI&lt;/a&gt;. We added curl and gpg because they
are needed to install the GitHub CLI, and they may come in handy anyway
(especially curl) when implementing a GitHub Action.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Blog Posts:&lt;/strong&gt; See a &lt;a href="https://github.com/cicirello/pyaction#blog-posts" rel="noopener noreferrer"&gt;list of blog posts about pyaction&lt;/a&gt; later in this README.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Multiplatform Image&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;pyaction supports the following platforms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;linux/386&lt;/li&gt;
&lt;li&gt;linux/amd64&lt;/li&gt;
&lt;li&gt;linux/arm64&lt;/li&gt;
&lt;li&gt;linux/arm/v7&lt;/li&gt;
&lt;li&gt;linux/arm/v6&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Source Repository and Builds&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;The &lt;a href="https://github.com/cicirello/pyaction" rel="noopener noreferrer"&gt;source repository&lt;/a&gt; is
maintained…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/cicirello/pyaction" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Where You Can Find Me
&lt;/h2&gt;

&lt;p&gt;Follow me &lt;a href="https://dev.to/cicirello"&gt;here on DEV&lt;/a&gt; and on &lt;a href="https://github.com/cicirello" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;:&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__469122"&gt;
    &lt;a href="/cicirello" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F469122%2F085f1955-378c-49cb-866b-21b9ec1f1439.jpeg" alt="cicirello image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/cicirello"&gt;Vincent A. Cicirello&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/cicirello"&gt;Researcher and educator in A.I., algorithms, evolutionary computation, machine learning, and swarm intelligence&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>python</category>
      <category>docker</category>
      <category>github</category>
      <category>showdev</category>
    </item>
    <item>
      <title>gnu-on-alpine 3.22.1 and alpine-plus-plus 3.22.1 Released</title>
      <dc:creator>Vincent A. Cicirello</dc:creator>
      <pubDate>Thu, 14 Aug 2025 17:24:43 +0000</pubDate>
      <link>https://dev.to/cicirello/gnu-on-alpine-3221-and-alpine-plus-plus-3221-released-4cib</link>
      <guid>https://dev.to/cicirello/gnu-on-alpine-3221-and-alpine-plus-plus-3221-released-4cib</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;I just released &lt;a href="https://github.com/cicirello/gnu-on-alpine" rel="noopener noreferrer"&gt;gnu-on-alpine&lt;/a&gt; 3.22.1 and &lt;a href="https://github.com/cicirello/alpine-plus-plus" rel="noopener noreferrer"&gt;alpine-plus-plus&lt;/a&gt; 3.22.1, &lt;a href="https://dev.to/cicirello/gnu-on-alpine-and-alpine-plus-plus-two-lightweight-containers-for-implementing-github-container-actions-with-shell-scripting-360i"&gt;two lightweight containers for implementing GitHub Container Actions with shell scripting&lt;/a&gt;. Both containers are built upon &lt;a href="https://hub.docker.com/_/alpine" rel="noopener noreferrer"&gt;alpine&lt;/a&gt; to keep the image size small for fast loading within GitHub Actions, and both are preinstalled with bash, coreutils, findutils, and gawk; and alpine-plus-plus is additionally preinstalled with git. The Docker version tags correspond to the version of Alpine used as the base. Both are available via either Docker Hub or the GitHub Container Registry.&lt;/p&gt;

&lt;h2&gt;
  
  
  Changelog gnu-on-alpine 3.22.1 - 2025-7-16
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Changed
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Bumped alpine to 3.22.1.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Changelog alpine-plus-plus 3.22.1 - 2025-7-16
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Changed
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Bumped alpine to 3.22.1.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installation and Usage
&lt;/h2&gt;

&lt;p&gt;You can pull &lt;a href="https://actions.cicirello.org/gnu-on-alpine/" rel="noopener noreferrer"&gt;gnu-on-alpine&lt;/a&gt; from either Docker Hub or the GitHub Container Registry with the following commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull cicirello/gnu-on-alpine:latest
docker pull ghcr.io/cicirello/gnu-on-alpine:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You can pull &lt;a href="https://actions.cicirello.org/alpine-plus-plus/" rel="noopener noreferrer"&gt;alpine-plus-plus&lt;/a&gt; from either Docker Hub or the GitHub Container Registry with the following commands:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull cicirello/alpine-plus-plus:latest
docker pull ghcr.io/cicirello/alpine-plus-plus:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;To use gnu-on-alpine as a base image in a Dockerfile (via Docker Hub):&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; cicirello/gnu-on-alpine:latest&lt;/span&gt;

&lt;span class="c"&gt;# The rest of your Dockerfile would go here.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Or, from the GitHub Container Registry with:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; ghcr.io/cicirello/gnu-on-alpine:latest&lt;/span&gt;

&lt;span class="c"&gt;# The rest of your Dockerfile would go here.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;To use alpine-plus-plus as a base image in a Dockerfile (via Docker Hub):&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; cicirello/alpine-plus-plus:latest&lt;/span&gt;

&lt;span class="c"&gt;# The rest of your Dockerfile would go here.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Or, from the GitHub Container Registry with:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; ghcr.io/cicirello/alpine-plus-plus:latest&lt;/span&gt;

&lt;span class="c"&gt;# The rest of your Dockerfile would go here.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  More Information
&lt;/h2&gt;

&lt;p&gt;For more information, see their GitHub repositories and project pages. Please consider starring on GitHub.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://actions.cicirello.org/alpine-plus-plus/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Factions.cicirello.org%2Fimages%2Falpine-plus-plus.png" height="auto" class="m-0"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://actions.cicirello.org/alpine-plus-plus/" rel="noopener noreferrer" class="c-link"&gt;
            alpine-plus-plus - A lightweight docker image for shell scripting with git and GNU tools
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            The alpine-plus-plus Docker container is a lightweight Docker container for shell scripting with git and GNU tools (bash, coreutils, findutils, gawk). It is built atop an Alpine Linux base to keep image size small.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Factions.cicirello.org%2Fimages%2Ffavicon.svg"&gt;
          actions.cicirello.org
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;




&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://actions.cicirello.org/gnu-on-alpine/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Factions.cicirello.org%2Fimages%2Fgnu-on-alpine.png" height="auto" class="m-0"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://actions.cicirello.org/gnu-on-alpine/" rel="noopener noreferrer" class="c-link"&gt;
            gnu-on-alpine - A lightweight docker image for shell scripting with GNU tools
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            The gnu-on-alpine Docker container is a lightweight Docker container for shell scripting with GNU tools (bash, coreutils, findutils, gawk). It is built atop an Alpine Linux base to keep image size small.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Factions.cicirello.org%2Fimages%2Ffavicon.svg"&gt;
          actions.cicirello.org
        &lt;/div&gt;
      &lt;/div&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://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/cicirello" rel="noopener noreferrer"&gt;
        cicirello
      &lt;/a&gt; / &lt;a href="https://github.com/cicirello/alpine-plus-plus" rel="noopener noreferrer"&gt;
        alpine-plus-plus
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A lightweight Docker container for shell scripting with git and GNU tools on Alpine Linux
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;alpine-plus-plus&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/cicirello/alpine-plus-plus#alpine-plus-plus" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/51385aef37d19168a6259b517f7cb40241bf3ebbf4a067bde3a44c49bb3a42cf/68747470733a2f2f616374696f6e732e6369636972656c6c6f2e6f72672f696d616765732f616c70696e652d706c75732d706c75733634302e706e67" alt="alpine-plus-plus - A lightweight Docker container for shell scripting with git and GNU tools on Alpine Linux)"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Website for our GitHub Actions and tools for developing them: &lt;a href="https://actions.cicirello.org/" rel="nofollow noopener noreferrer"&gt;https://actions.cicirello.org/&lt;/a&gt;&lt;/p&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Docker Hub&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;
&lt;a href="https://hub.docker.com/r/cicirello/alpine-plus-plus" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/724198ba2f24e0d5f5e8919581309454cdafbba9ce29a05c58d72771ca964d30/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f762f6369636972656c6c6f2f616c70696e652d706c75732d706c75733f6c6162656c3d446f636b6572253230487562266c6f676f3d646f636b6572" alt="Docker Image Version (latest by date)"&gt;&lt;/a&gt; &lt;a href="https://hub.docker.com/r/cicirello/alpine-plus-plus" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/49f9e09f341b3a4c2cc6a17d371719616414fbd8f48c693ade136a250431745b/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6369636972656c6c6f2f616c70696e652d706c75732d706c75733f6c6f676f3d646f636b6572" alt="Docker Pulls"&gt;&lt;/a&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/cicirello/alpine-plus-plus/releases" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/0e74bd7e95b651054359d254a62284850adcda184c896aeb7a8093dc2fb1c0ab/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f6369636972656c6c6f2f616c70696e652d706c75732d706c75733f6c6f676f3d676974687562" alt="GitHub release (latest by date)"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Image Stats&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://hub.docker.com/r/cicirello/alpine-plus-plus" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/a089ae1906d58e0d4044861e3f8d561e7dceeebee4d33f569c4f29f7998974a8/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f696d6167652d73697a652f6369636972656c6c6f2f616c70696e652d706c75732d706c75733f6c6f676f3d646f636b6572" alt="Docker Image Size (latest by date)"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Build Status&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/cicirello/alpine-plus-plus/actions/workflows/docker-image.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/cicirello/alpine-plus-plus/workflows/build/badge.svg" alt="build"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/cicirello/alpine-plus-plus/blob/master/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/ae6e3aa8924d8f3f3d3cee70d4034b644f7aed17dfe50049b466416aa8155e13/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6369636972656c6c6f2f616c70696e652d706c75732d706c7573" alt="GitHub"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://github.com/sponsors/cicirello" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/c0d2fd64144b9ee8d8658f81be36c989670a3aa0cf0640afa32b920f0d7ab3c5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f73706f6e736f722d3330333633443f6c6f676f3d4769744875622d53706f6e736f7273266c6f676f436f6c6f723d23454134414141" alt="GitHub Sponsors"&gt;&lt;/a&gt; &lt;a href="https://liberapay.com/cicirello" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/0db56d2f079586db4447ffe792cd14f076ea87a394644500b3974037e8af20a3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c69626572617061792d4636433931353f6c6f676f3d6c6962657261706179266c6f676f436f6c6f723d626c61636b" alt="Liberapay"&gt;&lt;/a&gt; &lt;a href="https://ko-fi.com/cicirello" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7a2311e958761537ca9572c95228e0022a675c9adb1f7d4cda9f57f8bfe8922e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4b6f2d2d66692d4631363036313f6c6f676f3d6b6f2d6669266c6f676f436f6c6f723d7768697465" alt="Ko-Fi"&gt;&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Summary&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The alpine-plus-plus Docker image is motivated by
Github-actions implemented primarily with bash
and shell utilities, but is also potentially
applicable to any use-case where you primarily
need bash and GNU tools like gawk, etc, as well
as git, but also want to keep the image size
relatively small. Alpine Linux is used as the base
image. Alone, Alpine almost suits this purpose
However, it lacks the bash shell, and commonly
used GNU tools such as findutils, gawk, etc. It
also lacks git. The alpine-plus-plus image adds
git, bash, findutils, coreutils, and gawk on top
of Alpine Linux.&lt;/p&gt;
&lt;p&gt;For more information, see my blog post on DEV: &lt;a href="https://dev.to/cicirello/gnu-on-alpine-and-alpine-plus-plus-two-lightweight-containers-for-implementing-github-container-actions-with-shell-scripting-360i" rel="nofollow"&gt;gnu-on-alpine and alpine-plus-plus: Two Lightweight Containers for Implementing GitHub Container Actions with Shell Scripting&lt;/a&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Multiplatform Image&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;alpine-plus-plus has the following platforms…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/cicirello/alpine-plus-plus" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&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://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/cicirello" rel="noopener noreferrer"&gt;
        cicirello
      &lt;/a&gt; / &lt;a href="https://github.com/cicirello/gnu-on-alpine" rel="noopener noreferrer"&gt;
        gnu-on-alpine
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A lightweight Docker container for shell scripting with GNU tools on Alpine Linux
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;gnu-on-alpine&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/cicirello/gnu-on-alpine#gnu-on-alpine" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/17aeb62adaccd70377cb9dece11bf53bd342653420df97b4aef64b87c9d1cc50/68747470733a2f2f616374696f6e732e6369636972656c6c6f2e6f72672f696d616765732f676e752d6f6e2d616c70696e653634302e706e67" alt="gnu-on-alpine - A lightweight Docker container for shell scripting with GNU tools on Alpine Linux)"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Website for our GitHub Actions and tools for developing them: &lt;a href="https://actions.cicirello.org/" rel="nofollow noopener noreferrer"&gt;https://actions.cicirello.org/&lt;/a&gt;&lt;/p&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Docker Hub&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;
&lt;a href="https://hub.docker.com/r/cicirello/gnu-on-alpine" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/2f718e4e8c2579b9f6b9c1f010faee3c1680ee906f8020342b3f0d8fe8cd5fa9/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f762f6369636972656c6c6f2f676e752d6f6e2d616c70696e653f6c6162656c3d446f636b6572253230487562266c6f676f3d646f636b6572" alt="Docker Image Version (latest by date)"&gt;&lt;/a&gt; &lt;a href="https://hub.docker.com/r/cicirello/gnu-on-alpine" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/a1330884950ff198f828f83b2d04a0abbd8bc1bc7fadc02bf95b1013b59b82c7/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6369636972656c6c6f2f676e752d6f6e2d616c70696e653f6c6f676f3d646f636b6572" alt="Docker Pulls"&gt;&lt;/a&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/cicirello/gnu-on-alpine/releases" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5d830211c3c3c2a980602938d8b68fa71f961317e788d2982282a075c6602a44/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f6369636972656c6c6f2f676e752d6f6e2d616c70696e653f6c6f676f3d676974687562" alt="GitHub release (latest by date)"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Image Stats&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://hub.docker.com/r/cicirello/gnu-on-alpine" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/1fe75ea26bee925ab2210f965563aa847991d6184c028087d58930a1e3f7a17f/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f696d6167652d73697a652f6369636972656c6c6f2f676e752d6f6e2d616c70696e653f6c6f676f3d646f636b6572" alt="Docker Image Size (latest by date)"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Build Status&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/cicirello/gnu-on-alpine/actions/workflows/docker-image.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/cicirello/gnu-on-alpine/workflows/build/badge.svg" alt="build"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/cicirello/gnu-on-alpine/blob/master/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/519c9ce7ebe3a145abc28f7a6bfb3751055de1308eb078ba6a7457bfcd53f72e/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6369636972656c6c6f2f676e752d6f6e2d616c70696e65" alt="License"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://github.com/sponsors/cicirello" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/c0d2fd64144b9ee8d8658f81be36c989670a3aa0cf0640afa32b920f0d7ab3c5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f73706f6e736f722d3330333633443f6c6f676f3d4769744875622d53706f6e736f7273266c6f676f436f6c6f723d23454134414141" alt="GitHub Sponsors"&gt;&lt;/a&gt; &lt;a href="https://liberapay.com/cicirello" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/0db56d2f079586db4447ffe792cd14f076ea87a394644500b3974037e8af20a3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c69626572617061792d4636433931353f6c6f676f3d6c6962657261706179266c6f676f436f6c6f723d626c61636b" alt="Liberapay"&gt;&lt;/a&gt; &lt;a href="https://ko-fi.com/cicirello" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7a2311e958761537ca9572c95228e0022a675c9adb1f7d4cda9f57f8bfe8922e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4b6f2d2d66692d4631363036313f6c6f676f3d6b6f2d6669266c6f676f436f6c6f723d7768697465" alt="Ko-Fi"&gt;&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Summary&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The gnu-on-alpine Docker image is designed
to support shell scripting using GNU tools
such as the bash shell, gawk, coreutils, and
findutils, while keeping the image size relatively
small. Alpine Linux is used as the base
image. The gnu-on-alpine image adds
bash, findutils, coreutils, and gawk on top
of Alpine Linux.&lt;/p&gt;
&lt;p&gt;For more information, see my blog post on DEV: &lt;a href="https://dev.to/cicirello/gnu-on-alpine-and-alpine-plus-plus-two-lightweight-containers-for-implementing-github-container-actions-with-shell-scripting-360i" rel="nofollow"&gt;gnu-on-alpine and alpine-plus-plus: Two Lightweight Containers for Implementing GitHub Container Actions with Shell Scripting&lt;/a&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Multiplatform Image&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;gnu-on-alpine has the following platforms available:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;linux/386&lt;/li&gt;
&lt;li&gt;linux/amd64&lt;/li&gt;
&lt;li&gt;linux/arm/v6&lt;/li&gt;
&lt;li&gt;linux/arm/v7&lt;/li&gt;
&lt;li&gt;linux/arm64&lt;/li&gt;
&lt;li&gt;linux/ppc64le&lt;/li&gt;
&lt;li&gt;linux/s390x&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Source Repository and Builds&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;The &lt;a href="https://github.com/cicirello/gnu-on-alpine" rel="noopener noreferrer"&gt;source repository&lt;/a&gt; is maintained on GitHub.  The images are built on Github and pushed to &lt;a href="https://hub.docker.com/r/cicirello/gnu-on-alpine" rel="nofollow noopener noreferrer"&gt;Docker Hub&lt;/a&gt;, as well as the &lt;a href="https://github.com/cicirello?ecosystem=container&amp;amp;tab=packages" rel="noopener noreferrer"&gt;Github Container Registry&lt;/a&gt; using Github Actions.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Docker Tags and Versioning Scheme&lt;/h2&gt;…&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/cicirello/gnu-on-alpine" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Where You Can Find Me
&lt;/h2&gt;

&lt;p&gt;Follow me &lt;a href="https://dev.to/cicirello"&gt;here on DEV&lt;/a&gt; and on &lt;a href="https://github.com/cicirello" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;:&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__469122"&gt;
    &lt;a href="/cicirello" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F469122%2F085f1955-378c-49cb-866b-21b9ec1f1439.jpeg" alt="cicirello image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/cicirello"&gt;Vincent A. Cicirello&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/cicirello"&gt;Researcher and educator in A.I., algorithms, evolutionary computation, machine learning, and swarm intelligence&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>docker</category>
      <category>linux</category>
      <category>github</category>
      <category>showdev</category>
    </item>
    <item>
      <title>generate-sitemap 1.10.3 Released</title>
      <dc:creator>Vincent A. Cicirello</dc:creator>
      <pubDate>Thu, 14 Aug 2025 16:58:42 +0000</pubDate>
      <link>https://dev.to/cicirello/generate-sitemap-1103-released-4b4b</link>
      <guid>https://dev.to/cicirello/generate-sitemap-1103-released-4b4b</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;I just released &lt;a href="https://github.com/cicirello/generate-sitemap" rel="noopener noreferrer"&gt;generate-sitemap&lt;/a&gt; 1.10.3, a &lt;a href="https://dev.to/cicirello/generate-an-xml-sitemap-for-a-static-website-in-github-actions-20do"&gt;GitHub Action for generating XML sitemaps for static websites&lt;/a&gt;. The generate-sitemap GitHub Action is implemented in Python, and generates an XML sitemap by crawling the GitHub repository containing the html of the site, using commit dates to generate &lt;code&gt;&amp;lt;lastmod&amp;gt;&lt;/code&gt; tags in the sitemap. It automatically excludes any pages that have &lt;code&gt;noindex&lt;/code&gt; directives in page head meta tags, as well as any pages that match &lt;code&gt;Disallow&lt;/code&gt; rules in the site's robots.txt, or any pages in a user-specified list. &lt;/p&gt;

&lt;h2&gt;
  
  
  Changelog 1.10.3 - 2025-08-14
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Fixed
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Fixed failure to get last commit dates in case of nested repository checkouts.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Dependencies
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Bump &lt;a href="https://github.com/cicirello/pyaction" rel="noopener noreferrer"&gt;cicirello/pyaction&lt;/a&gt; to &lt;code&gt;3.13.6-gh-2.76.2&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  More Information
&lt;/h2&gt;

&lt;p&gt;For more information, see generate-sitemap's webpage:&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://actions.cicirello.org/generate-sitemap/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Factions.cicirello.org%2Fimages%2Fgenerate-sitemap.png" height="auto" class="m-0"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://actions.cicirello.org/generate-sitemap/" rel="noopener noreferrer" class="c-link"&gt;
            generate-sitemap - Generate an XML sitemap for a GitHub pages site using GitHub Actions
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            The generate-sitemap GitHub action generates a sitemap for a website hosted on GitHub Pages. Supports both xml and txt sitemaps. Uses the last commit date of each file to generate the lastmod tags in XML sitemaps. Parses robots.txt and scans html files for noindex directives, excluding URLs if noindex directives or disallows found.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Factions.cicirello.org%2Fimages%2Ffavicon.svg"&gt;
          actions.cicirello.org
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Please consider starring generate-sitemap's GitHub repository:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/cicirello" rel="noopener noreferrer"&gt;
        cicirello
      &lt;/a&gt; / &lt;a href="https://github.com/cicirello/generate-sitemap" rel="noopener noreferrer"&gt;
        generate-sitemap
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Generate an XML sitemap for a GitHub Pages site using GitHub Actions
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;generate-sitemap&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/cicirello/generate-sitemap#generate-sitemap" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/78f311a7eb755e50c74465bc1c6b9b65d8a9152d7572a270189cd89e0cbaad80/68747470733a2f2f616374696f6e732e6369636972656c6c6f2e6f72672f696d616765732f67656e65726174652d736974656d61703634302e706e67" alt="cicirello/generate-sitemap - Generate XML sitemaps for static websites in GitHub Actions"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Check out all of our GitHub Actions: &lt;a href="https://actions.cicirello.org/" rel="nofollow noopener noreferrer"&gt;https://actions.cicirello.org/&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;About&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;GitHub Actions&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;
&lt;a href="https://github.com/marketplace/actions/generate-sitemap" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9cd1bc822a12065d02a9e891b54ac9d5eaaaf3fcaf35d90ce87dba32bb959cb5/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f6369636972656c6c6f2f67656e65726174652d736974656d61703f6c6162656c3d4d61726b6574706c616365266c6f676f3d476974487562" alt="GitHub release (latest by date)"&gt;&lt;/a&gt; &lt;a href="https://github.com/cicirello/generate-sitemap/network/dependents" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/0e7cbe30efb9a5876ba1ef0b37caa86b9e7da3eb2a7901af650baa924d5cdb2f/68747470733a2f2f62616467656e2e6e65742f6769746875622f646570656e64656e74732d7265706f2f6369636972656c6c6f2f67656e65726174652d736974656d61703f69636f6e3d676974687562266c6162656c3d757365642532306279" alt="Count of Action Users"&gt;&lt;/a&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Build Status&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://github.com/cicirello/generate-sitemap/actions/workflows/build.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/cicirello/generate-sitemap/actions/workflows/build.yml/badge.svg" alt="build"&gt;&lt;/a&gt; &lt;a href="https://github.com/cicirello/generate-sitemap/actions/workflows/codeql-analysis.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/cicirello/generate-sitemap/actions/workflows/codeql-analysis.yml/badge.svg" alt="CodeQL"&gt;&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Source Info&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://github.com/cicirello/generate-sitemap/blob/master/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/cab9b0d4c713256cb2cfd2689905aba66793aaa32d1591f98f8a7b32aa4d701b/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6369636972656c6c6f2f67656e65726174652d736974656d6170" alt="GitHub"&gt;&lt;/a&gt; &lt;a href="https://github.com/cicirello/generate-sitemap" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/d7fcb807def73cf0edebe2bbf1dd8709e82720e71384437632885e47f2cdb565/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c616e6775616765732f746f702f6369636972656c6c6f2f67656e65726174652d736974656d6170" alt="GitHub top language"&gt;&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://github.com/sponsors/cicirello" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/c0d2fd64144b9ee8d8658f81be36c989670a3aa0cf0640afa32b920f0d7ab3c5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f73706f6e736f722d3330333633443f6c6f676f3d4769744875622d53706f6e736f7273266c6f676f436f6c6f723d23454134414141" alt="GitHub Sponsors"&gt;&lt;/a&gt; &lt;a href="https://liberapay.com/cicirello" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/0db56d2f079586db4447ffe792cd14f076ea87a394644500b3974037e8af20a3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c69626572617061792d4636433931353f6c6f676f3d6c6962657261706179266c6f676f436f6c6f723d626c61636b" alt="Liberapay"&gt;&lt;/a&gt; &lt;a href="https://ko-fi.com/cicirello" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7a2311e958761537ca9572c95228e0022a675c9adb1f7d4cda9f57f8bfe8922e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4b6f2d2d66692d4631363036313f6c6f676f3d6b6f2d6669266c6f676f436f6c6f723d7768697465" alt="Ko-Fi"&gt;&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;The generate-sitemap GitHub action generates a sitemap for a website hosted on GitHub
Pages, and has the following features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Support for both xml and txt sitemaps (you choose using one of the action's inputs).&lt;/li&gt;
&lt;li&gt;When generating an xml sitemap, it uses the last commit date of
each file to generate the &lt;code&gt;&amp;lt;lastmod&amp;gt;&lt;/code&gt; tag in the sitemap entry. If the file
was created during that workflow run, but not yet committed, then it instead uses
the current date (however, we recommend if possible committing newly created files first).&lt;/li&gt;
&lt;li&gt;Supports URLs for html and pdf files in the sitemap, and has inputs
to control the included file types (defaults include both html and pdf files in the sitemap).&lt;/li&gt;
&lt;li&gt;Now also supports including URLs for a user specified list of
additional file extensions in the sitemap.&lt;/li&gt;
&lt;li&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/cicirello/generate-sitemap" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Where You Can Find Me
&lt;/h2&gt;

&lt;p&gt;Follow me &lt;a href="https://dev.to/cicirello"&gt;here on DEV&lt;/a&gt; and on &lt;a href="https://github.com/cicirello" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;:&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__469122"&gt;
    &lt;a href="/cicirello" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F469122%2F085f1955-378c-49cb-866b-21b9ec1f1439.jpeg" alt="cicirello image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/cicirello"&gt;Vincent A. Cicirello&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/cicirello"&gt;Researcher and educator in A.I., algorithms, evolutionary computation, machine learning, and swarm intelligence&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>github</category>
      <category>webdev</category>
      <category>showdev</category>
      <category>python</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Vincent A. Cicirello</dc:creator>
      <pubDate>Sat, 12 Jul 2025 12:37:50 +0000</pubDate>
      <link>https://dev.to/cicirello/-1be7</link>
      <guid>https://dev.to/cicirello/-1be7</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/alvaromontoro/css-art-drawing-yoda-with-css-2n6c" class="crayons-story__hidden-navigation-link"&gt;CSS Art: Drawing Yoda with CSS&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/alvaromontoro" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F161327%2F2ff05281-db58-4dcb-946a-4b679e4a266b.jpeg" alt="alvaromontoro profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/alvaromontoro" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Alvaro Montoro
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Alvaro Montoro
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png"&gt;&lt;/a&gt;
              
              &lt;div id="story-author-preview-content-2660730" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/alvaromontoro" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F161327%2F2ff05281-db58-4dcb-946a-4b679e4a266b.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Alvaro Montoro&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/alvaromontoro/css-art-drawing-yoda-with-css-2n6c" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 6 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/alvaromontoro/css-art-drawing-yoda-with-css-2n6c" id="article-link-2660730"&gt;
          CSS Art: Drawing Yoda with CSS
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/showdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;showdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/css"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;css&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/html"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;html&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/alvaromontoro/css-art-drawing-yoda-with-css-2n6c" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;24&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/alvaromontoro/css-art-drawing-yoda-with-css-2n6c#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              12&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>css</category>
      <category>html</category>
      <category>webdev</category>
      <category>showdev</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Vincent A. Cicirello</dc:creator>
      <pubDate>Thu, 15 May 2025 12:36:38 +0000</pubDate>
      <link>https://dev.to/cicirello/-2me8</link>
      <guid>https://dev.to/cicirello/-2me8</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/github/speed-up-your-cicd-arm-64-runners-for-github-actions-21g8" class="crayons-story__hidden-navigation-link"&gt;Speed Up Your CI/CD: ARM 64 Runners for GitHub Actions&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;
          &lt;a class="crayons-logo crayons-logo--l" href="/github"&gt;
            &lt;img alt="GitHub logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F2575%2F3da37f64-b46e-4fa5-bf86-01b63ba5f57b.png" class="crayons-logo__image"&gt;
          &lt;/a&gt;

          &lt;a href="/andreagriffiths11" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F244800%2Fcc8eddc0-f6ec-4ed0-85c9-9dd91204bc57.jpg" alt="andreagriffiths11 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/andreagriffiths11" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Andrea Liliana Griffiths
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Andrea Liliana Griffiths
                
              
              &lt;div id="story-author-preview-content-2490979" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/andreagriffiths11" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F244800%2Fcc8eddc0-f6ec-4ed0-85c9-9dd91204bc57.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Andrea Liliana Griffiths&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

            &lt;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/github" class="crayons-story__secondary fw-medium"&gt;GitHub&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/github/speed-up-your-cicd-arm-64-runners-for-github-actions-21g8" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;May 15 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/github/speed-up-your-cicd-arm-64-runners-for-github-actions-21g8" id="article-link-2490979"&gt;
          Speed Up Your CI/CD: ARM 64 Runners for GitHub Actions
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/githubactions"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;githubactions&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/cicd"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;cicd&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devops"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devops&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/github/speed-up-your-cicd-arm-64-runners-for-github-actions-21g8" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;18&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/github/speed-up-your-cicd-arm-64-runners-for-github-actions-21g8#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              1&lt;span class="hidden s:inline"&gt; comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>programming</category>
      <category>githubactions</category>
      <category>cicd</category>
      <category>devops</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Vincent A. Cicirello</dc:creator>
      <pubDate>Thu, 17 Apr 2025 11:56:45 +0000</pubDate>
      <link>https://dev.to/cicirello/-48c5</link>
      <guid>https://dev.to/cicirello/-48c5</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/mishmanners/github-issues-or-github-discussions-whats-the-difference-and-when-should-you-use-each-one-4lhd" class="crayons-story__hidden-navigation-link"&gt;GitHub Issues or GitHub Discussions? What's the difference, and when should you use each one?&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/mishmanners" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F397557%2F4eb4ece3-2832-407c-b933-f1b4b58829e6.jpg" alt="mishmanners profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/mishmanners" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Michelle Duke
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Michelle Duke
                
              
              &lt;div id="story-author-preview-content-2377282" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/mishmanners" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F397557%2F4eb4ece3-2832-407c-b933-f1b4b58829e6.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Michelle Duke&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/mishmanners/github-issues-or-github-discussions-whats-the-difference-and-when-should-you-use-each-one-4lhd" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 17 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/mishmanners/github-issues-or-github-discussions-whats-the-difference-and-when-should-you-use-each-one-4lhd" id="article-link-2377282"&gt;
          GitHub Issues or GitHub Discussions? What's the difference, and when should you use each one?
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/github"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;github&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/tutorial"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;tutorial&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/community"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;community&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/mishmanners/github-issues-or-github-discussions-whats-the-difference-and-when-should-you-use-each-one-4lhd" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;2&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/mishmanners/github-issues-or-github-discussions-whats-the-difference-and-when-should-you-use-each-one-4lhd#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>github</category>
      <category>tutorial</category>
      <category>community</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Vincent A. Cicirello</dc:creator>
      <pubDate>Thu, 13 Mar 2025 12:19:32 +0000</pubDate>
      <link>https://dev.to/cicirello/-3e32</link>
      <guid>https://dev.to/cicirello/-3e32</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/nfrankel" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F362557%2F479d9637-2db0-4b0a-8070-edbe538c4180.jpg" alt="nfrankel"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/nfrankel/improving-mavens-dependencyanalyze-or-not-2k16" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Improving Maven's dependency:analyze... or not&lt;/h2&gt;
      &lt;h3&gt;Nicolas Fränkel ・ Mar 13&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#java&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#maven&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#springboot&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>java</category>
      <category>maven</category>
      <category>springboot</category>
    </item>
    <item>
      <title>pyaction 4.31.0 Released</title>
      <dc:creator>Vincent A. Cicirello</dc:creator>
      <pubDate>Sat, 08 Jun 2024 19:13:49 +0000</pubDate>
      <link>https://dev.to/cicirello/pyaction-4310-released-548a</link>
      <guid>https://dev.to/cicirello/pyaction-4310-released-548a</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;I just released &lt;a href="https://github.com/cicirello/pyaction"&gt;pyaction&lt;/a&gt; 4.31.0, a &lt;a href="https://dev.to/cicirello/pyaction-a-docker-container-with-python-git-and-the-github-cli-930"&gt;Docker container with Python, git, and the GitHub CLI&lt;/a&gt;. You can pull pyaction from either the &lt;a href="https://github.com/cicirello/pyaction/pkgs/container/pyaction"&gt;GitHub Container Registry&lt;/a&gt; or from &lt;a href="https://hub.docker.com/r/cicirello/pyaction"&gt;Docker Hub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This release updates the GitHub CLI included in the container to 2.50.0.&lt;/p&gt;

&lt;h2&gt;
  
  
  Changelog 4.31.0 - 2024-06-08
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Changed
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Bumped GitHub CLI to 2.50.0.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Current Version List
&lt;/h2&gt;

&lt;p&gt;This latest release of pyaction includes the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python 3.12.3&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/cli/cli/releases/tag/v2.50.0"&gt;GitHub CLI 2.50.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;git 2.39.2&lt;/li&gt;
&lt;li&gt;curl 7.88.1&lt;/li&gt;
&lt;li&gt;gpg 2.2.40&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  More Information
&lt;/h2&gt;

&lt;p&gt;Please consider starring pyaction's GitHub repository:&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/cicirello"&gt;
        cicirello
      &lt;/a&gt; / &lt;a href="https://github.com/cicirello/pyaction"&gt;
        pyaction
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A Docker container with Python, git, and the Github CLI
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;pyaction&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/cicirello/pyaction#pyaction"&gt;&lt;img src="https://camo.githubusercontent.com/f8723c96c5e45e80a30bb0ed36a3a964a73e4c6d3c63ac7ff91354236dac0198/68747470733a2f2f616374696f6e732e6369636972656c6c6f2e6f72672f696d616765732f7079616374696f6e3634302e706e67" alt="pyaction - A Docker container with Python, git, and the GitHub CLI"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Website for our GitHub Actions and tools for developing them: &lt;a href="https://actions.cicirello.org/" rel="nofollow"&gt;https://actions.cicirello.org/&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Summary&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Docker Hub&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;
&lt;a href="https://hub.docker.com/r/cicirello/pyaction" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/3988f6ba49522b7ef5ab06d46c7266e3cf9576087cf703980a08838d5367a753/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f762f6369636972656c6c6f2f7079616374696f6e3f6c6162656c3d446f636b6572253230487562266c6f676f3d646f636b6572" alt="Docker Image Version (latest by date)"&gt;&lt;/a&gt; &lt;a href="https://hub.docker.com/r/cicirello/pyaction" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/1fb7e2d54d6511210b035b887d8c16b23da8edfad6c4d4f463ddaee7f2b7734c/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f6369636972656c6c6f2f7079616374696f6e3f6c6f676f3d646f636b6572" alt="Docker Pulls"&gt;&lt;/a&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/cicirello/pyaction/releases"&gt;&lt;img src="https://camo.githubusercontent.com/2ec36e53975cc77f17cdce945cac6f06c2bdea6eedaf7c38ef799c0e6aafee13/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f6369636972656c6c6f2f7079616374696f6e3f6c6f676f3d676974687562" alt="GitHub release (latest by date)"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Image Stats&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://hub.docker.com/r/cicirello/pyaction" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/7b6741dfe4bf70429dd065f034d70fca6d175c12fca77f5cd1e7f47ac4e5b2be/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f696d6167652d73697a652f6369636972656c6c6f2f7079616374696f6e3f6c6f676f3d646f636b6572" alt="Docker Image Size (latest by date)"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Build Status&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/cicirello/pyaction/actions/workflows/docker-image.yml"&gt;&lt;img src="https://github.com/cicirello/pyaction/workflows/build/badge.svg" alt="build"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/cicirello/pyactionLICENSE"&gt;&lt;img src="https://camo.githubusercontent.com/9418052d09c615afc5f9d4d1b13ad367596b8467506317624dc0a6b7f29f0446/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6369636972656c6c6f2f7079616374696f6e" alt="License"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://github.com/sponsors/cicirello"&gt;&lt;img src="https://camo.githubusercontent.com/cca7a14872cac8a42772e82c53af742f6b6a8d9278d1163f8c78ac80f8fccd5d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f73706f6e736f722d3330333633443f6c6f676f3d4769744875622d53706f6e736f7273266c6f676f436f6c6f723d23454134414141" alt="GitHub Sponsors"&gt;&lt;/a&gt; &lt;a href="https://liberapay.com/cicirello" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/abc4c84cfbce0267aae104d9b39bf9b601f645bb90f55524eb9111f1503bce5b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c69626572617061792d4636433931353f6c6f676f3d6c6962657261706179266c6f676f436f6c6f723d626c61636b" alt="Liberapay"&gt;&lt;/a&gt; &lt;a href="https://ko-fi.com/cicirello" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/f3e43b7bec8ce882568d1809de65dd6d763d6ab20e4b74cae01681824fce6551/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4b6f2d2d66692d4631363036313f6c6f676f3d6b6f2d6669266c6f676f436f6c6f723d7768697465" alt="Ko-Fi"&gt;&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;This Docker image is designed to support implementing Github Actions
with Python. As of version 4.0.0., it starts with
the &lt;a href="https://hub.docker.com/_/python" rel="nofollow"&gt;official python docker image&lt;/a&gt; as the base
which is a Debian OS. It specifically uses python:3-slim to keep the image size
down for faster loading of Github Actions that use pyaction. On top of the
base, we've installed &lt;a href="https://curl.se/" rel="nofollow"&gt;curl&lt;/a&gt;,
&lt;a href="https://gnupg.org/" rel="nofollow"&gt;gpg&lt;/a&gt;, &lt;a href="https://git-scm.com/" rel="nofollow"&gt;git&lt;/a&gt;, and the
&lt;a href="https://cli.github.com/"&gt;GitHub CLI&lt;/a&gt;. We added curl and gpg because they
are needed to install the GitHub CLI, and they may come in handy anyway
(especially curl) when implementing a GitHub Action.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Blog Post on DEV:&lt;/strong&gt; &lt;a href="https://dev.to/cicirello/pyaction-a-docker-container-with-python-git-and-the-github-cli-930" rel="nofollow"&gt;pyaction: A Docker container with Python, git, and the GitHub CLI&lt;/a&gt;, posted on December 28, 2022. See a &lt;a href="https://github.com/cicirello/pyaction#blog-posts"&gt;list of additional blog posts&lt;/a&gt; later in this…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/cicirello/pyaction"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;For more information, see pyaction's webpage:&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://actions.cicirello.org/pyaction/" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--e4GEvZC---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://actions.cicirello.org/images/pyaction.png" height="400" class="m-0" width="800"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://actions.cicirello.org/pyaction/" rel="noopener noreferrer" class="c-link"&gt;
          pyaction - A Docker container with Python, git, and the Github CLI
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          The pyaction Docker container is designed to support implementing Github Actions with Python. It starts with the official python slim docker image as the base, using slim to keep the image size down for faster loading of Github Actions that use pyaction. The pyaction container also includes curl, gpg, git, and the GitHub CLI.
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://res.cloudinary.com/practicaldev/image/fetch/s--ynZbX_px--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://actions.cicirello.org/images/favicon.svg" width="32" height="32"&gt;
        actions.cicirello.org
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Where You Can Find Me
&lt;/h2&gt;

&lt;p&gt;Follow me &lt;a href="https://dev.to/cicirello"&gt;here on DEV&lt;/a&gt; and on &lt;a href="https://github.com/cicirello"&gt;GitHub&lt;/a&gt;:&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__469122"&gt;
    &lt;a href="/cicirello" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F469122%2F085f1955-378c-49cb-866b-21b9ec1f1439.jpeg" alt="cicirello image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/cicirello"&gt;Vincent A. Cicirello&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/cicirello"&gt;Researcher and educator in A.I., algorithms, evolutionary computation, machine learning, and swarm intelligence&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>github</category>
      <category>docker</category>
      <category>python</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
