mirror of
https://github.com/avinal/avinal.github.io.git
synced 2026-07-03 23:30:09 +05:30
add blogs
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
---
|
||||
title: The Big Red Ants
|
||||
date: 2012-02-27 22:47
|
||||
tags: ants, sav
|
||||
category: article
|
||||
description: In a bird’s eye view if we see around us, ants are the common and
|
||||
tiniest living entitiy seen by naked eye. One of them are the big red ants, in
|
||||
my view they are unique from others in two ways, first they live on trees and
|
||||
second their anteenas are too long and bent in middle, seems like their fore
|
||||
legs. Their mandible (mouth) seems like eagle’s beak.
|
||||
---
|
||||
|
||||
# The Big Red Ants
|
||||
|
||||
In a bird’s eye view if we see around us, ants are the common and
|
||||
tiniest living entitiy seen by naked eye. One of them are the big red
|
||||
ants, in my view they are unique from others in two ways, first they
|
||||
live on trees and second their anteenas are too long and bent in middle,
|
||||
seems like their fore legs. Their mandible (mouth) seems like eagle’s
|
||||
beak.
|
||||
|
||||
As I observed them making and reparing their nests, I concluded that
|
||||
they are very laborious and intellectual. They create their nests by
|
||||
binding two or more leaves (maybe up to 500) together. They stich the
|
||||
leaves using a stinky white substance either excreted by themselves or
|
||||
from trees. This substance is like web of spider. At first builder ants
|
||||
creates an array at the blade of two leaves. Then they make ant-cranes
|
||||
or ant-chain like chain of monomer to form a polymer. They catch the
|
||||
leaves and pull each other to stich. After some time, the parliament of
|
||||
leaves transforms into a leaf-sac called their nest. They also weave
|
||||
translucent cloth like structure to cover remainings of leaf. A nest
|
||||
hangs by a branch of the trees.
|
||||
|
||||
A nest is skillfully divided into living rooms, barracks, storehouse,
|
||||
egg room and queen’s room. The eggroom, lies at the center of nest to
|
||||
protect from outer attack until last time. Besides that, lies queen’s
|
||||
room. Living rooms are sequenncly joined with eggroom. There are
|
||||
different rooms for workers, food searchers etc. The partition of the
|
||||
room resembles atom’s electron shell, one upon another. At last barracks
|
||||
are the outermost rooms, just like outermost orbit of electron. The
|
||||
defence system is strongest at the nest’s opening. A nest may size as
|
||||
2-3 footballs and have 50 to 10000 ants. There may be more openings.
|
||||
|
||||
Now about their attacking and protecting skills. A solider is unique
|
||||
from other ants. It is equipped with many attacking and defending
|
||||
skills. Normally they do not attack. They are social insects. If someone
|
||||
attacks, all other ants go inside, and soldiers come out. They spread
|
||||
allover the nest. They are very sensetive and have sharp vision. If any
|
||||
one of them see their enemy the stand on their hind legs, swinging,
|
||||
their forelegs and anteens in their air as scolding someone. Their spit
|
||||
contains formic acid, present at the end of the abdomen below the
|
||||
rectum. If their nest is broken and eggs fall on ground then the ants
|
||||
make a dome, like the dome of Taj mahal to save the eggs till last their
|
||||
breadth. This shows their caring skills.
|
||||
|
||||
The most amazing is their discipline. They can easily beat a human in
|
||||
race of discipline. Humans must learn from it. When two ants meet, they
|
||||
touch their anteena to communicate. When they walk in a queue, they seem
|
||||
like twinkling dots and dashes. I want to conclude that **All tiny
|
||||
things are not really tiny. It may be as a space having infinite
|
||||
mysteries one has to explore it.**
|
||||
@@ -4,6 +4,7 @@ date: 2019-09-21 15:47
|
||||
category: article
|
||||
tags: [love, article, hindi]
|
||||
---
|
||||
|
||||
# प्रेम रतन धन पायो
|
||||
|
||||
टूटता तारा देखना एक अलौकिक अनुभव है। हिमाद्रि के छत से आसमान कुछ ज्यादा ही करीब प्रतीत होता है । लोग सदियों से हिमालय को पूजते आयें हैं ।
|
||||
|
||||
@@ -0,0 +1,272 @@
|
||||
---
|
||||
title: Create the VLC User Documentation for one Mobile Port(Android)
|
||||
date: 2020-12-01 23:47
|
||||
modified: 2020-12-31 23:19
|
||||
category: development
|
||||
tags: vlc, gsod, gsod2020
|
||||
description: The project was to Create the VLC User Documentation for Android Mobile Port which was previously hosted on VLC’s wiki pages. The major portion of this was to start everything from scratch including chapter separation, section organization.
|
||||
---
|
||||
|
||||
# Create the VLC User Documentation for one Mobile Port(Android)
|
||||
|
||||
VideoLAN is a non-profit organization that develops software for playing
|
||||
video and other media formats. VLC media player (commonly known as just
|
||||
VLC) is a free and Open Source cross-platform multimedia player and
|
||||
framework that plays most multimedia files as well as DVDs, Audio CDs,
|
||||
VCDs, and various streaming protocols built by the VideoLAN organization
|
||||
and a team of volunteers. VLC for Android is a port of the VLC for
|
||||
Android OS.
|
||||
|
||||
The project was to Create the VLC User Documentation for Android Mobile
|
||||
Port which was previously hosted on VLC’s wiki pages. The major portion
|
||||
of this was to start everything from scratch including chapter
|
||||
separation, section organization and an engaging and easy to follow for
|
||||
both technical and non-technical users. The original proposal can be
|
||||
found here.
|
||||
|
||||
## PROJECT GOALS
|
||||
|
||||
- Propose a new structure for documentation e.g. Chapter Separation,
|
||||
Sections etc
|
||||
- Proper balance between technical and non-technical descriptions to
|
||||
serve all kinds of users.
|
||||
- Adequate amount of screenshots in each section and other supporting
|
||||
media to make documentation more appealing.
|
||||
- Optimized for all Screen Sizes. Especially for Mobile Devices.
|
||||
- Ease of navigation
|
||||
|
||||
## COMMUNITY BONDING
|
||||
|
||||
This period was mostly utilized for collecting more information and many
|
||||
internal meetings to shape the projects and bonding with fellow writers,
|
||||
developers(mentors). I got to know more about the VLC organization and
|
||||
the project. We decided to create a skeleton of the project and then
|
||||
follow a Issue-Merge Request-Review-Merge system to keep the commit
|
||||
history clean and maintain the proper review of the work before it is
|
||||
merged.
|
||||
|
||||
I initially proposed that the new documentation should also use the same
|
||||
tools(Sphinx and GitLab Pages) because if in future we want to merge all
|
||||
the documentation into a single one, it will be easier to migrate and
|
||||
will provide a consistency across all documentations. Later I got to
|
||||
know that this will be an independent project and may not be merged
|
||||
since it solves a lot of problems. I was already familiar with the tools
|
||||
so it took no time to get started.
|
||||
|
||||
Nicolas Pomepuy, who is the lead developer of VLC for Android was
|
||||
assigned as my primary mentor and Simon Latapie as secondary mentor.
|
||||
|
||||
## DOCUMENTATION DEVELOPMENT PHASE
|
||||
|
||||
Initial Preparation I first moved my existing demo documentation to an
|
||||
entirely new repository with only the skeleton at the suggestion of my
|
||||
mentor. It was necessary to keep the commit history clean. The skeleton
|
||||
contained the empty directories representing the chapter separation. I
|
||||
got to learn “how to properly develop a project and contribute to open
|
||||
source”. This was a major lesson that got me familiar with the Merge
|
||||
Request and Review system.
|
||||
|
||||
The Development The next part was to frame the actual documentation
|
||||
pages and push to the repository. Since there was a significant
|
||||
time-zone difference we agreed to discuss by creating issues and
|
||||
sometimes my emails. There was one meeting every fortnight to check the
|
||||
process and discuss further development and blockers. Nicolas was really
|
||||
helpful and patient, answering each of my big-small queries.
|
||||
|
||||
Work Done
|
||||
|
||||
<style>
|
||||
table,td,th {
|
||||
border-collapse:collapse;
|
||||
border: 1px solid #000000;
|
||||
}
|
||||
</style>
|
||||
<table>
|
||||
<tr>
|
||||
<td><strong>Documentation</strong></td>
|
||||
<td><a href="https://avinal.videolan.me/vlc-android-user/">VLC for Android User Documentation </a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Project Repository</strong>
|
||||
</td>
|
||||
<td><a href="https://code.videolan.org/avinal/vlc-android-user">Projects · Avinal Kumar / VLC for Android User Documentation</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Commits</strong>
|
||||
</td>
|
||||
<td><a href="https://code.videolan.org/avinal/vlc-android-user/-/commits/master">Commits · Avinal Kumar / VLC for Android User Documentation</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Issues/Discussions</strong>
|
||||
</td>
|
||||
<td><a href="https://code.videolan.org/avinal/vlc-android-user/-/issues">Issues · Avinal Kumar / VLC for Android User Documentation</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Merge Requests</strong>
|
||||
</td>
|
||||
<td><a href="https://code.videolan.org/avinal/vlc-android-user/-/merge_requests">Merge Requests · Avinal Kumar / VLC for Android User Documentation</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
Since the Android port of VLC can be installed on Android
|
||||
Smartphones/Tablets, Android TVs, Amazon Fire Devices and Chromebooks
|
||||
too, a full documentation will cover these all devices. Although these
|
||||
are different form factors, the features provided on each of them is
|
||||
exactly the same and the same documentation can be used for all these
|
||||
devices. As of now only Smartphones/Tablets are covered. And later
|
||||
additional pages will be added to reference different features/User
|
||||
Interface. Regardless of this addition the current documentation can
|
||||
serve a major part for all these form factors. Completed/Remaining
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><strong>Chapters</strong>
|
||||
</td>
|
||||
<td><strong>Sections</strong>
|
||||
</td>
|
||||
<td><strong>Status</strong>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Settings</strong>
|
||||
</td>
|
||||
<td>
|
||||
<ul>
|
||||
<li>General Settings
|
||||
<li>Interface
|
||||
<li>Video
|
||||
<li>Subtitles
|
||||
<li>Audio
|
||||
<li>Casting
|
||||
<li>Advanced
|
||||
</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td><strong>ALL COMPLETED</strong>
|
||||
<p>
|
||||
<strong>FOR ALL FORM FACTORS</strong>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Video</strong>
|
||||
</td>
|
||||
<td>
|
||||
<ul>
|
||||
<li>Video Explorer
|
||||
<li>Video Player
|
||||
</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td><strong>COMPLETED FOR SMARTPHONES/TABLETS</strong>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Audio</strong>
|
||||
</td>
|
||||
<td>
|
||||
<ul>
|
||||
<li>Audio Explorer
|
||||
<li>Audio Player
|
||||
</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td><strong>COMPLETED FOR SMARTPHONES/TABLETS</strong>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Browse</strong>
|
||||
</td>
|
||||
<td>
|
||||
<ul>
|
||||
<li>Explorer
|
||||
<li>Local Network
|
||||
</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td><strong>ONLY SMB IN LOCAL NETWORK COMPLETED</strong>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Installation</strong>
|
||||
</td>
|
||||
<td>
|
||||
<ul>
|
||||
<li>Smartphones/Tablets
|
||||
<li>Android TV
|
||||
<li>Fire Devices
|
||||
<li>Chromebooks
|
||||
</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td><strong>COMPLETED FOR SMARTPHONES/TABLETS</strong>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>User Interface</strong>
|
||||
</td>
|
||||
<td>
|
||||
<ul>
|
||||
<li>Smartphones/Tablets
|
||||
<li>Android TV
|
||||
<li>Fire Devices
|
||||
<li>Chromebooks
|
||||
</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td><strong>COMPLETED FOR SMARTPHONES/TABLETS</strong>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Support</strong>
|
||||
</td>
|
||||
<td>
|
||||
<ul>
|
||||
<li>FAQs
|
||||
<li>Help
|
||||
</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td><strong>IN PROGRESS</strong>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Guidelines</strong>
|
||||
</td>
|
||||
<td>
|
||||
<ul>
|
||||
<li>Contribution Guideline
|
||||
<li>Screenshot Guidelines
|
||||
<li>READMEs
|
||||
</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td><strong>IN PROGRESS</strong>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
## CHALLENGES
|
||||
|
||||
The major obstacle was to get screenshots for all form factors. Since
|
||||
screenshots were the major part of this documentation it was necessary
|
||||
to provide proper screenshots in each chapter and with every step. For
|
||||
Android TV and Smartphone this was solved by using emulators instead of
|
||||
actual devices, but to emulate the actual scenario in an emulator was
|
||||
sometimes very difficult. There were many occasions where I was not able
|
||||
to gather the exact information about devices other than
|
||||
smartphones/tables. Since all form factors share a common pool of
|
||||
features, my mentor suggested that I focus on smartphones/tables. And to
|
||||
create issues mentioning missing parts so that it could be solved later.
|
||||
|
||||
## THANKS
|
||||
|
||||
I want to thank my mentors for being supporting and helpful. I want to
|
||||
thank every person at VLC and Google who were involved in this whole
|
||||
process. Thanks and Congrats to my fellow writer Abhishek Pratap Singh.
|
||||
This was a great opportunity to learn and meet awesome people. I learned
|
||||
a lot about Sphinx, reStructured Text and many other things.
|
||||
@@ -0,0 +1,861 @@
|
||||
---
|
||||
title: Google Summer of Code 2021
|
||||
date: 2021-08-19 23:07
|
||||
tags: gsoc, FOSSology
|
||||
category: development
|
||||
description: This is the final report of my Google Summer of Code 2021 at The FOSSology Project.
|
||||
---
|
||||
# Google Summer of Code 2021
|
||||
|
||||
date
|
||||
2021-08-19 23:07
|
||||
|
||||
tags
|
||||
gsoc, FOSSology
|
||||
|
||||
category
|
||||
report
|
||||
|
||||
summary
|
||||
This is the final report of my Google Summer of Code 2021 at The
|
||||
FOSSology Project.
|
||||
|
||||
slug
|
||||
final-evaluation
|
||||
|
||||
status
|
||||
published
|
||||
|
||||
<style>
|
||||
.rd {color:red;font-weight:bold}
|
||||
.gr{color:green;font-weight:bold}
|
||||
.or{color:orange;font-weight:medium}
|
||||
ul{margin-bottom:0}
|
||||
</style>
|
||||
|
||||
## The CMake Build system
|
||||
|
||||
FOSSology is quite an old and mature project. The project has been using
|
||||
bare metal **Makefiles**. As the project is growing with new agents and
|
||||
modernization it was required to have a modern build system.
|
||||
|
||||
The FOSSology is a suite of well-integrated and synchronized
|
||||
sub-projects (called agents) written in C, C++, and PHP. Most of the
|
||||
major agents are in C, C++ and that made CMake an obvious choice for a
|
||||
new build system for FOSSology. CMake is a versatile set of build, test,
|
||||
and packaging tools and is the most popular choice of C/C++ developers.
|
||||
CMake can be extended to create a build system for other languages too
|
||||
via custom scripts.
|
||||
|
||||
## GitHub Actions CI/CD
|
||||
|
||||
<img src="/images/ci.png"
|
||||
class="float-md-right rounded border border-info ml-3 float-md-right rounded border border-info ml-3"
|
||||
width="350" alt="A CI Meme" />
|
||||
|
||||
Since the FOSSology project moved on Github, it has used only the free
|
||||
Travis CI service for OSS projects. At the time of writing Travis CI has
|
||||
reduced its free tier CI services. GitHub Actions provides faster
|
||||
builds. Since GitHub Actions is a fully managed service by GitHub, we
|
||||
don’t need to know how to scale and operate the infrastructure to run
|
||||
it.
|
||||
|
||||
It is straightforward to use with GitHub because when we fork a
|
||||
repository, the actions automatically get forked. This allows you to
|
||||
test and build projects very efficiently and even run them closer to the
|
||||
developer. Also, you have readily available access to the GitHub API,
|
||||
making it more popular among developers.
|
||||
|
||||
## Improvements over previous build system and CI
|
||||
|
||||
The new build system and CI brings a lot of improvements and features.
|
||||
The list below describes them.
|
||||
|
||||
- CMake enforces out-of-source builds. This was already possible with
|
||||
the previous build system but not a strict requirement. This feature
|
||||
keeps the source code clean and makes cleaning the build artifacts
|
||||
easy. (Just remove the build folder :)
|
||||
- One of the major improvements over the previous build system is faster
|
||||
build times. CMake generates parallel build-enabled configurations for
|
||||
all generators. In our tests, the new build system is at least twice
|
||||
as fast as the previous one. With further improvement in
|
||||
configuration, we will be able to further cut the build times.
|
||||
- Previously FOSSology can only be built using *Unix Makefiles*. With
|
||||
CMake, we can now use many other popular generators such as *Ninja*.
|
||||
- Now it is also very flexible to choose different compilers. This will
|
||||
help support more platforms and architecture in the future. As of now,
|
||||
we are experimenting with Clang compilers.
|
||||
- FOSSology is quite an old project and a lot of agent testing code was
|
||||
written in the last decade. Initially, none of them were compatible
|
||||
with the new build system, but we were able to hack most of the test
|
||||
code using better-improved methods. Test times have also improved.
|
||||
- Migrating from Travis CI to GitHub Actions was another big move and
|
||||
for the most part, it removes the dependency on a third-party CI
|
||||
service. Along with that GitHub Actions provides better build times,
|
||||
tons of new features, and better integration with other GitHub
|
||||
services.
|
||||
|
||||
## Deliverables
|
||||
|
||||
<div class="alert alert-info" role="alert">
|
||||
<ul class="simple">
|
||||
<li>Final Pull Request <a class="badge badge-info" href="https://github.com/fossology/fossology/pull/2075">#2075</a></li>
|
||||
<li>Pull Request Branch <a class="badge badge-info" href="https://github.com/avinal/fossology/tree/avinal/feat/buildsystem">avinal/feat/buildsystem</a></li>
|
||||
<li>Working Branch (individual commits) <ul>
|
||||
<li><a class="badge badge-info" href="https://github.com/avinal/fossology/tree/avinal/feat/cmake-buildsystem">avinal/feat/cmake-buildsystem</a></li>
|
||||
<li><a class="badge badge-info" href="https://github.com/avinal/fossology/tree/avinal/feat/testing">avinal/feat/testing</a></li>
|
||||
</ul></li>
|
||||
<li>Project Issue <a class="badge badge-info" href="https://github.com/fossology/fossology/issues/1913">#1913</a></li>
|
||||
<li>Project Discussion <a class="badge badge-info" href="https://github.com/fossology/fossology/discussions/1931">#1931</a></li>
|
||||
<li>Weekly Reports<ul>
|
||||
<li><a class="badge badge-info" href="https://gsoc.avinal.space">Personal Blog</a></li>
|
||||
<li><a class="badge badge-info" href="https://fossology.github.io/gsoc/docs/2021/buildsystem/">FOSSology Official Blog</a></li>
|
||||
</ul></li></ul>
|
||||
</div>
|
||||
|
||||
### CMake Build System Tasks
|
||||
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style="width: 7%" />
|
||||
<col style="width: 23%" />
|
||||
<col style="width: 15%" />
|
||||
<col style="width: 15%" />
|
||||
<col style="width: 30%" />
|
||||
<col style="width: 23%" />
|
||||
<col style="width: 38%" />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr class="header">
|
||||
<th>#</th>
|
||||
<th>Agents</th>
|
||||
<th>Build</th>
|
||||
<th>Install</th>
|
||||
<th>Testing</th>
|
||||
<th>Packaging</th>
|
||||
<th>Remarks</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="odd">
|
||||
<td>1</td>
|
||||
<td>adj2nest</td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>2</td>
|
||||
<td>buckets</td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
<td><blockquote>
|
||||
<p><span class="gr">YES</span></p>
|
||||
</blockquote></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>3</td>
|
||||
<td>cli</td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><ul>
|
||||
<li><span class="rd">Functional</span></li>
|
||||
</ul></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>4</td>
|
||||
<td>copyright</td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><ul>
|
||||
<li><span class="gr">Functional</span></li>
|
||||
<li><span class="gr">Unit</span></li>
|
||||
</ul></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>5</td>
|
||||
<td>debug</td>
|
||||
<td></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>6</td>
|
||||
<td>decider</td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><ul>
|
||||
<li><span class="gr">Functional</span></li>
|
||||
<li><span class="gr">Unit</span></li>
|
||||
</ul></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>7</td>
|
||||
<td>deciderjob</td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><ul>
|
||||
<li><span class="gr">Functional</span></li>
|
||||
</ul></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>8</td>
|
||||
<td>delagent</td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><ul>
|
||||
<li><span class="rd">Functional</span></li>
|
||||
<li><span class="rd">Unit</span></li>
|
||||
</ul></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>9</td>
|
||||
<td>demomod</td>
|
||||
<td><span class="or">YES</span></td>
|
||||
<td><span class="or">YES</span></td>
|
||||
<td><ul>
|
||||
<li><span class="or">Functional</span></li>
|
||||
<li><span class="or">Unit</span></li>
|
||||
</ul></td>
|
||||
<td><span class="or">NO</span></td>
|
||||
<td><em>(Not Used)</em></td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>10</td>
|
||||
<td>example_wc_agent</td>
|
||||
<td><span class="or">YES</span></td>
|
||||
<td><span class="or">YES</span></td>
|
||||
<td><ul>
|
||||
<li><span class="or">Functional</span></li>
|
||||
<li><span class="or">Unit</span></li>
|
||||
</ul></td>
|
||||
<td><blockquote>
|
||||
<p><span class="or">NO</span></p>
|
||||
</blockquote></td>
|
||||
<td><em>(Not Used)</em></td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>11</td>
|
||||
<td>clib</td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><ul>
|
||||
<li><span class="gr">Functional</span></li>
|
||||
<li><span class="gr">Unit</span></li>
|
||||
</ul></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>12</td>
|
||||
<td>cpplib</td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><ul>
|
||||
<li><span class="gr">Unit</span></li>
|
||||
</ul></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>13</td>
|
||||
<td>phplib</td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><ul>
|
||||
<li><span class="gr">Functional</span></li>
|
||||
<li><span class="gr">Unit</span></li>
|
||||
</ul></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td>1 functional test needs fix</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>14</td>
|
||||
<td>maintagent</td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>15</td>
|
||||
<td>mimetype</td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><ul>
|
||||
<li><span class="gr">Functional</span></li>
|
||||
<li><span class="gr">Unit</span></li>
|
||||
</ul></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>16</td>
|
||||
<td>monk</td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><ul>
|
||||
<li><span class="gr">Functional</span></li>
|
||||
<li><span class="gr">Unit</span></li>
|
||||
</ul></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>17</td>
|
||||
<td>ninka</td>
|
||||
<td><span class="or">YES</span></td>
|
||||
<td><span class="or">YES</span></td>
|
||||
<td><ul>
|
||||
<li><span class="or">Functional</span></li>
|
||||
<li><span class="or">Unit</span></li>
|
||||
</ul></td>
|
||||
<td><span class="or">NO</span></td>
|
||||
<td><em>(Deprecated)</em></td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>18</td>
|
||||
<td>nomos</td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><ul>
|
||||
<li><span class="gr">Functional</span></li>
|
||||
<li><span class="gr">Unit</span></li>
|
||||
</ul></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>19</td>
|
||||
<td>ojo</td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><ul>
|
||||
<li><span class="gr">Functional</span></li>
|
||||
<li><span class="gr">Unit</span></li>
|
||||
</ul></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td>1 functional test needs fix</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>20</td>
|
||||
<td>pkgagent</td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><ul>
|
||||
<li><span class="gr">Functional</span></li>
|
||||
<li><span class="gr">Unit</span></li>
|
||||
</ul></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>21</td>
|
||||
<td>readmeoss</td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>22</td>
|
||||
<td>regexscan</td>
|
||||
<td><span class="or">YES</span></td>
|
||||
<td><span class="or">YES</span></td>
|
||||
<td></td>
|
||||
<td><blockquote>
|
||||
<p><span class="or">NO</span></p>
|
||||
</blockquote></td>
|
||||
<td><em>(Deprecated)</em></td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>23</td>
|
||||
<td>reportImport</td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>24</td>
|
||||
<td>reuser</td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><ul>
|
||||
<li><span class="gr">Functional</span></li>
|
||||
</ul></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>25</td>
|
||||
<td>reso</td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>26</td>
|
||||
<td>scheduler</td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><ul>
|
||||
<li><span class="rd">Functional</span></li>
|
||||
<li><span class="rd">Unit</span></li>
|
||||
</ul></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td>Tests needs fix</td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>27</td>
|
||||
<td>softwareHeritage</td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>28</td>
|
||||
<td>spasht</td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>29</td>
|
||||
<td>spdx2</td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><ul>
|
||||
<li><span class="gr">Functional</span></li>
|
||||
<li><span class="gr">Unit</span></li>
|
||||
</ul></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td>1 Test failing in CI</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>30</td>
|
||||
<td>unifiedreport</td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><ul>
|
||||
<li><span class="gr">Functional</span></li>
|
||||
</ul></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>31</td>
|
||||
<td>ununpack</td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><ul>
|
||||
<li><span class="gr">Functional</span></li>
|
||||
<li><span class="rd">Unit</span></li>
|
||||
</ul></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td>Unit tests needs fix</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>32</td>
|
||||
<td>wget_agent</td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><ul>
|
||||
<li><span class="gr">Functional</span></li>
|
||||
<li><span class="gr">Unit</span></li>
|
||||
</ul></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<td>32</td>
|
||||
<td>www</td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td><ul>
|
||||
<li><span class="rd">UI</span></li>
|
||||
</ul></td>
|
||||
<td><span class="gr">YES</span></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
### GitHub Actions CI Tasks
|
||||
|
||||
| \# | CI Tasks | Status |
|
||||
|-----|-----------------------------------------|----------------------------------------------------------|
|
||||
| 1 | <span class="gr">build</span> | Added Ubuntu 20.04 GCC 8, 9 and Clang, GCC 7 not working |
|
||||
| 2 | <span class="gr">c/cpp unit test</span> | Added, delagent, scheduler and ununpack not working |
|
||||
| 3 | <span class="gr">phpunit tests</span> | Added, delagent and scheduler functional not working |
|
||||
| 4 | <span class="rd">cahching</span> | Not implemented |
|
||||
| 5 | <span class="rd">source install</span> | Not implemented |
|
||||
|
||||
(<span class="gr">GREEN</span>: COMPLETED, <span class="rd">RED</span>:
|
||||
INCOMPLETE, <span class="or">ORANGE</span>: NOT NEEDED/DEPRECATED)
|
||||
|
||||
## How does it work and how to use it?
|
||||
|
||||
<div class="embed-responsive embed-responsive-16by9">
|
||||
<iframe class="embed-responsive-item" src="/images/second-build.webm" allowfullscreen></iframe>
|
||||
</div>
|
||||
|
||||
The new build system retains the modular and hierarchical structure of
|
||||
the previous build system. On the other hand, the new build system
|
||||
provides several new flags to control the build. The new build system
|
||||
forces out-of-source build instead of the previous in-source builds.
|
||||
This keeps the source clutter-free and reduces the chance of
|
||||
accidentally deleting source files. *Testing still needs some in-source
|
||||
artifacts, this will be solved once all the tests are fixed according to
|
||||
the new build system.*
|
||||
|
||||
Each agent is a complete CMake sub-project with its independent
|
||||
configuration for building, installing, and testing. That means a single
|
||||
agent can be built and installed separately and even removed from the
|
||||
default build without breaking other builds. The directory structure is
|
||||
as below.
|
||||
|
||||
```bash
|
||||
.
|
||||
├── build # temporary directory for build artifacts
|
||||
├── cmake # CMake modules for FOSSology
|
||||
│ ├── FoPackaging.cmake # CMake Packaging configurations
|
||||
│ ├── FoUtilities.cmake # Custom CMake utilities
|
||||
│ ├── FoVersionFile.cmake # VERSION version.php CMake template file
|
||||
│ ├── SetDefaults.cmake # CMake defaults for this project
|
||||
│ ├── TestInstall.make.in # Template makefile for install during tests
|
||||
│ └── VERSION.in # VERSION file template
|
||||
├── src
|
||||
│ ├── agent-1 # Agent sub-project
|
||||
│ │ ├── agent # Agent's source code directory
|
||||
│ │ │ ├── agent-source-code
|
||||
│ │ │ └── CMakeLists.txt
|
||||
│ │ ├── agent_tests # Agent's test directory
|
||||
│ │ │ ├── Unit
|
||||
│ │ │ ├── Functional
|
||||
│ │ │ └── CMakeLists.txt
|
||||
│ │ ├── ui # Agent's UI source code
|
||||
│ │ │ ├── templates
|
||||
│ │ │ └── agent-ui-code
|
||||
│ │ └── CMakeLists.txt # Agent's top-level CMake configuration
|
||||
: :
|
||||
│ ├── other agents
|
||||
: :
|
||||
│ └── CMakeLists.txt # Source intermediate CMake configuration
|
||||
:
|
||||
├── other directories and files
|
||||
:
|
||||
└── CMakeLists.txt # FOSSology Top-level CMake configuration
|
||||
```
|
||||
|
||||
The `cmake` directory contains customized CMake modules and templates
|
||||
for FOSSology. This directory is required for all the operations. The
|
||||
general workflow of the new build system as well as how to use it is
|
||||
described below.
|
||||
|
||||
1. Since the new build system is still in review. You must fork
|
||||
FOSSology and pull the
|
||||
[\#2075](https://github.com/fossology/fossology/pull/2075) pull
|
||||
request branch. Once you are in FOSSology root, run these commands.
|
||||
|
||||
> ``` bash
|
||||
> git fetch https://github.com/avinal/fossology avinal/feat/buildsystem:buildsystem
|
||||
> git checkout buildsystem
|
||||
> ```
|
||||
|
||||
2. The first step towards building is to create a temporary directory
|
||||
for storing intermediate files and build artifacts. By convention we
|
||||
use a directory named `build`, but you can use any name. (**NOTE:
|
||||
For testing do not use other names**)
|
||||
|
||||
> ``` bash
|
||||
> mkdir build
|
||||
> cd build
|
||||
> ```
|
||||
|
||||
3. In the next steps, we will configure the CMake project and generate
|
||||
the required configurations. You can use several flags to control
|
||||
the build. Given below are the flags available for this project.
|
||||
|
||||
> <table style="width:99%;">
|
||||
> <colgroup>
|
||||
> <col style="width: 34%" />
|
||||
> <col style="width: 43%" />
|
||||
> <col style="width: 20%" />
|
||||
> </colgroup>
|
||||
> <thead>
|
||||
> <tr class="header">
|
||||
> <th>CMake Flags</th>
|
||||
> <th>Description</th>
|
||||
> <th>Default</th>
|
||||
> </tr>
|
||||
> </thead>
|
||||
> <tbody>
|
||||
> <tr class="odd">
|
||||
> <td><strong>-DCMAKE_INSTALL_PREFIX=<path></strong></td>
|
||||
> <td>Sets the install prefix.</td>
|
||||
> <td><code>/usr/local</code></td>
|
||||
> </tr>
|
||||
> <tr class="even">
|
||||
> <td><strong>-DAGENTS="agent1;agent2..."</strong></td>
|
||||
> <td>Only configure these agents.</td>
|
||||
> <td>ALL AGENTS</td>
|
||||
> </tr>
|
||||
> <tr class="odd">
|
||||
> <td><strong>-DOFFLINE=<ON/OFF></strong></td>
|
||||
> <td>Controls vendor generation, ON=NO</td>
|
||||
> <td><strong>OFF</strong></td>
|
||||
> </tr>
|
||||
> <tr class="even">
|
||||
> <td><p><strong>-DCMAKE_BUILD_TYPE=<type></strong></p>
|
||||
> <blockquote>
|
||||
> <ul>
|
||||
> <li>Controls build type aka level optimisation</li>
|
||||
> </ul>
|
||||
> </blockquote></td>
|
||||
> <td><ul>
|
||||
> <li><code>Debug</code></li>
|
||||
> <li><code>Release</code></li>
|
||||
> <li><code>RelWithDebInfo</code></li>
|
||||
> <li><code>MinSizeRel</code></li>
|
||||
> </ul></td>
|
||||
> <td><code>Debug</code></td>
|
||||
> </tr>
|
||||
> <tr class="odd">
|
||||
> <td><strong>-DTESTING=<ON/OFF></strong></td>
|
||||
> <td>Controls testing config generation</td>
|
||||
> <td><blockquote>
|
||||
> <p><strong>OFF</strong></p>
|
||||
> </blockquote></td>
|
||||
> </tr>
|
||||
> <tr class="even">
|
||||
> <td><strong>-DMONOPACK=<ON/OFF></strong></td>
|
||||
> <td>Package adj2nest and ununpack seperately</td>
|
||||
> <td><strong>OFF</strong></td>
|
||||
> </tr>
|
||||
> <tr class="odd">
|
||||
> <td><strong>-GNinja</strong></td>
|
||||
> <td>Use Ninja instead of Unix Makefiles</td>
|
||||
> <td><em>Unix MakeFiles</em></td>
|
||||
> </tr>
|
||||
> </tbody>
|
||||
> </table>
|
||||
>
|
||||
> There are lots of inbuilt CMake command-line options you can see
|
||||
> them in the official
|
||||
> [documentation](https://cmake.org/cmake/help/v3.10/manual/cmake.1.html).
|
||||
> Once you have chosen your flags we can now configure the project
|
||||
> using the following commands.
|
||||
>
|
||||
> ``` bash
|
||||
> # From build folder
|
||||
> cd <name-of-build-directory>
|
||||
> cmake <flags> ..
|
||||
> ```
|
||||
|
||||
4. The next step is to build the project. You can use parallel jobs to
|
||||
build faster. For more options you can type `cmake --help` or
|
||||
`make --help` or `ninja --help`.
|
||||
|
||||
> ``` bash
|
||||
> # Common build command for all generators,
|
||||
> # Default number of parallel builds depends on generator used
|
||||
> cmake --build . --parallel <no-of-processes>
|
||||
>
|
||||
> # For Unix Makefiles, no parallel build by default
|
||||
> make -j <no-of-processes>
|
||||
>
|
||||
> # For Ninja, 8+ parallel build by default (depends on system)
|
||||
> ninja -j <no-of-processes>
|
||||
> ```
|
||||
|
||||
5. Installing is also as easy as building. You can choose to install
|
||||
only certain components even if you have built the whole project. If
|
||||
you directly invoke the install command without building the
|
||||
project, it will automatically build the project first.
|
||||
|
||||
> ``` bash
|
||||
> # For Unix Makefiles
|
||||
> make install
|
||||
>
|
||||
> # For Ninja
|
||||
> ninja install
|
||||
> ```
|
||||
|
||||
6. While testing has some issues, most of the testing is working fine.
|
||||
For now, you must build and run any test from the FOSSology root
|
||||
directory only. You can choose to configure a single agent if you
|
||||
want to test one agent only. See `ctest --help` for controlling test
|
||||
runs.
|
||||
|
||||
> ``` bash
|
||||
> # Common testing command
|
||||
> ctest --parallel <no-of-processes>
|
||||
>
|
||||
> # For Unix Makefiles
|
||||
> make test
|
||||
>
|
||||
> # For Ninja
|
||||
> ninja test
|
||||
> ```
|
||||
|
||||
7. You can package FOSSology, the packaging currently lacks copyright
|
||||
and conf files. But for testing purposes, you can use the following
|
||||
commands. Similar to installing, if you run the package command
|
||||
without building the project, it will automatically build the
|
||||
project first. See `cpack --help` for more packaging options.
|
||||
|
||||
> ``` bash
|
||||
> # Common testing command
|
||||
> cpack
|
||||
>
|
||||
> # For Unix Makefiles
|
||||
> make package
|
||||
>
|
||||
> # For Ninja
|
||||
> ninja package
|
||||
> ```
|
||||
|
||||
## Known Issues and Drawbacks
|
||||
|
||||
Although the transition from Makefiles to CMake and Travis CI to GitHub
|
||||
Actions is almost complete and working as expected. But it is not free
|
||||
of drawbacks and issues. This section outlines the known issues at the
|
||||
time of writing.
|
||||
|
||||
<img src="https://imgs.xkcd.com/comics/conference_question.png"
|
||||
class="float-md-right rounded border border-info ml-3 float-md-right rounded border border-info ml-3"
|
||||
width="350" alt="A Bug Meme" />
|
||||
|
||||
- Coverage builds may fail with linking errors.
|
||||
- Packaging prefix is the same as the install prefix. This requires the
|
||||
developer to set the install prefix manually before packaging to
|
||||
produce packages with the correct directory structure.
|
||||
- Testing and packaging must be used from the FOSSology root directory.
|
||||
Not doing so may or may not configure the project as intended.
|
||||
- Previously tests were written hardcoded for the Makefiles. But new
|
||||
build system requires all artifacts to be generated in a separate
|
||||
directory. This required me to add symbolic links wherever a generated
|
||||
script or file is expected. Tests can still leave some artifacts
|
||||
inside source folders.
|
||||
- There is no easy way to install a particular agent from the FOSSology
|
||||
root directory.
|
||||
- Packages don't contain copyright, readme, and license files. CMake
|
||||
doesn't provide a way to include these files. This is being tracked by
|
||||
issue
|
||||
[\#21832](https://gitlab.kitware.com/cmake/cmake/-/issues/21832).
|
||||
- While packaging the symbolic links may or may not be dereferenced and
|
||||
hence results in copying the folder too in the target directory.
|
||||
- Running tests locally may require switching to `fossy` user.
|
||||
- While configured for testing, it may give permission errors.
|
||||
- Scheduler, Ununpack, and Delagent unit and functional tests are not
|
||||
working. I have added an issue
|
||||
[\#2084](https://github.com/fossology/fossology/issues/2084) to track
|
||||
the progress on fixing these tests.
|
||||
- CMake doesn't generate uninstall targets. The closest thing to
|
||||
uninstall is [this
|
||||
snippet](https://gitlab.kitware.com/cmake/community/-/wikis/FAQ#can-i-do-make-uninstall-with-cmake).
|
||||
This will be later added to the FOSSology.
|
||||
|
||||
## Challenges Faced
|
||||
|
||||
While this whole project was challenging, some aspects of it were
|
||||
unforeseen and more challenging. When I decided to go on with this
|
||||
project I just had enough CMake knowledge to write a configuration for a
|
||||
very small project. I had never used CMake on this big scale. On the
|
||||
other side, the FOSSology community is largely unknown to CMake so for
|
||||
all of us it was learned, practiced, and implement. With support from
|
||||
mentors, I was able to overcome this challenge with flying colors.
|
||||
|
||||
The other challenge was to understand the old build system, how they are
|
||||
all connected and what is the flow. The complexity can be imagined by
|
||||
the fact that the most of code and configurations were written in the
|
||||
decade before the last decade and haven't changed much since then.
|
||||
|
||||
The most challenging task was to make tests work with the new build
|
||||
system. Since tests were mostly hardcoded and the new build system
|
||||
refactored many of the files and directory, the tests were failing
|
||||
initially. The testing part took me the most time. All thanks to my
|
||||
mentor Gaurav, I was able to hack them to suit the
|
||||
new build system.
|
||||
|
||||
## Related Resources and Links
|
||||
|
||||
- Fix FOSSology agent tests issue
|
||||
[\#2084](https://github.com/fossology/fossology/issues/2084)
|
||||
- feat(CI): Migrate API docs generation and deployment to GitHub Actions
|
||||
pull request
|
||||
[\#1917](https://github.com/fossology/fossology/pull/1917)
|
||||
- feat(CI): Migrate Static Checks and Analysis to GitHub Actions from
|
||||
Travis CI [\#1919](https://github.com/fossology/fossology/pull/1919)
|
||||
|
||||
## Future Development Plans
|
||||
|
||||
There is a lot to do with the new build system and CI and it will
|
||||
probably take a year or to reach a maturity point. I was able to meet
|
||||
most of the goals but some of them are remaining.
|
||||
|
||||
- Fix the tests, probably renovate them from the ground up.
|
||||
- Find a hack for packaging problems.
|
||||
- Improve and optimize the build.
|
||||
- Modernise the source code, remove old, bloated code and replace them
|
||||
according to new standards.
|
||||
|
||||
## What did I learn from this project?
|
||||
|
||||
This Google Summer of Code was the busiest time of my life for all good
|
||||
reasons. I learned a lot about license compliance and how it all works
|
||||
in the software industry. The next big thing is CMake. As I mentioned I
|
||||
was just a novice user of CMake. Now I am confident that given any other
|
||||
large project I will be able to migrate it/improve it. I got to learn
|
||||
PHP, of which I did not know a single word before GSoC. And finally, I
|
||||
learned about packing and testing. I had these courses but implementing
|
||||
them myself and fixing them was a wholesome experience.
|
||||
|
||||
Other than that I improved on my communication and presentation skills.
|
||||
Collaborating with fellow participants was one of the great things that
|
||||
happened during GSoC.
|
||||
|
||||
## Acknowledgments
|
||||
|
||||
Google Summer of Code is the best thing that has happened to me this
|
||||
year so far. Although there are numerous people to say thanks to, I want
|
||||
to mention key people who were my motivation and support during this
|
||||
period.
|
||||
|
||||
First of all, I want to thank and appreciate my mentors [Gaurav
|
||||
Mishra](https://github.com/GMishx), [Michael C.
|
||||
Jaeger](https://github.com/mcjaeger), [Anupam
|
||||
Ghosh](https://github.com/ag4ums), and [Shaheem Azmal M
|
||||
MD](https://github.com/shaheemazmalmmd). Without the help and support
|
||||
from them, all this would not have been possible. They are very polite,
|
||||
knowledgeable, and helpful.
|
||||
|
||||
Finally, I want to thank, my family and friends. I got to meet many
|
||||
awesome developers as my fellow participants from around the world, I
|
||||
wish we will do more collaboration in the future.
|
||||
@@ -0,0 +1,128 @@
|
||||
---
|
||||
title: I am loving it! RedHat
|
||||
date: 2022-02-25 20:47
|
||||
category: development
|
||||
tags: kubernetes, redhat, docker, golang, tekton, openshift, intern
|
||||
description: I made it to the Red Hat as a DevTools intern. This post is about onboarding and how I prepared myself for working on the actual project.
|
||||
---
|
||||
# My internship at Red Hat
|
||||
|
||||
I have been contributing to open source for the last 3 years and Red Hat
|
||||
was one of the companies that I was very fond of. I must say all my
|
||||
contributions and consistency paid off, and I made it to the Red Hat as
|
||||
a DevTools intern. This post is about onboarding and how I prepared
|
||||
myself for working on the actual project.
|
||||
|
||||
On the first day of my internship, I met two amazing teammates
|
||||
[Saytam](https://github.com/) and [Utkarsh](https://github.com/). We
|
||||
were also introduced to a Senior Software Engineer [Piyush
|
||||
Garg](https://github.com) who later mentored us. The initial few
|
||||
meetings were more on the introduction and what to learn topics. Before
|
||||
I jump into more details let me explain first what does a **DevTools
|
||||
Developer/Engineer** do?
|
||||
|
||||
## What does a DevTools Developer/Engineer do?
|
||||
|
||||
From [MDN Web
|
||||
Docs](https://developer.mozilla.org/en-US/docs/Glossary/Developer_Tools)
|
||||
**Developer tools (or "development tools" or short "DevTools") are
|
||||
programs that allow a developer to create, test, and debug software.**
|
||||
At RedHat, a lot of open source developer tools of industry standards
|
||||
are developed. There are many, OpenShift, Tekton, CodeReady containers,
|
||||
and many more.
|
||||
|
||||
## Learning on the <img src="/images/golang.png" class="align-top" style="width:2.5em"
|
||||
|
||||
alt="golang_logo" />
|
||||
|
||||
There was a lot of learning and still a lot to learn. In a meeting with
|
||||
my manager Pradeepto Bhattacharya, I was told that I will be working on
|
||||
TektonCD or OpenShift Pipelines, and both of them require a sound
|
||||
knowledge of Golang, CI/CD, Containers, Docker, and Kubernetes. I was
|
||||
familiar with CI/CD, containers, and Docker but never used Golang and
|
||||
Kubernetes. We were provided plenty of good resources and my teammates
|
||||
also helped with many awesome resources. I am listing all the resources
|
||||
with their category.
|
||||
|
||||
### [Golang](https://go.dev/)
|
||||
|
||||
<img src="/images/goladder.png"
|
||||
class="float-md-right rounded ml-3 float-md-right rounded ml-3"
|
||||
style="height:20em" alt="Gopher on the ladder" />
|
||||
|
||||
One of Golang’s biggest advantages is that it offers the clarity and
|
||||
ease of use that other languages lack. Golang’s advantages make it easy
|
||||
for new programmers to quickly understand the language and for seasoned
|
||||
veterans to easily read each other’s code.
|
||||
|
||||
- [Official Go Documentation](https://go.dev/doc/) - *Start from here*
|
||||
- [Go by Example](https://gobyexample.com/) - *bite-size examples for
|
||||
most of the golang features*
|
||||
- [Golang tutorial series -
|
||||
GOLANGBOT.COM](https://golangbot.com/learn-golang-series/) - *in-depth
|
||||
tutorial of golang*
|
||||
- [Effective Go](https://go.dev/doc/effective_go) - *writing good golang
|
||||
programs*
|
||||
- [The Go Playground](https://go.dev/play/) - *official online golang
|
||||
ide*
|
||||
- [The Go Programming Language - Book](https://www.gopl.io/) *for
|
||||
learning advanced level golang*
|
||||
- [Golang Tutorial for Beginners \| Full Go Course - TechWorld with
|
||||
Nana](https://youtu.be/yyUHQIec83I) *if you prefer video tutorials, I
|
||||
don't :)*
|
||||
|
||||
### [Docker](https://www.docker.com/)
|
||||
|
||||
Docker takes away repetitive, mundane configuration tasks and is used
|
||||
throughout the development lifecycle for fast, easy, and portable
|
||||
application development - desktop and cloud. Docker’s comprehensive
|
||||
end-to-end platform includes UIs, CLIs, APIs, and security that are
|
||||
engineered to work together across the entire application delivery
|
||||
lifecycle.
|
||||
|
||||
<img src="/images/docker-architecture.png"
|
||||
class="float-md-right img-fluid my-3 float-md-right img-fluid my-3"
|
||||
alt="The Docker Architecture" />
|
||||
|
||||
- [Docker and Containers -
|
||||
Katacoda](https://www.katacoda.com/courses/docker) *interactive
|
||||
lessons on docker and containers*
|
||||
- [Docker for beginners](https://docker-curriculum.com/)
|
||||
- [Docker Tutorial for Beginners \| TechWorld with
|
||||
Nana](https://youtu.be/3c-iBn73dDE) *video tutorial*
|
||||
|
||||
### [Kubernetes](https://kubernetes.io/)
|
||||
|
||||
<img src="/images/kubernetes-meme.png"
|
||||
class="float-md-left border mr-3 float-md-left border mr-3" width="200"
|
||||
alt="Kubernetes tech" />
|
||||
|
||||
**Kubernetes** is the Greek word for a ship’s captain. We get the words
|
||||
Cybernetic and Gubernatorial from it. The Kubernetes project focuses on
|
||||
building a robust platform for running thousands of containers in
|
||||
production.
|
||||
|
||||
- [Learn Kubernetes -
|
||||
Katacoda](https://www.katacoda.com/courses/kubernetes) *interactive
|
||||
lessons with kubernetes*
|
||||
- [kube by example](https://kubebyexample.com/) *learn by doing*
|
||||
- [Kubernetes Tutorial for Beginners](https://youtu.be/X48VuDVv0do)
|
||||
*video tutorial*
|
||||
|
||||
## *Not so Minimal* Tekton Server
|
||||
|
||||
In late January, we were asked to implement our learnings and deep dive
|
||||
into Kubernetes and TektonCD through an assignment project. Soon we
|
||||
realized that whatever we were learning so far was not even close to
|
||||
what we were going to implement. We were given a document containing the
|
||||
requirements of the applications we were supposed to create along with
|
||||
all the documentation and architectural diagrams.
|
||||
|
||||
The application was called **Minimal Tekton Server**. It is a set of
|
||||
three different applications, i.e a server, a CLI, and a dashboard. In
|
||||
short, this application is supposed to *listen to custom resources being
|
||||
created and then transfer the request to Tekton API to create the
|
||||
corresponding resource on the OpenShift/Kubernetes cluster.*
|
||||
|
||||
So are you interested in how it went? Please follow up with my [next
|
||||
blog](https://avinal.space/posts/development/lovely-dangerous-things-redhat.html).
|
||||
@@ -0,0 +1,209 @@
|
||||
---
|
||||
title: How I implemented WakaTime embeddable Coding Graph GHA?
|
||||
date: 2021-02-02 21:47
|
||||
tags: wakatime, github-action, coding
|
||||
category: development
|
||||
description: if you use WakaTime to track your coding activity. You can add that to
|
||||
your README as a bar graph or embed it in your blog/portfolio. Just add this
|
||||
action to any of your repositories and there you have it.
|
||||
---
|
||||
|
||||
# How I implemented WakaTime embeddable Coding Graph GHA?
|
||||
|
||||
<a href="https://github.com/avinal/Profile-Readme-WakaTime"><img src="https://raw.githubusercontent.com/avinal/Profile-Readme-WakaTime/b281d074ee75f9626b39d10e2e518c6a297208a3/waka.png" class="img-fluid"></a>
|
||||
|
||||
## Implementation Details
|
||||
|
||||
This GitHub Action is divided into three parts. I didn't want to use
|
||||
Docker but it seems it doesn't work well without it. Let dive a little
|
||||
into technical details. Three parts are as below.
|
||||
|
||||
1. [main.py](https://github.com/avinal/Profile-Readme-WakaTime/blob/master/main.py)
|
||||
python script. This script contains many procedures.
|
||||
|
||||
- [Getting JSON data file via WakaTime
|
||||
API](https://github.com/avinal/Profile-Readme-WakaTime/blob/master/main.py#L52)
|
||||
|
||||
``` python
|
||||
def get_stats() -> list:
|
||||
...
|
||||
return data_list
|
||||
```
|
||||
|
||||
This function parses the JSON file received and scraps out the useful
|
||||
data as a list of lists. Data scraped are language list, time spent on
|
||||
each language, percentage of the time, start date, and end date. For
|
||||
this action, I have limited the number of languages to 5 however it
|
||||
should be very easy to increase that number.
|
||||
|
||||
- [Setting the
|
||||
Timeline](https://github.com/avinal/Profile-Readme-WakaTime/blob/master/main.py#L13)
|
||||
|
||||
``` python
|
||||
def this_week(dates: list) -> str:
|
||||
...
|
||||
return f"Coding Activity During: {week_start.strftime('%d %B, %Y')} to {week_end.strftime('%d %B, %Y')}"
|
||||
```
|
||||
|
||||
The start date and end date scraped in the last function are used here
|
||||
to set the timeline. Because date in JSON is provided in UTC as below
|
||||
:
|
||||
|
||||
``` json
|
||||
date: "YYYY-MM-DDTHH:MM:SSZ"
|
||||
```
|
||||
|
||||
I striped it to simple dates only. We can set them manually by taking
|
||||
the current time from the system. But that method is flawed. But this
|
||||
method ensures that JSON was received latest and the request was
|
||||
successful. Any anomaly will point to a failure in request.
|
||||
|
||||
- [Creating a bar
|
||||
graph](https://github.com/avinal/Profile-Readme-WakaTime/blob/master/main.py#L21)
|
||||
|
||||
``` python
|
||||
def make_graph(data: list):
|
||||
...
|
||||
savefig(...)
|
||||
```
|
||||
|
||||
Lastly, it is time to generate the graph and save them as an image.
|
||||
This function uses the data scraped in the first step. Creating a bar
|
||||
graph using matplotlib is easy.
|
||||
Decorating was a bit difficult. I wanted this graph to merge with
|
||||
GitHub's look so I chose to color the bar as GitHub colors the
|
||||
languages. That data is stored as colors.json. Many of the languages have
|
||||
slightly different spelling in GitHub as compared to WakaTime. So some
|
||||
languages are shown in default color. That can be improved if we
|
||||
notice that language and change its color manually. Lastly, the graph
|
||||
is saved both as SVG and PNG. SVGs are better to put on a responsive
|
||||
page.
|
||||
|
||||
2. [entrypoint.py](https://github.com/avinal/Profile-Readme-WakaTime/blob/master/entrypoint.sh)
|
||||
shell script. This shell script clones the repository copies the
|
||||
image and pushes changes to the master. There were several problems.
|
||||
First of all authentication. This was solved by using a remote
|
||||
repository address using GitHub Token. And it seems that GitHub
|
||||
doesn't allow to commit without a username and email. So I used
|
||||
**github-actions** bot email.
|
||||
|
||||
``` bash
|
||||
remote_repo-"https://${GITHUB_ACTOR}:${INPUT_GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git"
|
||||
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
||||
git config user.name "GitHub Actions"
|
||||
```
|
||||
|
||||
`41898282` is the id assigned to the github-actions bot. Don't ask
|
||||
where I found them 🙂.
|
||||
|
||||
Another problem was to separate repository name from combined
|
||||
*username/repository-name* provided by <span
|
||||
class="title-ref">\${GITHUB_REPOSITORY}</span>. GitHub doesn't
|
||||
provides a direct way to get just the repo name. We used *Internal
|
||||
Field Separator*. It returns an array and works similar to `split()`
|
||||
command in Python and Java.
|
||||
|
||||
``` bash
|
||||
# '/' is the seperator
|
||||
IFS-'/' read -ra reponame <<< "${GITHUB_REPOSITORY}"
|
||||
# returned {username, repository}
|
||||
repository-"${reponame[1]}"
|
||||
```
|
||||
|
||||
After that, all other commands are pretty straight. Commit the added
|
||||
files and push them.
|
||||
|
||||
3. [Dockerfile](https://github.com/avinal/Profile-Readme-WakaTime/blob/master/Dockerfile)
|
||||
**IMPORTANT** It took a lot of time to reach this state 🥱. This is
|
||||
where all the magic happens. I am running <span
|
||||
class="title-ref">ubuntu:latest</span> inside the container. I first
|
||||
update the distribution. Then install the required python packages.
|
||||
Lastly, I invoke the python script and shell script.
|
||||
|
||||
There was an almost impossible problem, I searched hundreds of posts
|
||||
that *how can I access the generated files inside Docker container*, but
|
||||
no luck. But at last, I found a workaround(obviously otherwise you
|
||||
wouldn't be reading this by now 🤣) each command is run in a separate
|
||||
virtual sub-container. As the command ends its output is also lost but
|
||||
not when you club multiple commands together. At least not until every
|
||||
command is finished. The generated files are available to the next
|
||||
clubbed process. I did that by combining the python script run and shell
|
||||
script run.
|
||||
|
||||
``` dockerfile
|
||||
CMD python3 /main.py && /entrypoint.sh
|
||||
```
|
||||
|
||||
This part is the smallest yet took the most time and tries while
|
||||
developing this action.
|
||||
|
||||
## How to use this GitHub Actions?
|
||||
|
||||
1. First get your WakaTime API Key. You can get it from your
|
||||
\[WakaTime\](<https://wakatime.com>) account settings.
|
||||
|
||||
2. Save WakaTime API Key to Repository Secret. Find that by clicking
|
||||
the Settings tab. Keep the name of the secret as
|
||||
**WAKATIME_API_KEY**.
|
||||
|
||||
3. Add the following line in your README.md of your repo.
|
||||
|
||||
``` html
|
||||
<img src-"https://github.com/<username>/<repository-name>/blob/<branch-name>/images/stat.svg" alt-"Alternative Text"/>
|
||||
Example: <img src-"https://github.com/avinal/avinal/blob/main/images/stat.svg" alt-"Avinal WakaTime Activity"/>
|
||||
```
|
||||
|
||||
> You can use this method to embed in web pages too. **Do not use the
|
||||
> markdown method of inserting images. It does not work sometimes.**
|
||||
|
||||
4. Click the **Action** tab and **choose to set up a workflow
|
||||
yourself**.
|
||||
|
||||
5. Copy the following code into the opened file, you can search for
|
||||
**WakaTime Stat** in the marketplace tab for assistance.
|
||||
|
||||
``` yaml
|
||||
name: WakaTime status update
|
||||
|
||||
on:
|
||||
schedule:
|
||||
# Runs at 12 am '0 0 * * *' UTC
|
||||
- cron: "1 0 * * *"
|
||||
|
||||
jobs:
|
||||
update-readme:
|
||||
name: Update the WakaTime Stat
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
# Use avinal/Profile-Readme-WakaTime@<latest-release-tag> for latest stable release
|
||||
# Do not change the line below except the word master with tag number maybe
|
||||
# If you have forked this project you can use <username>/Profile-Readme-WakaTime@master instead
|
||||
- uses: avinal/Profile-Readme-WakaTime@master
|
||||
with:
|
||||
# WakaTime API key stored in secrets, do not directly paste it here
|
||||
WAKATIME_API_KEY: ${{ secrets.WAKATIME_API_KEY }}
|
||||
# Automatic github token
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
# Branch - newer GitHub repositories have "main" as default branch, change to main in that case, default is master
|
||||
BRANCH: "master"
|
||||
# Manual Commit messages - write your own messages here
|
||||
COMMIT_MSG: "Automated Coding Activity Update :alien:"
|
||||
```
|
||||
|
||||
6. Please wait till 12 AM UTC to run this workflow automatically. Or
|
||||
you can force run it by going to the Actions tab. Or you can add the
|
||||
following lines under <span class="title-ref">on:</span> to run with
|
||||
every push. Search for 12 AM UTC to find the equivalent time in your
|
||||
time zone.
|
||||
|
||||
``` yaml
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
schedule:
|
||||
- cron: '1 0 * * *'
|
||||
```
|
||||
|
||||
## My Coding Activity
|
||||
|
||||
<img class="img-fluid" src="https://raw.githubusercontent.com/avinal/avinal/main/images/stat.svg">
|
||||
@@ -0,0 +1,98 @@
|
||||
---
|
||||
title: Move WSL 2 Safely to another Drive
|
||||
date: 2020-12-31 19:07
|
||||
tags: wsl, wsl2
|
||||
category: development
|
||||
description: It is real pain when you have small SSD and Windows Subsystem for Linux
|
||||
(WSL) is growing exponentially in size. There is no easy way to move the
|
||||
WSL installation to another drive. Here in this blog I will discuss how
|
||||
to tackle this problem with bite size steps.
|
||||
---
|
||||
|
||||
# Move WSL 2 Safely to another Drive
|
||||
|
||||
It is real pain when you have small SSD and Windows Subsystem for Linux
|
||||
(WSL) is growing exponentially in size. There is no easy way to move the
|
||||
WSL installation to another drive. Here in this blog I will discuss how
|
||||
to tackle this problem with bite size steps.
|
||||
|
||||
1. Open a PowerShell
|
||||
<img src="/images/powershell.png" class="align-middle"
|
||||
style="width:5.0%" alt="powershell" /> or Command Prompt
|
||||
<img src="/images/command-line.png" class="align-middle"
|
||||
style="width:5.0%" alt="command-line" /> with *Admin* access. For
|
||||
this you can use
|
||||
<img src="/images/windows10.png" class="align-middle" style="width:5.0%"
|
||||
alt="WinKey" /> + X shortcut and select **Windows
|
||||
PowerShell(Admin)**.
|
||||
2. Check if the WSL 2 installation you are planning to move is is
|
||||
currently running/stopped.
|
||||
|
||||
``` powershell
|
||||
PS C:\Users\Avinal> wsl -l -v
|
||||
PS C:\Users\Avinal>
|
||||
NAME STATE VERSION
|
||||
* Ubuntu Running 2
|
||||
Kali Stopped 2
|
||||
```
|
||||
|
||||
3. If its running then you must stop the particular WSL distribution.
|
||||
(*Ubuntu* used as example)
|
||||
|
||||
``` powershell
|
||||
PS C:\Users\Avinal> wsl -t Ubuntu
|
||||
```
|
||||
|
||||
4. Export to some folder. (Here exporting *Ubuntu* as *ubuntu-ex.tar*
|
||||
to *Z:wsl2*)
|
||||
|
||||
``` powershell
|
||||
PS C:\Users\Avinal> wsl --export Ubuntu "Z:\export\ubuntu-ex.tar"
|
||||
```
|
||||
|
||||
5. Unregister previous WSL installation
|
||||
|
||||
``` powershell
|
||||
PS C:\Users\Avinal> wsl --unregister Ubuntu
|
||||
```
|
||||
|
||||
6. Create a new folder and import your WSL installation to that folder.
|
||||
|
||||
``` powershell
|
||||
PS C:\Users\Avinal> New-Item -Path "Z:\wsl2" -ItemType Directory
|
||||
|
||||
Directory: Z:\
|
||||
|
||||
Mode LastWriteTime Length Name
|
||||
---- ------------- ------ ----
|
||||
d----- 31-12-2020 21:03 wsl2
|
||||
|
||||
PS C:\Users\Avinal> wsl --import Ubuntu "Z:\wsl2" "Z:\export\ubuntu-ex.tar"
|
||||
```
|
||||
|
||||
7. Check after import is complete
|
||||
|
||||
``` powershell
|
||||
PS C:\Users\Avinal> wsl -l -v
|
||||
PS C:\Users\Avinal>
|
||||
NAME STATE VERSION
|
||||
* Ubuntu Running 2
|
||||
Kali Stopped 2
|
||||
```
|
||||
|
||||
8. Mark one of your WSL distribution as *(default)*.
|
||||
|
||||
``` powershell
|
||||
PS C:\Users\Avinal> wsl -s Ubuntu
|
||||
```
|
||||
|
||||
9. After exporting your default user will be set as
|
||||
<i style="color:red">root</i> , to change it to your desired
|
||||
username, run following command
|
||||
|
||||
``` powershell
|
||||
PS C:\Users\Avinal> ubuntu config --default-user user_name
|
||||
```
|
||||
|
||||
10. Finally run `wsl` and you have successfully moved your WSL 2
|
||||
installation to another drive.
|
||||
Reference in New Issue
Block a user