Cake v2.0.0 released

Published
Tuesday, 30 November 2021
Category
Release Notes
Author
devlead

Version 2.0.0 of Cake has been released. Take it for a spin and give us feedback on our discussion board.

This version is the 119th release of Cake, but it's just not any release - say hello to Cake 2.0 🎉 In this blog post, we will go through some of the major new features of 2.0, which platforms are supported and what to consider when upgrading to Cake 2.0.

But first of all, we would like to thank our amazing community, we wouldn't be where we are today without you, so huge thanks to all of you! ❤

Major new features

... and more! The full list of changes is listed below.

Upgrading

See Upgrade instructions for documentation about breaking changes in this release.

.NET 6 and C# 10 support

Cake now fully supports running on .NET 6, and with this C# 10, which means you can take advantage of the latest framework, runtime, and language improvements.

Supported runners and required .NET version

To allow Cake to make use of modern platform features, make life easier for extension authors and simplify the decision process of users we have decided to stop shipping Cake runner for .NET Framework and the already deprecated Cake runner for .NET Core with 2.0. Additionally we dropped support to run on .NET Core 2.1 and .NET Core 3.0 for Cake .NET Tool and Cake Frosting.

This means that, starting with Cake 2.0, you will need to have the .NET SDK installed on your build machine, at a minimum .NET Core 3.1, but .NET 6 is recommended, in order to run Cake. In other words, Cake itself will no longer run on .NET Framework, Mono, and .NET Core 3.0 or older. Cake will continue to support building of .NET Framework projects as well as projects targeting .NET Core 3.0 or older.

Supported platform matrix for Cake 2.0 will look like this:

Runner .NET 6 .NET 5 .NET Core 3.1
Cake .NET Tool
Cake Frosting

As a consequence of no longer shipping Cake runner for .NET Framework, we will also stop shipping the Cake.Portable Chocolatey package and Homebrew Cake formulae.

Cake runner for .NET Core has been deprecated since version 1.0 with Cake .NET Tool as the suggested replacement. For users of Cake runner for .NET Framework, it is also suggested to switch to Cake .NET Tool and run builds on .NET Core 3.1 or newer. For users which rely on an extension, or other dependencies, which require .NET Framework or .NET Core 3.0 or older, the suggestion is to stay on Cake 1.x.

See Sunsetting of .NET Framework and .NET Core runners in Cake 2.0 for details.

Improvements to aliases for dotnet

Cake 1.x had many DotNetCore*** aliases for executing dotnet such as DotNetCoreBuild, DotNetCoreTest, etc. The Core part in the name existed for historical reasons when .NET Core was first introduced and lasted until v3.1. With .NET 5, Microsoft dropped the "Core" from the name, and Cake 2.0 follows this naming schema for its .NET aliases: DotNetCoreBuild becomes DotNetBuild, DotNetCoreTest becomes DotNetTest, etc.

Note that the old aliases are still available but deprecated and will be removed in Cake 3.0.

See #3341 for details.

Improved GitHub Actions integration

Cake 2.0 comes with a few improvements to the GitHub Actions build provider:

  • Properties of files and paths are now of type FilePath and DirectoryPath
  • New Environment properties which returns runtime info, runner name, and workflow action path
  • UploadArtifact command to upload a local directory or file into a file container folder and create an artifact.
  • SetEnvironmentVariable command to create or update an environment variable for any steps running next in a job.
  • AddPath command to add a directory to the system PATH variable and automatically make it available to all subsequent actions in the current job.

Improved Azure Pipelines integration

Cake 2.0 comes with a few improvements to the Azure Pipelines build provider. See Azure Pipelines build provider updates for details.

We've now set the recommended version of Cake.Core for addins to target to 2.0.

This won't break the build but you might see warnings like below when addins or modules are loaded.

The assembly 'Cake.FileHelpers, Version=4.0.1.0, Culture=neutral, PublicKeyToken=null'
is referencing an older version of Cake.Core (1.0.0).

Updated Docker images

Images are now continuously built for the last 10 stable versions of Cake version 1.0 or newer. Currently based on official Microsoft images available ( mcr.microsoft.com/dotnet/sdk ).

To pin to a specific version suffix with Cake version i.e. cakebuild/cake:sdk-6.0 becomes cakebuild/cake:sdk-6.0-v2.0.0.

Tags are added dynamically as new are added to Microsoft container registry. Check hub.docker.com/r/cakebuild/cake/tags for currently available tags.

Pull requests and issues for the Docker images can be raised in github.com/cake-build/docker.

Contributions

Contributions were included from:

Full details of everything that was included in this release can be seen below.

Issues

As part of this release we had 83 issues closed.

Breaking change

  • #3714 Use Basic.Reference.Assemblies.* to ensure all standard reference assemblies are available for Roslyn.
  • #3654 IsRunningOnAzurePipelines should ignore agent type.
  • #3631 Refactor GitHub Actions Paths.
  • #3610 Remove TFBuildProvider.
  • #3590 Directories in AzurePipelinesBuildInfo are FilePaths - FilePath.GetDirectory then inconsistent.
  • #3581 Stop shipping Cake.Portable Chocolatey package and Cake Homebrew formulae.
  • #3579 Stop shipping Cake runner for .NET Framework and Cake runner for .NET Core.
  • #3577 Remove ReverseDependencyAttribute.
  • #3572 Only build for TargetFrameworks netcoreapp3.1, net5.0 and net6.0.
  • #3282 GitVersion Tool: Rename verbosity values to match GitVersion values.
  • #3222 Add Xamarin.iOS platform targets to MSBuildSettings PlatformTarget enumeration.
  • #3151 Add support for Engine event hooks after execution as well as before.
  • #3003 Remove DependencyAttribute.
  • #2872 Bump eol target frameworks.
  • #2788 Tool:OpenCover - the register-setting should be an option, rather than a string.
  • #1111 DotNetCoreRestore: dotnet restore no longer supports globbing.

Feature

  • #3630 Add GitHub Actions Environment properties.
  • #3629 Add GitHub Actions UploadArtifact Command.
  • #3628 Add GitHub Actions SetEnvironmentVariable Command.
  • #3627 Add GitHub Actions AddPath Command.
  • #3341 Epic: Introduce DotNet aliases (synonyms to DotNetCore aliases).

Improvement

  • #3709 Arguments alias should support ICollection as default value.
  • #3691 Update Microsoft.NETCore.Platforms to 6.0.0.
  • #3690 Update Microsoft.Extensions.DependencyInjection to 6.0.0.
  • #3689 Update System.Reflection.Metadata to 6.0.0.
  • #3688 Update System.Collections.Immutable to 6.0.0.
  • #3681 ScriptAssemblyResolver logging should be at debug/diagnostic level.
  • #3662 Update Microsoft.CodeAnalysis.CSharp.Scripting to 4.0.0-6.final.
  • #3647 Display message of criteria when task fails to run due to criteria not being met.
  • #3644 Add DotNetNuGetUpdateSource aliases (synonym to DotNetCoreNuGetUpdateSource).
  • #3643 Add DotNetNuGetRemoveSource aliases (synonym to DotNetCoreNuGetRemoveSource).
  • #3642 Add DotNetNuGetListSourceSettings (derived from to DotNetNuGetSource).
  • #3641 Add DotNetNuGetHasSource aliases (synonym to DotNetCoreNuGetHasSource).
  • #3640 Add DotNetNuGetEnableSource aliases (synonym to DotNetCoreNuGetEnableSource).
  • #3639 Add DotNetNuGetDisableSource aliases (synonym to DotNetCoreNuGetDisableSource).
  • #3607 Add EnableCompressionInSingleFile to DotNetCorePublishSettings.
  • #3599 Add VS2022 to default MSBuild Resolver.
  • #3598 Remove Preview from VS2022 MSBuild Resolver.
  • #3595 Update Autofac to 6.3.0.
  • #3593 Update Microsoft.CodeAnalysis.CSharp.Scripting to 4.0.0-5.final.
  • #3591 Update Microsoft.NETCore.Platforms to 6.0.0-rc.2.21480.5.
  • #3555 Add DotNetNuGetAddSource aliases (synonym to DotNetCoreNuGetAddSource).
  • #3554 Add DotNetNuGetDelete aliases (synonym to DotNetCoreNuGetDelete).
  • #3553 Add DotNetNuGetPush aliases (synonym to DotNetCoreNuGetPush).
  • #3552 Add DotNetPack alias (synonym to DotNetCorePack).
  • #3551 Add DotNetPublish alias (synonym to DotNetCorePublish).
  • #3550 Add DotNetVSTest alias (synonym to DotNetCoreVSTest).
  • #3549 Add DotNetTest alias (synonym to DotNetCoreTest).
  • #3548 Add DotNetBuildServer alias (synonym to DotNetCoreBuildServer).
  • #3547 Add DotNetBuild alias (synonym to DotNetCoreBuild).
  • #3546 Add DotNetRestore alias (synonym to DotNetCoreRestore).
  • #3545 Add DotNetClean alias (synonym to DotNetCoreClean).
  • #3544 Add DotNetExecute alias (synonym to DotNetCoreExecute).
  • #3543 Add DotNetRun alias (synonym to DotNetCoreRun).
  • #3542 Add DotNetTool alias (synonym to DotNetCoreTool).
  • #3523 Add DotNetMSBuild alias (synonym to DotNetCoreMSBuild).
  • #3215 Add RunCommand with postAction parameter to DotNetCoreTool.
  • #3075 Make FilePath and DirectoryPath comparable by value.
  • #2571 OctopusDeploy DeployTo property to take collection of string to specify multiple environments.
  • #2075 Add overloads for DotNetCore*() methods taking FilePath instead of string.
  • #1794 Private is missing from ProjectReference.
  • #1616 Error message on circular references leads to poor developer experience.

Documentation

  • #3701 Add cake-module tag to Cake.DotNetTool.Module NuGet package.
  • #3602 Switch to Cake.Tool as primary package in REAME.md.

Bug

  • #3711 SemanticVersion missing equals/not equals operator, prerelease sorted wrong.
  • #3697 Error: The requested service 'Cake.Commands.DefaultCommandSettings' has not been registered.
  • #3693 Core suffix is still used in some settings classes.
  • #3683 Use DotNetMSBuildSettings instead of DotNetCoreMSBuildSettings on new dotnet aliases settings.
  • #3671 VS2022: msbuild can not be located, only Build Tools are installed.
  • #2665 C# 8 Using Statement produces compile error.
  • #2443 Erroneous "Target path must be an absolute path" when preserveFolderStructure is used with CopyFiles.
  • #1669 Release notes does not tolerate prerelease versions.