雑に始めた Go での開発環境のメモ。 - 全力で怠けたい で↓みたいなことを書いたのですが、
いくつかコマンドを Github で公開しているのですが、Github の Release に登録するためのバイナリの作成やアップロードが面倒です。
そこで、コンパイルには gox を、Github にアップロードするために ghr を利用しています。
実際のところは、↓こんな感じに雑なシェルスクリプトを書いて、パッケージディレクトリで叩いています。
やっぱり面倒だったので Makefile を導入しました。
今まで JVM 系の開発が多かったので Makefile を使ったことはないのですが、Go での開発ではよく使われているみたいですね。
https://github.com/ebc-2in2crc/dt/blob/master/Makefile
GOCMD=go GOBUILD=$(GOCMD) build GOCLEAN=$(GOCMD) clean GOTEST=$(GOCMD) test GOGET=$(GOCMD) get NAME := dt CURRENT := $(shell pwd) BUILDDIR=./build BINDIR=$(BUILDDIR)/bin PKGDIR=$(BUILDDIR)/pkg DISTDIR=$(BUILDDIR)/dist VERSION := $(shell git describe --tags --abbrev=0) LDFLAGS := -X 'main.version=$(VERSION)' GOXOS := "darwin windows linux" GOXARCH := "386 amd64" GOXOUTPUT := "$(PKGDIR)/$(NAME)_{{.OS}}_{{.Arch}}/{{.Dir}}" .PHONY: deps ## Install dependencies deps: $(GOGET) golang.org/x/tools/cmd/goimports $(GOGET) github.com/golang/lint/golint $(GOGET) github.com/codegangsta/cli $(GOGET) github.com/mitchellh/go-homedir $(GOGET) github.com/Songmu/make2help/cmd/make2help $(GOGET) github.com/tcnksm/ghr .PHONY: build ## Build binaries build: deps go build -ldflags "$(LDFLAGS)" -o $(BINDIR)/$(NAME) .PHONY: cross-build ## Cross build binaries cross-build: rm -rf $(PKGDIR) gox -os=$(GOXOS) -arch=$(GOXARCH) -output=$(GOXOUTPUT) .PHONY: package ## Make package package: cross-build rm -rf $(DISTDIR) mkdir $(DISTDIR) pushd $(PKGDIR) > /dev/null && \ for P in `ls | xargs basename`; do zip -r $(CURRENT)/$(DISTDIR)/$$P.zip $$P; done && \ popd > /dev/null .PHONY: release ## Release package to Github release: package ghr $(VERSION) $(DISTDIR) .PHONY: test ## Run tests test: deps $(GOTEST) -v ./... .PHONY: lint ## Lint lint: deps go vet ./... golint ./... .PHONY: fmt ## Format source codes fmt: deps find . -name "*.go" -not -path "./vendor/*" | xargs goimports -w .PHONY: clean clean: $(GOCLEAN) rm -rf $(BUILDDIR) .PHONY: help ## Show help help: @make2help $(MAKEFILE_LIST)
ハマったこと
"Each line in a makefile target recipe is run in its own shell session."
— えび🦐🍤 (@ebc_2in2crc) July 28, 2018
-> makefile のターゲットの各行は、それぞれのシェルセッションで実行されます。
完全にハマってた……https://t.co/UCDGUBdwLj