Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .github/workflows/Cake_Sdk-MultiFile.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: Build using Cake.Sdk and Multi-File based Cake
on:
push:
branches:
- develop
- main
pull_request:
jobs:
build:
name: Build and Test
runs-on: ubuntu-latest
steps:
- name: Get the sources
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Install .NET Core SDK (global.json)
uses: actions/setup-dotnet@v4
with:
global-json-file: global.json

- name: Run Cake File
uses: cake-build/cake-action@master
with:
file-path: multifile-build/build.cs
target: GitHubActions
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -335,6 +335,7 @@ __pycache__/

# Cake - Uncomment if you are using it
tools/**
multifile-build/**
# !tools/packages.config

# Tabs Studio
Expand Down
20 changes: 19 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
[![Build using Cake.Sdk and File based Cake](https://github.com/cake-build/cakesdk-example/actions/workflows/Cake_Sdk-File.yml/badge.svg?branch=main)](https://github.com/cake-build/cakesdk-example/actions/workflows/Cake_Sdk-File.yml)
 
[![Build using Cake.Sdk and Multi-File based Cake](https://github.com/cake-build/cakesdk-example/actions/workflows/Cake_Sdk-MultiFile.yml/badge.svg?branch=main)](https://github.com/cake-build/cakesdk-example/actions/workflows/Cake_Sdk-MultiFile.yml)
 
[![Build using Cake.Sdk and Project based Cake](https://github.com/cake-build/cakesdk-example/actions/workflows/Cake_Sdk-Proj.yml/badge.svg)](https://github.com/cake-build/cakesdk-example/actions/workflows/Cake_Sdk-Proj.yml)


Expand All @@ -19,16 +21,26 @@ This repository demonstrates minimal, modern usage of [Cake.Sdk](https://www.nug
```
/
├── build.cs # File-based Cake build script
|
├── build/
│ └── build.csproj # Project-based Cake build script using Cake.Sdk
|
├── multifile-build/
│ ├── build.cs # Multi-file based Cake build script
│ └── build/
│ └── BuildData.cs # BuildData model for Multi-file build script
|
├── src/
│ └── Example/
│ └── Example.csproj # Minimal .NET class library (net10.0)
|
├── global.json # Pins .NET SDK and Cake.Sdk versions
├── .github/
│ └── workflows/
│ ├── CakeFile.yml # GitHub Actions: file-based build
│ └── CakeProj.yml # GitHub Actions: project-based build
│ ├── CakeProj.yml # GitHub Actions: project-based build
│ └── Cake_Sdk-MultiFile.yml # GitHub Actions: multi-file-based build
|
└── README.md # This file
```

Expand All @@ -44,11 +56,17 @@ This repository demonstrates minimal, modern usage of [Cake.Sdk](https://www.nug
```sh
dotnet run --project build/build.csproj
```
- **Multi-file-based build**:
Run with:
```sh
dotnet cake multifile-build/build.cs
```

## Continuous Integration

- **.github/workflows/CakeFile.yml**: Runs the file-based build script on push/PR.
- **.github/workflows/CakeProj.yml**: Runs the project-based build script on push/PR.
- **.github/workflows/Cake_Sdk-MultiFile.yml**: Runs the multi-file-based build script on push/PR.

Both workflows use the pinned .NET SDK and Cake.Sdk versions from `global.json`.

Expand Down
2 changes: 1 addition & 1 deletion build.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@
MSBuildSettings = data.MSBuildSettings,
NoRestore = true,
NoBuild = true,
OutputDirectory = "./artifacts"
OutputDirectory = data.ArtifactsDirectory
});
});

Expand Down
2 changes: 1 addition & 1 deletion build/build.cs
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@
MSBuildSettings = data.MSBuildSettings,
NoRestore = true,
NoBuild = true,
OutputDirectory = "./artifacts"
OutputDirectory = data.ArtifactsDirectory
});
});

Expand Down
2 changes: 1 addition & 1 deletion global.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@
"version": "10.0.100-preview.5.25277.114"
},
"msbuild-sdks": {
"Cake.Sdk": "5.0.25167.12-alpha"
"Cake.Sdk": "5.0.25173.18-alpha"
}
}
97 changes: 97 additions & 0 deletions multifile-build/build.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
#:sdk Cake.Sdk
#:property IncludeAdditionalFiles build/**/*.cs
#:property RunWorkingDirectory $(MSBuildProjectDirectory)/..
#:package Cake.BuildSystems.Module@7.1.0

var target = Argument("target", "Pack");

//////////////////////////////////////////////////////////////////////
// TASKS
//////////////////////////////////////////////////////////////////////

Setup(context =>
{
var configuration = Argument("configuration", "Release");

InstallTool("dotnet:https://api.nuget.org/v3/index.json?package=GitVersion.Tool&version=6.3.0");
var version = GitVersion();

Information(
"Building Version: {0}, Configuration: {1}",
version.FullSemVer,
configuration);

return new BuildData(
Version: version.FullSemVer,
Configuration: configuration,
SolutionFile: MakeAbsolute(File("./src/Example.sln")),
ArtifactsDirectory: MakeAbsolute(Directory("./artifacts")),
MSBuildSettings: new DotNetMSBuildSettings()
.SetVersion(version.FullSemVer)
.SetConfiguration(configuration)
.WithProperty("WarnAsError", "true"));
});

Task("Clean")
.WithCriteria(c => HasArgument("rebuild"))
.Does<BuildData>((ctx, data) =>
{
CleanDirectories(data.DirectoriesToClean);
});

Task("Build")
.IsDependentOn("Clean")
.Does<BuildData>((ctx, data) =>
{
DotNetBuild(
data.SolutionFile.FullPath,
new DotNetBuildSettings
{
MSBuildSettings = data.MSBuildSettings
});
});

Task("Test")
.IsDependentOn("Build")
.Does<BuildData>((ctx, data) =>
{
DotNetTest(
data.SolutionFile.FullPath,
new DotNetTestSettings
{
MSBuildSettings = data.MSBuildSettings,
NoRestore = true,
NoBuild = true
});
});

Task("Pack")
.IsDependentOn("Test")
.Does<BuildData>((ctx, data) =>
{
DotNetPack(
data.SolutionFile.FullPath,
new DotNetPackSettings
{
MSBuildSettings = data.MSBuildSettings,
NoRestore = true,
NoBuild = true,
OutputDirectory = data.ArtifactsDirectory
});
});

Task("UploadArtifacts")
.IsDependentOn("Pack")
.Does<BuildData>((ctx, data) =>
GitHubActions.Commands.UploadArtifact(
data.ArtifactsDirectory,
"ExampleArtifacts"));

Task("GitHubActions")
.IsDependentOn("UploadArtifacts");

//////////////////////////////////////////////////////////////////////
// EXECUTION
//////////////////////////////////////////////////////////////////////

RunTarget(target);
15 changes: 15 additions & 0 deletions multifile-build/build/BuildData.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
public record BuildData(
string Version,
string Configuration,
FilePath SolutionFile,
DirectoryPath ArtifactsDirectory,
DotNetMSBuildSettings MSBuildSettings
)
{
public DirectoryPath[] DirectoriesToClean { get; init; } =
[
$"./src/Example/bin/{Configuration}",
$"./src/Example/obj/{Configuration}",
ArtifactsDirectory
];
}