<?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: Yevhen Fabizhevskyi</title>
    <description>The latest articles on Forem by Yevhen Fabizhevskyi (@fabasoad).</description>
    <link>https://forem.com/fabasoad</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%2F337550%2F03c18173-36bc-46b6-9c89-b1f1f4a48c3c.JPG</url>
      <title>Forem: Yevhen Fabizhevskyi</title>
      <link>https://forem.com/fabasoad</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/fabasoad"/>
    <language>en</language>
    <item>
      <title>TypeScript GitHub Action template</title>
      <dc:creator>Yevhen Fabizhevskyi</dc:creator>
      <pubDate>Sun, 07 Feb 2021 23:47:34 +0000</pubDate>
      <link>https://forem.com/fabasoad/typescript-github-action-template-9lm</link>
      <guid>https://forem.com/fabasoad/typescript-github-action-template-9lm</guid>
      <description>&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;Hello! My name is Yevhen. At the moment when I am writing this post I already have &lt;a href="https://github.com/marketplace?type=actions&amp;amp;query=fabasoad" rel="noopener noreferrer"&gt;18 GitHub actions&lt;/a&gt; that I've implemented and published to the marketplace. A few of them are &lt;a href="https://docs.github.com/en/actions/creating-actions/creating-a-docker-container-action" rel="noopener noreferrer"&gt;Docker container actions&lt;/a&gt;, some of them are &lt;a href="https://docs.github.com/en/actions/creating-actions/creating-a-javascript-action" rel="noopener noreferrer"&gt;JavaScript actions&lt;/a&gt; but personally I like TypeScript more than JavaScript for various reasons, so that's why most of the implemented GitHub actions are &lt;a href="https://www.typescriptlang.org/" rel="noopener noreferrer"&gt;TypeScript&lt;/a&gt; actions.&lt;/p&gt;

&lt;p&gt;So, after 1, 2, &lt;code&gt;n&lt;/code&gt; implemeted TypeScript GitHub actions I found out that I do a boilerplate work again and again - I configure CI with the same pipelines and jobs, I configure tests with coverage and TypeScript, I configure npm with the commands that I usually use, etc. All this boilerplate work became a big part of the building GitHub Action itself. So, I've decided to find the way to somehow avoid doing boilerplate work and focus more on a business logic. After some investigation I found nice &lt;a href="https://github.com/actions/typescript-action" rel="noopener noreferrer"&gt;actions/typescript-action&lt;/a&gt; template that basically can help developers like me to build TypeScript GitHub Action with some preconfigured settings. This is already better than nothing but personally for my needs that wasn't enough. For example, there are some set of pipelines that I use in almost all my GitHub actions repositories (like, "Create release", "Check updates", "Security tests, "Unit tests", etc.). I always use my personal settings for linters and tests. I always use some libraries that I used to work with, like &lt;a href="https://www.npmjs.com/package/winston" rel="noopener noreferrer"&gt;winston&lt;/a&gt; for logging, &lt;a href="https://www.npmjs.com/package/husky" rel="noopener noreferrer"&gt;husky&lt;/a&gt; for &lt;a href="https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks" rel="noopener noreferrer"&gt;git hooks&lt;/a&gt;, &lt;a href="https://www.npmjs.com/package/snyk" rel="noopener noreferrer"&gt;snyk&lt;/a&gt; for security testing, etc. So even though I will use &lt;code&gt;actions/typescript-action&lt;/code&gt; template - it is not enough for me because I have to do some boilerplate work anyway.&lt;/p&gt;

&lt;p&gt;So, I've decided to prepare my personal TypeScript GitHub Action template with the 3 main goals:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It is easy to configure.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;0&lt;/code&gt; boilerplate work.&lt;/li&gt;
&lt;li&gt;It is useful for me &lt;em&gt;and&lt;/em&gt; for other developers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  fabasoad/typescript-action
&lt;/h2&gt;

&lt;p&gt;As a result I've built such template that hopefully meets all the requirements (tickets and PRs are welcome, so don't hesitate to open a ticket or PR in case you found any bug or have an idea of enhancements).&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://github.com/fabasoad/typescript-action" rel="noopener noreferrer"&gt;fabasoad/typescript-action&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Is it useful?
&lt;/h2&gt;

&lt;p&gt;Yes. And I am saying that not because I wrote this template 😅 but because I've already used it for one of my action - &lt;a href="https://github.com/fabasoad/icq-notify-action" rel="noopener noreferrer"&gt;ICQ Notify&lt;/a&gt; action. I configured the project in 5 minutes and then was focusing on a business logic without thinking about CI, npm, git hooks and other stuff that I usually configured manually. I already found this template super useful for myself and will be definitely using it (and improving it) in a future.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use
&lt;/h2&gt;

&lt;p&gt;I've decided to prepare a &lt;code&gt;Makefile&lt;/code&gt; that will do all the job for you, like preparing namings, folder structures, etc. This &lt;code&gt;Makefile&lt;/code&gt; has the single &lt;code&gt;default&lt;/code&gt; command and this is what you need to run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;make
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that's it. Just answer the question in interactive mode, enter the name of your GitHub Action, author name, etc. and in the end you will see fully configured and ready to implement GitHub action repository.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;More information &lt;a href="https://github.com/fabasoad/typescript-action/wiki/How-to-use" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What you will have out of the box
&lt;/h2&gt;

&lt;h3&gt;
  
  
  GitHub action file
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Configured action file without any inputs or outputs. Feel free to add those if needed. More information &lt;a href="https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions" rel="noopener noreferrer"&gt;here&lt;/a&gt;. &lt;em&gt;- I didn't add those because it really depends on a business logic of GitHub Action, some of them might have inputs/outputs but some of them might not have, so I've decided to leave it without these fields and developer will add them if needed&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;The following default values:

&lt;ul&gt;
&lt;li&gt;Branding icon is &lt;code&gt;terminal&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Branding color is &lt;code&gt;gray-dark&lt;/code&gt; (you can check these values &lt;a href="https://haya14busa.github.io/github-action-brandings/" rel="noopener noreferrer"&gt;here&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Runs on &lt;code&gt;node12&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;name&lt;/code&gt;, &lt;code&gt;author&lt;/code&gt; and &lt;code&gt;description&lt;/code&gt; are based on your input during &lt;code&gt;make&lt;/code&gt; run.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Source code
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;index.ts&lt;/code&gt; file with basic code. All what you need to do is to start adding your code under the &lt;code&gt;// Your main code here&lt;/code&gt; comment.&lt;/li&gt;
&lt;li&gt;Logging mechanism that you can use in your code. It is using &lt;a href="https://www.npmjs.com/package/winston" rel="noopener noreferrer"&gt;winston&lt;/a&gt; library. Code example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Logger&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;winston&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;LoggerFactory&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./LoggerFactory&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Logger&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;LoggerFactory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;index.ts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hello world!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;2021-02-07 02:48:03 &lt;span class="o"&gt;[&lt;/span&gt;index.ts] info: Hello world!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  npm
&lt;/h3&gt;

&lt;p&gt;The following npm targets that you can use:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;
&lt;code&gt;npm&lt;/code&gt; target&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;build&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Build your source code into bundle that is used by GitHub Action&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;lint:md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Run markdown lint checking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;lint:es&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Run &lt;code&gt;eslint&lt;/code&gt; checking&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;lint&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Run both &lt;code&gt;lint:md&lt;/code&gt; and &lt;code&gt;lint:es&lt;/code&gt; targets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;postinstall&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Install &lt;code&gt;git&lt;/code&gt; hooks using &lt;code&gt;husky&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;prepare&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Run &lt;code&gt;snyk-protect&lt;/code&gt; target&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;security:auth&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Run authentication to &lt;code&gt;snyk&lt;/code&gt; (token should be provided)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;security:test&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Run security tests using &lt;code&gt;snyk&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;snyk-protect&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Reads &lt;code&gt;.snyk&lt;/code&gt; policy file to determine what patches to apply&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;test&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Run unit tests using &lt;code&gt;jest&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Tests
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Configured &lt;code&gt;jest&lt;/code&gt; library with coverage threshold (&lt;code&gt;80%&lt;/code&gt; by default).&lt;/li&gt;
&lt;li&gt;Coverage tests folder structure with basic test as a start.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Integrations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://codeclimate.com/" rel="noopener noreferrer"&gt;CodeClimate&lt;/a&gt; shows tests coverage and maintainability for your project.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://snyk.io/" rel="noopener noreferrer"&gt;Snyk&lt;/a&gt; for security testing.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://lgtm.com/" rel="noopener noreferrer"&gt;LGTM&lt;/a&gt; for tracking code quality.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  CI
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Security tests&lt;/code&gt; using &lt;a href="https://snyk.io" rel="noopener noreferrer"&gt;Snyk&lt;/a&gt; and &lt;a href="https://github.com/github/codeql-action" rel="noopener noreferrer"&gt;CodeQL&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Check updates&lt;/code&gt; pipeline twice a month checks &lt;code&gt;npm&lt;/code&gt; updates and creates PR automatically in case of any new versions are exist.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Create release&lt;/code&gt; pipeline that will create a new release when you merge your MR into &lt;code&gt;main&lt;/code&gt; branch.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Unit tests&lt;/code&gt; pipeline that will run &lt;code&gt;lint&lt;/code&gt; and &lt;code&gt;test&lt;/code&gt; commands on each push to &lt;code&gt;main&lt;/code&gt;, &lt;code&gt;feature/*&lt;/code&gt; or &lt;code&gt;bugfix/*&lt;/code&gt; branches.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Lint&lt;/code&gt; pipeline that has 2 jobs - &lt;code&gt;YAML Lint&lt;/code&gt; and &lt;code&gt;Markdown Lint&lt;/code&gt;. Both are running on each &lt;code&gt;push&lt;/code&gt; to any branch.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  GitHub files
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;PR&lt;/code&gt;, &lt;code&gt;Bug report&lt;/code&gt; and &lt;code&gt;Feature request&lt;/code&gt; GitHub templates.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;README&lt;/code&gt;, &lt;code&gt;LICENSE&lt;/code&gt; and &lt;code&gt;Contributing&lt;/code&gt; documentation files. &lt;em&gt;- Default LICENSE is &lt;a href="https://opensource.org/licenses/MIT" rel="noopener noreferrer"&gt;MIT&lt;/a&gt;. If you need different license please &lt;a href="https://choosealicense.com/" rel="noopener noreferrer"&gt;choose the one that you need&lt;/a&gt; and replace the &lt;code&gt;LICENSE&lt;/code&gt; file&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  git
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;git&lt;/code&gt; hooks:

&lt;ul&gt;
&lt;li&gt;checking that you're &lt;strong&gt;not&lt;/strong&gt; committing into &lt;code&gt;main&lt;/code&gt; branch.&lt;/li&gt;
&lt;li&gt;checking that you're &lt;strong&gt;not&lt;/strong&gt; committing any sensitive information.&lt;/li&gt;
&lt;li&gt;running &lt;code&gt;lint&lt;/code&gt; and &lt;code&gt;test&lt;/code&gt; commands on each &lt;code&gt;git push&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;building bundle (&lt;code&gt;dist/index.js&lt;/code&gt;) file (that is used as a main file for GitHub Action) on each &lt;code&gt;git commit&lt;/code&gt;. So don't worry if you forget to build a bundle on top of your latest changes - this hook will do that for you.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;
&lt;code&gt;.gitignore&lt;/code&gt; file with basic patterns.&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  IDE settings
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;VS Code settings file that have some basic settings for easier development.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Badges in README
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;10 badges that shows the latest release, result of passing pipelines and results from integrations.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;More information &lt;a href="https://github.com/fabasoad/typescript-action/wiki/What-you-will-have-out-of-the-box" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Finalizing
&lt;/h2&gt;

&lt;p&gt;This project has &lt;a href="https://github.com/fabasoad/typescript-action/wiki" rel="noopener noreferrer"&gt;wiki&lt;/a&gt; with the detailed explanations of benefits and how to use it. Also, it has &lt;a href="https://github.com/fabasoad/typescript-action/discussions" rel="noopener noreferrer"&gt;discussions&lt;/a&gt; section, so feel free to open discussions. Contributions are also welcome! So, either it's &lt;a href="https://github.com/fabasoad/typescript-action/issues/new/choose" rel="noopener noreferrer"&gt;bug report&lt;/a&gt;, &lt;a href="https://github.com/fabasoad/typescript-action/issues/new/choose" rel="noopener noreferrer"&gt;feature request&lt;/a&gt; or &lt;a href="https://github.com/fabasoad/typescript-action/pulls" rel="noopener noreferrer"&gt;PR&lt;/a&gt;, I would be happy to see your activities there. I hope someone will find &lt;a href="https://github.com/fabasoad/typescript-action" rel="noopener noreferrer"&gt;fabasoad/typescript-action&lt;/a&gt; template useful as well.&lt;/p&gt;

&lt;p&gt;Thank you for reading and happy coding!&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>github</category>
      <category>githubaction</category>
      <category>ci</category>
    </item>
    <item>
      <title>Introducing GitHub Actions Check Updates</title>
      <dc:creator>Yevhen Fabizhevskyi</dc:creator>
      <pubDate>Thu, 30 Apr 2020 09:08:57 +0000</pubDate>
      <link>https://forem.com/fabasoad/introducing-github-actions-check-updates-42ad</link>
      <guid>https://forem.com/fabasoad/introducing-github-actions-check-updates-42ad</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;Working on a project it's important to have all your dependencies up-to-date. New versions have new features, bug fixes and many other improvements.&lt;/p&gt;

&lt;p&gt;There are a lot of tools that helps us to keep all dependencies up-to-date. For &lt;code&gt;maven&lt;/code&gt; projects we have &lt;a href="https://www.mojohaus.org/versions-maven-plugin/" rel="noopener noreferrer"&gt;Versions Maven Plugin&lt;/a&gt;, where we can run&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mvn versions:display-dependency-updates
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and see something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;INFO] &lt;span class="nt"&gt;---&lt;/span&gt; versions-maven-plugin:2.7:display-dependency-updates &lt;span class="o"&gt;(&lt;/span&gt;default-cli&lt;span class="o"&gt;)&lt;/span&gt; @ poe-runner &lt;span class="nt"&gt;---&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;INFO] The following dependencies &lt;span class="k"&gt;in &lt;/span&gt;Dependency Management have newer versions:
&lt;span class="o"&gt;[&lt;/span&gt;INFO]   com.github.fabasoad:commons-lang ...................... 0.2.3 -&amp;gt; 0.4.5
&lt;span class="o"&gt;[&lt;/span&gt;INFO]   com.google.guava:guava .............................. 19.0 -&amp;gt; 29.0-jre
&lt;span class="o"&gt;[&lt;/span&gt;INFO]   commons-cli:commons-cli ................................... 1.2 -&amp;gt; 1.4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For &lt;code&gt;npm&lt;/code&gt; projects there are many other tools like &lt;a href="https://www.npmjs.com/package/npm-check" rel="noopener noreferrer"&gt;npm-check&lt;/a&gt; or &lt;a href="https://www.npmjs.com/package/npm-check-updates" rel="noopener noreferrer"&gt;npm-check-updates&lt;/a&gt;, where we can run &lt;code&gt;ncu&lt;/code&gt; and see something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;PS C:&lt;span class="se"&gt;\P&lt;/span&gt;rojects&lt;span class="se"&gt;\M&lt;/span&gt;yProject&amp;gt; ncu
Checking C:&lt;span class="se"&gt;\P&lt;/span&gt;rojects&lt;span class="se"&gt;\M&lt;/span&gt;yProject&lt;span class="se"&gt;\p&lt;/span&gt;ackage.json
&lt;span class="o"&gt;[====================]&lt;/span&gt; 42/42 100%

 @babel/core           7.8.7  →  7.9.0 
 @babel/preset-env     7.8.7  →  7.9.5 
 @babel/preset-react   7.8.3  →  7.9.4 
 babel-loader          8.0.6  →  8.1.0 
 firebase             7.10.0  →  7.14.2

Run ncu &lt;span class="nt"&gt;-u&lt;/span&gt; to upgrade package.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All such tools help us to keep our projects "healthy". But what about GitHub Actions? What if you have many workflow files with many GitHub Actions used there. It would be difficult to track all the versions manually. And here &lt;em&gt;GitHub Actions Check Updates&lt;/em&gt; comes to help you 😉&lt;/p&gt;

&lt;h1&gt;
  
  
  GHACU
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;GitHub Actions Check Updates (GHACU)&lt;/em&gt; is a tool that helps you to keep versions of configured GitHub Actions up-to-date. Here is how it looks like in action:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;PS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;C:\Projects\linguist-action&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ghacu&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Dockerfile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Lint&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;github&lt;/span&gt;&lt;span class="n"&gt;\workflows\dockerfile-lint.yml&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;actions/checkout&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="nx"&gt;v2.0.0&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;»&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;v2.1.0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;burdzwastaken/hadolint-action&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;master&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;»&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nx"&gt;1.1.0&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Shell&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Lint&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;github&lt;/span&gt;&lt;span class="n"&gt;\workflows\shell-lint.yml&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;actions/checkout&lt;/span&gt;&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="nx"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;»&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;v2.1.0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;bewuethr/shellcheck-action&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;v2.0.1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;»&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;v2.0.2&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;YAML&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Lint&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;github&lt;/span&gt;&lt;span class="n"&gt;\workflows\yaml-lint.yml&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ibiqlik/action-yamllint&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;v0.0.2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;»&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;v1.0.0&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="n"&gt;Run&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ghacu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-u&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;upgrade&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;actions.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;All what you need to do is to go to &lt;a href="https://github.com/fabasoad/ghacu/releases" rel="noopener noreferrer"&gt;Releases page&lt;/a&gt; and download latest release based on OS that you have. It supports MacOS, Linux and Windows.&lt;/p&gt;

&lt;h3&gt;
  
  
  MacOS and Linux
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# MacOS: ghacu-1.1.3-osx-x64.tgz&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ~ &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; wget https://github.com/fabasoad/ghacu/releases/download/v1.1.3/ghacu-1.1.3-linux-x64.tgz
&lt;span class="nb"&gt;tar&lt;/span&gt; &lt;span class="nt"&gt;-xvf&lt;/span&gt; ghacu-1.1.3-linux-x64.tgz
&lt;span class="nb"&gt;cd &lt;/span&gt;ghacu-1.1.3-linux-x64
&lt;span class="nb"&gt;chmod &lt;/span&gt;755 ghacu
&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;:~/ghacu-1.1.3-linux-x64
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Windows
&lt;/h3&gt;

&lt;p&gt;There are 2 options to install it on Windows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install it in the same way as for Linux/MacOS - download package, unpack it and add path to &lt;code&gt;PATH&lt;/code&gt; environment variable.&lt;/li&gt;
&lt;li&gt;Download executable file and just run it. Then add path to &lt;code&gt;PATH&lt;/code&gt; environment variable.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;p&gt;Once you install the tool, open your favourite console and run the command below. You should see installed version if you installed it correctly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;PS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;C:\Projects\MyProject&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ghacu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--version&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ghacu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;1.1.3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At this moment it supports two options:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;PS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;C:\Projects\MyProject&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ghacu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--help&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ghacu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;1.1.3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Copyright&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;2020&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ghacu&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nt"&gt;-r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--repository&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;project.&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nt"&gt;-u&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--upgrade&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="n"&gt;Upgrade&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;versions&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;latest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;one.&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nt"&gt;--help&lt;/span&gt;&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="n"&gt;Display&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;help&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;screen.&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="nt"&gt;--version&lt;/span&gt;&lt;span class="w"&gt;           &lt;/span&gt;&lt;span class="n"&gt;Display&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;version&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;information.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;-r&lt;/code&gt;, &lt;code&gt;--repository&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;It's a path to the project that has &lt;code&gt;.github/workflows&lt;/code&gt; folder inside, e.g. &lt;code&gt;C:\Projects\MyProject&lt;/code&gt;. If you do not define it, path will be the current path where you run &lt;code&gt;ghacu&lt;/code&gt;. Result is the same in examples below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;PS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;C:\Projects\MyProject&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ghacu&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;latest&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;github&lt;/span&gt;&lt;span class="n"&gt;\workflows\ci-latest.yml&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;actions/checkout&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;master&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;»&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;v2.1.0&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;YAML&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Lint&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;github&lt;/span&gt;&lt;span class="n"&gt;\workflows\yaml-lint.yml&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ibiqlik/action-yamllint&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;v0.0.2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;»&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;v1.0.0&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="n"&gt;Run&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ghacu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-u&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;upgrade&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;actions.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;PS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;C:\&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ghacu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-r&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\Projects\MyProject"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;latest&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;github&lt;/span&gt;&lt;span class="n"&gt;\workflows\ci-latest.yml&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;actions/checkout&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;master&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;»&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;v2.1.0&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;YAML&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Lint&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;github&lt;/span&gt;&lt;span class="n"&gt;\workflows\yaml-lint.yml&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ibiqlik/action-yamllint&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;v0.0.2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;»&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;v1.0.0&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="n"&gt;Run&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ghacu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-u&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;upgrade&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;actions.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;-u&lt;/code&gt;, &lt;code&gt;--upgrade&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Use this option if you want to update your actions to the newer versions. At first I propose you to run &lt;code&gt;ghacu&lt;/code&gt; command without this option to see if newer versions look good to you and then run &lt;code&gt;ghacu -u&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;PS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;C:\Projects\MyProject&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ghacu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-u&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;latest&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;github&lt;/span&gt;&lt;span class="n"&gt;\workflows\ci-latest.yml&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;actions/checkout&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;master&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;»&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;v2.1.0&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;YAML&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Lint&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;github&lt;/span&gt;&lt;span class="n"&gt;\workflows\yaml-lint.yml&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;ibiqlik/action-yamllint&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;v0.0.2&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;»&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nx"&gt;v1.0.0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;PS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;C:\Projects\MyProject&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ghacu&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;All&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;GitHub&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Actions&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;match&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;latest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;versions.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;I hope you will enjoy using this tool. As for me, I started using it from the beta version and enjoy using it as well as improving it. Feel free to post any feature requests or bug reports to the &lt;a href="https://github.com/fabasoad/ghacu/issues" rel="noopener noreferrer"&gt;Issues page&lt;/a&gt;, it will help me to keep making this tool better and better.&lt;/p&gt;

&lt;h2&gt;
  
  
  Future
&lt;/h2&gt;

&lt;p&gt;There are a lot of ideas to implement:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create &lt;code&gt;choco&lt;/code&gt;, &lt;code&gt;brew&lt;/code&gt;, &lt;code&gt;apt-get&lt;/code&gt;, &lt;code&gt;apk&lt;/code&gt; packages for easy installation.&lt;/li&gt;
&lt;li&gt;Add progress indicator, like:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[=================&lt;/span&gt;&lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; 38/42 86%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Add support of &lt;code&gt;--revert&lt;/code&gt;, &lt;code&gt;--parallel&lt;/code&gt; and many other features.&lt;/li&gt;
&lt;li&gt;Add installation path to &lt;code&gt;PATH&lt;/code&gt; environment variable automatically after installation.&lt;/li&gt;
&lt;li&gt;Support different colors in console output text.&lt;/li&gt;
&lt;li&gt;Many others.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's written in C# .NET Core and if you are interested in contribution, you are very welcome to fork the repo and help to improve it 💻&lt;/p&gt;

&lt;p&gt;Repository:&lt;br&gt;
&lt;a href="https://github.com/fabasoad/ghacu" rel="noopener noreferrer"&gt;https://github.com/fabasoad/ghacu&lt;/a&gt;&lt;/p&gt;

</description>
      <category>githubactions</category>
      <category>github</category>
      <category>ci</category>
      <category>devops</category>
    </item>
    <item>
      <title>Introducing JSONBin GitHub Action</title>
      <dc:creator>Yevhen Fabizhevskyi</dc:creator>
      <pubDate>Wed, 08 Apr 2020 05:32:51 +0000</pubDate>
      <link>https://forem.com/fabasoad/introducing-jsonbin-github-action-6je</link>
      <guid>https://forem.com/fabasoad/introducing-jsonbin-github-action-6je</guid>
      <description>&lt;p&gt;Hi guys, I would like to introduce one of the GitHub Actions that I have implemented during &lt;a href="https://githubhackathon.com/" rel="noopener noreferrer"&gt;GitHub Actions Hackathon&lt;/a&gt;. BTW, I've received today an email that I have qualified for a GitHub Hackathon prize, so just sent them my post address and will see what I get :)&lt;/p&gt;

&lt;p&gt;Briefly about what all these words in a title mean (if you don't know yet):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Actions is really powerful tool that can be used as a CI/CD (but not limited to, actually you can do anything you want with it) and if you're still not aware of it I recommend you to know more &lt;a href="https://github.com/features/actions" rel="noopener noreferrer"&gt;here&lt;/a&gt;, and &lt;a href="https://www.edwardthomson.com/blog/github_actions_advent_calendar.html" rel="noopener noreferrer"&gt;here&lt;/a&gt;, and &lt;a href="https://www.pluralsight.com/courses/building-custom-github-actions/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;JSONBin is a service where you can store your own bins. Bin means actually URL that returns anything you want. For example, I need some URL that will return &lt;code&gt;{"greetings":"Hello dev.to!"}&lt;/code&gt;, so I can sign up to &lt;a href="https://jsonbin.io" rel="noopener noreferrer"&gt;JSONBin&lt;/a&gt; and create a bin with this response. It will generate URL for me that might look like this - &lt;a href="https://api.jsonbin.io/b/5e8d473dab2e011ba969a6db" rel="noopener noreferrer"&gt;https://api.jsonbin.io/b/5e8d473dab2e011ba969a6db&lt;/a&gt; and I can use it for any purpose I need and even share with someone (if I make it public). It can be used to test something in your app or even to store some data there, e.g. work experience or skills that can be used in your portfolio application. Also, JSONBin works with collections, GeoIP, Schema docs, etc. You can find full API Docs &lt;a href="https://jsonbin.io/api-reference" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The main idea of this action is to have URL that will return any response you want in JSON format. You can store job information in your bins for future usage or even use this URL in your CI pipeline.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to configure
&lt;/h3&gt;

&lt;p&gt;So, let's start from the beginning and configure this action in your repository.&lt;/p&gt;

&lt;h4&gt;
  
  
  Prerequisites
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Repository in GitHub&lt;/li&gt;
&lt;li&gt;Account in &lt;a href="https://jsonbin.io/" rel="noopener noreferrer"&gt;JSONBin.io&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Configuration
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://jsonbin.io/api-keys" rel="noopener noreferrer"&gt;API Keys&lt;/a&gt; page at JSONBin.io and create a new key.&lt;/li&gt;
&lt;li&gt;Go to your repository in GitHub and create a new secret with the name &lt;code&gt;API_KEY&lt;/code&gt;. &lt;a href="https://help.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets" rel="noopener noreferrer"&gt;Here&lt;/a&gt; you can find an information on how to create a secret in your GitHub repository.&lt;/li&gt;
&lt;li&gt;Go to the root of your repo and create &lt;code&gt;jsonbin.yml&lt;/code&gt; in &lt;code&gt;.github/workflows&lt;/code&gt; folder with the following content:
&lt;/li&gt;
&lt;/ol&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;JSONbin&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;push&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;jsonbin&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;Test JSONbin&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v1&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;fabasoad/jsonbin-action@v1.0.1&lt;/span&gt;
        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;jsonbin&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;body&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;{"workflow":&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;"${{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;github.workflow&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}",&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;"author":&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;"${{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;github.actor&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}",&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;"number":&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;"${{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;github.run_number&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"}'&lt;/span&gt;
          &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;CREATE'&lt;/span&gt;
          &lt;span class="na"&gt;api_key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.API_KEY }}&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;Check bin_id&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;echo "Bin ID = ${{ steps.jsonbin.outputs.bin_id }}"&lt;/span&gt;
          &lt;span class="s"&gt;echo "URL = ${{ steps.jsonbin.outputs.url }}"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now push your changes, go to &lt;code&gt;Actions&lt;/code&gt; tab of GitHub repository and wait till job is finished. Take a look at job output to find the generated result:&lt;br&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%2F7dkxma9h9ym6rfu5rsth.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%2F7dkxma9h9ym6rfu5rsth.png" width="800" height="435"&gt;&lt;/a&gt;&lt;br&gt;
Here is the result of generated link call:&lt;br&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%2Fmzyugl4toqn31h1xupqn.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%2Fmzyugl4toqn31h1xupqn.png" width="630" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So it returns exactly what we expect. In this example I use &lt;code&gt;CREATE&lt;/code&gt; method but you can also &lt;code&gt;UPDATE&lt;/code&gt; and &lt;code&gt;DELETE&lt;/code&gt; created bin if needed. All documentation you can find in &lt;a href="https://github.com/fabasoad/jsonbin-action/blob/master/README.md" rel="noopener noreferrer"&gt;README&lt;/a&gt; of the repository.&lt;/p&gt;

&lt;h4&gt;
  
  
  Link
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://github.com/marketplace/actions/jsonbin-action" rel="noopener noreferrer"&gt;JSONBin GitHub Action&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Please feel free to create any issue (either bug report or feature request), pull request or just leave a comment with the proposition. I would love to hear any feedback. Also, don't forget to &lt;em&gt;star&lt;/em&gt; this action ;) Thank you.&lt;/p&gt;

</description>
      <category>github</category>
      <category>ci</category>
      <category>githubactions</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
