Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
* develop:
  (#167) Update to latest GitReleaseManager
  (#174) Don't always push latest tag to docker
  (#181) Make ILMerge depend on Build and Test
  (#157) Fix PowerShell signing up to date throws exception
  (#135) Include support for Publish Release Task
  (#132) Fix name of release notes task
  (#164) Use version number in URLs
  (#136) Allow dry run of task
  (maint) Fixed spelling mistake
  (#173) Use Product Copyright for packages
  (#134) Correct target branch for support branches
  (GH-171) Bump DependencyCheck version
  (GH-171) Enable Dependency-Check central DB
  (#162) Rework prerelease substring
  • Loading branch information
gep13 committed Feb 4, 2025
2 parents b669657 + e9ef983 commit 07c524f
Show file tree
Hide file tree
Showing 17 changed files with 226 additions and 83 deletions.
19 changes: 15 additions & 4 deletions Chocolatey.Cake.Recipe/Content/build.cake
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,8 @@ BuildParameters.Tasks.DotNetRestoreTask = Task("DotNetRestore")
.WithProperty("Version", BuildParameters.Version.SemVersion)
.WithProperty("AssemblyVersion", BuildParameters.Version.FileVersion)
.WithProperty("FileVersion", BuildParameters.Version.FileVersion)
.WithProperty("AssemblyInformationalVersion", BuildParameters.Version.InformationalVersion);
.WithProperty("AssemblyInformationalVersion", BuildParameters.Version.InformationalVersion)
.WithProperty("Copyright", BuildParameters.ProductCopyright);

if (BuildParameters.BuildAgentOperatingSystem != PlatformFamily.Windows)
{
Expand Down Expand Up @@ -187,7 +188,8 @@ BuildParameters.Tasks.DotNetBuildTask = Task("DotNetBuild")
.WithProperty("Version", BuildParameters.Version.SemVersion)
.WithProperty("AssemblyVersion", BuildParameters.Version.FileVersion)
.WithProperty("FileVersion", BuildParameters.Version.FileVersion)
.WithProperty("AssemblyInformationalVersion", BuildParameters.Version.InformationalVersion);
.WithProperty("AssemblyInformationalVersion", BuildParameters.Version.InformationalVersion)
.WithProperty("Copyright", BuildParameters.ProductCopyright);

if (BuildParameters.BuildAgentOperatingSystem != PlatformFamily.Windows)
{
Expand Down Expand Up @@ -346,7 +348,8 @@ public void CopyBuildOutput()
.WithProperty("Version", BuildParameters.Version.SemVersion)
.WithProperty("AssemblyVersion", BuildParameters.Version.FileVersion)
.WithProperty("FileVersion", BuildParameters.Version.FileVersion)
.WithProperty("AssemblyInformationalVersion", BuildParameters.Version.InformationalVersion);
.WithProperty("AssemblyInformationalVersion", BuildParameters.Version.InformationalVersion)
.WithProperty("Copyright", BuildParameters.ProductCopyright);

if (BuildParameters.BuildAgentOperatingSystem != PlatformFamily.Windows)
{
Expand Down Expand Up @@ -408,7 +411,8 @@ public void CopyBuildOutput()
.WithProperty("Version", BuildParameters.Version.SemVersion)
.WithProperty("AssemblyVersion", BuildParameters.Version.FileVersion)
.WithProperty("FileVersion", BuildParameters.Version.FileVersion)
.WithProperty("AssemblyInformationalVersion", BuildParameters.Version.InformationalVersion);
.WithProperty("AssemblyInformationalVersion", BuildParameters.Version.InformationalVersion)
.WithProperty("Copyright", BuildParameters.ProductCopyright);

if (BuildParameters.BuildAgentOperatingSystem != PlatformFamily.Windows)
{
Expand Down Expand Up @@ -520,6 +524,13 @@ BuildParameters.Tasks.ContinuousIntegrationTask = Task("CI")
BuildParameters.Tasks.ReleaseNotesTask = Task("ReleaseNotes")
.IsDependentOn("Create-Release-Notes");

///////////////////////////////////////////////////////////////////////////////
// ALIASES - Kept around for backwards compatibility
///////////////////////////////////////////////////////////////////////////////

Task("Publish-GitHub-Release")
.IsDependentOn("Publish-Release-Notes");

///////////////////////////////////////////////////////////////////////////////
// EXECUTION
///////////////////////////////////////////////////////////////////////////////
Expand Down
40 changes: 40 additions & 0 deletions Chocolatey.Cake.Recipe/Content/credentials.cake
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,30 @@ public class MastodonCredentials
}
}

public class DependencyCheckNvdCredentials
{
public string ApiKey { get; private set; }

public DependencyCheckNvdCredentials(string apiKey)
{
ApiKey = apiKey;
}
}

public class DependencyCheckDbCredentials
{
public string ConnectionString { get; private set; }
public string UserName { get; private set; }
public string Password { get; private set; }

public DependencyCheckDbCredentials(string connectionString, string userName, string password)
{
ConnectionString = connectionString;
UserName = userName;
Password = password;
}
}

public class SlackCredentials
{
public string Channel { get; private set; }
Expand Down Expand Up @@ -157,6 +181,22 @@ public static MastodonCredentials GetMastodonCredentials(ICakeContext context)
);
}

public static DependencyCheckNvdCredentials GetDependencyCheckNvdCredentials(ICakeContext context)
{
return new DependencyCheckNvdCredentials(
context.EnvironmentVariable(Environment.DependencyCheckNvdApiKeyVariable)
);
}

public static DependencyCheckDbCredentials GetDependencyCheckDbCredentials(ICakeContext context)
{
return new DependencyCheckDbCredentials(
context.EnvironmentVariable(Environment.DependencyCheckDbConnectionStringVariable),
context.EnvironmentVariable(Environment.DependencyCheckDbUserVariable),
context.EnvironmentVariable(Environment.DependencyCheckDbPasswordVariable)
);
}

public static SlackCredentials GetSlackCredentials(ICakeContext context)
{
return new SlackCredentials(
Expand Down
24 changes: 22 additions & 2 deletions Chocolatey.Cake.Recipe/Content/dependencyCheck.cake
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ BuildParameters.Tasks.DependencyCheckTask = Task("Dependency-Check")
.Does(() => RequireTool(ToolSettings.DependencyCheckTool, () =>
{
DownloadFile(
"https://github.com/jeremylong/DependencyCheck/releases/download/v8.2.1/dependency-check-8.2.1-release.zip",
"https://github.com/jeremylong/DependencyCheck/releases/download/v12.0.1/dependency-check-12.0.1-release.zip",
BuildParameters.RootDirectoryPath.CombineWithFilePath("dependency-check.zip")
);

Expand All @@ -49,18 +49,38 @@ BuildParameters.Tasks.DependencyCheckTask = Task("Dependency-Check")
if (ToolSettings.DependencyCheckDisableYarnAudit)
{
ReplaceTextInFiles(
BuildParameters.RootDirectoryPath.Combine("tools/DependencyCheck.Runner.Tool.3.2.1/tools/bin").CombineWithFilePath("dependency-check.bat").ToString(),
BuildParameters.RootDirectoryPath.Combine("tools/DependencyCheck.Runner.Tool.3.2.1/tools/bin").CombineWithFilePath("dependency-check.bat").ToString(),
"org.owasp.dependencycheck.App %CMD_LINE_ARGS%",
"org.owasp.dependencycheck.App --disableYarnAudit %CMD_LINE_ARGS%"
);
};

if (!string.IsNullOrEmpty(BuildParameters.DependencyCheckNvdApiKey))
{
ReplaceTextInFiles(
BuildParameters.RootDirectoryPath.Combine("tools/DependencyCheck.Runner.Tool.3.2.1/tools/bin").CombineWithFilePath("dependency-check.bat").ToString(),
"%CMD_LINE_ARGS%",
string.Format("--nvdApiKey {0} %CMD_LINE_ARGS%", BuildParameters.DependencyCheckNvdApiKey)
);
};

var DependencyCheckSettings = new DependencyCheckSettings {
Project = BuildParameters.ProductName,
Scan = BuildParameters.SourceDirectoryPath.FullPath,
Format = "ALL",
Out = BuildParameters.Paths.Directories.DependencyCheckReports.FullPath
};

if (!string.IsNullOrEmpty(BuildParameters.DependencyCheckDb.ConnectionString) &&
!string.IsNullOrEmpty(BuildParameters.DependencyCheckDb.UserName) &&
!string.IsNullOrEmpty(BuildParameters.DependencyCheckDb.Password))
{
DependencyCheckSettings.ConnectionString = BuildParameters.DependencyCheckDb.ConnectionString;
DependencyCheckSettings.DatabaseUser = BuildParameters.DependencyCheckDb.UserName;
DependencyCheckSettings.DatabasePassword = BuildParameters.DependencyCheckDb.Password;
DependencyCheckSettings.DatabaseDriverName = BuildParameters.DependencyCheckDbDriverName;
DependencyCheckSettings.DatabaseDriverPath = BuildParameters.Paths.Files.DependencyCheckDbDriverPath.ToString();
};

DependencyCheck(DependencyCheckSettings);
}));
24 changes: 13 additions & 11 deletions Chocolatey.Cake.Recipe/Content/docker.cake
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ BuildParameters.Tasks.DockerPush = Task("DockerPush")
});

BuildParameters.Tasks.DockerTagAsLatest = Task("DockerTagAsLatest")
.WithCriteria(() => BuildParameters.IsTagged && BuildParameters.Version.MajorMinorPatch == BuildParameters.Version.FullSemVersion, "Skipping because this isn't a tagged full release build.")
.WithCriteria(() => BuildParameters.BranchType == BranchType.Master && BuildParameters.IsTagged && BuildParameters.Version.MajorMinorPatch == BuildParameters.Version.FullSemVersion, "Skipping because this isn't a tagged full release build.")
.WithCriteria(() => BuildParameters.DockerCredentials.HasCredentials, "Skipping because Docker Credentials were not provided.")
.WithCriteria(() => BuildParameters.ShouldRunDocker, "Skipping because running Docker tasks is not enabled")
.IsDependentOn("DockerLogin")
Expand Down Expand Up @@ -116,14 +116,16 @@ BuildParameters.Tasks.DockerManifest = Task("DockerManifest")

DockerManifestPush(manifestListName);

// Create the latest manifest
DockerManifestCreate(
string.Format("{0}/{1}:latest", BuildParameters.RepositoryOwner, BuildParameters.RepositoryName),
string.Format("{0}/{1}:latest-windows", BuildParameters.RepositoryOwner, BuildParameters.RepositoryName),
new string[] {
string.Format("{0}/{1}:latest-linux", BuildParameters.RepositoryOwner, BuildParameters.RepositoryName)
}
);

DockerManifestPush(string.Format("{0}/{1}:latest", BuildParameters.RepositoryOwner, BuildParameters.RepositoryName));
// Create the latest manifest only if this is the master branch.
if (BuildParameters.BranchType == BranchType.Master) {
DockerManifestCreate(
string.Format("{0}/{1}:latest", BuildParameters.RepositoryOwner, BuildParameters.RepositoryName),
string.Format("{0}/{1}:latest-windows", BuildParameters.RepositoryOwner, BuildParameters.RepositoryName),
new string[] {
string.Format("{0}/{1}:latest-linux", BuildParameters.RepositoryOwner, BuildParameters.RepositoryName)
}
);

DockerManifestPush(string.Format("{0}/{1}:latest", BuildParameters.RepositoryOwner, BuildParameters.RepositoryName));
}
});
15 changes: 15 additions & 0 deletions Chocolatey.Cake.Recipe/Content/environment.cake
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@
public static class Environment
{
public static string DefaultPushSourceUrlVariable { get; private set; }
public static string DependencyCheckDbConnectionStringVariable { get; private set; }
public static string DependencyCheckDbDriverNameVariable { get; private set; }
public static string DependencyCheckDbPasswordVariable { get; private set; }
public static string DependencyCheckDbUserVariable { get; private set; }
public static string DependencyCheckNvdApiKeyVariable { get; private set; }
public static string DiscordWebHookUrlVariable { get; private set; }
public static string DiscordUserNameVariable { get; private set; }
public static string DiscordAvatarUrlVariable { get; private set; }
Expand All @@ -38,6 +43,11 @@ public static class Environment

public static void SetVariableNames(
string defaultPushSourceUrlVariable = null,
string dependencyCheckDbConnectionStringVariable = null,
string dependencyCheckDbDriverNameVariable = null,
string dependencyCheckDbPasswordVariable = null,
string dependencyCheckDbUserVariable = null,
string dependencyCheckNvdApiKeyVariable = null,
string discordWebHookUrlVariable = null,
string discordUserNameVariable = null,
string discordAvatarUrlVariable = null,
Expand All @@ -59,6 +69,11 @@ public static class Environment
string dockerServerVariable = null)
{
DefaultPushSourceUrlVariable = defaultPushSourceUrlVariable ?? "NUGETDEVPUSH_SOURCE";
DependencyCheckDbConnectionStringVariable = dependencyCheckDbConnectionStringVariable ?? "DEPENDENCYCHECK_DB_CONNECTIONSTRING";
DependencyCheckDbDriverNameVariable = dependencyCheckDbDriverNameVariable ?? "DEPENDENCYCHECK_DB_DRIVERNAME";
DependencyCheckDbPasswordVariable = dependencyCheckDbPasswordVariable ?? "DEPENDENCYCHECK_DB_PASSWORD";
DependencyCheckDbUserVariable = dependencyCheckDbUserVariable ?? "DEPENDENCYCHECK_DB_USER";
DependencyCheckNvdApiKeyVariable = dependencyCheckNvdApiKeyVariable ?? "DEPENDENCYCHECK_NVD_API_KEY";
DiscordWebHookUrlVariable = discordWebHookUrlVariable ?? "DISCORD_WEBHOOKURL";
DiscordUserNameVariable = discordUserNameVariable ?? "DISCORD_USERNAME";
DiscordAvatarUrlVariable = discordAvatarUrlVariable ?? "DISCORD_AVATARURL";
Expand Down
19 changes: 11 additions & 8 deletions Chocolatey.Cake.Recipe/Content/gitreleasemanager.cake
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright © 2022 Chocolatey Software, Inc
// Copyright © 2025 Chocolatey Software, Inc
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
Expand All @@ -25,11 +25,11 @@ BuildParameters.Tasks.CreateReleaseNotesTask = Task("Create-Release-Notes")
{
Milestone = BuildParameters.Version.Milestone,
Name = BuildParameters.Version.Milestone,
TargetCommitish = BuildParameters.MasterBranchName,
TargetCommitish = Context.Argument("target-branch", BuildParameters.MasterBranchName),
Prerelease = Context.HasArgument("create-pre-release")
};

if (settings.Prerelease)
if (!Context.HasArgument("target-branch") && (settings.Prerelease || BuildParameters.BranchType == BranchType.Support))
{
settings.TargetCommitish = BuildParameters.BuildProvider.Repository.Branch;
}
Expand Down Expand Up @@ -83,10 +83,13 @@ BuildParameters.Tasks.ExportReleaseNotesTask = Task("Export-Release-Notes")
})
);

BuildParameters.Tasks.PublishGitHubReleaseTask = Task("Publish-GitHub-Release")
.WithCriteria(() => BuildParameters.BranchType == BranchType.Master || BuildParameters.BranchType == BranchType.Release || BuildParameters.BranchType == BranchType.HotFix, "Skipping because this is not a releasable branch")
BuildParameters.Tasks.PublishReleaseNotesTask = Task("Publish-Release-Notes")
.WithCriteria(() => BuildParameters.BranchType == BranchType.Master || BuildParameters.BranchType == BranchType.Release || BuildParameters.BranchType == BranchType.HotFix || BuildParameters.BranchType == BranchType.Support, "Skipping because this is not a releasable branch")
.WithCriteria(() => BuildParameters.IsTagged, "Skipping because this is not a tagged build")
.Does(() => RequireTool(BuildParameters.IsDotNetBuild || BuildParameters.PreferDotNetGlobalToolUsage ? ToolSettings.GitReleaseManagerGlobalTool : ToolSettings.GitReleaseManagerTool, () => {
var tagName = BuildParameters.Version.Milestone;
Information("Using Tag Name '{0}' for publishing.", tagName);

if (BuildParameters.CanRunGitReleaseManager)
{
// If we are running on GitLab, then we need to actually publish the Release,
Expand All @@ -99,7 +102,7 @@ BuildParameters.Tasks.PublishGitHubReleaseTask = Task("Publish-GitHub-Release")
ArgumentCustomization = args => args.Append("--provider GitLab")
};

GitReleaseManagerPublish(BuildParameters.GitReleaseManager.Token, BuildParameters.RepositoryOwner, BuildParameters.RepositoryName, BuildParameters.Version.Milestone, publishSettings);
GitReleaseManagerPublish(BuildParameters.GitReleaseManager.Token, BuildParameters.RepositoryOwner, BuildParameters.RepositoryName, tagName, publishSettings);
}

// Next up, we close the milestone, which based on configuration, may add comments
Expand All @@ -111,11 +114,11 @@ BuildParameters.Tasks.PublishGitHubReleaseTask = Task("Publish-GitHub-Release")
closeSettings.ArgumentCustomization = args => args.Append("--provider GitLab");
}

GitReleaseManagerClose(BuildParameters.GitReleaseManager.Token, BuildParameters.RepositoryOwner, BuildParameters.RepositoryName, BuildParameters.Version.Milestone, closeSettings);
GitReleaseManagerClose(BuildParameters.GitReleaseManager.Token, BuildParameters.RepositoryOwner, BuildParameters.RepositoryName, tagName, closeSettings);
}
else
{
Warning("Unable to use GitReleaseManager, as necessary credentials are not available");
}
})
);
);
18 changes: 10 additions & 8 deletions Chocolatey.Cake.Recipe/Content/gitversion.cake
Original file line number Diff line number Diff line change
Expand Up @@ -131,19 +131,21 @@ public class BuildVersion

prerelease = assertedVersions.PreReleaseLabel;

// Having a pre-release label of greater than 10 characters can cause problems when trying to run choco pack.
// Since we typically only see this when building a local feature branch, or a PR, let's just trim it down to
// the 10 character limit, and move on.
if (prerelease.Length > 10)
{
prerelease = prerelease.Replace("-", string.Empty).Substring(0, 10);
}
prerelease = prerelease.Replace("-", string.Empty);

// Chocolatey doesn't support a prerelease that starts with a digit.
// If we see a digit here, merely replace it with an `a` to get around this.
if (System.Text.RegularExpressions.Regex.Match(prerelease, @"^\d.*$").Success)
{
prerelease = string.Format("a{0}", prerelease.Substring(1,9));
prerelease = string.Format("a{0}", prerelease);
}

// Having a pre-release label of greater than 10 characters can cause problems when trying to run choco pack.
// Since we typically only see this when building a local feature branch, or a PR, let's just trim it down to
// the 10 character limit, and move on.
if (prerelease.Length > 10)
{
prerelease = prerelease.Substring(0, 10);
}

sha = assertedVersions.Sha.Substring(0,8);
Expand Down
4 changes: 3 additions & 1 deletion Chocolatey.Cake.Recipe/Content/ilmerge.cake
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
// limitations under the License.

BuildParameters.Tasks.ILMergeTask = Task("Run-ILMerge")
.IsDependentOn("Build")
.IsDependentOn("Test")
.IsDependeeOf("Copy-Nuspec-Folders")
.WithCriteria(() => BuildParameters.ShouldRunILMerge, "Skipping because ILMerge is not enabled")
.WithCriteria(() => BuildParameters.BuildAgentOperatingSystem == PlatformFamily.Windows, "Skipping because not running on Windows")
Expand Down Expand Up @@ -82,4 +84,4 @@ public class ILMergeConfig
PrimaryAssemblyName = primaryAssemblyName;
AssemblyPaths = assemblyPaths;
}
}
}
Loading

0 comments on commit 07c524f

Please sign in to comment.