kodflow/kitsune

View on GitHub
Makefile

Summary

Maintainability
Test Coverage
############################
#╔════════════════════════╗#
#║ DEFAULT CONFIGURATION  ║#
#╚════════════════════════╝#
############################
.PHONY: help build deploy
.SILENT:

.DEFAULT_GOAL = help
ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
SERVICES := $(wildcard src/services/*)
OS := linux darwin
ARCH := amd64 arm64
$(eval $(ARGS):;@:)
$(eval GWD=$(shell git rev-parse --show-toplevel 2>/dev/null || pwd))
$(shell git config core.hooksPath $(GWD)/.github/hooks 2>/dev/null || true)
$(shell chmod +x $(GWD)/.github/hooks/*)

help: #Pour générer automatiquement l'aide ## Display all commands available
    $(eval PADDING=$(shell grep -x -E '^[a-zA-Z_-]+:.*?##[\s]?.*$$' Makefile | awk '{ print length($$1)-1 }' | sort -n | tail -n 1))
    clear
    echo '╔──────────────────────────────────────────────────╗'
    echo '║ ██╗  ██╗███████╗██╗     ██████╗ ███████╗██████╗  ║'
    echo '║ ██║  ██║██╔════╝██║     ██╔══██╗██╔════╝██╔══██╗ ║'
    echo '║ ███████║█████╗  ██║     ██████╔╝█████╗  ██████╔╝ ║'
    echo '║ ██╔══██║██╔══╝  ██║     ██╔═══╝ ██╔══╝  ██╔══██╗ ║'
    echo '║ ██║  ██║███████╗███████╗██║     ███████╗██║  ██║ ║'
    echo '║ ╚═╝  ╚═╝╚══════╝╚══════╝╚═╝     ╚══════╝╚═╝  ╚═╝ ║'
    echo '╟──────────────────────────────────────────────────╝'
    grep -E '^[a-zA-Z_-]+:.*?##[\s]?.*$$' Makefile | awk 'BEGIN {FS = ":.*?##"}; {gsub(/(^ +| +$$)/, "", $$2);printf "╟─[ \033[36m%-$(PADDING)s\033[0m %s\n", $$1, "] "$$2}'
    echo '╚──────────────────────────────────────────────────>'
    echo ''

aio: ## Start services in portable version
    docker compose -f .github/build/compose.yml --profile=services up --build

#run: ## Run services in portable version
#    docker compose -f .github/build/compose.yml --profile=standalone run --build --rm kitsune.$(ARGS)

run:
    go run $(CURDIR)/src/services/$(ARGS)/main.go

#test: ## Run services in portable version
#    docker compose -f .github/build/compose.yml --profile=standalone build
#    docker compose -f .github/build/compose.yml --profile=standalone run --rm kitsune.$(ARGS)

ssl:
    echo "Generating SSL certificates..."
    rm -rf ./.generated/ssl/*
    mkdir -p ./.generated/ssl/
    openssl genpkey -algorithm RSA -out ./.generated/ssl/localhost.key
    openssl req -new -key ./.generated/ssl/localhost.key -out ./.generated/ssl/localhost.csr -subj "/CN=localhost"
    openssl req -x509 -days 365 -key ./.generated/ssl/localhost.key -in ./.generated/ssl/localhost.csr -out ./.generated/ssl/localhost.crt
    openssl req -x509 -days 365 -nodes -newkey rsa:2048 -keyout ./.generated/ssl/localhost-ca.key -out ./.generated/ssl/localhost-ca.crt -subj "/CN=Certificate Authority"
    echo "SSL certificates generated successfully!"
    
tests: install-gotestsum
    gotestsum -f testdox -- -v $$(go list ./... | grep -vE "src/services|generated") -run 'Test[^Pb]' -coverprofile=coverage.out -covermode=atomic

live: install-gotestsum
    gotestsum --quiet --watch -f testdox -- -v $$(go list ./... | grep -vE "src/services|generated") -run 'Test[^Pb]' -coverprofile=coverage.out -covermode=atomic

install-gotestsum:
    if ! command -v gotestsum > /dev/null; then \
        go install gotest.tools/gotestsum@latest; \
    fi

update: ## Install/Update vendor
    echo "Update all dependencies"
    go get -u ./...
    go mod vendor

build: clear update generate build-services build-framework ## Build all services

clear:
    rm -rf .generated

binary-only:
    find . | grep -E 'sha1|md5' | xargs rm;

build-services:
    for service in $(SERVICES); do \
        make build-service $$(basename $$service);\
    done

build-framework:
    echo Build Kitsune;
    for os in $(OS); do \
        for arch in $(ARCH); do \
            ldflags="-s -w \
                -X github.com/kodflow/kitsune/src/config/config.BUILD_VERSION=$$VERSION \
                -X github.com/kodflow/kitsune/src/config/config.BUILD_COMMIT=$$(git rev-parse --short HEAD) \
                -X github.com/kodflow/kitsune/src/config/config.BUILD_APP_NAME=kitsune"; \
            CGO_ENABLED=0 GOOS=$$os GOARCH=$$arch go build -trimpath -buildvcs=false -ldflags="$$ldflags" \
                -o .generated/bin/kitsune-$$os-$$arch $(CURDIR)/src/cmd/main.go; \
                chmod +x .generated/bin/kitsune-$$os-$$arch; \
        done \
    done
    find .generated | grep "sha1" | xargs rm 

build-service:
    echo Build service $(ARGS);
    for os in $(OS); do \
        for arch in $(ARCH); do \
            CGO_ENABLED=0 GOOS=$$os GOARCH=$$arch go build -trimpath -buildvcs=false -ldflags="-s -w \
            -X github.com/kodflow/kitsune/src/config.BUILD_VERSION=$$VERSION \
            -X github.com/kodflow/kitsune/src/config.BUILD_COMMIT=$$(git rev-parse --short HEAD) \
            -X github.com/kodflow/kitsune/src/config.BUILD_APP_NAME=$(ARGS)" \
            -o .generated/services/$(ARGS)-$$os-$$arch $(CURDIR)/src/services/$(ARGS)/main.go; \
            chmod +x .generated/services/$(ARGS)-$$os-$$arch; \
            sha1sum .generated/services/$(ARGS)-$$os-$$arch | awk '{ print $$1 }'  | tr -d '\n' > .generated/services/$(ARGS)-$$os-$$arch.sha1; \
        done \
    done

# Build and push multi-architecture Docker images using buildx
build-images: build
    docker buildx create --use
    docker buildx inspect --bootstrap
    for file in .generated/services/*; do \
        name=$$(basename $$file | cut -d '-' -f1); \
        os=$$(basename $$file | cut -d '-' -f2); \
        arch=$$(basename $$file | cut -d '-' -f3); \
        \
        if [ "$$os" = "linux" ]; then \
            echo "Construit l'image pour : name=$$name, os=$$os, arch=$$arch, file=$$file"; \
            docker buildx build \
            --platform $$os/$$arch \
            --file .github/local/Dockerfile.debug \
            --tag kodflow/debug:$$name \
            --build-arg FILE=$$file \
            --push .; \
        fi \
    done;
    for instance in $$(docker ps | grep 'moby/buildkit' | awk '{print $$1}'); do \
        docker kill $$instance; \
        docker rm $$instance; \
    done

build-images-clear:
    docker image rm $$(docker images | grep 'moby/buildkit' | awk '{print $$3}')

run-images-with-publish: build-images run-images

run-images:
    docker compose -f .github/local/compose.yml pull
    docker compose -f .github/local/compose.yml up

generate:
#protoc --proto_path=$(CURDIR)/src/internal/data --go_out=$(CURDIR) $(CURDIR)/src/internal/data/proto/*
#protoc --proto_path=$(CURDIR) --go_out=$(CURDIR) $(CURDIR)/src/internal/core/server/transport/proto/*
    find ${CURDIR} -name '*.proto' -exec protoc --proto_path=${CURDIR} --go_out=${CURDIR} {} \;

package:
    find .generated -type f | xargs upx --best --lzma;

copy-to-infra:
    rm -rf ~/Documents/Projects/Infrastructure/organizations/IEF2I/IT-F2I:387672757226/.server/bench/usr/local/bin
    mkdir -p ~/Documents/Projects/Infrastructure/organizations/IEF2I/IT-F2I:387672757226/.server/bench/usr/local/bin
    find .generated | grep "linux-arm64" | xargs -I {} cp {} ~/Documents/Projects/Infrastructure/organizations/IEF2I/IT-F2I:387672757226/.server/bench/usr/local/bin