diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f803924c..1072bdeb 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -12,9 +12,8 @@ jobs: uses: actions/setup-dotnet@v3 with: dotnet-version: | - 6.0.x - 7.0.x 8.0.x + 9.0.x include-prerelease: true - name: Install dotnet-script run: dotnet tool install dotnet-script --global @@ -23,7 +22,7 @@ jobs: run: dotnet-script build/Build.csx build-mac: - runs-on: macos-latest + runs-on: macos-13 steps: - uses: actions/checkout@v3 @@ -31,9 +30,8 @@ jobs: uses: actions/setup-dotnet@v3 with: dotnet-version: | - 6.0.x - 7.0.x 8.0.x + 9.0.x include-prerelease: true - name: Install dotnet-script run: dotnet tool install dotnet-script --global @@ -50,9 +48,8 @@ jobs: uses: actions/setup-dotnet@v3 with: dotnet-version: | - 6.0.x - 7.0.x 8.0.x + 9.0.x include-prerelease: true - name: Install dotnet-script run: dotnet tool install dotnet-script --global diff --git a/.gitignore b/.gitignore index 860e9507..62f574c6 100644 --- a/.gitignore +++ b/.gitignore @@ -266,3 +266,4 @@ project.json /dotnet-script /.vscode /src/Dotnet.Script/Properties/launchSettings.json +.DS_Store diff --git a/README.md b/README.md index f67e8cc7..3482c176 100644 --- a/README.md +++ b/README.md @@ -8,19 +8,22 @@ Run C# scripts from the .NET CLI, define NuGet packages inline and edit/debug th ## NuGet Packages -| Name | Version | Framework(s) | -| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------- | -| `dotnet-script` (global tool) | [![Nuget](http://img.shields.io/nuget/v/dotnet-script.svg?maxAge=10800)](https://www.nuget.org/packages/dotnet-script/) | `net6.0`, `net7.0` | -| `Dotnet.Script` (CLI as Nuget) | [![Nuget](http://img.shields.io/nuget/v/dotnet.script.svg?maxAge=10800)](https://www.nuget.org/packages/dotnet.script/) | `net6.0`, `net7.0` | -| `Dotnet.Script.Core` | [![Nuget](http://img.shields.io/nuget/v/Dotnet.Script.Core.svg?maxAge=10800)](https://www.nuget.org/packages/Dotnet.Script.Core/) | `net6.0` , `netstandard2.0` | -| `Dotnet.Script.DependencyModel` | [![Nuget](http://img.shields.io/nuget/v/Dotnet.Script.DependencyModel.svg?maxAge=10800)](https://www.nuget.org/packages/Dotnet.Script.DependencyModel/) | `netstandard2.0` | -| `Dotnet.Script.DependencyModel.Nuget` | [![Nuget](http://img.shields.io/nuget/v/Dotnet.Script.DependencyModel.Nuget.svg?maxAge=10800)](https://www.nuget.org/packages/Dotnet.Script.DependencyModel.Nuget/) | `netstandard2.0` | +| Name | Version | Framework(s) | +| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------- | +| `dotnet-script` (global tool) | [![Nuget](http://img.shields.io/nuget/v/dotnet-script.svg?maxAge=10800)](https://www.nuget.org/packages/dotnet-script/) | `net8.0`,`net9.0` | +| `Dotnet.Script` (CLI as Nuget) | [![Nuget](http://img.shields.io/nuget/v/dotnet.script.svg?maxAge=10800)](https://www.nuget.org/packages/dotnet.script/) | `net8.0`,`net9.0` | +| `Dotnet.Script.Core` | [![Nuget](http://img.shields.io/nuget/v/Dotnet.Script.Core.svg?maxAge=10800)](https://www.nuget.org/packages/Dotnet.Script.Core/) | `net8.0`,`net9.0`,`netstandard2.0` | +| `Dotnet.Script.DependencyModel` | [![Nuget](http://img.shields.io/nuget/v/Dotnet.Script.DependencyModel.svg?maxAge=10800)](https://www.nuget.org/packages/Dotnet.Script.DependencyModel/) | `netstandard2.0` | +| `Dotnet.Script.DependencyModel.Nuget` | [![Nuget](http://img.shields.io/nuget/v/Dotnet.Script.DependencyModel.Nuget.svg?maxAge=10800)](https://www.nuget.org/packages/Dotnet.Script.DependencyModel.Nuget/) | `netstandard2.0` | ## Installing ### Prerequisites -The only thing we need to install is [.Net 6.0 or .Net 7.0](https://www.microsoft.com/net/download/core). +The only thing we need to install is [.NET 8.0 or .NET 9.0 SDK](https://dotnet.microsoft.com/en-us/download/dotnet). + +[Note](https://learn.microsoft.com/en-us/dotnet/core/install/linux-scripted-manual#manual-install): +> If you install the .NET SDK to a non-default location, you need to set the environment variable `DOTNET_ROOT` to the directory that contains the dotnet executable ### .NET Core Global Tool diff --git a/build/Build.csx b/build/Build.csx index 684f6602..3aa8a709 100644 --- a/build/Build.csx +++ b/build/Build.csx @@ -1,4 +1,4 @@ -#load "nuget:Dotnet.Build, 0.7.1" +#load "nuget:Dotnet.Build, 0.23.0" #load "nuget:dotnet-steps, 0.0.1" #load "nuget:github-changelog, 0.1.5" #load "BuildContext.csx" @@ -33,7 +33,7 @@ await StepRunner.Execute(Args); private void CreateGitHubReleaseAsset() { - DotNet.Publish(dotnetScriptProjectFolder, publishArtifactsFolder, "net6.0"); + DotNet.Publish(dotnetScriptProjectFolder, publishArtifactsFolder, "net8.0"); Zip(publishArchiveFolder, pathToGitHubReleaseAsset); } @@ -58,7 +58,8 @@ private void CreateNuGetPackages() private void RunTests() { - DotNet.Test(testProjectFolder); + Command.Execute("dotnet", "test -c Release -f net8.0", testProjectFolder); + Command.Execute("dotnet", "test -c Release -f net9.0", testProjectFolder); if (BuildEnvironment.IsWindows) { DotNet.Test(testDesktopProjectFolder); @@ -86,7 +87,8 @@ private async Task PublishRelease() Git.Default.RequireCleanWorkingTree(); await ReleaseManagerFor(owner, projectName, BuildEnvironment.GitHubAccessToken) .CreateRelease(Git.Default.GetLatestTag(), pathToReleaseNotes, new[] { new ZipReleaseAsset(pathToGitHubReleaseAsset) }); - NuGet.TryPush(nuGetArtifactsFolder); + + DotNet.TryPush(nuGetArtifactsFolder); } } diff --git a/build/BuildContext.csx b/build/BuildContext.csx index 6cf4505b..1cfeeb07 100644 --- a/build/BuildContext.csx +++ b/build/BuildContext.csx @@ -1,4 +1,4 @@ -#load "nuget:Dotnet.Build, 0.7.1" +#load "nuget:Dotnet.Build, 0.23.0" using static FileUtils; using System.Xml.Linq; @@ -7,7 +7,7 @@ const string GlobalToolPackageId = "dotnet-script"; var owner = "filipw"; var projectName = "dotnet-script"; var root = FileUtils.GetScriptFolder(); -var solutionFolder = Path.Combine(root,"..","src"); +var solutionFolder = Path.Combine(root, "..", "src"); var dotnetScriptProjectFolder = Path.Combine(root, "..", "src", "Dotnet.Script"); var dotnetScriptCoreProjectFolder = Path.Combine(root, "..", "src", "Dotnet.Script.Core"); var dotnetScriptDependencyModelProjectFolder = Path.Combine(root, "..", "src", "Dotnet.Script.DependencyModel"); diff --git a/build/omnisharp.json b/build/omnisharp.json index 74b7fc1b..945a3c21 100644 --- a/build/omnisharp.json +++ b/build/omnisharp.json @@ -1,6 +1,6 @@ { "script": { "enableScriptNuGetReferences": true, - "defaultTargetFramework": "net6.0" + "defaultTargetFramework": "net8.0" } } \ No newline at end of file diff --git a/global.json b/global.json index 090e95c7..97614a3d 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "8.0.100", + "version": "9.0.100", "rollForward": "latestFeature" } } diff --git a/src/.vscode/tasks.json b/src/.vscode/tasks.json index e35e8bda..d778ce8d 100644 --- a/src/.vscode/tasks.json +++ b/src/.vscode/tasks.json @@ -46,7 +46,7 @@ "-c", "release", "-f", - "net7.0", + "net9.0", "${workspaceFolder}/Dotnet.Script.Tests/DotNet.Script.Tests.csproj" ], "problemMatcher": "$msCompile", diff --git a/src/Dotnet.Script.Core/Dotnet.Script.Core.csproj b/src/Dotnet.Script.Core/Dotnet.Script.Core.csproj index fc33ff5d..94dd6e45 100644 --- a/src/Dotnet.Script.Core/Dotnet.Script.Core.csproj +++ b/src/Dotnet.Script.Core/Dotnet.Script.Core.csproj @@ -2,9 +2,9 @@ A cross platform library allowing you to run C# (CSX) scripts with support for debugging and inline NuGet packages. Based on Roslyn. - 1.5.0 + 1.6.0 filipw - net8.0;net7.0;net6.0;netstandard2.0 + net9.0;net8.0;netstandard2.0 Dotnet.Script.Core Dotnet.Script.Core script;csx;csharp;roslyn @@ -24,18 +24,18 @@ - - - + + + - + - + \ No newline at end of file diff --git a/src/Dotnet.Script.Core/Scaffolder.cs b/src/Dotnet.Script.Core/Scaffolder.cs index b07e911e..8e52acc1 100644 --- a/src/Dotnet.Script.Core/Scaffolder.cs +++ b/src/Dotnet.Script.Core/Scaffolder.cs @@ -81,6 +81,7 @@ public void RegisterFileHandler() if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { // register dotnet-script as the tool to process .csx files + _commandRunner.Execute("reg", @"delete HKCU\Software\classes\.csx /f"); _commandRunner.Execute("reg", @"add HKCU\Software\classes\.csx /f /ve /t REG_SZ /d dotnetscript"); _commandRunner.Execute("reg", $@"add HKCU\Software\Classes\dotnetscript\Shell\Open\Command /f /ve /t REG_EXPAND_SZ /d ""\""%ProgramFiles%\dotnet\dotnet.exe\"" script \""%1\"" -- %*"""); } @@ -141,7 +142,7 @@ private void CreateLaunchConfiguration(string currentWorkingDirectory) _scriptConsole.WriteNormal("Creating VS Code launch configuration file"); string pathToLaunchFile = Path.Combine(vsCodeDirectory, "launch.json"); string installLocation = _scriptEnvironment.InstallLocation; - bool isInstalledAsGlobalTool = installLocation.Contains(".dotnet/tools", StringComparison.OrdinalIgnoreCase); + bool isInstalledAsGlobalTool = installLocation.Contains($".dotnet{Path.DirectorySeparatorChar}tools", StringComparison.OrdinalIgnoreCase); string dotnetScriptPath = Path.Combine(installLocation, "dotnet-script.dll").Replace(@"\", "/"); string launchFileContent; if (!File.Exists(pathToLaunchFile)) diff --git a/src/Dotnet.Script.Core/ScriptPublisher.cs b/src/Dotnet.Script.Core/ScriptPublisher.cs index 15452b66..faaf6b05 100644 --- a/src/Dotnet.Script.Core/ScriptPublisher.cs +++ b/src/Dotnet.Script.Core/ScriptPublisher.cs @@ -11,7 +11,7 @@ namespace Dotnet.Script.Core { public class ScriptPublisher { - private const string ScriptingVersion = "4.8.0-3.final"; + private const string ScriptingVersion = "4.11.0"; private readonly ScriptProjectProvider _scriptProjectProvider; private readonly ScriptEmitter _scriptEmitter; @@ -57,7 +57,7 @@ public void CreateAssembly(ScriptContext context, LogFactory log // only display published if we aren't auto publishing to temp folder if (!scriptAssemblyPath.StartsWith(FileUtils.GetTempPath())) { - _scriptConsole.WriteSuccess($"Published {context.FilePath} to { scriptAssemblyPath}"); + _scriptConsole.WriteSuccess($"Published {context.FilePath} to {scriptAssemblyPath}"); } } diff --git a/src/Dotnet.Script.DependencyModel.Nuget/Dotnet.Script.DependencyModel.NuGet.csproj b/src/Dotnet.Script.DependencyModel.Nuget/Dotnet.Script.DependencyModel.NuGet.csproj index 5d81c138..c2794916 100644 --- a/src/Dotnet.Script.DependencyModel.Nuget/Dotnet.Script.DependencyModel.NuGet.csproj +++ b/src/Dotnet.Script.DependencyModel.Nuget/Dotnet.Script.DependencyModel.NuGet.csproj @@ -1,5 +1,5 @@ - - + + netstandard2.0 MIT @@ -8,7 +8,7 @@ https://github.com/dotnet-script/dotnet-script.git git script;csx;csharp;roslyn;nuget - 1.5.0 + 1.6.0 A MetadataReferenceResolver that allows inline nuget references to be specified in script(csx) files. dotnet-script dotnet-script @@ -16,11 +16,10 @@ true ../dotnet-script.snk - - + - + \ No newline at end of file diff --git a/src/Dotnet.Script.DependencyModel/Dotnet.Script.DependencyModel.csproj b/src/Dotnet.Script.DependencyModel/Dotnet.Script.DependencyModel.csproj index f32e05eb..a0be1fb6 100644 --- a/src/Dotnet.Script.DependencyModel/Dotnet.Script.DependencyModel.csproj +++ b/src/Dotnet.Script.DependencyModel/Dotnet.Script.DependencyModel.csproj @@ -1,5 +1,5 @@ - - + + netstandard2.0 dotnet-script @@ -11,29 +11,24 @@ https://github.com/dotnet-script/dotnet-script.git git script;csx;csharp;roslyn;omnisharp - 1.5.0 + 1.6.0 latest true ../dotnet-script.snk - - ScriptParser.cs - - - + - - + \ No newline at end of file diff --git a/src/Dotnet.Script.DependencyModel/ProjectSystem/ScriptParser.cs b/src/Dotnet.Script.DependencyModel/ProjectSystem/ScriptParser.cs index 0d058a21..9222a220 100644 --- a/src/Dotnet.Script.DependencyModel/ProjectSystem/ScriptParser.cs +++ b/src/Dotnet.Script.DependencyModel/ProjectSystem/ScriptParser.cs @@ -53,7 +53,7 @@ public ParseResult ParseFromFiles(IEnumerable csxFiles) private static string ReadSdkFromReferenceDirective(string fileContent) { const string pattern = DirectivePatternPrefix + "r" + SdkDirectivePatternSuffix; - var match = Regex.Match(fileContent, pattern); + var match = Regex.Match(fileContent, pattern, RegexOptions.Multiline); if (match.Success) { var sdk = match.Groups[1].Value; diff --git a/src/Dotnet.Script.Desktop.Tests/Dotnet.Script.Desktop.Tests.csproj b/src/Dotnet.Script.Desktop.Tests/Dotnet.Script.Desktop.Tests.csproj index cbe23b97..5d609576 100644 --- a/src/Dotnet.Script.Desktop.Tests/Dotnet.Script.Desktop.Tests.csproj +++ b/src/Dotnet.Script.Desktop.Tests/Dotnet.Script.Desktop.Tests.csproj @@ -1,32 +1,29 @@ - - + + net472 true ../dotnet-script.snk - - - + + + all runtime; build; native; contentfiles; analyzers - + - - PreserveNewest - - + \ No newline at end of file diff --git a/src/Dotnet.Script.Extras/Dotnet.Script.Extras.csproj b/src/Dotnet.Script.Extras/Dotnet.Script.Extras.csproj index 60cc7930..c79a5f84 100644 --- a/src/Dotnet.Script.Extras/Dotnet.Script.Extras.csproj +++ b/src/Dotnet.Script.Extras/Dotnet.Script.Extras.csproj @@ -1,8 +1,8 @@ - - + + Extensions and add ons to C# scripting - 0.2.0 + 0.3.0 netstandard2.0 Dotnet.Script.Extras Dotnet.Script.Extras @@ -10,10 +10,8 @@ false false - - - + + - - + \ No newline at end of file diff --git a/src/Dotnet.Script.Shared.Tests/Dotnet.Script.Shared.Tests.csproj b/src/Dotnet.Script.Shared.Tests/Dotnet.Script.Shared.Tests.csproj index 2b928e99..2365de7b 100644 --- a/src/Dotnet.Script.Shared.Tests/Dotnet.Script.Shared.Tests.csproj +++ b/src/Dotnet.Script.Shared.Tests/Dotnet.Script.Shared.Tests.csproj @@ -1,18 +1,15 @@ + - netstandard2.0 true ../dotnet-script.snk - - + - - - + \ No newline at end of file diff --git a/src/Dotnet.Script.Tests/Dotnet.Script.Tests.csproj b/src/Dotnet.Script.Tests/Dotnet.Script.Tests.csproj index 671dd886..4b8b7da5 100644 --- a/src/Dotnet.Script.Tests/Dotnet.Script.Tests.csproj +++ b/src/Dotnet.Script.Tests/Dotnet.Script.Tests.csproj @@ -1,6 +1,7 @@ + - net8.0;net7.0;net6.0 + net9.0;net8.0 false true ../dotnet-script.snk @@ -10,14 +11,14 @@ runtime; build; native; contentfiles; analyzers all - - - + + + all runtime; build; native; contentfiles; analyzers - + diff --git a/src/Dotnet.Script.Tests/ScaffoldingTests.cs b/src/Dotnet.Script.Tests/ScaffoldingTests.cs index 6051ac73..8335de59 100644 --- a/src/Dotnet.Script.Tests/ScaffoldingTests.cs +++ b/src/Dotnet.Script.Tests/ScaffoldingTests.cs @@ -179,7 +179,7 @@ public void ShouldUpdatePathToDotnetScript() [Fact] public void ShouldCreateUnifiedLaunchFileWhenInstalledAsGlobalTool() { - Scaffolder scaffolder = CreateTestScaffolder("somefolder/.dotnet/tools/dotnet-script"); + Scaffolder scaffolder = CreateTestScaffolder($"somefolder{Path.DirectorySeparatorChar}.dotnet{Path.DirectorySeparatorChar}tools{Path.DirectorySeparatorChar}dotnet-script"); using var scriptFolder = new DisposableFolder(); scaffolder.InitializerFolder("main.csx", scriptFolder.Path); @@ -191,7 +191,7 @@ public void ShouldCreateUnifiedLaunchFileWhenInstalledAsGlobalTool() public void ShouldUpdateToUnifiedLaunchFileWhenInstalledAsGlobalTool() { Scaffolder scaffolder = CreateTestScaffolder("some-install-folder"); - Scaffolder globalToolScaffolder = CreateTestScaffolder("somefolder/.dotnet/tools/dotnet-script"); + Scaffolder globalToolScaffolder = CreateTestScaffolder($"somefolder{Path.DirectorySeparatorChar}.dotnet{Path.DirectorySeparatorChar}tools{Path.DirectorySeparatorChar}dotnet-script"); using var scriptFolder = new DisposableFolder(); scaffolder.InitializerFolder("main.csx", scriptFolder.Path); var fileContent = File.ReadAllText(Path.Combine(scriptFolder.Path, ".vscode", "launch.json")); diff --git a/src/Dotnet.Script.Tests/ScriptExecutionTests.cs b/src/Dotnet.Script.Tests/ScriptExecutionTests.cs index 8bb5fd96..f42a4a3a 100644 --- a/src/Dotnet.Script.Tests/ScriptExecutionTests.cs +++ b/src/Dotnet.Script.Tests/ScriptExecutionTests.cs @@ -250,7 +250,9 @@ public void ShouldSupportInlineNugetReferencesWithTrailingSemicoloninEvaluatedCo [Theory] [InlineData("https://gist.githubusercontent.com/seesharper/5d6859509ea8364a1fdf66bbf5b7923d/raw/0a32bac2c3ea807f9379a38e251d93e39c8131cb/HelloWorld.csx", - "Hello World")] + "Hello World")] + [InlineData("http://gist.githubusercontent.com/seesharper/5d6859509ea8364a1fdf66bbf5b7923d/raw/0a32bac2c3ea807f9379a38e251d93e39c8131cb/HelloWorld.csx", + "Hello World")] [InlineData("https://github.com/dotnet-script/dotnet-script/files/5035247/hello.csx.gz", "Hello, world!")] public void ShouldExecuteRemoteScript(string url, string output) @@ -259,14 +261,6 @@ public void ShouldExecuteRemoteScript(string url, string output) Assert.Contains(output, result.Output); } - [Fact] - public void ShouldExecuteRemoteScriptUsingTinyUrl() - { - var url = "https://tinyurl.com/y8cda9zt"; - var (output, _) = ScriptTestRunner.Default.Execute(url); - Assert.Contains("Hello World", output); - } - [Fact] public void ShouldHandleIssue268() { diff --git a/src/Dotnet.Script.Tests/ScriptProjectProviderTests.cs b/src/Dotnet.Script.Tests/ScriptProjectProviderTests.cs index 9d87775f..fdc3bc03 100644 --- a/src/Dotnet.Script.Tests/ScriptProjectProviderTests.cs +++ b/src/Dotnet.Script.Tests/ScriptProjectProviderTests.cs @@ -40,5 +40,17 @@ public void ShouldUseSpecifiedSdk() var projectFileInfo = provider.CreateProject(TestPathUtils.GetPathToTestFixtureFolder("WebApi"), _scriptEnvironment.TargetFramework, true); Assert.Equal("Microsoft.NET.Sdk.Web", XDocument.Load(projectFileInfo.Path).Descendants("Project").Single().Attributes("Sdk").Single().Value); } + + // See: https://github.com/dotnet-script/dotnet-script/issues/723 + [Theory] + [InlineData("#!/usr/bin/env dotnet-script\n#r \"sdk:Microsoft.NET.Sdk.Web\"")] + [InlineData("#!/usr/bin/env dotnet-script\n\n#r \"sdk:Microsoft.NET.Sdk.Web\"")] + public void ShouldHandleShebangBeforeSdk(string code) + { + var parser = new ScriptParser(TestOutputHelper.CreateTestLogFactory()); + var result = parser.ParseFromCode(code); + + Assert.Equal("Microsoft.NET.Sdk.Web", result.Sdk); + } } } \ No newline at end of file diff --git a/src/Dotnet.Script/Dotnet.Script.csproj b/src/Dotnet.Script/Dotnet.Script.csproj index 67bb0123..e33e4619 100644 --- a/src/Dotnet.Script/Dotnet.Script.csproj +++ b/src/Dotnet.Script/Dotnet.Script.csproj @@ -2,10 +2,10 @@ Dotnet CLI tool allowing you to run C# (CSX) scripts. - 1.5.0 + 1.6.0 filipw Dotnet.Script - net8.0;net7.0;net6.0 + net9.0;net8.0 portable dotnet-script Exe @@ -25,13 +25,10 @@ ../dotnet-script.snk - - - - - + + + +