MiniScaffold
What is MiniScaffold?
This is an F# Template for:
- creating and publishing libraries targeting .NET 6.0
net6.0
- creating and publishing applications targeting .NET 6.0
net6.0
Why use MiniScaffold
This takes away the ambiguity that developers face when creating an OSS project. Such as:
- How do I structure my project?
- How do I create repeatable builds?
- Which test framework should I use?
- How do I create releases easily?
- What Issue/Pull Request templates should I use?
- How should I go about creating documentation?
- How do I get CI/CD setup easily?
- What's the standard .gitignore file?
- What other things would make it easier for me when starting off creating a project I might not even know about?
What does this include in the box?
All project types
- Standard project structure for your dotnet application
- Build Automation tool via FAKE
- Package management tool via Paket
- Unit Testing via Expecto
- Code Coverage via Altcover
- Also builds an html report with ReportGenerator
- Code formatting style via Fantomas
GitRelease
build step commits latest CHANGELOG.md in the body and creates a git tag.- If you reference a Pull Request in the
CHANGELOG.md
it will update that Pull Request with the version it was released in.
- If you reference a Pull Request in the
GitHubRelease
build step publishes a GitHub Release via the CHANGELOG.md and adds any artifacts (nuget/zip/targz/etc).- Continuous integration via GitHub Actions
Libraries
For- Builds for
net6.0
- Target Frameworks- To build for
net6.0
.NET 6.0 installed
- To build for
- Sourcelink which enables a great source debugging experience for your users, by adding source control metadata to your built assets
- Documentation Generation - Generates Documentation from markdown files, fsx files, and the XML Documentation Comments from your library.
- Continuous deployment via GitHub Actions
- [Publish to NuGet] - Pushes NuGet packages to NuGet
- Generates Package Version from
CHANGELOG.md
- Adds Package Release Notes metadata from
CHANGELOG.md
- Generates Package Version from
- [Documentation Publish] - Publish Documenation to Github Pages
- [Publish to NuGet] - Pushes NuGet packages to NuGet
Applications
For- Basic argument parsing example via Argu
- Builds a
net6.0
application - Target Frameworks- To build for
net6.0
- Have .NET 6.0 installed
- To build for
- Builds for
win-x64
,osx-x64
andlinux-x64
- Runtime Identifiers. Bundles the application via dotnet-packaging- Bundles the
win-x64
application in a .zip file. - Bundles the
osx-x64
application in a .tar.gz file. - Bundles the
linux-x64
application in a .tar.gz file.
- Bundles the
Getting started quickly
dotnet template from NuGet:
Install thedotnet new install "MiniScaffold::*"
Then choose:
dotnet new mini-scaffold -n MyCoolNewLib --githubUsername MyGithubUsername
dotnet new mini-scaffold -n MyCoolNewApp --githubUsername MyGithubUsername -ou console
The scaffold defaults to using the main
branch for releases. If you release from a different branch, you can use the --releaseBranch <branch name>
parameter to use your release branch instead of the default.
Builds
GitHub Actions |
---|
NuGet
Stable | Prerelease |
---|---|
Options
githubUserName
This is used to automatically configure author information in the NuGet package, as well as configure push urls for repo locations.
outputType
Defaults to Library
When set to either Console or Library project and the supporting infrastructure around their respective types.
Known issues
Permission denied
-bash: ./build.sh: Permission denied
This is because dotnet template loses permissions of files. (#37) added a post hook to address this but this only fixes it for dotnet sdk 2.x users. dotnet sdk 1.x will need to run chmod +x ./build.sh
Appveyor badge not scaffolded correctly
Appveyor's conventions around generating URLs based on the project name has some nuances. See this issue for details.
Example Projects using this template:
- Chessie.Hopac
- Marten.FSharp
- FSharp.Control.WebSockets
- FSharp.Control.Redis.Streams
- FsLibLog
- Giraffe.HotReload
- EFCore.FSharp