<?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: Doka Guide</title>
    <description>The latest articles on DEV Community by Doka Guide (@doka-guide).</description>
    <link>https://dev.to/doka-guide</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%2Forganization%2Fprofile_image%2F5071%2Ff52903bd-c2dc-40d5-a5da-a68767ba3232.jpg</url>
      <title>DEV Community: Doka Guide</title>
      <link>https://dev.to/doka-guide</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/doka-guide"/>
    <language>en</language>
    <item>
      <title>Label automation at your fingertips</title>
      <dc:creator>Nik Lopin</dc:creator>
      <pubDate>Wed, 08 Dec 2021 21:38:47 +0000</pubDate>
      <link>https://dev.to/doka-guide/label-automation-at-your-fingertips-33k3</link>
      <guid>https://dev.to/doka-guide/label-automation-at-your-fingertips-33k3</guid>
      <description>&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%2Fmei9bas7nk6dcgcforwm.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%2Fmei9bas7nk6dcgcforwm.png" alt="Image of dog created using font characters"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://doka.guide/" rel="noopener noreferrer"&gt;Doka&lt;/a&gt; is a Russian web developer's newest open-source handbook. We are new, so we had to create our workflow from scratch. We are demanding labels users, and we can hook you up too!&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem
&lt;/h2&gt;

&lt;p&gt;When a project has a sophisticated multi-stage review process, the workflow quickly goes out of hand - pull requests get lost, and the review time grows, leading to unhappy contributors.&lt;/p&gt;

&lt;p&gt;For example, In Doka's case, we have four sections of our website, each with a dedicated editor: HTML, CSS, JS, and tools. On top of that, there is a responsible for demos, an illustrator, and a publishing editor. We wanted to have one place where they can go to understand what job is pending.&lt;/p&gt;

&lt;p&gt;In most of the repos, you probably want to know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the scope a particular PR has;&lt;/li&gt;
&lt;li&gt;what parts of the project it touches;&lt;/li&gt;
&lt;li&gt;whether it removes or edits files you don't want to be touched.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Options
&lt;/h2&gt;

&lt;p&gt;What are the options Github gives us? There are not many: codeowners and labels.&lt;/p&gt;

&lt;h3&gt;
  
  
  Codeowners
&lt;/h3&gt;

&lt;p&gt;Assignee and reviewers are similar. Somebody assigns a person responsible for the PR, and you can filter the list by your name. &lt;/p&gt;

&lt;p&gt;Reviewers can even be automated using a CODEOWNERS file at the root of the project. Code owners are defined based on files and have to get approval from the owner. &lt;/p&gt;

&lt;p&gt;The significant advantage of that approach is that the reviewer gets notifications about the PR. &lt;/p&gt;

&lt;p&gt;However, the more code you have, the more complicated the file becomes. It also bloats the notification panel because you automatically watch every PR you were assigned to.&lt;/p&gt;

&lt;h3&gt;
  
  
  Labels
&lt;/h3&gt;

&lt;p&gt;Labels are a non-restrictive approach to marking PRs, and they do not require anything from your side to provide insights about the PR content.&lt;/p&gt;

&lt;p&gt;We found they are a great companion of code owners when cooked well. The label-scoped pull requests and issues have a unique filter URL, which a person can bookmark and see only their scope of work.&lt;/p&gt;

&lt;p&gt;However, you need to be careful to not create too many, making them impossible to grasp and use by contributors.&lt;/p&gt;

&lt;p&gt;The standard approach is to label PRs by task type (bug, feature, question, etc.) and by complexity (internal, good first issue).&lt;/p&gt;

&lt;p&gt;We decided to add more essential labels:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;scope - module, section, component;&lt;/li&gt;
&lt;li&gt;type work needed - design review, editor check, or demo creation;&lt;/li&gt;
&lt;li&gt;restricted files touched — e.g., removed &lt;code&gt;package-lock.json&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;add your project-specific labels - we also add a label that reflects the &lt;code&gt;tag&lt;/code&gt; key from markdown files' frontmatter.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Solution
&lt;/h2&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%2Fb0s01p814jse5uupma0r.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%2Fb0s01p814jse5uupma0r.png" alt="Use code owners and labels"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We took the best from both worlds and followed the approach we found extremely useful:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Define code owners for parts that are critical, no less than two people per section;&lt;/li&gt;
&lt;li&gt;Provide additional information automatically through labels.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We couldn't find the best automatic labeler, so we wrote it ourselves. With it, you can automate both sides of the equation. It has built-in core modules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;label PR based on file paths in a PR and their status (added, removed, renamed, modified);&lt;/li&gt;
&lt;li&gt;assignee;&lt;/li&gt;
&lt;li&gt;front matter from any statically generated engine (we use 11ty)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can add yours!&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/doka-guide" rel="noopener noreferrer"&gt;
        doka-guide
      &lt;/a&gt; / &lt;a href="https://github.com/doka-guide/doka-labeler" rel="noopener noreferrer"&gt;
        doka-labeler
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      An action for automatically labelling pull requests
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/doka-guide/doka-labeler/blob/main/img/logo.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fdoka-guide%2Fdoka-labeler%2Fraw%2Fmain%2Fimg%2Flogo.png" width="230" height="80" alt="Dog in glasses"&gt;&lt;/a&gt;
  &lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Doka Labeler&lt;/h1&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/doka-guide/doka-labeler/actions/workflows/test.yaml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/doka-guide/doka-labeler/actions/workflows/test.yaml/badge.svg" alt="Testing"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Automatically label pull requests based on multiple criteria with minimal configuration:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;files added, deleted, renamed, or modified&lt;/li&gt;
&lt;li&gt;assignees&lt;/li&gt;
&lt;li&gt;front matter of markdown files&lt;/li&gt;
&lt;li&gt;your custom rules&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Example&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Set "design review" label if PR contains a new HTML file in the &lt;em&gt;src&lt;/em&gt; folder:&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-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;span class="pl-ent"&gt;design review&lt;/span&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;:
  &lt;span class="pl-ent"&gt;files&lt;/span&gt;:
    &lt;span class="pl-ent"&gt;added&lt;/span&gt;: &lt;span class="pl-s"&gt;src/**/*.html&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Comparison with other labelers&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Doka Labeler — set labels PRs based on files and their statuses, assignees, front matter, and more with readable configuration.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/marketplace/actions/labeler" rel="noopener noreferrer"&gt;Official Github Labeler&lt;/a&gt; — can assign labels by file path presented in the PR. Cannot assign labels based on file status.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/marketplace/actions/pr-labeler" rel="noopener noreferrer"&gt;PR Labeler&lt;/a&gt; — assign labels based on branch name.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/marketplace/actions/label-mastermind" rel="noopener noreferrer"&gt;Label Mastermind&lt;/a&gt; — can do everything, but has a complex configuration&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Getting Started&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Create Workflow&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;Create a workflow (eg: .github/workflows/labeler.yml see &lt;a href="https://help.github.com/en/articles/configuring-a-workflow#creating-a-workflow-file" rel="noopener noreferrer"&gt;Creating a Workflow file&lt;/a&gt;) to apply the labeler for the repository:&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;Labeler&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;/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/doka-guide/doka-labeler" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;

&lt;p&gt;Let's consider a blog where posts are placed in the &lt;em&gt;posts&lt;/em&gt; folder. Each post can be either an article or a daily log which is defined in the &lt;code&gt;tags&lt;/code&gt; front-matter key (as in dev.to). &lt;/p&gt;

&lt;p&gt;We want to label PRs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;with the type of post it contains;&lt;/li&gt;
&lt;li&gt;as "needs design review" when a new image is added;&lt;/li&gt;
&lt;li&gt;an alarming label when critical files are removed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is how we can organize it using Doka Labeler. &lt;/p&gt;

&lt;h4&gt;
  
  
  Create workflow
&lt;/h4&gt;

&lt;p&gt;Create a workflow definition file at &lt;code&gt;.github/workflows/labeler.yml&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;
  &lt;em&gt;labeler.yml&lt;/em&gt;
  &lt;br&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;Labeler&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="s"&gt;main&lt;/span&gt;
  &lt;span class="na"&gt;pull_request&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="s"&gt;main&lt;/span&gt;
  &lt;span class="na"&gt;workflow_dispatch&lt;/span&gt;&lt;span class="pi"&gt;:&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;labeling&lt;/span&gt;&lt;span class="pi"&gt;:&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@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;Run labeler&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;doka-guide/doka-labeler@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;token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&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;secrets.GITHUB_TOKEN&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"&lt;/span&gt;
          &lt;span class="na"&gt;config&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;.github/labeler-config.yml"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;/p&gt;

&lt;h4&gt;
  
  
  Define labeling rules
&lt;/h4&gt;

&lt;p&gt;Create a config file at &lt;code&gt;.github/labeler-config.yml&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;
  &lt;em&gt;labeler-config.yml&lt;/em&gt;
  &lt;br&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# set "article" label when front matter has "article"&lt;/span&gt;
&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;article"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;meta&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;tags&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;article"&lt;/span&gt;

&lt;span class="c1"&gt;# set "daily log" label from front matter:&lt;/span&gt;
&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;daily&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;log"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;meta&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;tags&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;daily-log"&lt;/span&gt;


&lt;span class="c1"&gt;# "design review" if images are added or modified:&lt;/span&gt;
&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;design&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;review"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;files&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;added&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="err"&gt;*&lt;/span&gt;&lt;span class="s"&gt;.(jpg|jpeg|svg|png)&lt;/span&gt;
      &lt;span class="na"&gt;modified&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="err"&gt;*&lt;/span&gt;&lt;span class="s"&gt;.(jpg|jpeg|svg|png)&lt;/span&gt;

&lt;span class="c1"&gt;# alarm when critical files are removed&lt;/span&gt;
&lt;span class="s2"&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;alarm"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;strategy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;create-if-missing&lt;/span&gt; &lt;span class="c1"&gt;# create this label if it does not exist&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;files&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;modified&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;package-lock.json&lt;/span&gt;
      &lt;span class="na"&gt;removed&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;package-lock.json&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;package.json&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;.github/**&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;/p&gt;

&lt;p&gt;We have more examples &lt;a href="https://github.com/doka-guide/doka-labeler/tree/main/examples" rel="noopener noreferrer"&gt;in the repository&lt;/a&gt;!&lt;/p&gt;

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

&lt;p&gt;Maintainer Must-Haves&lt;/p&gt;

&lt;h3&gt;
  
  
  Gratitude
&lt;/h3&gt;

&lt;p&gt;People:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__738094"&gt;
    &lt;a href="/igsekor" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&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%2Fuser%2Fprofile_image%2F738094%2F35410469-b249-4e2b-981d-0eaed5f15c36.jpeg" alt="igsekor image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/igsekor"&gt;Igor Korovchenko&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/igsekor"&gt;My first code was on Basic in September 1990. During 3 years after 1992 I hadn't any opportunity to write a code. But from the end of 1995 I started...&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div class="ltag__user ltag__user__id__206604"&gt;
    &lt;a href="/nlopin" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&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%2Fuser%2Fprofile_image%2F206604%2F07274859-9376-460c-928f-d7ed82c5ec34.jpeg" alt="nlopin image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/nlopin"&gt;Nik Lopin&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/nlopin"&gt;Teaching, mentoring, edtech, mobility and fast web. 

10+ years in IT, in various positions: engineer, tech lead, engineering manager, and product owner.&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Libraries used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/actions/checkout" rel="noopener noreferrer"&gt;Checkout Action&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/micromatch/picomatch" rel="noopener noreferrer"&gt;Picomatch&lt;/a&gt; instead of minimatch&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/jxson/front-matter" rel="noopener noreferrer"&gt;front-matter&lt;/a&gt; parser&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/vercel/ncc" rel="noopener noreferrer"&gt;Vercel's ncc&lt;/a&gt; compiler&lt;/li&gt;
&lt;/ul&gt;

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