diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index f20aa5b8..1b79a74a 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -32,8 +32,8 @@ Example **Test Configuration**: * OS type & version: Ubuntu 20.04 * Hardware: x86-64 (e.g., x86, x86-64, arm, arm64) -* Toolchain: Docker v20.10 & Go v1.19 -* Edge Orchestration Release: v1.1.x +* Toolchain: Docker v20.10 & Go v1.23 +* Edge Orchestration Release: v1.2.x # Checklist: diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9d242546..5bc99f4b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,7 +10,7 @@ jobs: fail-fast: false matrix: arch: [x86c, x86_64c, armc, arm64c, x86_64n, x86_64a] - os: [ubuntu-20.04] + os: [ubuntu-24.04] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 @@ -18,13 +18,13 @@ jobs: - name: Setup Golang uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 with: - go-version: '1.19' + go-version: '1.23' - - name: Install Qemu - if: ${{ matrix.arch != 'x86_64c' && matrix.arch != 'x86_64a' && matrix.arch != 'x86_64n'}} - run: | - sudo apt-get update - sudo apt-get install -y qemu binfmt-support qemu-user-static + # - name: Install Qemu + # if: ${{ matrix.arch != 'x86_64c' && matrix.arch != 'x86_64a' && matrix.arch != 'x86_64n'}} + # run: | + # sudo apt-get update + # sudo apt-get install -y qemu binfmt-support qemu-user-static - name: Install Android SDK & NDK if: ${{ matrix.arch == 'x86_64a' }} diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 5ab99cdf..3d2e58b1 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -33,7 +33,7 @@ jobs: - name: Setup Golang uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 with: - go-version: '1.19' + go-version: '1.23' - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@afb54ba388a7dca6ecae48f608c4ff05ff4cc77a diff --git a/.github/workflows/go-fuzz-test.yml b/.github/workflows/go-fuzz-test.yml index f2caf34a..9d83189e 100644 --- a/.github/workflows/go-fuzz-test.yml +++ b/.github/workflows/go-fuzz-test.yml @@ -18,7 +18,7 @@ jobs: - name: Setup Golang uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 with: - go-version: '1.19' + go-version: '1.23' - name: Fuzz test run: | diff --git a/.github/workflows/lint-vet-gofmt-staticcheck-analysis.yml b/.github/workflows/lint-vet-gofmt-staticcheck-analysis.yml index e3b82aaa..aa23cec2 100644 --- a/.github/workflows/lint-vet-gofmt-staticcheck-analysis.yml +++ b/.github/workflows/lint-vet-gofmt-staticcheck-analysis.yml @@ -13,7 +13,7 @@ jobs: - name: Setup Golang uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 with: - go-version: '1.19' + go-version: '1.23' - name: Set env vars (golint) run: | diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 916c7cca..f6de78a3 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -17,7 +17,7 @@ jobs: - name: Setup Golang uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 with: - go-version: '1.19' + go-version: '1.23' - name: Set up QEMU uses: docker/setup-qemu-action@49b3bc8e6bdd4a60e6116a5414239cba5943d3cf diff --git a/.github/workflows/test-suite.yml b/.github/workflows/test-suite.yml index 48c9a795..f95f8c40 100644 --- a/.github/workflows/test-suite.yml +++ b/.github/workflows/test-suite.yml @@ -17,7 +17,7 @@ jobs: - name: Setup Golang uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 with: - go-version: '1.19' + go-version: '1.23' - name: Set env vars (gocov) run: | diff --git a/Makefile b/Makefile index 4679da02..9e313f74 100644 --- a/Makefile +++ b/Makefile @@ -79,7 +79,7 @@ ifeq ($(CONFIG_ARM),y) INTERFACE_OUT_INC_DIR := $(INTERFACE_OUT_DIR)/inc/linux_arm INTERFACE_OUT_BIN_DIR := $(INTERFACE_OUT_DIR)/bin/linux_arm INTERFACE_OUT_LIB_DIR := $(INTERFACE_OUT_DIR)/lib/linux_arm - CONTAINER_ARCH="arm32v7" + CONTAINER_ARCH="arm/v7" GOARCH=arm CC="arm-linux-gnueabi-gcc" GOARM=7 @@ -88,7 +88,7 @@ else ifeq ($(CONFIG_ARM64),y) INTERFACE_OUT_INC_DIR := $(INTERFACE_OUT_DIR)/inc/linux_aarch64 INTERFACE_OUT_BIN_DIR := $(INTERFACE_OUT_DIR)/bin/linux_aarch64 INTERFACE_OUT_LIB_DIR := $(INTERFACE_OUT_DIR)/lib/linux_aarch64 - CONTAINER_ARCH="arm64v8" + CONTAINER_ARCH="arm64" GOARCH=arm64 CC="aarch64-linux-gnu-gcc" ANDROID_TARGET="android/arm64" @@ -96,7 +96,7 @@ else ifeq ($(CONFIG_X86),y) INTERFACE_OUT_INC_DIR := $(INTERFACE_OUT_DIR)/inc/linux_x86 INTERFACE_OUT_BIN_DIR := $(INTERFACE_OUT_DIR)/bin/linux_x86 INTERFACE_OUT_LIB_DIR := $(INTERFACE_OUT_DIR)/lib/linux_x86 - CONTAINER_ARCH="i386" + CONTAINER_ARCH="386" GOARCH=386 CC="gcc" ANDROID_TARGET="android/386" @@ -181,19 +181,22 @@ build_docker_container: $(call print_header, "Create Docker container $(CONTAINER_ARCH)") -docker rm -f $(PKG_NAME) -docker rmi -f $(DOCKER_IMAGE):$(CONTAINER_VERSION) - $(Q) mkdir -p $(BASE_DIR)/bin/qemu -ifeq ($(CONFIG_ARM),y) -ifneq ($(shell uname -m),armv7l) - $(Q) cp /usr/bin/qemu-arm-static $(BASE_DIR)/bin/qemu -endif -endif -ifeq ($(CONFIG_ARM64),y) -ifneq ($(shell uname -m),aarch64) - $(Q) cp /usr/bin/qemu-aarch64-static $(BASE_DIR)/bin/qemu -endif -endif - $(DOCKER) build --tag $(DOCKER_IMAGE):$(CONTAINER_VERSION) --file $(BASE_DIR)/Dockerfile --build-arg PLATFORM=$(CONTAINER_ARCH) . + -docker buildx create --use + +# $(Q) mkdir -p $(BASE_DIR)/bin/qemu +#ifeq ($(CONFIG_ARM),y) +#ifneq ($(shell uname -m),armv7l) +# $(Q) cp /usr/bin/qemu-arm-static $(BASE_DIR)/bin/qemu +#endif +#endif +#ifeq ($(CONFIG_ARM64),y) +#ifneq ($(shell uname -m),aarch64) +# $(Q) cp /usr/bin/qemu-aarch64-static $(BASE_DIR)/bin/qemu +#endif +#endif + $(DOCKER) buildx build --platform linux/$(CONTAINER_ARCH) --tag $(DOCKER_IMAGE):$(CONTAINER_VERSION) --file $(BASE_DIR)/Dockerfile . -docker save -o $(BASE_DIR)/bin/edge-orchestration.tar $(DOCKER_IMAGE) +# docker buildx build --platform linux/arm/v7 --tag lfedge/edge-home-orchestration-go:latest --file Dockerfile --load . ## go test and coverage test-go: diff --git a/configs/defdockerfiles/alpine b/configs/defdockerfiles/alpine index cc7887bf..50eb1847 100644 --- a/configs/defdockerfiles/alpine +++ b/configs/defdockerfiles/alpine @@ -1,7 +1,6 @@ # Docker image for "edge-orchestration" ### alpine:3.12 -ARG PLATFORM -FROM $PLATFORM/alpine:3.12 +FROM alpine:3.12 # environment variables ENV TARGET_DIR=/edge-orchestration @@ -12,12 +11,12 @@ ENV MNEDC_BROADCAST_PORT=3333 ENV ZEROCONF_PORT=42425 ENV APP_BIN_DIR=bin ENV APP_NAME=edge-orchestration -ENV APP_QEMU_DIR=$APP_BIN_DIR/qemu +# ENV APP_QEMU_DIR=$APP_BIN_DIR/qemu ENV BUILD_DIR=build # copy files COPY $APP_BIN_DIR/$APP_NAME $BUILD_DIR/package/run.sh $TARGET_DIR/ -COPY $APP_QEMU_DIR/ /usr/bin/ +# COPY $APP_QEMU_DIR/ /usr/bin/ RUN mkdir -p $TARGET_DIR/res/ # install required tools diff --git a/configs/defdockerfiles/ubuntu b/configs/defdockerfiles/ubuntu index dd65da34..56ee3161 100644 --- a/configs/defdockerfiles/ubuntu +++ b/configs/defdockerfiles/ubuntu @@ -1,7 +1,6 @@ # Docker image for "edge-orchestration" -### ubuntu:20.04 -ARG PLATFORM -FROM $PLATFORM/ubuntu:20.04 +### ubuntu:24.04 +FROM ubuntu:24.04 # environment variables ENV TARGET_DIR=/edge-orchestration @@ -13,19 +12,22 @@ ENV ZEROCONF_PORT=42425 ENV UI_PORT=49153 ENV APP_BIN_DIR=bin ENV APP_NAME=edge-orchestration -ENV APP_QEMU_DIR=$APP_BIN_DIR/qemu +# ENV APP_QEMU_DIR=$APP_BIN_DIR/qemu ENV BUILD_DIR=build ENV WEB_DIR=web # copy files COPY $APP_BIN_DIR/$APP_NAME $BUILD_DIR/package/run.sh $TARGET_DIR/ -COPY $APP_QEMU_DIR/ /usr/bin/ +# COPY $APP_QEMU_DIR/ /usr/bin/ RUN mkdir -p $TARGET_DIR/res/ COPY $WEB_DIR/$BUILD_DIR/ $TARGET_DIR/$WEB_DIR/ # install required tools -RUN apt-get update -RUN apt-get install -y net-tools iproute2 +# RUN apt-get update +# RUN apt-get install -y net-tools iproute2 + +RUN apt update +RUN apt install -y net-tools iproute2 # expose ports EXPOSE $HTTP_PORT $MDNS_PORT $ZEROCONF_PORT $MNEDC_PORT $MNEDC_BROADCAST_PORT $UI_PORT diff --git a/configs/defdockerfiles/ubuntu_multistage b/configs/defdockerfiles/ubuntu_multistage index 52210930..7cb3734d 100644 --- a/configs/defdockerfiles/ubuntu_multistage +++ b/configs/defdockerfiles/ubuntu_multistage @@ -1,9 +1,9 @@ # Docker image for "edge-orchestration" -FROM --platform=$TARGETPLATFORM ubuntu:20.04 AS builder +FROM --platform=$TARGETPLATFORM ubuntu:24.04 AS builder # environment variables ARG TARGETPLATFORM -ENV GOVERSION=1.19.1 +ENV GOVERSION=1.23.2 ENV GOPATH=/usr/local/go ENV TARGET_DIR=/edge-orchestration @@ -19,7 +19,7 @@ RUN script/install-golang.sh ARG TARGETVERSION RUN make buildx_binary VERSION=$TARGETVERSION -FROM ubuntu:20.04 +FROM ubuntu:24.04 # environment variables ENV TARGET_DIR=/edge-orchestration @@ -44,8 +44,11 @@ COPY --from=builder $TARGET_DIR/$WEB_DIR/$BUILD_DIR $TARGET_DIR/$WEB_DIR/ RUN mkdir -p $TARGET_DIR/res/ # install required tools -RUN apt-get update -RUN apt-get install -y net-tools iproute2 +# RUN apt-get update +# RUN apt-get install -y net-tools iproute2 + +RUN apt update +RUN apt install -y net-tools iproute2 # expose ports EXPOSE $HTTP_PORT $MDNS_PORT $ZEROCONF_PORT $MNEDC_PORT $MNEDC_BROADCAST_PORT $UI_PORT diff --git a/docs/platforms/x86_64_linux/x86_64_linux.md b/docs/platforms/x86_64_linux/x86_64_linux.md index e28bb4ab..62678e33 100644 --- a/docs/platforms/x86_64_linux/x86_64_linux.md +++ b/docs/platforms/x86_64_linux/x86_64_linux.md @@ -37,7 +37,7 @@ Please see the below [How to work](#how-to-work) to know how to run Edge Orchest `$ sudo usermod -aG docker $USER` - go compiler - - Version: 1.19 (or above) + - Version: 1.23 (or above) - [How to install](https://golang.org/dl/) > To build Edge Orchestrator from Go sources, you need to set GOPATH environment variable: diff --git a/go.mod b/go.mod index 86fbb802..293076dc 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/lf-edge/edge-home-orchestration-go -go 1.19 +go 1.23 require ( github.com/casbin/casbin v1.9.1 diff --git a/internal/common/resourceutil/resourceutil_test.go b/internal/common/resourceutil/resourceutil_test.go index 36f8e1e5..09f3cf87 100644 --- a/internal/common/resourceutil/resourceutil_test.go +++ b/internal/common/resourceutil/resourceutil_test.go @@ -258,7 +258,7 @@ func TestGetCPUUsage(t *testing.T) { cpuUsage, err := resourceIns.GetResource(CPUUsage) if err != nil { - t.Errorf(err.Error()) + t.Error(err.Error()) } if cpuUsage != dummyCPUPercentResult { @@ -291,7 +291,7 @@ func TestGetCPUFreq(t *testing.T) { cpuFreq, err := resourceIns.GetResource(CPUFreq) if err != nil { - t.Errorf(err.Error()) + t.Error(err.Error()) } if cpuFreq != dummyCPUFreqResult { @@ -324,7 +324,7 @@ func TestGetCPUCount(t *testing.T) { cpuCount, err := resourceIns.GetResource(CPUCount) if err != nil { - t.Errorf(err.Error()) + t.Error(err.Error()) } if cpuCount != dummyCPUCountResult { @@ -357,7 +357,7 @@ func TestGetMemAvailable(t *testing.T) { memAvailable, err := resourceIns.GetResource(MemAvailable) if err != nil { - t.Errorf(err.Error()) + t.Error(err.Error()) } if memAvailable != dummyMemAvailableResult { @@ -390,7 +390,7 @@ func TestGetMemFree(t *testing.T) { memFree, err := resourceIns.GetResource(MemFree) if err != nil { - t.Errorf(err.Error()) + t.Error(err.Error()) } if memFree != dummyMemFreeResult { @@ -423,7 +423,7 @@ func TestGetNetMBps(t *testing.T) { netMBps, err := resourceIns.GetResource(NetMBps) if err != nil { - t.Errorf(err.Error()) + t.Error(err.Error()) } if netMBps != dummyNetMBpsResult { @@ -456,7 +456,7 @@ func TestGetNetBandwidth(t *testing.T) { netBandwidth, err := resourceIns.GetResource(NetBandwidth) if err != nil { - t.Errorf(err.Error()) + t.Error(err.Error()) } if netBandwidth != dummyNetBandwidthResult { diff --git a/internal/controller/configuremgr/configuremgr_test.go b/internal/controller/configuremgr/configuremgr_test.go index c8777f76..2c97cd09 100644 --- a/internal/controller/configuremgr/configuremgr_test.go +++ b/internal/controller/configuremgr/configuremgr_test.go @@ -62,7 +62,7 @@ func TestSetConfigPath(t *testing.T) { t.Errorf("%s != %s", defaultConfPath, configuremgrObj.confpath) } } else { - t.Errorf(err.Error()) + t.Error(err.Error()) } }) t.Run("No File", func(t *testing.T) { @@ -94,7 +94,7 @@ func TestBasicMockConfigureMgr(t *testing.T) { os.RemoveAll(dir) err := os.Mkdir(dir, 0775) if err != nil { - t.Errorf(err.Error()) + t.Error(err.Error()) } else { files, err := os.ReadDir(src) if err != nil { @@ -104,7 +104,7 @@ func TestBasicMockConfigureMgr(t *testing.T) { fileContent, _ := os.ReadFile(filepath.Join(src, file.Name())) err = os.WriteFile(filepath.Join(dir, file.Name()), []byte(fileContent), 0664) if err != nil { - t.Errorf(err.Error()) + t.Error(err.Error()) } } } diff --git a/internal/controller/discoverymgr/mnedc/server/server.go b/internal/controller/discoverymgr/mnedc/server/server.go index b0c00a68..5167f73b 100644 --- a/internal/controller/discoverymgr/mnedc/server/server.go +++ b/internal/controller/discoverymgr/mnedc/server/server.go @@ -19,13 +19,14 @@ package server import ( "errors" - "github.com/lf-edge/edge-home-orchestration-go/internal/common/logmgr" - "github.com/lf-edge/edge-home-orchestration-go/internal/common/networkhelper" "math/rand" "net" "sync" "time" + "github.com/lf-edge/edge-home-orchestration-go/internal/common/logmgr" + "github.com/lf-edge/edge-home-orchestration-go/internal/common/networkhelper" + "github.com/lf-edge/edge-home-orchestration-go/internal/controller/discoverymgr/mnedc/connectionutil" "github.com/lf-edge/edge-home-orchestration-go/internal/controller/discoverymgr/mnedc/tunmgr" @@ -387,11 +388,11 @@ func generateServerIP() net.IP { privateIP = privateIP + "/16" _, subnet, _ := net.ParseCIDR(privateIP) - rand.Seed(time.Now().UnixNano()) + r := rand.New(rand.NewSource(time.Now().UnixNano())) for { //Assigning new Virtual IP address in case of clash with Private IP - serverVirtualIP = net.IPv4(10, byte(rand.Intn(255)), byte(rand.Intn(255)), 1) + serverVirtualIP = net.IPv4(10, byte(r.Intn(255)), byte(r.Intn(255)), 1) if !subnet.Contains(serverVirtualIP) { break } diff --git a/internal/controller/securemgr/authenticator/authenticator.go b/internal/controller/securemgr/authenticator/authenticator.go index 56b2d83f..1331c348 100644 --- a/internal/controller/securemgr/authenticator/authenticator.go +++ b/internal/controller/securemgr/authenticator/authenticator.go @@ -59,9 +59,10 @@ func init() { var alphabet = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") func randString(n int) string { + r := rand.New(rand.NewSource(time.Now().UnixNano())) b := make([]rune, n) for i := range b { - b[i] = alphabet[rand.Intn(len(alphabet))] + b[i] = alphabet[r.Intn(len(alphabet))] } return string(b) } @@ -81,7 +82,6 @@ func Init(passPhraseJWTPath string) { var err error passphrase, err = os.ReadFile(passPhraseJWTFilePath) if err != nil { - rand.Seed(time.Now().UnixNano()) passphrase = []byte(randString(16)) err = os.WriteFile(passPhraseJWTFilePath, passphrase, 0666) if err != nil { diff --git a/third_party/zeroconf/go.mod b/third_party/zeroconf/go.mod index 1f85397b..c4ab1aa9 100644 --- a/third_party/zeroconf/go.mod +++ b/third_party/zeroconf/go.mod @@ -1,6 +1,6 @@ module github.com/grandcat/zeroconf -go 1.19 +go 1.23 require ( github.com/cenkalti/backoff v2.2.1+incompatible