1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00
moby--moby/hack/make/.go-autogen.ps1
CrazyMax 1efda78f2b
use go-winres for windows build and cleanup autogen and winresources
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
2022-04-14 19:52:36 +02:00

152 lines
5.1 KiB
PowerShell

<#
.NOTES
Author: @jhowardmsft
Summary: Windows native version of .go-autogen which generates the
.go source code for building, and performs resource compilation.
.PARAMETER CommitString
The commit string. This is calculated externally to this script.
.PARAMETER DockerVersion
The version such as 17.04.0-dev. This is calculated externally to this script.
.PARAMETER Platform
The platform name, such as "Docker Engine - Community".
.PARAMETER Product
The product name, used to set version.ProductName, which is used to set BuildKit's
ExportedProduct variable in order to show useful error messages to users when a
certain version of the product doesn't support a BuildKit feature.
.PARAMETER DefaultProductLicense
Sets the version.DefaultProductLicense string, such as "Community Engine". This field
can contain a summary of the product license of the daemon if a commercial license has
been applied to the daemon.
.PARAMETER PackagerName
The name of the packager (e.g. "Docker, Inc."). This used to set CompanyName in the manifest.
#>
param(
[Parameter(Mandatory=$true)][string]$CommitString,
[Parameter(Mandatory=$true)][string]$DockerVersion,
[Parameter(Mandatory=$false)][string]$Platform,
[Parameter(Mandatory=$false)][string]$Product,
[Parameter(Mandatory=$false)][string]$DefaultProductLicense,
[Parameter(Mandatory=$false)][string]$PackagerName
)
$ErrorActionPreference = "Stop"
# Utility function to get the build date/time in UTC
Function Get-BuildDateTime() {
return $(Get-Date).ToUniversalTime()
}
Function Get-Year() {
return $(Get-Date).year
}
Function Get-FixQuadVersionNumber($number) {
if ($number -eq 0) {
return $number
}
return $number.TrimStart("0")
}
try {
$buildDateTime=Get-BuildDateTime
$currentYear=Get-Year
# Update PATH
$env:PATH="$env:GOPATH\bin;$env:PATH"
# Generate a version in the form major,minor,patch,build
$versionQuad=($DockerVersion -replace "[^0-9.]*")
if ($versionQuad -Match "^\d+`.\d+`.\d+$"){
$versionQuad = $versionQuad + ".0"
}
$versionMatches = $($versionQuad | Select-String -AllMatches -Pattern "(\d+)`.(\d+)`.(\d+)`.(\d+)").Matches
$mkwinresContents = '{
"RT_GROUP_ICON": {
"#1": {
"0409": "../../winresources/docker.ico"
}
},
"RT_MANIFEST": {
"#1": {
"0409": {
"identity": {},
"description": "Docker Engine",
"minimum-os": "vista",
"execution-level": "",
"ui-access": false,
"auto-elevate": false,
"dpi-awareness": "unaware",
"disable-theming": false,
"disable-window-filtering": false,
"high-resolution-scrolling-aware": false,
"ultra-high-resolution-scrolling-aware": false,
"long-path-aware": false,
"printer-driver-isolation": false,
"gdi-scaling": false,
"segment-heap": false,
"use-common-controls-v6": false
}
}
},
"RT_MESSAGETABLE": {
"#1": {
"0409": "../../winresources/event_messages.bin"
}
},
"RT_VERSION": {
"#1": {
"0409": {
"fixed": {
"file_version": "'+(Get-FixQuadVersionNumber($versionMatches.Groups[1].Value))+'.'+(Get-FixQuadVersionNumber($versionMatches.Groups[2].Value))+'.'+(Get-FixQuadVersionNumber($versionMatches.Groups[3].Value))+'.'+(Get-FixQuadVersionNumber($versionMatches.Groups[4].Value))+'",
"product_version": "'+(Get-FixQuadVersionNumber($versionMatches.Groups[1].Value))+'.'+(Get-FixQuadVersionNumber($versionMatches.Groups[2].Value))+'.'+(Get-FixQuadVersionNumber($versionMatches.Groups[3].Value))+'.'+(Get-FixQuadVersionNumber($versionMatches.Groups[4].Value))+'",
"type": "Unknown"
},
"info": {
"0000": {
"CompanyName": "'+$PackagerName+'",
"FileVersion": "'+$DockerVersion+'",
"LegalCopyright": "Copyright (C) 2015-'+$currentYear+' Docker Inc.",
"OriginalFileName": "dockerd.exe",
"ProductName": "'+$Product+'",
"ProductVersion": "'+$DockerVersion+'",
"SpecialBuild": "'+$CommitString+'"
}
}
}
}
}
}'
# Write the file
$outputFile="$(Get-Location)\cli\winresources\dockerd\winres.json"
if (Test-Path $outputFile) { Remove-Item $outputFile }
[System.IO.File]::WriteAllText($outputFile, $mkwinresContents)
Get-Content $outputFile | Out-Host
# Create winresources package stub if removed while using tmpfs in Dockerfile
$stubPackage="$(Get-Location)\cli\winresources\dockerd\winresources.go"
if(![System.IO.File]::Exists($stubPackage)){
Set-Content -NoNewline -Path $stubPackage -Value 'package winresources'
}
# Generate
go generate -v "github.com/docker/docker/cmd/dockerd"
if ($LASTEXITCODE -ne 0) { Throw "Failed to generate version info" }
}
Catch [Exception] {
# Throw the error onto the caller to display errors. We don't expect this script to be called directly
Throw ".go-autogen.ps1 failed with error $_"
}
Finally {
$env:_ag_dockerVersion=""
$env:_ag_gitCommit=""
}