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