diff --git a/Dockerfile b/Dockerfile index bd0cc3e..08d62d0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,27 +1,34 @@ # build image -FROM golang:1.12-stretch as build +FROM techknowlogick/xgo:go-1.13.x as build +WORKDIR /src +ENTRYPOINT [] +CMD ["/bin/bash"] -# required to force cgo (for sqlite driver) with cross compile +# enable cgo to build sqlite ENV CGO_ENABLED 1 # install database clients RUN apt-get update \ - && apt-get install -y --no-install-recommends \ - default-mysql-client \ + && apt-get install -qq --no-install-recommends \ + curl \ + mysql-client \ postgresql-client \ sqlite3 \ && rm -rf /var/lib/apt/lists/* -# development dependencies -RUN curl -fsSL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh \ - | sh -s v1.16.0 +# golangci-lint +RUN curl -fsSL -o /tmp/lint-install.sh https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh \ + && chmod +x /tmp/lint-install.sh \ + && /tmp/lint-install.sh -b /usr/local/bin v1.18.0 \ + && rm -f /tmp/lint-install.sh -# copy source files -COPY . /src -WORKDIR /src +# download modules +COPY go.* ./ +RUN go mod download # build -RUN make build +COPY . ./ +RUN make build-linux # runtime image FROM gcr.io/distroless/base diff --git a/Makefile b/Makefile index 97ecf85..89958f9 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,4 @@ -DC := docker-compose -BUILD_FLAGS := -ldflags '-s' +LDFLAGS := -ldflags '-s' .PHONY: all all: test lint build @@ -22,13 +21,27 @@ clean: rm -rf dist .PHONY: build -build: clean - GOARCH=amd64 go build $(BUILD_FLAGS) -o dist/dbmate-linux-amd64 . - # musl target does not support sqlite - GOARCH=amd64 CGO_ENABLED=0 go build $(BUILD_FLAGS) -o dist/dbmate-linux-musl-amd64 . +build: clean build-linux build-macos build-windows + ls -lh dist + +.PHONY: build-linux +build-linux: + GOOS=linux GOARCH=amd64 CGO_ENABLED=1 \ + go build $(LDFLAGS) -o dist/dbmate-linux-amd64 . + GOOS=linux GOARCH=amd64 CGO_ENABLED=0 \ + go build $(LDFLAGS) -o dist/dbmate-linux-musl-amd64 . + +.PHONY: build-macos +build-macos: + GOOS=darwin GOARCH=amd64 CGO_ENABLED=1 CC=o64-clang CXX=o64-clang++ \ + go build $(LDFLAGS) -o dist/dbmate-macos-amd64 . + +.PHONY: build-windows +build-windows: + GOOS=windows GOARCH=amd64 CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc-posix CXX=x86_64-w64-mingw32-g++-posix \ + go build $(LDFLAGS) -o dist/dbmate-windows-amd64.exe . .PHONY: docker docker: - $(DC) pull - $(DC) build - $(DC) run --rm dbmate make + docker-compose build + docker-compose run --rm dbmate make diff --git a/go.mod b/go.mod index 3d09229..9918092 100644 --- a/go.mod +++ b/go.mod @@ -1,5 +1,7 @@ module github.com/amacneil/dbmate +go 1.13 + require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/go-sql-driver/mysql v1.4.1 diff --git a/pkg/dbmate/mysql_test.go b/pkg/dbmate/mysql_test.go index 681bc75..4aaf3e6 100644 --- a/pkg/dbmate/mysql_test.go +++ b/pkg/dbmate/mysql_test.go @@ -133,8 +133,10 @@ func TestMySQLDumpSchema(t *testing.T) { u.Path = "/fakedb" schema, err = drv.DumpSchema(u, db) require.Nil(t, schema) - require.EqualError(t, err, "mysqldump: Got error: 1049: "+ - "\"Unknown database 'fakedb'\" when selecting the database") + require.EqualError(t, err, "mysqldump: [Warning] Using a password "+ + "on the command line interface can be insecure.\n"+ + "mysqldump: Got error: 1049: "+ + "Unknown database 'fakedb' when selecting the database") } func TestMySQLDatabaseExists(t *testing.T) {