use Make + XGO to build static binaries. attempt #3

pull/102/head
Jason Kulatunga 5 years ago
parent bdbb7d0e1b
commit 75b78a45c0

@ -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

@ -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-*

@ -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
Loading…
Cancel
Save