Nake v3.0.0-beta Release Notes

Release Date: 2020-04-12 // over 1 year ago
  • First actually usable release after Nake was migrated to .NET Core.

    ๐Ÿ†• New Features

    • ๐Ÿณ The easiest way to invoke the command line via await "docker ps -a" with automatic cross-platform escaping of arguments. The underlying execution is done via MedallionShell package
    • Since MedallionShell operates on a string array for arguments, which is verbose, the Nake introduces special syntax to construct app invocation strings similar to existing shells: await "app {arg1} {arg2}".Use spaces to delimit arguments. If an argument contains spaces use single quotes 'arg with space'. If it contains single quote - just double it 'contains '' quote'. The Nake will split the string into a string array and then MedallionShelll will properly quote the arguments in a platform-dependent syntax
    • ๐Ÿ‘ Backslash () is now supported as a line continuation symbol for verbatim command strings
    • ๐Ÿ“ฆ Full IntelliSense support in VSCode (thanks for plain C# compatibility, dotnetscript VSCode extension and distribution of Nake.Meta and Nake.Utility libraries as nuget packages)
    • ๐Ÿ‘Œ Support for referencing Nuget packages in scripts, thanks to dotnet-script project dependency package
    • ๐Ÿ‘ Async task support. Including safe concurrent execution with run-once guarantee for Steps
    • Environment variables inlining (%VAR%) is now dependent on scope: inlined at compile time for constants and live bound to the environment for variable scopes
    • The NakeScriptDirectory variable is now inlined according to a script location
    • ๐Ÿ— As a consequence of building on top of MedallionShell package, piping and standard streams redirects are supported when command line invocations are created via Run(cmd)
    • ๐Ÿ–จ Tee helper class when you want to both print to std out and capture output

      var tee = new Tee(Log.Out); var result = await Run($"docker images list").With(tee); Assert.That(result.Success); Assert.That(tee.StandardError().Count, Is.EqualTo(0)); Assert.That(tee.StandardOutput().Count, Is.GreaterThan(0));

    ๐Ÿ’ฅ Breaking Changes

    • Nake.Run -> Nake.Shell
    • Nake.Exec(MsBuildTask) -> MsBuildTask.Exec() - as extension method
    • MSBuildExtensions -> MsBuildExtensions
    • ๐Ÿ— Microsoft.Build.Tasks and Microsoft.Build.Utilities are not imported by default
    • ๐Ÿ“ฆ Meta and Utility are now published as separate packages and need to be nuget imported

    Known Issues

    • โช We don't yet support multi-level caching (script references vs script code) which leads to unnecessary nuget restores when only the script code changed
    • ๐Ÿ“ฆ Not all of the script compilation hacks were backported from dotnet-script so referencing some of the nuget packages will not work as expected (ie packages with native libraries)
    • ๐Ÿ“š The automatic quoting of variables in string interpolations advertised in documentation is not yet implemented
    • ๐Ÿš€ The syntax for calling nested tasks is still dot-based (ie dotnet.tool list) instead of space-based (dotnet tool list). That will be resolved in next release

Previous changes from v2.3.0

  • ๐Ÿ†• New feature:

    • ๐Ÿ‘Œ Support for Enum parameters