From c142779ee809e4e5fbc94204c6a27281c70a8e86 Mon Sep 17 00:00:00 2001 From: David Wertenteil Date: Tue, 7 Jun 2022 09:20:32 +0300 Subject: [PATCH] adding client build --- .github/workflows/build.yaml | 3 +- .github/workflows/build_dev.yaml | 3 +- .github/workflows/master_pr_checks.yaml | 1 + build.py | 78 +++++++++++++------------ build/Dockerfile | 2 + core/cautils/versioncheck.go | 9 ++- 6 files changed, 55 insertions(+), 41 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index b2c1338e..a043f785 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -46,6 +46,7 @@ jobs: - name: Build env: RELEASE: v2.0.${{ github.run_number }} + CLIENT: release ArmoBEServer: api.armo.cloud ArmoAuthServer: auth.armo.cloud ArmoERServer: report.armo.cloud @@ -114,7 +115,7 @@ jobs: run: docker login -u="${QUAY_USERNAME}" -p="${QUAY_PASSWORD}" quay.io - name: Build the Docker image - run: docker buildx build . --file build/Dockerfile --tag ${{ steps.image-name.outputs.IMAGE_NAME }}:${{ steps.image-version.outputs.IMAGE_VERSION }} --tag ${{ steps.image-name.outputs.IMAGE_NAME }}:latest --build-arg image_version=${{ steps.image-version.outputs.IMAGE_VERSION }} --push --platform linux/amd64,linux/arm64 + run: docker buildx build . --file build/Dockerfile --tag ${{ steps.image-name.outputs.IMAGE_NAME }}:${{ steps.image-version.outputs.IMAGE_VERSION }} --tag ${{ steps.image-name.outputs.IMAGE_NAME }}:latest --build-arg image_version=${{ steps.image-version.outputs.IMAGE_VERSION }} --build-arg client=image-release --push --platform linux/amd64,linux/arm64 # - name: Login to GitHub Container Registry # uses: docker/login-action@v1 diff --git a/.github/workflows/build_dev.yaml b/.github/workflows/build_dev.yaml index 50b114be..8842b2ca 100644 --- a/.github/workflows/build_dev.yaml +++ b/.github/workflows/build_dev.yaml @@ -40,6 +40,7 @@ jobs: - name: Build env: RELEASE: v2.0.${{ github.run_number }} + CLIENT: release-dev ArmoBEServer: api.armo.cloud ArmoAuthServer: auth.armo.cloud ArmoERServer: report.armo.cloud @@ -93,4 +94,4 @@ jobs: run: docker login -u="${QUAY_USERNAME}" -p="${QUAY_PASSWORD}" quay.io - name: Build the Docker image - run: docker buildx build . --file build/Dockerfile --tag ${{ steps.image-name.outputs.IMAGE_NAME }}:${{ steps.image-version.outputs.IMAGE_VERSION }} --build-arg image_version=${{ steps.image-version.outputs.IMAGE_VERSION }} --push --platform linux/amd64,linux/arm64 + run: docker buildx build . --file build/Dockerfile --tag ${{ steps.image-name.outputs.IMAGE_NAME }}:${{ steps.image-version.outputs.IMAGE_VERSION }} --build-arg image_version=${{ steps.image-version.outputs.IMAGE_VERSION }} --build-arg client=image-dev --push --platform linux/amd64,linux/arm64 diff --git a/.github/workflows/master_pr_checks.yaml b/.github/workflows/master_pr_checks.yaml index 8fed14f2..fa09b0ad 100644 --- a/.github/workflows/master_pr_checks.yaml +++ b/.github/workflows/master_pr_checks.yaml @@ -33,6 +33,7 @@ jobs: - name: Build env: RELEASE: v2.0.${{ github.run_number }} + CLIENT: test ArmoBEServer: api.armo.cloud ArmoAuthServer: auth.armo.cloud ArmoERServer: report.armo.cloud diff --git a/build.py b/build.py index 1cf4fc9a..56e2d646 100644 --- a/build.py +++ b/build.py @@ -10,66 +10,68 @@ ER_SERVER_CONST = BASE_GETTER_CONST + ".ArmoERURL" WEBSITE_CONST = BASE_GETTER_CONST + ".ArmoFEURL" AUTH_SERVER_CONST = BASE_GETTER_CONST + ".armoAUTHURL" -def checkStatus(status, msg): +def check_status(status, msg): if status != 0: sys.stderr.write(msg) exit(status) -def getBuildDir(): - currentPlatform = platform.system() - buildDir = "./build/" +def get_build_dir(): + current_platform = platform.system() + build_dir = "./build/" - if currentPlatform == "Windows": buildDir += "windows-latest" - elif currentPlatform == "Linux": buildDir += "ubuntu-latest" - elif currentPlatform == "Darwin": buildDir += "macos-latest" - else: raise OSError("Platform %s is not supported!" % (currentPlatform)) + if current_platform == "Windows": build_dir += "windows-latest" + elif current_platform == "Linux": build_dir += "ubuntu-latest" + elif current_platform == "Darwin": build_dir += "macos-latest" + else: raise OSError("Platform %s is not supported!" % (current_platform)) - return buildDir + return build_dir -def getPackageName(): - packageName = "kubescape" - # if platform.system() == "Windows": packageName += ".exe" +def get_package_name(): + package_name = "kubescape" + # if platform.system() == "Windows": package_name += ".exe" - return packageName + return package_name def main(): print("Building Kubescape") - # print environment variables - # print(os.environ) - # Set some variables - packageName = getPackageName() - buildUrl = "github.com/armosec/kubescape/v2/core/cautils.BuildNumber" - releaseVersion = os.getenv("RELEASE") - ArmoBEServer = os.getenv("ArmoBEServer") - ArmoERServer = os.getenv("ArmoERServer") - ArmoWebsite = os.getenv("ArmoWebsite") - ArmoAuthServer = os.getenv("ArmoAuthServer") + package_name = get_package_name() + build_url = "github.com/armosec/kubescape/v2/core/cautils.BuildNumber" + release_version = os.getenv("RELEASE") + armo_be_server = os.getenv("ArmoBEServer") + armo_er_server = os.getenv("ArmoERServer") + armo_website = os.getenv("ArmoWebsite") + armo_auth_server = os.getenv("ArmoAuthServer") + client_var = "github.com/armosec/kubescape/v2/core/cautils.Client" + client_name = os.getenv("CLIENT") + # Create build directory - buildDir = getBuildDir() + build_dir = get_build_dir() - ks_file = os.path.join(buildDir, packageName) + ks_file = os.path.join(build_dir, package_name) hash_file = ks_file + ".sha256" - if not os.path.isdir(buildDir): - os.makedirs(buildDir) + if not os.path.isdir(build_dir): + os.makedirs(build_dir) # Build kubescape ldflags = "-w -s" - if releaseVersion: - ldflags += " -X {}={}".format(buildUrl, releaseVersion) - if ArmoBEServer: - ldflags += " -X {}={}".format(BE_SERVER_CONST, ArmoBEServer) - if ArmoERServer: - ldflags += " -X {}={}".format(ER_SERVER_CONST, ArmoERServer) - if ArmoWebsite: - ldflags += " -X {}={}".format(WEBSITE_CONST, ArmoWebsite) - if ArmoAuthServer: - ldflags += " -X {}={}".format(AUTH_SERVER_CONST, ArmoAuthServer) + if release_version: + ldflags += " -X {}={}".format(build_url, release_version) + if client_name: + ldflags += " -X {}={}".format(client_var, client_name) + if armo_be_server: + ldflags += " -X {}={}".format(BE_SERVER_CONST, armo_be_server) + if armo_er_server: + ldflags += " -X {}={}".format(ER_SERVER_CONST, armo_er_server) + if armo_website: + ldflags += " -X {}={}".format(WEBSITE_CONST, armo_website) + if armo_auth_server: + ldflags += " -X {}={}".format(AUTH_SERVER_CONST, armo_auth_server) build_command = ["go", "build", "-o", ks_file, "-ldflags" ,ldflags] @@ -77,7 +79,7 @@ def main(): print("Build command: {}".format(" ".join(build_command))) status = subprocess.call(build_command) - checkStatus(status, "Failed to build kubescape") + check_status(status, "Failed to build kubescape") sha256 = hashlib.sha256() with open(ks_file, "rb") as kube: diff --git a/build/Dockerfile b/build/Dockerfile index 565b0752..96478003 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -2,8 +2,10 @@ FROM golang:1.17-alpine as builder #ENV GOPROXY=https://goproxy.io,direct ARG image_version +ARG client ENV RELEASE=$image_version +ENV CLIENT=$client ENV GO111MODULE= diff --git a/core/cautils/versioncheck.go b/core/cautils/versioncheck.go index a3ebfd7e..d3fe30df 100644 --- a/core/cautils/versioncheck.go +++ b/core/cautils/versioncheck.go @@ -17,6 +17,7 @@ const SKIP_VERSION_CHECK_DEPRECATED = "KUBESCAPE_SKIP_UPDATE_CHECK" const SKIP_VERSION_CHECK = "KS_SKIP_UPDATE_CHECK" var BuildNumber string +var Client string const UnknownBuildNumber = "unknown" @@ -48,10 +49,12 @@ type VersionCheckHandler struct { } type VersionCheckRequest struct { Client string `json:"client"` // kubescape + ClientBuild string `json:"clientBuild"` // client build environment ClientVersion string `json:"clientVersion"` // kubescape version Framework string `json:"framework"` // framework name FrameworkVersion string `json:"frameworkVersion"` // framework version - ScanningTarget string `json:"target"` // scanning target- cluster/yaml + ScanningTarget string `json:"target"` // Deprecated + ScanningContext string `json:"context"` // scanning context- cluster/file/gitURL/localGit/dir } type VersionCheckResponse struct { @@ -74,8 +77,12 @@ func NewVersionCheckRequest(buildNumber, frameworkName, frameworkVersion, scanni if scanningTarget == "" { scanningTarget = "unknown" } + if Client == "" { + Client = "local-build" + } return &VersionCheckRequest{ Client: "kubescape", + ClientBuild: Client, ClientVersion: buildNumber, Framework: frameworkName, FrameworkVersion: frameworkVersion,