<?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: Matthias Meyer</title>
    <description>The latest articles on DEV Community by Matthias Meyer (@thematchless).</description>
    <link>https://dev.to/thematchless</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%2F156730%2F10fa989a-0135-4ffa-925c-eda86a122c78.jpg</url>
      <title>DEV Community: Matthias Meyer</title>
      <link>https://dev.to/thematchless</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thematchless"/>
    <language>en</language>
    <item>
      <title>Hacktoberfest2022 - React18 Website and Nginx Docker image to show your visitors maintenance informations</title>
      <dc:creator>Matthias Meyer</dc:creator>
      <pubDate>Sat, 08 Oct 2022 13:45:24 +0000</pubDate>
      <link>https://dev.to/thematchless/hacktoberfest2022-react18-website-and-nginx-docker-image-to-show-your-visitors-some-informations-about-the-maintenance-4n02</link>
      <guid>https://dev.to/thematchless/hacktoberfest2022-react18-website-and-nginx-docker-image-to-show-your-visitors-some-informations-about-the-maintenance-4n02</guid>
      <description>&lt;p&gt;It's Hacktober 🎃 and the Hacktoberfest 🧑🏽‍💻 has started. I wanted do contribute with a small React maintenance website you can show to your visitors when you are doing some maintenance work to your services.&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2Fcr5nvp67vnyhov5tkeie.png" class="article-body-image-wrapper"&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%2Farticles%2Fcr5nvp67vnyhov5tkeie.png" alt="Image of the maintenance website" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For that i created a small &lt;a href="https://github.com/thematchless/website-maintenance-container/generate"&gt;template repository&lt;/a&gt; which you can easily clone and make it your own personal maintenance website.&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/thematchless"&gt;
        thematchless
      &lt;/a&gt; / &lt;a href="https://github.com/thematchless/website-maintenance-container"&gt;
        website-maintenance-container
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A small custom website maintenance container.
    &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;website-maintenance-container&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;The idea of this &lt;code&gt;website-maintenance-container&lt;/code&gt; is to have a fairly simple website that will display a friendly maintenance message whenever you update your services.&lt;/p&gt;
&lt;p&gt;To customize the displayed texts, you only have to change the text strings inside the &lt;a href="https://github.com/thematchless/website-maintenance-container/blob/main/src/info.json"&gt;info.json&lt;/a&gt; file.&lt;/p&gt;
&lt;div class="highlight highlight-source-json notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;{
  &lt;span class="pl-ent"&gt;"headline"&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;Website maintenance&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;,
  &lt;span class="pl-ent"&gt;"description"&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;We are back in a couple of minutes.&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;,
  &lt;span class="pl-ent"&gt;"favicon_url"&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;https://oflisback.github.io/react-favicon/img/github.ico&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;
}&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;commands&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;command&lt;/th&gt;
&lt;th&gt;description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;npm run start&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;to start the local dev environment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;npm run build&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;to build the production version&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;dockerfile included&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;To build this Website use the included Dockerfile:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;docker build -t website-maintenance-container:latest .&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;To test this Website use the following command:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;docker run -p 8000:80 website-maintenance-container:latest&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now open your browser and navigate to &lt;code&gt;127.0.0.1:8000&lt;/code&gt; to see the website.&lt;/p&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/thematchless/website-maintenance-container"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;If you only want to make basic adjustments, it is enough for you to adjust the texts strings inside the &lt;code&gt;info.json&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;You can change the headline, the description and the favicon.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"headline"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Website maintenance"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"We are back in a couple of minutes."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"favicon_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://oflisback.github.io/react-favicon/img/github.ico"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If you prefer to make some more adjustments you feel free to do it. It's a pretty basic React v18 Application with Prettier and ESLint. You can customize everything to your needs. &lt;/p&gt;

&lt;p&gt;If you are done with your changes you can use the included &lt;code&gt;Dockerfile&lt;/code&gt; to build a production ready image.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker build -t website-maintenance-container:latest .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;To test your freshly created docker image use the following command:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run -p 8000:80 website-maintenance-container:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now open your browser and navigate to &lt;code&gt;127.0.0.1:8000&lt;/code&gt; to see the website.&lt;/p&gt;
&lt;h2&gt;
  
  
  CI (Continues Integration)
&lt;/h2&gt;

&lt;p&gt;This repository comes with a preconfigured GitHub action that checks your commit history for commits that conform to the &lt;a href="https://www.conventionalcommits.org/en/v1.0.0/"&gt;Conventional Commits specification&lt;/a&gt;. When the workflow detects a new commit, it automatically determines the next version number and creates a freshly built Docker image of your maintenance application. This image is then transferred to the GitHub Container Registry and the Git version tags are automatically assigned based on the newly determined version number. 🥳&lt;/p&gt;

&lt;p&gt;If you want to use that GitHub action and the automatic push to the GitHub Container Repository you have to create a &lt;a href="https://github.com/settings/tokens"&gt;token for your action&lt;/a&gt; for your account. Name it &lt;code&gt;PAT_TOKEN&lt;/code&gt; or change it to your needs inside the &lt;code&gt;build.yml&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  CD (Continues Deployment)
&lt;/h2&gt;

&lt;p&gt;Now you have a nice little project with a working CI pipeline. You can easily extend the workflow with a CD statement inside the &lt;code&gt;build.yml&lt;/code&gt;. For this I had built a small independent &lt;a href="https://dev.to/thematchless/github-actions-hackathon-2021-bump-docker-image-version-on-a-remote-host-279h"&gt;GitHub action&lt;/a&gt; last year. 🎉&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/thematchless"&gt;
        thematchless
      &lt;/a&gt; / &lt;a href="https://github.com/thematchless/bump-image-version-action"&gt;
        bump-image-version-action
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      GitHub action to bump up a docker image version deployed in a docker-compose file on a remote server via ssh
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a href="https://github.com/thematchless/bump-image-version-action/actions/workflows/build.yml"&gt;&lt;img src="https://github.com/thematchless/bump-image-version-action/actions/workflows/build.yml/badge.svg" alt="Build and publish Docker image"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Bump docker image version on a remote host&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;This repository contains an GitHub action to bump up a docker image version specified in your docker-compose stack.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Requirements for this GitHub Action to work&lt;/h2&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;your remote server must be accessible via ssh and is reachable&lt;/li&gt;
&lt;li&gt;you have a ssh private and public key to authenticate via ssh&lt;/li&gt;
&lt;li&gt;you have saved your private and public key to the GitHub project secrets&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Configuration options for the action&lt;/h2&gt;
&lt;/div&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;required&lt;/th&gt;
&lt;br&gt;
&lt;th&gt;key&lt;/th&gt;
&lt;br&gt;
&lt;th&gt;example&lt;/th&gt;
&lt;br&gt;
&lt;th&gt;default&lt;/th&gt;
&lt;br&gt;
&lt;th&gt;description&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;/td&gt;
&lt;br&gt;
&lt;td&gt;remote_docker_host&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;
&lt;a href="https://github.com/thematchless/bump-image-version-actionmailto:thematchless@fancyServer.de"&gt;&lt;/a&gt;&lt;a href="mailto:thematchless@fancyServer.de"&gt;thematchless@fancyServer.de&lt;/a&gt;
&lt;/td&gt;


&lt;td&gt;username@host&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;ssh_private_key&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;-----BEGIN OPENSSH PRIVATE KEY----&lt;br&gt;UgAAAAtzc2gtZWQyNTUxOQAAACALBUg&lt;br&gt;UgAAAAtzc2gtZWQyNTUxOQAAACALBUg&lt;br&gt;UgAAAAtzc2gtZWQyNTUxOQAAACALBUg&lt;br&gt;-----END OPENSSH PRIVATE KEY-----&lt;/td&gt;


&lt;td&gt;private key in PEM format&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;ssh_public_key&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;ssh-ed25519 ABCDABCDu027374972309&lt;/td&gt;


&lt;td&gt;public key of the PEM&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;service_name&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;super-fancy-react-app&lt;/td&gt;


&lt;td&gt;name of the service inside of the compose file&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;deploy_path&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;/home/thematchless/stack-1&lt;/td&gt;


&lt;td&gt;path which contains your compose file on the remote host&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;args&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;up -d&lt;/td&gt;


&lt;td&gt;arguments how to start your service&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;stack_file_name&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;docker-compose.yaml&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;docker-compose.yml&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;name&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;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/thematchless/bump-image-version-action"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;I hope you enjoyed this little idea of my maintenance container 😎&lt;/p&gt;

</description>
      <category>docker</category>
      <category>opensource</category>
      <category>hacktober</category>
      <category>hacktoberfest</category>
    </item>
    <item>
      <title>GitHub Actions Hackathon 2021 - Bump docker image version on a remote host</title>
      <dc:creator>Matthias Meyer</dc:creator>
      <pubDate>Thu, 02 Dec 2021 22:33:29 +0000</pubDate>
      <link>https://dev.to/thematchless/github-actions-hackathon-2021-bump-docker-image-version-on-a-remote-host-279h</link>
      <guid>https://dev.to/thematchless/github-actions-hackathon-2021-bump-docker-image-version-on-a-remote-host-279h</guid>
      <description>&lt;h3&gt;
  
  
  Submission Category: DIY Deployments
&lt;/h3&gt;

&lt;p&gt;We live in a time in which we should pay particular attention to how we deal with our ⚡ energy balance. The first step for this is to know your current personal consumption of electricity and gas. &lt;/p&gt;

&lt;p&gt;To address this problem I have a small personal React project in which I log my current consumption values 📈 for electricity and gas.&lt;/p&gt;

&lt;h3&gt;
  
  
  My gas consumption over the last years
&lt;/h3&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2Fwsfp0jncatc8pt1t9x63.png" class="article-body-image-wrapper"&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%2Farticles%2Fwsfp0jncatc8pt1t9x63.png" alt="Gas Consumption" width="800" height="254"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  My electricity consumption over the last years
&lt;/h3&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2Fsaijse9hbiboelamd2qn.png" class="article-body-image-wrapper"&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%2Farticles%2Fsaijse9hbiboelamd2qn.png" alt="Electricity Consumption" width="800" height="272"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At the beginning of the month I take the readings from the electricity and gas meter and add them to a text document in my repository. After that, I want the GitHub actions to take over and do the heavy lifting for me:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Checkout the code and build the project&lt;/li&gt;
&lt;li&gt;Build a new docker image with some nice tags&lt;/li&gt;
&lt;li&gt;Publish the new image in the awesome GitHub Container Registry&lt;/li&gt;
&lt;li&gt;Connect to my remote server and deploy the new image&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I was able to successfully implement this with the following workflow:&lt;/p&gt;

&lt;h3&gt;
  
  
  My Workflow
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Dockerize React Application&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;master'&lt;/span&gt;
&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;build-container&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build Docker image and deploy to production&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Checkout code&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v2&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Login to GitHub Container Registry&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;docker/login-action@v1&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;registry&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ghcr.io&lt;/span&gt;
          &lt;span class="na"&gt;username&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ github.repository_owner }}&lt;/span&gt;
          &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.GITHUB_TOKEN }}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Publish to GitHub Packages&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;docker/build-push-action@v2.3.0&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
          &lt;span class="na"&gt;tags&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ghcr.io/${{ github.repository }}:latest, ghcr.io/${{ github.repository }}:${{ github.run_number }}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deploy on Remote Server&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;thematchless/bump-image-version-action@v2&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;remote_docker_host&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;username@thematchless.de&lt;/span&gt;
          &lt;span class="na"&gt;ssh_private_key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.DOCKER_SSH_PRIVATE_KEY }}&lt;/span&gt;
          &lt;span class="na"&gt;ssh_public_key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.DOCKER_SSH_PUBLIC_KEY }}&lt;/span&gt;
          &lt;span class="na"&gt;service_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;electricity-gas-consumption&lt;/span&gt;
          &lt;span class="na"&gt;deploy_path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/thematchless/electricity-gas-consumption&lt;/span&gt;
          &lt;span class="na"&gt;args&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;up -d&lt;/span&gt;
          &lt;span class="na"&gt;pull_images_first&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The last step in this workflow is my own created GitHub Action. This GitHub action bumps up a docker image version deployed in a docker-compose stack on a remote server via the SSH protocol. I utilized the GitHub project secrets to add my SSH certificates for the connection.&lt;/p&gt;

&lt;p&gt;If you need something similar and simple you can use this action too. Just fork my action or use it as it is 🎉&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/thematchless"&gt;
        thematchless
      &lt;/a&gt; / &lt;a href="https://github.com/thematchless/bump-image-version-action"&gt;
        bump-image-version-action
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      GitHub action to bump up a docker image version deployed in a docker-compose file on a remote server via ssh
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a href="https://github.com/thematchless/bump-image-version-action/actions/workflows/build.yml"&gt;&lt;img src="https://github.com/thematchless/bump-image-version-action/actions/workflows/build.yml/badge.svg" alt="Build and publish Docker image"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Bump docker image version on a remote host&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;This repository contains an GitHub action to bump up a docker image version specified in your docker-compose stack.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Requirements for this GitHub Action to work&lt;/h2&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;your remote server must be accessible via ssh and is reachable&lt;/li&gt;
&lt;li&gt;you have a ssh private and public key to authenticate via ssh&lt;/li&gt;
&lt;li&gt;you have saved your private and public key to the GitHub project secrets&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Configuration options for the action&lt;/h2&gt;
&lt;/div&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;required&lt;/th&gt;
&lt;br&gt;
&lt;th&gt;key&lt;/th&gt;
&lt;br&gt;
&lt;th&gt;example&lt;/th&gt;
&lt;br&gt;
&lt;th&gt;default&lt;/th&gt;
&lt;br&gt;
&lt;th&gt;description&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;/td&gt;
&lt;br&gt;
&lt;td&gt;remote_docker_host&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;
&lt;a href="https://github.com/thematchless/bump-image-version-actionmailto:thematchless@fancyServer.de"&gt;&lt;/a&gt;&lt;a href="mailto:thematchless@fancyServer.de"&gt;thematchless@fancyServer.de&lt;/a&gt;
&lt;/td&gt;


&lt;td&gt;username@host&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;ssh_private_key&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;-----BEGIN OPENSSH PRIVATE KEY----&lt;br&gt;UgAAAAtzc2gtZWQyNTUxOQAAACALBUg&lt;br&gt;UgAAAAtzc2gtZWQyNTUxOQAAACALBUg&lt;br&gt;UgAAAAtzc2gtZWQyNTUxOQAAACALBUg&lt;br&gt;-----END OPENSSH PRIVATE KEY-----&lt;/td&gt;


&lt;td&gt;private key in PEM format&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;ssh_public_key&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;ssh-ed25519 ABCDABCDu027374972309&lt;/td&gt;


&lt;td&gt;public key of the PEM&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;service_name&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;super-fancy-react-app&lt;/td&gt;


&lt;td&gt;name of the service inside of the compose file&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;deploy_path&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;/home/thematchless/stack-1&lt;/td&gt;


&lt;td&gt;path which contains your compose file on the remote host&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;args&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;up -d&lt;/td&gt;


&lt;td&gt;arguments how to start your service&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;stack_file_name&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;docker-compose.yaml&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;docker-compose.yml&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;name&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;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/thematchless/bump-image-version-action"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;I've added a table to the &lt;a href="https://github.com/thematchless/bump-image-version-action/blob/develop/README.md"&gt;README.md&lt;/a&gt; with all the flags you can configure in this GitHub action. If anything is unclear, please let me know and I'll try to help. &lt;/p&gt;

&lt;p&gt;Have mercy 🙏 on me, this is my first post 😎&lt;/p&gt;

</description>
      <category>actionshackathon21</category>
      <category>github</category>
      <category>opensource</category>
      <category>continuousdeployment</category>
    </item>
  </channel>
</rss>
