<?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: Rukundo Kevin</title>
    <description>The latest articles on DEV Community by Rukundo Kevin (@rukundokevin).</description>
    <link>https://dev.to/rukundokevin</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F538826%2F5051eae7-70dd-4c19-8c37-80b9c46617d1.jpg</url>
      <title>DEV Community: Rukundo Kevin</title>
      <link>https://dev.to/rukundokevin</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rukundokevin"/>
    <language>en</language>
    <item>
      <title>AmaliTech Apprenticeship Program (AAP) (AAP)</title>
      <dc:creator>Rukundo Kevin</dc:creator>
      <pubDate>Sun, 09 Aug 2026 12:44:41 +0000</pubDate>
      <link>https://dev.to/rukundokevin/amalitech-apprenticeship-program-aap-aap-2ojd</link>
      <guid>https://dev.to/rukundokevin/amalitech-apprenticeship-program-aap-aap-2ojd</guid>
      <description>&lt;p&gt;&lt;a href="https://amalitech.com/apprenticeship-programme-rwanda/" rel="noopener noreferrer"&gt;AmaliTech Apprenticeship Program (AAP)&lt;/a&gt; launched in November 2025, with its first cohort starting on November 17th, 2025. It is self-paced, meaning apprentices move through the curriculum at their own speed rather than following a fixed lesson-by-lesson schedule, though attendance in the office is still required. It offers 5+ specializations, including Fullstack Development (Node.js/NestJS and React/Next.js or Angular), Python Backend &amp;amp; AI App Development, Backend Development with Java, Data Engineering, DevOps, and Quality Assurance.&lt;/p&gt;

&lt;p&gt;There are two entry paths, entry-level and mid-level, based on experience, and each spends a different amount of time in the program: entry-level apprentices spend 6–9 months, while mid-level apprentices spend 4–6 months. The program is intense: apprentices are required to be in the office 10 hours a day, Monday through Friday. In return, it offers solid compensation. Entry-level apprentices receive a stipend of 250k+ RWF, and mid-level apprentices receive 500k+ RWF.&lt;/p&gt;

&lt;p&gt;That's the program itself. So how do you actually join?&lt;/p&gt;

&lt;h3&gt;
  
  
  Eligibility
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The biggest requirement: since this is an in-person program, you need to already be based in Rwanda or be willing to relocate.&lt;/li&gt;
&lt;li&gt;A background in software development.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Application Process
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Apply.&lt;/strong&gt; Applications open every three months. Cohorts have run in November 2025, March 2026, June 2026, and September 2026, so you can expect the pattern to continue.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Screening, then two assessments.&lt;/strong&gt; If you pass the screening stage, you move on to:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;General Coding Assessment (GCA):&lt;/strong&gt; the harder of the two, but manageable with preparation. It's done on &lt;a href="https://codesignal.com/" rel="noopener noreferrer"&gt;CodeSignal&lt;/a&gt;, either in person or online. To prepare, practice DSA questions on competitive programming sites like &lt;a href="https://leetcode.com/" rel="noopener noreferrer"&gt;LeetCode&lt;/a&gt;, &lt;a href="https://www.codewars.com/" rel="noopener noreferrer"&gt;Codewars&lt;/a&gt;, and &lt;a href="https://www.codechef.com/" rel="noopener noreferrer"&gt;CodeChef&lt;/a&gt; for 1–2 weeks, and you should be in good shape.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cognitive Test:&lt;/strong&gt; taken the same day as the GCA, this evaluates problem-solving, pattern recognition, numerical analysis, and similar skills. Preparation helps here too. Watching a few YouTube videos and practicing sample questions goes a long way. &lt;a href="https://www.youtube.com/playlist?list=PLpyc33gOcbVA4qXMoQ5vmhefTruk5t9lt" rel="noopener noreferrer"&gt;This playlist&lt;/a&gt; is a good starting point.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Take-home challenge.&lt;/strong&gt; If you pass the assessments, you're sent a take-home challenge matching your specialization. This is used in the interview to gauge whether you actually understand the concepts, not just whether you can complete a task.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interview.&lt;/strong&gt; Lastly, you're invited for an interview at AmaliTech, which can run anywhere from 40 minutes to an hour and a half. Understanding your take-home challenge well is essential here, since it's used in place of hypothetical scenario questions. That said, those can come up too.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offer and onboarding.&lt;/strong&gt; If you've passed everything, congratulations! You'll get an offer, and once accepted, you begin onboarding.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; As of August 2026, I work at AmaliTech part-time as a Technical Training Facilitator and am involved with the apprenticeship program.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>bootcamp</category>
      <category>devops</category>
      <category>dataengineering</category>
      <category>career</category>
    </item>
    <item>
      <title>Ready to Code? Your Guide to Coding Bootcamps in Rwanda</title>
      <dc:creator>Rukundo Kevin</dc:creator>
      <pubDate>Sun, 09 Aug 2026 12:08:09 +0000</pubDate>
      <link>https://dev.to/rukundokevin/ready-to-code-your-guide-to-coding-bootcamps-in-rwanda-47h6</link>
      <guid>https://dev.to/rukundokevin/ready-to-code-your-guide-to-coding-bootcamps-in-rwanda-47h6</guid>
      <description>&lt;p&gt;Rwanda has, in the last two decades, positioned itself as a tech hub in Africa, alongside Kenya, South Africa, Nigeria, Egypt, and others I might have forgotten. This has been achieved through the establishment of various programs like the &lt;a href="https://rca.ac.rw/" rel="noopener noreferrer"&gt;Rwanda Coding Academy&lt;/a&gt; and &lt;a href="https://mcoders.minict.gov.rw/" rel="noopener noreferrer"&gt;1 Million Coders&lt;/a&gt;, and by attracting foreign companies to invest in local talent.&lt;/p&gt;

&lt;p&gt;To support what Rwandan (and East African) youth study in schools, several bootcamps have been created to equip them with current technologies and make them job-ready. Beyond these flagship programs, there's also a wider, shifting landscape of NGO- and donor-backed initiatives (women-focused programs like WeCode, for instance) — worth knowing about, though it's a good idea to confirm current cohort status before applying, since programs in this space tend to pause, relaunch, or rebrand fairly often.&lt;/p&gt;

&lt;p&gt;I'm going to give a guide on some of the more established ones and what it takes to join. Here is a non-exhaustive list of those bootcamps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AmaliTech Apprenticeship Program (AAP)&lt;/li&gt;
&lt;li&gt;The Gym&lt;/li&gt;
&lt;li&gt;Solvit Africa&lt;/li&gt;
&lt;li&gt;SheCanCode&lt;/li&gt;
&lt;li&gt;kLab TechUpskill&lt;/li&gt;
&lt;li&gt;CMU Bridge Program&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This guide was written in collaboration with former trainees, members, or apprentices of these programs.&lt;/p&gt;

&lt;p&gt;If you know more coding bootcamps/training programs, feel free to suggest them in the comments. &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>career</category>
      <category>rwanda</category>
      <category>kigali</category>
    </item>
    <item>
      <title>Using Git aliases to improve your productivity.</title>
      <dc:creator>Rukundo Kevin</dc:creator>
      <pubDate>Mon, 08 May 2023 11:00:49 +0000</pubDate>
      <link>https://dev.to/rukundokevin/using-git-aliases-to-improve-your-productivity-8gn</link>
      <guid>https://dev.to/rukundokevin/using-git-aliases-to-improve-your-productivity-8gn</guid>
      <description>&lt;p&gt;Git is a powerful tool but can be challenging to learn and remember commands for frequent use.&lt;/p&gt;

&lt;p&gt;This is where Git alias comes in handy, Git aliases are user-defined shorthand for a sequence of commands that can be easily executed by typing a short name, which gets translated into the full command. &lt;/p&gt;

&lt;p&gt;They are of 2 types. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Git aliases and &lt;/li&gt;
&lt;li&gt;Shell Aliases&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Creating Git Aliases
&lt;/h2&gt;

&lt;p&gt;open ~/.gitconfig in your favorite editor- for my case VSCode.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;code ~/.gitconfig&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Then add your alias.&lt;/p&gt;

&lt;p&gt;Before creating your alias, it is important to ensure that it does not conflict with any existing git commands, as this can cause issues.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[alias]
    s = status -s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you can just type &lt;code&gt;git s&lt;/code&gt; to view your git status.&lt;/p&gt;

&lt;h3&gt;
  
  
  My Aliases
&lt;/h3&gt;

&lt;p&gt;Here are some of Aliases that use.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    s = status
    cnv = commit --no-verify
    cane = commit --amend --no-edit
    aa = add .
    p = push
    pf = push --force
    la = log --oneline --decorate --graph --all
    l = log --oneline --decorate --graph
    rl= ref log
    la = "!git config -l | grep alias | cut -c 7-"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But these are just a few which are useful for me, if you need to explore more &lt;a href="https://www.durdn.com/blog/2012/11/22/must-have-git-aliases-advanced-examples/" rel="noopener noreferrer"&gt;Must Have Git Aliases&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On&lt;/p&gt;

&lt;h2&gt;
  
  
  Shell Aliases
&lt;/h2&gt;

&lt;p&gt;Unlike Git Aliases, Shell alias are stored in ~/.bashrc or ~/.zshrc&lt;/p&gt;

&lt;h3&gt;
  
  
  Creating Shell aliases.
&lt;/h3&gt;

&lt;p&gt;open ~/.zshrc or ~/.bashrc in your editor.&lt;br&gt;
Then add your alias in this format.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;alias gs='git status -s'&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
So, when you are going to check, just write gs without the Git prefix.&lt;/p&gt;

&lt;p&gt;One thing to take into account though before creating your alias is to make sure that your alias doesn't collide with the already existing git command which can mess &lt;br&gt;
Hope Aliases makes your development more productive and faster.&lt;br&gt;
If you find the content useful, you can follow me on &lt;a href="https://github.com/rukundo-kevin" rel="noopener noreferrer"&gt;Github &lt;/a&gt; or &lt;a href="https://twitter.com/rukundokevin_" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;References.&lt;br&gt;
&lt;a href="https://gist.github.com/mwhite/6887990" rel="noopener noreferrer"&gt;https://gist.github.com/mwhite/6887990&lt;/a&gt;&lt;br&gt;
&lt;a href="https://git-scm.com/book/en/v2/Git-Basics-Git-Aliases" rel="noopener noreferrer"&gt;https://git-scm.com/book/en/v2/Git-Basics-Git-Aliases&lt;/a&gt;&lt;/p&gt;

</description>
      <category>git</category>
      <category>productivity</category>
      <category>shell</category>
      <category>beginners</category>
    </item>
    <item>
      <title>GitHub Action: With Coveralls</title>
      <dc:creator>Rukundo Kevin</dc:creator>
      <pubDate>Tue, 07 Mar 2023 11:29:27 +0000</pubDate>
      <link>https://dev.to/rukundokevin/coveralls-with-github-action-4f25</link>
      <guid>https://dev.to/rukundokevin/coveralls-with-github-action-4f25</guid>
      <description>&lt;p&gt;In the previous articles, we created a GitHub Action workflow for one or multiple NodeJS project.&lt;/p&gt;

&lt;p&gt;Today, we are going to go through the steps required to generate code coverage badge using &lt;a href="https://coveralls.io/" rel="noopener noreferrer"&gt;coveralls&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Connect Coveralls with GitHub&lt;/strong&gt; Go to Coveralls and Under "Add repo", add the repository you want to include.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Notice that with the free tier, the repository has to be public.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2 : Add the test coverage script&lt;/strong&gt; &lt;br&gt;
If you use jest to run your tests, you can run jest --coverage to create a coverage report but if you are using another testing framework like Mocha, you can use &lt;a href="https://istanbul.js.org/" rel="noopener noreferrer"&gt;nyc&lt;/a&gt;the Istanbul cli.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"scripts": {
    "test": "mocha --recursive --require @babel/register",
    "test-coverage": "nyc npm test &amp;amp;&amp;amp; nyc report --reporter=text-lcov"}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;--recursive&lt;/em&gt; option looks for tests in subdirectories recursively&lt;br&gt;
&lt;em&gt;--reporter=lcov&lt;/em&gt; means it will create a ./coverage/lcov.info to save the coverage results. We only need to the results on the CI pipeline, if you run this command locally, you can safely gitignore or delete the results again.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Add test coverage to our CI workflow&lt;/strong&gt;&lt;br&gt;
So we will replace the &lt;em&gt;npm run test&lt;/em&gt; in our previous workflow with &lt;em&gt;npm run test-coverage&lt;/em&gt; and another step to the workflow&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Send coverage report to Coveralls
    - name: Coveralls
      uses: coverallsapp/github-action@master
      with:
        github-token: ${{ secrets.GITHUB_TOKEN }}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the new workflow will look like this,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# This workflow will do a clean install of node dependencies, build the source code and run tests
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions

name: CI Pipeline

# trigger build when pushing, or when creating a pull request
on: [push, pull_request]

jobs:
  build:

    # run build on latest ubuntu
    runs-on: ubuntu-latest

    steps:
    # this will check out the current branch (https://github.com/actions/checkout#Push-a-commit-using-the-built-in-token)
    - uses: actions/checkout@v3
    # installing Node
    - name: Use Node.js 16.16.0
      uses: actions/setup-node@v3
      with:
        # this will use the latest Node 16 version
        node-version: 16.16.0
    # install dependencies using clean install to avoid package lock updates
    - run: npm ci
    # build the project if necessary
    - run: npm run build --if-present
    # finally run the tests
    - run: npm run coverage

    # Save coverage report in Coveralls
    - name: Coveralls
      uses: coverallsapp/github-action@master
      with:
        github-token: ${{ secrets.GITHUB_TOKEN }}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We used Coveralls' GitHub Action which can be found &lt;a href="https://github.com/marketplace/actions/coveralls-github-action" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Note that GITHUB_TOKEN is automatically passed and does not have to be configured by you in any way. Since our GitHub account is linked with Coveralls, there is also no additional setup necessary to authenticate your Coveralls account.&lt;/p&gt;

&lt;p&gt;Now commit &amp;amp; push your changes and wait for the build to finish.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Adding the badge&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sign in to coveralls and navigate to your repository. and click on upper embed in badge tab. &lt;/p&gt;

&lt;p&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%2Fntszyxmgeud1sum9aso0.jpg" 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%2Fntszyxmgeud1sum9aso0.jpg" alt="Coveralls test badge" width="800" height="341"&gt;&lt;/a&gt;&lt;br&gt;
 Copy the Markdown, go and paste it in your repo's README.&lt;/p&gt;

&lt;p&gt;After all that you should be able to see your coverage badge like this one( Hope your coverage a higher than 70 )&lt;/p&gt;

&lt;p&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%2F8ng6lm8r5hygx1tg5hip.jpg" 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%2F8ng6lm8r5hygx1tg5hip.jpg" alt="Coverage results" width="114" height="49"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's all there is to it. Now all that's left is to set up the CD workflow. &lt;/p&gt;

&lt;p&gt;Follow me on &lt;a href="https://github.com/rukundo-kevin" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/p&gt;

</description>
      <category>githubactions</category>
      <category>testing</category>
      <category>devops</category>
      <category>github</category>
    </item>
    <item>
      <title>GitHub Actions: Building and testing multiple NodeJS versions with one action</title>
      <dc:creator>Rukundo Kevin</dc:creator>
      <pubDate>Tue, 07 Mar 2023 10:19:19 +0000</pubDate>
      <link>https://dev.to/rukundokevin/github-actions-building-and-testing-multiple-nodejs-versions-with-one-action-1dhk</link>
      <guid>https://dev.to/rukundokevin/github-actions-building-and-testing-multiple-nodejs-versions-with-one-action-1dhk</guid>
      <description>&lt;p&gt;In the &lt;a href="https://dev.to/rukundokevin/github-actions-setting-up-ci-for-a-node-project-51l1"&gt;previous article&lt;/a&gt; we set a node project with GitHub Actions.&lt;/p&gt;

&lt;p&gt;Now we are going to build and test for multiple NodeJS version in one action, because it sometimes important to build and test your software with multiple versions of NodeJS, e.g. to cover backward compatibility or to test against all available LTS releases.&lt;/p&gt;

&lt;p&gt;Sounds fun --- let's get to it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# This workflow will do a clean install of node dependencies, build the source code and run tests
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions

name: CI Pipeline

# trigger build when pushing, or when creating a pull request
on: [push, pull_request]

jobs:
  build:

    # run build on latest ubuntu
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [16.x, 18.x]
    steps:
    # this will check out the current branch (https://github.com/actions/checkout#Push-a-commit-using-the-built-in-token)
    - uses: actions/checkout@v3
    # installing Node
    - name: Use Node.js 16.16.0
      uses: actions/setup-node@v3
      with:
        node-version: ${{ matrix.node-version }}
    # install dependencies using clean install to avoid package lock updates
    - run: npm ci
    # build the project if necessary
    - run: npm run build --if-present
    # finally run the test
    - run: npm test
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After that commit &amp;amp; push your work and head over to action section of your repo to view all executed workflows.&lt;/p&gt;

&lt;p&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%2F8si612z5jyhuwvwhk0yc.jpg" 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%2F8si612z5jyhuwvwhk0yc.jpg" alt="Workflow for multiple Node Versions" width="588" height="282"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the next article we will add coveralls to view code coverage badge.&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>GitHub Actions: Setting up CI for a Node project</title>
      <dc:creator>Rukundo Kevin</dc:creator>
      <pubDate>Tue, 07 Mar 2023 10:00:35 +0000</pubDate>
      <link>https://dev.to/rukundokevin/github-actions-setting-up-ci-for-a-node-project-51l1</link>
      <guid>https://dev.to/rukundokevin/github-actions-setting-up-ci-for-a-node-project-51l1</guid>
      <description>&lt;p&gt;CI/CD (Continuous Integration/Continuous Delivery/Development) is now an essential part of all kind of software projects. Today I am going to work you through setting up CI/CD with GitHub Actions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Setting up CI&lt;/strong&gt;&lt;br&gt;
To use a GitHub action for building your repository at each push (on all branches), all you have to do is to place a YAML file under .github/workflows and commit it with your repo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir .github
cd .github
mkdir workflows
cd workflows
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inside the created &lt;code&gt;.yml&lt;/code&gt; file, Add the following.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# This workflow will do a clean install of node dependencies, build the source code and run tests
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions

name: CI Pipeline

# trigger build when pushing, or when creating a pull request
on: [push, pull_request]

jobs:
  build:

    # run build on latest ubuntu
    runs-on: ubuntu-latest

    steps:
    # this will check out the current branch (https://github.com/actions/checkout#Push-a-commit-using-the-built-in-token)
    - uses: actions/checkout@v3
    # installing Node
    - name: Use Node.js 16.16.0
      uses: actions/setup-node@v3
      with:
        # this will use the latest Node 16 version
        node-version: 16.16.0
    # install dependencies using clean install to avoid package lock updates
    - run: npm ci
    # build the project if necessary
    - run: npm run build --if-present
    # finally run the test
    - run: npm test
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What this workflow basically does is,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;checkout the branch&lt;/li&gt;
&lt;li&gt;install node (on ubuntu)&lt;/li&gt;
&lt;li&gt;install the dependencies of your project and build it if necessary&lt;/li&gt;
&lt;li&gt;finally, run the tests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Comments are added on every line explaining the setup.&lt;/p&gt;

&lt;p&gt;After! Commit &amp;amp; push your work and head over to the Actions section of your repo where you can see all executed workflows…&lt;/p&gt;

&lt;p&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%2F6rpu1iqtk1mpov5uv4v2.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%2F6rpu1iqtk1mpov5uv4v2.png" alt="GitHub Action execution" width="799" height="315"&gt;&lt;/a&gt;&lt;br&gt;
And Click on the workflow to view detailed results&lt;/p&gt;

&lt;p&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%2Fdx1nv85k2fg24fd0ehc3.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%2Fdx1nv85k2fg24fd0ehc3.png" alt=" " width="683" height="526"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And Voila, you have a working GitHub Action workflow now.&lt;br&gt;
&lt;a href="https://i.giphy.com/media/1BFEEIo4h1BuTH8eqP/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img width="484" src="https://i.giphy.com/media/1BFEEIo4h1BuTH8eqP/giphy.gif" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>githubactions</category>
      <category>coveralls</category>
      <category>node</category>
    </item>
    <item>
      <title>Making it through Andela Technical Leadership Program(ATLP).</title>
      <dc:creator>Rukundo Kevin</dc:creator>
      <pubDate>Wed, 22 Feb 2023 16:38:10 +0000</pubDate>
      <link>https://dev.to/rukundokevin/my-atlp-journey-58o7</link>
      <guid>https://dev.to/rukundokevin/my-atlp-journey-58o7</guid>
      <description>&lt;p&gt;The ATLP(Andela Technical Leadership Program) is a 9 month bootcamp for university graduates who want to get into coding in Rwanda. In this blog, I'll be sharing my experiences surrounding the program and some tips that will hopefully help you gain some insight into it.&lt;/p&gt;

&lt;p&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%2Fcx8ktbwly5cxauvje33z.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%2Fcx8ktbwly5cxauvje33z.png" alt="ATLP IMAGE" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Elibility&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You have to be residing in Rwanda during the whole bootcamp.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Willing to commit 30 Hours per week (6 hours per day)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Application process*&lt;br&gt;
Applications to ATLP opens once a year - in October to November. You'll get 2 weeks to submit your application.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Complete the application form&lt;/strong&gt;&lt;br&gt;
The first step is to complete the application form which is usually on GlassDoor, which I did in October, 2021.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Complete the technical assessment&lt;/strong&gt;&lt;br&gt;
After completing the application you're required to complete a technical assessment on HackerRank which test your problem solving capabilities with question in HTML, CSS, JS and logic. I completed the assessment and my codes passed all the tests. &lt;br&gt;
I was given a simple project to complete before the interview.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Technical Interview&lt;/strong&gt;&lt;br&gt;
If you pass the technical assessment you are invited to an interview. During my interview, I was asked about how I developed the project I was given and given a challenge which I also did.&lt;/p&gt;

&lt;p&gt;After a week after completing the interview I received the acceptance email which was delightful.&lt;/p&gt;

&lt;p&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%2Fklhjz9zn3z53s7xe530x.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%2Fklhjz9zn3z53s7xe530x.png" alt="ATLP acceptance email" width="800" height="410"&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My Experience ✨&lt;/strong&gt;&lt;br&gt;
After being accepted, we were onboarded and given the timeline of the program. The bootcamp was to be divided into 3 sections.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Core Concepts&lt;/strong&gt; (2 month): Where trainees would learn basic web technologies, version control and best practices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team Projects&lt;/strong&gt; (3 month ): Where trainees who were able to progress from the previous phase, would collaborate to develop a project using PERN(PostgreSQL, Express, React and NodeJS) stack.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apprenticeship&lt;/strong&gt; (3 Month ): Lastly, progressed trainees would be assigned to local and international companies for internship. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;1. Core Concepts&lt;/strong&gt;&lt;br&gt;
We started core concepts where we learnt using Figma, Trello, Git and GitHub but I was lucky because I was already familiar with everything so it was easy for to progress to the next phase.&lt;br&gt;
We were required to build a personal website using the skills we have acquired which can be found &lt;a href="http://www.rukundokevin.codes" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Team Projects&lt;/strong&gt;&lt;br&gt;
In the second phase I collaborated with 4 other trainees to build accommodation booking website using PERN Stack. &lt;/p&gt;

&lt;p&gt;During this phase I knew some of the things but It was my first time collaborating with a lot of people so it was challenging but luckily our Manager and Team Lead were helpful and helped us. &lt;/p&gt;

&lt;p&gt;All 5 of us progressed to the next phase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.  Apprenticeship&lt;/strong&gt;&lt;br&gt;
After team projects, I was placed on an internal project because I was student and couldn't be assigned to external company.&lt;/p&gt;

&lt;p&gt;I was onboarded on the projects trainees from other cohorts were working on, a website for education institutions to record and track student or trainee performance called DevPulse(&lt;a href="https://metron-devpulse.vercel.app" rel="noopener noreferrer"&gt;https://metron-devpulse.vercel.app&lt;/a&gt; ).&lt;/p&gt;

&lt;p&gt;During this phase I when I met the real challenge as we were using GraphQl, TypeScript, Nexus most of  which I was unfamiliar with. But with the help from fellow trainees and Manager I was able to familiarize myself with different tools and concepts and finished the last phase.&lt;/p&gt;

&lt;p&gt;Thank you for reading! I hope this was worth your time and provided you with useful insights. Please feel free to reach to me if you have any queries (or if you'd simply like to connect!) via &lt;a href="https://www.linkedin.com/in/rukundokevin" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;. I'll be happy to help! Good luck!&lt;/p&gt;

</description>
      <category>welcome</category>
    </item>
    <item>
      <title>Open Source internships for students</title>
      <dc:creator>Rukundo Kevin</dc:creator>
      <pubDate>Thu, 26 Jan 2023 05:48:20 +0000</pubDate>
      <link>https://dev.to/rukundokevin/open-source-internships-for-students-1i9c</link>
      <guid>https://dev.to/rukundokevin/open-source-internships-for-students-1i9c</guid>
      <description>&lt;p&gt;We just went into the holiday and my friends were looking for internships which made me think that there might be a lot of people out there also looking for such good opportunities.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I want internship in the summer, it could be valuable usage of my time&lt;/p&gt;

&lt;p&gt;I want to get into opensource but I am a beginner.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So, without further ado, Here is a list of some internship opportunities, that might be of interest to you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Opportunities in Rwanda&lt;/strong&gt;&lt;/p&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;Duration&lt;/th&gt;
&lt;th&gt;Stipend&lt;/th&gt;
&lt;th&gt;Timeline&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://andela.com/engineers/technical-leadership-program-rwanda/" rel="noopener noreferrer"&gt;Andela Technical Leadership Program&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;9 Months&lt;/td&gt;
&lt;td&gt;No- 25000 RWF for Internet&lt;/td&gt;
&lt;td&gt;Application from Octo - Dec&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.solvit.africa/opportunities" rel="noopener noreferrer"&gt;Solvit Africa Bootcamp&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;3 Months&lt;/td&gt;
&lt;td&gt;No- 60000 Rwf For Transport&lt;/td&gt;
&lt;td&gt;Application in Jan, May and August.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.zatec.io/" rel="noopener noreferrer"&gt;Zatech Bootcamp&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;9-12 Months&lt;/td&gt;
&lt;td&gt;Yes - 100 000RWF - 150 000RWF&lt;/td&gt;
&lt;td&gt;February&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://aipi.rw/tech-upskill/" rel="noopener noreferrer"&gt;Klab Tech Upskill&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;6 Months&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://docs.google.com/forms/d/e/1FAIpQLScImgyHmGKeb5fTlSIe1KuFDEFptre85lUPwyS4c9O5fA4Otw/viewform" rel="noopener noreferrer"&gt;The Gym Rwanda &amp;amp; Ojemba &lt;/a&gt;&lt;/td&gt;
&lt;td&gt;6 Month&lt;/td&gt;
&lt;td&gt;Yes - 120 000 Rwf - 150 000RWF&lt;/td&gt;
&lt;td&gt;23rd of April 2023 -&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;International opportunities&lt;/strong&gt;&lt;/p&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;Duration&lt;/th&gt;
&lt;th&gt;Stipend&lt;/th&gt;
&lt;th&gt;Timeline&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://summerofcode.withgoogle.com/" rel="noopener noreferrer"&gt;Google Summer of Code&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;10-22 Weeks (flexible)&lt;/td&gt;
&lt;td&gt;Yes - Need based (15000$ - 3000$)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://developers.google.com/open-source/gsoc/timeline" rel="noopener noreferrer"&gt;Timeline&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://fellowship.mlh.io/" rel="noopener noreferrer"&gt;MLH Fellowship&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;12 Weeks&lt;/td&gt;
&lt;td&gt;Yes - 5000$&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.tfaforms.com/4956119" rel="noopener noreferrer"&gt;January 30th - September 8th (3 batches year round)&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.gnome.org/outreachy/" rel="noopener noreferrer"&gt;Outreachy&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;3 Months&lt;/td&gt;
&lt;td&gt;Yes - 7000$&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.gnome.org/outreachy/" rel="noopener noreferrer"&gt;Timeline&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://wiki.lfnetworking.org/display/LN/LFN+Mentorship+Program" rel="noopener noreferrer"&gt;LFN Mentorship Program&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;12 Weeks FT, 24 Weeks PT&lt;/td&gt;
&lt;td&gt;Yes- Need based (3000$ - 6000$)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://wiki.lfnetworking.org/display/LN/LFN+Mentorship+Program#LFNMentorshipProgram-2023ProgramTimeline*" rel="noopener noreferrer"&gt;March 1st - May 31st , June 1st - August 31st , September 1st - November 30th&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://lfx.linuxfoundation.org/tools/mentorship/" rel="noopener noreferrer"&gt;LFX Mentorship Program&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;12 Weeks&lt;/td&gt;
&lt;td&gt;Yes- Need based (3000$ - 6600$)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://wiki.lfnetworking.org/display/LN/LFN+Mentorship+Program#LFNMentorshipProgram-2023ProgramTimeline*" rel="noopener noreferrer"&gt;Timeline&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://developers.google.com/season-of-docs/" rel="noopener noreferrer"&gt;Season of Docs&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;6 Months&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;&lt;a href="https://developers.google.com/season-of-docs/docs/timeline" rel="noopener noreferrer"&gt;Timeline&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.x.org/wiki/XorgEVoC/" rel="noopener noreferrer"&gt;The X.Org Endless Vacation of Code (EVoC)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;3 - 4 Months&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;&lt;a href="https://summerofcode.withgoogle.com/how-it-works/#timeline" rel="noopener noreferrer"&gt;Timeline&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://fossasia.org/internship" rel="noopener noreferrer"&gt;FOSSASIA Internship Programme&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;2 - 6 Months&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;&lt;a href="https://fossasia.org/internship" rel="noopener noreferrer"&gt;Timeline&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://wiki.linuxfoundation.org/lkmp" rel="noopener noreferrer"&gt;Linux Kernel Mentorship Program&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;12 Weeks Full-time, 24 Weeks Part-time&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.linuxfoundation.org/lfx/mentorship/mentorship-program-timelines" rel="noopener noreferrer"&gt;March 1st - May 31st , June 1st - August 31st , September 1st - November 30th&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>tooling</category>
      <category>llm</category>
      <category>productivity</category>
      <category>integrations</category>
    </item>
  </channel>
</rss>
