diff --git a/.gitignore b/.gitignore index 332557d..526c3b4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /vendor -/bin \ No newline at end of file +/bin +/release \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..27b16ca --- /dev/null +++ b/Makefile @@ -0,0 +1,13 @@ +build: pack + CGO_ENABLED=0 go build -mod vendor -v -o bin/junit2md ./cmd/junit2md + +pack: + packr2 + +watch: + modd + +release: pack + script/release + +.PHONY: build pack watch release \ No newline at end of file diff --git a/modd.conf b/modd.conf index b99f480..6c693a8 100644 --- a/modd.conf +++ b/modd.conf @@ -1,5 +1,4 @@ **/*.go modd.conf { - prep: packr2 -v - prep: go build -mod vendor -v -o bin/junit2md ./cmd/junit2md + prep: make build } \ No newline at end of file diff --git a/script/release b/script/release new file mode 100755 index 0000000..3c16567 --- /dev/null +++ b/script/release @@ -0,0 +1,102 @@ +#!/bin/bash + +set -eo pipefail + +OS_TARGETS=(linux) +ARCH_TARGETS=${ARCH_TARGETS:-amd64 arm 386} + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" + +function build { + + local name=$1 + local srcdir=$2 + local os=$3 + local arch=$4 + + local dirname="$name-$os-$arch" + local destdir="$DIR/../release/$dirname" + + rm -rf "$destdir" + mkdir -p "$destdir" + + echo "building $dirname..." + + CGO_ENABLED=0 GOOS="$os" GOARCH="$arch" go build \ + -mod=vendor \ + -ldflags="-s -w -X main.GitCommit=$(current_commit_ref) -X main.ProjectVersion=$(current_version)" \ + -gcflags=-trimpath="${PWD}" \ + -asmflags=-trimpath="${PWD}" \ + -o "$destdir/$name" \ + "$srcdir" + + if [ ! -z "$(which upx)" ]; then + upx --best "$destdir/$name" + fi + +} + +function current_commit_ref { + git rev-list -1 HEAD +} + +function current_version { + local latest_tag=$(git describe --abbrev=0 2>/dev/null) + echo ${latest_tag:-0.0.0} +} + +function copy { + + local name=$1 + local os=$2 + local arch=$3 + local src=$4 + local dest=$5 + + local dirname="$name-$os-$arch" + local destdir="$DIR/../release/$dirname" + + echo "copying '$src' to '$destdir/$dest'..." + + mkdir -p "$(dirname $destdir/$dest)" + + cp -rfL $src "$destdir/$dest" + +} + +function compress { + + local name=$1 + local os=$2 + local arch=$3 + + local dirname="$name-$os-$arch" + local destdir="$DIR/../release/$dirname" + + echo "compressing $dirname..." + tar -czf "$destdir.tar.gz" -C "$destdir/../" "$dirname" +} + +function release_junit2md { + + local os=$1 + local arch=$2 + + build 'junit2md' "$DIR/../cmd/junit2md" $os $arch + + copy 'junit2md' $os $arch "$DIR/../README.md" "README.md" + copy 'junit2md' $os $arch "$DIR/../LICENSE" "LICENSE" + + compress 'junit2md' $os $arch + +} + +function main { + for os in ${OS_TARGETS[@]}; do + for arch in ${ARCH_TARGETS[@]}; do + release_junit2md $os $arch + done + done +} + +main \ No newline at end of file