<# .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="" }