Skip to content

Commit

Permalink
Consolidate dependency (#24)
Browse files Browse the repository at this point in the history
* Add build script

* Cleanup

* Update build script backup artifacts

* Consolidate dependency

* Consolidate dependency
  • Loading branch information
thohng committed Jun 4, 2024
1 parent ceaa1ce commit ba69f61
Show file tree
Hide file tree
Showing 4 changed files with 234 additions and 43 deletions.
93 changes: 93 additions & 0 deletions .teamcity/build.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
[CmdletBinding()]
param (
[Parameter(Mandatory = $false, Position = 0)]
[string] $PublishRoot,
[string[]] $NugetSources,
[string] $Artifacts,
[string] $Coverage
)

$root = Split-Path $MyInvocation.MyCommand.Path -Parent -Resolve
. $root/buildHelper.ps1

if (!$Artifacts) {
$Artifacts = 'artifacts'
}
if (!$Coverage) {
$Coverage = "$Artifacts/coverage" # %cus.P_COVERAGE%
}

StartBuildSaveLocation

# blockOpened 'git-clean' 'git clean'
# git clean -xdf -e .vs -e NuGet.Config
# if (!$?) { FailBuild 'git clean' }
# blockClosed 'git-clean'

blockOpened 'dotnet-tool-restore' 'dotnet tool restore'
if ($NugetSources) {
$params = @()
foreach ($NugetSource in $NugetSources) {
$params += @('--add-source', $NugetSource)
}
dotnet tool restore @params || FailBuild 'dotnet tool restore'
}
else {
dotnet tool restore
if (!$?) { FailBuild 'dotnet tool restore' }
}
blockClosed 'dotnet-tool-restore'

blockOpened 'dotnet-restore' 'dotnet restore'
if ($NugetSources) {
$params = @()
foreach ($NugetSource in $NugetSources) {
$params += @('--source', $NugetSource)
}
dotnet restore @params || FailBuild 'dotnet restore'
}
else {
dotnet restore || FailBuild 'dotnet restore'
}
blockClosed 'dotnet-restore'

blockOpened 'dotnet-build' 'dotnet build'
dotnet build -c Release --no-restore -nodereuse:false || FailBuild 'dotnet build'
blockClosed 'dotnet-build'

if (!$PublishRoot) {
$PublishRoot = $Artifacts
Write-Host "Set publishRoot: $PublishRoot"
}

foreach ($targetVersionNum in @("6.0", "7.0", "8.0", "9.0")) {
$path = "$publishRoot/$targetVersionNum"
$targetVersion = if ($targetVersionNum -eq '3.1') { 'netcoreapp3.1' } else { "net$targetVersionNum" }

$tempArtifactsPath = "$publishRoot/$targetVersionNum-temp-Artifacts"
$linuxWebAppPath = "$path/spa-host/WebApp"
if (Test-Path $linuxWebAppPath -PathType Leaf -ErrorAction SilentlyContinue) {
DropFolderRetry $tempArtifactsPath -Retry 3
$tempArtifactFolder = New-Item -Path $tempArtifactsPath -ItemType 'Directory' -ErrorAction Stop
Move-Item -Path $linuxWebAppPath -Destination $tempArtifactFolder
}

DropFolderRetry $path -Retry 3

blockOpened ".NET-$targetVersionNum" ".NET $targetVersionNum"

blockOpened 'dotnet-publish-src\WebApp' 'dotnet publish src\WebApp'
dotnet publish src\WebApp -f $targetVersion -c Release --no-build -o $path/spa-host
if (!$?) { FailBuild 'dotnet publish src\WebApp' }
blockClosed 'dotnet-publish-src\WebApp'

if (Test-Path $tempArtifactsPath -PathType Container -ErrorAction SilentlyContinue) {
Move-Item -Path $tempArtifactsPath/* -Destination $path/spa-host -Force
DropFolderRetry $tempArtifactsPath -Retry 3
}

Write-Host "##teamcity[setParameter name='cus.tfmNet$($targetVersionNum)' value='true']"
blockClosed ".NET-$targetVersionNum"
}

FinishBuild
111 changes: 111 additions & 0 deletions .teamcity/buildHelper.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
function CopyCoverage([string]$source, [string]$coveragePath) {
$coverlet = (Get-ChildItem -Path $source)
if ($coverlet -isnot [System.IO.DirectoryInfo]) {
Write-Error "Cannot file testResult inside $source" -ErrorAction Stop
}

if (!(Test-Path -Path $coveragePath -Type Container)) {
$coverage = New-Item -Path $coveragePath -Type Directory
Write-Verbose $coverage
}

Copy-Item -Path "$($coverlet.FullName)/*" -Destination $coveragePath -Force -Confirm:$false -ErrorAction Stop
}

function DropFolderRetry([string] $folder, [int] $Retry) {
for ($i = $Retry; $i -ge 1; $i--) {
if ($folder -and (Test-Path $folder -ErrorAction SilentlyContinue)) {
Write-Verbose "Drop Folder/Remove-Item $folder / $i"
if ($i -gt 1) {
Remove-Item -Path $folder -Recurse -Force -Confirm:$false -ErrorAction Ignore
}
else {
Remove-Item -Path $folder -Recurse -Force -Confirm:$false -ErrorAction Stop
}
}
if (!$folder -or !(Test-Path $folder -ErrorAction SilentlyContinue)) {
break
}
Write-Verbose 'Remove-Item failed, sleep for 1 second'
Start-Sleep -Seconds 1
}
}

function TouchFile {
Param(
[Parameter(Mandatory = $true)]
[string]$Path
)

if (Test-Path -LiteralPath $Path) {
(Get-Item -Path $Path).LastWriteTime = Get-Date
}
else {
New-Item -Type File -Path $Path | Out-Null
}
}

function blockOpened($block, $description) {
Write-Host "##teamcity[blockOpened name='$($block)' description='$($description)']"
progressMessage $description
}

function blockClosed($block) {
Write-Host "##teamcity[blockClosed name='$($block)']"
}

function progressStart($message) {
Write-Host "##teamcity[progressStart '$($message)']"
}

function progressMessage($message) {
Write-Host "##teamcity[progressMessage '$($message)']"
}

function progressFinish($message) {
Write-Host "##teamcity[progressFinish '$($message)']"
}

function FailBuild($subStep) {
Write-Host "##teamcity[buildProblem description='$($subStep) failed.']"
RestoreLocation
EndBuild
Write-Host "Build failed, elapsed $($_buildElapsedTime.TotalSeconds) seconds"
exit 1
}

function StartBuildSaveLocation {
StartBuild
SaveLocation
}

function FinishBuildRestoreLocation {
RestoreLocation
FinishBuild
}

function StartBuild {
$Script:_buildStartTime = Get-Date
Write-Output "Build start $_buildStartTime"
}

function EndBuild {
$Script:_buildEndTime = Get-Date
$Script:_buildElapsedTime = New-TimeSpan $_buildStartTime $_buildEndTime
}

function FinishBuild {
EndBuild
progressMessage 'Build is done!'
Write-Host "Build elapsed $($_buildElapsedTime.TotalSeconds) seconds"
}

function SaveLocation {
$Script:_buildSaveOriginDirectory = Get-Location
}

function RestoreLocation {
if ($Script:_buildSaveOriginDirectory) {
Set-Location $Script:_buildSaveOriginDirectory
}
}
2 changes: 1 addition & 1 deletion src/WebApp/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ void LogAssembly(AssemblyInfo assembly)
var appOptions = builder.GetAppOptionsOrDefault();
if (builder.Environment.IsDevelopment() || appOptions.IsShowAssemblies)
{
LogAssembly(new AssemblyInfo(typeof(NetLah.Extensions.Configuration.ConfigurationBuilderBuilder).Assembly));
LogAssembly(new AssemblyInfo(typeof(ConfigurationBuilderBuilder).Assembly));
LogAssembly(new AssemblyInfo(typeof(NetLah.Extensions.HttpOverrides.HttpOverridesExtensions).Assembly));
LogAssembly(new AssemblyInfo(typeof(AppLogReference).Assembly));
LogAssembly(new AssemblyInfo(typeof(AppLog).Assembly));
Expand Down
71 changes: 29 additions & 42 deletions src/WebApp/WebApp.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -12,64 +12,47 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="Azure.Identity" />
<PackageReference Include="NetLah.Extensions.Configuration" />
<PackageReference Include="NetLah.Extensions.Logging.Serilog.AspNetCore" />
</ItemGroup>

<ItemGroup Condition="'$(NET_6_0)' == true">
<PackageReference Include="Azure.Core" />
<PackageReference Include="Azure.Identity" />
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" />
<PackageReference Include="Microsoft.ApplicationInsights" />
<PackageReference Include="Microsoft.AspNetCore.SpaServices.Extensions" />
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" />
</ItemGroup>

<ItemGroup Condition="'$(NET_7_0)' == true">
<PackageReference Include="System.Diagnostics.EventLog" />
</ItemGroup>

<ItemGroup Condition="'$(NET_6_0)' == true Or '$(NET_7_0)' == true">
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" />
<PackageReference Include="Microsoft.Extensions.DependencyModel" />
<PackageReference Include="Microsoft.Extensions.Diagnostics.Abstractions" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Abstractions" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" />
<PackageReference Include="Microsoft.Extensions.Logging.ApplicationInsights" />
<PackageReference Include="Microsoft.Extensions.Logging" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" />
<PackageReference Include="Microsoft.Extensions.Options" />
<PackageReference Include="Microsoft.Extensions.Primitives" />
<PackageReference Include="Microsoft.Identity.Client" />
<PackageReference Include="Microsoft.Identity.Client.Extensions.Msal" />
<PackageReference Include="Microsoft.IdentityModel.Abstractions" />
<PackageReference Include="Microsoft.Win32.SystemEvents" />
<PackageReference Include="NetLah.Abstractions" />
<PackageReference Include="NetLah.Extensions.HttpOverrides" />
<PackageReference Include="NetLah.Extensions.Logging.Reference" />
<PackageReference Include="NetLah.Extensions.Logging.Serilog.AspNetCore" />
<PackageReference Include="NetLah.Extensions.Logging.Serilog" />
<PackageReference Include="Newtonsoft.Json" />
<PackageReference Include="Serilog" />
<PackageReference Include="Serilog.AspNetCore" />
<PackageReference Include="Serilog.Extensions.Hosting" />
<PackageReference Include="Serilog.Extensions.Logging" />
<PackageReference Include="Serilog.Formatting.Compact" />
<PackageReference Include="Serilog.Settings.Configuration" />
<PackageReference Include="Serilog.Sinks.Console" />
<PackageReference Include="Serilog.Sinks.Debug" />
<PackageReference Include="Serilog.Sinks.File" />
<PackageReference Include="Serilog.Sinks.PeriodicBatching" />
<PackageReference Include="Serilog.Sinks.Seq" />
<PackageReference Include="System.Configuration.ConfigurationManager" />
<PackageReference Include="System.Diagnostics.PerformanceCounter" />
<PackageReference Include="System.Drawing.Common" />
<PackageReference Include="System.Memory.Data" />
<PackageReference Include="System.Security.Cryptography.ProtectedData" />
<PackageReference Include="System.Security.Permissions" />
<PackageReference Include="System.Diagnostics.DiagnosticSource" />
<PackageReference Include="System.Text.Encodings.Web" />
<PackageReference Include="System.Text.Json" />
<PackageReference Include="System.Windows.Extensions" />
</ItemGroup>

<ItemGroup Condition="'$(NET_7_0)' == true Or '$(NET_8_0)' == true Or '$(NET_9_0)' == true">
<ItemGroup Condition="'$(NET_8_0)' == true">
</ItemGroup>

<ItemGroup Condition="'$(NET_9_0)' == true">
</ItemGroup>

<ItemGroup Condition="'$(NET_8_0)' == true Or '$(NET_8_0)' == true">
</ItemGroup>

<!--All .NET-->
<ItemGroup>
<PackageReference Include="Azure.Core" />
<PackageReference Include="Azure.Identity" />
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" />
<PackageReference Include="Microsoft.ApplicationInsights" />
<PackageReference Include="Microsoft.AspNetCore.SpaServices.Extensions" />
Expand All @@ -83,11 +66,13 @@
<PackageReference Include="NetLah.Abstractions" />
<PackageReference Include="NetLah.Extensions.HttpOverrides" />
<PackageReference Include="NetLah.Extensions.Logging.Reference" />
<PackageReference Include="NetLah.Extensions.Logging.Serilog.AspNetCore" />
<PackageReference Include="NetLah.Extensions.Logging.Serilog" />
<PackageReference Include="Newtonsoft.Json" />
<PackageReference Include="Serilog" />

<PackageReference Include="Serilog.AspNetCore" />
<PackageReference Include="Serilog" />
<PackageReference Include="Serilog.Enrichers.CorrelationId" />
<PackageReference Include="Serilog.Enrichers.Environment" />
<PackageReference Include="Serilog.Enrichers.Thread" />
<PackageReference Include="Serilog.Extensions.Hosting" />
<PackageReference Include="Serilog.Extensions.Logging" />
<PackageReference Include="Serilog.Formatting.Compact" />
Expand All @@ -97,6 +82,8 @@
<PackageReference Include="Serilog.Sinks.File" />
<PackageReference Include="Serilog.Sinks.PeriodicBatching" />
<PackageReference Include="Serilog.Sinks.Seq" />

<PackageReference Include="System.ClientModel" />
<PackageReference Include="System.Configuration.ConfigurationManager" />
<PackageReference Include="System.Diagnostics.PerformanceCounter" />
<PackageReference Include="System.Drawing.Common" />
Expand Down

0 comments on commit ba69f61

Please sign in to comment.