diff --git a/buf/plugin/info/v1/info.proto b/buf/plugin/info/v1/info.proto new file mode 100644 index 0000000..a9a2309 --- /dev/null +++ b/buf/plugin/info/v1/info.proto @@ -0,0 +1,63 @@ +// Copyright 2024 Buf Technologies, Inc. +// +// 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. + +syntax = "proto3"; + +package buf.plugin.info.v1; + +import "buf/validate/validate.proto"; + +option go_package = "buf.build/gen/go/bufbuild/bufplugin/protocolbuffers/go/buf/plugin/info/v1"; + +// Information about a plugin. +message Info { + // The url for the plugin. + // + // This typically is the source control repository that contains the plugin's implementation. + string url = 1 [(buf.validate.field).string.uri = true]; + // The license of the plugin. + License license = 2; + // Documentation for a plugin. + Doc doc = 3; +} + +// A plugin license. +message License { + // The SPDX license ID. + // + // See https://spdx.org/licenses. + string spdx_license_id = 1; + // The source of a license is either raw text, or a URL that contains the license. + oneof source { + option (buf.validate.oneof).required = true; + + // The raw text of the license. + string text = 2; + // The url that contains the license + string url = 3 [(buf.validate.field).string.uri = true]; + } +} + +// Documentation for a plugin. +message Doc { + // A short string describing the plugin. + // + // This is required. + string short = 1 [(buf.validate.field).required = true]; + // A long string providing more details on using the plugin. + // + // When producing documentation for the plugin, this will be concatenated with + // the value from short with a newline separating short and long. + string long = 2; +} diff --git a/buf/plugin/info/v1/info_service.proto b/buf/plugin/info/v1/info_service.proto new file mode 100644 index 0000000..8a42440 --- /dev/null +++ b/buf/plugin/info/v1/info_service.proto @@ -0,0 +1,39 @@ +// Copyright 2024 Buf Technologies, Inc. +// +// 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. + +syntax = "proto3"; + +package buf.plugin.info.v1; + +import "buf/plugin/info/v1/info.proto"; +import "buf/validate/validate.proto"; + +option go_package = "buf.build/gen/go/bufbuild/bufplugin/protocolbuffers/go/buf/plugin/info/v1"; + +// The service that returns information about the plugin. +service InfoService { + // GetInfo gets information about the plugin. + rpc GetInfo(GetInfoRequest) returns (GetInfoResponse) { + option idempotency_level = NO_SIDE_EFFECTS; + } +} + +// A request to get information about a plugin. +message GetInfoRequest {} + +// A response containing information about a plugin. +message GetInfoResponse { + // The information about the plugin. + Info info = 1 [(buf.validate.field).required = true]; +}