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