From de5627b0b778e7040c13a0a8d24558c797f2c7d4 Mon Sep 17 00:00:00 2001 From: Varun Narravula Date: Thu, 11 Dec 2025 23:44:47 -0800 Subject: [PATCH 1/3] feat(build): parallelize go-build-release using separate arch rules --- Makefile | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 4dfc1cb..e62d6b7 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,10 @@ +.PHONY: all local docker-build-release all: local +local: + CGO_ENABLED=0 go build -o ./bin/newt + docker-build-release: @if [ -z "$(tag)" ]; then \ echo "Error: tag is required. Usage: make docker-build-release tag="; \ @@ -9,17 +13,39 @@ docker-build-release: docker buildx build --platform linux/arm/v7,linux/arm64,linux/amd64 -t fosrl/newt:latest -f Dockerfile --push . docker buildx build --platform linux/arm/v7,linux/arm64,linux/amd64 -t fosrl/newt:$(tag) -f Dockerfile --push . -local: - CGO_ENABLED=0 go build -o ./bin/newt +.PHONY: go-build-release \ + go-build-release-linux-arm64 go-build-release-linux-arm32-v7 \ + go-build-release-linux-arm32-v6 go-build-release-linux-amd64 \ + go-build-release-linux-riscv64 go-build-release-darwin-arm64 \ + go-build-release-darwin-amd64 go-build-release-windows-amd64 \ + go-build-release-freebsd-amd64 go-build-release-freebsd-arm64 -go-build-release: +go-build-release-linux-arm64: CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -o bin/newt_linux_arm64 + +go-build-release-linux-arm32-v7: CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7 go build -o bin/newt_linux_arm32 + +go-build-release-linux-arm32-v6: CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=6 go build -o bin/newt_linux_arm32v6 + +go-build-release-linux-amd64: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o bin/newt_linux_amd64 + +go-build-release-linux-riscv64: CGO_ENABLED=0 GOOS=linux GOARCH=riscv64 go build -o bin/newt_linux_riscv64 + +go-build-release-darwin-arm64: CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -o bin/newt_darwin_arm64 + +go-build-release-darwin-amd64: CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o bin/newt_darwin_amd64 + +go-build-release-windows-amd64: CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o bin/newt_windows_amd64.exe + +go-build-release-freebsd-amd64: CGO_ENABLED=0 GOOS=freebsd GOARCH=amd64 go build -o bin/newt_freebsd_amd64 - CGO_ENABLED=0 GOOS=freebsd GOARCH=arm64 go build -o bin/newt_freebsd_arm64 \ No newline at end of file + +go-build-release-freebsd-arm64: + CGO_ENABLED=0 GOOS=freebsd GOARCH=arm64 go build -o bin/newt_freebsd_arm64 From 865ac4b68273db1374d28a99dd83c1f443d4507a Mon Sep 17 00:00:00 2001 From: Varun Narravula Date: Fri, 12 Dec 2025 00:03:40 -0800 Subject: [PATCH 2/3] feat(build): double-tag docker release builds with "latest" and tag name --- .github/workflows/test.yml | 2 +- Makefile | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 00d24f6..350e3b8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -25,7 +25,7 @@ jobs: run: go build - name: Build Docker image - run: make docker-build-release + run: make docker-build - name: Build binaries run: make go-build-release diff --git a/Makefile b/Makefile index e62d6b7..bd174b6 100644 --- a/Makefile +++ b/Makefile @@ -1,17 +1,24 @@ -.PHONY: all local docker-build-release +.PHONY: all local docker-build docker-build-release all: local local: CGO_ENABLED=0 go build -o ./bin/newt +docker-build: + docker build -t fosrl/newt:latest . + docker-build-release: @if [ -z "$(tag)" ]; then \ echo "Error: tag is required. Usage: make docker-build-release tag="; \ exit 1; \ fi - docker buildx build --platform linux/arm/v7,linux/arm64,linux/amd64 -t fosrl/newt:latest -f Dockerfile --push . - docker buildx build --platform linux/arm/v7,linux/arm64,linux/amd64 -t fosrl/newt:$(tag) -f Dockerfile --push . + docker buildx build . \ + --platform linux/arm/v7,linux/arm64,linux/amd64 \ + -t fosrl/newt:latest \ + -t fosrl/newt:$(tag) \ + -f Dockerfile \ + --push .PHONY: go-build-release \ go-build-release-linux-arm64 go-build-release-linux-arm32-v7 \ From 1dcb68d6942a8c598b73fa7e0e2cc9bd7baeda4c Mon Sep 17 00:00:00 2001 From: Varun Narravula Date: Fri, 12 Dec 2025 15:00:53 -0800 Subject: [PATCH 3/3] feat(ci): use matrix for building all makefile targets in parallel --- .github/workflows/test.yml | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 350e3b8..7d0b8f6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,22 +10,30 @@ on: - dev jobs: - test: - runs-on: amd64-runner - + build: + runs-on: ubuntu-latest + strategy: + matrix: + target: + - local + - docker-build + - go-build-release-darwin-amd64 + - go-build-release-darwin-arm64 + - go-build-release-freebsd-amd64 + - go-build-release-freebsd-arm64 + - go-build-release-linux-amd64 + - go-build-release-linux-arm32-v6 + - go-build-release-linux-arm32-v7 + - go-build-release-linux-riscv64 + - go-build-release-windows-amd64 steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - name: Checkout repository + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Set up Go uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0 with: go-version: 1.25 - - name: Build go - run: go build - - - name: Build Docker image - run: make docker-build - - - name: Build binaries - run: make go-build-release + - name: Build targets via `make` + run: make ${{ matrix.target }}