This is an automated email from the ASF dual-hosted git repository.

kezhenxu94 pushed a commit to branch docker/crossplatform
in repository https://gitbox.apache.org/repos/asf/skywalking-cli.git

commit b5b54e68a7c2ff7e5e3caf6078b42d4ecdca44cc
Author: kezhenxu94 <kezhenx...@apache.org>
AuthorDate: Tue Nov 16 17:35:42 2021 +0800

    Add cross platform build targets
---
 .github/workflows/publish-docker.yaml          |  8 +--
 Makefile                                       | 78 +++++++++++++-------------
 cmd/swctl/main.go                              |  3 +-
 internal/commands/install/manifest/manifest.go |  3 +-
 pkg/graphql/dashboard/global.go                |  4 +-
 5 files changed, 47 insertions(+), 49 deletions(-)

diff --git a/.github/workflows/publish-docker.yaml 
b/.github/workflows/publish-docker.yaml
index 6eda3e0..66684c0 100644
--- a/.github/workflows/publish-docker.yaml
+++ b/.github/workflows/publish-docker.yaml
@@ -20,6 +20,7 @@ on:
   push:
     branches:
       - master
+      - docker/crossplatform
 
 env:
   SKIP_TEST: true
@@ -50,8 +51,5 @@ jobs:
           registry: ${{ env.HUB }}
           username: ${{ github.actor }}
           password: ${{ secrets.GITHUB_TOKEN }}
-      - name: Build docker image
-        run: |
-          make docker.push || make docker.push
-          docker tag $HUB/$APP_NAME:{$VERSION,latest}
-          docker push $HUB/$APP_NAME:latest
+      - name: Build and push docker images
+        run: make docker.push || make docker.push
diff --git a/Makefile b/Makefile
index ef592ff..d8c8fac 100644
--- a/Makefile
+++ b/Makefile
@@ -25,65 +25,65 @@ HUB ?= docker.io/apache
 RELEASE_BIN = skywalking-cli-$(VERSION)-bin
 RELEASE_SRC = skywalking-cli-$(VERSION)-src
 
-OS = $(shell uname)
-
 GO = go
 GO_PATH = $$($(GO) env GOPATH)
 GO_BUILD = $(GO) build
 GO_GET = $(GO) get
 GO_INSTALL = $(GO) install
 GO_TEST = $(GO) test
-GO_LINT = $(GO_PATH)/bin/golangci-lint
-GO_LICENSER = $(GO_PATH)/bin/go-licenser
-ARCH := $(shell uname)
-OSNAME := $(if $(findstring Darwin,$(ARCH)),darwin,linux)
 GO_BUILD_FLAGS = -v
 GO_BUILD_LDFLAGS = -X main.version=$(VERSION)
 
-PLATFORMS := windows linux darwin
-os = $(word 1, $@)
-ARCH = amd64
+GO_LINT = golangci-lint
+LICENSE_EYE = license-eye
 
-SHELL = /bin/bash
+BUILDS := darwin-amd64 darwin-arm64 linux-386 linux-amd64 linux-arm64 
windows-386 windows-amd64
+BUILD_RULE = GOOS=$(GOOS) GOARCH=$(GOARCH) $(GO_BUILD) $(GO_BUILD_FLAGS) 
-ldflags "$(GO_BUILD_LDFLAGS)" -o 
$(OUT_DIR)/$(BINARY)-$(VERSION)-$(GOOS)-$(GOARCH) cmd/swctl/main.go
 
 all: clean license deps lint test build
 
-tools:
-       mkdir -p $(GO_PATH)/bin
-       $(GO_LINT) version || curl -sfL 
https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh 
-s -- -b $(GO_PATH)/bin
-       $(GO_LICENSER) -version || GO111MODULE=off $(GO_GET) -u 
github.com/elastic/go-licenser
+.PHONY: $(BUILDS)
+$(BUILDS): GOOS = $(word 1,$(subst -, ,$@))
+$(BUILDS): GOARCH = $(word 2,$(subst -, ,$@))
+$(BUILDS):
+       $(BUILD_RULE)
+
+.PHONY: build
+build: $(BUILDS)
 
-deps: tools
-       $(GO_GET) -v -t -d ./...
+.PHONY: deps
+deps:
+       @$(GO_GET) -v -t -d ./...
 
-.PHONY: $(PLATFORMS)
-$(PLATFORMS): clean
-       mkdir -p $(OUT_DIR)
-       GOOS=$(os) GOARCH=$(ARCH) $(GO_BUILD) $(GO_BUILD_FLAGS) -ldflags 
"$(GO_BUILD_LDFLAGS)" -o $(OUT_DIR)/$(BINARY)-$(VERSION)-$(os)-$(ARCH) 
cmd/swctl/main.go
+$(GO_LINT):
+       @$(GO_LINT) version > /dev/null 2>&1 || go install 
github.com/golangci/golangci-lint/cmd/golangci-lint@latest
+$(LICENSE_EYE):
+       @$(LICENSE_EYE) --version > /dev/null 2>&1 || go install 
github.com/apache/skywalking-eyes/cmd/license-eye@latest
 
 .PHONY: lint
-lint: tools
+lint: $(GO_LINT)
        $(GO_LINT) run -v --timeout 5m ./...
+.PHONY: fix-lint
+fix-lint: $(GO_LINT)
+       $(GO_LINT) run -v --fix ./...
+
+.PHONY: license
+license: clean $(LICENSE_EYE)
+       @$(LICENSE_EYE) header check
+.PHONY: fix-license
+fix-license: clean $(LICENSE_EYE)
+       @$(LICENSE_EYE) header fix
+
+.PHONY: fix
+fix: fix-lint fix-license
 
 .PHONY: test
 test: clean
        $(GO_TEST) ./... -coverprofile=coverage.txt -covermode=atomic
 
-.PHONY: build
-build: deps windows linux darwin
-
-.PHONY: license
-license: clean tools
-       $(GO_LICENSER) -d -licensor='Apache Software Foundation (ASF)' .
-
 .PHONY: verify
 verify: clean license lint test
 
-.PHONY: fix
-fix: tools
-       $(GO_LINT) run -v --fix ./...
-       $(GO_LICENSER) -licensor='Apache Software Foundation (ASF)' .
-
 .PHONY: coverage
 coverage: test
        bash <(curl -s https://codecov.io/bash) -t 
a5af28a3-92a2-4b35-9a77-54ad99b1ae00
@@ -137,16 +137,18 @@ check-codegen:
        fi
 
 .PHONY: docker
-docker: clean
-       docker build --build-arg VERSION=$(VERSION) . -t 
$(HUB)/$(APP_NAME):$(VERSION)
+docker:
+       docker buildx create --use
+       docker buildx build $(PUSH) --platform 
linux/386,linux/amd64,linux/arm64 --build-arg VERSION=$(VERSION) . -t 
$(HUB)/$(APP_NAME):$(VERSION) -t $(HUB)/$(APP_NAME):latest
 
 .PHONY: docker.push
+docker.push: PUSH = --push
 docker.push: docker
-       docker push $(HUB)/$(APP_NAME):$(VERSION)
 
 .PHONY: install
-install: $(OSNAME)
-       -cp $(OUT_DIR)/$(BINARY)-$(VERSION)-$(OSNAME)-$(ARCH) $(DESTDIR)/swctl
+install: clean
+       $(BUILD_RULE)
+       -cp $(OUT_DIR)/$(BINARY)-$(VERSION)-$(OSNAME)-* $(DESTDIR)/swctl
 
 .PHONY: uninstall
 uninstall: $(OSNAME)
diff --git a/cmd/swctl/main.go b/cmd/swctl/main.go
index 65b7bdb..f52ea7e 100644
--- a/cmd/swctl/main.go
+++ b/cmd/swctl/main.go
@@ -18,7 +18,6 @@
 package main
 
 import (
-       "io/ioutil"
        "os"
        "runtime"
 
@@ -192,7 +191,7 @@ func expandConfigFile(c *cli.Context) error {
 func tryConfigFile(flags []cli.Flag) cli.BeforeFunc {
        return func(c *cli.Context) error {
                configFile := c.String("config")
-               if bytes, err := ioutil.ReadFile(configFile); err == nil {
+               if bytes, err := os.ReadFile(configFile); err == nil {
                        log.Debug("Using configurations:\n", string(bytes))
 
                        err = altsrc.InitInputSourceWithContext(flags, 
altsrc.NewYamlSourceFromFlagFunc("config"))(c)
diff --git a/internal/commands/install/manifest/manifest.go 
b/internal/commands/install/manifest/manifest.go
index 1e76779..2d1b72d 100644
--- a/internal/commands/install/manifest/manifest.go
+++ b/internal/commands/install/manifest/manifest.go
@@ -21,7 +21,6 @@ import (
        "bufio"
        "fmt"
        "io"
-       "io/ioutil"
        "os"
        "strings"
 
@@ -98,7 +97,7 @@ func loadOverlay(file string, in io.Reader, out interface{}) 
error {
                        }
                }
        } else {
-               b, err := ioutil.ReadFile(file)
+               b, err := os.ReadFile(file)
                if err != nil {
                        return err
                }
diff --git a/pkg/graphql/dashboard/global.go b/pkg/graphql/dashboard/global.go
index 3586de4..13b1aad 100644
--- a/pkg/graphql/dashboard/global.go
+++ b/pkg/graphql/dashboard/global.go
@@ -19,7 +19,7 @@ package dashboard
 
 import (
        "bytes"
-       "io/ioutil"
+       "os"
        "strings"
        "sync"
 
@@ -100,7 +100,7 @@ func LoadTemplate(filename string) (*GlobalTemplate, error) 
{
        if filename == DefaultTemplatePath {
                byteValue = []byte(assets.Read(filename))
        } else {
-               byteValue, err = ioutil.ReadFile(filename)
+               byteValue, err = os.ReadFile(filename)
                if err != nil {
                        return nil, err
                }

Reply via email to