Build script for Windows. (#3481)

A re-implementation of build.sh for Windows ala PowerShell.  This is as
close to one-to-one that I could make it.
This commit is contained in:
Christopher Boumenot 2016-05-05 13:12:17 -07:00 committed by Chris Bednarski
parent 2d1347c1ec
commit b813a529bf
2 changed files with 96 additions and 0 deletions

1
.gitignore vendored
View File

@ -8,6 +8,7 @@
.vagrant
.idea
test/.env
*~
website/.bundle
website/vendor

95
scripts/build.ps1 Normal file
View File

@ -0,0 +1,95 @@
<#
.Synopsis
Build script for Packer.
.Description
Build script for Packer for all supported platforms and architectures.
By default the following OSs and architectures are targeted.
OS:
* linux
* darwin
* windows
* freebsd
* openbsd
Architecture:
* 386
* amd64
* arm
If the environment variable PACKER_DEV is defined, then the OS and
architecture of the go binary in the path is used.
The built binary is stamped with the current version number of Packer,
the latest git commit, and +CHANGES if there are any outstanding
changes in the current repository, e.g.
Packer v0.10.1.dev (3c736322ba3a5fcb3a4e92394011a2e56f396da6+CHANGES)
The build artifacts for the current OS and architecture are copied to
bin and $GOPATH\bin.
.Example
.\scripts\build.ps1
#>
# This script builds the application from source for multiple platforms.
# Get the parent directory of where this script is.
$DIR = [System.IO.Path]::GetDirectoryName($PSScriptRoot)
# Change into that directory
Push-Location $DIR | Out-Null
# Get the git commit
$GIT_COMMIT = $(git.exe rev-parse HEAD)
git.exe status --porcelain | Out-Null
if ($LastExitCode -eq 0) {
$GIT_DIRTY = "+CHANGES"
}
# If its dev mode, only build for ourself
if (Test-Path env:PACKER_DEV) {
$XC_OS=$(go.exe env GOOS)
$XC_ARCH=$(go.exe env GOARCH)
}
elseif (-not (Test-Path env:XC_ARCH)) {
$XC_ARCH="386 amd64 arm"
$XC_OS="linux darwin windows freebsd openbsd"
}
# Delete the old dir
echo "==> Removing old directory..."
Remove-Item -Recurse -ErrorAction Ignore -Force "bin\"
Remove-Item -Recurse -ErrorAction Ignore -Force "pkg\"
New-Item -Type Directory -Name bin | Out-Null
# Delete the old dir
echo "==> Building..."
gox.exe `
-os="${XC_OS}" `
-arch="${XC_ARCH}" `
-ldflags "-X github.com/mitchellh/packer/version.GitCommit ${GIT_COMMIT}${GIT_DIRTY}" `
-output "pkg/{{.OS}}_{{.Arch}}/packer" `
.
if ($LastExitCode -ne 0) {
exit 1
}
# Move all the compiled things to the $GOPATH/bin
$GOPATH=$(go.exe env GOPATH)
# Copy our OS/Arch to the bin/ directory
echo "==> Copying binaries for this platform..."
Get-ChildItem ".\pkg\$(go env GOOS)_$(go env GOARCH)\" `
|? { !($_.PSIsContainer) } `
|% {
Copy-Item $_.FullName "bin\"
Copy-Item $_.FullName "${GOPATH}\bin\"
}
# Done!
echo "`r`n==> Results:"
Get-ChildItem bin\