Skip to content

3.0.0-beta-01

Compare
Choose a tag to compare
@yevhen yevhen released this 12 Apr 10:06
· 82 commits to master since this release

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