-
Notifications
You must be signed in to change notification settings - Fork 12
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #77 from metal3d/develop
Merge Develop to prepare V3
- Loading branch information
Showing
179 changed files
with
10,349 additions
and
4,867 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
name: Go-Tests | ||
|
||
on: | ||
pull_request: | ||
branches: | ||
- develop | ||
push: | ||
branches: | ||
- master | ||
- develop | ||
jobs: | ||
test: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- name: Set up Go | ||
uses: actions/setup-go@v4 | ||
with: | ||
go-version: 1.21 | ||
- name: Install Helm | ||
run: | | ||
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | ||
chmod 700 get_helm.sh | ||
./get_helm.sh | ||
- name: Launch Test | ||
run: | | ||
go vet ./... && go test -coverprofile=coverprofile.out -json -v ./... > gotest.json | ||
- name: SonarCloud Scan | ||
uses: SonarSource/sonarcloud-github-action@master | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} | ||
- name: Upload coverage reports to Codecov | ||
uses: codecov/[email protected] | ||
with: | ||
token: ${{ secrets.CODECOV_TOKEN }} | ||
slug: metal3d/katenary | ||
file: ./coverprofile.out | ||
fail_ci_if_error: true | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
# markdownlint configuration file | ||
default: true | ||
|
||
MD013: # Line length | ||
line_length: 240 | ||
|
||
MD010: # Hard tabs | ||
code_blocks: false | ||
|
||
# no inline HTML | ||
MD033: false | ||
|
||
# heading as first line element... | ||
MD041: false | ||
|
||
# list indentation | ||
MD007: | ||
indent: 4 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,27 +4,53 @@ VERSION=$(shell git describe --exact-match --tags $(CUR_SHA) 2>/dev/null || echo | |
CTN:=$(shell which podman 2>&1 1>/dev/null && echo "podman" || echo "docker") | ||
PREFIX=~/.local | ||
|
||
GOVERSION=1.22 | ||
GO=container | ||
OUT=katenary | ||
BLD_CMD=go build -ldflags="-X 'main.Version=$(VERSION)'" -o $(OUT) ./cmd/katenary/*.go | ||
BLD_CMD=go build -ldflags="-X 'katenary/generator.Version=$(VERSION)'" -o $(OUT) ./cmd/katenary | ||
GOOS=linux | ||
GOARCH=amd64 | ||
SIGNER[email protected] | ||
|
||
BUILD_IMAGE=docker.io/golang:$(GOVERSION)-alpine | ||
# SHELL=/bin/bash | ||
|
||
# List of source files | ||
SOURCES=$(wildcard ./*.go ./*/*.go ./*/*/*.go) | ||
# List of binaries to build and sign | ||
BINARIES=dist/katenary-linux-amd64 dist/katenary-linux-arm64 dist/katenary.exe dist/katenary-darwin-amd64 dist/katenary-freebsd-amd64 dist/katenary-freebsd-arm64 | ||
# List of signatures to build | ||
ASC_BINARIES=$(patsubst %,%.asc,$(BINARIES)) | ||
|
||
# defaults | ||
BROWSER=$(shell command -v epiphany || echo xdg-open) | ||
SHELL := bash | ||
# strict mode | ||
.SHELLFLAGS := -eu -o pipefail -c | ||
# One session per target | ||
.ONESHELL: | ||
.DELETE_ON_ERROR: | ||
MAKEFLAGS += --warn-undefined-variables | ||
MAKEFLAGS += --no-builtin-rules | ||
.PHONY: help clean build install tests test | ||
|
||
BUILD_IMAGE=docker.io/golang:1.18-alpine | ||
all: build | ||
|
||
.PHONY: help clean build | ||
|
||
.ONESHELL: | ||
help: | ||
@cat <<EOF | ||
@cat <<EOF | fold -s -w 80 | ||
=== HELP === | ||
To avoid you to install Go, the build is made by podman or docker. | ||
|
||
You can use: | ||
Installinf (you can use local Go by setting GO=local)): | ||
# use podman or docker to build | ||
$$ make install | ||
# or use local Go | ||
$$ make install GO=local | ||
This will build and install katenary inside the PREFIX(/bin) value (default is $(PREFIX)) | ||
|
||
To change the PREFIX to somewhere where only root or sudo users can save the binary, it is recommended to build before install: | ||
|
||
To change the PREFIX to somewhere where only root or sudo users can save the binary, it is recommended to build before install, one more time you can use local Go by setting GO=local: | ||
$$ make build | ||
$$ sudo make install PREFIX=/usr/local | ||
|
||
|
@@ -47,29 +73,47 @@ help: | |
$$ make build-all | ||
EOF | ||
|
||
build: pull katenary | ||
|
||
build-all: | ||
rm -f dist/* | ||
$(MAKE) _build-all | ||
|
||
_build-all: pull dist dist/katenary-linux-amd64 dist/katenary-linux-arm64 dist/katenary.exe dist/katenary-darwin-amd64 dist/katenary-freebsd-amd64 dist/katenary-freebsd-arm64 | ||
## Standard build | ||
build: pull katenary | ||
|
||
pull: | ||
ifneq ($(GO),local) | ||
@echo -e "\033[1;32mPulling $(BUILD_IMAGE) docker image\033[0m" | ||
@$(CTN) pull $(BUILD_IMAGE) | ||
endif | ||
|
||
dist: | ||
katenary: $(SOURCES) Makefile go.mod go.sum | ||
ifeq ($(GO),local) | ||
@echo "=> Build on host using go" | ||
else | ||
@echo "=> Build in container using" $(CTN) | ||
endif | ||
echo $(BLD_CMD) | ||
ifeq ($(GO),local) | ||
$(BLD_CMD) | ||
else ifeq ($(CTN),podman) | ||
@podman run -e CGO_ENABLED=0 -e GOOS=$(GOOS) -e GOARCH=$(GOARCH) \ | ||
--rm -v $(PWD):/go/src/katenary:z -w /go/src/katenary --userns keep-id -it $(BUILD_IMAGE) $(BLD_CMD) | ||
else | ||
@docker run -e CGO_ENABLED=0 -e GOOS=$(GOOS) -e GOARCH=$(GOARCH) \ | ||
--rm -v $(PWD):/go/src/katenary:z -w /go/src/katenary --user $(shell id -u):$(shell id -g) -e HOME=/tmp -it $(BUILD_IMAGE) $(BLD_CMD) | ||
endif | ||
echo "=> Stripping if possible" | ||
strip $(OUT) 2>/dev/null || echo "=> No strip available" | ||
|
||
|
||
## Release build | ||
dist: prepare $(BINARIES) $(ASC_BINARIES) | ||
|
||
prepare: pull | ||
mkdir -p dist | ||
|
||
dist/katenary-linux-amd64: | ||
@echo | ||
@echo -e "\033[1;32mBuilding katenary $(VERSION) for linux-amd64...\033[0m" | ||
$(MAKE) katenary GOOS=linux GOARCH=amd64 OUT=$@ | ||
|
||
|
||
dist/katenary-linux-arm64: | ||
@echo | ||
@echo -e "\033[1;32mBuilding katenary $(VERSION) for linux-arm...\033[0m" | ||
|
@@ -94,30 +138,16 @@ dist/katenary-freebsd-arm64: | |
@echo | ||
@echo -e "\033[1;32mBuilding katenary $(VERSION) for freebsd-arm64...\033[0m" | ||
$(MAKE) katenary GOOS=freebsd GOARCH=arm64 OUT=$@ | ||
|
||
katenary: $(wildcard */*.go Makefile go.mod go.sum) | ||
ifeq ($(GO),local) | ||
@echo "=> Build in host using go" | ||
else | ||
@echo "=> Build in container using" $(CTN) | ||
endif | ||
echo $(BLD_CMD) | ||
ifeq ($(GO),local) | ||
$(BLD_CMD) | ||
else ifeq ($(CTN),podman) | ||
@podman run -e CGO_ENABLED=0 -e GOOS=$(GOOS) -e GOARCH=$(GOARCH) \ | ||
--rm -v $(PWD):/go/src/katenary:z -w /go/src/katenary --userns keep-id -it $(BUILD_IMAGE) $(BLD_CMD) | ||
else | ||
@docker run -e CGO_ENABLED=0 -e GOOS=$(GOOS) -e GOARCH=$(GOARCH) \ | ||
--rm -v $(PWD):/go/src/katenary:z -w /go/src/katenary --user $(shell id -u):$(shell id -g) -e HOME=/tmp -it $(BUILD_IMAGE) $(BLD_CMD) | ||
endif | ||
echo "=> Stripping if possible" | ||
strip $(OUT) 2>/dev/null || echo "=> No strip available" | ||
|
||
gpg-sign: | ||
rm -f dist/*.asc | ||
$(MAKE) $(ASC_BINARIES) | ||
|
||
dist/%.asc: dist/% | ||
gpg --armor --detach-sign --default-key $(SIGNER) $< &>/dev/null || exit 1 | ||
|
||
install: build | ||
cp katenary $(PREFIX)/bin/katenary | ||
install -Dm755 katenary $(PREFIX)/bin/katenary | ||
|
||
uninstall: | ||
rm -f $(PREFIX)/bin/katenary | ||
|
@@ -126,13 +156,27 @@ clean: | |
rm -rf katenary dist/* release.id | ||
|
||
|
||
serve-doc: __label_doc | ||
@cd doc && \ | ||
[ -d venv ] || python -m venv venv; \ | ||
source venv/bin/activate && \ | ||
echo "==> Installing requirements in the virtual env..." | ||
pip install -qq -r requirements.txt && \ | ||
echo "==> Serving doc with mkdocs..." && \ | ||
mkdocs serve | ||
|
||
tests: test | ||
test: | ||
@echo -e "\033[1;33mTesting katenary $(VERSION)...\033[0m" | ||
go test -v ./... | ||
go test -coverprofile=cover.out ./... | ||
go tool cover -func=cover.out | grep "total:" | ||
go tool cover -html=cover.out -o cover.html | ||
if [ "$(BROWSER)" = "xdg-open" ]; then | ||
xdg-open cover.html | ||
else | ||
$(BROWSER) -i --new-window cover.html | ||
fi | ||
|
||
|
||
.ONESHELL: | ||
push-release: build-all | ||
@rm -f release.id | ||
# read personal access token from .git-credentials | ||
|
@@ -154,3 +198,29 @@ push-release: build-all | |
https://uploads.github.com/repos/metal3d/katenary/releases/$$(cat release.id)/assets?name=$$(basename $$i) | ||
done | ||
@rm -f release.id | ||
|
||
|
||
__label_doc: | ||
@command -v gomarkdoc || (echo "==> We need to install gomarkdoc..." && \ | ||
go install github.com/princjef/gomarkdoc/cmd/gomarkdoc@latest) | ||
@echo "=> Generating labels doc..." | ||
# short label doc | ||
go run ./cmd/katenary help-labels -m | \ | ||
sed -i ' | ||
/START_LABEL_DOC/,/STOP_LABEL_DOC/{/<!--/!d}; | ||
/START_LABEL_DOC/,/STOP_LABEL_DOC/r/dev/stdin | ||
' doc/docs/labels.md | ||
# detailed label doc | ||
go run ./cmd/katenary help-labels -am | sed 's/^##/###/' | \ | ||
sed -i ' | ||
/START_DETAILED_DOC/,/STOP_DETAILED_DOC/{/<!--/!d}; | ||
/START_DETAILED_DOC/,/STOP_DETAILED_DOC/r/dev/stdin | ||
' doc/docs/labels.md | ||
|
||
echo "=> Generating Code documentation..." | ||
PACKAGES=$$(for f in $$(find . -name "*.go" -type f); do dirname $$f; done | sort -u) | ||
for pack in $$PACKAGES; do | ||
echo "-> Generating doc for $$pack" | ||
gomarkdoc --repository.default-branch $(shell git branch --show-current) -o doc/docs/packages/$$pack.md $$pack | ||
sed -i '/^## Index/,/^##/ { /## Index/d; /^##/! d }' doc/docs/packages/$$pack.md | ||
done |
Oops, something went wrong.