Happy Monday, everyone! Current status: still wondering if I’m just a JSON pusher (warning: link has a naughty word).
This week, we:
- Discuss how Azure DevOps and GitHub Actions will be ironed out
- Discuss the .NET Foundation election results
- Check out a busy week in the community
GitHub Actions or Azure DevOps?
Hopefully by now, in 2020, you know that friends don’t let friends right-click publish. There are so many tools you can use to work with continuous integration and continuous deployment pipelines—I’d like to talk about two under Microsoft’s ownership: Azure DevOps and GitHub Actions.
As a .NET developer, you’re probably familiar with Azure DevOps (previously Team Foundation Server). It’s got a decade of battle-tested use in enterprises, with well-featured CI/CD pipelines. If you want best-in-class Microsoft tooling with either your on-prem or cloud deployments, it’s always been a clear choice.
The lines blurred a little when, in 2018, Microsoft acquired GitHub. GitHub, traditionally known for being the community’s preferred way to share code, was now bought by a company invested in open source development and an interest in bringing Microsoft-ness to new audiences. GitHub’s own CI/CD solution, GitHub Actions, is getting a lot of well-deserved recognition. And with npm joining GitHub, GitHub will definitely help improve experiences with dependency management. To further blur the lines, a lot of folks don’t know about their GitHub Enterprise offering, an on-prem solution that even has integration capabilities with Active Directory!
So what does this say for the future of Microsoft CI/CD pipelines? As a long-term strategy, Microsoft can’t expect to run two similar products with internal competition. I actually wondered about this not so long ago and was referred to an insightful conversation that occurred on the Azure Podcast with GitHub PM Sasha Rosenbaum.
She agreed that, yes, the investments will be geared toward GitHub and its vibrant community and long-term GitHub will probably win out. This isn’t to say that you need to migrate in 6 months or anything—she even mentioned a 5-year timeframe—but the future is definitely with GitHub Actions. As such, her recommendation was that there’s nothing wrong with using Azure DevOps today, but if you’re starting a new project to look into using GitHub.
Until the time comes when Microsoft has one CI/CD tool, you’ll likely see GitHub Actions build out with a stronger feature set. It’s already robust—and with its CI capabilities are right there with Azure DevOps—but has some work to do until it’s on-par with its continuous deployment functionality (release pipelines, gates, advanced permissions, and whatnot).
.NET Foundation Board of Directors election results are in
This week, we found out who would serve on the .NET Foundation Board of Directors. Out of 17 nominees, these six folks came out on top (with Beth Massi on the 7th spot as Microsoft’s one appointed board member):
It’s great to see an entirely new Board and am looking forward to seeing what comes from these fresh perspectives.
🌎 Last week in the .NET world
The Top 3
- The .NET Foundation Board of Directors election results are in.
- Jon Hilton makes a responsive navbar with Blazor and Tailwind.
- Andrew Lock goes deep on IHttpClientFactory.
- Microsoft announced the release of Visual Studio 2019 v16.7 and v16.8 Preview 1. With v16.7, IntelliCode helps to spot repetitions in your code. Other VS news: Gabrielle Crevecoeur announces an Angular Language Service for Visual Studio and Visual Studio 2019 for Mac version 8.7 is now available.
- You can now sign up for the private preview for Visual Studio Codespaces.
- You can now choose the initial branch name for new repos in Azure Repos.
- Okta announced a developer certification program.
- Both Microsoft and GitHub have joined the Open Source Security Foundation.
- The OpenTelemetry .NET SDK has reached beta.
📅 Community and events
- Three community standups this week: Xamarin talks about Forms 4.8, Entity Framework talks about the EF Core in Depth video series, and ASP.NET Core has an update on Project Tye.
- The .NET Docs Show talks with Chase Aucoin.
- Troy Hunt plans on open sourcing Have I Been Pwned.
- Marinko Spasojevic works on Blazor WASM registration functionality with ASP.NET Core Identity and also uses AuthenticationStateProvider in Blazor WASM.
- Peter Vogel creates a progressive web app with Blazor Web Assembly.
🚀 .NET Core
- David Grace logs data changes in EF Core and also adds Google auth to an ASP.NET Core application.
- Atul Warade works on background tasks in ASP.NET Core.
- Derek Comartin gets started with Apache Kafka with .NET Core.
- Martijn Boland uses AppText for easy ASP.NET Core localization.
- Khalid Abuhakmeh handles HTTP status codes with Razor Pages.
- ErikEJ calls stored procedures with OUTPUT params with FromSqlRaw in EF Core.
- Shahed Chowdhuri has rolled out his ASP.NET Core 3.1 A-Z e-book.
⛅ The cloud
- Kevin Griffin loves Azure Static Web Apps.
- Sacha Barber looks at Azure Event Hubs with Kafka.
- Dror Helper creates a .NET AWS serverless app using API Gateway with API Key.
- Chris Pietschmann discusses some tips and tricks for the Azure Cloud Shell.
- Damien Bowden works on monitoring and diagnostics in Azure Durable Functions.
- Khalid Abuhakmeh talks about preprocessor directives in C#..
- Ian Griffiths continues his C# nullable references series, discussing when methods don’t return.
- Rami Honig has a guide for learning C# and .NET in 2020.
- Brian Lagunas warns against async void in C#.
- Oren Eini explains the use of default(object).
- Jiří Činčura looks at the best way to create an empty collection in C#.
- Carmel Eve talks about how to fully initialize types in constructors with C# nullable using the async factory pattern.
- Maxime Brugidou discusses moving .NET to Linux at scale.
- Gunnar Peipman builds ASP.NET Core applications on Visual Studio Codespaces and VS Code.
- Justin Yoo sets up Visual Studio Codespaces for .NET Core.
- Munib Butt has a primer on getting started with LinqPad.
- Rick Strahl uses .NET Core tools for reusable and shareable tools and apps.
- Matthias Koch implements and debugs custom MSBuild tasks.
- Mike Hadlow restores from an Azure Artifacts NuGet feed from inside a Docker build.
- Gérald Barré enforces async code good practices using a Roslyn analyzer.
- Scott Hanselman works through an easy way to SSHG into Bash and WSL2 on Windows 10 from an external machine.
- Charles Flatt offers an in-depth look at .NET Framework NuGet packages.
- Shawn Wildermuth talks about Pinger, his app that pings a range of IP addresses.
- Matt Lacey clears up a thing or two about nuget.exe.
- Dan Clarke works on cleaner tests with XUnit’s IAsyncLifetime and expression-bodied members.
- Justin Chen shows off semantic highlighting in the VS Code PowerShell Preview extension.
- Vicente Gerardo Guzmán Lucio talks about new features in Xamarin.Forms 4.7.
- Leomaris Reyes works on Excel file creation.
- Daniel Hindrikes talks about OneTime bindings.
- Microsoft has a handy list of Xamarin-related .NET virtual events in August.
- Charlin Agramonte shows off show/hide password functionality using EventTrigger.
- Over at the Okta blog, Giorgi Dalakishvili works through Xamarin.Essentials and Web Authenticator.
Over at the .NET Rocks podcast, they discuss adding identity to your applications.
- Data Exposed talks about transitioning your SQL Server skills to Azure SQL.
- A new Azure SQL for Beginners video series launched.
- Scott Hanselman warns you about git push –force.
- The ON.NET Show continues talking about packaging and deploying .NET Core for Linux.
- From .NET Conf, a bunch: Cecil Phillip adds DAPR to .NET microservices, David Dieruf works on .NET microservices with Steeltoe, Shayne Boyer builds and debugs microservices with Kubernetes and Visual Studio, Elton Stoneman evolves .NET Framework monoliths with .NET 5 and Kubernetes, and James Newton-King builds high-performance microservices with gRPC and .NET.