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]