137 lines
5.3 KiB
Bash
Executable File
137 lines
5.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Copyright 2018-2020 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.
|
|
|
|
|
|
# This file generates API sources from the protocol buffers defined in this
|
|
# directory using Bazel, then copies them back into the source tree so they can
|
|
# be checked-in.
|
|
|
|
set -ex
|
|
|
|
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" > /dev/null && pwd)"
|
|
REPO_ROOT="$DIR/../.."
|
|
VERSION="$(cat $REPO_ROOT/VERSION)"
|
|
if [ -z "$VERSION" ]; then
|
|
echo "ERROR: $REPO_ROOT/VERSION is empty"
|
|
exit 1
|
|
fi
|
|
|
|
BAZEL_BINDIR=$(bazel info bazel-bin)
|
|
SWAGGER_CMD=${DIR}/../../bazel-bin/external/com_github_go_swagger/cmd/swagger/*stripped/swagger
|
|
AUTOGEN_CMD="${DIR}/../../bazel-bin/external/com_github_mbrukman_autogen/autogen_tool"
|
|
GENERATED_GO_PROTO_FILES="${BAZEL_BINDIR}/backend/api/api_generated_go_sources/src/github.com/kubeflow/pipelines/backend/api/go_client/*.go"
|
|
|
|
# TODO this script should be able to be run from anywhere, not just within .../backend/api/
|
|
|
|
# Delete currently generated code.
|
|
rm -r -f ${DIR}/go_http_client/*
|
|
rm -r -f ${DIR}/go_client/*
|
|
|
|
# Build required tools.
|
|
bazel build @com_github_mbrukman_autogen//:autogen_tool
|
|
bazel build @com_github_go_swagger//cmd/swagger
|
|
|
|
# Build .pb.go and .gw.pb.go files from the proto sources.
|
|
bazel build //backend/api:api_generated_go_sources
|
|
|
|
# Copy the generated files into the source tree and add license.
|
|
for f in $GENERATED_GO_PROTO_FILES; do
|
|
target=${DIR}/go_client/$(basename ${f})
|
|
cp $f $target
|
|
chmod 766 $target
|
|
${AUTOGEN_CMD} -i --no-tlc -c "Google LLC" -l apache $target
|
|
done
|
|
|
|
# Generate and copy back into source tree .swagger.json files.
|
|
bazel build //backend/api:api_swagger
|
|
cp ${BAZEL_BINDIR}/backend/api/*.swagger.json ${DIR}/swagger
|
|
|
|
jq -s '
|
|
reduce .[] as $item ({}; . * $item) |
|
|
.info.title = "Kubeflow Pipelines API" |
|
|
.info.description = "This file contains REST API specification for Kubeflow Pipelines. The file is autogenerated from the swagger definition." |
|
|
.info.version = "'$VERSION'" |
|
|
.info.contact = { "name": "google", "email": "kubeflow-pipelines@google.com", "url": "https://www.google.com" } |
|
|
.info.license = { "name": "Apache 2.0", "url": "https://raw.githubusercontent.com/kubeflow/pipelines/master/LICENSE" }
|
|
' ${DIR}/swagger/{run,job,pipeline,experiment,pipeline.upload}.swagger.json > "${DIR}/swagger/kfp_api_single_file.swagger.json"
|
|
|
|
# Generate Go HTTP client from the swagger files.
|
|
${SWAGGER_CMD} generate client \
|
|
-f ${DIR}/swagger/job.swagger.json \
|
|
-A job \
|
|
--principal models.Principal \
|
|
-c job_client \
|
|
-m job_model \
|
|
-t ${DIR}/go_http_client
|
|
|
|
${SWAGGER_CMD} generate client \
|
|
-f ${DIR}/swagger/run.swagger.json \
|
|
-A run \
|
|
--principal models.Principal \
|
|
-c run_client \
|
|
-m run_model \
|
|
-t ${DIR}/go_http_client
|
|
|
|
${SWAGGER_CMD} generate client \
|
|
-f ${DIR}/swagger/experiment.swagger.json \
|
|
-A experiment \
|
|
--principal models.Principal \
|
|
-c experiment_client \
|
|
-m experiment_model \
|
|
-t ${DIR}/go_http_client
|
|
|
|
${SWAGGER_CMD} generate client \
|
|
-f ${DIR}/swagger/pipeline.upload.swagger.json \
|
|
-A pipeline_upload \
|
|
--principal models.Principal \
|
|
-c pipeline_upload_client \
|
|
-m pipeline_upload_model \
|
|
-t ${DIR}/go_http_client
|
|
|
|
${SWAGGER_CMD} generate client \
|
|
-f ${DIR}/swagger/pipeline.swagger.json \
|
|
-A pipeline \
|
|
--principal models.Principal \
|
|
-c pipeline_client \
|
|
-m pipeline_model \
|
|
-t ${DIR}/go_http_client
|
|
|
|
${SWAGGER_CMD} generate client \
|
|
-f ${DIR}/swagger/visualization.swagger.json \
|
|
-A visualization \
|
|
--principal models.Principal \
|
|
-c visualization_client \
|
|
-m visualization_model \
|
|
-t ${DIR}/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' ${DIR}/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' ${DIR}/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' ${DIR}/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' ${DIR}/go_http_client/job_model/api_periodic_schedule.go
|
|
|
|
# Executes the //go:generate directives in the generated code.
|
|
go generate ./...
|
|
|
|
# Add license to files in go_http_client.
|
|
find ${DIR}/go_http_client/ -name "*.go" -exec ${AUTOGEN_CMD} -i --no-tlc -c "Google LLC" -l apache {} \;
|
|
|
|
# Finally, run gazelle to add BUILD files for the generated code.
|
|
bazel run //:gazelle
|
|
# HACK: remove unnecessary BUILD.bazels
|
|
rm -f "$REPO_ROOT/sdk/python/kfp/components/structures/BUILD.bazel" "$REPO_ROOT/tools/metadatastore-upgrade/BUILD.bazel"
|