This commit is contained in:
nsnail 2022-12-13 22:43:03 +08:00
parent c53bd85c72
commit d913e0b7cc
17 changed files with 231 additions and 16 deletions

45
ImageOptimize.csx Normal file
View File

@ -0,0 +1,45 @@
/*
for %%i in (*.png) do pngquant %%i --force --output %%i --skip-if-larger
for %%i in (*.jpg) do jpegtran -copy none -optimize -perfect %%i %%i
*
*/
var files = Directory.EnumerateFiles(".", "*.png"
, new EnumerationOptions {
RecurseSubdirectories = true
, AttributesToSkip = FileAttributes.ReparsePoint
, IgnoreInaccessible = true
})
.ToArray();
Parallel.ForEach(files, file => {
var startInfo = new ProcessStartInfo {
FileName = "pngquant"
, Arguments
= $"\"{file}\" --force --output \"{file}\" --skip-if-larger"
};
using var p = Process.Start(startInfo);
p.WaitForExit();
Console.WriteLine($"{file}: {p.ExitCode}");
});
files = new[] { "*.jpg", "*.jpeg" }
.SelectMany(x => Directory.EnumerateFiles(
".", x
, new EnumerationOptions {
RecurseSubdirectories = true
, AttributesToSkip = FileAttributes.ReparsePoint
, IgnoreInaccessible = true
}))
.ToArray();
Parallel.ForEach(files, file => {
var startInfo = new ProcessStartInfo {
FileName = "jpegtran"
, Arguments = $"-copy none -optimize -perfect \"{file}\" \"{file}\""
};
using var p = Process.Start(startInfo);
p.WaitForExit();
Console.WriteLine($"{file}: {p.ExitCode}");
});

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -1,2 +0,0 @@
for %%i in (*.png) do pngquant %%i --force --output %%i --skip-if-larger
for %%i in (*.jpg) do jpegtran -copy none -optimize -perfect %%i %%i

122
build.cake Normal file
View File

@ -0,0 +1,122 @@
var target = Argument("target", "Default");
var configuration = Argument("configuration", "Release");
var framework = Argument("framework", "net7.0-windows");
var runtime = Argument("runtime","win-x64");
////////////////////////////////////////////////////////////////
// Tasks
Task("Clean")
.Does(context =>
{
context.CleanDirectory("./build");
});
Task("Build")
.IsDependentOn("Clean")
.Does(context =>
{
DotNetPublish("./src/dot.csproj", new DotNetPublishSettings {
Configuration = configuration,
EnableCompressionInSingleFile = true,
Framework = framework,
SelfContained = true,
Runtime = runtime,
PublishSingleFile = true
});
});
// Task("Test")
// .IsDependentOn("Build")
// .Does(context =>
// {
// DotNetTest("./test/Spectre.Console.Tests/Spectre.Console.Tests.csproj", new DotNetTestSettings {
// Configuration = configuration,
// NoRestore = true,
// NoBuild = true,
// });
//
// DotNetTest("./test/Spectre.Console.Cli.Tests/Spectre.Console.Cli.Tests.csproj", new DotNetTestSettings {
// Configuration = configuration,
// NoRestore = true,
// NoBuild = true,
// });
//
// DotNetTest("./test/Spectre.Console.Analyzer.Tests/Spectre.Console.Analyzer.Tests.csproj", new DotNetTestSettings {
// Configuration = configuration,
// NoRestore = true,
// NoBuild = true,
// });
// });
// Task("Publish-GitHub")
// .WithCriteria(ctx => BuildSystem.IsRunningOnGitHubActions, "Not running on GitHub Actions")
// //.IsDependentOn("Package")
// .Does(context =>
// {
// var apiKey = Argument<string>("github-key", null);
// if(string.IsNullOrWhiteSpace(apiKey)) {
// throw new CakeException("No GitHub API key was provided.");
// }
//
// // Publish to GitHub Packages
// var exitCode = 0;
// foreach(var file in context.GetFiles("./.artifacts/*.nupkg"))
// {
// context.Information("Publishing {0}...", file.GetFilename().FullPath);
// exitCode += StartProcess("dotnet",
// new ProcessSettings {
// Arguments = new ProcessArgumentBuilder()
// .Append("gpr")
// .Append("push")
// .AppendQuoted(file.FullPath)
// .AppendSwitchSecret("-k", " ", apiKey)
// }
// );
// }
//
// if(exitCode != 0)
// {
// throw new CakeException("Could not push GitHub packages.");
// }
// });
// Task("Publish-NuGet")
// //.WithCriteria(ctx => BuildSystem.IsRunningOnGitHubActions, "Not running on GitHub Actions")
// //.IsDependentOn("Package")
// .Does(context =>
// {
// var apiKey = Argument<string>("nuget-key", null);
// if(string.IsNullOrWhiteSpace(apiKey)) {
// throw new CakeException("No NuGet API key was provided.");
// }
//
// // Publish to GitHub Packages
// foreach(var file in context.GetFiles("./.artifacts/*.nupkg"))
// {
// context.Information("Publishing {0}...", file.GetFilename().FullPath);
// DotNetNuGetPush(file.FullPath, new DotNetNuGetPushSettings
// {
// Source = "https://api.nuget.org/v3/index.json",
// ApiKey = apiKey,
// SkipDuplicate = true
// });
// }
// });
////////////////////////////////////////////////////////////////
// Targets
// Task("Publish")
// .IsDependentOn("Publish-GitHub")
// .IsDependentOn("Publish-NuGet");
Task("Default")
.IsDependentOn("Build");
////////////////////////////////////////////////////////////////
// Execution
RunTarget(target)

View File

@ -1,4 +0,0 @@
dotnet build
dotnet publish ./src/dot.csproj -f net7.0-windows -c Release -r win-x64 --sc -p:"PublishSingleFile=true" -o ./build/win-x64
dotnet publish ./src/dot.csproj -f net7.0 -c Release -r linux-x64 --sc -p:"PublishSingleFile=true" -o ./build/linux-x64
Remove-Item -r ./build/temp

16
dot.sln
View File

@ -11,22 +11,24 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "meta", "meta", "{AD79881E-7
.gitattributes = .gitattributes .gitattributes = .gitattributes
.gitignore = .gitignore .gitignore = .gitignore
.tgitconfig = .tgitconfig .tgitconfig = .tgitconfig
add-meta-files-to-sln.csx = add-meta-files-to-sln.csx AddMetaFilesToSln.csx = AddMetaFilesToSln.csx
build.ps1 = build.ps1 build.cake = build.cake
code-cleanup-on-save.csx = code-cleanup-on-save.csx
code-format.cmd = code-format.cmd code-format.cmd = code-format.cmd
CodeCleanupOnSave.csx = CodeCleanupOnSave.csx
Directory.Build.props = Directory.Build.props Directory.Build.props = Directory.Build.props
dot.sln.DotSettings = dot.sln.DotSettings dot.sln.DotSettings = dot.sln.DotSettings
dot.sln.DotSettings.user = dot.sln.DotSettings.user
dotnet-tools.json = dotnet-tools.json dotnet-tools.json = dotnet-tools.json
GenerateResx.targets = GenerateResx.targets GenerateResx.targets = GenerateResx.targets
git-clean.ps1 = git-clean.ps1 git-clean.cmd = git-clean.cmd
global.json = global.json global.json = global.json
ImageOptimize.csx = ImageOptimize.csx
LICENSE = LICENSE LICENSE = LICENSE
README.md = README.md README.md = README.md
README.zh-CN.md = README.zh-CN.md README.zh-CN.md = README.zh-CN.md
safe-delete-unused-resx.ahk = safe-delete-unused-resx.ahk SafetyDelUnusedResx.ahk = SafetyDelUnusedResx.ahk
switch-nuget.ps1 = switch-nuget.ps1 switch-nuget.cmd = switch-nuget.cmd
switch-project.ps1 = switch-project.ps1 switch-project.cmd = switch-project.cmd
switcher.json = switcher.json switcher.json = switcher.json
EndProjectSection EndProjectSection
EndProject EndProject

View File

@ -1,3 +1,9 @@
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
namespace Dot; namespace Dot;
// ReSharper disable once UnusedType.Global // ReSharper disable once UnusedType.Global
@ -7,5 +13,51 @@ internal class CsxEditor
#pragma warning disable CA1822 #pragma warning disable CA1822
private void Run() private void Run()
#pragma warning restore CA1822 #pragma warning restore CA1822
{ } {
/*
for %%i in (*.png) do pngquant %%i --force --output %%i --skip-if-larger
for %%i in (*.jpg) do jpegtran -copy none -optimize -perfect %%i %%i
*
*/
var files = Directory.EnumerateFiles(".", "*.png"
, new EnumerationOptions {
RecurseSubdirectories = true
, AttributesToSkip = FileAttributes.ReparsePoint
, IgnoreInaccessible = true
})
.ToArray();
Parallel.ForEach(files, file => {
var startInfo = new ProcessStartInfo {
FileName = "pngquant"
, Arguments
= $"\"{file}\" --force --output \"{file}\" --skip-if-larger"
};
using var p = Process.Start(startInfo);
p.WaitForExit();
Console.WriteLine(p.ExitCode);
});
files = new[] { "*.jpg", "*.jpeg" }
.SelectMany(x => Directory.EnumerateFiles(
".", x
, new EnumerationOptions {
RecurseSubdirectories = true
, AttributesToSkip = FileAttributes.ReparsePoint
, IgnoreInaccessible = true
}))
.ToArray();
Parallel.ForEach(files, file => {
var startInfo = new ProcessStartInfo {
FileName = "jpegtran"
, Arguments = $"-copy none -optimize -perfect \"{file}\" \"{file}\""
};
using var p = Process.Start(startInfo);
p.WaitForExit();
Console.WriteLine(p.ExitCode);
});
}
} }

View File

@ -29,6 +29,6 @@ app.Configure(config => {
}); });
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("en-US"); // CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("en-US");
CultureInfo.CurrentUICulture = CultureInfo.GetCultureInfo("en-US"); // CultureInfo.CurrentUICulture = CultureInfo.GetCultureInfo("en-US");
return app.Run(args); return app.Run(args);