blob: 475d17d4ba762142747fbb73260362d46e99e082 [file] [log] [blame]
# Copyright 2019 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
MKFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST)))
PROJECT_PATH := $(patsubst %/,%,$(dir $(MKFILE_PATH)))
APP_PATH := $(PROJECT_PATH)/app/appengine
MR_APP_PATH := $(PROJECT_PATH)/app/ui/manual-repair
DEV_CFG_PATH := $(PROJECT_PATH)/devcfg/services/dev/
LIBS_PATH := $(PROJECT_PATH)/../../../cros/lab_inventory
GCP_PROJECT = cros-lab-inventory
GCP_PROJECT_DEV = cros-lab-inventory-dev
ifeq (${DEBUG}, 1)
TESTOPTIONS =-v --parallel=1
endif
.PHONY: default
default: vet test
define help_message
Helpers for managing Chrome OS Lab Inventory project in $(PROJECT_PATH):
vet: run 'go vet' on current directory
test: run all Go unittests
gen: regenerate all Go bindings
config: create a dev config for local Go devserver
dev: run the main Inventory v2 service locally
up-dev: upload Inventory v2 service to dev appengine service and route traffic
cleanup-dev: run gae.py cleanup for Inventory v2 on dev appengine
up-prod: upload Inventory v2 service to prod appengine service without routing traffic
switch-prod: switch Inventory v2 prod version and route traffic
mr-setup: install all node_modules for Manual Repair App
mr-dev: run Manual Repair App locally
mr-deps: build dependencies needed for deployment
mr-up-dev: upload Manual Repair App to dev appengine service and route traffic
mr-up-prod: upload Manual Repair App to prod appengine service without routing traffic
up-dev-all: upload all services to dev appengine and route traffic
up-prod-all: upload all services to prod appengine without routing traffic
switch-prod-all: switch Inventory v2 prod version and route traffic
endef
.PHONY: help
help:
$(info $(help_message))
.PHONY: vet
vet:
go vet -all ./...
.PHONY: test
test:
go test ${TESTOPTIONS} -coverprofile=coverage.out ./... ${LIBS_PATH}/... || true
go tool cover -html=coverage.out -o coverage.html
.PHONY: gen
gen:
go generate ./...
# Development server
.PHONY: config
config:
@printf ">>> Creating dev config at %s/%s.cfg. You may want to edit this for your needs.\n" $(DEV_CFG_PATH) $@
cp $(DEV_CFG_PATH)/config-template.cfg $(DEV_CFG_PATH)/$@.cfg
.PHONY: dev
dev:
gae.py devserver -A dev --app-dir $(APP_PATH) -- --host 0.0.0.0 --port 8082 --admin_port 7999 --log_level debug
# Uploading
.PHONY: check-sync
check-sync:
@printf "Please update the following luci path to ToT:\n"
@printf " infra/go/src/go.chromium.org/chromiumos/infra/proto\n"
@printf " infra/go/src/go.chromium.org/chromiumos/config\n"
@printf "\n"
@printf "Have you finished syncing? [y/N]" && read ans && [ $${ans:-N} = y ]
.PHONY: up-dev
up-dev: check-sync
gae.py upload -A $(GCP_PROJECT_DEV) --app-dir $(APP_PATH) -f
gae.py switch -A $(GCP_PROJECT_DEV) --app-dir $(APP_PATH) -f
.PHONY: cleanup-dev
cleanup-dev:
gae.py cleanup -A $(GCP_PROJECT_DEV) --app-dir $(APP_PATH)
.PHONY: up-prod
up-prod: check-sync
gae.py upload -A $(GCP_PROJECT) --app-dir $(APP_PATH)
.PHONY: switch-prod
switch-prod:
gae.py switch -A $(GCP_PROJECT) --app-dir $(APP_PATH)
# Manual Repair App
.PHONY: mr-setup
mr-setup:
cd $(MR_APP_PATH); \
npm install -g typescript; \
npm i
.PHONY: mr-dev
mr-dev:
cd $(MR_APP_PATH); \
npm run dev
.PHONY: mr-deps
mr-deps:
cd $(MR_APP_PATH); \
npm install --no-save
.PHONY: mr-up-dev
mr-up-dev: mr-deps
cd $(MR_APP_PATH); \
npm run build-stage; \
gcloud app deploy --promote $(MR_APP_PATH)/app.stage.yaml \
$(PROJECT_PATH)/app/dispatch.yaml --project $(GCP_PROJECT_DEV)
.PHONY: mr-up-prod
mr-up-prod: mr-deps
cd $(MR_APP_PATH); \
npm run build-prod; \
gcloud app deploy --no-promote $(MR_APP_PATH)/app.prod.yaml \
$(PROJECT_PATH)/app/dispatch.yaml --project $(GCP_PROJECT)
# Full Deployment
.PHONY: up-dev-all
up-dev-all:
up-dev
mr-up-dev
.PHONY: up-prod-all
up-prod-all:
up-prod
mr-up-prod
.PHONY: switch-prod-all
switch-prod-all:
switch-prod