-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
nupkg.ps1
111 lines (85 loc) · 3.46 KB
/
nupkg.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<#
.DESCRIPTION
Script for deploying nuget packages
.EXAMPLE
./script.ps1 -p "publish" -github-feed-name "name" -i "proj1/proj1.csproj","proj2/proj2.csproj" -b "Directory.Build.props"
.LINK
https://github.com/Gigas002/dotnet_gh_deploy
#>
[CmdletBinding(PositionalBinding = $false)]
param (
# Nuget API token
[Parameter ()]
[Alias("n", "nuget-token")]
[SecureString] $nugetToken = (Read-Host "Enter your nuget token" -AsSecureString),
# Github token
[Parameter ()]
[Alias("github-token")]
[SecureString] $githubToken = (Read-Host "Enter your github token" -AsSecureString),
# Paths to packages to publish
[Parameter ()]
[ValidateNotNullOrEmpty ()]
[string[]] $inputs = (
"Deploy.Core/Deploy.Core.csproj",
"Deploy.Core.Dummy/Deploy.Core.Dummy.csproj"
),
# Output (dotnet pack) path
[Parameter ()]
[ValidateNotNullOrEmpty ()]
[Alias("p", "publish-path")]
[string] $publishPath = "artifacts/publish",
# Github package feed name
[Parameter ()]
[ValidateNotNullOrEmpty ()]
[Alias("github-feed-name")]
[string] $githubFeedName = "Gigas002",
# Directory.Build.props path
[Parameter ()]
[ValidateNotNullOrEmpty ()]
[Alias("b", "build-props-path")]
[string] $buildPropsPath = "Directory.Build.props"
)
$publishPath = "$publishPath/nupkg"
#region Constants
Set-Variable NugetFeed -Option ReadOnly -Value "https://api.nuget.org/v3/index.json"
Set-Variable GithubFeed -Option ReadOnly -Value "https://nuget.pkg.github.com/$githubFeedName/index.json"
#endregion
#region Functions declartions
function DotnetPack([string] $versionSuffix, [string] $buildVersion) {
Write-Host "dotnet build/dotnet pack started..." -ForegroundColor Yellow
foreach ($project in $inputs) {
Write-Host "Building: $project" -ForegroundColor Yellow
dotnet build $project --tl -c Release --verbosity quiet
if ("$versionSuffix") {
Write-Host "Pack prerelease (build): $buildVersion" -ForegroundColor Yellow
dotnet pack $project --tl -c Release -o $publishPath --no-build --verbosity quiet --version-suffix ci-$buildVersion
}
else {
Write-Host "Pack release: $versionPrefix" -ForegroundColor Yellow
dotnet pack $project --tl -c Release -o $publishPath --no-build --verbosity quiet
}
}
Write-Host "dotnet build/dotnet pack finished" -ForegroundColor Green
Write-Host "packages are ready at: $publishPath" -ForegroundColor Green
}
function DotnetNugetPush([string] $file, [SecureString] $token, [string] $feed) {
$decryptedToken = ConvertFrom-SecureString $token -AsPlainText
# see: https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-nuget-push
dotnet nuget push $file -k $decryptedToken -s $feed --skip-duplicate
}
function PushPackages() {
Write-Host "dotnet nuget push started..." -ForegroundColor Yellow
foreach ($file in (Get-ChildItem $publishPath -Recurse -Include *.nupkg)) {
if ($nugetToken -and $nugetToken.Length -gt 0) {
DotnetNugetPush $file $nugetToken $NugetFeed
}
if ($githubToken -and $githubToken.Length -gt 0) {
DotnetNugetPush $file $githubToken $GithubFeed
}
}
Write-Host "dotnet nuget push finished" -ForegroundColor Green
}
#endregion
$versionPrefix, $versionSuffix, $buildVersion, $_ = ./read_version.ps1 -buildPropsPath $buildPropsPath
DotnetPack $versionSuffix $buildVersion
PushPackages