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