blob: c7130f4384e1bdae43c0187dda453c2b13dd49f8 [file] [log] [blame]
// Copyright 2018 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.
package lucicfg
// Import all protos which we want to be available from the Starlark side.
// Starlark code relies on the protobuf registry in the interpreter process for
// type information.
import (
"go.chromium.org/luci/starlark/interpreter"
_ "go.chromium.org/luci/buildbucket/proto/config"
_ "go.chromium.org/luci/common/proto/config"
_ "go.chromium.org/luci/logdog/api/config/svcconfig"
_ "go.chromium.org/luci/luci_notify/api/config"
_ "go.chromium.org/luci/milo/api/config"
_ "go.chromium.org/luci/scheduler/appengine/messages"
)
// Mapping from a proto module path on the Starlark side to its proto package
// name and path within luci-go repository.
//
// Go proto location can be changed without altering Starlark API. Proto package
// name is still important and should not be changed. It is here mostly for the
// documentation purpose.
//
// There's also a test that asserts real proto packages (per generated *.pb2.go)
// match what's specified here.
var publicProtos = map[string]struct {
protoPkg string
goPath string
}{
// Buildbucket project config.
//
// load("@proto//luci/buildbucket/project_config.proto", buildbucket_pb="buildbucket")
"luci/buildbucket/project_config.proto": {
"buildbucket",
"go.chromium.org/luci/buildbucket/proto/config/project_config.proto",
},
// "LUCI Config" project config.
//
// load("@proto//luci/config/project_config.proto", config_pb="config")
"luci/config/project_config.proto": {
"config",
"go.chromium.org/luci/common/proto/config/project_config.proto",
},
// LogDog project config.
//
// load("@proto//luci/logdog/project_config.proto", logdog_pb="svcconfig")
"luci/logdog/project_config.proto": {
"svcconfig",
"go.chromium.org/luci/logdog/api/config/svcconfig/project.proto",
},
// "LUCI Notify" project config.
//
// load("@proto//luci/notify/project_config.proto", notify_pb="notify")
"luci/notify/project_config.proto": {
"notify",
"go.chromium.org/luci/luci_notify/api/config/notify.proto",
},
// Milo project config.
//
// load("@proto//luci/milo/project_config.proto", milo_pb="milo")
"luci/milo/project_config.proto": {
"milo",
"go.chromium.org/luci/milo/api/config/project.proto",
},
// "LUCI Scheduler" project config.
//
// load("@proto//luci/scheduler/project_config.proto", scheduler_pb="scheduler.config")
"luci/scheduler/project_config.proto": {
"scheduler.config",
"go.chromium.org/luci/scheduler/appengine/messages/config.proto",
},
}
// protoLoader returns a loader that is capable of loading publicProtos.
func protoLoader() interpreter.Loader {
mapping := make(map[string]string, len(publicProtos))
for path, proto := range publicProtos {
mapping[path] = proto.goPath
}
return interpreter.ProtoLoader(mapping)
}