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