<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Jean-Francis Bastien</title>
    <description>The latest articles on Forem by Jean-Francis Bastien (@bhacaz).</description>
    <link>https://forem.com/bhacaz</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%2F216204%2F7413304b-6434-4310-b495-cf59995c7581.jpeg</url>
      <title>Forem: Jean-Francis Bastien</title>
      <link>https://forem.com/bhacaz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/bhacaz"/>
    <language>en</language>
    <item>
      <title>Docs as Code Confluence</title>
      <dc:creator>Jean-Francis Bastien</dc:creator>
      <pubDate>Tue, 30 Nov 2021 00:41:44 +0000</pubDate>
      <link>https://forem.com/bhacaz/docs-as-code-confluence-3121</link>
      <guid>https://forem.com/bhacaz/docs-as-code-confluence-3121</guid>
      <description>&lt;p&gt;Hi, as an introduction, I want to link a post that talked to me. &lt;a href="https://dev.to/doctave/how-google-twitter-and-spotify-built-a-culture-of-documentation-3e0m"&gt;How Google, Twitter, and Spotify built a culture of documentation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since I read that article, I am looking for a way to introduce that concept to my team.&lt;/p&gt;

&lt;p&gt;The concept and implementation are relatively easy to achieve with Github Pages, Netlify, Vercel, etc. When it comes to internal documentation, more requirements appear, for example, authorization. I also didn't want to introduce another place to look for documentation.&lt;/p&gt;

&lt;p&gt;Since we have Confluence, the idea is to have the benefit of the concept of docs as code and keep all our documentation in the same place. Confluence will handle the "hosting", indexing and authorization.&lt;/p&gt;

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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Bhacaz" rel="noopener noreferrer"&gt;
        Bhacaz
      &lt;/a&gt; / &lt;a href="https://github.com/Bhacaz/docs-as-code-confluence" rel="noopener noreferrer"&gt;
        docs-as-code-confluence
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Publish the content of a folder to confluence Github Action
    &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;Docs as Code - Confluence&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Publish a folder of documentation to Confluence.&lt;/p&gt;
&lt;p&gt;Create a Confluence Page for each markdown file. Each folder will create a &lt;em&gt;parent&lt;/em&gt; page to reflect
the directory structure.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Parameters&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;Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Required&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;folder&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The folder to sync&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;username&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Confluence username or email&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;password&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Confluence password or &lt;a href="https://support.atlassian.com/atlassian-account/docs/manage-api-tokens-for-your-atlassian-account/" rel="nofollow noopener noreferrer"&gt;API token&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;confluence-base-url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Your Confluence URL (with &lt;code&gt;wiki&lt;/code&gt;). Example: &lt;code&gt;https://mydomain.atlassian.net/wiki&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;space-key&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Confluence space key to publish the documentation. Located after &lt;code&gt;spaces&lt;/code&gt; in the URL. &lt;code&gt;https://mydomain.atlassian.net/wiki/spaces/&amp;lt;&amp;lt;~1234&amp;gt;&amp;gt;&lt;/code&gt;. &lt;br&gt; Or in &lt;em&gt;Space settings&lt;/em&gt; &amp;gt; &lt;em&gt;Space details&lt;/em&gt; &amp;gt; &lt;em&gt;Key&lt;/em&gt;.&lt;/td&gt;
&lt;td&gt;true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;parent-page-id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Page id under which the documentation will be published. Located after &lt;code&gt;pages&lt;/code&gt; in the URL. &lt;code&gt;https://mydomain.atlassian.net/wiki/spaces/~1234/pages/&amp;lt;&amp;lt;1234&amp;gt;&amp;gt;/My+Parent+Page&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;true&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;TODO&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Renaming a file&lt;/li&gt;
&lt;li&gt;Moving/Removing a file&lt;/li&gt;
&lt;li&gt;Not updating Confluence pages when there is no change&lt;/li&gt;
&lt;li&gt;Add commit link to the new page version&lt;/li&gt;
&lt;li&gt;Add markdown images with url source&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Example of workflow&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-yaml notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-ent"&gt;name&lt;/span&gt;: &lt;span class="pl-s"&gt;Sync Docs as Code -&lt;/span&gt;&lt;/pre&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/Bhacaz/docs-as-code-confluence" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The action looks for a specific folder and publishes its contents to Confluence. It recreates the file structure and publishes the markdown content to a Confluence page.&lt;/p&gt;

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

&lt;p&gt;DIY Deployments&lt;/p&gt;

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

&lt;p&gt;I create a minimal example of usage with a functional workflow, a &lt;code&gt;docs&lt;/code&gt; folder with markdown files, and some screenshots of the result in Confluence.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fh3ndiqsvnjrgnoh9k2rd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fh3ndiqsvnjrgnoh9k2rd.png" alt="Example in Confluence"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Bhacaz" rel="noopener noreferrer"&gt;
        Bhacaz
      &lt;/a&gt; / &lt;a href="https://github.com/Bhacaz/docs-as-code-confluence-demo" rel="noopener noreferrer"&gt;
        docs-as-code-confluence-demo
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;There are still some must-have features to implement, but it's a good start for writing more technical documentation.&lt;/p&gt;

</description>
      <category>actionshackathon21</category>
    </item>
    <item>
      <title>Checkout only certain files</title>
      <dc:creator>Jean-Francis Bastien</dc:creator>
      <pubDate>Wed, 02 Sep 2020 13:01:55 +0000</pubDate>
      <link>https://forem.com/bhacaz/checkout-only-certain-files-1g1o</link>
      <guid>https://forem.com/bhacaz/checkout-only-certain-files-1g1o</guid>
      <description>&lt;h3&gt;
  
  
  My Workflow
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Bhacaz/checkout-files&lt;/code&gt; is useful to only pull specific files from a repository instead of the hold project with the well known &lt;code&gt;actions/checkout&lt;/code&gt;. Some project can be very heavy to pull when what you need it’s just 2 or 3 files.&lt;/p&gt;

&lt;p&gt;It can be useful if you only need package config files like &lt;code&gt;package.json&lt;/code&gt; or &lt;code&gt;Gemfile&lt;/code&gt; to setup a Github Action environment, since popular action like &lt;code&gt;ruby/setup-ruby&lt;/code&gt; look for the &lt;code&gt;.ruby-version&lt;/code&gt; to automatically determine which version to setup and the &lt;code&gt;Gemfile.lock&lt;/code&gt; to install the right version of &lt;code&gt;bundler&lt;/code&gt;. I personally use it along with an other script to run &lt;code&gt;bundle outdated&lt;/code&gt; on a Ruby project. For more details have a look on my other post. &lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/bhacaz" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__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%2F216204%2F7413304b-6434-4310-b495-cf59995c7581.jpeg" alt="bhacaz"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/bhacaz/automatically-keep-tracks-of-outdated-gems-in-a-github-issue-55n1" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Automatically keep tracks of outdated gems in a Github Issue&lt;/h2&gt;
      &lt;h3&gt;Jean-Francis Bastien ・ Jun 9 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#ruby&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#github&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


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

&lt;p&gt;&lt;strong&gt;Wacky Wildcards&lt;/strong&gt;. Because it's a very general action that can be use for multiple case.&lt;/p&gt;

&lt;h3&gt;
  
  
  Yaml File or Link to Code
&lt;/h3&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/Bhacaz" rel="noopener noreferrer"&gt;
        Bhacaz
      &lt;/a&gt; / &lt;a href="https://github.com/Bhacaz/checkout-files" rel="noopener noreferrer"&gt;
        checkout-files
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Github Action checkout only certain files
    &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;checkout-files&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;⚠️ Please consider using &lt;code&gt;actions/checkout&lt;/code&gt; with the option &lt;a href="https://github.com/actions/checkout#fetch-only-a-single-file" rel="noopener noreferrer"&gt;&lt;code&gt;sparse-checkout&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;GitHub Action to checkout only certain files and/or folders
Useful if only need certain files, like config or
assets for your workflow, instead of pulling the whole repo.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Usage&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Minimal setup.&lt;/p&gt;
&lt;div class="highlight highlight-source-yaml notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;- &lt;span class="pl-ent"&gt;name&lt;/span&gt;: &lt;span class="pl-s"&gt;Checkout files&lt;/span&gt;
  &lt;span class="pl-ent"&gt;uses&lt;/span&gt;: &lt;span class="pl-s"&gt;Bhacaz/checkout-files@v2&lt;/span&gt;
  &lt;span class="pl-ent"&gt;with&lt;/span&gt;:
   &lt;span class="pl-ent"&gt;files&lt;/span&gt;: &lt;span class="pl-s"&gt;package.json&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Inputs&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;Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Required&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;files&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A list of files with the path separated by a space, relative to root of your repository. Can also be a folder and the action will recursively pull all the files.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;token&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A GitHub token.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;${{ github.token }}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;branch&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Checkout files from a specific branch. If not specified, it use the default repository branch.&lt;br&gt; To use the current working branch &lt;code&gt;${{ github.head_ref || github.ref_name }}&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Default branch of the repository.&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;Limitations&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;This action doesn't keep the mode bits (or permission) of files. See &lt;a href="https://github.com/Bhacaz/checkout-files/issues/18" rel="noopener noreferrer"&gt;#18&lt;/a&gt; for…&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/Bhacaz/checkout-files" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;You can find an example of usage in this Ruby on Rails project of mine. &lt;a href="https://github.com/Bhacaz/democraylist-be/blob/master/.github/workflows/outdated_gems.yml" rel="noopener noreferrer"&gt;Bhacaz/democraylist-be.github/workflows/outdated_gems.yml&lt;/a&gt;&lt;/p&gt;

</description>
      <category>actionshackathon</category>
    </item>
    <item>
      <title>Automatically keep tracks of outdated gems in a Github Issue</title>
      <dc:creator>Jean-Francis Bastien</dc:creator>
      <pubDate>Tue, 09 Jun 2020 17:03:53 +0000</pubDate>
      <link>https://forem.com/bhacaz/automatically-keep-tracks-of-outdated-gems-in-a-github-issue-55n1</link>
      <guid>https://forem.com/bhacaz/automatically-keep-tracks-of-outdated-gems-in-a-github-issue-55n1</guid>
      <description>&lt;p&gt;Long story short, in my organization, I'm responsible for upgrading our Rails application. First thing I checked was every gems that could be updated right away.&lt;/p&gt;

&lt;p&gt;I quickly found the &lt;code&gt;outdated&lt;/code&gt; command from &lt;a href="https://bundler.io/man/bundle-outdated.1.html" rel="noopener noreferrer"&gt;&lt;code&gt;bundler&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I ran it with the options &lt;code&gt;--only-explicit --strict&lt;/code&gt; to check what is explicitly specified in my Gemfile and for what I can simply do &lt;code&gt;bundle update &amp;lt;&amp;lt;gem&amp;gt;&lt;/code&gt; without changing the requested version in my Gemfile.&lt;/p&gt;

&lt;p&gt;Without much of a surprise, we had more than 70 gems that could be updated right away.&lt;/p&gt;

&lt;p&gt;To prevent being in a similar situation in a few months or years, I had the idea to run the 'bundle outdated' command automatically, so I can keep track of new gem release. My solution was to create a script that can run in a Github Action to keep a Github Issue updated with the list of all outdated gems and their newer versions. So now I can easily see many dependencies that can be updated.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;You need to create a Github Action, it can be done by creating a &lt;code&gt;.yml&lt;/code&gt; file under &lt;code&gt;.github/workflows&lt;/code&gt; in your project. You will also need a Github &lt;em&gt;private access token&lt;/em&gt; with the scope &lt;code&gt;repo&lt;/code&gt; to be able to update the relative Github Issue. You can use the example in the &lt;a href="https://github.com/Bhacaz/bundler-outdated-action" rel="noopener noreferrer"&gt;README&lt;/a&gt; of the project.&lt;/p&gt;

&lt;p&gt;In the example, the action runs on every push on master, which is convenient in a very active project and to have a live update of the issue if you merged an update. You can also choose to use a &lt;a href="https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#onschedule" rel="noopener noreferrer"&gt;cron rule&lt;/a&gt;, which can be useful with a less active project.&lt;/p&gt;

&lt;p&gt;When the action runs it will,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Setup a Ruby environment with the version you specified in the &lt;code&gt;.yml&lt;/code&gt; file&lt;/li&gt;
&lt;li&gt;Pull the script&lt;/li&gt;
&lt;li&gt;Download the Gemfile and Gemfile.lock files from your project&lt;/li&gt;
&lt;li&gt;Run the command &lt;code&gt;bundle outdated --only-explicit --strict&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Create or update the description of the associated issue&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Bhacaz" rel="noopener noreferrer"&gt;
        Bhacaz
      &lt;/a&gt; / &lt;a href="https://github.com/Bhacaz/bundler-outdated-action" rel="noopener noreferrer"&gt;
        bundler-outdated-action
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Script to use in a Github Actions to list in a issue the outdated gems
    &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;bundler-outdated-action&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Use Github Actions to create and update a Github issue with the gems in your project that can be updated.&lt;/p&gt;
&lt;p&gt;The result look like this:&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;&lt;a href="https://github.com/Bhacaz/bundler-outdated-action/issues/1" rel="noopener noreferrer"&gt;Outdated gems (4)&lt;/a&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;bundle outdated --strict&lt;/code&gt;&lt;/p&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Gem&lt;/th&gt;
&lt;th&gt;Current&lt;/th&gt;
&lt;th&gt;Newest&lt;/th&gt;
&lt;th&gt;Groups&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://rubygems.org/gems/byebug" rel="nofollow noopener noreferrer"&gt;byebug&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;11.1.1&lt;/td&gt;
&lt;td&gt;11.1.3&lt;/td&gt;
&lt;td&gt;development, test&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://rubygems.org/gems/figaro" rel="nofollow noopener noreferrer"&gt;figaro&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;1.1.1&lt;/td&gt;
&lt;td&gt;1.2.0&lt;/td&gt;
&lt;td&gt;default&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://rubygems.org/gems/sidekiq" rel="nofollow noopener noreferrer"&gt;sidekiq&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;6.0.6&lt;/td&gt;
&lt;td&gt;6.0.7&lt;/td&gt;
&lt;td&gt;default&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://rubygems.org/gems/web-console" rel="nofollow noopener noreferrer"&gt;web-console&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;4.0.1&lt;/td&gt;
&lt;td&gt;4.0.2&lt;/td&gt;
&lt;td&gt;development&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;To use&lt;/h1&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Create a new workflows in your project (&lt;code&gt;.github/workflows/outdated_gems.yml&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Create a &lt;a href="https://github.com/settings/tokens" rel="noopener noreferrer"&gt;Personal access tokens&lt;/a&gt; with the scope &lt;code&gt;repo&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Add the token in the secrets of your repository with the name &lt;code&gt;GH_TOKEN&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;div class="highlight highlight-source-yaml notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-ent"&gt;name&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;Outdated Gems&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;
&lt;span class="pl-ent"&gt;on&lt;/span&gt;:
  &lt;span class="pl-ent"&gt;push&lt;/span&gt;:
    &lt;span class="pl-ent"&gt;branches&lt;/span&gt;:
      - &lt;span class="pl-s"&gt;master&lt;/span&gt;

&lt;span class="pl-ent"&gt;jobs&lt;/span&gt;:
  &lt;span class="pl-ent"&gt;outdated_gems&lt;/span&gt;:
    &lt;span class="pl-ent"&gt;runs-on&lt;/span&gt;: &lt;span class="pl-s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="pl-ent"&gt;name&lt;/span&gt;: &lt;span class="pl-s"&gt;Outdated gems&lt;/span&gt;
    &lt;span class="pl-ent"&gt;steps&lt;/span&gt;:
      - &lt;span class="pl-ent"&gt;name&lt;/span&gt;: &lt;span class="pl-s"&gt;Checkout repo&lt;/span&gt;
        &lt;span class="pl-ent"&gt;uses&lt;/span&gt;: &lt;span class="pl-s"&gt;actions/checkout@v4&lt;/span&gt;
      - &lt;span class="pl-ent"&gt;name&lt;/span&gt;: &lt;span class="pl-s"&gt;Setup Ruby&lt;/span&gt;
        &lt;span class="pl-ent"&gt;uses&lt;/span&gt;: &lt;span class="pl-s"&gt;ruby/setup-ruby@v1&lt;/span&gt;
      - &lt;span class="pl-ent"&gt;name&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;Pull outdated gem action script&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;
        &lt;span class="pl-ent"&gt;uses&lt;/span&gt;: &lt;span class="pl-s"&gt;actions/checkout@v4&lt;/span&gt;
        &lt;span class="pl-ent"&gt;with&lt;/span&gt;:
          &lt;span class="pl-ent"&gt;repository&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;Bhacaz/bundler-outdated-action&lt;/span&gt;&lt;/pre&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/Bhacaz/bundler-outdated-action" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Happy updating&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>github</category>
    </item>
    <item>
      <title>A Slack Bot for your private Advent of Code Leaderboard</title>
      <dc:creator>Jean-Francis Bastien</dc:creator>
      <pubDate>Thu, 05 Dec 2019 22:02:42 +0000</pubDate>
      <link>https://forem.com/bhacaz/a-slack-bot-for-your-private-advent-of-code-leaderboard-2f77</link>
      <guid>https://forem.com/bhacaz/a-slack-bot-for-your-private-advent-of-code-leaderboard-2f77</guid>
      <description>&lt;h1&gt;
  
  
  Slack Bot for the Advent of Code
&lt;/h1&gt;

&lt;p&gt;In this festive time, a colleague created a private Leaderboard and invited every dev where I work to participate. I was very exited and after completing the first challenge I thought something was missing to engage others.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Slack Bot that show the progress of every participants.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Thanks to this repo, &lt;a href="https://github.com/tomswartz07/AdventOfCodeLeaderboard" rel="noopener noreferrer"&gt;tomswartz07/AdventOfCodeLeaderboard&lt;/a&gt; that gave me the idea.&lt;/p&gt;

&lt;p&gt;I didn't want something that posted every 10 minutes with the same score. So I made a Rails app (because this's what I know) that will check if someone gained a ⭐️, save it and then send the new LeaderBoard.&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/Bhacaz" rel="noopener noreferrer"&gt;
        Bhacaz
      &lt;/a&gt; / &lt;a href="https://github.com/Bhacaz/Advent-of-Code-Slack-Bot" rel="noopener noreferrer"&gt;
        Advent-of-Code-Slack-Bot
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Advent of Code Leaderboard bot
    &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;Advent of code Slack Bot&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;This is a Slack bot to post a Advent of code Private Leaderboard to a Slack channel
when someone complete a challenge.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/7858787/70275316-ea725880-177b-11ea-88c3-f27eec8afd19.png"&gt;&lt;img width="419" alt="Screen Shot 2019-12-05 at 16 24 14" src="https://res.cloudinary.com/practicaldev/image/fetch/s--gpp5wUJ0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://user-images.githubusercontent.com/7858787/70275316-ea725880-177b-11ea-88c3-f27eec8afd19.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Prerequisites:&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;slack_url&lt;/code&gt;: An &lt;a href="https://my.slack.com/services/new/incoming-webhook/" rel="nofollow noopener noreferrer"&gt;&lt;em&gt;Incoming WebHooks&lt;/em&gt;&lt;/a&gt; url for workplace Slack.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;slack_channel&lt;/code&gt;: The name of the channel you want to post the LeaderBoard&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;session&lt;/code&gt;: A cookie session token from Advent of Code. It can be find in a request header in the devtool
of your browser.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;leaderboard_id&lt;/code&gt;: The ID of your private Leaderboard. It can be found at the end of the url of
your Leaderboard&lt;code&gt;https://adventofcode.com/2019/leaderboard/private/view/&amp;lt;&amp;lt;XXXXX&amp;gt;&amp;gt;&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can create a &lt;code&gt;config/application.yml&lt;/code&gt; file to set those env variables&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Running:&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Run the Rails server &lt;code&gt;bin/rails server&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Create a cron job that will fire the &lt;em&gt;Incoming WebHooks&lt;/em&gt; if someone recently
complete a challenge every 10 minutes.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;$ EDITOR=nano crontab -e&lt;/pre&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Add this line&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;*&lt;/span&gt;/10 &lt;span class="pl-k"&gt;*&lt;/span&gt; &lt;span class="pl-k"&gt;*&lt;/span&gt; &lt;span class="pl-k"&gt;*&lt;/span&gt; &lt;span class="pl-k"&gt;*&lt;/span&gt; curl http://localhost:3000/api/exec_webhook&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Build on:&lt;/h3&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/Bhacaz/Advent-of-Code-Slack-Bot" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Have a look and happy &lt;strong&gt;Advent of Code&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>adventofcode</category>
    </item>
  </channel>
</rss>
