<?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: Raul Zaharia</title>
    <description>The latest articles on DEV Community by Raul Zaharia (@rzaharia).</description>
    <link>https://dev.to/rzaharia</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%2F765119%2Fc80c7124-274e-45d3-af74-766b3757aaab.png</url>
      <title>DEV Community: Raul Zaharia</title>
      <link>https://dev.to/rzaharia</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rzaharia"/>
    <language>en</language>
    <item>
      <title>Starting GitHub actions where needed</title>
      <dc:creator>Raul Zaharia</dc:creator>
      <pubDate>Wed, 08 Dec 2021 22:14:07 +0000</pubDate>
      <link>https://dev.to/rzaharia/starting-github-actions-where-needed-e42</link>
      <guid>https://dev.to/rzaharia/starting-github-actions-where-needed-e42</guid>
      <description>&lt;h3&gt;
  
  
  My Workflow
&lt;/h3&gt;

&lt;h4&gt;
  
  
  How I chose this repository
&lt;/h4&gt;

&lt;p&gt;I searched for open source projects that would be interesting, and I came across a project in its early development stages (6 months since its first commit). It caught my attention because it provides support for developing text-based interfaces using C++ 20 and at the time its building actions could be improved.&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--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/gdt050579"&gt;
        gdt050579
      &lt;/a&gt; / &lt;a href="https://github.com/gdt050579/AppCUI"&gt;
        AppCUI
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      AppCUI is a cross-platform TUI (Text User Interface) framework designed to allow quick creation of both TUI Application and TUI Games. AppCUI is heavily based on C++20 standards and offers a multitude of widgets such as windows, buttons, checkboxes, radioboxes, comboboxes, listviews, treeviews, tab controls, image previewers, and many more.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
AppCUI&lt;/h1&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/gdt050579/AppCUI/actions/workflows/ci.yml/badge.svg"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hXalhgJI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/gdt050579/AppCUI/actions/workflows/ci.yml/badge.svg" alt="Build icon"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/gdt050579/AppCUIdocs/logo.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GR0CcTLU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/gdt050579/AppCUIdocs/logo.png" alt="AppCUI logo"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This logo is an &lt;a href="https://github.com/gdt050579/AppCUI/tree/main/Examples/Logo"&gt;application&lt;/a&gt; made with &lt;code&gt;AppCUI&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
General description&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;AppCUI&lt;/strong&gt; is a cross-platform &lt;a href="https://en.wikipedia.org/wiki/Text-based_user_interface" rel="nofollow"&gt;TUI&lt;/a&gt; builder. The users of this library can construct an interface using its basic building blocks such as: &lt;em&gt;Window&lt;/em&gt;, &lt;em&gt;Button&lt;/em&gt;, &lt;em&gt;Label&lt;/em&gt;, etc.&lt;/p&gt;
&lt;p&gt;Generally speaking, the library allows to build a virtual desktop, with multiple windows and extensible components.&lt;/p&gt;
&lt;p&gt;The first example is &lt;a href="https://github.com/gdt050579/AppCUI/tree/main/Examples/ListView"&gt;ListView&lt;/a&gt;, an application to showcase US states and their basic information like &lt;em&gt;Population&lt;/em&gt;, &lt;em&gt;Capital&lt;/em&gt;. The user is greeted with an initial window with list view options, like whether the columns are sortable or whether the column separators are visible, after that, a button is pressed to spawn another window with a &lt;em&gt;list view&lt;/em&gt;, showcasing the US states.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/gdt050579/AppCUIdocs/example_images/listview.gif"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--M1PypSW_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://github.com/gdt050579/AppCUIdocs/example_images/listview.gif" alt="ListView usage example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The library displays the whole spectre of ASCII (and ASCII extended, via &lt;a href="https://en.wikipedia.org/wiki/Code_page_437" rel="nofollow"&gt;Code Page 437&lt;/a&gt;) characters, but also a wide range of &lt;code&gt;UTF16&lt;/code&gt; characters.&lt;/p&gt;
&lt;p&gt;In this example…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/gdt050579/AppCUI"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h4&gt;
  
  
  &lt;a href="https://github.com/gdt050579/AppCUI"&gt;AppCUI&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;AppCUI is a cross-platform text-based user interface. It offers support for building complex interfaces using basic bulding blocks, such as Window, Button, Label, etc.&lt;/p&gt;

&lt;p&gt;You can find more &lt;a href="https://github.com/gdt050579/AppCUI#readme"&gt;here&lt;/a&gt;. The &lt;a href="https://github.com/gdt050579/AppCUI/blob/main/LICENSE"&gt;license&lt;/a&gt; is permissive.&lt;/p&gt;

&lt;h3&gt;
  
  
  DIY Deployments
&lt;/h3&gt;

&lt;p&gt;The first action I integrated into the repository was &lt;a href="https://github.com/gdt050579/AppCUI/blob/main/.github/workflows/codeql-analysis.yml"&gt;CodeQL analysis&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Since the project doesn't have a release method right now, I decided to propose a solution for automatically uploading the binaries when the build is done when a tag is submitted having a specific format v&lt;code&gt;MajorVers&lt;/code&gt;.&lt;code&gt;MinorVers&lt;/code&gt;.&lt;code&gt;PatchVersion&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This is only the stepping stone because the real automated workflow would now require (in my opinion) any interaction from the user, and it would automatically increase the version number.&lt;/p&gt;

&lt;p&gt;When there are found merges to the release branch → it triggers an PatchVersion increment and could also increase the MinorVersion depending on the number of commits and on the complexity. MajorVersion will only be increased manually because it will mean a huge change in the codebase has been made.&lt;/p&gt;

&lt;h3&gt;
  
  
  Release action
&lt;/h3&gt;

&lt;p&gt;Those release actions are present on &lt;a href="https://github.com/rzaharia/AppCUI"&gt;my fork&lt;/a&gt; of the repo because I didn't want to disturb other contributors until I have something that is well thought, and it's working as expected.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/rzaharia/AppCUI/blob/main/.github/workflows/deploy_release.yml"&gt;release action&lt;/a&gt;, at the moment, consists of three steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pushing the tag with a specific format v&lt;code&gt;MajorVers&lt;/code&gt;.&lt;code&gt;MinorVers&lt;/code&gt;.&lt;code&gt;PatchVersion&lt;/code&gt; that triggers the release action&lt;/li&gt;
&lt;li&gt;building the project for each platform using cmake (Windows, Linux and Mac) and uploading the binaries using the action &lt;a href="https://github.com/actions/upload-artifact"&gt;upload-artifact@v2&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;getting version name from the tag&lt;/li&gt;
&lt;li&gt;downloading the artifacts (using the download-artifact@v2 action) and creating the release packages for users to be able to simply download the required binary. For example, the &lt;code&gt;AppCUI_linux_release.zip&lt;/code&gt; contains an include folder where the headers are present, and the framework is built both statically and dynamically. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Results can be seen &lt;a href="https://github.com/rzaharia/AppCUI/releases"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Future development
&lt;/h3&gt;

&lt;p&gt;I will extend the release workflow to support automatically increasing the version of the build when new code is merged into the release branch. &lt;/p&gt;

&lt;p&gt;In conclusion, this was a wonderful experience and could learn a lot. I will continue to develop and adjust the workflow when I discover new and better methods.&lt;/p&gt;

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