Many years ago I wanted to jump into a project in open source but had no idea where to start. I had worked with node.js, .NET and some other web-based technology but wasn't sure where to start and GitHub was new to me. Ironically, I fell onto Omnisharp and the .NET Core yo aspnet projects through my Microsoft MVP Summit meetings that year.
Flicking through Twitter, as one does, I came across an announcement from a friend Tierny (@bitandbang) where he had started a CLI tool for node.js projects called "good-first-issue" to find random GitHub Issues for projects submitted to his tool.
There are a ton of open source projects asking for help on issues that have a low barrier to entry. These issues are typically tagged or labeled with good-first-issue, up-for-grabs, helpwanted, etc. Finding them can be hard, a good start is https://up-for-grabs.net .
There are over 700 projects currently available on the site. Everything from C++, Java, TypeScript, Ruby, Django, Go and more is available in the filters.
If you have a project and are looking for help get it added by submitting your own project(s) via their GitHub - https://github.com/up-for-grabs/up-for-grabs.net. There is even a yeoman generator for getting the yaml correct - yo up-for-grabs.
As a .NET developer, I wanted to create something like Tierny had, so I went the global tool route.
Using the latest .NET Core 2.2 SDK, created upforgrabs.
The source of the data is, in fact, the same project list from https://up-for-grabs.net, which is filtered specifically to .NET type projects.
Each project for the site is stored in a yaml file under up-for-grabs.net/_data/projects/. However consuming 700 or so yaml files, filtering, etc. on every call from a console app is not very efficient.
The solution, Docker and Azure Container Instances. Here I used a .NET Core Alpine Linux container and installed Subversion.
Why Subversion? GitHub does not have a way to get a specific folder from a repository. Using Subversion I downloaded the /projects folder to process all the files.
Once the yaml is downloaded, using Newtonsoft.JSON, they are combined and converted to a single project.json file.
PostFile() writes the final file to an Azure CDN using the Azure SDK.
See my previous post on using an Azure CDN and serverless to speed up API calls.
In order to keep the project.json feed up to date, I set up a scheduled build using Azure Devops and Container Instances.
Destroys the Container Instance ensuring only runtime billing.
Upon successful build, the Release Pipeline executes. This has the Start/Destroy of the ACI Container.
The repository for the "feed project" is available here - https://github.com/spboyer/up-for-grabs-feed.
There are more than 290 .NET open source projects currently in the list. If you're looking for a new project to get into, this is an easy way to get there.
Open a command line and type upforgrabs.