EasyBuild.Tools 5.0.1

dotnet add package EasyBuild.Tools --version 5.0.1
                    
NuGet\Install-Package EasyBuild.Tools -Version 5.0.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="EasyBuild.Tools" Version="5.0.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="EasyBuild.Tools" Version="5.0.1" />
                    
Directory.Packages.props
<PackageReference Include="EasyBuild.Tools" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add EasyBuild.Tools --version 5.0.1
                    
#r "nuget: EasyBuild.Tools, 5.0.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package EasyBuild.Tools@5.0.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=EasyBuild.Tools&version=5.0.1
                    
Install as a Cake Addin
#tool nuget:?package=EasyBuild.Tools&version=5.0.1
                    
Install as a Cake Tool

EasyBuild.Tools

NuGet

Sponsors badge link

Tool for generating changelog based on Git history based on Conventional Commits. It is using EasyBuild.CommitParser to parse commit messages check their documentation for more information about configuration.

Contents

Installation

dotnet add package EasyBuild.Tools

APIs

Changelog

<details> <summary> <code>Changelog.tryFindLastVersion</code>

  • Try to find the last version in a changelog file </summary>

<a id='snippet-Changelog.tryFindLastVersion'></a>

(changelogFile: FileInfo)

<sup><a href='/src/Changelog.fs#L17-L19' title='Snippet source file'>snippet source</a> | <a href='#snippet-Changelog.tryFindLastVersion' title='Start of snippet'>anchor</a></sup>

</details>

<details> <summary> <code>Changelog.findLastVersion</code>

  • Find the last version in a changelog file or throw an error if not found </summary>

<a id='snippet-Changelog.findLastVersion'></a>

(changelogFile: FileInfo)

<sup><a href='/src/Changelog.fs#L44-L46' title='Snippet source file'>snippet source</a> | <a href='#snippet-Changelog.findLastVersion' title='Start of snippet'>anchor</a></sup>

</details>

ChangelogGen

<details> <summary> <code>ChangelogGen.run</code>

  • generate changelog using <a href="https://github.com/easybuild-org/EasyBuild.ChangelogGen">EasyBuild.ChangelogGen</a> </summary>

<a id='snippet-ChangelogGen.run'></a>

(
    changelogFile: FileInfo,
    ?allowDirty: bool,
    ?allowBranch: string list,
    ?tagFilter: string list,
    ?preRelease: string,
    ?config: string,
    ?forceVersion: string,
    ?skipInvalidCommit: bool,
    ?dryRun: bool,
    ?githubRepo: string,
    ?workingDirectory: string,
    ?forwardArguments: string list
)
: string

<sup><a href='/src/ChangelogGen.fs#L15-L31' title='Snippet source file'>snippet source</a> | <a href='#snippet-ChangelogGen.run' title='Start of snippet'>anchor</a></sup>

Example

open EasyBuild.Tools.ChangelogGen

let newVersion = ChangelogGen.run "CHANGELOG.md"

</details>

<details> <summary> <code>ChangelogGen.tryRun</code>

  • generate changelog using <a href="https://github.com/easybuild-org/EasyBuild.ChangelogGen">EasyBuild.ChangelogGen</a> </summary>

<a id='snippet-ChangelogGen.tryRun'></a>

(
    changelogFile: FileInfo,
    ?allowDirty: bool,
    ?allowBranch: string list,
    ?tagFilter: string list,
    ?preRelease: string,
    ?config: string,
    ?forceVersion: string,
    ?skipInvalidCommit: bool,
    ?dryRun: bool,
    ?githubRepo: string,
    ?workingDirectory: string,
    ?forwardArguments: string list
)
: ChangelogGenResult

<sup><a href='/src/ChangelogGen.fs#L58-L74' title='Snippet source file'>snippet source</a> | <a href='#snippet-ChangelogGen.tryRun' title='Start of snippet'>anchor</a></sup>

Example

open EasyBuild.Tools.ChangelogGen

match ChangelogGen.tryRun "CHANGELOG.md" with
| ChangelogGenResult.NoVersionBump ->
    printfn "Nothing to deploy"
| ChangelogGenResult.Error error ->
    failwithf "Error while generating changelog:\n%s" error
| ChangelogGenResult.NewVersion newVersion ->
    // Continue release process

</details>

DotNet

<details> <summary> <code>DotNet.pack</code>

  • create a NuGet package </summary>

<a id='snippet-DotNet.pack'></a>

(?workingDirectory : string, ?projectFile: FileInfo, ?configuration: Configuration)
: FileInfo

<sup><a href='/src/DotNet.fs#L17-L20' title='Snippet source file'>snippet source</a> | <a href='#snippet-DotNet.pack' title='Start of snippet'>anchor</a></sup>

Example

open EasyBuild.Tools.DotNet

let nupkgFile = DotNet.pack()

</details>

<details> <summary> <code>DotNet.nugetPush</code>

  • push a NuGet package to a NuGet server </summary>

<a id='snippet-DotNet.nugetPush'></a>

(
    nupkgPath: FileInfo,
    ?forceEnglishOutput: bool,
    ?source: string,
    ?symbolSource: string,
    ?timeout: int,
    ?apiKey: string,
    ?symbolApiKey: string,
    ?disableBuffering: bool,
    ?noSymbols: bool,
    ?interactive: bool,
    ?skipDuplicate: bool,
    ?forceEcho: bool
)

<sup><a href='/src/DotNet.fs#L58-L73' title='Snippet source file'>snippet source</a> | <a href='#snippet-DotNet.nugetPush' title='Start of snippet'>anchor</a></sup>

If apiKey is not provided, NUGET_KEY environment variable will be used.

If symbolApiKey is not provided, NUGET_SYMBOL_KEY environment variable will be used.

</details>

generate changelog using <a href="https://github.com/easybuild-org/EasyBuild.ChangelogGen">EasyBuild.ChangelogGen</a>

Fable

<details> <summary> <code>Fable.build</code>

  • run Fable compiler in build mode </summary>

<a id='snippet-Fable.build'></a>

(
    ?projFileOrDir: string,
    ?outDir: string,
    ?extension: string,
    ?sourceMaps: bool,
    ?sourceMapsRoot: string,
    ?define: string list,
    ?configuration: string,
    ?verbose: bool,
    ?silent: bool,
    ?typedArrays: bool,
    ?run: string,
    ?runFast: string,
    ?runScript: bool,
    ?noRestore: bool,
    ?noCache: bool,
    ?exclude: string list,
    ?lang: Fable.Lang,
    ?testMSBuildCracker: bool,
    ?legacyCracker: bool,
    ?workingDirectory: string
)
: unit

<sup><a href='/src/Fable.fs#L21-L45' title='Snippet source file'>snippet source</a> | <a href='#snippet-Fable.build' title='Start of snippet'>anchor</a></sup>

</details>

<details> <summary> <code>Fable.watch</code>

  • run Fable compiler in watch mode </summary>

<a id='snippet-Fable.watch'></a>

(
    ?projFileOrDir: string,
    ?outDir: string,
    ?extension: string,
    ?sourceMaps: bool,
    ?sourceMapsRoot: string,
    ?define: string list,
    ?configuration: string,
    ?verbose: bool,
    ?silent: bool,
    ?typedArrays: bool,
    ?run: string,
    ?runFast: string,
    ?runScript: bool,
    ?runWatch: string,
    ?noRestore: bool,
    ?noCache: bool,
    ?exclude: string list,
    ?lang: Fable.Lang,
    ?testMSBuildCracker: bool,
    ?legacyCracker: bool,
    ?workingDirectory: string
)
: Task

<sup><a href='/src/Fable.fs#L86-L111' title='Snippet source file'>snippet source</a> | <a href='#snippet-Fable.watch' title='Start of snippet'>anchor</a></sup>

</details>

FableCssModules

<details> <summary> <code>FableCssModules.runAsync</code>

  • run <a href="https://www.npmjs.com/package/fable-css-modules">fable-css-modules</a> in async mode </summary>

<a id='snippet-FableCssModules.runAsync'></a>

(?outFile: FileInfo, ?``internal``: bool, ?camelCase: bool, ?workingDirectory: string)
: Task

<sup><a href='/src/FableCssModules.fs#L11-L14' title='Snippet source file'>snippet source</a> | <a href='#snippet-FableCssModules.runAsync' title='Start of snippet'>anchor</a></sup>

</details>

<details> <summary> <code>FableCssModules.run</code>

  • run <a href="https://www.npmjs.com/package/fable-css-modules">fable-css-modules</a> </summary>

<a id='snippet-FableCssModules.run'></a>

(?outFile: FileInfo, ?``internal``: bool, ?camelCase: bool, ?workingDirectory: string)
: unit

<sup><a href='/src/FableCssModules.fs#L30-L33' title='Snippet source file'>snippet source</a> | <a href='#snippet-FableCssModules.run' title='Start of snippet'>anchor</a></sup>

</details>

Git

<details> <summary> <code>Git.addAll</code>

  • add all files to staging area </summary>

<a id='snippet-Git.addAll'></a>

()

<sup><a href='/src/Git.fs#L9-L11' title='Snippet source file'>snippet source</a> | <a href='#snippet-Git.addAll' title='Start of snippet'>anchor</a></sup>

</details>

<details> <summary> <code>Git.commitRelease</code>

  • commit staged files with release message using conventional commit </summary>

<a id='snippet-Git.commitRelease'></a>

(newVersion: string)

<sup><a href='/src/Git.fs#L16-L18' title='Snippet source file'>snippet source</a> | <a href='#snippet-Git.commitRelease' title='Start of snippet'>anchor</a></sup>

</details>

<details> <summary> <code>Git.commit</code>

  • commit staged files with given message </summary>

<a id='snippet-Git.commit'></a>

(message: string)

<sup><a href='/src/Git.fs#L29-L31' title='Snippet source file'>snippet source</a> | <a href='#snippet-Git.commit' title='Start of snippet'>anchor</a></sup>

</details>

<details> <summary> <code>Git.push</code>

  • push to the remote repository </summary>

<a id='snippet-Git.push'></a>

(?force: bool)

<sup><a href='/src/Git.fs#L42-L44' title='Snippet source file'>snippet source</a> | <a href='#snippet-Git.push' title='Start of snippet'>anchor</a></sup>

</details>

<details> <summary> <code>Git.isDirty</code>

  • check if the repository is dirty </summary>

<a id='snippet-Git.push'></a>

(?force: bool)

<sup><a href='/src/Git.fs#L42-L44' title='Snippet source file'>snippet source</a> | <a href='#snippet-Git.push' title='Start of snippet'>anchor</a></sup>

</details>

Nodemon

<details> <summary> <code>Nodemon.runAsync</code>

  • run <a href="https://www.npmjs.com/package/nodemon">nodemon</a> in async mode </summary>

<a id='snippet-Nodemon.runAsync'></a>

(
    // Configuration
    ?config: FileInfo,
    ?exitCrash: bool,
    ?ignore: string list,
    ?noColors: bool,
    ?signal: string,
    ?watch: string list,
    ?noUpdateNotifier: bool,
    // Execution
    ?onChangeOnly: bool,
    ?cwd: string,
    ?extensions: string,
    ?noStdin: bool,
    ?spawn: bool,
    ?exec: string,
    ?yourArgs: string,
    // Watching
    ?delay: string,
    ?legacyWatch: bool,
    ?pollingInterval: int,
    // Information
    ?dump: bool,
    ?verbose: bool,
    ?workingDirectory: string
)
: Task

<sup><a href='/src/Nodemon.fs#L12-L40' title='Snippet source file'>snippet source</a> | <a href='#snippet-Nodemon.runAsync' title='Start of snippet'>anchor</a></sup>

</details>

<details> <summary> <code>Nodemon.run</code>

  • run <a href="https://www.npmjs.com/package/nodemon">nodemon</a> </summary>

<a id='snippet-Nodemon.run'></a>

(
    // Configuration
    ?config: FileInfo,
    ?exitCrash: bool,
    ?ignore: string list,
    ?noColors: bool,
    ?signal: string,
    ?watch: string list,
    ?noUpdateNotifier: bool,
    // Execution
    ?onChangeOnly: bool,
    ?cwd: string,
    ?extensions: string,
    ?noStdin: bool,
    ?spawn: bool,
    ?exec: string,
    ?yourArgs: string,
    // Watching
    ?delay: string,
    ?legacyWatch: bool,
    ?pollingInterval: int,
    // Information
    ?dump: bool,
    ?verbose: bool,
    ?workingDirectory: string
)
: unit

<sup><a href='/src/Nodemon.fs#L90-L118' title='Snippet source file'>snippet source</a> | <a href='#snippet-Nodemon.run' title='Start of snippet'>anchor</a></sup>

</details>

Npm

<details> <summary> <code>Npm.publish</code>

  • publish a package to the npm registry </summary>

<a id='snippet-Npm.publish'></a>

(projectDir: string, ?tag: string, ?isRestricted: bool)

<sup><a href='/src/Npm.fs#L10-L12' title='Snippet source file'>snippet source</a> | <a href='#snippet-Npm.publish' title='Start of snippet'>anchor</a></sup>

</details>

<details> <summary> <code>Npm.install</code>

  • install npm packages </summary>

<a id='snippet-Npm.install'></a>

(?workingDirectory: string)

<sup><a href='/src/Npm.fs#L31-L33' title='Snippet source file'>snippet source</a> | <a href='#snippet-Npm.install' title='Start of snippet'>anchor</a></sup>

</details>

PackageJson

<details> <summary> <code>PackageJson.replaceVersion</code>

  • replace the version in a <code>package.json</code> file </summary>

<a id='snippet-PackageJson.replaceVersion'></a>

(file: FileInfo, newVersion: string)

<sup><a href='/src/PackageJson.fs#L15-L17' title='Snippet source file'>snippet source</a> | <a href='#snippet-PackageJson.replaceVersion' title='Start of snippet'>anchor</a></sup>

Example

open EasyBuild.Tools.PackageJson

let packageJsonFile = FileInfo "package.json"
PackageJson.replaceVersion packageJsonFile "1.0.0"

</details>

<details> <summary> <code>PackageJson.getName</code>

  • replace the version in a <code>package.json</code> file </summary>

<a id='snippet-PackageJson.getName'></a>

(file: FileInfo)

<sup><a href='/src/PackageJson.fs#L35-L37' title='Snippet source file'>snippet source</a> | <a href='#snippet-PackageJson.getName' title='Start of snippet'>anchor</a></sup>

Example

open EasyBuild.Tools.PackageJson

let packageJsonFile = FileInfo "package.json"
let packageName = PackageJson.getName packageJsonFile

</details>

<details> <summary> <code>PackageJson.getVersion</code>

  • replace the version in a <code>package.json</code> file </summary>

<a id='snippet-PackageJson.getVersion'></a>

(file: FileInfo)

<sup><a href='/src/PackageJson.fs#L43-L45' title='Snippet source file'>snippet source</a> | <a href='#snippet-PackageJson.getVersion' title='Start of snippet'>anchor</a></sup>

Example

open EasyBuild.Tools.PackageJson

let packageJsonFile = FileInfo "package.json"
let packageVersion = PackageJson.getVersion packageJsonFile

</details>

<details> <summary> <code>PackageJson.needPublishing</code>

  • check if a package needs to be published </summary>

<a id='snippet-PackageJson.needPublishing'></a>

(packageJson: FileInfo)
: bool

<sup><a href='/src/PackageJson.fs#L56-L59' title='Snippet source file'>snippet source</a> | <a href='#snippet-PackageJson.needPublishing' title='Start of snippet'>anchor</a></sup>

Example

open EasyBuild.Tools.PackageJson

let packageJsonFile = FileInfo "package.json"

if PackageJson.needPublishing packageJsonFile then
    // Do something

</details>

Vercel

<details> <summary> <code>Vercel.pull</code>

  • Pull latest environment variables and project settings from Vercel </summary>

<a id='snippet-Vercel.pull'></a>

(
    ?environment: string,
    ?gitBranch: string,
    ?yes: bool,
    ?debug: bool,
    ?globalConfig: string,
    ?localConfig: string,
    ?noColor: bool,
    ?scope: string,
    ?token: string,
    ?workingDirectory: string
)

<sup><a href='/src/Vercel.fs#L31-L44' title='Snippet source file'>snippet source</a> | <a href='#snippet-Vercel.pull' title='Start of snippet'>anchor</a></sup>

</details>

<details> <summary> <code>Vercel.build</code>

  • build the project </summary>

<a id='snippet-Vercel.build'></a>

(
    ?output: string,
    ?prod: bool,
    ?yes: bool,
    ?debug: bool,
    ?globalConfig: string,
    ?localConfig: string,
    ?noColor: bool,
    ?scope: string,
    ?token: string,
    ?workingDirectory: string
)

<sup><a href='/src/Vercel.fs#L71-L84' title='Snippet source file'>snippet source</a> | <a href='#snippet-Vercel.build' title='Start of snippet'>anchor</a></sup>

</details>

<details> <summary> <code>Vercel.deploy</code>

  • deploy your project to Vercel </summary>

<a id='snippet-Vercel.deploy'></a>

(
    ?archive: string,
    ?buildEnv: string,
    ?env: string,
    ?force: bool,
    ?meta: string,
    ?noWait: bool,
    ?prebuilt: bool,
    ?prod: bool,
    ?``public``: bool,
    ?regions: string list,
    ?skipDomain: bool,
    ?withCache: bool,
    ?yes: bool,
    ?debug: bool,
    ?globalConfig: string,
    ?localConfig: string,
    ?noColor: bool,
    ?scope: string,
    ?token: string,
    ?workingDirectory: string
)

<sup><a href='/src/Vercel.fs#L111-L134' title='Snippet source file'>snippet source</a> | <a href='#snippet-Vercel.deploy' title='Start of snippet'>anchor</a></sup>

</details>

Vite

<details> <summary> <code>Vite.build</code>

  • build for production </summary>

<a id='snippet-Vite.build'></a>

(
    ?target: string,
    ?outDir: string,
    ?assetsDir: string,
    ?assetsInlineLimit: int,
    ?ssr: string,
    ?sourcemap: Vite.Build.SourceMap,
    ?minify: Vite.Build.Minifier,
    ?manifest: Vite.Build.Manifest,
    ?ssrManifest: Vite.Build.SSRManifest,
    ?emptyOutDir: bool,
    ?watch: bool,
    ?config: FileInfo,
    ?``base``: string,
    ?logLevel: Vite.Build.LogLevel,
    ?clearScreen: bool,
    ?debug: Vite.Build.Debug,
    ?filter: string,
    ?mode: string,
    ?workingDirectory: string
)

<sup><a href='/src/Vite.fs#L73-L95' title='Snippet source file'>snippet source</a> | <a href='#snippet-Vite.build' title='Start of snippet'>anchor</a></sup>

</details>

<details> <summary> <code>Vite.watch</code>

  • start development server </summary>

<a id='snippet-Vite.watch'></a>

(
    ?host: string,
    ?port: int,
    ?``open``: Vite.Watch.Open,
    ?cors: bool,
    ?strictPort: bool,
    ?force: bool,
    ?config: FileInfo,
    ?``base``: string,
    ?logLevel: Vite.Watch.LogLevel,
    ?clearScreen: bool,
    ?debug: Vite.Watch.Debug,
    ?filter: string,
    ?mode: string,
    ?workingDirectory: string
)
: Task

<sup><a href='/src/Vite.fs#L194-L212' title='Snippet source file'>snippet source</a> | <a href='#snippet-Vite.watch' title='Start of snippet'>anchor</a></sup>

</details>

Husky

<details> <summary> <code>Husky.install</code>

  • Install Husky hooks </summary>

<a id='snippet-Husky.install'></a>

(?workingDirectory: string)
: unit

<sup><a href='/src/Husky.fs#L8-L11' title='Snippet source file'>snippet source</a> | <a href='#snippet-Husky.install' title='Start of snippet'>anchor</a></sup>

</details>

Femto

<details> <summary> <code>Femto.validate</code>

  • Check that the XML tags used in the F# project file are parsable and a npm package version can be calculated </summary>

<a id='snippet-Femto.validate'></a>

(?projectFile: FileInfo, ?workingDirectory: string)
: unit

<sup><a href='/src/Femto.fs#L10-L13' title='Snippet source file'>snippet source</a> | <a href='#snippet-Femto.validate' title='Start of snippet'>anchor</a></sup>

</details>

GhPages

<details> <summary> <code>GhPages.run</code>

  • Publish files to a gh-pages branch on GitHub (or any other branch anywhere else). </summary>

<a id='snippet-GhPages.run'></a>

(
    ?dist: string,
    ?src: string,
    ?branch: string,
    ?dest: string,
    ?add: bool,
    ?silent: bool,
    ?message: string,
    ?tag: string,
    ?git: string,
    ?dotfiles: bool,
    ?nojekyll: bool,
    ?cname: string,
    ?repo: string,
    ?depth: int,
    ?remote: string,
    ?user: string,
    ?remove: string,
    ?noPush: bool,
    ?noHistory: bool,
    ?beforeAdd: string,
    ?workingDirectory: string
)
: unit

<sup><a href='/src/GhPages.fs#L9-L34' title='Snippet source file'>snippet source</a> | <a href='#snippet-GhPages.run' title='Start of snippet'>anchor</a></sup>

</details>

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
5.0.1 173 10/16/2025
5.0.0 148 10/12/2025
4.5.0 154 10/5/2025
4.4.0 150 10/5/2025
4.3.0 153 10/5/2025
4.2.0 90 10/4/2025
4.1.0 8,922 1/6/2025
4.0.0 154 12/18/2024
3.3.0 239 12/8/2024
3.2.0 149 12/4/2024
3.1.0 153 11/27/2024
3.0.0 123 11/27/2024
2.0.0 137 11/27/2024
1.1.1 341 11/23/2024
1.1.0 136 11/23/2024
1.0.0 145 11/18/2024

### 🐞 Bug Fixes

* Avoid using `Async` to avoid issue with `AggregateException` wrapping ([da497f4](https://github.com/easybuild-org/EasyBuild.Tools/commit/da497f40f7703e529a4108756dacd739c8b5e22b))

<strong><small>[View changes on Github](https://github.com/easybuild-org/EasyBuild.Tools/compare/85eba7b763f77ca5c7cb07a9ed9025929666a634..da497f40f7703e529a4108756dacd739c8b5e22b)</small></strong>