From b813a529bf2a9f52e2bc9ec9dc6aa8eba5dc8a7e Mon Sep 17 00:00:00 2001 From: Christopher Boumenot Date: Thu, 5 May 2016 13:12:17 -0700 Subject: [PATCH] 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. --- .gitignore | 1 + scripts/build.ps1 | 95 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 scripts/build.ps1 diff --git a/.gitignore b/.gitignore index 61f087667..199855319 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ .vagrant .idea test/.env +*~ website/.bundle website/vendor diff --git a/scripts/build.ps1 b/scripts/build.ps1 new file mode 100644 index 000000000..bd398affe --- /dev/null +++ b/scripts/build.ps1 @@ -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\