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

wilfreds pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/yunikorn-release.git


The following commit(s) were added to refs/heads/master by this push:
     new 33abaf8  feat: Add build tool automation to release repo (#202)
33abaf8 is described below

commit 33abaf87520d4d3fe3c08bddee1b7d98be7b7a4c
Author: pohanhuangtw <[email protected]>
AuthorDate: Wed Nov 26 13:53:06 2025 +1100

    feat: Add build tool automation to release repo (#202)
    
    Add Makefile (based on the yunikorn-core file)
    Rename the tools to release-tools folder.
    Add or update supporting files:
    - golangci linter
    - go_version
    - .gitignore
    
    Remove check_license.sh run  make check_license in github workflow.
    
    Closes: #202
    
    Signed-off-by: Wilfred Spiegelenburg <[email protected]>
---
 .github/workflows/pre-commit.yml              |   2 +-
 .gitignore                                    |   6 +-
 .go_version                                   |   1 +
 .golangci.yml                                 |  94 ++++++++++++
 Makefile                                      | 204 ++++++++++++++++++++++++++
 check_license.sh                              |  38 -----
 {tools => release-tools}/build-image.py       |   0
 {tools => release-tools}/build-release.py     |   0
 {tools => release-tools}/merge_pr.sh          |   0
 {tools => release-tools}/release-configs.json |   0
 10 files changed, 305 insertions(+), 40 deletions(-)

diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml
index c81ca95..030931a 100644
--- a/.github/workflows/pre-commit.yml
+++ b/.github/workflows/pre-commit.yml
@@ -33,4 +33,4 @@ jobs:
         with:
           fetch-depth: 2
       - name: Check license
-        run: ./check_license.sh
+        run: make license-check
diff --git a/.gitignore b/.gitignore
index bd1cc38..4ca6bc6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,5 +4,9 @@ staging/
 staging/*
 staging/**
 target
-*.swp
 *.tmp
+.build
+*.swp
+*.a
+/tools/
+/build/
diff --git a/.go_version b/.go_version
new file mode 100644
index 0000000..193d140
--- /dev/null
+++ b/.go_version
@@ -0,0 +1 @@
+1.23
\ No newline at end of file
diff --git a/.golangci.yml b/.golangci.yml
new file mode 100644
index 0000000..6eb0ab9
--- /dev/null
+++ b/.golangci.yml
@@ -0,0 +1,94 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# options for analysis running
+version: "2"
+run:
+  issues-exit-code: 1
+  modules-download-mode: readonly
+linters:
+  settings:
+    errcheck:
+      check-type-assertions: true
+      check-blank: true
+    revive:
+      confidence: 0.8
+    govet:
+      enable:
+        - shadow
+    funlen:
+      lines: 120
+      statements: 80
+    depguard:
+      rules:
+        main:
+          files:
+            - $all
+          deny:
+            - pkg: github.com/sirupsen/logrus
+              desc: logging is standardised via yunikorn logger and zap
+            - pkg: github.com/stretchr/testify
+              desc: test assertions must use gotest.tools/v3/assert
+  exclusions:
+    generated: lax
+    presets:
+      - comments
+      - common-false-positives
+      - legacy
+      - std-error-handling
+    paths:
+      - third_party$
+      - builtin$
+      - examples$
+  default: none
+  enable:
+    - errcheck
+    - unused
+    - staticcheck
+    - ineffassign
+    - funlen
+    - revive
+    - govet
+    - goconst
+    - depguard
+    - nakedret
+    - gocritic
+    - godox
+    - gosec
+    - dogsled
+    - whitespace
+issues:
+  max-issues-per-linter: 0
+  max-same-issues: 0
+  new: false
+formatters:
+  enable:
+    - gofmt
+    - goimports
+  settings:
+    gofmt:
+      simplify: true
+    goimports:
+      local-prefixes:
+        - github.com/apache/yunikorn
+  exclusions:
+    generated: lax
+    paths:
+      - third_party$
+      - builtin$
+      - examples$
\ No newline at end of file
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..14de99f
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,204 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Check if this GO tools version used is at least the version of go specified 
in
+# the go.mod file. The version in go.mod should be in sync with other repos.
+
+# Go compiler selection
+ifeq ($(GO),)
+GO := go
+endif
+
+GO_VERSION := $(shell "$(GO)" version | awk '{print substr($$3, 3, 4)}')
+MOD_VERSION := $(shell cat .go_version)
+
+GM := $(word 1,$(subst ., ,$(GO_VERSION)))
+MM := $(word 1,$(subst ., ,$(MOD_VERSION)))
+FAIL := $(shell if [ $(GM) -lt $(MM) ]; then echo MAJOR; fi)
+ifdef FAIL
+$(error Build should be run with at least go $(MOD_VERSION) or later, found 
$(GO_VERSION))
+endif
+GM := $(word 2,$(subst ., ,$(GO_VERSION)))
+MM := $(word 2,$(subst ., ,$(MOD_VERSION)))
+FAIL := $(shell if [ $(GM) -lt $(MM) ]; then echo MINOR; fi)
+ifdef FAIL
+$(error Build should be run with at least go $(MOD_VERSION) or later, found 
$(GO_VERSION))
+endif
+
+# Make sure we are in the same directory as the Makefile
+BASE_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
+TOOLS_DIR=tools
+
+# Force Go modules even when checked out inside GOPATH
+GO111MODULE := on
+export GO111MODULE
+
+REPO=github.com/apache/yunikorn-core/pkg
+# when using the -race option CGO_ENABLED is set to 1 (automatically)
+# it breaks cross compilation.
+RACE=-race
+# build commands on local os by default, uncomment for cross-compilation
+#GOOS=darwin
+#GOARCH=amd64
+
+ifeq ($(HOST_ARCH),)
+HOST_ARCH := $(shell uname -m)
+endif
+
+# Kernel (OS) Name
+OS := $(shell uname -s | tr '[:upper:]' '[:lower:]')
+
+# Allow architecture to be overwritten
+ifeq ($(HOST_ARCH),)
+HOST_ARCH := $(shell uname -m)
+endif
+
+# Build architecture settings:
+# EXEC_ARCH defines the architecture of the executables that gets compiled
+ifeq (x86_64, $(HOST_ARCH))
+EXEC_ARCH := amd64
+else ifeq (i386, $(HOST_ARCH))
+EXEC_ARCH := 386
+else ifneq (,$(filter $(HOST_ARCH), arm64 aarch64))
+EXEC_ARCH := arm64
+else ifeq (armv7l, $(HOST_ARCH))
+EXEC_ARCH := arm
+else
+$(info Unknown architecture "${HOST_ARCH}" defaulting to: amd64)
+EXEC_ARCH := amd64
+endif
+
+# shellcheck
+SHELLCHECK_VERSION=v0.9.0
+SHELLCHECK_PATH=${TOOLS_DIR}/shellcheck-$(SHELLCHECK_VERSION)
+SHELLCHECK_BIN=${SHELLCHECK_PATH}/shellcheck
+SHELLCHECK_ARCHIVE := 
shellcheck-$(SHELLCHECK_VERSION).$(OS).$(HOST_ARCH).tar.xz
+ifeq (darwin, $(OS))
+ifeq (arm64, $(HOST_ARCH))
+SHELLCHECK_ARCHIVE := shellcheck-$(SHELLCHECK_VERSION).$(OS).x86_64.tar.xz
+endif
+else ifeq (linux, $(OS))
+ifeq (armv7l, $(HOST_ARCH))
+SHELLCHECK_ARCHIVE := shellcheck-$(SHELLCHECK_VERSION).$(OS).armv6hf.tar.xz
+endif
+endif
+
+# golangci-lint
+GOLANGCI_LINT_VERSION=1.63.4
+GOLANGCI_LINT_PATH=$(TOOLS_DIR)/golangci-lint-v$(GOLANGCI_LINT_VERSION)
+GOLANGCI_LINT_BIN=$(GOLANGCI_LINT_PATH)/golangci-lint
+GOLANGCI_LINT_ARCHIVE=golangci-lint-$(GOLANGCI_LINT_VERSION)-$(OS)-$(EXEC_ARCH).tar.gz
+GOLANGCI_LINT_ARCHIVEBASE=golangci-lint-$(GOLANGCI_LINT_VERSION)-$(OS)-$(EXEC_ARCH)
+
+all:
+       $(MAKE) -C $(dir $(BASE_DIR)) build
+
+# Install tools
+.PHONY: tools
+tools: $(SHELLCHECK_BIN) $(GOLANGCI_LINT_BIN)
+
+# Install shellcheck
+$(SHELLCHECK_BIN):
+       @echo "installing shellcheck $(SHELLCHECK_VERSION)"
+       @mkdir -p "$(SHELLCHECK_PATH)"
+       @curl -sSfL 
"https://github.com/koalaman/shellcheck/releases/download/$(SHELLCHECK_VERSION)/$(SHELLCHECK_ARCHIVE)"
 \
+               | tar -x -J --strip-components=1 -C "$(SHELLCHECK_PATH)" 
"shellcheck-$(SHELLCHECK_VERSION)/shellcheck"
+
+# Install golangci-lint
+$(GOLANGCI_LINT_BIN):
+       @echo "installing golangci-lint v$(GOLANGCI_LINT_VERSION)"
+       @mkdir -p "$(GOLANGCI_LINT_PATH)"
+       @curl -sSfL 
"https://github.com/golangci/golangci-lint/releases/download/v$(GOLANGCI_LINT_VERSION)/$(GOLANGCI_LINT_ARCHIVE)"
 \
+               | tar -x -z --strip-components=1 -C "$(GOLANGCI_LINT_PATH)" 
"$(GOLANGCI_LINT_ARCHIVEBASE)/golangci-lint"
+
+.PHONY: lint
+# Run lint against the previous commit for PR and branch build
+# In dev setup look at all changes on top of master
+lint: $(GOLANGCI_LINT_BIN)
+       @echo "running golangci-lint"
+       @"${GOLANGCI_LINT_BIN}" run
+
+# Check scripts
+.PHONY: check_scripts
+ALLSCRIPTS := $(shell find . -not \( -path ./tools -prune \) -not \( -path 
./build -prune \) -name '*.sh')
+check_scripts: $(SHELLCHECK_BIN)
+       @echo "running shellcheck"
+       @"$(SHELLCHECK_BIN)" ${ALLSCRIPTS}
+
+.PHONY: license-check
+# This is a bit convoluted but using a recursive grep on linux fails to write 
anything when run
+# from the Makefile. That caused the pull-request license check run from the 
github action to
+# always pass. The syntax for find is slightly different too but that at least 
works in a similar
+# way on both Mac and Linux. Excluding all .git* files from the checks.
+license-check:
+       @echo "checking license headers:"
+ifeq (darwin,$(OS))
+       $(shell mkdir -p build && find -E . -not \( -path './.git*' -prune \) 
-not \( -path ./build -prune \) -not \( -path ./tools -prune \) -regex 
".*\.(go|sh|md|yaml|yml|mod)" -exec grep -L "Licensed to the Apache Software 
Foundation" {} \; > build/license-check.txt)
+else
+       $(shell mkdir -p build && find . -not \( -path './.git*' -prune \) -not 
\( -path ./build -prune \) -not \( -path ./tools -prune \) -regex 
".*\.\(go\|sh\|md\|yaml\|yml\|mod\)" -exec grep -L "Licensed to the Apache 
Software Foundation" {} \; > build/license-check.txt)
+endif
+       @if [ -s "build/license-check.txt" ]; then \
+               echo "following files are missing license header:" ; \
+               cat build/license-check.txt ; \
+               exit 1; \
+       fi
+       @echo "  all OK"
+
+.PHONY: perf-tools
+perf-tools:
+       @echo "Running perf-tools"
+       @cd perf-tools && make build
+       @cd ../
+
+# Check that we use pseudo versions in master
+.PHONY: pseudo
+BRANCH := $(shell git branch --show-current)
+SI_REF   := $(shell "$(GO)" list -m -f '{{ .Version }}' 
github.com/apache/yunikorn-scheduler-interface)
+CORE_REF := $(shell "$(GO)" list -m -f '{{ .Version }}' 
github.com/apache/yunikorn-core)
+
+SI_MATCH   := $(shell expr "${SI_REF}"   : "v0.0.0-")
+CORE_MATCH := $(shell expr "${CORE_REF}" : "v0.0.0-")
+
+
+pseudo:
+       @echo "pseudo version check"
+       @if [ "${BRANCH}" = "master" ]; then \
+               if [ $(SI_MATCH) -ne 7 ] || [ $(CORE_MATCH) -ne 7 ]; then \
+                       echo "YuniKorn references MUST all be pseudo versions:" 
; \
+                       echo "  SI  ref: ${SI_REF}" ; \
+                       echo "  Core ref: ${CORE_REF}" ; \
+                       exit 1 ; \
+               fi ; \
+       fi
+       @echo "  all OK"
+
+# Build the example binaries for dev and test
+
+
+# Remove generated build artifacts
+.PHONY: clean
+clean:
+       @echo "cleaning up caches and output"
+       "$(GO)" clean -cache -testcache -r
+       @echo "removing generated files"
+       @rm -rf build
+
+# Remove all generated content
+.PHONY: distclean
+distclean: clean
+       @echo "removing tools"
+       @rm -rf "${TOOLS_DIR}"
diff --git a/check_license.sh b/check_license.sh
deleted file mode 100755
index 2bb03bc..0000000
--- a/check_license.sh
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/env bash
-
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Kernel (OS) Name
-OS=$(uname -s | tr '[:upper:]' '[:lower:]')
-# show that the check has started
-echo "checking license headers:"
-# run different finds on mac vs linux
-if [ "${OS}" = "darwin" ]; then
-  find -E . ! -path "./.git*" -regex 
".*(Makefile|\.(go|sh|py|md|conf|yaml|yml|tpl))" -exec grep -L "Licensed to the 
Apache Software Foundation" {} \; > LICRES
-else
-  find . ! -path "./.git*" -regex 
".*\(Makefile\|\.\(go\|py\|sh\|md\|conf\|yaml\|yml\|tpl\)\)" -exec grep -L 
"Licensed to the Apache Software Foundation" {} \; > LICRES
-fi
-# any file mentioned in the output is missing the license
-if [ -s LICRES ]; then
-  echo "following files are missing license header:"
-       cat LICRES
-       rm -f LICRES
-       exit 1
-fi
-rm -f LICRES
-echo "  all OK"
-exit 0
diff --git a/tools/build-image.py b/release-tools/build-image.py
similarity index 100%
rename from tools/build-image.py
rename to release-tools/build-image.py
diff --git a/tools/build-release.py b/release-tools/build-release.py
similarity index 100%
rename from tools/build-release.py
rename to release-tools/build-release.py
diff --git a/tools/merge_pr.sh b/release-tools/merge_pr.sh
similarity index 100%
rename from tools/merge_pr.sh
rename to release-tools/merge_pr.sh
diff --git a/tools/release-configs.json b/release-tools/release-configs.json
similarity index 100%
rename from tools/release-configs.json
rename to release-tools/release-configs.json


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to