pipelines/backend/api/Makefile

130 lines
5.3 KiB
Makefile

# Copyright 2018 Google LLC
#
# 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.
# Building requires protobuf version 3.6.0 or above. Unzip this directory to a
# suitable location and modify the values of the following two variables before
# running make.
protocompiler = ${HOME}/protobuf-3.6.1/bin/protoc
protoinclude = ${HOME}/protobuf-3.6.1/include
TMPDIR := $(shell mktemp -d)
default: all
dependencies:
@echo "Using temporary directory: $(TMPDIR)"
GOBIN=$(TMPDIR) go install ../../vendor/github.com/go-swagger/go-swagger/cmd/swagger
GOBIN=$(TMPDIR) go install ../../vendor/github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway
GOBIN=$(TMPDIR) go install ../../vendor/github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger
GOBIN=$(TMPDIR) go install ../../vendor/github.com/golang/protobuf/protoc-gen-go
all: dependencies
# Delete currently generated code.
rm -r -f go_http_client/*
rm -r -f go_client/*
# Compile the *.proto files into *.pb.go (grpc client).
$(protocompiler) -I$(protoinclude) -I/usr/local/include -I. \
-I../../vendor/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \
-I../../vendor/github.com/grpc-ecosystem/grpc-gateway/ \
--plugin=protoc-gen-go=${TMPDIR}/protoc-gen-go \
--go_out=plugins=grpc:go_client \
*.proto
# Compile the *.proto files into *.pb.gw.go (grpc client).
$(protocompiler) -I$(protoinclude) -I/usr/local/include -I. \
-I../../vendor/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \
-I../../vendor/github.com/grpc-ecosystem/grpc-gateway/ \
--plugin=protoc-gen-grpc-gateway=${TMPDIR}/protoc-gen-grpc-gateway \
--grpc-gateway_out=logtostderr=true:go_client \
*.proto
# Filter.proto is implicitly used by clients and server, and transmitted as a
# serialized string in ListXXX requests. This hack defines a dummy service to
# coerce protoc-gen-swagger to generate Swagger JSON definitions for
# filter.proto.
cp -f filter.proto filter.proto.bak
printf "service DummyFilterService {\nrpc DoFilter(Filter) returns (Filter) {\n option (google.api.http) = { \nget: \"/apis/v1beta1/filters\"\n};\n }}" >> filter.proto
# Compile the *.proto files into *.swagger.json (swagger specification).
$(protocompiler) -I$(protoinclude) -I/usr/local/include -I. \
-I../../vendor/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \
-I../../vendor/github.com/grpc-ecosystem/grpc-gateway/ \
--plugin=protoc-gen-swagger=${TMPDIR}/protoc-gen-swagger \
--swagger_out=logtostderr=true:swagger \
*.proto
# Revert the dummy service definition.
mv -f filter.proto.bak filter.proto
# Compile the *.swagger.json into go REST clients.
# Instructions to install the 'swagger' command are located here:
# https://github.com/go-swagger/go-swagger
# swagger v0.17.0 was last used.
$(TMPDIR)/swagger generate client \
-f swagger/job.swagger.json \
-A job \
--principal models.Principal \
-c job_client \
-m job_model \
-t go_http_client
$(TMPDIR)/swagger generate client \
-f swagger/run.swagger.json \
-A run \
--principal models.Principal \
-c run_client \
-m run_model \
-t go_http_client
$(TMPDIR)/swagger generate client \
-f swagger/experiment.swagger.json \
-A experiment \
--principal models.Principal \
-c experiment_client \
-m experiment_model \
-t go_http_client
$(TMPDIR)/swagger generate client \
-f swagger/pipeline.upload.swagger.json \
-A pipeline_upload \
--principal models.Principal \
-c pipeline_upload_client \
-m pipeline_upload_model \
-t go_http_client
$(TMPDIR)/swagger generate client \
-f swagger/pipeline.swagger.json \
-A pipeline \
--principal models.Principal \
-c pipeline_client \
-m pipeline_model \
-t go_http_client
# Hack to fix an issue with go-swagger
# See https://github.com/go-swagger/go-swagger/issues/1381 for details.
sed -i -- 's/MaxConcurrency int64 `json:"max_concurrency,omitempty"`/MaxConcurrency int64 `json:"max_concurrency,omitempty,string"`/g' ./go_http_client/job_model/api_job.go
sed -i -- 's/IntervalSecond int64 `json:"interval_second,omitempty"`/IntervalSecond int64 `json:"interval_second,omitempty,string"`/g' ./go_http_client/job_model/api_periodic_schedule.go
sed -i -- 's/MaxConcurrency string `json:"max_concurrency,omitempty"`/MaxConcurrency int64 `json:"max_concurrency,omitempty,string"`/g' ./go_http_client/job_model/api_job.go
sed -i -- 's/IntervalSecond string `json:"interval_second,omitempty"`/IntervalSecond int64 `json:"interval_second,omitempty,string"`/g' ./go_http_client/job_model/api_periodic_schedule.go
# Executes the //go:generate directives in the generated code.
go generate ./...
# Add licenses to the generated files.
# Instructions to install the 'autogen' command are located here:
# https://github.com/mbrukman/autogen
find ./ -name "*.go" -exec autogen.sh -i --no-tlc -c "Google LLC" -l apache {} \;
@echo "Cleaning $(TMPDIR)"
rm -r -f $(TMPDIR)