Skip to content

Commit

Permalink
build: Add release builds, now generated with 'make release'
Browse files Browse the repository at this point in the history
Currently supported platforms are

    - linux{amd64,arm,386}
    - winows{amd64,386}
    - darwin{amd64}
  • Loading branch information
harshavardhana committed Feb 23, 2016
1 parent 7815400 commit 223245c
Show file tree
Hide file tree
Showing 8 changed files with 71 additions and 22 deletions.
2 changes: 1 addition & 1 deletion MAINTAINERS.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
11 changes: 9 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -134,12 +137,16 @@ 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:"
@rm -fv minio minio.test cover.out
@find . -name '*.test' | xargs rm -fv
@rm -rf isa-l
@rm -rf build
@rm -rf release
12 changes: 8 additions & 4 deletions build-constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 changes: 48 additions & 0 deletions buildscripts/build.sh
Original file line number Diff line number Diff line change
@@ -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
2 changes: 1 addition & 1 deletion buildscripts/gen-ldflags.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
5 changes: 0 additions & 5 deletions release.cmd

This file was deleted.

6 changes: 0 additions & 6 deletions release.sh

This file was deleted.

7 changes: 4 additions & 3 deletions update-main.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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)
}
Expand Down

0 comments on commit 223245c

Please sign in to comment.