build: Add release builds, now generated with 'make release'

Currently supported platforms are

    - linux{amd64,arm,386}
    - winows{amd64,386}
    - darwin{amd64}
This commit is contained in:
Harshavardhana 2016-02-23 14:57:14 -08:00
parent 781540081d
commit 223245cc45
8 changed files with 71 additions and 22 deletions

View File

@ -34,4 +34,4 @@ $
`minio` doesn't follow semantic versioning style, `minio` instead uses the release date and time as the release versions.
`make release` will install new released binary into your `GOPATH`
`make release` will generate new binary into `release` directory.

View File

@ -124,6 +124,9 @@ pkg-update:
pkg-remove:
@GO15VENDOREXPERIMENT=1 ${GOPATH}/bin/govendor remove $(PKG)
pkg-list:
@GO15VENDOREXPERIMENT=1 $(GOPATH)/bin/govendor list
install: gomake-all
dockerimage: checkdocker verifiers $(UI_ASSETS)
@ -134,8 +137,11 @@ dockerimage: checkdocker verifiers $(UI_ASSETS)
@rmdir export
@rm minio.dockerimage
release:
@./release.sh
release: verifiers
@MC_RELEASE=RELEASE GO15VENDOREXPERIMENT=1 ./buildscripts/build.sh
experimental: verifiers
@MC_RELEASE=EXPERIMENTAL GO15VENDOREXPERIMENT=1 ./buildscripts/build.sh
clean:
@echo "Cleaning up all the generated files:"
@ -143,3 +149,4 @@ clean:
@find . -name '*.test' | xargs rm -fv
@rm -rf isa-l
@rm -rf build
@rm -rf release

View File

@ -17,8 +17,12 @@
package main
var (
minioVersion = "UNOFFICIAL.GOGET"
minioReleaseTag = "UNOFFICIAL.GOGET"
minioCommitID = "UNOFFICIAL.GOGET"
minioShortCommitID = minioCommitID[:]
// minioVersion - version time.RFC3339.
minioVersion = "DEVELOPMENT.GOGET"
// minioReleaseTag - release tag in TAG.%Y-%m-%dT%H-%M-%SZ.
minioReleaseTag = "DEVELOPMENT.GOGET"
// minioCommitID - latest commit id.
minioCommitID = "DEVELOPMENT.GOGET"
// minioShortCommitID - first 12 characters from mcCommitID
minioShortCommitID = minioCommitID[:12]
)

48
buildscripts/build.sh Executable file
View File

@ -0,0 +1,48 @@
#!/bin/bash
_init() {
# Save release LDFLAGS
LDFLAGS=$(go run buildscripts/gen-ldflags.go)
# Extract release tag
release_tag=$(echo $LDFLAGS | awk {'print $4'} | cut -f2 -d=)
# Verify release tag.
if [ -z "$release_tag" ]; then
echo "Release tag cannot be empty. Please check return value of \`go run buildscripts/gen-ldflags.go\`"
exit 1;
fi
# Extract release string.
release_str=$(echo $MC_RELEASE | tr '[:upper:]' '[:lower:]')
# Verify release string.
if [ -z "$release_str" ]; then
echo "Release string cannot be empty. Please set \`MC_RELEASE\` env variable."
exit 1;
fi
# List of supported architectures
SUPPORTED_OSARCH='linux/386 linux/amd64 linux/arm windows/386 windows/amd64 darwin/amd64'
}
go_build() {
local osarch=$1
os=$(echo $osarch | cut -f1 -d'/')
arch=$(echo $osarch | cut -f2 -d'/')
package=$(go list -f '{{.ImportPath}}')
echo -n "-->"
printf "%15s:%s\n" "${osarch}" "${package}"
GO15VENDOREXPERIMENT=1 GOOS=$os GOARCH=$arch go build --ldflags "${LDFLAGS}" -o $release_str/$os-$arch/$(basename $package).$release_tag
}
main() {
# Build releases.
echo "Executing $release_str builds for OS: ${SUPPORTED_OSARCH}"
for osarch in ${SUPPORTED_OSARCH}; do
go_build ${osarch}
done
}
# Run main.
_init && main

View File

@ -37,7 +37,7 @@ func genLDFlags(version string) string {
// genReleaseTag prints release tag to the console for easy git tagging.
func releaseTag(version string) string {
relPrefix := "UNOFFICIAL"
relPrefix := "DEVELOPMENT"
if prefix := os.Getenv("MINIO_RELEASE"); prefix != "" {
relPrefix = prefix
}

View File

@ -1,5 +0,0 @@
SET MINIO_RELEASE=OFFICIAL
SET GO15VENDOREXPERIMENT=1
go run buildscripts/gen-ldflags.go > temp.txt
SET /p LDFLAGS=<temp.txt
go build -ldflags="%LDFLAGS%" -o %GOPATH%\bin\minio.exe

View File

@ -1,6 +0,0 @@
#!/bin/bash
echo -n "Making official release binaries.. "
export MINIO_RELEASE=OFFICIAL
make 1>/dev/null
echo "Binaries built at ${GOPATH}/bin/minio"

View File

@ -121,8 +121,9 @@ func parseReleaseData(data string) (time.Time, *probe.Error) {
if releaseDateSplits[0] != "minio" {
return time.Time{}, probe.NewError(errors.New("Update data malformed, missing minio tag"))
}
if releaseDateSplits[1] != "OFFICIAL" {
return time.Time{}, probe.NewError(errors.New("Update data malformed, missing OFFICIAL tag"))
// "OFFICIAL" tag is still kept for backward compatibility, we should remove this for the next release.
if releaseDateSplits[1] != "RELEASE" && releaseDateSplits[1] != "OFFICIAL" {
return time.Time{}, probe.NewError(errors.New("Update data malformed, missing RELEASE tag"))
}
dateSplits := strings.SplitN(releaseDateSplits[2], "T", 2)
if len(dateSplits) < 2 {
@ -145,7 +146,7 @@ func getReleaseUpdate(updateURL string) {
data, e := http.Get(newUpdateURL)
fatalIf(probe.NewError(e), "Unable to read from update URL "+newUpdateURL+".", nil)
if minioVersion == "UNOFFICIAL.GOGET" {
if minioVersion == "DEVELOPMENT.GOGET" {
fatalIf(probe.NewError(errors.New("")),
"Update mechanism is not supported for go get based binary builds. Please download official releases from https://minio.io/#minio", nil)
}