From 75b78a45c07bf3ab5cf2ff71908062622e329fef Mon Sep 17 00:00:00 2001 From: Jason Kulatunga Date: Wed, 14 Oct 2020 21:17:03 -0600 Subject: [PATCH] use Make + XGO to build static binaries. attempt #3 --- .github/workflows/build.yaml | 72 +++++------------------------------- Makefile | 64 ++++++++++++++++++++++++++++++++ docker/Dockerfile.xgo | 7 ++++ 3 files changed, 81 insertions(+), 62 deletions(-) create mode 100644 Makefile create mode 100644 docker/Dockerfile.xgo diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index fe6c3fb..f660f81 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -6,7 +6,7 @@ jobs: build: name: Build runs-on: ubuntu-latest - container: golang:1.13 + container: karalabe/xgo-1.13.x env: PROJECT_PATH: /go/src/github.com/analogj/scrutiny CGO_ENABLED: 1 @@ -29,65 +29,9 @@ jobs: GOOS: linux GOARCH: amd64 run: | - apt-get update && apt-get install -y file cd $PROJECT_PATH - echo "###### Build Web ######" - go build -ldflags "-extldflags=-static -X main.goos=linux -X main.goarch=amd64" -o scrutiny-web-linux-amd64 -tags "static netgo sqlite_omit_load_extension" webapp/backend/cmd/scrutiny/scrutiny.go - echo "###### Build Collector ######" - go build -ldflags "-extldflags=-static -X main.goos=linux -X main.goarch=amd64" -o scrutiny-collector-metrics-linux-amd64 -tags "static netgo" collector/cmd/collector-metrics/collector-metrics.go - - chmod +x scrutiny-web-linux-amd64 - chmod +x scrutiny-collector-metrics-linux-amd64 - - file scrutiny-web-linux-amd64 - ldd scrutiny-web-linux-amd64 || true - file scrutiny-collector-metrics-linux-amd64 - ldd scrutiny-collector-metrics-linux-amd64 || true - - name: Build arm - env: - GOOS: linux - GOARCH: arm - run: | - cd $PROJECT_PATH - go build -ldflags "-extldflags=-static -X main.goos=linux -X main.goarch=arm" -o scrutiny-web-linux-arm -tags "static netgo sqlite_omit_load_extension" webapp/backend/cmd/scrutiny/scrutiny.go - go build -ldflags "-extldflags=-static -X main.goos=linux -X main.goarch=arm" -o scrutiny-collector-metrics-linux-arm -tags "static netgo" collector/cmd/collector-metrics/collector-metrics.go - - chmod +x scrutiny-web-linux-arm - chmod +x scrutiny-collector-metrics-linux-arm - - - name: Build arm64 - env: - GOOS: linux - GOARCH: arm64 - run: | - cd $PROJECT_PATH - go build -ldflags "-extldflags=-static -X main.goos=linux -X main.goarch=arm64" -o scrutiny-web-linux-arm64 -tags "static netgo sqlite_omit_load_extension" webapp/backend/cmd/scrutiny/scrutiny.go - go build -ldflags "-extldflags=-static -X main.goos=linux -X main.goarch=arm64" -o scrutiny-collector-metrics-linux-arm64 -tags "static netgo" collector/cmd/collector-metrics/collector-metrics.go - - chmod +x scrutiny-web-linux-arm64 - chmod +x scrutiny-collector-metrics-linux-arm64 - - - name: Build windows - env: - GOOS: windows - GOARCH: amd64 - run: | - cd $PROJECT_PATH - go build -ldflags "-X main.goos=windows -X main.goarch=amd64" -o scrutiny-web-windows-amd64.exe -tags "static" webapp/backend/cmd/scrutiny/scrutiny.go - go build -ldflags "-X main.goos=windows -X main.goarch=amd64" -o scrutiny-collector-metrics-windows-amd64.exe -tags "static" collector/cmd/collector-metrics/collector-metrics.go - - - name: Build freebsd - env: - GOOS: freebsd - GOARCH: amd64 - run: | - cd $PROJECT_PATH - go build -ldflags "-extldflags=-static -X main.goos=freebsd -X main.goarch=amd64" -o scrutiny-web-freebsd-amd64 -tags "static netgo sqlite_omit_load_extension" webapp/backend/cmd/scrutiny/scrutiny.go - go build -ldflags "-extldflags=-static -X main.goos=freebsd -X main.goarch=amd64" -o scrutiny-collector-metrics-freebsd-amd64 -tags "static netgo" collector/cmd/collector-metrics/collector-metrics.go - - chmod +x scrutiny-web-freebsd-amd64 - chmod +x scrutiny-collector-metrics-freebsd-amd64 + make all - name: Archive uses: actions/upload-artifact@v2 @@ -98,10 +42,14 @@ jobs: ${{ env.PROJECT_PATH }}/scrutiny-collector-metrics-linux-amd64 ${{ env.PROJECT_PATH }}/scrutiny-web-linux-arm64 ${{ env.PROJECT_PATH }}/scrutiny-collector-metrics-linux-arm64 - ${{ env.PROJECT_PATH }}/scrutiny-web-linux-arm - ${{ env.PROJECT_PATH }}/scrutiny-collector-metrics-linux-arm - ${{ env.PROJECT_PATH }}/scrutiny-web-windows-amd64.exe - ${{ env.PROJECT_PATH }}/scrutiny-collector-metrics-windows-amd64.exe + ${{ env.PROJECT_PATH }}/scrutiny-web-linux-arm-5 + ${{ env.PROJECT_PATH }}/scrutiny-collector-metrics-linux-arm-5 + ${{ env.PROJECT_PATH }}/scrutiny-web-linux-arm-6 + ${{ env.PROJECT_PATH }}/scrutiny-collector-metrics-linux-arm-6 + ${{ env.PROJECT_PATH }}/scrutiny-web-linux-arm-7 + ${{ env.PROJECT_PATH }}/scrutiny-collector-metrics-linux-arm-7 + ${{ env.PROJECT_PATH }}/scrutiny-web-windows-4.0-amd64.exe + ${{ env.PROJECT_PATH }}/scrutiny-collector-metrics-windows-4.0-amd64.exe ${{ env.PROJECT_PATH }}/scrutiny-web-freebsd-amd64 ${{ env.PROJECT_PATH }}/scrutiny-collector-metrics-freebsd-amd64 - uses: codecov/codecov-action@v1 diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..89393b2 --- /dev/null +++ b/Makefile @@ -0,0 +1,64 @@ +export CGO_ENABLED = 1 + + +BINARY=\ + linux/amd64 \ + linux/arm-5 \ + linux/arm-6 \ + linux/arm-7 \ + linux/arm64 \ + + +.PHONY: all $(BINARY) +all: $(BINARY) windows/amd64 freebsd/amd64 + +$(BINARY): OS = $(word 1,$(subst /, ,$*)) +$(BINARY): ARCH = $(word 2,$(subst /, ,$*)) +$(BINARY): build/scrutiny-web-%: + @echo "building web binary (OS = $(OS), ARCH = $(ARCH))" + xgo -v --targets="$(OS)/$(ARCH)" -ldflags "-extldflags=-static -X main.goos=$(OS) -X main.goarch=$(ARCH)" -out scrutiny-web -tags "static netgo sqlite_omit_load_extension" ./webapp/backend/cmd/scrutiny/ + + chmod +x "/build/scrutiny-web-$(OS)-$(ARCH)" + file "/build/scrutiny-web-$(OS)-$(ARCH)" || true + ldd "/build/scrutiny-web-$(OS)-$(ARCH)" || true + + @echo "building collector binary (OS = $(OS), ARCH = $(ARCH))" + xgo -v --targets="$(OS)/$(ARCH)" -ldflags "-extldflags=-static -X main.goos=$(OS) -X main.goarch=$(ARCH)" -out scrutiny-collector-metrics -tags "static netgo" ./collector/cmd/collector-metrics/ + + chmod +x "/build/scrutiny-collector-metrics-$(OS)-$(ARCH)" + file "/build/scrutiny-collector-metrics-$(OS)-$(ARCH)" || true + ldd "/build/scrutiny-collector-metrics-$(OS)-$(ARCH)" || true + +windows/amd64: OS = windows +windows/amd64: ARCH = amd64 +windows/amd64: + @echo "building web binary (OS = $(OS), ARCH = $(ARCH))" + xgo -v --targets="$(OS)/$(ARCH)" -ldflags "-extldflags=-static -X main.goos=$(OS) -X main.goarch=$(ARCH)" -out scrutiny-web -tags "static netgo sqlite_omit_load_extension" ./webapp/backend/cmd/scrutiny/ + + @echo "building collector binary (OS = $(OS), ARCH = $(ARCH))" + xgo -v --targets="$(OS)/$(ARCH)" -ldflags "-extldflags=-static -X main.goos=$(OS) -X main.goarch=$(ARCH)" -out scrutiny-collector-metrics -tags "static netgo" ./collector/cmd/collector-metrics/ + +freebsd/amd64: OS = freebsd +freebsd/amd64: ARCH = amd64 +freebsd/amd64: GOOS = freebsd +freebsd/amd64: GOARCH = amd64 +freebsd/amd64: CGO_ENABLED = 1 +freebsd/amd64: + mkdir -p /build + + @echo "building web binary (OS = $(OS), ARCH = $(ARCH))" + go build -ldflags "-extldflags=-static -X main.goos=$(OS) -X main.goarch=$(ARCH)" -o /build/scrutiny-web-$(OS)-$(ARCH) -tags "static netgo sqlite_omit_load_extension" webapp/backend/cmd/scrutiny/scrutiny.go + + chmod +x "/build/scrutiny-web-$(OS)-$(ARCH)" + file "/build/scrutiny-web-$(OS)-$(ARCH)" || true + ldd "/build/scrutiny-web-$(OS)-$(ARCH)" || true + + @echo "building collector binary (OS = $(OS), ARCH = $(ARCH))" + go build -ldflags "-extldflags=-static -X main.goos=$(OS) -X main.goarch=$(ARCH)" -o /build/scrutiny-collector-metrics-$(OS)-$(ARCH) -tags "static netgo" collector/cmd/collector-metrics/collector-metrics.go + + chmod +x "/build/scrutiny-collector-metrics-$(OS)-$(ARCH)" + file "/build/scrutiny-collector-metrics-$(OS)-$(ARCH)" || true + ldd "/build/scrutiny-collector-metrics-$(OS)-$(ARCH)" || true + +# clean: +# rm scrutiny-collector-metrics-* scrutiny-web-* diff --git a/docker/Dockerfile.xgo b/docker/Dockerfile.xgo new file mode 100644 index 0000000..1bb32bd --- /dev/null +++ b/docker/Dockerfile.xgo @@ -0,0 +1,7 @@ +FROM karalabe/xgo-1.13.x + +WORKDIR /go/src/github.com/analogj/scrutiny + +COPY . /go/src/github.com/analogj/scrutiny + +RUN make all