github.com/e154/smart-home@v0.17.2-0.20240311175135-e530a6e5cd45/Makefile.local (about)

     1  .PHONY: get_deps fmt
     2  .DEFAULT_GOAL := build
     3  build: build_public build_server build_cli
     4  tests: lint test
     5  all: build build_structure build_common_structure build_archive docker_image
     6  deploy: docker_image_upload
     7  
     8  EXEC=server
     9  CLI=cli
    10  ROOT := $(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
    11  SERVER_DIR = ${ROOT}/tmp/${EXEC}
    12  COMMON_DIR = ${ROOT}/tmp/common
    13  ARCHIVE=smart-home-common.tar.gz
    14  
    15  PROJECT ?=github.com/e154/smart-home
    16  TRAVIS_BUILD_NUMBER ?= local
    17  HOME ?= ${ROOT}
    18  
    19  REV_VALUE=$(shell git rev-parse HEAD 2> /dev/null || echo "???")
    20  REV_URL_VALUE=https://${PROJECT}/commit/${REV_VALUE}
    21  GENERATED_VALUE=$(shell date -u +'%Y-%m-%dT%H:%M:%S%z')
    22  DEVELOPERS_VALUE=delta54<support@e154.ru>
    23  BUILD_NUMBER_VALUE=$(shell echo ${TRAVIS_BUILD_NUMBER})
    24  RELEASE_VERSION ?= v0.1.0
    25  
    26  IMAGE=smart-home-${EXEC}
    27  SERVER ?= 192.168.43.127
    28  DOCKER_ACCOUNT ?= ${SERVER}:5000
    29  DOCKER_IMAGE_VER=${DOCKER_ACCOUNT}/${IMAGE}:${RELEASE_VERSION}
    30  DOCKER_IMAGE_LATEST=${DOCKER_ACCOUNT}/${IMAGE}:latest
    31  
    32  VERSION_VAR=${PROJECT}/version.VersionString
    33  REV_VAR=${PROJECT}/version.RevisionString
    34  REV_URL_VAR=${PROJECT}/version.RevisionURLString
    35  GENERATED_VAR=${PROJECT}/version.GeneratedString
    36  DEVELOPERS_VAR=${PROJECT}/version.DevelopersString
    37  BUILD_NUMBER_VAR=${PROJECT}/version.BuildNumString
    38  DOCKER_IMAGE_VAR=${PROJECT}/version.DockerImageString
    39  GO_BUILD_LDFLAGS= -s -w -X ${VERSION_VAR}=${RELEASE_VERSION} -X ${REV_VAR}=${REV_VALUE} -X ${REV_URL_VAR}=${REV_URL_VALUE} -X ${GENERATED_VAR}=${GENERATED_VALUE} -X ${DEVELOPERS_VAR}=${DEVELOPERS_VALUE} -X ${BUILD_NUMBER_VAR}=${BUILD_NUMBER_VALUE} -X ${DOCKER_IMAGE_VAR}=${DOCKER_IMAGE_VER}
    40  GO_BUILD_FLAGS= -a -installsuffix cgo -v --ldflags '${GO_BUILD_LDFLAGS}'
    41  GO_BUILD_ENV= CGO_ENABLED=1
    42  GO_BUILD_TAGS= -tags 'production'
    43  
    44  test_system:
    45  	@echo MARK: system tests
    46  	cp ${ROOT}/conf/config.dev.json ${ROOT}/conf/config.json
    47  	go test -v ./tests/api
    48  	go test -v ./tests/models
    49  	go test -v ./tests/scripts
    50  	go test -v ./tests/system
    51  	go test -v ./tests/plugins/alexa
    52  	go test -v ./tests/plugins/area
    53  	go test -v ./tests/plugins/cgminer
    54  	go test -v ./tests/plugins/email
    55  	go test -v ./tests/plugins/messagebird
    56  	go test -v ./tests/plugins/modbus_rtu
    57  	go test -v ./tests/plugins/modbus_tcp
    58  	go test -v ./tests/plugins/moon
    59  	go test -v ./tests/plugins/node
    60  	go test -v ./tests/plugins/scene
    61  	go test -v ./tests/plugins/sensor
    62  	go test -v ./tests/plugins/sun
    63  	go test -v ./tests/plugins/telegram
    64  	go test -v ./tests/plugins/trigger_alexa
    65  	go test -v ./tests/plugins/trigger_empty
    66  	go test -v ./tests/plugins/trigger_state
    67  	go test -v ./tests/plugins/trigger_system
    68  	go test -v ./tests/plugins/trigger_time
    69  	go test -v ./tests/plugins/twilio
    70  	go test -v ./tests/plugins/weather_met
    71  	go test -v ./tests/plugins/weather_owm
    72  	go test -v ./tests/plugins/zigbee2mqtt
    73  
    74  test:
    75  	@echo MARK: unit tests
    76  	go test -v $(shell go list ./... | grep -v /tmp | grep -v /tests) -timeout 60s -race -covermode=atomic -coverprofile=coverage.out
    77  
    78  install_linter:
    79  	curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $$(go env GOPATH)/bin v1.55.2
    80  
    81  install_typedoc:
    82  	npm install -g jsdoc
    83  
    84  lint-todo:
    85  	@echo MARK: make lint todo
    86  
    87  lint:
    88  	golangci-lint run
    89  
    90  get_deps:
    91  	go mod tidy
    92  
    93  fmt:
    94  	@gofmt -l -w -s .
    95  	@goimports -w .
    96  
    97  comments:
    98  	@echo MARK: update comments
    99  	@gocmt -i -d .
   100  
   101  svgo:
   102  	DIR=${ROOT}/data/icons/*
   103  	cd ${ROOT} && svgo ${DIR} --enable=inlineStyles  --config '{ "plugins": [ { "inlineStyles": { "onlyMatchedOnce": false } }] }' --pretty
   104  
   105  build_server:
   106  	@echo MARK: build server
   107  	GOOS=linux GOARCH=arm GOARM=7 go build ${GO_BUILD_FLAGS} ${GO_BUILD_TAGS} -o ${ROOT}/${EXEC}-linux-arm-7
   108  
   109  build_local:
   110    @echo MARK: build local
   111    ${GO_BUILD_ENV} GOOS=darwin GOARCH=arm64 go build ${GO_BUILD_FLAGS} ${GO_BUILD_TAGS} -o ${ROOT}/${EXEC}-darwin-10.6-arm64
   112  
   113  build_cli:
   114  	@echo MARK: build cli
   115  	#cd ${ROOT}/cmd/cli && ${GO_BUILD_ENV} GOOS=linux GOARCH=amd64 go build ${GO_BUILD_FLAGS} ${GO_BUILD_TAGS} -o ${ROOT}/${CLI}-linux-amd64
   116  	#cd ${ROOT}/cmd/cli && ${GO_BUILD_ENV} GOOS=darwin GOARCH=amd64 go build ${GO_BUILD_FLAGS} ${GO_BUILD_TAGS} -o ${ROOT}/${CLI}-darwin-10.6-amd64
   117  	#cd ${ROOT}/cmd/cli && ${GO_BUILD_ENV} GOOS=darwin GOARCH=arm64 go build ${GO_BUILD_FLAGS} ${GO_BUILD_TAGS} -o ${ROOT}/${CLI}-darwin-10.6-arm64
   118  
   119  build_public:
   120  	@echo MARK: build public
   121  	echo -e "node version.\n"  && \
   122  	node -v  && \
   123  	echo -e "npm version.\n"  && \
   124  	npm -v  && \
   125  	echo -e "pnpm version.\n"  && \
   126  	pnpm -v && \
   127  	cd ${ROOT}/static_source/admin && \
   128  	pnpm run build:pro && \
   129  	rm -rf ${ROOT}/build/public && \
   130  	mkdir -p ${ROOT}/build && \
   131  	mv ${ROOT}/static_source/admin/dist-pro ${ROOT}/build/public
   132  
   133  server:
   134  	@echo "Building http server"
   135  	mkdir -p ${ROOT}/api/stub && \
   136  	oapi-codegen -generate server -package stub ${ROOT}/api/api.swagger3.yaml > ${ROOT}/api/stub/server.go && \
   137  	oapi-codegen -generate types -package stub ${ROOT}/api/api.swagger3.yaml > ${ROOT}/api/stub/types.go
   138  
   139  build_structure:
   140  	@echo MARK: create app structure
   141  	mkdir -p ${SERVER_DIR}
   142  	mkdir -p ${SERVER_DIR}/snapshots
   143  	cd ${SERVER_DIR}
   144  	cp -r ${ROOT}/conf ${SERVER_DIR}
   145  	cp -r ${ROOT}/data ${SERVER_DIR}
   146  	cp ${ROOT}/LICENSE ${SERVER_DIR}
   147  	cp ${ROOT}/README* ${SERVER_DIR}
   148  	cp ${ROOT}/CONTRIBUTING.md ${SERVER_DIR}
   149  	cp ${ROOT}/bin/server-installer.sh ${SERVER_DIR}
   150  	chmod +x ${SERVER_DIR}/data/scripts/ping.sh
   151  	cp ${ROOT}/${EXEC}-linux-arm-7 ${SERVER_DIR}
   152  	cp ${ROOT}/bin/server ${SERVER_DIR}
   153  
   154  build_common_structure:
   155  	@echo MARK: create common structure
   156  	mkdir -p ${COMMON_DIR}
   157  	mkdir -p ${COMMON_DIR}/snapshots
   158  	cd ${COMMON_DIR}
   159  	cp -r ${ROOT}/conf ${COMMON_DIR}
   160  	cp -r ${ROOT}/data ${COMMON_DIR}
   161  	cp ${ROOT}/LICENSE ${COMMON_DIR}
   162  	cp ${ROOT}/README* ${COMMON_DIR}
   163  	cp ${ROOT}/CONTRIBUTING.md ${COMMON_DIR}
   164  	cp ${ROOT}/bin/server-installer.sh ${COMMON_DIR}
   165  	chmod +x ${COMMON_DIR}/data/scripts/ping.sh
   166  	cp ${ROOT}/bin/server ${COMMON_DIR}
   167  
   168  build_archive:
   169  	@echo MARK: build app archive
   170  	cd ${COMMON_DIR} && ls -l && tar -zcf ${ROOT}/${ARCHIVE} .
   171  
   172  build_docs:
   173  	@echo MARK: build doc
   174  	cd ${ROOT}/doc
   175  	npm install postcss-cli
   176  	hugo --gc --minify
   177  
   178  docs_dev:
   179  	cd ${ROOT}/doc
   180  	hugo server --buildDrafts --verbose --source="${ROOT}/doc" --config="${ROOT}/doc/config.toml" --port=1377 --disableFastRender
   181  
   182  docs_deploy:
   183  	@echo MARK: deploy doc
   184  	cd ${ROOT}/doc && \
   185  	echo -e "node version.\n"  && \
   186  	node -v  && \
   187  	echo -e "npm version.\n"  && \
   188  	npm -v  && \
   189  	npm install -f  && \
   190  	echo -e "hugo version.\n"  && \
   191  	hugo version  && \
   192  	hugo --gc --minify
   193  
   194  	cd ${ROOT}/doc/public  && \
   195  	git init  && \
   196  	echo -e "Starting to documentation commit.\n"  && \
   197  	git config --global user.email "support@e154.ru"  && \
   198  	git config --global user.name "delta54"  && \
   199  	git remote add upstream "https://${GITHUB_OAUTH_TOKEN}@github.com/e154/smart-home.git"  && \
   200  	git fetch upstream  && \
   201  	git reset upstream/gh-pages  && \
   202  	rev=$(git rev-parse --short HEAD)  && \
   203  	git add -A .  && \
   204  	git commit -m "rebuild pages at ${rev}" && \
   205  	git push -q upstream HEAD:gh-pages
   206  	echo -e "Done documentation deploy.\n"
   207  
   208  docker_image:
   209  	cd ${SERVER_DIR} && ls -ll && docker build -f ${ROOT}/bin/docker/Dockerfile -t ${DOCKER_ACCOUNT}/${IMAGE} .
   210  
   211  docker_image_upload:
   212  	#echo ${DOCKER_PASSWORD} | docker login -u ${DOCKER_USERNAME} --password-stdin
   213  	docker tag ${DOCKER_ACCOUNT}/${IMAGE} ${DOCKER_IMAGE_VER}
   214  	echo -e "docker tag ${DOCKER_ACCOUNT}/${IMAGE} ${DOCKER_IMAGE_LATEST}"
   215  	docker tag ${DOCKER_ACCOUNT}/${IMAGE} ${DOCKER_IMAGE_LATEST}
   216  	docker push ${DOCKER_IMAGE_VER}
   217  	docker push ${DOCKER_IMAGE_LATEST}
   218  
   219  clean:
   220  	@echo MARK: clean
   221  	rm -rf ${SERVER_DIR}
   222  	rm -f ${ROOT}/${EXEC}-linux-arm-7
   223  
   224  front_client:
   225  	@echo MARK: generate front client lib
   226  	npx swagger-typescript-api@12.0.4 --axios -p ./api/api.swagger3.yaml -o ./static_source/admin/src/api -n stub_new.ts
   227  
   228  pprof:
   229  	@echo MARK: pprof
   230  	go tool pprof -raw -output=cpu.txt 'http://${SERVER}:3001/debug/pprof/profile?seconds=30'
   231  
   232  typedoc:
   233  	@echo MARK: typedoc
   234  	npx typedoc --tsconfig ./data/scripts/tsconfig.json --out ./api/typedoc ./data/scripts/global.d.ts