blob: a7240df5f19f576b6b0d15e2fb7315a7967b4b1a [file] [log] [blame]
# Copyright 2017 The LUCI Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# This Makefile (GNU) controls the construction and deployment of the
# "luci-logdog" application. This is a common Makefile, and is expected to be
# imported by an implementation-specific Makefile. The implementation-specific
# Makefile must supply the following variables:
#
# - CLOUD_PROJECT
#
# The Makefile may supply the following optional variables:
# - TAG: The AppEngine tag. If not specified, let "gae.py" choose a
# tag (default, important for production).
.PHONY: default
default: help
# Assert that all required variables are provided.
ifndef CLOUD_PROJECT
$(error Missing required variable: CLOUD_PROJECT)
endif
# Determine "luci-go" repository paths.
mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
APP_DIR := $(dir $(mkfile_path))
LUCI_GO_DIR := $(abspath $(APP_DIR)/../../../..)
# VPATH determines the relative paths of Makefile targets. We need to set it
# here, since we're expecting to be invoked from a Makefile in a different
# directory. This allows our relative paths to be resolved by `make`.
VPATH := $(APP_DIR)
# If a tag was provided, add it to the "GAE_PY" args.
export LUCI_PY_USE_GCLOUD=1
GAE_PY_EXTRA_ARGS =
ifdef TAG
GAE_PY_EXTRA_ARGS := $(GAE_PY_EXTRA_ARGS) -t $(TAG)
endif
ALL_SERVICES = default services backend static
define HELP_BODY
Manage LogDog distributions.
Management targets:
web: Builds static web content into the 'static' module.
Service Targets for: $(ALL_SERVICES)
upload-SERVICE: uploads an instance of the service, but doesn't migrate.
switch: Switches all services over to the uploaded version.
Special Service Targets:
upload-static-dev: special command to upload an instance of the static
module named "dev". This can be whitelisted for OAuth for authenticated
testing.
endef
.PHONY: help
help:
$(info $(HELP_BODY))
.PHONY: yamls
yamls: vmuser/app.yaml vmuser/dispatch.yaml vmuser/index.yaml
.PHONY: web
web:
-rm -rf $(APP_DIR)static/dist
$(LUCI_GO_DIR)/web/web.py build \
--build-dir $(APP_DIR)static \
logdog-app \
logdog-view \
rpcexplorer
# Default resources definition.
.PHONY: $(addsuffix -resources,$(ALL_SERVICES))
$(addsuffix -resources,$(ALL_SERVICES))::
# The "static" module requires additional resources.
static-resources:: web
##
# Per-module Build Rules
#
# upload-<module>: Uploads the module, but doesn't set it to be default.
# deploy-<module>: Uploads the module and sets it to be default.
##
.PHONY: $(addprefix upload-,$(ALL_SERVICES))
$(addprefix upload-,$(ALL_SERVICES)): upload-%: %-resources yamls
cd $(APP_DIR) && \
gae.py upload \
-A $(CLOUD_PROJECT) \
$(GAE_PY_EXTRA_ARGS) \
--force \
$*
.PHONY: upload
upload: $(addsuffix -resources,$(ALL_SERVICES))
cd $(APP_DIR) && \
gae.py upload \
-A $(CLOUD_PROJECT) \
$(GAE_PY_EXTRA_ARGS) \
--force \
$(ALL_SERVICES)
.PHONY: switch
switch:
cd $(APP_DIR) && \
gcloud \
--project $(CLOUD_PROJECT) \
app versions migrate \
$$(gae.py version -A $(CLOUD_PROJECT) $(GAE_PY_EXTRA_ARGS)) \
$(addprefix --service=,$(ALL_SERVICES))
# This is a special make target to upload the static module named "dev". This
# version can be specifically whitelisted by the service account to enable
# authentication and test a production instance.
.PHONY: upload-static-dev
upload-static-dev: static-resources yamls
cd $(APP_DIR) && \
gcloud app deploy \
--project $(CLOUD_PROJECT) \
--version "dev" \
--quiet \
--no-promote \
static/module-static.yaml