Last active
November 12, 2021 11:03
-
-
Save dennisdoomen/e2f7d2f0d8490f6fc7be6a2ee8ecfe52 to your computer and use it in GitHub Desktop.
Nuke script to build and push an NPM package
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.IO; | |
using System.Linq; | |
using System.Text; | |
using Microsoft.VisualBasic; | |
using Nuke.Common; | |
using Nuke.Common.CI; | |
using Nuke.Common.Execution; | |
using Nuke.Common.IO; | |
using Nuke.Common.ProjectModel; | |
using Nuke.Common.Tooling; | |
using Nuke.Common.Tools.GitVersion; | |
using Nuke.Common.Tools.Npm; | |
using Nuke.Common.Utilities.Collections; | |
using static Nuke.Common.EnvironmentInfo; | |
using static Nuke.Common.IO.FileSystemTasks; | |
using static Nuke.Common.IO.PathConstruction; | |
class Build : NukeBuild | |
{ | |
/// Support plugins are available for: | |
/// - JetBrains ReSharper https://nuke.build/resharper | |
/// - JetBrains Rider https://nuke.build/rider | |
/// - Microsoft VisualStudio https://nuke.build/visualstudio | |
/// - Microsoft VSCode https://nuke.build/vscode | |
public static int Main () => Execute<Build>(x => x.NpmPush); | |
[GitVersion(NoFetch = true, UpdateBuildNumber = true, Framework = "net5.0")] | |
readonly GitVersion GitVersion; | |
[Parameter] | |
readonly string NpmCiFeed = "//company.jfrog.io/company/api/npm/dev-npm-ci/"; | |
[Parameter] | |
readonly string NpmReleaseFeed = "//company.jfrog.io/company/api/npm/dev-npm-release/"; | |
[Parameter] | |
readonly string NpmFeedUsername; | |
[Parameter] | |
readonly string NpmFeedPassword; | |
[Parameter("A branch specification, like refs/tags/1.0.0")] | |
readonly string BranchSpec = ""; | |
AbsolutePath ArtifactsDirectory => RootDirectory / "artifacts"; | |
AbsolutePath SourceDirectory => RootDirectory / "src"; | |
Target Clean => _ => _ | |
.Executes(() => | |
{ | |
EnsureCleanDirectory(ArtifactsDirectory); | |
}); | |
Target ConfigureNpm => _ => _ | |
.OnlyWhenStatic(() => !string.IsNullOrWhiteSpace(NpmFeedUsername)) | |
.OnlyWhenStatic(() => !string.IsNullOrWhiteSpace(NpmFeedPassword)) | |
.Executes(() => | |
{ | |
string npmFeed = BranchSpec.Contains("refs/tags/") ? NpmReleaseFeed : NpmCiFeed; | |
var base64Password = Convert.ToBase64String(Encoding.UTF8.GetBytes(NpmFeedPassword)); | |
string contents = $@" | |
@evision:registry=https:{npmFeed} | |
{npmFeed}:_password={base64Password} | |
{npmFeed}:username={NpmFeedUsername} | |
{npmFeed}:email=prod-ops@mycompany.com | |
{npmFeed}:always-auth=true | |
"; | |
File.WriteAllText(SourceDirectory / ".npmrc", contents); | |
}); | |
Target NpmPack => _ => _ | |
.DependsOn(Clean) | |
.Executes(() => | |
{ | |
EnsureExistingDirectory(ArtifactsDirectory); | |
NpmTasks.Npm($"version {GitVersion.FullSemVer} --allow-same-version", SourceDirectory); | |
NpmTasks.Npm($"pack {SourceDirectory} --loglevel=warn", ArtifactsDirectory); | |
}); | |
Target NpmPush => _ => _ | |
.DependsOn(NpmPack) | |
.DependsOn(ConfigureNpm) | |
.OnlyWhenStatic(() => !string.IsNullOrWhiteSpace(NpmFeedUsername)) | |
.OnlyWhenStatic(() => !string.IsNullOrWhiteSpace(NpmFeedPassword)) | |
.Executes(() => | |
{ | |
NpmTasks.Npm($"publish", SourceDirectory); | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment