Releasing glazed-donut to the World🎉✨
Tags: opensource, csharp, github, releasing
Published: 2021-11-30 05:38:48

Releasing glazed-donut to the world

For the past week, I have been researching on where to release my command line interface (cli), [`glazed-donut`](https://github.com/dbelokon/glazed-donut).

For the people that do not know, `glazed-donut` is the name of the static site generator that I created as my first open source project for my college course. It was really fun to make over several weeks, slowly growing and learning a lot of things.😋🍩

## Deciding where to release my project

This was a tough one to realize. Because I have been mostly a Windows user, all applications that I would install in my computer were installed with [installation wizards](https://en.wikipedia.org/wiki/Wizard_(software)). I was not really sure how I would package my application, specially if I wanted to make it cross-platform.🤯

### Research x 10000000000000

Since I was using C# for my application, at first, I thought that uploading my application to Nuget was the best idea.

However, as I was researching, Nuget is not fit for binary applications such as executable files. The primary purpose of Nuget is to upload and download packages that contain libraries.💡

Since Nuget was not what I was looking for, I had no other choice but to provide the program through GitHub releases, pre-built and compressed (very old-school).

## Creating the release 💡

The process for the initial release went smoothly for the most part. The first thing I was looking for is how to repackage my code into an executable. I read Microsoft tutorials on [how to package my program for publishing](https://docs.microsoft.com/en-us/dotnet/core/deploying/). It was very straightforward, since I only had to run the command:

```
dotnet publish -c Release -r win10-x64 --self-contained false
```

To create a built executable for Windows 10, in a 64-bit environment. For Linux, it was very similar, I just had to use `linux-x64` for the `-r` option instead.

The best thing about this is that I didn't have to restructure my program at all. I just had to run the commands and compress the output folders (I compressed the Windows folder with the integrated `zip` compressor in Windows, and I compressed the Linux folder with `7zip` to a `tar.gzip`).

After preparing my package, I decided to make the first release on GitHub. I got my `master` branch on its latest commit and tagged it with the `v1.0.0` tag. I then pushed the tag to my GitHub repo, and made a new release using the new tag.

I attached the compressed binaries to the GitHub release post, so that people can download the program without having to compile the program themselves. 😎

## User testing the Linux version

Although I managed to test the Windows application on my machine by following the instructions I created, I was wondering whether the Linux application would actually work.

Thus, I decided to contact one of my classmates who has a Linux machine that I could test the program. I told him to download `glazed-donut` and install it with the instructions I left in the README.

He did not have much problems following them, which made me feel glad. He said that the app ran just fine. He did mention that he forgot he had to install .NET Core Runtime version 3.1 when he tried to run it with his version of the runtime (he told me he had version 6 installed). After that problem, I corrected my readme to include that pre-requisite.

It is so cool to have friends with different operating systems than mine, comes in handy when doing some testing.😁

## Installation instruction

I wrote this in the [README of my project](https://github.com/dbelokon/glazed-donut#readme), but I would like to explain the basic principle behind.

The installation method is really similar to how you would install an application yourself when you have compiled it in a Linux environment. If the program did not offer any prebuilt binaries, you would have to get the source code in some way, and then compile it. After the compilation is done, you would have to place the resulting executable in a bin folder so that it is accessible from a folder found in the PATH variable.

## Some thoughts 
It feels like my project is an actual project now that it is being released and people can download it without having to clone the code. 😋🐱‍💻🐱‍💻 I highly recommend to try this out no matter how complete your project is!