detached 751d351

feat(proto): ReleaseService, release:write scope and release events

commit
751d3518d858cfece95cd552f798e836e6ba4292
author
brice · · 2026-10-21 14:14 UTC
committer
brice · · 2026-10-21 17:42 UTC
parent
e4b332d
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
checks
2/2
refs
tag: v0.16.0
11 files · +3361 -47
M docs/services.md +26 -0
@@ -50,3 +50,29 @@ starts failing (ok or disabled to failing or paused, once per incident), and `mi
5050 These are transition events, not events for every attempt. They are delivered on
5151 `repo:<name>` and `home`, subject to repository visibility. Neither event carries
5252 a URL, reason or error detail (`MirrorFailed` field 4, `reason`, was removed).
53+
54+## ReleaseService
55+
56+Servers advertise `releases` in `GetVersionResponse.features`.
57+
58+| RPC | Behavior |
59+|---|---|
60+| `CreateRelease`, `GetRelease`, `ListReleases`, `UpdateRelease`, `DeleteRelease` | Manage releases; get selects by id, tag or latest. Lists are paginated, newest first. Updates use a field mask |
61+| `UploadReleaseAsset` | Client stream: metadata and nonnegative exact size first, then data in chunks of at most 1 MiB. `replace` replaces a taken name |
62+| `UpdateReleaseAsset`, `DeleteReleaseAsset`, `ListReleaseAssets` | Rename/relabel with a field mask, delete, or list uploaded assets by name |
63+| `DownloadReleaseAsset` | Select by asset id, tag/name or latest/name; metadata first, then chunks of at most 1 MiB. Resume with a byte offset |
64+| `GetReleaseUsage` | Repository usage including reserved uploads, quota, asset size and count limits |
65+
66+Published releases follow repository read access; drafts are visible only to
67+writers. Writes require `release:write` (`SCOPE_RELEASE_WRITE = 13`) or a job
68+token with `contents: write` for that repository. Branch-limited tokens cannot
69+write releases. Unreadable objects return `not_found`. Duplicate tags or asset
70+names return `already_exists`; limits return `resource_exhausted`. Publishing
71+requires an existing tag or `target_commitish` to create it; existing tags never
72+move. `make_latest` is a boolean pin, and updates use mask presence.
73+
74+`EventService.Watch` adds `release_published` (27), `release_updated` (28),
75+`release_deleted` (29) and `release_unpublished` (30), delivered on `repo:<name>`
76+and `home` subject to repository visibility. Payloads carry repository, release
77+id and tag; all except deletion also carry draft and prerelease flags. Tag
78+deletion turns a release into a draft without deleting its assets.
@@ -50,3 +50,29 @@ starts failing (ok or disabled to failing or paused, once per incident), and `mi
50 These are transition events, not events for every attempt. They are delivered on50 These are transition events, not events for every attempt. They are delivered on
51 `repo:<name>` and `home`, subject to repository visibility. Neither event carries51 `repo:<name>` and `home`, subject to repository visibility. Neither event carries
52 a URL, reason or error detail (`MirrorFailed` field 4, `reason`, was removed).52 a URL, reason or error detail (`MirrorFailed` field 4, `reason`, was removed).
53+
54+## ReleaseService
55+
56+Servers advertise `releases` in `GetVersionResponse.features`.
57+
58+| RPC | Behavior |
59+|---|---|
60+| `CreateRelease`, `GetRelease`, `ListReleases`, `UpdateRelease`, `DeleteRelease` | Manage releases; get selects by id, tag or latest. Lists are paginated, newest first. Updates use a field mask |
61+| `UploadReleaseAsset` | Client stream: metadata and nonnegative exact size first, then data in chunks of at most 1 MiB. `replace` replaces a taken name |
62+| `UpdateReleaseAsset`, `DeleteReleaseAsset`, `ListReleaseAssets` | Rename/relabel with a field mask, delete, or list uploaded assets by name |
63+| `DownloadReleaseAsset` | Select by asset id, tag/name or latest/name; metadata first, then chunks of at most 1 MiB. Resume with a byte offset |
64+| `GetReleaseUsage` | Repository usage including reserved uploads, quota, asset size and count limits |
65+
66+Published releases follow repository read access; drafts are visible only to
67+writers. Writes require `release:write` (`SCOPE_RELEASE_WRITE = 13`) or a job
68+token with `contents: write` for that repository. Branch-limited tokens cannot
69+write releases. Unreadable objects return `not_found`. Duplicate tags or asset
70+names return `already_exists`; limits return `resource_exhausted`. Publishing
71+requires an existing tag or `target_commitish` to create it; existing tags never
72+move. `make_latest` is a boolean pin, and updates use mask presence.
73+
74+`EventService.Watch` adds `release_published` (27), `release_updated` (28),
75+`release_deleted` (29) and `release_unpublished` (30), delivered on `repo:<name>`
76+and `home` subject to repository visibility. Payloads carry repository, release
77+id and tag; all except deletion also carry draft and prerelease flags. Tag
78+deletion turns a release into a draft without deleting its assets.
A gen/ermite/ermiteconnect/release.connect.go +441 -0
@@ -0,0 +1,441 @@
1+// SPDX-License-Identifier: MIT
2+
3+// Code generated by protoc-gen-connect-go. DO NOT EDIT.
4+//
5+// Source: ermite/release.proto
6+
7+package ermiteconnect
8+
9+import (
10+ ermite "bnema.dev/ermite-api/gen/ermite"
11+ connect "connectrpc.com/connect"
12+ context "context"
13+ errors "errors"
14+ http "net/http"
15+ strings "strings"
16+)
17+
18+// This is a compile-time assertion to ensure that this generated file and the connect package are
19+// compatible. If you get a compiler error that this constant is not defined, this code was
20+// generated with a version of connect newer than the one compiled into your binary. You can fix the
21+// problem by either regenerating this code with an older version of connect or updating the connect
22+// version compiled into your binary.
23+const _ = connect.IsAtLeastVersion1_13_0
24+
25+const (
26+ // ReleaseServiceName is the fully-qualified name of the ReleaseService service.
27+ ReleaseServiceName = "ermite.ReleaseService"
28+)
29+
30+// These constants are the fully-qualified names of the RPCs defined in this package. They're
31+// exposed at runtime as Spec.Procedure and as the final two segments of the HTTP route.
32+//
33+// Note that these are different from the fully-qualified method names used by
34+// google.golang.org/protobuf/reflect/protoreflect. To convert from these constants to
35+// reflection-formatted method names, remove the leading slash and convert the remaining slash to a
36+// period.
37+const (
38+ // ReleaseServiceCreateReleaseProcedure is the fully-qualified name of the ReleaseService's
39+ // CreateRelease RPC.
40+ ReleaseServiceCreateReleaseProcedure = "/ermite.ReleaseService/CreateRelease"
41+ // ReleaseServiceGetReleaseProcedure is the fully-qualified name of the ReleaseService's GetRelease
42+ // RPC.
43+ ReleaseServiceGetReleaseProcedure = "/ermite.ReleaseService/GetRelease"
44+ // ReleaseServiceListReleasesProcedure is the fully-qualified name of the ReleaseService's
45+ // ListReleases RPC.
46+ ReleaseServiceListReleasesProcedure = "/ermite.ReleaseService/ListReleases"
47+ // ReleaseServiceUpdateReleaseProcedure is the fully-qualified name of the ReleaseService's
48+ // UpdateRelease RPC.
49+ ReleaseServiceUpdateReleaseProcedure = "/ermite.ReleaseService/UpdateRelease"
50+ // ReleaseServiceDeleteReleaseProcedure is the fully-qualified name of the ReleaseService's
51+ // DeleteRelease RPC.
52+ ReleaseServiceDeleteReleaseProcedure = "/ermite.ReleaseService/DeleteRelease"
53+ // ReleaseServiceUploadReleaseAssetProcedure is the fully-qualified name of the ReleaseService's
54+ // UploadReleaseAsset RPC.
55+ ReleaseServiceUploadReleaseAssetProcedure = "/ermite.ReleaseService/UploadReleaseAsset"
56+ // ReleaseServiceUpdateReleaseAssetProcedure is the fully-qualified name of the ReleaseService's
57+ // UpdateReleaseAsset RPC.
58+ ReleaseServiceUpdateReleaseAssetProcedure = "/ermite.ReleaseService/UpdateReleaseAsset"
59+ // ReleaseServiceDeleteReleaseAssetProcedure is the fully-qualified name of the ReleaseService's
60+ // DeleteReleaseAsset RPC.
61+ ReleaseServiceDeleteReleaseAssetProcedure = "/ermite.ReleaseService/DeleteReleaseAsset"
62+ // ReleaseServiceDownloadReleaseAssetProcedure is the fully-qualified name of the ReleaseService's
63+ // DownloadReleaseAsset RPC.
64+ ReleaseServiceDownloadReleaseAssetProcedure = "/ermite.ReleaseService/DownloadReleaseAsset"
65+ // ReleaseServiceListReleaseAssetsProcedure is the fully-qualified name of the ReleaseService's
66+ // ListReleaseAssets RPC.
67+ ReleaseServiceListReleaseAssetsProcedure = "/ermite.ReleaseService/ListReleaseAssets"
68+ // ReleaseServiceGetReleaseUsageProcedure is the fully-qualified name of the ReleaseService's
69+ // GetReleaseUsage RPC.
70+ ReleaseServiceGetReleaseUsageProcedure = "/ermite.ReleaseService/GetReleaseUsage"
71+)
72+
73+// ReleaseServiceClient is a client for the ermite.ReleaseService service.
74+type ReleaseServiceClient interface {
75+ // CreateRelease creates one release per tag (already_exists on duplication).
76+ // Publishing without an existing tag is failed_precondition, unless
77+ // target_commitish is supplied to create it; existing tags never move.
78+ CreateRelease(context.Context, *connect.Request[ermite.CreateReleaseRequest]) (*connect.Response[ermite.CreateReleaseResponse], error)
79+ // GetRelease selects by id, tag or latest (latest must be true).
80+ GetRelease(context.Context, *connect.Request[ermite.GetReleaseRequest]) (*connect.Response[ermite.GetReleaseResponse], error)
81+ // ListReleases lists newest first, including drafts only for writers.
82+ ListReleases(context.Context, *connect.Request[ermite.ListReleasesRequest]) (*connect.Response[ermite.ListReleasesResponse], error)
83+ // UpdateRelease changes masked fields. Publishing requires an existing tag
84+ // or target_commitish to create it; otherwise failed_precondition.
85+ UpdateRelease(context.Context, *connect.Request[ermite.UpdateReleaseRequest]) (*connect.Response[ermite.UpdateReleaseResponse], error)
86+ // DeleteRelease removes a release and its assets.
87+ DeleteRelease(context.Context, *connect.Request[ermite.DeleteReleaseRequest]) (*connect.Response[ermite.DeleteReleaseResponse], error)
88+ // UploadReleaseAsset reserves size before reading. The first message carries
89+ // metadata; subsequent messages carry only data, at most 1 MiB per message.
90+ // Size must be nonnegative (-1 is refused). An interrupted stream stores no
91+ // asset. A taken name gives already_exists unless replace is true. Uploading
92+ // to a release of another repo gives failed_precondition.
93+ UploadReleaseAsset(context.Context) *connect.ClientStreamForClient[ermite.UploadReleaseAssetRequest, ermite.UploadReleaseAssetResponse]
94+ // UpdateReleaseAsset changes masked name and label; a taken name gives already_exists.
95+ UpdateReleaseAsset(context.Context, *connect.Request[ermite.UpdateReleaseAssetRequest]) (*connect.Response[ermite.UpdateReleaseAssetResponse], error)
96+ // DeleteReleaseAsset removes an asset.
97+ DeleteReleaseAsset(context.Context, *connect.Request[ermite.DeleteReleaseAssetRequest]) (*connect.Response[ermite.DeleteReleaseAssetResponse], error)
98+ // DownloadReleaseAsset sends asset metadata first, then chunks of at most
99+ // 1 MiB. Resume with the offset after the last byte received. An offset
100+ // beyond the size gives out_of_range.
101+ DownloadReleaseAsset(context.Context, *connect.Request[ermite.DownloadReleaseAssetRequest]) (*connect.ServerStreamForClient[ermite.DownloadReleaseAssetResponse], error)
102+ // ListReleaseAssets lists uploaded assets, ordered by name.
103+ ListReleaseAssets(context.Context, *connect.Request[ermite.ListReleaseAssetsRequest]) (*connect.Response[ermite.ListReleaseAssetsResponse], error)
104+ // GetReleaseUsage returns usage (including reserved uploads) and limits.
105+ GetReleaseUsage(context.Context, *connect.Request[ermite.GetReleaseUsageRequest]) (*connect.Response[ermite.GetReleaseUsageResponse], error)
106+}
107+
108+// NewReleaseServiceClient constructs a client for the ermite.ReleaseService service. By default, it
109+// uses the Connect protocol with the binary Protobuf Codec, asks for gzipped responses, and sends
110+// uncompressed requests. To use the gRPC or gRPC-Web protocols, supply the connect.WithGRPC() or
111+// connect.WithGRPCWeb() options.
112+//
113+// The URL supplied here should be the base URL for the Connect or gRPC server (for example,
114+// http://api.acme.com or https://acme.com/grpc).
115+func NewReleaseServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) ReleaseServiceClient {
116+ baseURL = strings.TrimRight(baseURL, "/")
117+ releaseServiceMethods := ermite.File_ermite_release_proto.Services().ByName("ReleaseService").Methods()
118+ return &releaseServiceClient{
119+ createRelease: connect.NewClient[ermite.CreateReleaseRequest, ermite.CreateReleaseResponse](
120+ httpClient,
121+ baseURL+ReleaseServiceCreateReleaseProcedure,
122+ connect.WithSchema(releaseServiceMethods.ByName("CreateRelease")),
123+ connect.WithClientOptions(opts...),
124+ ),
125+ getRelease: connect.NewClient[ermite.GetReleaseRequest, ermite.GetReleaseResponse](
126+ httpClient,
127+ baseURL+ReleaseServiceGetReleaseProcedure,
128+ connect.WithSchema(releaseServiceMethods.ByName("GetRelease")),
129+ connect.WithClientOptions(opts...),
130+ ),
131+ listReleases: connect.NewClient[ermite.ListReleasesRequest, ermite.ListReleasesResponse](
132+ httpClient,
133+ baseURL+ReleaseServiceListReleasesProcedure,
134+ connect.WithSchema(releaseServiceMethods.ByName("ListReleases")),
135+ connect.WithClientOptions(opts...),
136+ ),
137+ updateRelease: connect.NewClient[ermite.UpdateReleaseRequest, ermite.UpdateReleaseResponse](
138+ httpClient,
139+ baseURL+ReleaseServiceUpdateReleaseProcedure,
140+ connect.WithSchema(releaseServiceMethods.ByName("UpdateRelease")),
141+ connect.WithClientOptions(opts...),
142+ ),
143+ deleteRelease: connect.NewClient[ermite.DeleteReleaseRequest, ermite.DeleteReleaseResponse](
144+ httpClient,
145+ baseURL+ReleaseServiceDeleteReleaseProcedure,
146+ connect.WithSchema(releaseServiceMethods.ByName("DeleteRelease")),
147+ connect.WithClientOptions(opts...),
148+ ),
149+ uploadReleaseAsset: connect.NewClient[ermite.UploadReleaseAssetRequest, ermite.UploadReleaseAssetResponse](
150+ httpClient,
151+ baseURL+ReleaseServiceUploadReleaseAssetProcedure,
152+ connect.WithSchema(releaseServiceMethods.ByName("UploadReleaseAsset")),
153+ connect.WithClientOptions(opts...),
154+ ),
155+ updateReleaseAsset: connect.NewClient[ermite.UpdateReleaseAssetRequest, ermite.UpdateReleaseAssetResponse](
156+ httpClient,
157+ baseURL+ReleaseServiceUpdateReleaseAssetProcedure,
158+ connect.WithSchema(releaseServiceMethods.ByName("UpdateReleaseAsset")),
159+ connect.WithClientOptions(opts...),
160+ ),
161+ deleteReleaseAsset: connect.NewClient[ermite.DeleteReleaseAssetRequest, ermite.DeleteReleaseAssetResponse](
162+ httpClient,
163+ baseURL+ReleaseServiceDeleteReleaseAssetProcedure,
164+ connect.WithSchema(releaseServiceMethods.ByName("DeleteReleaseAsset")),
165+ connect.WithClientOptions(opts...),
166+ ),
167+ downloadReleaseAsset: connect.NewClient[ermite.DownloadReleaseAssetRequest, ermite.DownloadReleaseAssetResponse](
168+ httpClient,
169+ baseURL+ReleaseServiceDownloadReleaseAssetProcedure,
170+ connect.WithSchema(releaseServiceMethods.ByName("DownloadReleaseAsset")),
171+ connect.WithClientOptions(opts...),
172+ ),
173+ listReleaseAssets: connect.NewClient[ermite.ListReleaseAssetsRequest, ermite.ListReleaseAssetsResponse](
174+ httpClient,
175+ baseURL+ReleaseServiceListReleaseAssetsProcedure,
176+ connect.WithSchema(releaseServiceMethods.ByName("ListReleaseAssets")),
177+ connect.WithClientOptions(opts...),
178+ ),
179+ getReleaseUsage: connect.NewClient[ermite.GetReleaseUsageRequest, ermite.GetReleaseUsageResponse](
180+ httpClient,
181+ baseURL+ReleaseServiceGetReleaseUsageProcedure,
182+ connect.WithSchema(releaseServiceMethods.ByName("GetReleaseUsage")),
183+ connect.WithClientOptions(opts...),
184+ ),
185+ }
186+}
187+
188+// releaseServiceClient implements ReleaseServiceClient.
189+type releaseServiceClient struct {
190+ createRelease *connect.Client[ermite.CreateReleaseRequest, ermite.CreateReleaseResponse]
191+ getRelease *connect.Client[ermite.GetReleaseRequest, ermite.GetReleaseResponse]
192+ listReleases *connect.Client[ermite.ListReleasesRequest, ermite.ListReleasesResponse]
193+ updateRelease *connect.Client[ermite.UpdateReleaseRequest, ermite.UpdateReleaseResponse]
194+ deleteRelease *connect.Client[ermite.DeleteReleaseRequest, ermite.DeleteReleaseResponse]
195+ uploadReleaseAsset *connect.Client[ermite.UploadReleaseAssetRequest, ermite.UploadReleaseAssetResponse]
196+ updateReleaseAsset *connect.Client[ermite.UpdateReleaseAssetRequest, ermite.UpdateReleaseAssetResponse]
197+ deleteReleaseAsset *connect.Client[ermite.DeleteReleaseAssetRequest, ermite.DeleteReleaseAssetResponse]
198+ downloadReleaseAsset *connect.Client[ermite.DownloadReleaseAssetRequest, ermite.DownloadReleaseAssetResponse]
199+ listReleaseAssets *connect.Client[ermite.ListReleaseAssetsRequest, ermite.ListReleaseAssetsResponse]
200+ getReleaseUsage *connect.Client[ermite.GetReleaseUsageRequest, ermite.GetReleaseUsageResponse]
201+}
202+
203+// CreateRelease calls ermite.ReleaseService.CreateRelease.
204+func (c *releaseServiceClient) CreateRelease(ctx context.Context, req *connect.Request[ermite.CreateReleaseRequest]) (*connect.Response[ermite.CreateReleaseResponse], error) {
205+ return c.createRelease.CallUnary(ctx, req)
206+}
207+
208+// GetRelease calls ermite.ReleaseService.GetRelease.
209+func (c *releaseServiceClient) GetRelease(ctx context.Context, req *connect.Request[ermite.GetReleaseRequest]) (*connect.Response[ermite.GetReleaseResponse], error) {
210+ return c.getRelease.CallUnary(ctx, req)
211+}
212+
213+// ListReleases calls ermite.ReleaseService.ListReleases.
214+func (c *releaseServiceClient) ListReleases(ctx context.Context, req *connect.Request[ermite.ListReleasesRequest]) (*connect.Response[ermite.ListReleasesResponse], error) {
215+ return c.listReleases.CallUnary(ctx, req)
216+}
217+
218+// UpdateRelease calls ermite.ReleaseService.UpdateRelease.
219+func (c *releaseServiceClient) UpdateRelease(ctx context.Context, req *connect.Request[ermite.UpdateReleaseRequest]) (*connect.Response[ermite.UpdateReleaseResponse], error) {
220+ return c.updateRelease.CallUnary(ctx, req)
221+}
222+
223+// DeleteRelease calls ermite.ReleaseService.DeleteRelease.
224+func (c *releaseServiceClient) DeleteRelease(ctx context.Context, req *connect.Request[ermite.DeleteReleaseRequest]) (*connect.Response[ermite.DeleteReleaseResponse], error) {
225+ return c.deleteRelease.CallUnary(ctx, req)
226+}
227+
228+// UploadReleaseAsset calls ermite.ReleaseService.UploadReleaseAsset.
229+func (c *releaseServiceClient) UploadReleaseAsset(ctx context.Context) *connect.ClientStreamForClient[ermite.UploadReleaseAssetRequest, ermite.UploadReleaseAssetResponse] {
230+ return c.uploadReleaseAsset.CallClientStream(ctx)
231+}
232+
233+// UpdateReleaseAsset calls ermite.ReleaseService.UpdateReleaseAsset.
234+func (c *releaseServiceClient) UpdateReleaseAsset(ctx context.Context, req *connect.Request[ermite.UpdateReleaseAssetRequest]) (*connect.Response[ermite.UpdateReleaseAssetResponse], error) {
235+ return c.updateReleaseAsset.CallUnary(ctx, req)
236+}
237+
238+// DeleteReleaseAsset calls ermite.ReleaseService.DeleteReleaseAsset.
239+func (c *releaseServiceClient) DeleteReleaseAsset(ctx context.Context, req *connect.Request[ermite.DeleteReleaseAssetRequest]) (*connect.Response[ermite.DeleteReleaseAssetResponse], error) {
240+ return c.deleteReleaseAsset.CallUnary(ctx, req)
241+}
242+
243+// DownloadReleaseAsset calls ermite.ReleaseService.DownloadReleaseAsset.
244+func (c *releaseServiceClient) DownloadReleaseAsset(ctx context.Context, req *connect.Request[ermite.DownloadReleaseAssetRequest]) (*connect.ServerStreamForClient[ermite.DownloadReleaseAssetResponse], error) {
245+ return c.downloadReleaseAsset.CallServerStream(ctx, req)
246+}
247+
248+// ListReleaseAssets calls ermite.ReleaseService.ListReleaseAssets.
249+func (c *releaseServiceClient) ListReleaseAssets(ctx context.Context, req *connect.Request[ermite.ListReleaseAssetsRequest]) (*connect.Response[ermite.ListReleaseAssetsResponse], error) {
250+ return c.listReleaseAssets.CallUnary(ctx, req)
251+}
252+
253+// GetReleaseUsage calls ermite.ReleaseService.GetReleaseUsage.
254+func (c *releaseServiceClient) GetReleaseUsage(ctx context.Context, req *connect.Request[ermite.GetReleaseUsageRequest]) (*connect.Response[ermite.GetReleaseUsageResponse], error) {
255+ return c.getReleaseUsage.CallUnary(ctx, req)
256+}
257+
258+// ReleaseServiceHandler is an implementation of the ermite.ReleaseService service.
259+type ReleaseServiceHandler interface {
260+ // CreateRelease creates one release per tag (already_exists on duplication).
261+ // Publishing without an existing tag is failed_precondition, unless
262+ // target_commitish is supplied to create it; existing tags never move.
263+ CreateRelease(context.Context, *connect.Request[ermite.CreateReleaseRequest]) (*connect.Response[ermite.CreateReleaseResponse], error)
264+ // GetRelease selects by id, tag or latest (latest must be true).
265+ GetRelease(context.Context, *connect.Request[ermite.GetReleaseRequest]) (*connect.Response[ermite.GetReleaseResponse], error)
266+ // ListReleases lists newest first, including drafts only for writers.
267+ ListReleases(context.Context, *connect.Request[ermite.ListReleasesRequest]) (*connect.Response[ermite.ListReleasesResponse], error)
268+ // UpdateRelease changes masked fields. Publishing requires an existing tag
269+ // or target_commitish to create it; otherwise failed_precondition.
270+ UpdateRelease(context.Context, *connect.Request[ermite.UpdateReleaseRequest]) (*connect.Response[ermite.UpdateReleaseResponse], error)
271+ // DeleteRelease removes a release and its assets.
272+ DeleteRelease(context.Context, *connect.Request[ermite.DeleteReleaseRequest]) (*connect.Response[ermite.DeleteReleaseResponse], error)
273+ // UploadReleaseAsset reserves size before reading. The first message carries
274+ // metadata; subsequent messages carry only data, at most 1 MiB per message.
275+ // Size must be nonnegative (-1 is refused). An interrupted stream stores no
276+ // asset. A taken name gives already_exists unless replace is true. Uploading
277+ // to a release of another repo gives failed_precondition.
278+ UploadReleaseAsset(context.Context, *connect.ClientStream[ermite.UploadReleaseAssetRequest]) (*connect.Response[ermite.UploadReleaseAssetResponse], error)
279+ // UpdateReleaseAsset changes masked name and label; a taken name gives already_exists.
280+ UpdateReleaseAsset(context.Context, *connect.Request[ermite.UpdateReleaseAssetRequest]) (*connect.Response[ermite.UpdateReleaseAssetResponse], error)
281+ // DeleteReleaseAsset removes an asset.
282+ DeleteReleaseAsset(context.Context, *connect.Request[ermite.DeleteReleaseAssetRequest]) (*connect.Response[ermite.DeleteReleaseAssetResponse], error)
283+ // DownloadReleaseAsset sends asset metadata first, then chunks of at most
284+ // 1 MiB. Resume with the offset after the last byte received. An offset
285+ // beyond the size gives out_of_range.
286+ DownloadReleaseAsset(context.Context, *connect.Request[ermite.DownloadReleaseAssetRequest], *connect.ServerStream[ermite.DownloadReleaseAssetResponse]) error
287+ // ListReleaseAssets lists uploaded assets, ordered by name.
288+ ListReleaseAssets(context.Context, *connect.Request[ermite.ListReleaseAssetsRequest]) (*connect.Response[ermite.ListReleaseAssetsResponse], error)
289+ // GetReleaseUsage returns usage (including reserved uploads) and limits.
290+ GetReleaseUsage(context.Context, *connect.Request[ermite.GetReleaseUsageRequest]) (*connect.Response[ermite.GetReleaseUsageResponse], error)
291+}
292+
293+// NewReleaseServiceHandler builds an HTTP handler from the service implementation. It returns the
294+// path on which to mount the handler and the handler itself.
295+//
296+// By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf
297+// and JSON codecs. They also support gzip compression.
298+func NewReleaseServiceHandler(svc ReleaseServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) {
299+ releaseServiceMethods := ermite.File_ermite_release_proto.Services().ByName("ReleaseService").Methods()
300+ releaseServiceCreateReleaseHandler := connect.NewUnaryHandler(
301+ ReleaseServiceCreateReleaseProcedure,
302+ svc.CreateRelease,
303+ connect.WithSchema(releaseServiceMethods.ByName("CreateRelease")),
304+ connect.WithHandlerOptions(opts...),
305+ )
306+ releaseServiceGetReleaseHandler := connect.NewUnaryHandler(
307+ ReleaseServiceGetReleaseProcedure,
308+ svc.GetRelease,
309+ connect.WithSchema(releaseServiceMethods.ByName("GetRelease")),
310+ connect.WithHandlerOptions(opts...),
311+ )
312+ releaseServiceListReleasesHandler := connect.NewUnaryHandler(
313+ ReleaseServiceListReleasesProcedure,
314+ svc.ListReleases,
315+ connect.WithSchema(releaseServiceMethods.ByName("ListReleases")),
316+ connect.WithHandlerOptions(opts...),
317+ )
318+ releaseServiceUpdateReleaseHandler := connect.NewUnaryHandler(
319+ ReleaseServiceUpdateReleaseProcedure,
320+ svc.UpdateRelease,
321+ connect.WithSchema(releaseServiceMethods.ByName("UpdateRelease")),
322+ connect.WithHandlerOptions(opts...),
323+ )
324+ releaseServiceDeleteReleaseHandler := connect.NewUnaryHandler(
325+ ReleaseServiceDeleteReleaseProcedure,
326+ svc.DeleteRelease,
327+ connect.WithSchema(releaseServiceMethods.ByName("DeleteRelease")),
328+ connect.WithHandlerOptions(opts...),
329+ )
330+ releaseServiceUploadReleaseAssetHandler := connect.NewClientStreamHandler(
331+ ReleaseServiceUploadReleaseAssetProcedure,
332+ svc.UploadReleaseAsset,
333+ connect.WithSchema(releaseServiceMethods.ByName("UploadReleaseAsset")),
334+ connect.WithHandlerOptions(opts...),
335+ )
336+ releaseServiceUpdateReleaseAssetHandler := connect.NewUnaryHandler(
337+ ReleaseServiceUpdateReleaseAssetProcedure,
338+ svc.UpdateReleaseAsset,
339+ connect.WithSchema(releaseServiceMethods.ByName("UpdateReleaseAsset")),
340+ connect.WithHandlerOptions(opts...),
341+ )
342+ releaseServiceDeleteReleaseAssetHandler := connect.NewUnaryHandler(
343+ ReleaseServiceDeleteReleaseAssetProcedure,
344+ svc.DeleteReleaseAsset,
345+ connect.WithSchema(releaseServiceMethods.ByName("DeleteReleaseAsset")),
346+ connect.WithHandlerOptions(opts...),
347+ )
348+ releaseServiceDownloadReleaseAssetHandler := connect.NewServerStreamHandler(
349+ ReleaseServiceDownloadReleaseAssetProcedure,
350+ svc.DownloadReleaseAsset,
351+ connect.WithSchema(releaseServiceMethods.ByName("DownloadReleaseAsset")),
352+ connect.WithHandlerOptions(opts...),
353+ )
354+ releaseServiceListReleaseAssetsHandler := connect.NewUnaryHandler(
355+ ReleaseServiceListReleaseAssetsProcedure,
356+ svc.ListReleaseAssets,
357+ connect.WithSchema(releaseServiceMethods.ByName("ListReleaseAssets")),
358+ connect.WithHandlerOptions(opts...),
359+ )
360+ releaseServiceGetReleaseUsageHandler := connect.NewUnaryHandler(
361+ ReleaseServiceGetReleaseUsageProcedure,
362+ svc.GetReleaseUsage,
363+ connect.WithSchema(releaseServiceMethods.ByName("GetReleaseUsage")),
364+ connect.WithHandlerOptions(opts...),
365+ )
366+ return "/ermite.ReleaseService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
367+ switch r.URL.Path {
368+ case ReleaseServiceCreateReleaseProcedure:
369+ releaseServiceCreateReleaseHandler.ServeHTTP(w, r)
370+ case ReleaseServiceGetReleaseProcedure:
371+ releaseServiceGetReleaseHandler.ServeHTTP(w, r)
372+ case ReleaseServiceListReleasesProcedure:
373+ releaseServiceListReleasesHandler.ServeHTTP(w, r)
374+ case ReleaseServiceUpdateReleaseProcedure:
375+ releaseServiceUpdateReleaseHandler.ServeHTTP(w, r)
376+ case ReleaseServiceDeleteReleaseProcedure:
377+ releaseServiceDeleteReleaseHandler.ServeHTTP(w, r)
378+ case ReleaseServiceUploadReleaseAssetProcedure:
379+ releaseServiceUploadReleaseAssetHandler.ServeHTTP(w, r)
380+ case ReleaseServiceUpdateReleaseAssetProcedure:
381+ releaseServiceUpdateReleaseAssetHandler.ServeHTTP(w, r)
382+ case ReleaseServiceDeleteReleaseAssetProcedure:
383+ releaseServiceDeleteReleaseAssetHandler.ServeHTTP(w, r)
384+ case ReleaseServiceDownloadReleaseAssetProcedure:
385+ releaseServiceDownloadReleaseAssetHandler.ServeHTTP(w, r)
386+ case ReleaseServiceListReleaseAssetsProcedure:
387+ releaseServiceListReleaseAssetsHandler.ServeHTTP(w, r)
388+ case ReleaseServiceGetReleaseUsageProcedure:
389+ releaseServiceGetReleaseUsageHandler.ServeHTTP(w, r)
390+ default:
391+ http.NotFound(w, r)
392+ }
393+ })
394+}
395+
396+// UnimplementedReleaseServiceHandler returns CodeUnimplemented from all methods.
397+type UnimplementedReleaseServiceHandler struct{}
398+
399+func (UnimplementedReleaseServiceHandler) CreateRelease(context.Context, *connect.Request[ermite.CreateReleaseRequest]) (*connect.Response[ermite.CreateReleaseResponse], error) {
400+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.ReleaseService.CreateRelease is not implemented"))
401+}
402+
403+func (UnimplementedReleaseServiceHandler) GetRelease(context.Context, *connect.Request[ermite.GetReleaseRequest]) (*connect.Response[ermite.GetReleaseResponse], error) {
404+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.ReleaseService.GetRelease is not implemented"))
405+}
406+
407+func (UnimplementedReleaseServiceHandler) ListReleases(context.Context, *connect.Request[ermite.ListReleasesRequest]) (*connect.Response[ermite.ListReleasesResponse], error) {
408+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.ReleaseService.ListReleases is not implemented"))
409+}
410+
411+func (UnimplementedReleaseServiceHandler) UpdateRelease(context.Context, *connect.Request[ermite.UpdateReleaseRequest]) (*connect.Response[ermite.UpdateReleaseResponse], error) {
412+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.ReleaseService.UpdateRelease is not implemented"))
413+}
414+
415+func (UnimplementedReleaseServiceHandler) DeleteRelease(context.Context, *connect.Request[ermite.DeleteReleaseRequest]) (*connect.Response[ermite.DeleteReleaseResponse], error) {
416+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.ReleaseService.DeleteRelease is not implemented"))
417+}
418+
419+func (UnimplementedReleaseServiceHandler) UploadReleaseAsset(context.Context, *connect.ClientStream[ermite.UploadReleaseAssetRequest]) (*connect.Response[ermite.UploadReleaseAssetResponse], error) {
420+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.ReleaseService.UploadReleaseAsset is not implemented"))
421+}
422+
423+func (UnimplementedReleaseServiceHandler) UpdateReleaseAsset(context.Context, *connect.Request[ermite.UpdateReleaseAssetRequest]) (*connect.Response[ermite.UpdateReleaseAssetResponse], error) {
424+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.ReleaseService.UpdateReleaseAsset is not implemented"))
425+}
426+
427+func (UnimplementedReleaseServiceHandler) DeleteReleaseAsset(context.Context, *connect.Request[ermite.DeleteReleaseAssetRequest]) (*connect.Response[ermite.DeleteReleaseAssetResponse], error) {
428+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.ReleaseService.DeleteReleaseAsset is not implemented"))
429+}
430+
431+func (UnimplementedReleaseServiceHandler) DownloadReleaseAsset(context.Context, *connect.Request[ermite.DownloadReleaseAssetRequest], *connect.ServerStream[ermite.DownloadReleaseAssetResponse]) error {
432+ return connect.NewError(connect.CodeUnimplemented, errors.New("ermite.ReleaseService.DownloadReleaseAsset is not implemented"))
433+}
434+
435+func (UnimplementedReleaseServiceHandler) ListReleaseAssets(context.Context, *connect.Request[ermite.ListReleaseAssetsRequest]) (*connect.Response[ermite.ListReleaseAssetsResponse], error) {
436+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.ReleaseService.ListReleaseAssets is not implemented"))
437+}
438+
439+func (UnimplementedReleaseServiceHandler) GetReleaseUsage(context.Context, *connect.Request[ermite.GetReleaseUsageRequest]) (*connect.Response[ermite.GetReleaseUsageResponse], error) {
440+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.ReleaseService.GetReleaseUsage is not implemented"))
441+}
@@ -0,0 +1,441 @@
1+// SPDX-License-Identifier: MIT
2+
3+// Code generated by protoc-gen-connect-go. DO NOT EDIT.
4+//
5+// Source: ermite/release.proto
6+
7+package ermiteconnect
8+
9+import (
10+ ermite "bnema.dev/ermite-api/gen/ermite"
11+ connect "connectrpc.com/connect"
12+ context "context"
13+ errors "errors"
14+ http "net/http"
15+ strings "strings"
16+)
17+
18+// This is a compile-time assertion to ensure that this generated file and the connect package are
19+// compatible. If you get a compiler error that this constant is not defined, this code was
20+// generated with a version of connect newer than the one compiled into your binary. You can fix the
21+// problem by either regenerating this code with an older version of connect or updating the connect
22+// version compiled into your binary.
23+const _ = connect.IsAtLeastVersion1_13_0
24+
25+const (
26+ // ReleaseServiceName is the fully-qualified name of the ReleaseService service.
27+ ReleaseServiceName = "ermite.ReleaseService"
28+)
29+
30+// These constants are the fully-qualified names of the RPCs defined in this package. They're
31+// exposed at runtime as Spec.Procedure and as the final two segments of the HTTP route.
32+//
33+// Note that these are different from the fully-qualified method names used by
34+// google.golang.org/protobuf/reflect/protoreflect. To convert from these constants to
35+// reflection-formatted method names, remove the leading slash and convert the remaining slash to a
36+// period.
37+const (
38+ // ReleaseServiceCreateReleaseProcedure is the fully-qualified name of the ReleaseService's
39+ // CreateRelease RPC.
40+ ReleaseServiceCreateReleaseProcedure = "/ermite.ReleaseService/CreateRelease"
41+ // ReleaseServiceGetReleaseProcedure is the fully-qualified name of the ReleaseService's GetRelease
42+ // RPC.
43+ ReleaseServiceGetReleaseProcedure = "/ermite.ReleaseService/GetRelease"
44+ // ReleaseServiceListReleasesProcedure is the fully-qualified name of the ReleaseService's
45+ // ListReleases RPC.
46+ ReleaseServiceListReleasesProcedure = "/ermite.ReleaseService/ListReleases"
47+ // ReleaseServiceUpdateReleaseProcedure is the fully-qualified name of the ReleaseService's
48+ // UpdateRelease RPC.
49+ ReleaseServiceUpdateReleaseProcedure = "/ermite.ReleaseService/UpdateRelease"
50+ // ReleaseServiceDeleteReleaseProcedure is the fully-qualified name of the ReleaseService's
51+ // DeleteRelease RPC.
52+ ReleaseServiceDeleteReleaseProcedure = "/ermite.ReleaseService/DeleteRelease"
53+ // ReleaseServiceUploadReleaseAssetProcedure is the fully-qualified name of the ReleaseService's
54+ // UploadReleaseAsset RPC.
55+ ReleaseServiceUploadReleaseAssetProcedure = "/ermite.ReleaseService/UploadReleaseAsset"
56+ // ReleaseServiceUpdateReleaseAssetProcedure is the fully-qualified name of the ReleaseService's
57+ // UpdateReleaseAsset RPC.
58+ ReleaseServiceUpdateReleaseAssetProcedure = "/ermite.ReleaseService/UpdateReleaseAsset"
59+ // ReleaseServiceDeleteReleaseAssetProcedure is the fully-qualified name of the ReleaseService's
60+ // DeleteReleaseAsset RPC.
61+ ReleaseServiceDeleteReleaseAssetProcedure = "/ermite.ReleaseService/DeleteReleaseAsset"
62+ // ReleaseServiceDownloadReleaseAssetProcedure is the fully-qualified name of the ReleaseService's
63+ // DownloadReleaseAsset RPC.
64+ ReleaseServiceDownloadReleaseAssetProcedure = "/ermite.ReleaseService/DownloadReleaseAsset"
65+ // ReleaseServiceListReleaseAssetsProcedure is the fully-qualified name of the ReleaseService's
66+ // ListReleaseAssets RPC.
67+ ReleaseServiceListReleaseAssetsProcedure = "/ermite.ReleaseService/ListReleaseAssets"
68+ // ReleaseServiceGetReleaseUsageProcedure is the fully-qualified name of the ReleaseService's
69+ // GetReleaseUsage RPC.
70+ ReleaseServiceGetReleaseUsageProcedure = "/ermite.ReleaseService/GetReleaseUsage"
71+)
72+
73+// ReleaseServiceClient is a client for the ermite.ReleaseService service.
74+type ReleaseServiceClient interface {
75+ // CreateRelease creates one release per tag (already_exists on duplication).
76+ // Publishing without an existing tag is failed_precondition, unless
77+ // target_commitish is supplied to create it; existing tags never move.
78+ CreateRelease(context.Context, *connect.Request[ermite.CreateReleaseRequest]) (*connect.Response[ermite.CreateReleaseResponse], error)
79+ // GetRelease selects by id, tag or latest (latest must be true).
80+ GetRelease(context.Context, *connect.Request[ermite.GetReleaseRequest]) (*connect.Response[ermite.GetReleaseResponse], error)
81+ // ListReleases lists newest first, including drafts only for writers.
82+ ListReleases(context.Context, *connect.Request[ermite.ListReleasesRequest]) (*connect.Response[ermite.ListReleasesResponse], error)
83+ // UpdateRelease changes masked fields. Publishing requires an existing tag
84+ // or target_commitish to create it; otherwise failed_precondition.
85+ UpdateRelease(context.Context, *connect.Request[ermite.UpdateReleaseRequest]) (*connect.Response[ermite.UpdateReleaseResponse], error)
86+ // DeleteRelease removes a release and its assets.
87+ DeleteRelease(context.Context, *connect.Request[ermite.DeleteReleaseRequest]) (*connect.Response[ermite.DeleteReleaseResponse], error)
88+ // UploadReleaseAsset reserves size before reading. The first message carries
89+ // metadata; subsequent messages carry only data, at most 1 MiB per message.
90+ // Size must be nonnegative (-1 is refused). An interrupted stream stores no
91+ // asset. A taken name gives already_exists unless replace is true. Uploading
92+ // to a release of another repo gives failed_precondition.
93+ UploadReleaseAsset(context.Context) *connect.ClientStreamForClient[ermite.UploadReleaseAssetRequest, ermite.UploadReleaseAssetResponse]
94+ // UpdateReleaseAsset changes masked name and label; a taken name gives already_exists.
95+ UpdateReleaseAsset(context.Context, *connect.Request[ermite.UpdateReleaseAssetRequest]) (*connect.Response[ermite.UpdateReleaseAssetResponse], error)
96+ // DeleteReleaseAsset removes an asset.
97+ DeleteReleaseAsset(context.Context, *connect.Request[ermite.DeleteReleaseAssetRequest]) (*connect.Response[ermite.DeleteReleaseAssetResponse], error)
98+ // DownloadReleaseAsset sends asset metadata first, then chunks of at most
99+ // 1 MiB. Resume with the offset after the last byte received. An offset
100+ // beyond the size gives out_of_range.
101+ DownloadReleaseAsset(context.Context, *connect.Request[ermite.DownloadReleaseAssetRequest]) (*connect.ServerStreamForClient[ermite.DownloadReleaseAssetResponse], error)
102+ // ListReleaseAssets lists uploaded assets, ordered by name.
103+ ListReleaseAssets(context.Context, *connect.Request[ermite.ListReleaseAssetsRequest]) (*connect.Response[ermite.ListReleaseAssetsResponse], error)
104+ // GetReleaseUsage returns usage (including reserved uploads) and limits.
105+ GetReleaseUsage(context.Context, *connect.Request[ermite.GetReleaseUsageRequest]) (*connect.Response[ermite.GetReleaseUsageResponse], error)
106+}
107+
108+// NewReleaseServiceClient constructs a client for the ermite.ReleaseService service. By default, it
109+// uses the Connect protocol with the binary Protobuf Codec, asks for gzipped responses, and sends
110+// uncompressed requests. To use the gRPC or gRPC-Web protocols, supply the connect.WithGRPC() or
111+// connect.WithGRPCWeb() options.
112+//
113+// The URL supplied here should be the base URL for the Connect or gRPC server (for example,
114+// http://api.acme.com or https://acme.com/grpc).
115+func NewReleaseServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) ReleaseServiceClient {
116+ baseURL = strings.TrimRight(baseURL, "/")
117+ releaseServiceMethods := ermite.File_ermite_release_proto.Services().ByName("ReleaseService").Methods()
118+ return &releaseServiceClient{
119+ createRelease: connect.NewClient[ermite.CreateReleaseRequest, ermite.CreateReleaseResponse](
120+ httpClient,
121+ baseURL+ReleaseServiceCreateReleaseProcedure,
122+ connect.WithSchema(releaseServiceMethods.ByName("CreateRelease")),
123+ connect.WithClientOptions(opts...),
124+ ),
125+ getRelease: connect.NewClient[ermite.GetReleaseRequest, ermite.GetReleaseResponse](
126+ httpClient,
127+ baseURL+ReleaseServiceGetReleaseProcedure,
128+ connect.WithSchema(releaseServiceMethods.ByName("GetRelease")),
129+ connect.WithClientOptions(opts...),
130+ ),
131+ listReleases: connect.NewClient[ermite.ListReleasesRequest, ermite.ListReleasesResponse](
132+ httpClient,
133+ baseURL+ReleaseServiceListReleasesProcedure,
134+ connect.WithSchema(releaseServiceMethods.ByName("ListReleases")),
135+ connect.WithClientOptions(opts...),
136+ ),
137+ updateRelease: connect.NewClient[ermite.UpdateReleaseRequest, ermite.UpdateReleaseResponse](
138+ httpClient,
139+ baseURL+ReleaseServiceUpdateReleaseProcedure,
140+ connect.WithSchema(releaseServiceMethods.ByName("UpdateRelease")),
141+ connect.WithClientOptions(opts...),
142+ ),
143+ deleteRelease: connect.NewClient[ermite.DeleteReleaseRequest, ermite.DeleteReleaseResponse](
144+ httpClient,
145+ baseURL+ReleaseServiceDeleteReleaseProcedure,
146+ connect.WithSchema(releaseServiceMethods.ByName("DeleteRelease")),
147+ connect.WithClientOptions(opts...),
148+ ),
149+ uploadReleaseAsset: connect.NewClient[ermite.UploadReleaseAssetRequest, ermite.UploadReleaseAssetResponse](
150+ httpClient,
151+ baseURL+ReleaseServiceUploadReleaseAssetProcedure,
152+ connect.WithSchema(releaseServiceMethods.ByName("UploadReleaseAsset")),
153+ connect.WithClientOptions(opts...),
154+ ),
155+ updateReleaseAsset: connect.NewClient[ermite.UpdateReleaseAssetRequest, ermite.UpdateReleaseAssetResponse](
156+ httpClient,
157+ baseURL+ReleaseServiceUpdateReleaseAssetProcedure,
158+ connect.WithSchema(releaseServiceMethods.ByName("UpdateReleaseAsset")),
159+ connect.WithClientOptions(opts...),
160+ ),
161+ deleteReleaseAsset: connect.NewClient[ermite.DeleteReleaseAssetRequest, ermite.DeleteReleaseAssetResponse](
162+ httpClient,
163+ baseURL+ReleaseServiceDeleteReleaseAssetProcedure,
164+ connect.WithSchema(releaseServiceMethods.ByName("DeleteReleaseAsset")),
165+ connect.WithClientOptions(opts...),
166+ ),
167+ downloadReleaseAsset: connect.NewClient[ermite.DownloadReleaseAssetRequest, ermite.DownloadReleaseAssetResponse](
168+ httpClient,
169+ baseURL+ReleaseServiceDownloadReleaseAssetProcedure,
170+ connect.WithSchema(releaseServiceMethods.ByName("DownloadReleaseAsset")),
171+ connect.WithClientOptions(opts...),
172+ ),
173+ listReleaseAssets: connect.NewClient[ermite.ListReleaseAssetsRequest, ermite.ListReleaseAssetsResponse](
174+ httpClient,
175+ baseURL+ReleaseServiceListReleaseAssetsProcedure,
176+ connect.WithSchema(releaseServiceMethods.ByName("ListReleaseAssets")),
177+ connect.WithClientOptions(opts...),
178+ ),
179+ getReleaseUsage: connect.NewClient[ermite.GetReleaseUsageRequest, ermite.GetReleaseUsageResponse](
180+ httpClient,
181+ baseURL+ReleaseServiceGetReleaseUsageProcedure,
182+ connect.WithSchema(releaseServiceMethods.ByName("GetReleaseUsage")),
183+ connect.WithClientOptions(opts...),
184+ ),
185+ }
186+}
187+
188+// releaseServiceClient implements ReleaseServiceClient.
189+type releaseServiceClient struct {
190+ createRelease *connect.Client[ermite.CreateReleaseRequest, ermite.CreateReleaseResponse]
191+ getRelease *connect.Client[ermite.GetReleaseRequest, ermite.GetReleaseResponse]
192+ listReleases *connect.Client[ermite.ListReleasesRequest, ermite.ListReleasesResponse]
193+ updateRelease *connect.Client[ermite.UpdateReleaseRequest, ermite.UpdateReleaseResponse]
194+ deleteRelease *connect.Client[ermite.DeleteReleaseRequest, ermite.DeleteReleaseResponse]
195+ uploadReleaseAsset *connect.Client[ermite.UploadReleaseAssetRequest, ermite.UploadReleaseAssetResponse]
196+ updateReleaseAsset *connect.Client[ermite.UpdateReleaseAssetRequest, ermite.UpdateReleaseAssetResponse]
197+ deleteReleaseAsset *connect.Client[ermite.DeleteReleaseAssetRequest, ermite.DeleteReleaseAssetResponse]
198+ downloadReleaseAsset *connect.Client[ermite.DownloadReleaseAssetRequest, ermite.DownloadReleaseAssetResponse]
199+ listReleaseAssets *connect.Client[ermite.ListReleaseAssetsRequest, ermite.ListReleaseAssetsResponse]
200+ getReleaseUsage *connect.Client[ermite.GetReleaseUsageRequest, ermite.GetReleaseUsageResponse]
201+}
202+
203+// CreateRelease calls ermite.ReleaseService.CreateRelease.
204+func (c *releaseServiceClient) CreateRelease(ctx context.Context, req *connect.Request[ermite.CreateReleaseRequest]) (*connect.Response[ermite.CreateReleaseResponse], error) {
205+ return c.createRelease.CallUnary(ctx, req)
206+}
207+
208+// GetRelease calls ermite.ReleaseService.GetRelease.
209+func (c *releaseServiceClient) GetRelease(ctx context.Context, req *connect.Request[ermite.GetReleaseRequest]) (*connect.Response[ermite.GetReleaseResponse], error) {
210+ return c.getRelease.CallUnary(ctx, req)
211+}
212+
213+// ListReleases calls ermite.ReleaseService.ListReleases.
214+func (c *releaseServiceClient) ListReleases(ctx context.Context, req *connect.Request[ermite.ListReleasesRequest]) (*connect.Response[ermite.ListReleasesResponse], error) {
215+ return c.listReleases.CallUnary(ctx, req)
216+}
217+
218+// UpdateRelease calls ermite.ReleaseService.UpdateRelease.
219+func (c *releaseServiceClient) UpdateRelease(ctx context.Context, req *connect.Request[ermite.UpdateReleaseRequest]) (*connect.Response[ermite.UpdateReleaseResponse], error) {
220+ return c.updateRelease.CallUnary(ctx, req)
221+}
222+
223+// DeleteRelease calls ermite.ReleaseService.DeleteRelease.
224+func (c *releaseServiceClient) DeleteRelease(ctx context.Context, req *connect.Request[ermite.DeleteReleaseRequest]) (*connect.Response[ermite.DeleteReleaseResponse], error) {
225+ return c.deleteRelease.CallUnary(ctx, req)
226+}
227+
228+// UploadReleaseAsset calls ermite.ReleaseService.UploadReleaseAsset.
229+func (c *releaseServiceClient) UploadReleaseAsset(ctx context.Context) *connect.ClientStreamForClient[ermite.UploadReleaseAssetRequest, ermite.UploadReleaseAssetResponse] {
230+ return c.uploadReleaseAsset.CallClientStream(ctx)
231+}
232+
233+// UpdateReleaseAsset calls ermite.ReleaseService.UpdateReleaseAsset.
234+func (c *releaseServiceClient) UpdateReleaseAsset(ctx context.Context, req *connect.Request[ermite.UpdateReleaseAssetRequest]) (*connect.Response[ermite.UpdateReleaseAssetResponse], error) {
235+ return c.updateReleaseAsset.CallUnary(ctx, req)
236+}
237+
238+// DeleteReleaseAsset calls ermite.ReleaseService.DeleteReleaseAsset.
239+func (c *releaseServiceClient) DeleteReleaseAsset(ctx context.Context, req *connect.Request[ermite.DeleteReleaseAssetRequest]) (*connect.Response[ermite.DeleteReleaseAssetResponse], error) {
240+ return c.deleteReleaseAsset.CallUnary(ctx, req)
241+}
242+
243+// DownloadReleaseAsset calls ermite.ReleaseService.DownloadReleaseAsset.
244+func (c *releaseServiceClient) DownloadReleaseAsset(ctx context.Context, req *connect.Request[ermite.DownloadReleaseAssetRequest]) (*connect.ServerStreamForClient[ermite.DownloadReleaseAssetResponse], error) {
245+ return c.downloadReleaseAsset.CallServerStream(ctx, req)
246+}
247+
248+// ListReleaseAssets calls ermite.ReleaseService.ListReleaseAssets.
249+func (c *releaseServiceClient) ListReleaseAssets(ctx context.Context, req *connect.Request[ermite.ListReleaseAssetsRequest]) (*connect.Response[ermite.ListReleaseAssetsResponse], error) {
250+ return c.listReleaseAssets.CallUnary(ctx, req)
251+}
252+
253+// GetReleaseUsage calls ermite.ReleaseService.GetReleaseUsage.
254+func (c *releaseServiceClient) GetReleaseUsage(ctx context.Context, req *connect.Request[ermite.GetReleaseUsageRequest]) (*connect.Response[ermite.GetReleaseUsageResponse], error) {
255+ return c.getReleaseUsage.CallUnary(ctx, req)
256+}
257+
258+// ReleaseServiceHandler is an implementation of the ermite.ReleaseService service.
259+type ReleaseServiceHandler interface {
260+ // CreateRelease creates one release per tag (already_exists on duplication).
261+ // Publishing without an existing tag is failed_precondition, unless
262+ // target_commitish is supplied to create it; existing tags never move.
263+ CreateRelease(context.Context, *connect.Request[ermite.CreateReleaseRequest]) (*connect.Response[ermite.CreateReleaseResponse], error)
264+ // GetRelease selects by id, tag or latest (latest must be true).
265+ GetRelease(context.Context, *connect.Request[ermite.GetReleaseRequest]) (*connect.Response[ermite.GetReleaseResponse], error)
266+ // ListReleases lists newest first, including drafts only for writers.
267+ ListReleases(context.Context, *connect.Request[ermite.ListReleasesRequest]) (*connect.Response[ermite.ListReleasesResponse], error)
268+ // UpdateRelease changes masked fields. Publishing requires an existing tag
269+ // or target_commitish to create it; otherwise failed_precondition.
270+ UpdateRelease(context.Context, *connect.Request[ermite.UpdateReleaseRequest]) (*connect.Response[ermite.UpdateReleaseResponse], error)
271+ // DeleteRelease removes a release and its assets.
272+ DeleteRelease(context.Context, *connect.Request[ermite.DeleteReleaseRequest]) (*connect.Response[ermite.DeleteReleaseResponse], error)
273+ // UploadReleaseAsset reserves size before reading. The first message carries
274+ // metadata; subsequent messages carry only data, at most 1 MiB per message.
275+ // Size must be nonnegative (-1 is refused). An interrupted stream stores no
276+ // asset. A taken name gives already_exists unless replace is true. Uploading
277+ // to a release of another repo gives failed_precondition.
278+ UploadReleaseAsset(context.Context, *connect.ClientStream[ermite.UploadReleaseAssetRequest]) (*connect.Response[ermite.UploadReleaseAssetResponse], error)
279+ // UpdateReleaseAsset changes masked name and label; a taken name gives already_exists.
280+ UpdateReleaseAsset(context.Context, *connect.Request[ermite.UpdateReleaseAssetRequest]) (*connect.Response[ermite.UpdateReleaseAssetResponse], error)
281+ // DeleteReleaseAsset removes an asset.
282+ DeleteReleaseAsset(context.Context, *connect.Request[ermite.DeleteReleaseAssetRequest]) (*connect.Response[ermite.DeleteReleaseAssetResponse], error)
283+ // DownloadReleaseAsset sends asset metadata first, then chunks of at most
284+ // 1 MiB. Resume with the offset after the last byte received. An offset
285+ // beyond the size gives out_of_range.
286+ DownloadReleaseAsset(context.Context, *connect.Request[ermite.DownloadReleaseAssetRequest], *connect.ServerStream[ermite.DownloadReleaseAssetResponse]) error
287+ // ListReleaseAssets lists uploaded assets, ordered by name.
288+ ListReleaseAssets(context.Context, *connect.Request[ermite.ListReleaseAssetsRequest]) (*connect.Response[ermite.ListReleaseAssetsResponse], error)
289+ // GetReleaseUsage returns usage (including reserved uploads) and limits.
290+ GetReleaseUsage(context.Context, *connect.Request[ermite.GetReleaseUsageRequest]) (*connect.Response[ermite.GetReleaseUsageResponse], error)
291+}
292+
293+// NewReleaseServiceHandler builds an HTTP handler from the service implementation. It returns the
294+// path on which to mount the handler and the handler itself.
295+//
296+// By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf
297+// and JSON codecs. They also support gzip compression.
298+func NewReleaseServiceHandler(svc ReleaseServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) {
299+ releaseServiceMethods := ermite.File_ermite_release_proto.Services().ByName("ReleaseService").Methods()
300+ releaseServiceCreateReleaseHandler := connect.NewUnaryHandler(
301+ ReleaseServiceCreateReleaseProcedure,
302+ svc.CreateRelease,
303+ connect.WithSchema(releaseServiceMethods.ByName("CreateRelease")),
304+ connect.WithHandlerOptions(opts...),
305+ )
306+ releaseServiceGetReleaseHandler := connect.NewUnaryHandler(
307+ ReleaseServiceGetReleaseProcedure,
308+ svc.GetRelease,
309+ connect.WithSchema(releaseServiceMethods.ByName("GetRelease")),
310+ connect.WithHandlerOptions(opts...),
311+ )
312+ releaseServiceListReleasesHandler := connect.NewUnaryHandler(
313+ ReleaseServiceListReleasesProcedure,
314+ svc.ListReleases,
315+ connect.WithSchema(releaseServiceMethods.ByName("ListReleases")),
316+ connect.WithHandlerOptions(opts...),
317+ )
318+ releaseServiceUpdateReleaseHandler := connect.NewUnaryHandler(
319+ ReleaseServiceUpdateReleaseProcedure,
320+ svc.UpdateRelease,
321+ connect.WithSchema(releaseServiceMethods.ByName("UpdateRelease")),
322+ connect.WithHandlerOptions(opts...),
323+ )
324+ releaseServiceDeleteReleaseHandler := connect.NewUnaryHandler(
325+ ReleaseServiceDeleteReleaseProcedure,
326+ svc.DeleteRelease,
327+ connect.WithSchema(releaseServiceMethods.ByName("DeleteRelease")),
328+ connect.WithHandlerOptions(opts...),
329+ )
330+ releaseServiceUploadReleaseAssetHandler := connect.NewClientStreamHandler(
331+ ReleaseServiceUploadReleaseAssetProcedure,
332+ svc.UploadReleaseAsset,
333+ connect.WithSchema(releaseServiceMethods.ByName("UploadReleaseAsset")),
334+ connect.WithHandlerOptions(opts...),
335+ )
336+ releaseServiceUpdateReleaseAssetHandler := connect.NewUnaryHandler(
337+ ReleaseServiceUpdateReleaseAssetProcedure,
338+ svc.UpdateReleaseAsset,
339+ connect.WithSchema(releaseServiceMethods.ByName("UpdateReleaseAsset")),
340+ connect.WithHandlerOptions(opts...),
341+ )
342+ releaseServiceDeleteReleaseAssetHandler := connect.NewUnaryHandler(
343+ ReleaseServiceDeleteReleaseAssetProcedure,
344+ svc.DeleteReleaseAsset,
345+ connect.WithSchema(releaseServiceMethods.ByName("DeleteReleaseAsset")),
346+ connect.WithHandlerOptions(opts...),
347+ )
348+ releaseServiceDownloadReleaseAssetHandler := connect.NewServerStreamHandler(
349+ ReleaseServiceDownloadReleaseAssetProcedure,
350+ svc.DownloadReleaseAsset,
351+ connect.WithSchema(releaseServiceMethods.ByName("DownloadReleaseAsset")),
352+ connect.WithHandlerOptions(opts...),
353+ )
354+ releaseServiceListReleaseAssetsHandler := connect.NewUnaryHandler(
355+ ReleaseServiceListReleaseAssetsProcedure,
356+ svc.ListReleaseAssets,
357+ connect.WithSchema(releaseServiceMethods.ByName("ListReleaseAssets")),
358+ connect.WithHandlerOptions(opts...),
359+ )
360+ releaseServiceGetReleaseUsageHandler := connect.NewUnaryHandler(
361+ ReleaseServiceGetReleaseUsageProcedure,
362+ svc.GetReleaseUsage,
363+ connect.WithSchema(releaseServiceMethods.ByName("GetReleaseUsage")),
364+ connect.WithHandlerOptions(opts...),
365+ )
366+ return "/ermite.ReleaseService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
367+ switch r.URL.Path {
368+ case ReleaseServiceCreateReleaseProcedure:
369+ releaseServiceCreateReleaseHandler.ServeHTTP(w, r)
370+ case ReleaseServiceGetReleaseProcedure:
371+ releaseServiceGetReleaseHandler.ServeHTTP(w, r)
372+ case ReleaseServiceListReleasesProcedure:
373+ releaseServiceListReleasesHandler.ServeHTTP(w, r)
374+ case ReleaseServiceUpdateReleaseProcedure:
375+ releaseServiceUpdateReleaseHandler.ServeHTTP(w, r)
376+ case ReleaseServiceDeleteReleaseProcedure:
377+ releaseServiceDeleteReleaseHandler.ServeHTTP(w, r)
378+ case ReleaseServiceUploadReleaseAssetProcedure:
379+ releaseServiceUploadReleaseAssetHandler.ServeHTTP(w, r)
380+ case ReleaseServiceUpdateReleaseAssetProcedure:
381+ releaseServiceUpdateReleaseAssetHandler.ServeHTTP(w, r)
382+ case ReleaseServiceDeleteReleaseAssetProcedure:
383+ releaseServiceDeleteReleaseAssetHandler.ServeHTTP(w, r)
384+ case ReleaseServiceDownloadReleaseAssetProcedure:
385+ releaseServiceDownloadReleaseAssetHandler.ServeHTTP(w, r)
386+ case ReleaseServiceListReleaseAssetsProcedure:
387+ releaseServiceListReleaseAssetsHandler.ServeHTTP(w, r)
388+ case ReleaseServiceGetReleaseUsageProcedure:
389+ releaseServiceGetReleaseUsageHandler.ServeHTTP(w, r)
390+ default:
391+ http.NotFound(w, r)
392+ }
393+ })
394+}
395+
396+// UnimplementedReleaseServiceHandler returns CodeUnimplemented from all methods.
397+type UnimplementedReleaseServiceHandler struct{}
398+
399+func (UnimplementedReleaseServiceHandler) CreateRelease(context.Context, *connect.Request[ermite.CreateReleaseRequest]) (*connect.Response[ermite.CreateReleaseResponse], error) {
400+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.ReleaseService.CreateRelease is not implemented"))
401+}
402+
403+func (UnimplementedReleaseServiceHandler) GetRelease(context.Context, *connect.Request[ermite.GetReleaseRequest]) (*connect.Response[ermite.GetReleaseResponse], error) {
404+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.ReleaseService.GetRelease is not implemented"))
405+}
406+
407+func (UnimplementedReleaseServiceHandler) ListReleases(context.Context, *connect.Request[ermite.ListReleasesRequest]) (*connect.Response[ermite.ListReleasesResponse], error) {
408+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.ReleaseService.ListReleases is not implemented"))
409+}
410+
411+func (UnimplementedReleaseServiceHandler) UpdateRelease(context.Context, *connect.Request[ermite.UpdateReleaseRequest]) (*connect.Response[ermite.UpdateReleaseResponse], error) {
412+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.ReleaseService.UpdateRelease is not implemented"))
413+}
414+
415+func (UnimplementedReleaseServiceHandler) DeleteRelease(context.Context, *connect.Request[ermite.DeleteReleaseRequest]) (*connect.Response[ermite.DeleteReleaseResponse], error) {
416+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.ReleaseService.DeleteRelease is not implemented"))
417+}
418+
419+func (UnimplementedReleaseServiceHandler) UploadReleaseAsset(context.Context, *connect.ClientStream[ermite.UploadReleaseAssetRequest]) (*connect.Response[ermite.UploadReleaseAssetResponse], error) {
420+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.ReleaseService.UploadReleaseAsset is not implemented"))
421+}
422+
423+func (UnimplementedReleaseServiceHandler) UpdateReleaseAsset(context.Context, *connect.Request[ermite.UpdateReleaseAssetRequest]) (*connect.Response[ermite.UpdateReleaseAssetResponse], error) {
424+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.ReleaseService.UpdateReleaseAsset is not implemented"))
425+}
426+
427+func (UnimplementedReleaseServiceHandler) DeleteReleaseAsset(context.Context, *connect.Request[ermite.DeleteReleaseAssetRequest]) (*connect.Response[ermite.DeleteReleaseAssetResponse], error) {
428+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.ReleaseService.DeleteReleaseAsset is not implemented"))
429+}
430+
431+func (UnimplementedReleaseServiceHandler) DownloadReleaseAsset(context.Context, *connect.Request[ermite.DownloadReleaseAssetRequest], *connect.ServerStream[ermite.DownloadReleaseAssetResponse]) error {
432+ return connect.NewError(connect.CodeUnimplemented, errors.New("ermite.ReleaseService.DownloadReleaseAsset is not implemented"))
433+}
434+
435+func (UnimplementedReleaseServiceHandler) ListReleaseAssets(context.Context, *connect.Request[ermite.ListReleaseAssetsRequest]) (*connect.Response[ermite.ListReleaseAssetsResponse], error) {
436+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.ReleaseService.ListReleaseAssets is not implemented"))
437+}
438+
439+func (UnimplementedReleaseServiceHandler) GetReleaseUsage(context.Context, *connect.Request[ermite.GetReleaseUsageRequest]) (*connect.Response[ermite.GetReleaseUsageResponse], error) {
440+ return nil, connect.NewError(connect.CodeUnimplemented, errors.New("ermite.ReleaseService.GetReleaseUsage is not implemented"))
441+}
M gen/ermite/event.pb.go +447 -43 generated file: collapsed
A gen/ermite/release.pb.go +2106 -0
@@ -0,0 +1,2106 @@
1+// SPDX-License-Identifier: MIT
2+
3+// Code generated by protoc-gen-go. DO NOT EDIT.
4+// versions:
5+// protoc-gen-go v1.36.12
6+// protoc (unknown)
7+// source: ermite/release.proto
8+
9+package ermite
10+
11+import (
12+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
13+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
14+ fieldmaskpb "google.golang.org/protobuf/types/known/fieldmaskpb"
15+ timestamppb "google.golang.org/protobuf/types/known/timestamppb"
16+ reflect "reflect"
17+ sync "sync"
18+ unsafe "unsafe"
19+)
20+
21+const (
22+ // Verify that this generated code is sufficiently up-to-date.
23+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
24+ // Verify that runtime/protoimpl is sufficiently up-to-date.
25+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
26+)
27+
28+// Release describes a tag and its notes. Drafts are visible only to writers.
29+type Release struct {
30+ state protoimpl.MessageState `protogen:"open.v1"`
31+ Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
32+ Repo string `protobuf:"bytes,2,opt,name=repo,proto3" json:"repo,omitempty"`
33+ Tag string `protobuf:"bytes,3,opt,name=tag,proto3" json:"tag,omitempty"`
34+ Title string `protobuf:"bytes,4,opt,name=title,proto3" json:"title,omitempty"`
35+ Notes string `protobuf:"bytes,5,opt,name=notes,proto3" json:"notes,omitempty"`
36+ Draft bool `protobuf:"varint,6,opt,name=draft,proto3" json:"draft,omitempty"`
37+ Prerelease bool `protobuf:"varint,7,opt,name=prerelease,proto3" json:"prerelease,omitempty"`
38+ // Latest identifies the release returned by the latest selector, computed or pinned.
39+ Latest bool `protobuf:"varint,8,opt,name=latest,proto3" json:"latest,omitempty"`
40+ // TargetCommitish is the tag's commit; empty for a draft without a tag.
41+ TargetCommitish string `protobuf:"bytes,9,opt,name=target_commitish,json=targetCommitish,proto3" json:"target_commitish,omitempty"`
42+ // Author is the label of the principal that created the release.
43+ Author string `protobuf:"bytes,10,opt,name=author,proto3" json:"author,omitempty"`
44+ CreatedAt *timestamppb.Timestamp `protobuf:"bytes,11,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"`
45+ // PublishedAt is unset while draft.
46+ PublishedAt *timestamppb.Timestamp `protobuf:"bytes,12,opt,name=published_at,json=publishedAt,proto3" json:"published_at,omitempty"`
47+ UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,13,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"`
48+ // Assets contains uploaded assets only, ordered by name.
49+ Assets []*ReleaseAsset `protobuf:"bytes,14,rep,name=assets,proto3" json:"assets,omitempty"`
50+ unknownFields protoimpl.UnknownFields
51+ sizeCache protoimpl.SizeCache
52+}
53+
54+func (x *Release) Reset() {
55+ *x = Release{}
56+ mi := &file_ermite_release_proto_msgTypes[0]
57+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
58+ ms.StoreMessageInfo(mi)
59+}
60+
61+func (x *Release) String() string {
62+ return protoimpl.X.MessageStringOf(x)
63+}
64+
65+func (*Release) ProtoMessage() {}
66+
67+func (x *Release) ProtoReflect() protoreflect.Message {
68+ mi := &file_ermite_release_proto_msgTypes[0]
69+ if x != nil {
70+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
71+ if ms.LoadMessageInfo() == nil {
72+ ms.StoreMessageInfo(mi)
73+ }
74+ return ms
75+ }
76+ return mi.MessageOf(x)
77+}
78+
79+// Deprecated: Use Release.ProtoReflect.Descriptor instead.
80+func (*Release) Descriptor() ([]byte, []int) {
81+ return file_ermite_release_proto_rawDescGZIP(), []int{0}
82+}
83+
84+func (x *Release) GetId() int64 {
85+ if x != nil {
86+ return x.Id
87+ }
88+ return 0
89+}
90+
91+func (x *Release) GetRepo() string {
92+ if x != nil {
93+ return x.Repo
94+ }
95+ return ""
96+}
97+
98+func (x *Release) GetTag() string {
99+ if x != nil {
100+ return x.Tag
101+ }
102+ return ""
103+}
104+
105+func (x *Release) GetTitle() string {
106+ if x != nil {
107+ return x.Title
108+ }
109+ return ""
110+}
111+
112+func (x *Release) GetNotes() string {
113+ if x != nil {
114+ return x.Notes
115+ }
116+ return ""
117+}
118+
119+func (x *Release) GetDraft() bool {
120+ if x != nil {
121+ return x.Draft
122+ }
123+ return false
124+}
125+
126+func (x *Release) GetPrerelease() bool {
127+ if x != nil {
128+ return x.Prerelease
129+ }
130+ return false
131+}
132+
133+func (x *Release) GetLatest() bool {
134+ if x != nil {
135+ return x.Latest
136+ }
137+ return false
138+}
139+
140+func (x *Release) GetTargetCommitish() string {
141+ if x != nil {
142+ return x.TargetCommitish
143+ }
144+ return ""
145+}
146+
147+func (x *Release) GetAuthor() string {
148+ if x != nil {
149+ return x.Author
150+ }
151+ return ""
152+}
153+
154+func (x *Release) GetCreatedAt() *timestamppb.Timestamp {
155+ if x != nil {
156+ return x.CreatedAt
157+ }
158+ return nil
159+}
160+
161+func (x *Release) GetPublishedAt() *timestamppb.Timestamp {
162+ if x != nil {
163+ return x.PublishedAt
164+ }
165+ return nil
166+}
167+
168+func (x *Release) GetUpdatedAt() *timestamppb.Timestamp {
169+ if x != nil {
170+ return x.UpdatedAt
171+ }
172+ return nil
173+}
174+
175+func (x *Release) GetAssets() []*ReleaseAsset {
176+ if x != nil {
177+ return x.Assets
178+ }
179+ return nil
180+}
181+
182+// ReleaseAsset describes an uploaded file, with a sha256:<hex> digest.
183+type ReleaseAsset struct {
184+ state protoimpl.MessageState `protogen:"open.v1"`
185+ Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
186+ ReleaseId int64 `protobuf:"varint,2,opt,name=release_id,json=releaseId,proto3" json:"release_id,omitempty"`
187+ // Name is unique within the release, 1–255 characters, without slashes or controls.
188+ Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
189+ Label string `protobuf:"bytes,4,opt,name=label,proto3" json:"label,omitempty"`
190+ // ContentType defaults to application/octet-stream.
191+ ContentType string `protobuf:"bytes,5,opt,name=content_type,json=contentType,proto3" json:"content_type,omitempty"`
192+ Size int64 `protobuf:"varint,6,opt,name=size,proto3" json:"size,omitempty"`
193+ Digest string `protobuf:"bytes,7,opt,name=digest,proto3" json:"digest,omitempty"`
194+ Uploader string `protobuf:"bytes,8,opt,name=uploader,proto3" json:"uploader,omitempty"`
195+ CreatedAt *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"`
196+ UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"`
197+ unknownFields protoimpl.UnknownFields
198+ sizeCache protoimpl.SizeCache
199+}
200+
201+func (x *ReleaseAsset) Reset() {
202+ *x = ReleaseAsset{}
203+ mi := &file_ermite_release_proto_msgTypes[1]
204+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
205+ ms.StoreMessageInfo(mi)
206+}
207+
208+func (x *ReleaseAsset) String() string {
209+ return protoimpl.X.MessageStringOf(x)
210+}
211+
212+func (*ReleaseAsset) ProtoMessage() {}
213+
214+func (x *ReleaseAsset) ProtoReflect() protoreflect.Message {
215+ mi := &file_ermite_release_proto_msgTypes[1]
216+ if x != nil {
217+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
218+ if ms.LoadMessageInfo() == nil {
219+ ms.StoreMessageInfo(mi)
220+ }
221+ return ms
222+ }
223+ return mi.MessageOf(x)
224+}
225+
226+// Deprecated: Use ReleaseAsset.ProtoReflect.Descriptor instead.
227+func (*ReleaseAsset) Descriptor() ([]byte, []int) {
228+ return file_ermite_release_proto_rawDescGZIP(), []int{1}
229+}
230+
231+func (x *ReleaseAsset) GetId() int64 {
232+ if x != nil {
233+ return x.Id
234+ }
235+ return 0
236+}
237+
238+func (x *ReleaseAsset) GetReleaseId() int64 {
239+ if x != nil {
240+ return x.ReleaseId
241+ }
242+ return 0
243+}
244+
245+func (x *ReleaseAsset) GetName() string {
246+ if x != nil {
247+ return x.Name
248+ }
249+ return ""
250+}
251+
252+func (x *ReleaseAsset) GetLabel() string {
253+ if x != nil {
254+ return x.Label
255+ }
256+ return ""
257+}
258+
259+func (x *ReleaseAsset) GetContentType() string {
260+ if x != nil {
261+ return x.ContentType
262+ }
263+ return ""
264+}
265+
266+func (x *ReleaseAsset) GetSize() int64 {
267+ if x != nil {
268+ return x.Size
269+ }
270+ return 0
271+}
272+
273+func (x *ReleaseAsset) GetDigest() string {
274+ if x != nil {
275+ return x.Digest
276+ }
277+ return ""
278+}
279+
280+func (x *ReleaseAsset) GetUploader() string {
281+ if x != nil {
282+ return x.Uploader
283+ }
284+ return ""
285+}
286+
287+func (x *ReleaseAsset) GetCreatedAt() *timestamppb.Timestamp {
288+ if x != nil {
289+ return x.CreatedAt
290+ }
291+ return nil
292+}
293+
294+func (x *ReleaseAsset) GetUpdatedAt() *timestamppb.Timestamp {
295+ if x != nil {
296+ return x.UpdatedAt
297+ }
298+ return nil
299+}
300+
301+// CreateReleaseRequest is the request of ReleaseService.CreateRelease.
302+type CreateReleaseRequest struct {
303+ state protoimpl.MessageState `protogen:"open.v1"`
304+ Repo string `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"`
305+ Tag string `protobuf:"bytes,2,opt,name=tag,proto3" json:"tag,omitempty"`
306+ TargetCommitish string `protobuf:"bytes,3,opt,name=target_commitish,json=targetCommitish,proto3" json:"target_commitish,omitempty"`
307+ Title string `protobuf:"bytes,4,opt,name=title,proto3" json:"title,omitempty"`
308+ Notes string `protobuf:"bytes,5,opt,name=notes,proto3" json:"notes,omitempty"`
309+ Draft bool `protobuf:"varint,6,opt,name=draft,proto3" json:"draft,omitempty"`
310+ Prerelease bool `protobuf:"varint,7,opt,name=prerelease,proto3" json:"prerelease,omitempty"`
311+ // MakeLatest pins this published non-prerelease as latest. False does not pin the release.
312+ MakeLatest bool `protobuf:"varint,8,opt,name=make_latest,json=makeLatest,proto3" json:"make_latest,omitempty"`
313+ unknownFields protoimpl.UnknownFields
314+ sizeCache protoimpl.SizeCache
315+}
316+
317+func (x *CreateReleaseRequest) Reset() {
318+ *x = CreateReleaseRequest{}
319+ mi := &file_ermite_release_proto_msgTypes[2]
320+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
321+ ms.StoreMessageInfo(mi)
322+}
323+
324+func (x *CreateReleaseRequest) String() string {
325+ return protoimpl.X.MessageStringOf(x)
326+}
327+
328+func (*CreateReleaseRequest) ProtoMessage() {}
329+
330+func (x *CreateReleaseRequest) ProtoReflect() protoreflect.Message {
331+ mi := &file_ermite_release_proto_msgTypes[2]
332+ if x != nil {
333+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
334+ if ms.LoadMessageInfo() == nil {
335+ ms.StoreMessageInfo(mi)
336+ }
337+ return ms
338+ }
339+ return mi.MessageOf(x)
340+}
341+
342+// Deprecated: Use CreateReleaseRequest.ProtoReflect.Descriptor instead.
343+func (*CreateReleaseRequest) Descriptor() ([]byte, []int) {
344+ return file_ermite_release_proto_rawDescGZIP(), []int{2}
345+}
346+
347+func (x *CreateReleaseRequest) GetRepo() string {
348+ if x != nil {
349+ return x.Repo
350+ }
351+ return ""
352+}
353+
354+func (x *CreateReleaseRequest) GetTag() string {
355+ if x != nil {
356+ return x.Tag
357+ }
358+ return ""
359+}
360+
361+func (x *CreateReleaseRequest) GetTargetCommitish() string {
362+ if x != nil {
363+ return x.TargetCommitish
364+ }
365+ return ""
366+}
367+
368+func (x *CreateReleaseRequest) GetTitle() string {
369+ if x != nil {
370+ return x.Title
371+ }
372+ return ""
373+}
374+
375+func (x *CreateReleaseRequest) GetNotes() string {
376+ if x != nil {
377+ return x.Notes
378+ }
379+ return ""
380+}
381+
382+func (x *CreateReleaseRequest) GetDraft() bool {
383+ if x != nil {
384+ return x.Draft
385+ }
386+ return false
387+}
388+
389+func (x *CreateReleaseRequest) GetPrerelease() bool {
390+ if x != nil {
391+ return x.Prerelease
392+ }
393+ return false
394+}
395+
396+func (x *CreateReleaseRequest) GetMakeLatest() bool {
397+ if x != nil {
398+ return x.MakeLatest
399+ }
400+ return false
401+}
402+
403+// CreateReleaseResponse is the response of ReleaseService.CreateRelease.
404+type CreateReleaseResponse struct {
405+ state protoimpl.MessageState `protogen:"open.v1"`
406+ Release *Release `protobuf:"bytes,1,opt,name=release,proto3" json:"release,omitempty"`
407+ unknownFields protoimpl.UnknownFields
408+ sizeCache protoimpl.SizeCache
409+}
410+
411+func (x *CreateReleaseResponse) Reset() {
412+ *x = CreateReleaseResponse{}
413+ mi := &file_ermite_release_proto_msgTypes[3]
414+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
415+ ms.StoreMessageInfo(mi)
416+}
417+
418+func (x *CreateReleaseResponse) String() string {
419+ return protoimpl.X.MessageStringOf(x)
420+}
421+
422+func (*CreateReleaseResponse) ProtoMessage() {}
423+
424+func (x *CreateReleaseResponse) ProtoReflect() protoreflect.Message {
425+ mi := &file_ermite_release_proto_msgTypes[3]
426+ if x != nil {
427+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
428+ if ms.LoadMessageInfo() == nil {
429+ ms.StoreMessageInfo(mi)
430+ }
431+ return ms
432+ }
433+ return mi.MessageOf(x)
434+}
435+
436+// Deprecated: Use CreateReleaseResponse.ProtoReflect.Descriptor instead.
437+func (*CreateReleaseResponse) Descriptor() ([]byte, []int) {
438+ return file_ermite_release_proto_rawDescGZIP(), []int{3}
439+}
440+
441+func (x *CreateReleaseResponse) GetRelease() *Release {
442+ if x != nil {
443+ return x.Release
444+ }
445+ return nil
446+}
447+
448+// ListReleasesRequest is the request of ReleaseService.ListReleases.
449+type ListReleasesRequest struct {
450+ state protoimpl.MessageState `protogen:"open.v1"`
451+ Repo string `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"`
452+ // PageSize is the maximum count; zero uses the server default.
453+ PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
454+ // PageToken is next_page_token from the preceding page, or empty initially.
455+ PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
456+ unknownFields protoimpl.UnknownFields
457+ sizeCache protoimpl.SizeCache
458+}
459+
460+func (x *ListReleasesRequest) Reset() {
461+ *x = ListReleasesRequest{}
462+ mi := &file_ermite_release_proto_msgTypes[4]
463+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
464+ ms.StoreMessageInfo(mi)
465+}
466+
467+func (x *ListReleasesRequest) String() string {
468+ return protoimpl.X.MessageStringOf(x)
469+}
470+
471+func (*ListReleasesRequest) ProtoMessage() {}
472+
473+func (x *ListReleasesRequest) ProtoReflect() protoreflect.Message {
474+ mi := &file_ermite_release_proto_msgTypes[4]
475+ if x != nil {
476+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
477+ if ms.LoadMessageInfo() == nil {
478+ ms.StoreMessageInfo(mi)
479+ }
480+ return ms
481+ }
482+ return mi.MessageOf(x)
483+}
484+
485+// Deprecated: Use ListReleasesRequest.ProtoReflect.Descriptor instead.
486+func (*ListReleasesRequest) Descriptor() ([]byte, []int) {
487+ return file_ermite_release_proto_rawDescGZIP(), []int{4}
488+}
489+
490+func (x *ListReleasesRequest) GetRepo() string {
491+ if x != nil {
492+ return x.Repo
493+ }
494+ return ""
495+}
496+
497+func (x *ListReleasesRequest) GetPageSize() int32 {
498+ if x != nil {
499+ return x.PageSize
500+ }
501+ return 0
502+}
503+
504+func (x *ListReleasesRequest) GetPageToken() string {
505+ if x != nil {
506+ return x.PageToken
507+ }
508+ return ""
509+}
510+
511+// ListReleasesResponse is the response of ReleaseService.ListReleases.
512+type ListReleasesResponse struct {
513+ state protoimpl.MessageState `protogen:"open.v1"`
514+ Releases []*Release `protobuf:"bytes,1,rep,name=releases,proto3" json:"releases,omitempty"`
515+ NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
516+ unknownFields protoimpl.UnknownFields
517+ sizeCache protoimpl.SizeCache
518+}
519+
520+func (x *ListReleasesResponse) Reset() {
521+ *x = ListReleasesResponse{}
522+ mi := &file_ermite_release_proto_msgTypes[5]
523+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
524+ ms.StoreMessageInfo(mi)
525+}
526+
527+func (x *ListReleasesResponse) String() string {
528+ return protoimpl.X.MessageStringOf(x)
529+}
530+
531+func (*ListReleasesResponse) ProtoMessage() {}
532+
533+func (x *ListReleasesResponse) ProtoReflect() protoreflect.Message {
534+ mi := &file_ermite_release_proto_msgTypes[5]
535+ if x != nil {
536+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
537+ if ms.LoadMessageInfo() == nil {
538+ ms.StoreMessageInfo(mi)
539+ }
540+ return ms
541+ }
542+ return mi.MessageOf(x)
543+}
544+
545+// Deprecated: Use ListReleasesResponse.ProtoReflect.Descriptor instead.
546+func (*ListReleasesResponse) Descriptor() ([]byte, []int) {
547+ return file_ermite_release_proto_rawDescGZIP(), []int{5}
548+}
549+
550+func (x *ListReleasesResponse) GetReleases() []*Release {
551+ if x != nil {
552+ return x.Releases
553+ }
554+ return nil
555+}
556+
557+func (x *ListReleasesResponse) GetNextPageToken() string {
558+ if x != nil {
559+ return x.NextPageToken
560+ }
561+ return ""
562+}
563+
564+// UpdateReleaseRequest is the request of ReleaseService.UpdateRelease.
565+type UpdateReleaseRequest struct {
566+ state protoimpl.MessageState `protogen:"open.v1"`
567+ Repo string `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"`
568+ Id int64 `protobuf:"varint,2,opt,name=id,proto3" json:"id,omitempty"`
569+ Tag string `protobuf:"bytes,3,opt,name=tag,proto3" json:"tag,omitempty"`
570+ TargetCommitish string `protobuf:"bytes,4,opt,name=target_commitish,json=targetCommitish,proto3" json:"target_commitish,omitempty"`
571+ Title string `protobuf:"bytes,5,opt,name=title,proto3" json:"title,omitempty"`
572+ Notes string `protobuf:"bytes,6,opt,name=notes,proto3" json:"notes,omitempty"`
573+ Draft bool `protobuf:"varint,7,opt,name=draft,proto3" json:"draft,omitempty"`
574+ Prerelease bool `protobuf:"varint,8,opt,name=prerelease,proto3" json:"prerelease,omitempty"`
575+ // MakeLatest pins this published non-prerelease as latest. False does not pin the release.
576+ MakeLatest bool `protobuf:"varint,9,opt,name=make_latest,json=makeLatest,proto3" json:"make_latest,omitempty"`
577+ // UpdateMask names the fields to change; unknown paths are invalid_argument.
578+ UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,10,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
579+ unknownFields protoimpl.UnknownFields
580+ sizeCache protoimpl.SizeCache
581+}
582+
583+func (x *UpdateReleaseRequest) Reset() {
584+ *x = UpdateReleaseRequest{}
585+ mi := &file_ermite_release_proto_msgTypes[6]
586+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
587+ ms.StoreMessageInfo(mi)
588+}
589+
590+func (x *UpdateReleaseRequest) String() string {
591+ return protoimpl.X.MessageStringOf(x)
592+}
593+
594+func (*UpdateReleaseRequest) ProtoMessage() {}
595+
596+func (x *UpdateReleaseRequest) ProtoReflect() protoreflect.Message {
597+ mi := &file_ermite_release_proto_msgTypes[6]
598+ if x != nil {
599+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
600+ if ms.LoadMessageInfo() == nil {
601+ ms.StoreMessageInfo(mi)
602+ }
603+ return ms
604+ }
605+ return mi.MessageOf(x)
606+}
607+
608+// Deprecated: Use UpdateReleaseRequest.ProtoReflect.Descriptor instead.
609+func (*UpdateReleaseRequest) Descriptor() ([]byte, []int) {
610+ return file_ermite_release_proto_rawDescGZIP(), []int{6}
611+}
612+
613+func (x *UpdateReleaseRequest) GetRepo() string {
614+ if x != nil {
615+ return x.Repo
616+ }
617+ return ""
618+}
619+
620+func (x *UpdateReleaseRequest) GetId() int64 {
621+ if x != nil {
622+ return x.Id
623+ }
624+ return 0
625+}
626+
627+func (x *UpdateReleaseRequest) GetTag() string {
628+ if x != nil {
629+ return x.Tag
630+ }
631+ return ""
632+}
633+
634+func (x *UpdateReleaseRequest) GetTargetCommitish() string {
635+ if x != nil {
636+ return x.TargetCommitish
637+ }
638+ return ""
639+}
640+
641+func (x *UpdateReleaseRequest) GetTitle() string {
642+ if x != nil {
643+ return x.Title
644+ }
645+ return ""
646+}
647+
648+func (x *UpdateReleaseRequest) GetNotes() string {
649+ if x != nil {
650+ return x.Notes
651+ }
652+ return ""
653+}
654+
655+func (x *UpdateReleaseRequest) GetDraft() bool {
656+ if x != nil {
657+ return x.Draft
658+ }
659+ return false
660+}
661+
662+func (x *UpdateReleaseRequest) GetPrerelease() bool {
663+ if x != nil {
664+ return x.Prerelease
665+ }
666+ return false
667+}
668+
669+func (x *UpdateReleaseRequest) GetMakeLatest() bool {
670+ if x != nil {
671+ return x.MakeLatest
672+ }
673+ return false
674+}
675+
676+func (x *UpdateReleaseRequest) GetUpdateMask() *fieldmaskpb.FieldMask {
677+ if x != nil {
678+ return x.UpdateMask
679+ }
680+ return nil
681+}
682+
683+// UpdateReleaseResponse is the response of ReleaseService.UpdateRelease.
684+type UpdateReleaseResponse struct {
685+ state protoimpl.MessageState `protogen:"open.v1"`
686+ Release *Release `protobuf:"bytes,1,opt,name=release,proto3" json:"release,omitempty"`
687+ unknownFields protoimpl.UnknownFields
688+ sizeCache protoimpl.SizeCache
689+}
690+
691+func (x *UpdateReleaseResponse) Reset() {
692+ *x = UpdateReleaseResponse{}
693+ mi := &file_ermite_release_proto_msgTypes[7]
694+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
695+ ms.StoreMessageInfo(mi)
696+}
697+
698+func (x *UpdateReleaseResponse) String() string {
699+ return protoimpl.X.MessageStringOf(x)
700+}
701+
702+func (*UpdateReleaseResponse) ProtoMessage() {}
703+
704+func (x *UpdateReleaseResponse) ProtoReflect() protoreflect.Message {
705+ mi := &file_ermite_release_proto_msgTypes[7]
706+ if x != nil {
707+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
708+ if ms.LoadMessageInfo() == nil {
709+ ms.StoreMessageInfo(mi)
710+ }
711+ return ms
712+ }
713+ return mi.MessageOf(x)
714+}
715+
716+// Deprecated: Use UpdateReleaseResponse.ProtoReflect.Descriptor instead.
717+func (*UpdateReleaseResponse) Descriptor() ([]byte, []int) {
718+ return file_ermite_release_proto_rawDescGZIP(), []int{7}
719+}
720+
721+func (x *UpdateReleaseResponse) GetRelease() *Release {
722+ if x != nil {
723+ return x.Release
724+ }
725+ return nil
726+}
727+
728+// DeleteReleaseRequest is the request of ReleaseService.DeleteRelease.
729+type DeleteReleaseRequest struct {
730+ state protoimpl.MessageState `protogen:"open.v1"`
731+ Repo string `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"`
732+ Id int64 `protobuf:"varint,2,opt,name=id,proto3" json:"id,omitempty"`
733+ unknownFields protoimpl.UnknownFields
734+ sizeCache protoimpl.SizeCache
735+}
736+
737+func (x *DeleteReleaseRequest) Reset() {
738+ *x = DeleteReleaseRequest{}
739+ mi := &file_ermite_release_proto_msgTypes[8]
740+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
741+ ms.StoreMessageInfo(mi)
742+}
743+
744+func (x *DeleteReleaseRequest) String() string {
745+ return protoimpl.X.MessageStringOf(x)
746+}
747+
748+func (*DeleteReleaseRequest) ProtoMessage() {}
749+
750+func (x *DeleteReleaseRequest) ProtoReflect() protoreflect.Message {
751+ mi := &file_ermite_release_proto_msgTypes[8]
752+ if x != nil {
753+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
754+ if ms.LoadMessageInfo() == nil {
755+ ms.StoreMessageInfo(mi)
756+ }
757+ return ms
758+ }
759+ return mi.MessageOf(x)
760+}
761+
762+// Deprecated: Use DeleteReleaseRequest.ProtoReflect.Descriptor instead.
763+func (*DeleteReleaseRequest) Descriptor() ([]byte, []int) {
764+ return file_ermite_release_proto_rawDescGZIP(), []int{8}
765+}
766+
767+func (x *DeleteReleaseRequest) GetRepo() string {
768+ if x != nil {
769+ return x.Repo
770+ }
771+ return ""
772+}
773+
774+func (x *DeleteReleaseRequest) GetId() int64 {
775+ if x != nil {
776+ return x.Id
777+ }
778+ return 0
779+}
780+
781+// DeleteReleaseResponse is the response of ReleaseService.DeleteRelease.
782+type DeleteReleaseResponse struct {
783+ state protoimpl.MessageState `protogen:"open.v1"`
784+ unknownFields protoimpl.UnknownFields
785+ sizeCache protoimpl.SizeCache
786+}
787+
788+func (x *DeleteReleaseResponse) Reset() {
789+ *x = DeleteReleaseResponse{}
790+ mi := &file_ermite_release_proto_msgTypes[9]
791+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
792+ ms.StoreMessageInfo(mi)
793+}
794+
795+func (x *DeleteReleaseResponse) String() string {
796+ return protoimpl.X.MessageStringOf(x)
797+}
798+
799+func (*DeleteReleaseResponse) ProtoMessage() {}
800+
801+func (x *DeleteReleaseResponse) ProtoReflect() protoreflect.Message {
802+ mi := &file_ermite_release_proto_msgTypes[9]
803+ if x != nil {
804+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
805+ if ms.LoadMessageInfo() == nil {
806+ ms.StoreMessageInfo(mi)
807+ }
808+ return ms
809+ }
810+ return mi.MessageOf(x)
811+}
812+
813+// Deprecated: Use DeleteReleaseResponse.ProtoReflect.Descriptor instead.
814+func (*DeleteReleaseResponse) Descriptor() ([]byte, []int) {
815+ return file_ermite_release_proto_rawDescGZIP(), []int{9}
816+}
817+
818+// UploadReleaseAssetRequest is the request of ReleaseService.UploadReleaseAsset.
819+type UploadReleaseAssetRequest struct {
820+ state protoimpl.MessageState `protogen:"open.v1"`
821+ Repo string `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"`
822+ ReleaseId int64 `protobuf:"varint,2,opt,name=release_id,json=releaseId,proto3" json:"release_id,omitempty"`
823+ Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
824+ Label string `protobuf:"bytes,4,opt,name=label,proto3" json:"label,omitempty"`
825+ ContentType string `protobuf:"bytes,5,opt,name=content_type,json=contentType,proto3" json:"content_type,omitempty"`
826+ Size int64 `protobuf:"varint,6,opt,name=size,proto3" json:"size,omitempty"`
827+ Replace bool `protobuf:"varint,7,opt,name=replace,proto3" json:"replace,omitempty"`
828+ Data []byte `protobuf:"bytes,8,opt,name=data,proto3" json:"data,omitempty"`
829+ unknownFields protoimpl.UnknownFields
830+ sizeCache protoimpl.SizeCache
831+}
832+
833+func (x *UploadReleaseAssetRequest) Reset() {
834+ *x = UploadReleaseAssetRequest{}
835+ mi := &file_ermite_release_proto_msgTypes[10]
836+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
837+ ms.StoreMessageInfo(mi)
838+}
839+
840+func (x *UploadReleaseAssetRequest) String() string {
841+ return protoimpl.X.MessageStringOf(x)
842+}
843+
844+func (*UploadReleaseAssetRequest) ProtoMessage() {}
845+
846+func (x *UploadReleaseAssetRequest) ProtoReflect() protoreflect.Message {
847+ mi := &file_ermite_release_proto_msgTypes[10]
848+ if x != nil {
849+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
850+ if ms.LoadMessageInfo() == nil {
851+ ms.StoreMessageInfo(mi)
852+ }
853+ return ms
854+ }
855+ return mi.MessageOf(x)
856+}
857+
858+// Deprecated: Use UploadReleaseAssetRequest.ProtoReflect.Descriptor instead.
859+func (*UploadReleaseAssetRequest) Descriptor() ([]byte, []int) {
860+ return file_ermite_release_proto_rawDescGZIP(), []int{10}
861+}
862+
863+func (x *UploadReleaseAssetRequest) GetRepo() string {
864+ if x != nil {
865+ return x.Repo
866+ }
867+ return ""
868+}
869+
870+func (x *UploadReleaseAssetRequest) GetReleaseId() int64 {
871+ if x != nil {
872+ return x.ReleaseId
873+ }
874+ return 0
875+}
876+
877+func (x *UploadReleaseAssetRequest) GetName() string {
878+ if x != nil {
879+ return x.Name
880+ }
881+ return ""
882+}
883+
884+func (x *UploadReleaseAssetRequest) GetLabel() string {
885+ if x != nil {
886+ return x.Label
887+ }
888+ return ""
889+}
890+
891+func (x *UploadReleaseAssetRequest) GetContentType() string {
892+ if x != nil {
893+ return x.ContentType
894+ }
895+ return ""
896+}
897+
898+func (x *UploadReleaseAssetRequest) GetSize() int64 {
899+ if x != nil {
900+ return x.Size
901+ }
902+ return 0
903+}
904+
905+func (x *UploadReleaseAssetRequest) GetReplace() bool {
906+ if x != nil {
907+ return x.Replace
908+ }
909+ return false
910+}
911+
912+func (x *UploadReleaseAssetRequest) GetData() []byte {
913+ if x != nil {
914+ return x.Data
915+ }
916+ return nil
917+}
918+
919+// UploadReleaseAssetResponse is the response of ReleaseService.UploadReleaseAsset.
920+type UploadReleaseAssetResponse struct {
921+ state protoimpl.MessageState `protogen:"open.v1"`
922+ Asset *ReleaseAsset `protobuf:"bytes,1,opt,name=asset,proto3" json:"asset,omitempty"`
923+ unknownFields protoimpl.UnknownFields
924+ sizeCache protoimpl.SizeCache
925+}
926+
927+func (x *UploadReleaseAssetResponse) Reset() {
928+ *x = UploadReleaseAssetResponse{}
929+ mi := &file_ermite_release_proto_msgTypes[11]
930+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
931+ ms.StoreMessageInfo(mi)
932+}
933+
934+func (x *UploadReleaseAssetResponse) String() string {
935+ return protoimpl.X.MessageStringOf(x)
936+}
937+
938+func (*UploadReleaseAssetResponse) ProtoMessage() {}
939+
940+func (x *UploadReleaseAssetResponse) ProtoReflect() protoreflect.Message {
941+ mi := &file_ermite_release_proto_msgTypes[11]
942+ if x != nil {
943+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
944+ if ms.LoadMessageInfo() == nil {
945+ ms.StoreMessageInfo(mi)
946+ }
947+ return ms
948+ }
949+ return mi.MessageOf(x)
950+}
951+
952+// Deprecated: Use UploadReleaseAssetResponse.ProtoReflect.Descriptor instead.
953+func (*UploadReleaseAssetResponse) Descriptor() ([]byte, []int) {
954+ return file_ermite_release_proto_rawDescGZIP(), []int{11}
955+}
956+
957+func (x *UploadReleaseAssetResponse) GetAsset() *ReleaseAsset {
958+ if x != nil {
959+ return x.Asset
960+ }
961+ return nil
962+}
963+
964+// UpdateReleaseAssetRequest is the request of ReleaseService.UpdateReleaseAsset.
965+type UpdateReleaseAssetRequest struct {
966+ state protoimpl.MessageState `protogen:"open.v1"`
967+ Repo string `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"`
968+ AssetId int64 `protobuf:"varint,2,opt,name=asset_id,json=assetId,proto3" json:"asset_id,omitempty"`
969+ Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
970+ Label string `protobuf:"bytes,4,opt,name=label,proto3" json:"label,omitempty"`
971+ // UpdateMask names the fields to change; unknown paths are invalid_argument.
972+ UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,5,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
973+ unknownFields protoimpl.UnknownFields
974+ sizeCache protoimpl.SizeCache
975+}
976+
977+func (x *UpdateReleaseAssetRequest) Reset() {
978+ *x = UpdateReleaseAssetRequest{}
979+ mi := &file_ermite_release_proto_msgTypes[12]
980+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
981+ ms.StoreMessageInfo(mi)
982+}
983+
984+func (x *UpdateReleaseAssetRequest) String() string {
985+ return protoimpl.X.MessageStringOf(x)
986+}
987+
988+func (*UpdateReleaseAssetRequest) ProtoMessage() {}
989+
990+func (x *UpdateReleaseAssetRequest) ProtoReflect() protoreflect.Message {
991+ mi := &file_ermite_release_proto_msgTypes[12]
992+ if x != nil {
993+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
994+ if ms.LoadMessageInfo() == nil {
995+ ms.StoreMessageInfo(mi)
996+ }
997+ return ms
998+ }
999+ return mi.MessageOf(x)
1000+}
1001+
1002+// Deprecated: Use UpdateReleaseAssetRequest.ProtoReflect.Descriptor instead.
1003+func (*UpdateReleaseAssetRequest) Descriptor() ([]byte, []int) {
1004+ return file_ermite_release_proto_rawDescGZIP(), []int{12}
1005+}
1006+
1007+func (x *UpdateReleaseAssetRequest) GetRepo() string {
1008+ if x != nil {
1009+ return x.Repo
1010+ }
1011+ return ""
1012+}
1013+
1014+func (x *UpdateReleaseAssetRequest) GetAssetId() int64 {
1015+ if x != nil {
1016+ return x.AssetId
1017+ }
1018+ return 0
1019+}
1020+
1021+func (x *UpdateReleaseAssetRequest) GetName() string {
1022+ if x != nil {
1023+ return x.Name
1024+ }
1025+ return ""
1026+}
1027+
1028+func (x *UpdateReleaseAssetRequest) GetLabel() string {
1029+ if x != nil {
1030+ return x.Label
1031+ }
1032+ return ""
1033+}
1034+
1035+func (x *UpdateReleaseAssetRequest) GetUpdateMask() *fieldmaskpb.FieldMask {
1036+ if x != nil {
1037+ return x.UpdateMask
1038+ }
1039+ return nil
1040+}
1041+
1042+// UpdateReleaseAssetResponse is the response of ReleaseService.UpdateReleaseAsset.
1043+type UpdateReleaseAssetResponse struct {
1044+ state protoimpl.MessageState `protogen:"open.v1"`
1045+ Asset *ReleaseAsset `protobuf:"bytes,1,opt,name=asset,proto3" json:"asset,omitempty"`
1046+ unknownFields protoimpl.UnknownFields
1047+ sizeCache protoimpl.SizeCache
1048+}
1049+
1050+func (x *UpdateReleaseAssetResponse) Reset() {
1051+ *x = UpdateReleaseAssetResponse{}
1052+ mi := &file_ermite_release_proto_msgTypes[13]
1053+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1054+ ms.StoreMessageInfo(mi)
1055+}
1056+
1057+func (x *UpdateReleaseAssetResponse) String() string {
1058+ return protoimpl.X.MessageStringOf(x)
1059+}
1060+
1061+func (*UpdateReleaseAssetResponse) ProtoMessage() {}
1062+
1063+func (x *UpdateReleaseAssetResponse) ProtoReflect() protoreflect.Message {
1064+ mi := &file_ermite_release_proto_msgTypes[13]
1065+ if x != nil {
1066+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1067+ if ms.LoadMessageInfo() == nil {
1068+ ms.StoreMessageInfo(mi)
1069+ }
1070+ return ms
1071+ }
1072+ return mi.MessageOf(x)
1073+}
1074+
1075+// Deprecated: Use UpdateReleaseAssetResponse.ProtoReflect.Descriptor instead.
1076+func (*UpdateReleaseAssetResponse) Descriptor() ([]byte, []int) {
1077+ return file_ermite_release_proto_rawDescGZIP(), []int{13}
1078+}
1079+
1080+func (x *UpdateReleaseAssetResponse) GetAsset() *ReleaseAsset {
1081+ if x != nil {
1082+ return x.Asset
1083+ }
1084+ return nil
1085+}
1086+
1087+// DeleteReleaseAssetRequest is the request of ReleaseService.DeleteReleaseAsset.
1088+type DeleteReleaseAssetRequest struct {
1089+ state protoimpl.MessageState `protogen:"open.v1"`
1090+ Repo string `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"`
1091+ AssetId int64 `protobuf:"varint,2,opt,name=asset_id,json=assetId,proto3" json:"asset_id,omitempty"`
1092+ unknownFields protoimpl.UnknownFields
1093+ sizeCache protoimpl.SizeCache
1094+}
1095+
1096+func (x *DeleteReleaseAssetRequest) Reset() {
1097+ *x = DeleteReleaseAssetRequest{}
1098+ mi := &file_ermite_release_proto_msgTypes[14]
1099+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1100+ ms.StoreMessageInfo(mi)
1101+}
1102+
1103+func (x *DeleteReleaseAssetRequest) String() string {
1104+ return protoimpl.X.MessageStringOf(x)
1105+}
1106+
1107+func (*DeleteReleaseAssetRequest) ProtoMessage() {}
1108+
1109+func (x *DeleteReleaseAssetRequest) ProtoReflect() protoreflect.Message {
1110+ mi := &file_ermite_release_proto_msgTypes[14]
1111+ if x != nil {
1112+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1113+ if ms.LoadMessageInfo() == nil {
1114+ ms.StoreMessageInfo(mi)
1115+ }
1116+ return ms
1117+ }
1118+ return mi.MessageOf(x)
1119+}
1120+
1121+// Deprecated: Use DeleteReleaseAssetRequest.ProtoReflect.Descriptor instead.
1122+func (*DeleteReleaseAssetRequest) Descriptor() ([]byte, []int) {
1123+ return file_ermite_release_proto_rawDescGZIP(), []int{14}
1124+}
1125+
1126+func (x *DeleteReleaseAssetRequest) GetRepo() string {
1127+ if x != nil {
1128+ return x.Repo
1129+ }
1130+ return ""
1131+}
1132+
1133+func (x *DeleteReleaseAssetRequest) GetAssetId() int64 {
1134+ if x != nil {
1135+ return x.AssetId
1136+ }
1137+ return 0
1138+}
1139+
1140+// DeleteReleaseAssetResponse is the response of ReleaseService.DeleteReleaseAsset.
1141+type DeleteReleaseAssetResponse struct {
1142+ state protoimpl.MessageState `protogen:"open.v1"`
1143+ unknownFields protoimpl.UnknownFields
1144+ sizeCache protoimpl.SizeCache
1145+}
1146+
1147+func (x *DeleteReleaseAssetResponse) Reset() {
1148+ *x = DeleteReleaseAssetResponse{}
1149+ mi := &file_ermite_release_proto_msgTypes[15]
1150+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1151+ ms.StoreMessageInfo(mi)
1152+}
1153+
1154+func (x *DeleteReleaseAssetResponse) String() string {
1155+ return protoimpl.X.MessageStringOf(x)
1156+}
1157+
1158+func (*DeleteReleaseAssetResponse) ProtoMessage() {}
1159+
1160+func (x *DeleteReleaseAssetResponse) ProtoReflect() protoreflect.Message {
1161+ mi := &file_ermite_release_proto_msgTypes[15]
1162+ if x != nil {
1163+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1164+ if ms.LoadMessageInfo() == nil {
1165+ ms.StoreMessageInfo(mi)
1166+ }
1167+ return ms
1168+ }
1169+ return mi.MessageOf(x)
1170+}
1171+
1172+// Deprecated: Use DeleteReleaseAssetResponse.ProtoReflect.Descriptor instead.
1173+func (*DeleteReleaseAssetResponse) Descriptor() ([]byte, []int) {
1174+ return file_ermite_release_proto_rawDescGZIP(), []int{15}
1175+}
1176+
1177+// DownloadReleaseAssetResponse is the response of ReleaseService.DownloadReleaseAsset.
1178+type DownloadReleaseAssetResponse struct {
1179+ state protoimpl.MessageState `protogen:"open.v1"`
1180+ Asset *ReleaseAsset `protobuf:"bytes,1,opt,name=asset,proto3" json:"asset,omitempty"`
1181+ Chunk []byte `protobuf:"bytes,2,opt,name=chunk,proto3" json:"chunk,omitempty"`
1182+ unknownFields protoimpl.UnknownFields
1183+ sizeCache protoimpl.SizeCache
1184+}
1185+
1186+func (x *DownloadReleaseAssetResponse) Reset() {
1187+ *x = DownloadReleaseAssetResponse{}
1188+ mi := &file_ermite_release_proto_msgTypes[16]
1189+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1190+ ms.StoreMessageInfo(mi)
1191+}
1192+
1193+func (x *DownloadReleaseAssetResponse) String() string {
1194+ return protoimpl.X.MessageStringOf(x)
1195+}
1196+
1197+func (*DownloadReleaseAssetResponse) ProtoMessage() {}
1198+
1199+func (x *DownloadReleaseAssetResponse) ProtoReflect() protoreflect.Message {
1200+ mi := &file_ermite_release_proto_msgTypes[16]
1201+ if x != nil {
1202+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1203+ if ms.LoadMessageInfo() == nil {
1204+ ms.StoreMessageInfo(mi)
1205+ }
1206+ return ms
1207+ }
1208+ return mi.MessageOf(x)
1209+}
1210+
1211+// Deprecated: Use DownloadReleaseAssetResponse.ProtoReflect.Descriptor instead.
1212+func (*DownloadReleaseAssetResponse) Descriptor() ([]byte, []int) {
1213+ return file_ermite_release_proto_rawDescGZIP(), []int{16}
1214+}
1215+
1216+func (x *DownloadReleaseAssetResponse) GetAsset() *ReleaseAsset {
1217+ if x != nil {
1218+ return x.Asset
1219+ }
1220+ return nil
1221+}
1222+
1223+func (x *DownloadReleaseAssetResponse) GetChunk() []byte {
1224+ if x != nil {
1225+ return x.Chunk
1226+ }
1227+ return nil
1228+}
1229+
1230+// ListReleaseAssetsRequest is the request of ReleaseService.ListReleaseAssets.
1231+type ListReleaseAssetsRequest struct {
1232+ state protoimpl.MessageState `protogen:"open.v1"`
1233+ Repo string `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"`
1234+ ReleaseId int64 `protobuf:"varint,2,opt,name=release_id,json=releaseId,proto3" json:"release_id,omitempty"`
1235+ unknownFields protoimpl.UnknownFields
1236+ sizeCache protoimpl.SizeCache
1237+}
1238+
1239+func (x *ListReleaseAssetsRequest) Reset() {
1240+ *x = ListReleaseAssetsRequest{}
1241+ mi := &file_ermite_release_proto_msgTypes[17]
1242+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1243+ ms.StoreMessageInfo(mi)
1244+}
1245+
1246+func (x *ListReleaseAssetsRequest) String() string {
1247+ return protoimpl.X.MessageStringOf(x)
1248+}
1249+
1250+func (*ListReleaseAssetsRequest) ProtoMessage() {}
1251+
1252+func (x *ListReleaseAssetsRequest) ProtoReflect() protoreflect.Message {
1253+ mi := &file_ermite_release_proto_msgTypes[17]
1254+ if x != nil {
1255+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1256+ if ms.LoadMessageInfo() == nil {
1257+ ms.StoreMessageInfo(mi)
1258+ }
1259+ return ms
1260+ }
1261+ return mi.MessageOf(x)
1262+}
1263+
1264+// Deprecated: Use ListReleaseAssetsRequest.ProtoReflect.Descriptor instead.
1265+func (*ListReleaseAssetsRequest) Descriptor() ([]byte, []int) {
1266+ return file_ermite_release_proto_rawDescGZIP(), []int{17}
1267+}
1268+
1269+func (x *ListReleaseAssetsRequest) GetRepo() string {
1270+ if x != nil {
1271+ return x.Repo
1272+ }
1273+ return ""
1274+}
1275+
1276+func (x *ListReleaseAssetsRequest) GetReleaseId() int64 {
1277+ if x != nil {
1278+ return x.ReleaseId
1279+ }
1280+ return 0
1281+}
1282+
1283+// ListReleaseAssetsResponse is the response of ReleaseService.ListReleaseAssets.
1284+type ListReleaseAssetsResponse struct {
1285+ state protoimpl.MessageState `protogen:"open.v1"`
1286+ Assets []*ReleaseAsset `protobuf:"bytes,1,rep,name=assets,proto3" json:"assets,omitempty"`
1287+ unknownFields protoimpl.UnknownFields
1288+ sizeCache protoimpl.SizeCache
1289+}
1290+
1291+func (x *ListReleaseAssetsResponse) Reset() {
1292+ *x = ListReleaseAssetsResponse{}
1293+ mi := &file_ermite_release_proto_msgTypes[18]
1294+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1295+ ms.StoreMessageInfo(mi)
1296+}
1297+
1298+func (x *ListReleaseAssetsResponse) String() string {
1299+ return protoimpl.X.MessageStringOf(x)
1300+}
1301+
1302+func (*ListReleaseAssetsResponse) ProtoMessage() {}
1303+
1304+func (x *ListReleaseAssetsResponse) ProtoReflect() protoreflect.Message {
1305+ mi := &file_ermite_release_proto_msgTypes[18]
1306+ if x != nil {
1307+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1308+ if ms.LoadMessageInfo() == nil {
1309+ ms.StoreMessageInfo(mi)
1310+ }
1311+ return ms
1312+ }
1313+ return mi.MessageOf(x)
1314+}
1315+
1316+// Deprecated: Use ListReleaseAssetsResponse.ProtoReflect.Descriptor instead.
1317+func (*ListReleaseAssetsResponse) Descriptor() ([]byte, []int) {
1318+ return file_ermite_release_proto_rawDescGZIP(), []int{18}
1319+}
1320+
1321+func (x *ListReleaseAssetsResponse) GetAssets() []*ReleaseAsset {
1322+ if x != nil {
1323+ return x.Assets
1324+ }
1325+ return nil
1326+}
1327+
1328+// GetReleaseUsageRequest is the request of ReleaseService.GetReleaseUsage.
1329+type GetReleaseUsageRequest struct {
1330+ state protoimpl.MessageState `protogen:"open.v1"`
1331+ Repo string `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"`
1332+ unknownFields protoimpl.UnknownFields
1333+ sizeCache protoimpl.SizeCache
1334+}
1335+
1336+func (x *GetReleaseUsageRequest) Reset() {
1337+ *x = GetReleaseUsageRequest{}
1338+ mi := &file_ermite_release_proto_msgTypes[19]
1339+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1340+ ms.StoreMessageInfo(mi)
1341+}
1342+
1343+func (x *GetReleaseUsageRequest) String() string {
1344+ return protoimpl.X.MessageStringOf(x)
1345+}
1346+
1347+func (*GetReleaseUsageRequest) ProtoMessage() {}
1348+
1349+func (x *GetReleaseUsageRequest) ProtoReflect() protoreflect.Message {
1350+ mi := &file_ermite_release_proto_msgTypes[19]
1351+ if x != nil {
1352+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1353+ if ms.LoadMessageInfo() == nil {
1354+ ms.StoreMessageInfo(mi)
1355+ }
1356+ return ms
1357+ }
1358+ return mi.MessageOf(x)
1359+}
1360+
1361+// Deprecated: Use GetReleaseUsageRequest.ProtoReflect.Descriptor instead.
1362+func (*GetReleaseUsageRequest) Descriptor() ([]byte, []int) {
1363+ return file_ermite_release_proto_rawDescGZIP(), []int{19}
1364+}
1365+
1366+func (x *GetReleaseUsageRequest) GetRepo() string {
1367+ if x != nil {
1368+ return x.Repo
1369+ }
1370+ return ""
1371+}
1372+
1373+// GetReleaseUsageResponse is the response of ReleaseService.GetReleaseUsage.
1374+type GetReleaseUsageResponse struct {
1375+ state protoimpl.MessageState `protogen:"open.v1"`
1376+ UsedBytes int64 `protobuf:"varint,1,opt,name=used_bytes,json=usedBytes,proto3" json:"used_bytes,omitempty"`
1377+ QuotaBytes int64 `protobuf:"varint,2,opt,name=quota_bytes,json=quotaBytes,proto3" json:"quota_bytes,omitempty"`
1378+ AssetMaxBytes int64 `protobuf:"varint,3,opt,name=asset_max_bytes,json=assetMaxBytes,proto3" json:"asset_max_bytes,omitempty"`
1379+ AssetsMax int32 `protobuf:"varint,4,opt,name=assets_max,json=assetsMax,proto3" json:"assets_max,omitempty"`
1380+ unknownFields protoimpl.UnknownFields
1381+ sizeCache protoimpl.SizeCache
1382+}
1383+
1384+func (x *GetReleaseUsageResponse) Reset() {
1385+ *x = GetReleaseUsageResponse{}
1386+ mi := &file_ermite_release_proto_msgTypes[20]
1387+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1388+ ms.StoreMessageInfo(mi)
1389+}
1390+
1391+func (x *GetReleaseUsageResponse) String() string {
1392+ return protoimpl.X.MessageStringOf(x)
1393+}
1394+
1395+func (*GetReleaseUsageResponse) ProtoMessage() {}
1396+
1397+func (x *GetReleaseUsageResponse) ProtoReflect() protoreflect.Message {
1398+ mi := &file_ermite_release_proto_msgTypes[20]
1399+ if x != nil {
1400+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1401+ if ms.LoadMessageInfo() == nil {
1402+ ms.StoreMessageInfo(mi)
1403+ }
1404+ return ms
1405+ }
1406+ return mi.MessageOf(x)
1407+}
1408+
1409+// Deprecated: Use GetReleaseUsageResponse.ProtoReflect.Descriptor instead.
1410+func (*GetReleaseUsageResponse) Descriptor() ([]byte, []int) {
1411+ return file_ermite_release_proto_rawDescGZIP(), []int{20}
1412+}
1413+
1414+func (x *GetReleaseUsageResponse) GetUsedBytes() int64 {
1415+ if x != nil {
1416+ return x.UsedBytes
1417+ }
1418+ return 0
1419+}
1420+
1421+func (x *GetReleaseUsageResponse) GetQuotaBytes() int64 {
1422+ if x != nil {
1423+ return x.QuotaBytes
1424+ }
1425+ return 0
1426+}
1427+
1428+func (x *GetReleaseUsageResponse) GetAssetMaxBytes() int64 {
1429+ if x != nil {
1430+ return x.AssetMaxBytes
1431+ }
1432+ return 0
1433+}
1434+
1435+func (x *GetReleaseUsageResponse) GetAssetsMax() int32 {
1436+ if x != nil {
1437+ return x.AssetsMax
1438+ }
1439+ return 0
1440+}
1441+
1442+// GetReleaseRequest selects exactly one release.
1443+type GetReleaseRequest struct {
1444+ state protoimpl.MessageState `protogen:"open.v1"`
1445+ Repo string `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"`
1446+ // Types that are valid to be assigned to Selector:
1447+ //
1448+ // *GetReleaseRequest_Id
1449+ // *GetReleaseRequest_Tag
1450+ // *GetReleaseRequest_Latest
1451+ Selector isGetReleaseRequest_Selector `protobuf_oneof:"selector"`
1452+ unknownFields protoimpl.UnknownFields
1453+ sizeCache protoimpl.SizeCache
1454+}
1455+
1456+func (x *GetReleaseRequest) Reset() {
1457+ *x = GetReleaseRequest{}
1458+ mi := &file_ermite_release_proto_msgTypes[21]
1459+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1460+ ms.StoreMessageInfo(mi)
1461+}
1462+
1463+func (x *GetReleaseRequest) String() string {
1464+ return protoimpl.X.MessageStringOf(x)
1465+}
1466+
1467+func (*GetReleaseRequest) ProtoMessage() {}
1468+
1469+func (x *GetReleaseRequest) ProtoReflect() protoreflect.Message {
1470+ mi := &file_ermite_release_proto_msgTypes[21]
1471+ if x != nil {
1472+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1473+ if ms.LoadMessageInfo() == nil {
1474+ ms.StoreMessageInfo(mi)
1475+ }
1476+ return ms
1477+ }
1478+ return mi.MessageOf(x)
1479+}
1480+
1481+// Deprecated: Use GetReleaseRequest.ProtoReflect.Descriptor instead.
1482+func (*GetReleaseRequest) Descriptor() ([]byte, []int) {
1483+ return file_ermite_release_proto_rawDescGZIP(), []int{21}
1484+}
1485+
1486+func (x *GetReleaseRequest) GetRepo() string {
1487+ if x != nil {
1488+ return x.Repo
1489+ }
1490+ return ""
1491+}
1492+
1493+func (x *GetReleaseRequest) GetSelector() isGetReleaseRequest_Selector {
1494+ if x != nil {
1495+ return x.Selector
1496+ }
1497+ return nil
1498+}
1499+
1500+func (x *GetReleaseRequest) GetId() int64 {
1501+ if x != nil {
1502+ if x, ok := x.Selector.(*GetReleaseRequest_Id); ok {
1503+ return x.Id
1504+ }
1505+ }
1506+ return 0
1507+}
1508+
1509+func (x *GetReleaseRequest) GetTag() string {
1510+ if x != nil {
1511+ if x, ok := x.Selector.(*GetReleaseRequest_Tag); ok {
1512+ return x.Tag
1513+ }
1514+ }
1515+ return ""
1516+}
1517+
1518+func (x *GetReleaseRequest) GetLatest() bool {
1519+ if x != nil {
1520+ if x, ok := x.Selector.(*GetReleaseRequest_Latest); ok {
1521+ return x.Latest
1522+ }
1523+ }
1524+ return false
1525+}
1526+
1527+type isGetReleaseRequest_Selector interface {
1528+ isGetReleaseRequest_Selector()
1529+}
1530+
1531+type GetReleaseRequest_Id struct {
1532+ Id int64 `protobuf:"varint,2,opt,name=id,proto3,oneof"`
1533+}
1534+
1535+type GetReleaseRequest_Tag struct {
1536+ Tag string `protobuf:"bytes,3,opt,name=tag,proto3,oneof"`
1537+}
1538+
1539+type GetReleaseRequest_Latest struct {
1540+ Latest bool `protobuf:"varint,4,opt,name=latest,proto3,oneof"`
1541+}
1542+
1543+func (*GetReleaseRequest_Id) isGetReleaseRequest_Selector() {}
1544+
1545+func (*GetReleaseRequest_Tag) isGetReleaseRequest_Selector() {}
1546+
1547+func (*GetReleaseRequest_Latest) isGetReleaseRequest_Selector() {}
1548+
1549+// ReleaseAssetTag selects a named asset of a tag.
1550+type ReleaseAssetTag struct {
1551+ state protoimpl.MessageState `protogen:"open.v1"`
1552+ Tag string `protobuf:"bytes,1,opt,name=tag,proto3" json:"tag,omitempty"`
1553+ Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
1554+ unknownFields protoimpl.UnknownFields
1555+ sizeCache protoimpl.SizeCache
1556+}
1557+
1558+func (x *ReleaseAssetTag) Reset() {
1559+ *x = ReleaseAssetTag{}
1560+ mi := &file_ermite_release_proto_msgTypes[22]
1561+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1562+ ms.StoreMessageInfo(mi)
1563+}
1564+
1565+func (x *ReleaseAssetTag) String() string {
1566+ return protoimpl.X.MessageStringOf(x)
1567+}
1568+
1569+func (*ReleaseAssetTag) ProtoMessage() {}
1570+
1571+func (x *ReleaseAssetTag) ProtoReflect() protoreflect.Message {
1572+ mi := &file_ermite_release_proto_msgTypes[22]
1573+ if x != nil {
1574+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1575+ if ms.LoadMessageInfo() == nil {
1576+ ms.StoreMessageInfo(mi)
1577+ }
1578+ return ms
1579+ }
1580+ return mi.MessageOf(x)
1581+}
1582+
1583+// Deprecated: Use ReleaseAssetTag.ProtoReflect.Descriptor instead.
1584+func (*ReleaseAssetTag) Descriptor() ([]byte, []int) {
1585+ return file_ermite_release_proto_rawDescGZIP(), []int{22}
1586+}
1587+
1588+func (x *ReleaseAssetTag) GetTag() string {
1589+ if x != nil {
1590+ return x.Tag
1591+ }
1592+ return ""
1593+}
1594+
1595+func (x *ReleaseAssetTag) GetName() string {
1596+ if x != nil {
1597+ return x.Name
1598+ }
1599+ return ""
1600+}
1601+
1602+// ReleaseAssetLatest selects a named asset of the latest release.
1603+type ReleaseAssetLatest struct {
1604+ state protoimpl.MessageState `protogen:"open.v1"`
1605+ // Latest must be true.
1606+ Latest bool `protobuf:"varint,1,opt,name=latest,proto3" json:"latest,omitempty"`
1607+ Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
1608+ unknownFields protoimpl.UnknownFields
1609+ sizeCache protoimpl.SizeCache
1610+}
1611+
1612+func (x *ReleaseAssetLatest) Reset() {
1613+ *x = ReleaseAssetLatest{}
1614+ mi := &file_ermite_release_proto_msgTypes[23]
1615+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1616+ ms.StoreMessageInfo(mi)
1617+}
1618+
1619+func (x *ReleaseAssetLatest) String() string {
1620+ return protoimpl.X.MessageStringOf(x)
1621+}
1622+
1623+func (*ReleaseAssetLatest) ProtoMessage() {}
1624+
1625+func (x *ReleaseAssetLatest) ProtoReflect() protoreflect.Message {
1626+ mi := &file_ermite_release_proto_msgTypes[23]
1627+ if x != nil {
1628+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1629+ if ms.LoadMessageInfo() == nil {
1630+ ms.StoreMessageInfo(mi)
1631+ }
1632+ return ms
1633+ }
1634+ return mi.MessageOf(x)
1635+}
1636+
1637+// Deprecated: Use ReleaseAssetLatest.ProtoReflect.Descriptor instead.
1638+func (*ReleaseAssetLatest) Descriptor() ([]byte, []int) {
1639+ return file_ermite_release_proto_rawDescGZIP(), []int{23}
1640+}
1641+
1642+func (x *ReleaseAssetLatest) GetLatest() bool {
1643+ if x != nil {
1644+ return x.Latest
1645+ }
1646+ return false
1647+}
1648+
1649+func (x *ReleaseAssetLatest) GetName() string {
1650+ if x != nil {
1651+ return x.Name
1652+ }
1653+ return ""
1654+}
1655+
1656+// DownloadReleaseAssetRequest selects an asset and a resume offset.
1657+type DownloadReleaseAssetRequest struct {
1658+ state protoimpl.MessageState `protogen:"open.v1"`
1659+ Repo string `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"`
1660+ // Types that are valid to be assigned to Selector:
1661+ //
1662+ // *DownloadReleaseAssetRequest_AssetId
1663+ // *DownloadReleaseAssetRequest_Tag
1664+ // *DownloadReleaseAssetRequest_Latest
1665+ Selector isDownloadReleaseAssetRequest_Selector `protobuf_oneof:"selector"`
1666+ Offset int64 `protobuf:"varint,5,opt,name=offset,proto3" json:"offset,omitempty"`
1667+ unknownFields protoimpl.UnknownFields
1668+ sizeCache protoimpl.SizeCache
1669+}
1670+
1671+func (x *DownloadReleaseAssetRequest) Reset() {
1672+ *x = DownloadReleaseAssetRequest{}
1673+ mi := &file_ermite_release_proto_msgTypes[24]
1674+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1675+ ms.StoreMessageInfo(mi)
1676+}
1677+
1678+func (x *DownloadReleaseAssetRequest) String() string {
1679+ return protoimpl.X.MessageStringOf(x)
1680+}
1681+
1682+func (*DownloadReleaseAssetRequest) ProtoMessage() {}
1683+
1684+func (x *DownloadReleaseAssetRequest) ProtoReflect() protoreflect.Message {
1685+ mi := &file_ermite_release_proto_msgTypes[24]
1686+ if x != nil {
1687+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1688+ if ms.LoadMessageInfo() == nil {
1689+ ms.StoreMessageInfo(mi)
1690+ }
1691+ return ms
1692+ }
1693+ return mi.MessageOf(x)
1694+}
1695+
1696+// Deprecated: Use DownloadReleaseAssetRequest.ProtoReflect.Descriptor instead.
1697+func (*DownloadReleaseAssetRequest) Descriptor() ([]byte, []int) {
1698+ return file_ermite_release_proto_rawDescGZIP(), []int{24}
1699+}
1700+
1701+func (x *DownloadReleaseAssetRequest) GetRepo() string {
1702+ if x != nil {
1703+ return x.Repo
1704+ }
1705+ return ""
1706+}
1707+
1708+func (x *DownloadReleaseAssetRequest) GetSelector() isDownloadReleaseAssetRequest_Selector {
1709+ if x != nil {
1710+ return x.Selector
1711+ }
1712+ return nil
1713+}
1714+
1715+func (x *DownloadReleaseAssetRequest) GetAssetId() int64 {
1716+ if x != nil {
1717+ if x, ok := x.Selector.(*DownloadReleaseAssetRequest_AssetId); ok {
1718+ return x.AssetId
1719+ }
1720+ }
1721+ return 0
1722+}
1723+
1724+func (x *DownloadReleaseAssetRequest) GetTag() *ReleaseAssetTag {
1725+ if x != nil {
1726+ if x, ok := x.Selector.(*DownloadReleaseAssetRequest_Tag); ok {
1727+ return x.Tag
1728+ }
1729+ }
1730+ return nil
1731+}
1732+
1733+func (x *DownloadReleaseAssetRequest) GetLatest() *ReleaseAssetLatest {
1734+ if x != nil {
1735+ if x, ok := x.Selector.(*DownloadReleaseAssetRequest_Latest); ok {
1736+ return x.Latest
1737+ }
1738+ }
1739+ return nil
1740+}
1741+
1742+func (x *DownloadReleaseAssetRequest) GetOffset() int64 {
1743+ if x != nil {
1744+ return x.Offset
1745+ }
1746+ return 0
1747+}
1748+
1749+type isDownloadReleaseAssetRequest_Selector interface {
1750+ isDownloadReleaseAssetRequest_Selector()
1751+}
1752+
1753+type DownloadReleaseAssetRequest_AssetId struct {
1754+ AssetId int64 `protobuf:"varint,2,opt,name=asset_id,json=assetId,proto3,oneof"`
1755+}
1756+
1757+type DownloadReleaseAssetRequest_Tag struct {
1758+ Tag *ReleaseAssetTag `protobuf:"bytes,3,opt,name=tag,proto3,oneof"`
1759+}
1760+
1761+type DownloadReleaseAssetRequest_Latest struct {
1762+ Latest *ReleaseAssetLatest `protobuf:"bytes,4,opt,name=latest,proto3,oneof"`
1763+}
1764+
1765+func (*DownloadReleaseAssetRequest_AssetId) isDownloadReleaseAssetRequest_Selector() {}
1766+
1767+func (*DownloadReleaseAssetRequest_Tag) isDownloadReleaseAssetRequest_Selector() {}
1768+
1769+func (*DownloadReleaseAssetRequest_Latest) isDownloadReleaseAssetRequest_Selector() {}
1770+
1771+// GetReleaseResponse contains the selected release.
1772+type GetReleaseResponse struct {
1773+ state protoimpl.MessageState `protogen:"open.v1"`
1774+ Release *Release `protobuf:"bytes,1,opt,name=release,proto3" json:"release,omitempty"`
1775+ unknownFields protoimpl.UnknownFields
1776+ sizeCache protoimpl.SizeCache
1777+}
1778+
1779+func (x *GetReleaseResponse) Reset() {
1780+ *x = GetReleaseResponse{}
1781+ mi := &file_ermite_release_proto_msgTypes[25]
1782+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1783+ ms.StoreMessageInfo(mi)
1784+}
1785+
1786+func (x *GetReleaseResponse) String() string {
1787+ return protoimpl.X.MessageStringOf(x)
1788+}
1789+
1790+func (*GetReleaseResponse) ProtoMessage() {}
1791+
1792+func (x *GetReleaseResponse) ProtoReflect() protoreflect.Message {
1793+ mi := &file_ermite_release_proto_msgTypes[25]
1794+ if x != nil {
1795+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1796+ if ms.LoadMessageInfo() == nil {
1797+ ms.StoreMessageInfo(mi)
1798+ }
1799+ return ms
1800+ }
1801+ return mi.MessageOf(x)
1802+}
1803+
1804+// Deprecated: Use GetReleaseResponse.ProtoReflect.Descriptor instead.
1805+func (*GetReleaseResponse) Descriptor() ([]byte, []int) {
1806+ return file_ermite_release_proto_rawDescGZIP(), []int{25}
1807+}
1808+
1809+func (x *GetReleaseResponse) GetRelease() *Release {
1810+ if x != nil {
1811+ return x.Release
1812+ }
1813+ return nil
1814+}
1815+
1816+var File_ermite_release_proto protoreflect.FileDescriptor
1817+
1818+const file_ermite_release_proto_rawDesc = "" +
1819+ "\n" +
1820+ "\x14ermite/release.proto\x12\x06ermite\x1a google/protobuf/field_mask.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xdf\x03\n" +
1821+ "\aRelease\x12\x0e\n" +
1822+ "\x02id\x18\x01 \x01(\x03R\x02id\x12\x12\n" +
1823+ "\x04repo\x18\x02 \x01(\tR\x04repo\x12\x10\n" +
1824+ "\x03tag\x18\x03 \x01(\tR\x03tag\x12\x14\n" +
1825+ "\x05title\x18\x04 \x01(\tR\x05title\x12\x14\n" +
1826+ "\x05notes\x18\x05 \x01(\tR\x05notes\x12\x14\n" +
1827+ "\x05draft\x18\x06 \x01(\bR\x05draft\x12\x1e\n" +
1828+ "\n" +
1829+ "prerelease\x18\a \x01(\bR\n" +
1830+ "prerelease\x12\x16\n" +
1831+ "\x06latest\x18\b \x01(\bR\x06latest\x12)\n" +
1832+ "\x10target_commitish\x18\t \x01(\tR\x0ftargetCommitish\x12\x16\n" +
1833+ "\x06author\x18\n" +
1834+ " \x01(\tR\x06author\x129\n" +
1835+ "\n" +
1836+ "created_at\x18\v \x01(\v2\x1a.google.protobuf.TimestampR\tcreatedAt\x12=\n" +
1837+ "\fpublished_at\x18\f \x01(\v2\x1a.google.protobuf.TimestampR\vpublishedAt\x129\n" +
1838+ "\n" +
1839+ "updated_at\x18\r \x01(\v2\x1a.google.protobuf.TimestampR\tupdatedAt\x12,\n" +
1840+ "\x06assets\x18\x0e \x03(\v2\x14.ermite.ReleaseAssetR\x06assets\"\xc8\x02\n" +
1841+ "\fReleaseAsset\x12\x0e\n" +
1842+ "\x02id\x18\x01 \x01(\x03R\x02id\x12\x1d\n" +
1843+ "\n" +
1844+ "release_id\x18\x02 \x01(\x03R\treleaseId\x12\x12\n" +
1845+ "\x04name\x18\x03 \x01(\tR\x04name\x12\x14\n" +
1846+ "\x05label\x18\x04 \x01(\tR\x05label\x12!\n" +
1847+ "\fcontent_type\x18\x05 \x01(\tR\vcontentType\x12\x12\n" +
1848+ "\x04size\x18\x06 \x01(\x03R\x04size\x12\x16\n" +
1849+ "\x06digest\x18\a \x01(\tR\x06digest\x12\x1a\n" +
1850+ "\buploader\x18\b \x01(\tR\buploader\x129\n" +
1851+ "\n" +
1852+ "created_at\x18\t \x01(\v2\x1a.google.protobuf.TimestampR\tcreatedAt\x129\n" +
1853+ "\n" +
1854+ "updated_at\x18\n" +
1855+ " \x01(\v2\x1a.google.protobuf.TimestampR\tupdatedAt\"\xea\x01\n" +
1856+ "\x14CreateReleaseRequest\x12\x12\n" +
1857+ "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x10\n" +
1858+ "\x03tag\x18\x02 \x01(\tR\x03tag\x12)\n" +
1859+ "\x10target_commitish\x18\x03 \x01(\tR\x0ftargetCommitish\x12\x14\n" +
1860+ "\x05title\x18\x04 \x01(\tR\x05title\x12\x14\n" +
1861+ "\x05notes\x18\x05 \x01(\tR\x05notes\x12\x14\n" +
1862+ "\x05draft\x18\x06 \x01(\bR\x05draft\x12\x1e\n" +
1863+ "\n" +
1864+ "prerelease\x18\a \x01(\bR\n" +
1865+ "prerelease\x12\x1f\n" +
1866+ "\vmake_latest\x18\b \x01(\bR\n" +
1867+ "makeLatest\"B\n" +
1868+ "\x15CreateReleaseResponse\x12)\n" +
1869+ "\arelease\x18\x01 \x01(\v2\x0f.ermite.ReleaseR\arelease\"e\n" +
1870+ "\x13ListReleasesRequest\x12\x12\n" +
1871+ "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x1b\n" +
1872+ "\tpage_size\x18\x02 \x01(\x05R\bpageSize\x12\x1d\n" +
1873+ "\n" +
1874+ "page_token\x18\x03 \x01(\tR\tpageToken\"k\n" +
1875+ "\x14ListReleasesResponse\x12+\n" +
1876+ "\breleases\x18\x01 \x03(\v2\x0f.ermite.ReleaseR\breleases\x12&\n" +
1877+ "\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\"\xb7\x02\n" +
1878+ "\x14UpdateReleaseRequest\x12\x12\n" +
1879+ "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x0e\n" +
1880+ "\x02id\x18\x02 \x01(\x03R\x02id\x12\x10\n" +
1881+ "\x03tag\x18\x03 \x01(\tR\x03tag\x12)\n" +
1882+ "\x10target_commitish\x18\x04 \x01(\tR\x0ftargetCommitish\x12\x14\n" +
1883+ "\x05title\x18\x05 \x01(\tR\x05title\x12\x14\n" +
1884+ "\x05notes\x18\x06 \x01(\tR\x05notes\x12\x14\n" +
1885+ "\x05draft\x18\a \x01(\bR\x05draft\x12\x1e\n" +
1886+ "\n" +
1887+ "prerelease\x18\b \x01(\bR\n" +
1888+ "prerelease\x12\x1f\n" +
1889+ "\vmake_latest\x18\t \x01(\bR\n" +
1890+ "makeLatest\x12;\n" +
1891+ "\vupdate_mask\x18\n" +
1892+ " \x01(\v2\x1a.google.protobuf.FieldMaskR\n" +
1893+ "updateMask\"B\n" +
1894+ "\x15UpdateReleaseResponse\x12)\n" +
1895+ "\arelease\x18\x01 \x01(\v2\x0f.ermite.ReleaseR\arelease\":\n" +
1896+ "\x14DeleteReleaseRequest\x12\x12\n" +
1897+ "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x0e\n" +
1898+ "\x02id\x18\x02 \x01(\x03R\x02id\"\x17\n" +
1899+ "\x15DeleteReleaseResponse\"\xdd\x01\n" +
1900+ "\x19UploadReleaseAssetRequest\x12\x12\n" +
1901+ "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x1d\n" +
1902+ "\n" +
1903+ "release_id\x18\x02 \x01(\x03R\treleaseId\x12\x12\n" +
1904+ "\x04name\x18\x03 \x01(\tR\x04name\x12\x14\n" +
1905+ "\x05label\x18\x04 \x01(\tR\x05label\x12!\n" +
1906+ "\fcontent_type\x18\x05 \x01(\tR\vcontentType\x12\x12\n" +
1907+ "\x04size\x18\x06 \x01(\x03R\x04size\x12\x18\n" +
1908+ "\areplace\x18\a \x01(\bR\areplace\x12\x12\n" +
1909+ "\x04data\x18\b \x01(\fR\x04data\"H\n" +
1910+ "\x1aUploadReleaseAssetResponse\x12*\n" +
1911+ "\x05asset\x18\x01 \x01(\v2\x14.ermite.ReleaseAssetR\x05asset\"\xb1\x01\n" +
1912+ "\x19UpdateReleaseAssetRequest\x12\x12\n" +
1913+ "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x19\n" +
1914+ "\basset_id\x18\x02 \x01(\x03R\aassetId\x12\x12\n" +
1915+ "\x04name\x18\x03 \x01(\tR\x04name\x12\x14\n" +
1916+ "\x05label\x18\x04 \x01(\tR\x05label\x12;\n" +
1917+ "\vupdate_mask\x18\x05 \x01(\v2\x1a.google.protobuf.FieldMaskR\n" +
1918+ "updateMask\"H\n" +
1919+ "\x1aUpdateReleaseAssetResponse\x12*\n" +
1920+ "\x05asset\x18\x01 \x01(\v2\x14.ermite.ReleaseAssetR\x05asset\"J\n" +
1921+ "\x19DeleteReleaseAssetRequest\x12\x12\n" +
1922+ "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x19\n" +
1923+ "\basset_id\x18\x02 \x01(\x03R\aassetId\"\x1c\n" +
1924+ "\x1aDeleteReleaseAssetResponse\"`\n" +
1925+ "\x1cDownloadReleaseAssetResponse\x12*\n" +
1926+ "\x05asset\x18\x01 \x01(\v2\x14.ermite.ReleaseAssetR\x05asset\x12\x14\n" +
1927+ "\x05chunk\x18\x02 \x01(\fR\x05chunk\"M\n" +
1928+ "\x18ListReleaseAssetsRequest\x12\x12\n" +
1929+ "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x1d\n" +
1930+ "\n" +
1931+ "release_id\x18\x02 \x01(\x03R\treleaseId\"I\n" +
1932+ "\x19ListReleaseAssetsResponse\x12,\n" +
1933+ "\x06assets\x18\x01 \x03(\v2\x14.ermite.ReleaseAssetR\x06assets\",\n" +
1934+ "\x16GetReleaseUsageRequest\x12\x12\n" +
1935+ "\x04repo\x18\x01 \x01(\tR\x04repo\"\xa0\x01\n" +
1936+ "\x17GetReleaseUsageResponse\x12\x1d\n" +
1937+ "\n" +
1938+ "used_bytes\x18\x01 \x01(\x03R\tusedBytes\x12\x1f\n" +
1939+ "\vquota_bytes\x18\x02 \x01(\x03R\n" +
1940+ "quotaBytes\x12&\n" +
1941+ "\x0fasset_max_bytes\x18\x03 \x01(\x03R\rassetMaxBytes\x12\x1d\n" +
1942+ "\n" +
1943+ "assets_max\x18\x04 \x01(\x05R\tassetsMax\"s\n" +
1944+ "\x11GetReleaseRequest\x12\x12\n" +
1945+ "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x10\n" +
1946+ "\x02id\x18\x02 \x01(\x03H\x00R\x02id\x12\x12\n" +
1947+ "\x03tag\x18\x03 \x01(\tH\x00R\x03tag\x12\x18\n" +
1948+ "\x06latest\x18\x04 \x01(\bH\x00R\x06latestB\n" +
1949+ "\n" +
1950+ "\bselector\"7\n" +
1951+ "\x0fReleaseAssetTag\x12\x10\n" +
1952+ "\x03tag\x18\x01 \x01(\tR\x03tag\x12\x12\n" +
1953+ "\x04name\x18\x02 \x01(\tR\x04name\"@\n" +
1954+ "\x12ReleaseAssetLatest\x12\x16\n" +
1955+ "\x06latest\x18\x01 \x01(\bR\x06latest\x12\x12\n" +
1956+ "\x04name\x18\x02 \x01(\tR\x04name\"\xd5\x01\n" +
1957+ "\x1bDownloadReleaseAssetRequest\x12\x12\n" +
1958+ "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x1b\n" +
1959+ "\basset_id\x18\x02 \x01(\x03H\x00R\aassetId\x12+\n" +
1960+ "\x03tag\x18\x03 \x01(\v2\x17.ermite.ReleaseAssetTagH\x00R\x03tag\x124\n" +
1961+ "\x06latest\x18\x04 \x01(\v2\x1a.ermite.ReleaseAssetLatestH\x00R\x06latest\x12\x16\n" +
1962+ "\x06offset\x18\x05 \x01(\x03R\x06offsetB\n" +
1963+ "\n" +
1964+ "\bselector\"?\n" +
1965+ "\x12GetReleaseResponse\x12)\n" +
1966+ "\arelease\x18\x01 \x01(\v2\x0f.ermite.ReleaseR\arelease2\xb6\a\n" +
1967+ "\x0eReleaseService\x12L\n" +
1968+ "\rCreateRelease\x12\x1c.ermite.CreateReleaseRequest\x1a\x1d.ermite.CreateReleaseResponse\x12C\n" +
1969+ "\n" +
1970+ "GetRelease\x12\x19.ermite.GetReleaseRequest\x1a\x1a.ermite.GetReleaseResponse\x12I\n" +
1971+ "\fListReleases\x12\x1b.ermite.ListReleasesRequest\x1a\x1c.ermite.ListReleasesResponse\x12L\n" +
1972+ "\rUpdateRelease\x12\x1c.ermite.UpdateReleaseRequest\x1a\x1d.ermite.UpdateReleaseResponse\x12L\n" +
1973+ "\rDeleteRelease\x12\x1c.ermite.DeleteReleaseRequest\x1a\x1d.ermite.DeleteReleaseResponse\x12]\n" +
1974+ "\x12UploadReleaseAsset\x12!.ermite.UploadReleaseAssetRequest\x1a\".ermite.UploadReleaseAssetResponse(\x01\x12[\n" +
1975+ "\x12UpdateReleaseAsset\x12!.ermite.UpdateReleaseAssetRequest\x1a\".ermite.UpdateReleaseAssetResponse\x12[\n" +
1976+ "\x12DeleteReleaseAsset\x12!.ermite.DeleteReleaseAssetRequest\x1a\".ermite.DeleteReleaseAssetResponse\x12c\n" +
1977+ "\x14DownloadReleaseAsset\x12#.ermite.DownloadReleaseAssetRequest\x1a$.ermite.DownloadReleaseAssetResponse0\x01\x12X\n" +
1978+ "\x11ListReleaseAssets\x12 .ermite.ListReleaseAssetsRequest\x1a!.ermite.ListReleaseAssetsResponse\x12R\n" +
1979+ "\x0fGetReleaseUsage\x12\x1e.ermite.GetReleaseUsageRequest\x1a\x1f.ermite.GetReleaseUsageResponseBs\n" +
1980+ "\n" +
1981+ "com.ermiteB\fReleaseProtoP\x01Z\x1fbnema.dev/ermite-api/gen/ermite\xa2\x02\x03EXX\xaa\x02\x06Ermite\xca\x02\x06Ermite\xe2\x02\x12Ermite\\GPBMetadata\xea\x02\x06Ermiteb\x06proto3"
1982+
1983+var (
1984+ file_ermite_release_proto_rawDescOnce sync.Once
1985+ file_ermite_release_proto_rawDescData []byte
1986+)
1987+
1988+func file_ermite_release_proto_rawDescGZIP() []byte {
1989+ file_ermite_release_proto_rawDescOnce.Do(func() {
1990+ file_ermite_release_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_ermite_release_proto_rawDesc), len(file_ermite_release_proto_rawDesc)))
1991+ })
1992+ return file_ermite_release_proto_rawDescData
1993+}
1994+
1995+var file_ermite_release_proto_msgTypes = make([]protoimpl.MessageInfo, 26)
1996+var file_ermite_release_proto_goTypes = []any{
1997+ (*Release)(nil), // 0: ermite.Release
1998+ (*ReleaseAsset)(nil), // 1: ermite.ReleaseAsset
1999+ (*CreateReleaseRequest)(nil), // 2: ermite.CreateReleaseRequest
2000+ (*CreateReleaseResponse)(nil), // 3: ermite.CreateReleaseResponse
2001+ (*ListReleasesRequest)(nil), // 4: ermite.ListReleasesRequest
2002+ (*ListReleasesResponse)(nil), // 5: ermite.ListReleasesResponse
2003+ (*UpdateReleaseRequest)(nil), // 6: ermite.UpdateReleaseRequest
2004+ (*UpdateReleaseResponse)(nil), // 7: ermite.UpdateReleaseResponse
2005+ (*DeleteReleaseRequest)(nil), // 8: ermite.DeleteReleaseRequest
2006+ (*DeleteReleaseResponse)(nil), // 9: ermite.DeleteReleaseResponse
2007+ (*UploadReleaseAssetRequest)(nil), // 10: ermite.UploadReleaseAssetRequest
2008+ (*UploadReleaseAssetResponse)(nil), // 11: ermite.UploadReleaseAssetResponse
2009+ (*UpdateReleaseAssetRequest)(nil), // 12: ermite.UpdateReleaseAssetRequest
2010+ (*UpdateReleaseAssetResponse)(nil), // 13: ermite.UpdateReleaseAssetResponse
2011+ (*DeleteReleaseAssetRequest)(nil), // 14: ermite.DeleteReleaseAssetRequest
2012+ (*DeleteReleaseAssetResponse)(nil), // 15: ermite.DeleteReleaseAssetResponse
2013+ (*DownloadReleaseAssetResponse)(nil), // 16: ermite.DownloadReleaseAssetResponse
2014+ (*ListReleaseAssetsRequest)(nil), // 17: ermite.ListReleaseAssetsRequest
2015+ (*ListReleaseAssetsResponse)(nil), // 18: ermite.ListReleaseAssetsResponse
2016+ (*GetReleaseUsageRequest)(nil), // 19: ermite.GetReleaseUsageRequest
2017+ (*GetReleaseUsageResponse)(nil), // 20: ermite.GetReleaseUsageResponse
2018+ (*GetReleaseRequest)(nil), // 21: ermite.GetReleaseRequest
2019+ (*ReleaseAssetTag)(nil), // 22: ermite.ReleaseAssetTag
2020+ (*ReleaseAssetLatest)(nil), // 23: ermite.ReleaseAssetLatest
2021+ (*DownloadReleaseAssetRequest)(nil), // 24: ermite.DownloadReleaseAssetRequest
2022+ (*GetReleaseResponse)(nil), // 25: ermite.GetReleaseResponse
2023+ (*timestamppb.Timestamp)(nil), // 26: google.protobuf.Timestamp
2024+ (*fieldmaskpb.FieldMask)(nil), // 27: google.protobuf.FieldMask
2025+}
2026+var file_ermite_release_proto_depIdxs = []int32{
2027+ 26, // 0: ermite.Release.created_at:type_name -> google.protobuf.Timestamp
2028+ 26, // 1: ermite.Release.published_at:type_name -> google.protobuf.Timestamp
2029+ 26, // 2: ermite.Release.updated_at:type_name -> google.protobuf.Timestamp
2030+ 1, // 3: ermite.Release.assets:type_name -> ermite.ReleaseAsset
2031+ 26, // 4: ermite.ReleaseAsset.created_at:type_name -> google.protobuf.Timestamp
2032+ 26, // 5: ermite.ReleaseAsset.updated_at:type_name -> google.protobuf.Timestamp
2033+ 0, // 6: ermite.CreateReleaseResponse.release:type_name -> ermite.Release
2034+ 0, // 7: ermite.ListReleasesResponse.releases:type_name -> ermite.Release
2035+ 27, // 8: ermite.UpdateReleaseRequest.update_mask:type_name -> google.protobuf.FieldMask
2036+ 0, // 9: ermite.UpdateReleaseResponse.release:type_name -> ermite.Release
2037+ 1, // 10: ermite.UploadReleaseAssetResponse.asset:type_name -> ermite.ReleaseAsset
2038+ 27, // 11: ermite.UpdateReleaseAssetRequest.update_mask:type_name -> google.protobuf.FieldMask
2039+ 1, // 12: ermite.UpdateReleaseAssetResponse.asset:type_name -> ermite.ReleaseAsset
2040+ 1, // 13: ermite.DownloadReleaseAssetResponse.asset:type_name -> ermite.ReleaseAsset
2041+ 1, // 14: ermite.ListReleaseAssetsResponse.assets:type_name -> ermite.ReleaseAsset
2042+ 22, // 15: ermite.DownloadReleaseAssetRequest.tag:type_name -> ermite.ReleaseAssetTag
2043+ 23, // 16: ermite.DownloadReleaseAssetRequest.latest:type_name -> ermite.ReleaseAssetLatest
2044+ 0, // 17: ermite.GetReleaseResponse.release:type_name -> ermite.Release
2045+ 2, // 18: ermite.ReleaseService.CreateRelease:input_type -> ermite.CreateReleaseRequest
2046+ 21, // 19: ermite.ReleaseService.GetRelease:input_type -> ermite.GetReleaseRequest
2047+ 4, // 20: ermite.ReleaseService.ListReleases:input_type -> ermite.ListReleasesRequest
2048+ 6, // 21: ermite.ReleaseService.UpdateRelease:input_type -> ermite.UpdateReleaseRequest
2049+ 8, // 22: ermite.ReleaseService.DeleteRelease:input_type -> ermite.DeleteReleaseRequest
2050+ 10, // 23: ermite.ReleaseService.UploadReleaseAsset:input_type -> ermite.UploadReleaseAssetRequest
2051+ 12, // 24: ermite.ReleaseService.UpdateReleaseAsset:input_type -> ermite.UpdateReleaseAssetRequest
2052+ 14, // 25: ermite.ReleaseService.DeleteReleaseAsset:input_type -> ermite.DeleteReleaseAssetRequest
2053+ 24, // 26: ermite.ReleaseService.DownloadReleaseAsset:input_type -> ermite.DownloadReleaseAssetRequest
2054+ 17, // 27: ermite.ReleaseService.ListReleaseAssets:input_type -> ermite.ListReleaseAssetsRequest
2055+ 19, // 28: ermite.ReleaseService.GetReleaseUsage:input_type -> ermite.GetReleaseUsageRequest
2056+ 3, // 29: ermite.ReleaseService.CreateRelease:output_type -> ermite.CreateReleaseResponse
2057+ 25, // 30: ermite.ReleaseService.GetRelease:output_type -> ermite.GetReleaseResponse
2058+ 5, // 31: ermite.ReleaseService.ListReleases:output_type -> ermite.ListReleasesResponse
2059+ 7, // 32: ermite.ReleaseService.UpdateRelease:output_type -> ermite.UpdateReleaseResponse
2060+ 9, // 33: ermite.ReleaseService.DeleteRelease:output_type -> ermite.DeleteReleaseResponse
2061+ 11, // 34: ermite.ReleaseService.UploadReleaseAsset:output_type -> ermite.UploadReleaseAssetResponse
2062+ 13, // 35: ermite.ReleaseService.UpdateReleaseAsset:output_type -> ermite.UpdateReleaseAssetResponse
2063+ 15, // 36: ermite.ReleaseService.DeleteReleaseAsset:output_type -> ermite.DeleteReleaseAssetResponse
2064+ 16, // 37: ermite.ReleaseService.DownloadReleaseAsset:output_type -> ermite.DownloadReleaseAssetResponse
2065+ 18, // 38: ermite.ReleaseService.ListReleaseAssets:output_type -> ermite.ListReleaseAssetsResponse
2066+ 20, // 39: ermite.ReleaseService.GetReleaseUsage:output_type -> ermite.GetReleaseUsageResponse
2067+ 29, // [29:40] is the sub-list for method output_type
2068+ 18, // [18:29] is the sub-list for method input_type
2069+ 18, // [18:18] is the sub-list for extension type_name
2070+ 18, // [18:18] is the sub-list for extension extendee
2071+ 0, // [0:18] is the sub-list for field type_name
2072+}
2073+
2074+func init() { file_ermite_release_proto_init() }
2075+func file_ermite_release_proto_init() {
2076+ if File_ermite_release_proto != nil {
2077+ return
2078+ }
2079+ file_ermite_release_proto_msgTypes[21].OneofWrappers = []any{
2080+ (*GetReleaseRequest_Id)(nil),
2081+ (*GetReleaseRequest_Tag)(nil),
2082+ (*GetReleaseRequest_Latest)(nil),
2083+ }
2084+ file_ermite_release_proto_msgTypes[24].OneofWrappers = []any{
2085+ (*DownloadReleaseAssetRequest_AssetId)(nil),
2086+ (*DownloadReleaseAssetRequest_Tag)(nil),
2087+ (*DownloadReleaseAssetRequest_Latest)(nil),
2088+ }
2089+ type x struct{}
2090+ out := protoimpl.TypeBuilder{
2091+ File: protoimpl.DescBuilder{
2092+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
2093+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_ermite_release_proto_rawDesc), len(file_ermite_release_proto_rawDesc)),
2094+ NumEnums: 0,
2095+ NumMessages: 26,
2096+ NumExtensions: 0,
2097+ NumServices: 1,
2098+ },
2099+ GoTypes: file_ermite_release_proto_goTypes,
2100+ DependencyIndexes: file_ermite_release_proto_depIdxs,
2101+ MessageInfos: file_ermite_release_proto_msgTypes,
2102+ }.Build()
2103+ File_ermite_release_proto = out.File
2104+ file_ermite_release_proto_goTypes = nil
2105+ file_ermite_release_proto_depIdxs = nil
2106+}
@@ -0,0 +1,2106 @@
1+// SPDX-License-Identifier: MIT
2+
3+// Code generated by protoc-gen-go. DO NOT EDIT.
4+// versions:
5+// protoc-gen-go v1.36.12
6+// protoc (unknown)
7+// source: ermite/release.proto
8+
9+package ermite
10+
11+import (
12+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
13+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
14+ fieldmaskpb "google.golang.org/protobuf/types/known/fieldmaskpb"
15+ timestamppb "google.golang.org/protobuf/types/known/timestamppb"
16+ reflect "reflect"
17+ sync "sync"
18+ unsafe "unsafe"
19+)
20+
21+const (
22+ // Verify that this generated code is sufficiently up-to-date.
23+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
24+ // Verify that runtime/protoimpl is sufficiently up-to-date.
25+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
26+)
27+
28+// Release describes a tag and its notes. Drafts are visible only to writers.
29+type Release struct {
30+ state protoimpl.MessageState `protogen:"open.v1"`
31+ Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
32+ Repo string `protobuf:"bytes,2,opt,name=repo,proto3" json:"repo,omitempty"`
33+ Tag string `protobuf:"bytes,3,opt,name=tag,proto3" json:"tag,omitempty"`
34+ Title string `protobuf:"bytes,4,opt,name=title,proto3" json:"title,omitempty"`
35+ Notes string `protobuf:"bytes,5,opt,name=notes,proto3" json:"notes,omitempty"`
36+ Draft bool `protobuf:"varint,6,opt,name=draft,proto3" json:"draft,omitempty"`
37+ Prerelease bool `protobuf:"varint,7,opt,name=prerelease,proto3" json:"prerelease,omitempty"`
38+ // Latest identifies the release returned by the latest selector, computed or pinned.
39+ Latest bool `protobuf:"varint,8,opt,name=latest,proto3" json:"latest,omitempty"`
40+ // TargetCommitish is the tag's commit; empty for a draft without a tag.
41+ TargetCommitish string `protobuf:"bytes,9,opt,name=target_commitish,json=targetCommitish,proto3" json:"target_commitish,omitempty"`
42+ // Author is the label of the principal that created the release.
43+ Author string `protobuf:"bytes,10,opt,name=author,proto3" json:"author,omitempty"`
44+ CreatedAt *timestamppb.Timestamp `protobuf:"bytes,11,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"`
45+ // PublishedAt is unset while draft.
46+ PublishedAt *timestamppb.Timestamp `protobuf:"bytes,12,opt,name=published_at,json=publishedAt,proto3" json:"published_at,omitempty"`
47+ UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,13,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"`
48+ // Assets contains uploaded assets only, ordered by name.
49+ Assets []*ReleaseAsset `protobuf:"bytes,14,rep,name=assets,proto3" json:"assets,omitempty"`
50+ unknownFields protoimpl.UnknownFields
51+ sizeCache protoimpl.SizeCache
52+}
53+
54+func (x *Release) Reset() {
55+ *x = Release{}
56+ mi := &file_ermite_release_proto_msgTypes[0]
57+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
58+ ms.StoreMessageInfo(mi)
59+}
60+
61+func (x *Release) String() string {
62+ return protoimpl.X.MessageStringOf(x)
63+}
64+
65+func (*Release) ProtoMessage() {}
66+
67+func (x *Release) ProtoReflect() protoreflect.Message {
68+ mi := &file_ermite_release_proto_msgTypes[0]
69+ if x != nil {
70+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
71+ if ms.LoadMessageInfo() == nil {
72+ ms.StoreMessageInfo(mi)
73+ }
74+ return ms
75+ }
76+ return mi.MessageOf(x)
77+}
78+
79+// Deprecated: Use Release.ProtoReflect.Descriptor instead.
80+func (*Release) Descriptor() ([]byte, []int) {
81+ return file_ermite_release_proto_rawDescGZIP(), []int{0}
82+}
83+
84+func (x *Release) GetId() int64 {
85+ if x != nil {
86+ return x.Id
87+ }
88+ return 0
89+}
90+
91+func (x *Release) GetRepo() string {
92+ if x != nil {
93+ return x.Repo
94+ }
95+ return ""
96+}
97+
98+func (x *Release) GetTag() string {
99+ if x != nil {
100+ return x.Tag
101+ }
102+ return ""
103+}
104+
105+func (x *Release) GetTitle() string {
106+ if x != nil {
107+ return x.Title
108+ }
109+ return ""
110+}
111+
112+func (x *Release) GetNotes() string {
113+ if x != nil {
114+ return x.Notes
115+ }
116+ return ""
117+}
118+
119+func (x *Release) GetDraft() bool {
120+ if x != nil {
121+ return x.Draft
122+ }
123+ return false
124+}
125+
126+func (x *Release) GetPrerelease() bool {
127+ if x != nil {
128+ return x.Prerelease
129+ }
130+ return false
131+}
132+
133+func (x *Release) GetLatest() bool {
134+ if x != nil {
135+ return x.Latest
136+ }
137+ return false
138+}
139+
140+func (x *Release) GetTargetCommitish() string {
141+ if x != nil {
142+ return x.TargetCommitish
143+ }
144+ return ""
145+}
146+
147+func (x *Release) GetAuthor() string {
148+ if x != nil {
149+ return x.Author
150+ }
151+ return ""
152+}
153+
154+func (x *Release) GetCreatedAt() *timestamppb.Timestamp {
155+ if x != nil {
156+ return x.CreatedAt
157+ }
158+ return nil
159+}
160+
161+func (x *Release) GetPublishedAt() *timestamppb.Timestamp {
162+ if x != nil {
163+ return x.PublishedAt
164+ }
165+ return nil
166+}
167+
168+func (x *Release) GetUpdatedAt() *timestamppb.Timestamp {
169+ if x != nil {
170+ return x.UpdatedAt
171+ }
172+ return nil
173+}
174+
175+func (x *Release) GetAssets() []*ReleaseAsset {
176+ if x != nil {
177+ return x.Assets
178+ }
179+ return nil
180+}
181+
182+// ReleaseAsset describes an uploaded file, with a sha256:<hex> digest.
183+type ReleaseAsset struct {
184+ state protoimpl.MessageState `protogen:"open.v1"`
185+ Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
186+ ReleaseId int64 `protobuf:"varint,2,opt,name=release_id,json=releaseId,proto3" json:"release_id,omitempty"`
187+ // Name is unique within the release, 1–255 characters, without slashes or controls.
188+ Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
189+ Label string `protobuf:"bytes,4,opt,name=label,proto3" json:"label,omitempty"`
190+ // ContentType defaults to application/octet-stream.
191+ ContentType string `protobuf:"bytes,5,opt,name=content_type,json=contentType,proto3" json:"content_type,omitempty"`
192+ Size int64 `protobuf:"varint,6,opt,name=size,proto3" json:"size,omitempty"`
193+ Digest string `protobuf:"bytes,7,opt,name=digest,proto3" json:"digest,omitempty"`
194+ Uploader string `protobuf:"bytes,8,opt,name=uploader,proto3" json:"uploader,omitempty"`
195+ CreatedAt *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"`
196+ UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"`
197+ unknownFields protoimpl.UnknownFields
198+ sizeCache protoimpl.SizeCache
199+}
200+
201+func (x *ReleaseAsset) Reset() {
202+ *x = ReleaseAsset{}
203+ mi := &file_ermite_release_proto_msgTypes[1]
204+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
205+ ms.StoreMessageInfo(mi)
206+}
207+
208+func (x *ReleaseAsset) String() string {
209+ return protoimpl.X.MessageStringOf(x)
210+}
211+
212+func (*ReleaseAsset) ProtoMessage() {}
213+
214+func (x *ReleaseAsset) ProtoReflect() protoreflect.Message {
215+ mi := &file_ermite_release_proto_msgTypes[1]
216+ if x != nil {
217+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
218+ if ms.LoadMessageInfo() == nil {
219+ ms.StoreMessageInfo(mi)
220+ }
221+ return ms
222+ }
223+ return mi.MessageOf(x)
224+}
225+
226+// Deprecated: Use ReleaseAsset.ProtoReflect.Descriptor instead.
227+func (*ReleaseAsset) Descriptor() ([]byte, []int) {
228+ return file_ermite_release_proto_rawDescGZIP(), []int{1}
229+}
230+
231+func (x *ReleaseAsset) GetId() int64 {
232+ if x != nil {
233+ return x.Id
234+ }
235+ return 0
236+}
237+
238+func (x *ReleaseAsset) GetReleaseId() int64 {
239+ if x != nil {
240+ return x.ReleaseId
241+ }
242+ return 0
243+}
244+
245+func (x *ReleaseAsset) GetName() string {
246+ if x != nil {
247+ return x.Name
248+ }
249+ return ""
250+}
251+
252+func (x *ReleaseAsset) GetLabel() string {
253+ if x != nil {
254+ return x.Label
255+ }
256+ return ""
257+}
258+
259+func (x *ReleaseAsset) GetContentType() string {
260+ if x != nil {
261+ return x.ContentType
262+ }
263+ return ""
264+}
265+
266+func (x *ReleaseAsset) GetSize() int64 {
267+ if x != nil {
268+ return x.Size
269+ }
270+ return 0
271+}
272+
273+func (x *ReleaseAsset) GetDigest() string {
274+ if x != nil {
275+ return x.Digest
276+ }
277+ return ""
278+}
279+
280+func (x *ReleaseAsset) GetUploader() string {
281+ if x != nil {
282+ return x.Uploader
283+ }
284+ return ""
285+}
286+
287+func (x *ReleaseAsset) GetCreatedAt() *timestamppb.Timestamp {
288+ if x != nil {
289+ return x.CreatedAt
290+ }
291+ return nil
292+}
293+
294+func (x *ReleaseAsset) GetUpdatedAt() *timestamppb.Timestamp {
295+ if x != nil {
296+ return x.UpdatedAt
297+ }
298+ return nil
299+}
300+
301+// CreateReleaseRequest is the request of ReleaseService.CreateRelease.
302+type CreateReleaseRequest struct {
303+ state protoimpl.MessageState `protogen:"open.v1"`
304+ Repo string `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"`
305+ Tag string `protobuf:"bytes,2,opt,name=tag,proto3" json:"tag,omitempty"`
306+ TargetCommitish string `protobuf:"bytes,3,opt,name=target_commitish,json=targetCommitish,proto3" json:"target_commitish,omitempty"`
307+ Title string `protobuf:"bytes,4,opt,name=title,proto3" json:"title,omitempty"`
308+ Notes string `protobuf:"bytes,5,opt,name=notes,proto3" json:"notes,omitempty"`
309+ Draft bool `protobuf:"varint,6,opt,name=draft,proto3" json:"draft,omitempty"`
310+ Prerelease bool `protobuf:"varint,7,opt,name=prerelease,proto3" json:"prerelease,omitempty"`
311+ // MakeLatest pins this published non-prerelease as latest. False does not pin the release.
312+ MakeLatest bool `protobuf:"varint,8,opt,name=make_latest,json=makeLatest,proto3" json:"make_latest,omitempty"`
313+ unknownFields protoimpl.UnknownFields
314+ sizeCache protoimpl.SizeCache
315+}
316+
317+func (x *CreateReleaseRequest) Reset() {
318+ *x = CreateReleaseRequest{}
319+ mi := &file_ermite_release_proto_msgTypes[2]
320+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
321+ ms.StoreMessageInfo(mi)
322+}
323+
324+func (x *CreateReleaseRequest) String() string {
325+ return protoimpl.X.MessageStringOf(x)
326+}
327+
328+func (*CreateReleaseRequest) ProtoMessage() {}
329+
330+func (x *CreateReleaseRequest) ProtoReflect() protoreflect.Message {
331+ mi := &file_ermite_release_proto_msgTypes[2]
332+ if x != nil {
333+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
334+ if ms.LoadMessageInfo() == nil {
335+ ms.StoreMessageInfo(mi)
336+ }
337+ return ms
338+ }
339+ return mi.MessageOf(x)
340+}
341+
342+// Deprecated: Use CreateReleaseRequest.ProtoReflect.Descriptor instead.
343+func (*CreateReleaseRequest) Descriptor() ([]byte, []int) {
344+ return file_ermite_release_proto_rawDescGZIP(), []int{2}
345+}
346+
347+func (x *CreateReleaseRequest) GetRepo() string {
348+ if x != nil {
349+ return x.Repo
350+ }
351+ return ""
352+}
353+
354+func (x *CreateReleaseRequest) GetTag() string {
355+ if x != nil {
356+ return x.Tag
357+ }
358+ return ""
359+}
360+
361+func (x *CreateReleaseRequest) GetTargetCommitish() string {
362+ if x != nil {
363+ return x.TargetCommitish
364+ }
365+ return ""
366+}
367+
368+func (x *CreateReleaseRequest) GetTitle() string {
369+ if x != nil {
370+ return x.Title
371+ }
372+ return ""
373+}
374+
375+func (x *CreateReleaseRequest) GetNotes() string {
376+ if x != nil {
377+ return x.Notes
378+ }
379+ return ""
380+}
381+
382+func (x *CreateReleaseRequest) GetDraft() bool {
383+ if x != nil {
384+ return x.Draft
385+ }
386+ return false
387+}
388+
389+func (x *CreateReleaseRequest) GetPrerelease() bool {
390+ if x != nil {
391+ return x.Prerelease
392+ }
393+ return false
394+}
395+
396+func (x *CreateReleaseRequest) GetMakeLatest() bool {
397+ if x != nil {
398+ return x.MakeLatest
399+ }
400+ return false
401+}
402+
403+// CreateReleaseResponse is the response of ReleaseService.CreateRelease.
404+type CreateReleaseResponse struct {
405+ state protoimpl.MessageState `protogen:"open.v1"`
406+ Release *Release `protobuf:"bytes,1,opt,name=release,proto3" json:"release,omitempty"`
407+ unknownFields protoimpl.UnknownFields
408+ sizeCache protoimpl.SizeCache
409+}
410+
411+func (x *CreateReleaseResponse) Reset() {
412+ *x = CreateReleaseResponse{}
413+ mi := &file_ermite_release_proto_msgTypes[3]
414+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
415+ ms.StoreMessageInfo(mi)
416+}
417+
418+func (x *CreateReleaseResponse) String() string {
419+ return protoimpl.X.MessageStringOf(x)
420+}
421+
422+func (*CreateReleaseResponse) ProtoMessage() {}
423+
424+func (x *CreateReleaseResponse) ProtoReflect() protoreflect.Message {
425+ mi := &file_ermite_release_proto_msgTypes[3]
426+ if x != nil {
427+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
428+ if ms.LoadMessageInfo() == nil {
429+ ms.StoreMessageInfo(mi)
430+ }
431+ return ms
432+ }
433+ return mi.MessageOf(x)
434+}
435+
436+// Deprecated: Use CreateReleaseResponse.ProtoReflect.Descriptor instead.
437+func (*CreateReleaseResponse) Descriptor() ([]byte, []int) {
438+ return file_ermite_release_proto_rawDescGZIP(), []int{3}
439+}
440+
441+func (x *CreateReleaseResponse) GetRelease() *Release {
442+ if x != nil {
443+ return x.Release
444+ }
445+ return nil
446+}
447+
448+// ListReleasesRequest is the request of ReleaseService.ListReleases.
449+type ListReleasesRequest struct {
450+ state protoimpl.MessageState `protogen:"open.v1"`
451+ Repo string `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"`
452+ // PageSize is the maximum count; zero uses the server default.
453+ PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
454+ // PageToken is next_page_token from the preceding page, or empty initially.
455+ PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
456+ unknownFields protoimpl.UnknownFields
457+ sizeCache protoimpl.SizeCache
458+}
459+
460+func (x *ListReleasesRequest) Reset() {
461+ *x = ListReleasesRequest{}
462+ mi := &file_ermite_release_proto_msgTypes[4]
463+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
464+ ms.StoreMessageInfo(mi)
465+}
466+
467+func (x *ListReleasesRequest) String() string {
468+ return protoimpl.X.MessageStringOf(x)
469+}
470+
471+func (*ListReleasesRequest) ProtoMessage() {}
472+
473+func (x *ListReleasesRequest) ProtoReflect() protoreflect.Message {
474+ mi := &file_ermite_release_proto_msgTypes[4]
475+ if x != nil {
476+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
477+ if ms.LoadMessageInfo() == nil {
478+ ms.StoreMessageInfo(mi)
479+ }
480+ return ms
481+ }
482+ return mi.MessageOf(x)
483+}
484+
485+// Deprecated: Use ListReleasesRequest.ProtoReflect.Descriptor instead.
486+func (*ListReleasesRequest) Descriptor() ([]byte, []int) {
487+ return file_ermite_release_proto_rawDescGZIP(), []int{4}
488+}
489+
490+func (x *ListReleasesRequest) GetRepo() string {
491+ if x != nil {
492+ return x.Repo
493+ }
494+ return ""
495+}
496+
497+func (x *ListReleasesRequest) GetPageSize() int32 {
498+ if x != nil {
499+ return x.PageSize
500+ }
501+ return 0
502+}
503+
504+func (x *ListReleasesRequest) GetPageToken() string {
505+ if x != nil {
506+ return x.PageToken
507+ }
508+ return ""
509+}
510+
511+// ListReleasesResponse is the response of ReleaseService.ListReleases.
512+type ListReleasesResponse struct {
513+ state protoimpl.MessageState `protogen:"open.v1"`
514+ Releases []*Release `protobuf:"bytes,1,rep,name=releases,proto3" json:"releases,omitempty"`
515+ NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
516+ unknownFields protoimpl.UnknownFields
517+ sizeCache protoimpl.SizeCache
518+}
519+
520+func (x *ListReleasesResponse) Reset() {
521+ *x = ListReleasesResponse{}
522+ mi := &file_ermite_release_proto_msgTypes[5]
523+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
524+ ms.StoreMessageInfo(mi)
525+}
526+
527+func (x *ListReleasesResponse) String() string {
528+ return protoimpl.X.MessageStringOf(x)
529+}
530+
531+func (*ListReleasesResponse) ProtoMessage() {}
532+
533+func (x *ListReleasesResponse) ProtoReflect() protoreflect.Message {
534+ mi := &file_ermite_release_proto_msgTypes[5]
535+ if x != nil {
536+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
537+ if ms.LoadMessageInfo() == nil {
538+ ms.StoreMessageInfo(mi)
539+ }
540+ return ms
541+ }
542+ return mi.MessageOf(x)
543+}
544+
545+// Deprecated: Use ListReleasesResponse.ProtoReflect.Descriptor instead.
546+func (*ListReleasesResponse) Descriptor() ([]byte, []int) {
547+ return file_ermite_release_proto_rawDescGZIP(), []int{5}
548+}
549+
550+func (x *ListReleasesResponse) GetReleases() []*Release {
551+ if x != nil {
552+ return x.Releases
553+ }
554+ return nil
555+}
556+
557+func (x *ListReleasesResponse) GetNextPageToken() string {
558+ if x != nil {
559+ return x.NextPageToken
560+ }
561+ return ""
562+}
563+
564+// UpdateReleaseRequest is the request of ReleaseService.UpdateRelease.
565+type UpdateReleaseRequest struct {
566+ state protoimpl.MessageState `protogen:"open.v1"`
567+ Repo string `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"`
568+ Id int64 `protobuf:"varint,2,opt,name=id,proto3" json:"id,omitempty"`
569+ Tag string `protobuf:"bytes,3,opt,name=tag,proto3" json:"tag,omitempty"`
570+ TargetCommitish string `protobuf:"bytes,4,opt,name=target_commitish,json=targetCommitish,proto3" json:"target_commitish,omitempty"`
571+ Title string `protobuf:"bytes,5,opt,name=title,proto3" json:"title,omitempty"`
572+ Notes string `protobuf:"bytes,6,opt,name=notes,proto3" json:"notes,omitempty"`
573+ Draft bool `protobuf:"varint,7,opt,name=draft,proto3" json:"draft,omitempty"`
574+ Prerelease bool `protobuf:"varint,8,opt,name=prerelease,proto3" json:"prerelease,omitempty"`
575+ // MakeLatest pins this published non-prerelease as latest. False does not pin the release.
576+ MakeLatest bool `protobuf:"varint,9,opt,name=make_latest,json=makeLatest,proto3" json:"make_latest,omitempty"`
577+ // UpdateMask names the fields to change; unknown paths are invalid_argument.
578+ UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,10,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
579+ unknownFields protoimpl.UnknownFields
580+ sizeCache protoimpl.SizeCache
581+}
582+
583+func (x *UpdateReleaseRequest) Reset() {
584+ *x = UpdateReleaseRequest{}
585+ mi := &file_ermite_release_proto_msgTypes[6]
586+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
587+ ms.StoreMessageInfo(mi)
588+}
589+
590+func (x *UpdateReleaseRequest) String() string {
591+ return protoimpl.X.MessageStringOf(x)
592+}
593+
594+func (*UpdateReleaseRequest) ProtoMessage() {}
595+
596+func (x *UpdateReleaseRequest) ProtoReflect() protoreflect.Message {
597+ mi := &file_ermite_release_proto_msgTypes[6]
598+ if x != nil {
599+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
600+ if ms.LoadMessageInfo() == nil {
601+ ms.StoreMessageInfo(mi)
602+ }
603+ return ms
604+ }
605+ return mi.MessageOf(x)
606+}
607+
608+// Deprecated: Use UpdateReleaseRequest.ProtoReflect.Descriptor instead.
609+func (*UpdateReleaseRequest) Descriptor() ([]byte, []int) {
610+ return file_ermite_release_proto_rawDescGZIP(), []int{6}
611+}
612+
613+func (x *UpdateReleaseRequest) GetRepo() string {
614+ if x != nil {
615+ return x.Repo
616+ }
617+ return ""
618+}
619+
620+func (x *UpdateReleaseRequest) GetId() int64 {
621+ if x != nil {
622+ return x.Id
623+ }
624+ return 0
625+}
626+
627+func (x *UpdateReleaseRequest) GetTag() string {
628+ if x != nil {
629+ return x.Tag
630+ }
631+ return ""
632+}
633+
634+func (x *UpdateReleaseRequest) GetTargetCommitish() string {
635+ if x != nil {
636+ return x.TargetCommitish
637+ }
638+ return ""
639+}
640+
641+func (x *UpdateReleaseRequest) GetTitle() string {
642+ if x != nil {
643+ return x.Title
644+ }
645+ return ""
646+}
647+
648+func (x *UpdateReleaseRequest) GetNotes() string {
649+ if x != nil {
650+ return x.Notes
651+ }
652+ return ""
653+}
654+
655+func (x *UpdateReleaseRequest) GetDraft() bool {
656+ if x != nil {
657+ return x.Draft
658+ }
659+ return false
660+}
661+
662+func (x *UpdateReleaseRequest) GetPrerelease() bool {
663+ if x != nil {
664+ return x.Prerelease
665+ }
666+ return false
667+}
668+
669+func (x *UpdateReleaseRequest) GetMakeLatest() bool {
670+ if x != nil {
671+ return x.MakeLatest
672+ }
673+ return false
674+}
675+
676+func (x *UpdateReleaseRequest) GetUpdateMask() *fieldmaskpb.FieldMask {
677+ if x != nil {
678+ return x.UpdateMask
679+ }
680+ return nil
681+}
682+
683+// UpdateReleaseResponse is the response of ReleaseService.UpdateRelease.
684+type UpdateReleaseResponse struct {
685+ state protoimpl.MessageState `protogen:"open.v1"`
686+ Release *Release `protobuf:"bytes,1,opt,name=release,proto3" json:"release,omitempty"`
687+ unknownFields protoimpl.UnknownFields
688+ sizeCache protoimpl.SizeCache
689+}
690+
691+func (x *UpdateReleaseResponse) Reset() {
692+ *x = UpdateReleaseResponse{}
693+ mi := &file_ermite_release_proto_msgTypes[7]
694+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
695+ ms.StoreMessageInfo(mi)
696+}
697+
698+func (x *UpdateReleaseResponse) String() string {
699+ return protoimpl.X.MessageStringOf(x)
700+}
701+
702+func (*UpdateReleaseResponse) ProtoMessage() {}
703+
704+func (x *UpdateReleaseResponse) ProtoReflect() protoreflect.Message {
705+ mi := &file_ermite_release_proto_msgTypes[7]
706+ if x != nil {
707+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
708+ if ms.LoadMessageInfo() == nil {
709+ ms.StoreMessageInfo(mi)
710+ }
711+ return ms
712+ }
713+ return mi.MessageOf(x)
714+}
715+
716+// Deprecated: Use UpdateReleaseResponse.ProtoReflect.Descriptor instead.
717+func (*UpdateReleaseResponse) Descriptor() ([]byte, []int) {
718+ return file_ermite_release_proto_rawDescGZIP(), []int{7}
719+}
720+
721+func (x *UpdateReleaseResponse) GetRelease() *Release {
722+ if x != nil {
723+ return x.Release
724+ }
725+ return nil
726+}
727+
728+// DeleteReleaseRequest is the request of ReleaseService.DeleteRelease.
729+type DeleteReleaseRequest struct {
730+ state protoimpl.MessageState `protogen:"open.v1"`
731+ Repo string `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"`
732+ Id int64 `protobuf:"varint,2,opt,name=id,proto3" json:"id,omitempty"`
733+ unknownFields protoimpl.UnknownFields
734+ sizeCache protoimpl.SizeCache
735+}
736+
737+func (x *DeleteReleaseRequest) Reset() {
738+ *x = DeleteReleaseRequest{}
739+ mi := &file_ermite_release_proto_msgTypes[8]
740+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
741+ ms.StoreMessageInfo(mi)
742+}
743+
744+func (x *DeleteReleaseRequest) String() string {
745+ return protoimpl.X.MessageStringOf(x)
746+}
747+
748+func (*DeleteReleaseRequest) ProtoMessage() {}
749+
750+func (x *DeleteReleaseRequest) ProtoReflect() protoreflect.Message {
751+ mi := &file_ermite_release_proto_msgTypes[8]
752+ if x != nil {
753+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
754+ if ms.LoadMessageInfo() == nil {
755+ ms.StoreMessageInfo(mi)
756+ }
757+ return ms
758+ }
759+ return mi.MessageOf(x)
760+}
761+
762+// Deprecated: Use DeleteReleaseRequest.ProtoReflect.Descriptor instead.
763+func (*DeleteReleaseRequest) Descriptor() ([]byte, []int) {
764+ return file_ermite_release_proto_rawDescGZIP(), []int{8}
765+}
766+
767+func (x *DeleteReleaseRequest) GetRepo() string {
768+ if x != nil {
769+ return x.Repo
770+ }
771+ return ""
772+}
773+
774+func (x *DeleteReleaseRequest) GetId() int64 {
775+ if x != nil {
776+ return x.Id
777+ }
778+ return 0
779+}
780+
781+// DeleteReleaseResponse is the response of ReleaseService.DeleteRelease.
782+type DeleteReleaseResponse struct {
783+ state protoimpl.MessageState `protogen:"open.v1"`
784+ unknownFields protoimpl.UnknownFields
785+ sizeCache protoimpl.SizeCache
786+}
787+
788+func (x *DeleteReleaseResponse) Reset() {
789+ *x = DeleteReleaseResponse{}
790+ mi := &file_ermite_release_proto_msgTypes[9]
791+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
792+ ms.StoreMessageInfo(mi)
793+}
794+
795+func (x *DeleteReleaseResponse) String() string {
796+ return protoimpl.X.MessageStringOf(x)
797+}
798+
799+func (*DeleteReleaseResponse) ProtoMessage() {}
800+
801+func (x *DeleteReleaseResponse) ProtoReflect() protoreflect.Message {
802+ mi := &file_ermite_release_proto_msgTypes[9]
803+ if x != nil {
804+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
805+ if ms.LoadMessageInfo() == nil {
806+ ms.StoreMessageInfo(mi)
807+ }
808+ return ms
809+ }
810+ return mi.MessageOf(x)
811+}
812+
813+// Deprecated: Use DeleteReleaseResponse.ProtoReflect.Descriptor instead.
814+func (*DeleteReleaseResponse) Descriptor() ([]byte, []int) {
815+ return file_ermite_release_proto_rawDescGZIP(), []int{9}
816+}
817+
818+// UploadReleaseAssetRequest is the request of ReleaseService.UploadReleaseAsset.
819+type UploadReleaseAssetRequest struct {
820+ state protoimpl.MessageState `protogen:"open.v1"`
821+ Repo string `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"`
822+ ReleaseId int64 `protobuf:"varint,2,opt,name=release_id,json=releaseId,proto3" json:"release_id,omitempty"`
823+ Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
824+ Label string `protobuf:"bytes,4,opt,name=label,proto3" json:"label,omitempty"`
825+ ContentType string `protobuf:"bytes,5,opt,name=content_type,json=contentType,proto3" json:"content_type,omitempty"`
826+ Size int64 `protobuf:"varint,6,opt,name=size,proto3" json:"size,omitempty"`
827+ Replace bool `protobuf:"varint,7,opt,name=replace,proto3" json:"replace,omitempty"`
828+ Data []byte `protobuf:"bytes,8,opt,name=data,proto3" json:"data,omitempty"`
829+ unknownFields protoimpl.UnknownFields
830+ sizeCache protoimpl.SizeCache
831+}
832+
833+func (x *UploadReleaseAssetRequest) Reset() {
834+ *x = UploadReleaseAssetRequest{}
835+ mi := &file_ermite_release_proto_msgTypes[10]
836+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
837+ ms.StoreMessageInfo(mi)
838+}
839+
840+func (x *UploadReleaseAssetRequest) String() string {
841+ return protoimpl.X.MessageStringOf(x)
842+}
843+
844+func (*UploadReleaseAssetRequest) ProtoMessage() {}
845+
846+func (x *UploadReleaseAssetRequest) ProtoReflect() protoreflect.Message {
847+ mi := &file_ermite_release_proto_msgTypes[10]
848+ if x != nil {
849+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
850+ if ms.LoadMessageInfo() == nil {
851+ ms.StoreMessageInfo(mi)
852+ }
853+ return ms
854+ }
855+ return mi.MessageOf(x)
856+}
857+
858+// Deprecated: Use UploadReleaseAssetRequest.ProtoReflect.Descriptor instead.
859+func (*UploadReleaseAssetRequest) Descriptor() ([]byte, []int) {
860+ return file_ermite_release_proto_rawDescGZIP(), []int{10}
861+}
862+
863+func (x *UploadReleaseAssetRequest) GetRepo() string {
864+ if x != nil {
865+ return x.Repo
866+ }
867+ return ""
868+}
869+
870+func (x *UploadReleaseAssetRequest) GetReleaseId() int64 {
871+ if x != nil {
872+ return x.ReleaseId
873+ }
874+ return 0
875+}
876+
877+func (x *UploadReleaseAssetRequest) GetName() string {
878+ if x != nil {
879+ return x.Name
880+ }
881+ return ""
882+}
883+
884+func (x *UploadReleaseAssetRequest) GetLabel() string {
885+ if x != nil {
886+ return x.Label
887+ }
888+ return ""
889+}
890+
891+func (x *UploadReleaseAssetRequest) GetContentType() string {
892+ if x != nil {
893+ return x.ContentType
894+ }
895+ return ""
896+}
897+
898+func (x *UploadReleaseAssetRequest) GetSize() int64 {
899+ if x != nil {
900+ return x.Size
901+ }
902+ return 0
903+}
904+
905+func (x *UploadReleaseAssetRequest) GetReplace() bool {
906+ if x != nil {
907+ return x.Replace
908+ }
909+ return false
910+}
911+
912+func (x *UploadReleaseAssetRequest) GetData() []byte {
913+ if x != nil {
914+ return x.Data
915+ }
916+ return nil
917+}
918+
919+// UploadReleaseAssetResponse is the response of ReleaseService.UploadReleaseAsset.
920+type UploadReleaseAssetResponse struct {
921+ state protoimpl.MessageState `protogen:"open.v1"`
922+ Asset *ReleaseAsset `protobuf:"bytes,1,opt,name=asset,proto3" json:"asset,omitempty"`
923+ unknownFields protoimpl.UnknownFields
924+ sizeCache protoimpl.SizeCache
925+}
926+
927+func (x *UploadReleaseAssetResponse) Reset() {
928+ *x = UploadReleaseAssetResponse{}
929+ mi := &file_ermite_release_proto_msgTypes[11]
930+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
931+ ms.StoreMessageInfo(mi)
932+}
933+
934+func (x *UploadReleaseAssetResponse) String() string {
935+ return protoimpl.X.MessageStringOf(x)
936+}
937+
938+func (*UploadReleaseAssetResponse) ProtoMessage() {}
939+
940+func (x *UploadReleaseAssetResponse) ProtoReflect() protoreflect.Message {
941+ mi := &file_ermite_release_proto_msgTypes[11]
942+ if x != nil {
943+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
944+ if ms.LoadMessageInfo() == nil {
945+ ms.StoreMessageInfo(mi)
946+ }
947+ return ms
948+ }
949+ return mi.MessageOf(x)
950+}
951+
952+// Deprecated: Use UploadReleaseAssetResponse.ProtoReflect.Descriptor instead.
953+func (*UploadReleaseAssetResponse) Descriptor() ([]byte, []int) {
954+ return file_ermite_release_proto_rawDescGZIP(), []int{11}
955+}
956+
957+func (x *UploadReleaseAssetResponse) GetAsset() *ReleaseAsset {
958+ if x != nil {
959+ return x.Asset
960+ }
961+ return nil
962+}
963+
964+// UpdateReleaseAssetRequest is the request of ReleaseService.UpdateReleaseAsset.
965+type UpdateReleaseAssetRequest struct {
966+ state protoimpl.MessageState `protogen:"open.v1"`
967+ Repo string `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"`
968+ AssetId int64 `protobuf:"varint,2,opt,name=asset_id,json=assetId,proto3" json:"asset_id,omitempty"`
969+ Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
970+ Label string `protobuf:"bytes,4,opt,name=label,proto3" json:"label,omitempty"`
971+ // UpdateMask names the fields to change; unknown paths are invalid_argument.
972+ UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,5,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
973+ unknownFields protoimpl.UnknownFields
974+ sizeCache protoimpl.SizeCache
975+}
976+
977+func (x *UpdateReleaseAssetRequest) Reset() {
978+ *x = UpdateReleaseAssetRequest{}
979+ mi := &file_ermite_release_proto_msgTypes[12]
980+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
981+ ms.StoreMessageInfo(mi)
982+}
983+
984+func (x *UpdateReleaseAssetRequest) String() string {
985+ return protoimpl.X.MessageStringOf(x)
986+}
987+
988+func (*UpdateReleaseAssetRequest) ProtoMessage() {}
989+
990+func (x *UpdateReleaseAssetRequest) ProtoReflect() protoreflect.Message {
991+ mi := &file_ermite_release_proto_msgTypes[12]
992+ if x != nil {
993+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
994+ if ms.LoadMessageInfo() == nil {
995+ ms.StoreMessageInfo(mi)
996+ }
997+ return ms
998+ }
999+ return mi.MessageOf(x)
1000+}
1001+
1002+// Deprecated: Use UpdateReleaseAssetRequest.ProtoReflect.Descriptor instead.
1003+func (*UpdateReleaseAssetRequest) Descriptor() ([]byte, []int) {
1004+ return file_ermite_release_proto_rawDescGZIP(), []int{12}
1005+}
1006+
1007+func (x *UpdateReleaseAssetRequest) GetRepo() string {
1008+ if x != nil {
1009+ return x.Repo
1010+ }
1011+ return ""
1012+}
1013+
1014+func (x *UpdateReleaseAssetRequest) GetAssetId() int64 {
1015+ if x != nil {
1016+ return x.AssetId
1017+ }
1018+ return 0
1019+}
1020+
1021+func (x *UpdateReleaseAssetRequest) GetName() string {
1022+ if x != nil {
1023+ return x.Name
1024+ }
1025+ return ""
1026+}
1027+
1028+func (x *UpdateReleaseAssetRequest) GetLabel() string {
1029+ if x != nil {
1030+ return x.Label
1031+ }
1032+ return ""
1033+}
1034+
1035+func (x *UpdateReleaseAssetRequest) GetUpdateMask() *fieldmaskpb.FieldMask {
1036+ if x != nil {
1037+ return x.UpdateMask
1038+ }
1039+ return nil
1040+}
1041+
1042+// UpdateReleaseAssetResponse is the response of ReleaseService.UpdateReleaseAsset.
1043+type UpdateReleaseAssetResponse struct {
1044+ state protoimpl.MessageState `protogen:"open.v1"`
1045+ Asset *ReleaseAsset `protobuf:"bytes,1,opt,name=asset,proto3" json:"asset,omitempty"`
1046+ unknownFields protoimpl.UnknownFields
1047+ sizeCache protoimpl.SizeCache
1048+}
1049+
1050+func (x *UpdateReleaseAssetResponse) Reset() {
1051+ *x = UpdateReleaseAssetResponse{}
1052+ mi := &file_ermite_release_proto_msgTypes[13]
1053+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1054+ ms.StoreMessageInfo(mi)
1055+}
1056+
1057+func (x *UpdateReleaseAssetResponse) String() string {
1058+ return protoimpl.X.MessageStringOf(x)
1059+}
1060+
1061+func (*UpdateReleaseAssetResponse) ProtoMessage() {}
1062+
1063+func (x *UpdateReleaseAssetResponse) ProtoReflect() protoreflect.Message {
1064+ mi := &file_ermite_release_proto_msgTypes[13]
1065+ if x != nil {
1066+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1067+ if ms.LoadMessageInfo() == nil {
1068+ ms.StoreMessageInfo(mi)
1069+ }
1070+ return ms
1071+ }
1072+ return mi.MessageOf(x)
1073+}
1074+
1075+// Deprecated: Use UpdateReleaseAssetResponse.ProtoReflect.Descriptor instead.
1076+func (*UpdateReleaseAssetResponse) Descriptor() ([]byte, []int) {
1077+ return file_ermite_release_proto_rawDescGZIP(), []int{13}
1078+}
1079+
1080+func (x *UpdateReleaseAssetResponse) GetAsset() *ReleaseAsset {
1081+ if x != nil {
1082+ return x.Asset
1083+ }
1084+ return nil
1085+}
1086+
1087+// DeleteReleaseAssetRequest is the request of ReleaseService.DeleteReleaseAsset.
1088+type DeleteReleaseAssetRequest struct {
1089+ state protoimpl.MessageState `protogen:"open.v1"`
1090+ Repo string `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"`
1091+ AssetId int64 `protobuf:"varint,2,opt,name=asset_id,json=assetId,proto3" json:"asset_id,omitempty"`
1092+ unknownFields protoimpl.UnknownFields
1093+ sizeCache protoimpl.SizeCache
1094+}
1095+
1096+func (x *DeleteReleaseAssetRequest) Reset() {
1097+ *x = DeleteReleaseAssetRequest{}
1098+ mi := &file_ermite_release_proto_msgTypes[14]
1099+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1100+ ms.StoreMessageInfo(mi)
1101+}
1102+
1103+func (x *DeleteReleaseAssetRequest) String() string {
1104+ return protoimpl.X.MessageStringOf(x)
1105+}
1106+
1107+func (*DeleteReleaseAssetRequest) ProtoMessage() {}
1108+
1109+func (x *DeleteReleaseAssetRequest) ProtoReflect() protoreflect.Message {
1110+ mi := &file_ermite_release_proto_msgTypes[14]
1111+ if x != nil {
1112+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1113+ if ms.LoadMessageInfo() == nil {
1114+ ms.StoreMessageInfo(mi)
1115+ }
1116+ return ms
1117+ }
1118+ return mi.MessageOf(x)
1119+}
1120+
1121+// Deprecated: Use DeleteReleaseAssetRequest.ProtoReflect.Descriptor instead.
1122+func (*DeleteReleaseAssetRequest) Descriptor() ([]byte, []int) {
1123+ return file_ermite_release_proto_rawDescGZIP(), []int{14}
1124+}
1125+
1126+func (x *DeleteReleaseAssetRequest) GetRepo() string {
1127+ if x != nil {
1128+ return x.Repo
1129+ }
1130+ return ""
1131+}
1132+
1133+func (x *DeleteReleaseAssetRequest) GetAssetId() int64 {
1134+ if x != nil {
1135+ return x.AssetId
1136+ }
1137+ return 0
1138+}
1139+
1140+// DeleteReleaseAssetResponse is the response of ReleaseService.DeleteReleaseAsset.
1141+type DeleteReleaseAssetResponse struct {
1142+ state protoimpl.MessageState `protogen:"open.v1"`
1143+ unknownFields protoimpl.UnknownFields
1144+ sizeCache protoimpl.SizeCache
1145+}
1146+
1147+func (x *DeleteReleaseAssetResponse) Reset() {
1148+ *x = DeleteReleaseAssetResponse{}
1149+ mi := &file_ermite_release_proto_msgTypes[15]
1150+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1151+ ms.StoreMessageInfo(mi)
1152+}
1153+
1154+func (x *DeleteReleaseAssetResponse) String() string {
1155+ return protoimpl.X.MessageStringOf(x)
1156+}
1157+
1158+func (*DeleteReleaseAssetResponse) ProtoMessage() {}
1159+
1160+func (x *DeleteReleaseAssetResponse) ProtoReflect() protoreflect.Message {
1161+ mi := &file_ermite_release_proto_msgTypes[15]
1162+ if x != nil {
1163+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1164+ if ms.LoadMessageInfo() == nil {
1165+ ms.StoreMessageInfo(mi)
1166+ }
1167+ return ms
1168+ }
1169+ return mi.MessageOf(x)
1170+}
1171+
1172+// Deprecated: Use DeleteReleaseAssetResponse.ProtoReflect.Descriptor instead.
1173+func (*DeleteReleaseAssetResponse) Descriptor() ([]byte, []int) {
1174+ return file_ermite_release_proto_rawDescGZIP(), []int{15}
1175+}
1176+
1177+// DownloadReleaseAssetResponse is the response of ReleaseService.DownloadReleaseAsset.
1178+type DownloadReleaseAssetResponse struct {
1179+ state protoimpl.MessageState `protogen:"open.v1"`
1180+ Asset *ReleaseAsset `protobuf:"bytes,1,opt,name=asset,proto3" json:"asset,omitempty"`
1181+ Chunk []byte `protobuf:"bytes,2,opt,name=chunk,proto3" json:"chunk,omitempty"`
1182+ unknownFields protoimpl.UnknownFields
1183+ sizeCache protoimpl.SizeCache
1184+}
1185+
1186+func (x *DownloadReleaseAssetResponse) Reset() {
1187+ *x = DownloadReleaseAssetResponse{}
1188+ mi := &file_ermite_release_proto_msgTypes[16]
1189+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1190+ ms.StoreMessageInfo(mi)
1191+}
1192+
1193+func (x *DownloadReleaseAssetResponse) String() string {
1194+ return protoimpl.X.MessageStringOf(x)
1195+}
1196+
1197+func (*DownloadReleaseAssetResponse) ProtoMessage() {}
1198+
1199+func (x *DownloadReleaseAssetResponse) ProtoReflect() protoreflect.Message {
1200+ mi := &file_ermite_release_proto_msgTypes[16]
1201+ if x != nil {
1202+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1203+ if ms.LoadMessageInfo() == nil {
1204+ ms.StoreMessageInfo(mi)
1205+ }
1206+ return ms
1207+ }
1208+ return mi.MessageOf(x)
1209+}
1210+
1211+// Deprecated: Use DownloadReleaseAssetResponse.ProtoReflect.Descriptor instead.
1212+func (*DownloadReleaseAssetResponse) Descriptor() ([]byte, []int) {
1213+ return file_ermite_release_proto_rawDescGZIP(), []int{16}
1214+}
1215+
1216+func (x *DownloadReleaseAssetResponse) GetAsset() *ReleaseAsset {
1217+ if x != nil {
1218+ return x.Asset
1219+ }
1220+ return nil
1221+}
1222+
1223+func (x *DownloadReleaseAssetResponse) GetChunk() []byte {
1224+ if x != nil {
1225+ return x.Chunk
1226+ }
1227+ return nil
1228+}
1229+
1230+// ListReleaseAssetsRequest is the request of ReleaseService.ListReleaseAssets.
1231+type ListReleaseAssetsRequest struct {
1232+ state protoimpl.MessageState `protogen:"open.v1"`
1233+ Repo string `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"`
1234+ ReleaseId int64 `protobuf:"varint,2,opt,name=release_id,json=releaseId,proto3" json:"release_id,omitempty"`
1235+ unknownFields protoimpl.UnknownFields
1236+ sizeCache protoimpl.SizeCache
1237+}
1238+
1239+func (x *ListReleaseAssetsRequest) Reset() {
1240+ *x = ListReleaseAssetsRequest{}
1241+ mi := &file_ermite_release_proto_msgTypes[17]
1242+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1243+ ms.StoreMessageInfo(mi)
1244+}
1245+
1246+func (x *ListReleaseAssetsRequest) String() string {
1247+ return protoimpl.X.MessageStringOf(x)
1248+}
1249+
1250+func (*ListReleaseAssetsRequest) ProtoMessage() {}
1251+
1252+func (x *ListReleaseAssetsRequest) ProtoReflect() protoreflect.Message {
1253+ mi := &file_ermite_release_proto_msgTypes[17]
1254+ if x != nil {
1255+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1256+ if ms.LoadMessageInfo() == nil {
1257+ ms.StoreMessageInfo(mi)
1258+ }
1259+ return ms
1260+ }
1261+ return mi.MessageOf(x)
1262+}
1263+
1264+// Deprecated: Use ListReleaseAssetsRequest.ProtoReflect.Descriptor instead.
1265+func (*ListReleaseAssetsRequest) Descriptor() ([]byte, []int) {
1266+ return file_ermite_release_proto_rawDescGZIP(), []int{17}
1267+}
1268+
1269+func (x *ListReleaseAssetsRequest) GetRepo() string {
1270+ if x != nil {
1271+ return x.Repo
1272+ }
1273+ return ""
1274+}
1275+
1276+func (x *ListReleaseAssetsRequest) GetReleaseId() int64 {
1277+ if x != nil {
1278+ return x.ReleaseId
1279+ }
1280+ return 0
1281+}
1282+
1283+// ListReleaseAssetsResponse is the response of ReleaseService.ListReleaseAssets.
1284+type ListReleaseAssetsResponse struct {
1285+ state protoimpl.MessageState `protogen:"open.v1"`
1286+ Assets []*ReleaseAsset `protobuf:"bytes,1,rep,name=assets,proto3" json:"assets,omitempty"`
1287+ unknownFields protoimpl.UnknownFields
1288+ sizeCache protoimpl.SizeCache
1289+}
1290+
1291+func (x *ListReleaseAssetsResponse) Reset() {
1292+ *x = ListReleaseAssetsResponse{}
1293+ mi := &file_ermite_release_proto_msgTypes[18]
1294+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1295+ ms.StoreMessageInfo(mi)
1296+}
1297+
1298+func (x *ListReleaseAssetsResponse) String() string {
1299+ return protoimpl.X.MessageStringOf(x)
1300+}
1301+
1302+func (*ListReleaseAssetsResponse) ProtoMessage() {}
1303+
1304+func (x *ListReleaseAssetsResponse) ProtoReflect() protoreflect.Message {
1305+ mi := &file_ermite_release_proto_msgTypes[18]
1306+ if x != nil {
1307+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1308+ if ms.LoadMessageInfo() == nil {
1309+ ms.StoreMessageInfo(mi)
1310+ }
1311+ return ms
1312+ }
1313+ return mi.MessageOf(x)
1314+}
1315+
1316+// Deprecated: Use ListReleaseAssetsResponse.ProtoReflect.Descriptor instead.
1317+func (*ListReleaseAssetsResponse) Descriptor() ([]byte, []int) {
1318+ return file_ermite_release_proto_rawDescGZIP(), []int{18}
1319+}
1320+
1321+func (x *ListReleaseAssetsResponse) GetAssets() []*ReleaseAsset {
1322+ if x != nil {
1323+ return x.Assets
1324+ }
1325+ return nil
1326+}
1327+
1328+// GetReleaseUsageRequest is the request of ReleaseService.GetReleaseUsage.
1329+type GetReleaseUsageRequest struct {
1330+ state protoimpl.MessageState `protogen:"open.v1"`
1331+ Repo string `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"`
1332+ unknownFields protoimpl.UnknownFields
1333+ sizeCache protoimpl.SizeCache
1334+}
1335+
1336+func (x *GetReleaseUsageRequest) Reset() {
1337+ *x = GetReleaseUsageRequest{}
1338+ mi := &file_ermite_release_proto_msgTypes[19]
1339+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1340+ ms.StoreMessageInfo(mi)
1341+}
1342+
1343+func (x *GetReleaseUsageRequest) String() string {
1344+ return protoimpl.X.MessageStringOf(x)
1345+}
1346+
1347+func (*GetReleaseUsageRequest) ProtoMessage() {}
1348+
1349+func (x *GetReleaseUsageRequest) ProtoReflect() protoreflect.Message {
1350+ mi := &file_ermite_release_proto_msgTypes[19]
1351+ if x != nil {
1352+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1353+ if ms.LoadMessageInfo() == nil {
1354+ ms.StoreMessageInfo(mi)
1355+ }
1356+ return ms
1357+ }
1358+ return mi.MessageOf(x)
1359+}
1360+
1361+// Deprecated: Use GetReleaseUsageRequest.ProtoReflect.Descriptor instead.
1362+func (*GetReleaseUsageRequest) Descriptor() ([]byte, []int) {
1363+ return file_ermite_release_proto_rawDescGZIP(), []int{19}
1364+}
1365+
1366+func (x *GetReleaseUsageRequest) GetRepo() string {
1367+ if x != nil {
1368+ return x.Repo
1369+ }
1370+ return ""
1371+}
1372+
1373+// GetReleaseUsageResponse is the response of ReleaseService.GetReleaseUsage.
1374+type GetReleaseUsageResponse struct {
1375+ state protoimpl.MessageState `protogen:"open.v1"`
1376+ UsedBytes int64 `protobuf:"varint,1,opt,name=used_bytes,json=usedBytes,proto3" json:"used_bytes,omitempty"`
1377+ QuotaBytes int64 `protobuf:"varint,2,opt,name=quota_bytes,json=quotaBytes,proto3" json:"quota_bytes,omitempty"`
1378+ AssetMaxBytes int64 `protobuf:"varint,3,opt,name=asset_max_bytes,json=assetMaxBytes,proto3" json:"asset_max_bytes,omitempty"`
1379+ AssetsMax int32 `protobuf:"varint,4,opt,name=assets_max,json=assetsMax,proto3" json:"assets_max,omitempty"`
1380+ unknownFields protoimpl.UnknownFields
1381+ sizeCache protoimpl.SizeCache
1382+}
1383+
1384+func (x *GetReleaseUsageResponse) Reset() {
1385+ *x = GetReleaseUsageResponse{}
1386+ mi := &file_ermite_release_proto_msgTypes[20]
1387+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1388+ ms.StoreMessageInfo(mi)
1389+}
1390+
1391+func (x *GetReleaseUsageResponse) String() string {
1392+ return protoimpl.X.MessageStringOf(x)
1393+}
1394+
1395+func (*GetReleaseUsageResponse) ProtoMessage() {}
1396+
1397+func (x *GetReleaseUsageResponse) ProtoReflect() protoreflect.Message {
1398+ mi := &file_ermite_release_proto_msgTypes[20]
1399+ if x != nil {
1400+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1401+ if ms.LoadMessageInfo() == nil {
1402+ ms.StoreMessageInfo(mi)
1403+ }
1404+ return ms
1405+ }
1406+ return mi.MessageOf(x)
1407+}
1408+
1409+// Deprecated: Use GetReleaseUsageResponse.ProtoReflect.Descriptor instead.
1410+func (*GetReleaseUsageResponse) Descriptor() ([]byte, []int) {
1411+ return file_ermite_release_proto_rawDescGZIP(), []int{20}
1412+}
1413+
1414+func (x *GetReleaseUsageResponse) GetUsedBytes() int64 {
1415+ if x != nil {
1416+ return x.UsedBytes
1417+ }
1418+ return 0
1419+}
1420+
1421+func (x *GetReleaseUsageResponse) GetQuotaBytes() int64 {
1422+ if x != nil {
1423+ return x.QuotaBytes
1424+ }
1425+ return 0
1426+}
1427+
1428+func (x *GetReleaseUsageResponse) GetAssetMaxBytes() int64 {
1429+ if x != nil {
1430+ return x.AssetMaxBytes
1431+ }
1432+ return 0
1433+}
1434+
1435+func (x *GetReleaseUsageResponse) GetAssetsMax() int32 {
1436+ if x != nil {
1437+ return x.AssetsMax
1438+ }
1439+ return 0
1440+}
1441+
1442+// GetReleaseRequest selects exactly one release.
1443+type GetReleaseRequest struct {
1444+ state protoimpl.MessageState `protogen:"open.v1"`
1445+ Repo string `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"`
1446+ // Types that are valid to be assigned to Selector:
1447+ //
1448+ // *GetReleaseRequest_Id
1449+ // *GetReleaseRequest_Tag
1450+ // *GetReleaseRequest_Latest
1451+ Selector isGetReleaseRequest_Selector `protobuf_oneof:"selector"`
1452+ unknownFields protoimpl.UnknownFields
1453+ sizeCache protoimpl.SizeCache
1454+}
1455+
1456+func (x *GetReleaseRequest) Reset() {
1457+ *x = GetReleaseRequest{}
1458+ mi := &file_ermite_release_proto_msgTypes[21]
1459+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1460+ ms.StoreMessageInfo(mi)
1461+}
1462+
1463+func (x *GetReleaseRequest) String() string {
1464+ return protoimpl.X.MessageStringOf(x)
1465+}
1466+
1467+func (*GetReleaseRequest) ProtoMessage() {}
1468+
1469+func (x *GetReleaseRequest) ProtoReflect() protoreflect.Message {
1470+ mi := &file_ermite_release_proto_msgTypes[21]
1471+ if x != nil {
1472+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1473+ if ms.LoadMessageInfo() == nil {
1474+ ms.StoreMessageInfo(mi)
1475+ }
1476+ return ms
1477+ }
1478+ return mi.MessageOf(x)
1479+}
1480+
1481+// Deprecated: Use GetReleaseRequest.ProtoReflect.Descriptor instead.
1482+func (*GetReleaseRequest) Descriptor() ([]byte, []int) {
1483+ return file_ermite_release_proto_rawDescGZIP(), []int{21}
1484+}
1485+
1486+func (x *GetReleaseRequest) GetRepo() string {
1487+ if x != nil {
1488+ return x.Repo
1489+ }
1490+ return ""
1491+}
1492+
1493+func (x *GetReleaseRequest) GetSelector() isGetReleaseRequest_Selector {
1494+ if x != nil {
1495+ return x.Selector
1496+ }
1497+ return nil
1498+}
1499+
1500+func (x *GetReleaseRequest) GetId() int64 {
1501+ if x != nil {
1502+ if x, ok := x.Selector.(*GetReleaseRequest_Id); ok {
1503+ return x.Id
1504+ }
1505+ }
1506+ return 0
1507+}
1508+
1509+func (x *GetReleaseRequest) GetTag() string {
1510+ if x != nil {
1511+ if x, ok := x.Selector.(*GetReleaseRequest_Tag); ok {
1512+ return x.Tag
1513+ }
1514+ }
1515+ return ""
1516+}
1517+
1518+func (x *GetReleaseRequest) GetLatest() bool {
1519+ if x != nil {
1520+ if x, ok := x.Selector.(*GetReleaseRequest_Latest); ok {
1521+ return x.Latest
1522+ }
1523+ }
1524+ return false
1525+}
1526+
1527+type isGetReleaseRequest_Selector interface {
1528+ isGetReleaseRequest_Selector()
1529+}
1530+
1531+type GetReleaseRequest_Id struct {
1532+ Id int64 `protobuf:"varint,2,opt,name=id,proto3,oneof"`
1533+}
1534+
1535+type GetReleaseRequest_Tag struct {
1536+ Tag string `protobuf:"bytes,3,opt,name=tag,proto3,oneof"`
1537+}
1538+
1539+type GetReleaseRequest_Latest struct {
1540+ Latest bool `protobuf:"varint,4,opt,name=latest,proto3,oneof"`
1541+}
1542+
1543+func (*GetReleaseRequest_Id) isGetReleaseRequest_Selector() {}
1544+
1545+func (*GetReleaseRequest_Tag) isGetReleaseRequest_Selector() {}
1546+
1547+func (*GetReleaseRequest_Latest) isGetReleaseRequest_Selector() {}
1548+
1549+// ReleaseAssetTag selects a named asset of a tag.
1550+type ReleaseAssetTag struct {
1551+ state protoimpl.MessageState `protogen:"open.v1"`
1552+ Tag string `protobuf:"bytes,1,opt,name=tag,proto3" json:"tag,omitempty"`
1553+ Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
1554+ unknownFields protoimpl.UnknownFields
1555+ sizeCache protoimpl.SizeCache
1556+}
1557+
1558+func (x *ReleaseAssetTag) Reset() {
1559+ *x = ReleaseAssetTag{}
1560+ mi := &file_ermite_release_proto_msgTypes[22]
1561+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1562+ ms.StoreMessageInfo(mi)
1563+}
1564+
1565+func (x *ReleaseAssetTag) String() string {
1566+ return protoimpl.X.MessageStringOf(x)
1567+}
1568+
1569+func (*ReleaseAssetTag) ProtoMessage() {}
1570+
1571+func (x *ReleaseAssetTag) ProtoReflect() protoreflect.Message {
1572+ mi := &file_ermite_release_proto_msgTypes[22]
1573+ if x != nil {
1574+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1575+ if ms.LoadMessageInfo() == nil {
1576+ ms.StoreMessageInfo(mi)
1577+ }
1578+ return ms
1579+ }
1580+ return mi.MessageOf(x)
1581+}
1582+
1583+// Deprecated: Use ReleaseAssetTag.ProtoReflect.Descriptor instead.
1584+func (*ReleaseAssetTag) Descriptor() ([]byte, []int) {
1585+ return file_ermite_release_proto_rawDescGZIP(), []int{22}
1586+}
1587+
1588+func (x *ReleaseAssetTag) GetTag() string {
1589+ if x != nil {
1590+ return x.Tag
1591+ }
1592+ return ""
1593+}
1594+
1595+func (x *ReleaseAssetTag) GetName() string {
1596+ if x != nil {
1597+ return x.Name
1598+ }
1599+ return ""
1600+}
1601+
1602+// ReleaseAssetLatest selects a named asset of the latest release.
1603+type ReleaseAssetLatest struct {
1604+ state protoimpl.MessageState `protogen:"open.v1"`
1605+ // Latest must be true.
1606+ Latest bool `protobuf:"varint,1,opt,name=latest,proto3" json:"latest,omitempty"`
1607+ Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
1608+ unknownFields protoimpl.UnknownFields
1609+ sizeCache protoimpl.SizeCache
1610+}
1611+
1612+func (x *ReleaseAssetLatest) Reset() {
1613+ *x = ReleaseAssetLatest{}
1614+ mi := &file_ermite_release_proto_msgTypes[23]
1615+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1616+ ms.StoreMessageInfo(mi)
1617+}
1618+
1619+func (x *ReleaseAssetLatest) String() string {
1620+ return protoimpl.X.MessageStringOf(x)
1621+}
1622+
1623+func (*ReleaseAssetLatest) ProtoMessage() {}
1624+
1625+func (x *ReleaseAssetLatest) ProtoReflect() protoreflect.Message {
1626+ mi := &file_ermite_release_proto_msgTypes[23]
1627+ if x != nil {
1628+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1629+ if ms.LoadMessageInfo() == nil {
1630+ ms.StoreMessageInfo(mi)
1631+ }
1632+ return ms
1633+ }
1634+ return mi.MessageOf(x)
1635+}
1636+
1637+// Deprecated: Use ReleaseAssetLatest.ProtoReflect.Descriptor instead.
1638+func (*ReleaseAssetLatest) Descriptor() ([]byte, []int) {
1639+ return file_ermite_release_proto_rawDescGZIP(), []int{23}
1640+}
1641+
1642+func (x *ReleaseAssetLatest) GetLatest() bool {
1643+ if x != nil {
1644+ return x.Latest
1645+ }
1646+ return false
1647+}
1648+
1649+func (x *ReleaseAssetLatest) GetName() string {
1650+ if x != nil {
1651+ return x.Name
1652+ }
1653+ return ""
1654+}
1655+
1656+// DownloadReleaseAssetRequest selects an asset and a resume offset.
1657+type DownloadReleaseAssetRequest struct {
1658+ state protoimpl.MessageState `protogen:"open.v1"`
1659+ Repo string `protobuf:"bytes,1,opt,name=repo,proto3" json:"repo,omitempty"`
1660+ // Types that are valid to be assigned to Selector:
1661+ //
1662+ // *DownloadReleaseAssetRequest_AssetId
1663+ // *DownloadReleaseAssetRequest_Tag
1664+ // *DownloadReleaseAssetRequest_Latest
1665+ Selector isDownloadReleaseAssetRequest_Selector `protobuf_oneof:"selector"`
1666+ Offset int64 `protobuf:"varint,5,opt,name=offset,proto3" json:"offset,omitempty"`
1667+ unknownFields protoimpl.UnknownFields
1668+ sizeCache protoimpl.SizeCache
1669+}
1670+
1671+func (x *DownloadReleaseAssetRequest) Reset() {
1672+ *x = DownloadReleaseAssetRequest{}
1673+ mi := &file_ermite_release_proto_msgTypes[24]
1674+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1675+ ms.StoreMessageInfo(mi)
1676+}
1677+
1678+func (x *DownloadReleaseAssetRequest) String() string {
1679+ return protoimpl.X.MessageStringOf(x)
1680+}
1681+
1682+func (*DownloadReleaseAssetRequest) ProtoMessage() {}
1683+
1684+func (x *DownloadReleaseAssetRequest) ProtoReflect() protoreflect.Message {
1685+ mi := &file_ermite_release_proto_msgTypes[24]
1686+ if x != nil {
1687+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1688+ if ms.LoadMessageInfo() == nil {
1689+ ms.StoreMessageInfo(mi)
1690+ }
1691+ return ms
1692+ }
1693+ return mi.MessageOf(x)
1694+}
1695+
1696+// Deprecated: Use DownloadReleaseAssetRequest.ProtoReflect.Descriptor instead.
1697+func (*DownloadReleaseAssetRequest) Descriptor() ([]byte, []int) {
1698+ return file_ermite_release_proto_rawDescGZIP(), []int{24}
1699+}
1700+
1701+func (x *DownloadReleaseAssetRequest) GetRepo() string {
1702+ if x != nil {
1703+ return x.Repo
1704+ }
1705+ return ""
1706+}
1707+
1708+func (x *DownloadReleaseAssetRequest) GetSelector() isDownloadReleaseAssetRequest_Selector {
1709+ if x != nil {
1710+ return x.Selector
1711+ }
1712+ return nil
1713+}
1714+
1715+func (x *DownloadReleaseAssetRequest) GetAssetId() int64 {
1716+ if x != nil {
1717+ if x, ok := x.Selector.(*DownloadReleaseAssetRequest_AssetId); ok {
1718+ return x.AssetId
1719+ }
1720+ }
1721+ return 0
1722+}
1723+
1724+func (x *DownloadReleaseAssetRequest) GetTag() *ReleaseAssetTag {
1725+ if x != nil {
1726+ if x, ok := x.Selector.(*DownloadReleaseAssetRequest_Tag); ok {
1727+ return x.Tag
1728+ }
1729+ }
1730+ return nil
1731+}
1732+
1733+func (x *DownloadReleaseAssetRequest) GetLatest() *ReleaseAssetLatest {
1734+ if x != nil {
1735+ if x, ok := x.Selector.(*DownloadReleaseAssetRequest_Latest); ok {
1736+ return x.Latest
1737+ }
1738+ }
1739+ return nil
1740+}
1741+
1742+func (x *DownloadReleaseAssetRequest) GetOffset() int64 {
1743+ if x != nil {
1744+ return x.Offset
1745+ }
1746+ return 0
1747+}
1748+
1749+type isDownloadReleaseAssetRequest_Selector interface {
1750+ isDownloadReleaseAssetRequest_Selector()
1751+}
1752+
1753+type DownloadReleaseAssetRequest_AssetId struct {
1754+ AssetId int64 `protobuf:"varint,2,opt,name=asset_id,json=assetId,proto3,oneof"`
1755+}
1756+
1757+type DownloadReleaseAssetRequest_Tag struct {
1758+ Tag *ReleaseAssetTag `protobuf:"bytes,3,opt,name=tag,proto3,oneof"`
1759+}
1760+
1761+type DownloadReleaseAssetRequest_Latest struct {
1762+ Latest *ReleaseAssetLatest `protobuf:"bytes,4,opt,name=latest,proto3,oneof"`
1763+}
1764+
1765+func (*DownloadReleaseAssetRequest_AssetId) isDownloadReleaseAssetRequest_Selector() {}
1766+
1767+func (*DownloadReleaseAssetRequest_Tag) isDownloadReleaseAssetRequest_Selector() {}
1768+
1769+func (*DownloadReleaseAssetRequest_Latest) isDownloadReleaseAssetRequest_Selector() {}
1770+
1771+// GetReleaseResponse contains the selected release.
1772+type GetReleaseResponse struct {
1773+ state protoimpl.MessageState `protogen:"open.v1"`
1774+ Release *Release `protobuf:"bytes,1,opt,name=release,proto3" json:"release,omitempty"`
1775+ unknownFields protoimpl.UnknownFields
1776+ sizeCache protoimpl.SizeCache
1777+}
1778+
1779+func (x *GetReleaseResponse) Reset() {
1780+ *x = GetReleaseResponse{}
1781+ mi := &file_ermite_release_proto_msgTypes[25]
1782+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1783+ ms.StoreMessageInfo(mi)
1784+}
1785+
1786+func (x *GetReleaseResponse) String() string {
1787+ return protoimpl.X.MessageStringOf(x)
1788+}
1789+
1790+func (*GetReleaseResponse) ProtoMessage() {}
1791+
1792+func (x *GetReleaseResponse) ProtoReflect() protoreflect.Message {
1793+ mi := &file_ermite_release_proto_msgTypes[25]
1794+ if x != nil {
1795+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1796+ if ms.LoadMessageInfo() == nil {
1797+ ms.StoreMessageInfo(mi)
1798+ }
1799+ return ms
1800+ }
1801+ return mi.MessageOf(x)
1802+}
1803+
1804+// Deprecated: Use GetReleaseResponse.ProtoReflect.Descriptor instead.
1805+func (*GetReleaseResponse) Descriptor() ([]byte, []int) {
1806+ return file_ermite_release_proto_rawDescGZIP(), []int{25}
1807+}
1808+
1809+func (x *GetReleaseResponse) GetRelease() *Release {
1810+ if x != nil {
1811+ return x.Release
1812+ }
1813+ return nil
1814+}
1815+
1816+var File_ermite_release_proto protoreflect.FileDescriptor
1817+
1818+const file_ermite_release_proto_rawDesc = "" +
1819+ "\n" +
1820+ "\x14ermite/release.proto\x12\x06ermite\x1a google/protobuf/field_mask.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xdf\x03\n" +
1821+ "\aRelease\x12\x0e\n" +
1822+ "\x02id\x18\x01 \x01(\x03R\x02id\x12\x12\n" +
1823+ "\x04repo\x18\x02 \x01(\tR\x04repo\x12\x10\n" +
1824+ "\x03tag\x18\x03 \x01(\tR\x03tag\x12\x14\n" +
1825+ "\x05title\x18\x04 \x01(\tR\x05title\x12\x14\n" +
1826+ "\x05notes\x18\x05 \x01(\tR\x05notes\x12\x14\n" +
1827+ "\x05draft\x18\x06 \x01(\bR\x05draft\x12\x1e\n" +
1828+ "\n" +
1829+ "prerelease\x18\a \x01(\bR\n" +
1830+ "prerelease\x12\x16\n" +
1831+ "\x06latest\x18\b \x01(\bR\x06latest\x12)\n" +
1832+ "\x10target_commitish\x18\t \x01(\tR\x0ftargetCommitish\x12\x16\n" +
1833+ "\x06author\x18\n" +
1834+ " \x01(\tR\x06author\x129\n" +
1835+ "\n" +
1836+ "created_at\x18\v \x01(\v2\x1a.google.protobuf.TimestampR\tcreatedAt\x12=\n" +
1837+ "\fpublished_at\x18\f \x01(\v2\x1a.google.protobuf.TimestampR\vpublishedAt\x129\n" +
1838+ "\n" +
1839+ "updated_at\x18\r \x01(\v2\x1a.google.protobuf.TimestampR\tupdatedAt\x12,\n" +
1840+ "\x06assets\x18\x0e \x03(\v2\x14.ermite.ReleaseAssetR\x06assets\"\xc8\x02\n" +
1841+ "\fReleaseAsset\x12\x0e\n" +
1842+ "\x02id\x18\x01 \x01(\x03R\x02id\x12\x1d\n" +
1843+ "\n" +
1844+ "release_id\x18\x02 \x01(\x03R\treleaseId\x12\x12\n" +
1845+ "\x04name\x18\x03 \x01(\tR\x04name\x12\x14\n" +
1846+ "\x05label\x18\x04 \x01(\tR\x05label\x12!\n" +
1847+ "\fcontent_type\x18\x05 \x01(\tR\vcontentType\x12\x12\n" +
1848+ "\x04size\x18\x06 \x01(\x03R\x04size\x12\x16\n" +
1849+ "\x06digest\x18\a \x01(\tR\x06digest\x12\x1a\n" +
1850+ "\buploader\x18\b \x01(\tR\buploader\x129\n" +
1851+ "\n" +
1852+ "created_at\x18\t \x01(\v2\x1a.google.protobuf.TimestampR\tcreatedAt\x129\n" +
1853+ "\n" +
1854+ "updated_at\x18\n" +
1855+ " \x01(\v2\x1a.google.protobuf.TimestampR\tupdatedAt\"\xea\x01\n" +
1856+ "\x14CreateReleaseRequest\x12\x12\n" +
1857+ "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x10\n" +
1858+ "\x03tag\x18\x02 \x01(\tR\x03tag\x12)\n" +
1859+ "\x10target_commitish\x18\x03 \x01(\tR\x0ftargetCommitish\x12\x14\n" +
1860+ "\x05title\x18\x04 \x01(\tR\x05title\x12\x14\n" +
1861+ "\x05notes\x18\x05 \x01(\tR\x05notes\x12\x14\n" +
1862+ "\x05draft\x18\x06 \x01(\bR\x05draft\x12\x1e\n" +
1863+ "\n" +
1864+ "prerelease\x18\a \x01(\bR\n" +
1865+ "prerelease\x12\x1f\n" +
1866+ "\vmake_latest\x18\b \x01(\bR\n" +
1867+ "makeLatest\"B\n" +
1868+ "\x15CreateReleaseResponse\x12)\n" +
1869+ "\arelease\x18\x01 \x01(\v2\x0f.ermite.ReleaseR\arelease\"e\n" +
1870+ "\x13ListReleasesRequest\x12\x12\n" +
1871+ "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x1b\n" +
1872+ "\tpage_size\x18\x02 \x01(\x05R\bpageSize\x12\x1d\n" +
1873+ "\n" +
1874+ "page_token\x18\x03 \x01(\tR\tpageToken\"k\n" +
1875+ "\x14ListReleasesResponse\x12+\n" +
1876+ "\breleases\x18\x01 \x03(\v2\x0f.ermite.ReleaseR\breleases\x12&\n" +
1877+ "\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\"\xb7\x02\n" +
1878+ "\x14UpdateReleaseRequest\x12\x12\n" +
1879+ "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x0e\n" +
1880+ "\x02id\x18\x02 \x01(\x03R\x02id\x12\x10\n" +
1881+ "\x03tag\x18\x03 \x01(\tR\x03tag\x12)\n" +
1882+ "\x10target_commitish\x18\x04 \x01(\tR\x0ftargetCommitish\x12\x14\n" +
1883+ "\x05title\x18\x05 \x01(\tR\x05title\x12\x14\n" +
1884+ "\x05notes\x18\x06 \x01(\tR\x05notes\x12\x14\n" +
1885+ "\x05draft\x18\a \x01(\bR\x05draft\x12\x1e\n" +
1886+ "\n" +
1887+ "prerelease\x18\b \x01(\bR\n" +
1888+ "prerelease\x12\x1f\n" +
1889+ "\vmake_latest\x18\t \x01(\bR\n" +
1890+ "makeLatest\x12;\n" +
1891+ "\vupdate_mask\x18\n" +
1892+ " \x01(\v2\x1a.google.protobuf.FieldMaskR\n" +
1893+ "updateMask\"B\n" +
1894+ "\x15UpdateReleaseResponse\x12)\n" +
1895+ "\arelease\x18\x01 \x01(\v2\x0f.ermite.ReleaseR\arelease\":\n" +
1896+ "\x14DeleteReleaseRequest\x12\x12\n" +
1897+ "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x0e\n" +
1898+ "\x02id\x18\x02 \x01(\x03R\x02id\"\x17\n" +
1899+ "\x15DeleteReleaseResponse\"\xdd\x01\n" +
1900+ "\x19UploadReleaseAssetRequest\x12\x12\n" +
1901+ "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x1d\n" +
1902+ "\n" +
1903+ "release_id\x18\x02 \x01(\x03R\treleaseId\x12\x12\n" +
1904+ "\x04name\x18\x03 \x01(\tR\x04name\x12\x14\n" +
1905+ "\x05label\x18\x04 \x01(\tR\x05label\x12!\n" +
1906+ "\fcontent_type\x18\x05 \x01(\tR\vcontentType\x12\x12\n" +
1907+ "\x04size\x18\x06 \x01(\x03R\x04size\x12\x18\n" +
1908+ "\areplace\x18\a \x01(\bR\areplace\x12\x12\n" +
1909+ "\x04data\x18\b \x01(\fR\x04data\"H\n" +
1910+ "\x1aUploadReleaseAssetResponse\x12*\n" +
1911+ "\x05asset\x18\x01 \x01(\v2\x14.ermite.ReleaseAssetR\x05asset\"\xb1\x01\n" +
1912+ "\x19UpdateReleaseAssetRequest\x12\x12\n" +
1913+ "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x19\n" +
1914+ "\basset_id\x18\x02 \x01(\x03R\aassetId\x12\x12\n" +
1915+ "\x04name\x18\x03 \x01(\tR\x04name\x12\x14\n" +
1916+ "\x05label\x18\x04 \x01(\tR\x05label\x12;\n" +
1917+ "\vupdate_mask\x18\x05 \x01(\v2\x1a.google.protobuf.FieldMaskR\n" +
1918+ "updateMask\"H\n" +
1919+ "\x1aUpdateReleaseAssetResponse\x12*\n" +
1920+ "\x05asset\x18\x01 \x01(\v2\x14.ermite.ReleaseAssetR\x05asset\"J\n" +
1921+ "\x19DeleteReleaseAssetRequest\x12\x12\n" +
1922+ "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x19\n" +
1923+ "\basset_id\x18\x02 \x01(\x03R\aassetId\"\x1c\n" +
1924+ "\x1aDeleteReleaseAssetResponse\"`\n" +
1925+ "\x1cDownloadReleaseAssetResponse\x12*\n" +
1926+ "\x05asset\x18\x01 \x01(\v2\x14.ermite.ReleaseAssetR\x05asset\x12\x14\n" +
1927+ "\x05chunk\x18\x02 \x01(\fR\x05chunk\"M\n" +
1928+ "\x18ListReleaseAssetsRequest\x12\x12\n" +
1929+ "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x1d\n" +
1930+ "\n" +
1931+ "release_id\x18\x02 \x01(\x03R\treleaseId\"I\n" +
1932+ "\x19ListReleaseAssetsResponse\x12,\n" +
1933+ "\x06assets\x18\x01 \x03(\v2\x14.ermite.ReleaseAssetR\x06assets\",\n" +
1934+ "\x16GetReleaseUsageRequest\x12\x12\n" +
1935+ "\x04repo\x18\x01 \x01(\tR\x04repo\"\xa0\x01\n" +
1936+ "\x17GetReleaseUsageResponse\x12\x1d\n" +
1937+ "\n" +
1938+ "used_bytes\x18\x01 \x01(\x03R\tusedBytes\x12\x1f\n" +
1939+ "\vquota_bytes\x18\x02 \x01(\x03R\n" +
1940+ "quotaBytes\x12&\n" +
1941+ "\x0fasset_max_bytes\x18\x03 \x01(\x03R\rassetMaxBytes\x12\x1d\n" +
1942+ "\n" +
1943+ "assets_max\x18\x04 \x01(\x05R\tassetsMax\"s\n" +
1944+ "\x11GetReleaseRequest\x12\x12\n" +
1945+ "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x10\n" +
1946+ "\x02id\x18\x02 \x01(\x03H\x00R\x02id\x12\x12\n" +
1947+ "\x03tag\x18\x03 \x01(\tH\x00R\x03tag\x12\x18\n" +
1948+ "\x06latest\x18\x04 \x01(\bH\x00R\x06latestB\n" +
1949+ "\n" +
1950+ "\bselector\"7\n" +
1951+ "\x0fReleaseAssetTag\x12\x10\n" +
1952+ "\x03tag\x18\x01 \x01(\tR\x03tag\x12\x12\n" +
1953+ "\x04name\x18\x02 \x01(\tR\x04name\"@\n" +
1954+ "\x12ReleaseAssetLatest\x12\x16\n" +
1955+ "\x06latest\x18\x01 \x01(\bR\x06latest\x12\x12\n" +
1956+ "\x04name\x18\x02 \x01(\tR\x04name\"\xd5\x01\n" +
1957+ "\x1bDownloadReleaseAssetRequest\x12\x12\n" +
1958+ "\x04repo\x18\x01 \x01(\tR\x04repo\x12\x1b\n" +
1959+ "\basset_id\x18\x02 \x01(\x03H\x00R\aassetId\x12+\n" +
1960+ "\x03tag\x18\x03 \x01(\v2\x17.ermite.ReleaseAssetTagH\x00R\x03tag\x124\n" +
1961+ "\x06latest\x18\x04 \x01(\v2\x1a.ermite.ReleaseAssetLatestH\x00R\x06latest\x12\x16\n" +
1962+ "\x06offset\x18\x05 \x01(\x03R\x06offsetB\n" +
1963+ "\n" +
1964+ "\bselector\"?\n" +
1965+ "\x12GetReleaseResponse\x12)\n" +
1966+ "\arelease\x18\x01 \x01(\v2\x0f.ermite.ReleaseR\arelease2\xb6\a\n" +
1967+ "\x0eReleaseService\x12L\n" +
1968+ "\rCreateRelease\x12\x1c.ermite.CreateReleaseRequest\x1a\x1d.ermite.CreateReleaseResponse\x12C\n" +
1969+ "\n" +
1970+ "GetRelease\x12\x19.ermite.GetReleaseRequest\x1a\x1a.ermite.GetReleaseResponse\x12I\n" +
1971+ "\fListReleases\x12\x1b.ermite.ListReleasesRequest\x1a\x1c.ermite.ListReleasesResponse\x12L\n" +
1972+ "\rUpdateRelease\x12\x1c.ermite.UpdateReleaseRequest\x1a\x1d.ermite.UpdateReleaseResponse\x12L\n" +
1973+ "\rDeleteRelease\x12\x1c.ermite.DeleteReleaseRequest\x1a\x1d.ermite.DeleteReleaseResponse\x12]\n" +
1974+ "\x12UploadReleaseAsset\x12!.ermite.UploadReleaseAssetRequest\x1a\".ermite.UploadReleaseAssetResponse(\x01\x12[\n" +
1975+ "\x12UpdateReleaseAsset\x12!.ermite.UpdateReleaseAssetRequest\x1a\".ermite.UpdateReleaseAssetResponse\x12[\n" +
1976+ "\x12DeleteReleaseAsset\x12!.ermite.DeleteReleaseAssetRequest\x1a\".ermite.DeleteReleaseAssetResponse\x12c\n" +
1977+ "\x14DownloadReleaseAsset\x12#.ermite.DownloadReleaseAssetRequest\x1a$.ermite.DownloadReleaseAssetResponse0\x01\x12X\n" +
1978+ "\x11ListReleaseAssets\x12 .ermite.ListReleaseAssetsRequest\x1a!.ermite.ListReleaseAssetsResponse\x12R\n" +
1979+ "\x0fGetReleaseUsage\x12\x1e.ermite.GetReleaseUsageRequest\x1a\x1f.ermite.GetReleaseUsageResponseBs\n" +
1980+ "\n" +
1981+ "com.ermiteB\fReleaseProtoP\x01Z\x1fbnema.dev/ermite-api/gen/ermite\xa2\x02\x03EXX\xaa\x02\x06Ermite\xca\x02\x06Ermite\xe2\x02\x12Ermite\\GPBMetadata\xea\x02\x06Ermiteb\x06proto3"
1982+
1983+var (
1984+ file_ermite_release_proto_rawDescOnce sync.Once
1985+ file_ermite_release_proto_rawDescData []byte
1986+)
1987+
1988+func file_ermite_release_proto_rawDescGZIP() []byte {
1989+ file_ermite_release_proto_rawDescOnce.Do(func() {
1990+ file_ermite_release_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_ermite_release_proto_rawDesc), len(file_ermite_release_proto_rawDesc)))
1991+ })
1992+ return file_ermite_release_proto_rawDescData
1993+}
1994+
1995+var file_ermite_release_proto_msgTypes = make([]protoimpl.MessageInfo, 26)
1996+var file_ermite_release_proto_goTypes = []any{
1997+ (*Release)(nil), // 0: ermite.Release
1998+ (*ReleaseAsset)(nil), // 1: ermite.ReleaseAsset
1999+ (*CreateReleaseRequest)(nil), // 2: ermite.CreateReleaseRequest
2000+ (*CreateReleaseResponse)(nil), // 3: ermite.CreateReleaseResponse
2001+ (*ListReleasesRequest)(nil), // 4: ermite.ListReleasesRequest
2002+ (*ListReleasesResponse)(nil), // 5: ermite.ListReleasesResponse
2003+ (*UpdateReleaseRequest)(nil), // 6: ermite.UpdateReleaseRequest
2004+ (*UpdateReleaseResponse)(nil), // 7: ermite.UpdateReleaseResponse
2005+ (*DeleteReleaseRequest)(nil), // 8: ermite.DeleteReleaseRequest
2006+ (*DeleteReleaseResponse)(nil), // 9: ermite.DeleteReleaseResponse
2007+ (*UploadReleaseAssetRequest)(nil), // 10: ermite.UploadReleaseAssetRequest
2008+ (*UploadReleaseAssetResponse)(nil), // 11: ermite.UploadReleaseAssetResponse
2009+ (*UpdateReleaseAssetRequest)(nil), // 12: ermite.UpdateReleaseAssetRequest
2010+ (*UpdateReleaseAssetResponse)(nil), // 13: ermite.UpdateReleaseAssetResponse
2011+ (*DeleteReleaseAssetRequest)(nil), // 14: ermite.DeleteReleaseAssetRequest
2012+ (*DeleteReleaseAssetResponse)(nil), // 15: ermite.DeleteReleaseAssetResponse
2013+ (*DownloadReleaseAssetResponse)(nil), // 16: ermite.DownloadReleaseAssetResponse
2014+ (*ListReleaseAssetsRequest)(nil), // 17: ermite.ListReleaseAssetsRequest
2015+ (*ListReleaseAssetsResponse)(nil), // 18: ermite.ListReleaseAssetsResponse
2016+ (*GetReleaseUsageRequest)(nil), // 19: ermite.GetReleaseUsageRequest
2017+ (*GetReleaseUsageResponse)(nil), // 20: ermite.GetReleaseUsageResponse
2018+ (*GetReleaseRequest)(nil), // 21: ermite.GetReleaseRequest
2019+ (*ReleaseAssetTag)(nil), // 22: ermite.ReleaseAssetTag
2020+ (*ReleaseAssetLatest)(nil), // 23: ermite.ReleaseAssetLatest
2021+ (*DownloadReleaseAssetRequest)(nil), // 24: ermite.DownloadReleaseAssetRequest
2022+ (*GetReleaseResponse)(nil), // 25: ermite.GetReleaseResponse
2023+ (*timestamppb.Timestamp)(nil), // 26: google.protobuf.Timestamp
2024+ (*fieldmaskpb.FieldMask)(nil), // 27: google.protobuf.FieldMask
2025+}
2026+var file_ermite_release_proto_depIdxs = []int32{
2027+ 26, // 0: ermite.Release.created_at:type_name -> google.protobuf.Timestamp
2028+ 26, // 1: ermite.Release.published_at:type_name -> google.protobuf.Timestamp
2029+ 26, // 2: ermite.Release.updated_at:type_name -> google.protobuf.Timestamp
2030+ 1, // 3: ermite.Release.assets:type_name -> ermite.ReleaseAsset
2031+ 26, // 4: ermite.ReleaseAsset.created_at:type_name -> google.protobuf.Timestamp
2032+ 26, // 5: ermite.ReleaseAsset.updated_at:type_name -> google.protobuf.Timestamp
2033+ 0, // 6: ermite.CreateReleaseResponse.release:type_name -> ermite.Release
2034+ 0, // 7: ermite.ListReleasesResponse.releases:type_name -> ermite.Release
2035+ 27, // 8: ermite.UpdateReleaseRequest.update_mask:type_name -> google.protobuf.FieldMask
2036+ 0, // 9: ermite.UpdateReleaseResponse.release:type_name -> ermite.Release
2037+ 1, // 10: ermite.UploadReleaseAssetResponse.asset:type_name -> ermite.ReleaseAsset
2038+ 27, // 11: ermite.UpdateReleaseAssetRequest.update_mask:type_name -> google.protobuf.FieldMask
2039+ 1, // 12: ermite.UpdateReleaseAssetResponse.asset:type_name -> ermite.ReleaseAsset
2040+ 1, // 13: ermite.DownloadReleaseAssetResponse.asset:type_name -> ermite.ReleaseAsset
2041+ 1, // 14: ermite.ListReleaseAssetsResponse.assets:type_name -> ermite.ReleaseAsset
2042+ 22, // 15: ermite.DownloadReleaseAssetRequest.tag:type_name -> ermite.ReleaseAssetTag
2043+ 23, // 16: ermite.DownloadReleaseAssetRequest.latest:type_name -> ermite.ReleaseAssetLatest
2044+ 0, // 17: ermite.GetReleaseResponse.release:type_name -> ermite.Release
2045+ 2, // 18: ermite.ReleaseService.CreateRelease:input_type -> ermite.CreateReleaseRequest
2046+ 21, // 19: ermite.ReleaseService.GetRelease:input_type -> ermite.GetReleaseRequest
2047+ 4, // 20: ermite.ReleaseService.ListReleases:input_type -> ermite.ListReleasesRequest
2048+ 6, // 21: ermite.ReleaseService.UpdateRelease:input_type -> ermite.UpdateReleaseRequest
2049+ 8, // 22: ermite.ReleaseService.DeleteRelease:input_type -> ermite.DeleteReleaseRequest
2050+ 10, // 23: ermite.ReleaseService.UploadReleaseAsset:input_type -> ermite.UploadReleaseAssetRequest
2051+ 12, // 24: ermite.ReleaseService.UpdateReleaseAsset:input_type -> ermite.UpdateReleaseAssetRequest
2052+ 14, // 25: ermite.ReleaseService.DeleteReleaseAsset:input_type -> ermite.DeleteReleaseAssetRequest
2053+ 24, // 26: ermite.ReleaseService.DownloadReleaseAsset:input_type -> ermite.DownloadReleaseAssetRequest
2054+ 17, // 27: ermite.ReleaseService.ListReleaseAssets:input_type -> ermite.ListReleaseAssetsRequest
2055+ 19, // 28: ermite.ReleaseService.GetReleaseUsage:input_type -> ermite.GetReleaseUsageRequest
2056+ 3, // 29: ermite.ReleaseService.CreateRelease:output_type -> ermite.CreateReleaseResponse
2057+ 25, // 30: ermite.ReleaseService.GetRelease:output_type -> ermite.GetReleaseResponse
2058+ 5, // 31: ermite.ReleaseService.ListReleases:output_type -> ermite.ListReleasesResponse
2059+ 7, // 32: ermite.ReleaseService.UpdateRelease:output_type -> ermite.UpdateReleaseResponse
2060+ 9, // 33: ermite.ReleaseService.DeleteRelease:output_type -> ermite.DeleteReleaseResponse
2061+ 11, // 34: ermite.ReleaseService.UploadReleaseAsset:output_type -> ermite.UploadReleaseAssetResponse
2062+ 13, // 35: ermite.ReleaseService.UpdateReleaseAsset:output_type -> ermite.UpdateReleaseAssetResponse
2063+ 15, // 36: ermite.ReleaseService.DeleteReleaseAsset:output_type -> ermite.DeleteReleaseAssetResponse
2064+ 16, // 37: ermite.ReleaseService.DownloadReleaseAsset:output_type -> ermite.DownloadReleaseAssetResponse
2065+ 18, // 38: ermite.ReleaseService.ListReleaseAssets:output_type -> ermite.ListReleaseAssetsResponse
2066+ 20, // 39: ermite.ReleaseService.GetReleaseUsage:output_type -> ermite.GetReleaseUsageResponse
2067+ 29, // [29:40] is the sub-list for method output_type
2068+ 18, // [18:29] is the sub-list for method input_type
2069+ 18, // [18:18] is the sub-list for extension type_name
2070+ 18, // [18:18] is the sub-list for extension extendee
2071+ 0, // [0:18] is the sub-list for field type_name
2072+}
2073+
2074+func init() { file_ermite_release_proto_init() }
2075+func file_ermite_release_proto_init() {
2076+ if File_ermite_release_proto != nil {
2077+ return
2078+ }
2079+ file_ermite_release_proto_msgTypes[21].OneofWrappers = []any{
2080+ (*GetReleaseRequest_Id)(nil),
2081+ (*GetReleaseRequest_Tag)(nil),
2082+ (*GetReleaseRequest_Latest)(nil),
2083+ }
2084+ file_ermite_release_proto_msgTypes[24].OneofWrappers = []any{
2085+ (*DownloadReleaseAssetRequest_AssetId)(nil),
2086+ (*DownloadReleaseAssetRequest_Tag)(nil),
2087+ (*DownloadReleaseAssetRequest_Latest)(nil),
2088+ }
2089+ type x struct{}
2090+ out := protoimpl.TypeBuilder{
2091+ File: protoimpl.DescBuilder{
2092+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
2093+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_ermite_release_proto_rawDesc), len(file_ermite_release_proto_rawDesc)),
2094+ NumEnums: 0,
2095+ NumMessages: 26,
2096+ NumExtensions: 0,
2097+ NumServices: 1,
2098+ },
2099+ GoTypes: file_ermite_release_proto_goTypes,
2100+ DependencyIndexes: file_ermite_release_proto_depIdxs,
2101+ MessageInfos: file_ermite_release_proto_msgTypes,
2102+ }.Build()
2103+ File_ermite_release_proto = out.File
2104+ file_ermite_release_proto_goTypes = nil
2105+ file_ermite_release_proto_depIdxs = nil
2106+}
M gen/ermite/server.pb.go +2 -1 generated file: collapsed
M gen/ermite/token.pb.go +8 -2 generated file: collapsed
M gen_test.go +20 -0
@@ -19,6 +19,18 @@ import (
1919 // TestProcedures pins the procedure paths: they are the wire contract.
2020 func TestProcedures(t *testing.T) {
2121 tests := []struct{ got, want string }{
22+ {ermiteconnect.ReleaseServiceCreateReleaseProcedure, "/ermite.ReleaseService/CreateRelease"},
23+ {ermiteconnect.ReleaseServiceGetReleaseProcedure, "/ermite.ReleaseService/GetRelease"},
24+ {ermiteconnect.ReleaseServiceListReleasesProcedure, "/ermite.ReleaseService/ListReleases"},
25+ {ermiteconnect.ReleaseServiceUpdateReleaseProcedure, "/ermite.ReleaseService/UpdateRelease"},
26+ {ermiteconnect.ReleaseServiceDeleteReleaseProcedure, "/ermite.ReleaseService/DeleteRelease"},
27+ {ermiteconnect.ReleaseServiceUploadReleaseAssetProcedure, "/ermite.ReleaseService/UploadReleaseAsset"},
28+ {ermiteconnect.ReleaseServiceUpdateReleaseAssetProcedure, "/ermite.ReleaseService/UpdateReleaseAsset"},
29+ {ermiteconnect.ReleaseServiceDeleteReleaseAssetProcedure, "/ermite.ReleaseService/DeleteReleaseAsset"},
30+ {ermiteconnect.ReleaseServiceDownloadReleaseAssetProcedure, "/ermite.ReleaseService/DownloadReleaseAsset"},
31+ {ermiteconnect.ReleaseServiceListReleaseAssetsProcedure, "/ermite.ReleaseService/ListReleaseAssets"},
32+ {ermiteconnect.ReleaseServiceGetReleaseUsageProcedure, "/ermite.ReleaseService/GetReleaseUsage"},
33+
2234 {ermiteconnect.MirrorServiceGetMirrorKeyProcedure, "/ermite.MirrorService/GetMirrorKey"},
2335 {ermiteconnect.MirrorServiceRotateMirrorKeyProcedure, "/ermite.MirrorService/RotateMirrorKey"},
2436 {ermiteconnect.MirrorServiceGetMirrorConfigProcedure, "/ermite.MirrorService/GetMirrorConfig"},
@@ -615,3 +627,11 @@ func TestMirrorWire(t *testing.T) {
615627 }
616628 }
617629 }
630+
631+// TestReleaseSymbols pins the scope and event wrapper exports used by callers.
632+func TestReleaseSymbols(t *testing.T) {
633+ if ermite.Scope_SCOPE_RELEASE_WRITE != 13 {
634+ t.Fatal("release scope wire value changed")
635+ }
636+ var _ proto.Message = &ermite.Event{Kind: &ermite.Event_ReleasePublished{ReleasePublished: &ermite.ReleasePublished{}}}
637+}
@@ -19,6 +19,18 @@ import (
19 // TestProcedures pins the procedure paths: they are the wire contract.19 // TestProcedures pins the procedure paths: they are the wire contract.
20 func TestProcedures(t *testing.T) {20 func TestProcedures(t *testing.T) {
21 tests := []struct{ got, want string }{21 tests := []struct{ got, want string }{
22+ {ermiteconnect.ReleaseServiceCreateReleaseProcedure, "/ermite.ReleaseService/CreateRelease"},
23+ {ermiteconnect.ReleaseServiceGetReleaseProcedure, "/ermite.ReleaseService/GetRelease"},
24+ {ermiteconnect.ReleaseServiceListReleasesProcedure, "/ermite.ReleaseService/ListReleases"},
25+ {ermiteconnect.ReleaseServiceUpdateReleaseProcedure, "/ermite.ReleaseService/UpdateRelease"},
26+ {ermiteconnect.ReleaseServiceDeleteReleaseProcedure, "/ermite.ReleaseService/DeleteRelease"},
27+ {ermiteconnect.ReleaseServiceUploadReleaseAssetProcedure, "/ermite.ReleaseService/UploadReleaseAsset"},
28+ {ermiteconnect.ReleaseServiceUpdateReleaseAssetProcedure, "/ermite.ReleaseService/UpdateReleaseAsset"},
29+ {ermiteconnect.ReleaseServiceDeleteReleaseAssetProcedure, "/ermite.ReleaseService/DeleteReleaseAsset"},
30+ {ermiteconnect.ReleaseServiceDownloadReleaseAssetProcedure, "/ermite.ReleaseService/DownloadReleaseAsset"},
31+ {ermiteconnect.ReleaseServiceListReleaseAssetsProcedure, "/ermite.ReleaseService/ListReleaseAssets"},
32+ {ermiteconnect.ReleaseServiceGetReleaseUsageProcedure, "/ermite.ReleaseService/GetReleaseUsage"},
33+
22 {ermiteconnect.MirrorServiceGetMirrorKeyProcedure, "/ermite.MirrorService/GetMirrorKey"},34 {ermiteconnect.MirrorServiceGetMirrorKeyProcedure, "/ermite.MirrorService/GetMirrorKey"},
23 {ermiteconnect.MirrorServiceRotateMirrorKeyProcedure, "/ermite.MirrorService/RotateMirrorKey"},35 {ermiteconnect.MirrorServiceRotateMirrorKeyProcedure, "/ermite.MirrorService/RotateMirrorKey"},
24 {ermiteconnect.MirrorServiceGetMirrorConfigProcedure, "/ermite.MirrorService/GetMirrorConfig"},36 {ermiteconnect.MirrorServiceGetMirrorConfigProcedure, "/ermite.MirrorService/GetMirrorConfig"},
@@ -615,3 +627,11 @@ func TestMirrorWire(t *testing.T) {
615 }627 }
616 }628 }
617 }629 }
630+
631+// TestReleaseSymbols pins the scope and event wrapper exports used by callers.
632+func TestReleaseSymbols(t *testing.T) {
633+ if ermite.Scope_SCOPE_RELEASE_WRITE != 13 {
634+ t.Fatal("release scope wire value changed")
635+ }
636+ var _ proto.Message = &ermite.Event{Kind: &ermite.Event_ReleasePublished{ReleasePublished: &ermite.ReleasePublished{}}}
637+}
M proto/ermite/event.proto +42 -0
@@ -145,6 +145,14 @@ message Event {
145145 // MergeRequestAutoMergeCancelled: the auto-merge of a merge request was
146146 // cancelled.
147147 MergeRequestAutoMergeCancelled merge_request_auto_merge_cancelled = 26;
148+ // ReleasePublished reports a release published.
149+ ReleasePublished release_published = 27;
150+ // ReleaseUpdated reports a release updated.
151+ ReleaseUpdated release_updated = 28;
152+ // ReleaseDeleted reports a release deleted.
153+ ReleaseDeleted release_deleted = 29;
154+ // ReleaseUnpublished reports a release turned into a draft after tag deletion.
155+ ReleaseUnpublished release_unpublished = 30;
148156 }
149157 }
150158
@@ -358,3 +366,37 @@ message MirrorRecovered {
358366 // Repo is the repository name.
359367 string repo = 1;
360368 }
369+
370+// ReleasePublished reports a release change on repo:<name> and home topics.
371+message ReleasePublished {
372+ string repo = 1;
373+ int64 id = 2;
374+ string tag = 3;
375+ bool draft = 4;
376+ bool prerelease = 5;
377+}
378+
379+// ReleaseUpdated reports a release change on repo:<name> and home topics.
380+message ReleaseUpdated {
381+ string repo = 1;
382+ int64 id = 2;
383+ string tag = 3;
384+ bool draft = 4;
385+ bool prerelease = 5;
386+}
387+
388+// ReleaseDeleted reports a release change on repo:<name> and home topics.
389+message ReleaseDeleted {
390+ string repo = 1;
391+ int64 id = 2;
392+ string tag = 3;
393+}
394+
395+// ReleaseUnpublished reports a release change on repo:<name> and home topics.
396+message ReleaseUnpublished {
397+ string repo = 1;
398+ int64 id = 2;
399+ string tag = 3;
400+ bool draft = 4;
401+ bool prerelease = 5;
402+}
@@ -145,6 +145,14 @@ message Event {
145 // MergeRequestAutoMergeCancelled: the auto-merge of a merge request was145 // MergeRequestAutoMergeCancelled: the auto-merge of a merge request was
146 // cancelled.146 // cancelled.
147 MergeRequestAutoMergeCancelled merge_request_auto_merge_cancelled = 26;147 MergeRequestAutoMergeCancelled merge_request_auto_merge_cancelled = 26;
148+ // ReleasePublished reports a release published.
149+ ReleasePublished release_published = 27;
150+ // ReleaseUpdated reports a release updated.
151+ ReleaseUpdated release_updated = 28;
152+ // ReleaseDeleted reports a release deleted.
153+ ReleaseDeleted release_deleted = 29;
154+ // ReleaseUnpublished reports a release turned into a draft after tag deletion.
155+ ReleaseUnpublished release_unpublished = 30;
148 }156 }
149 }157 }
150 158
@@ -358,3 +366,37 @@ message MirrorRecovered {
358 // Repo is the repository name.366 // Repo is the repository name.
359 string repo = 1;367 string repo = 1;
360 }368 }
369+
370+// ReleasePublished reports a release change on repo:<name> and home topics.
371+message ReleasePublished {
372+ string repo = 1;
373+ int64 id = 2;
374+ string tag = 3;
375+ bool draft = 4;
376+ bool prerelease = 5;
377+}
378+
379+// ReleaseUpdated reports a release change on repo:<name> and home topics.
380+message ReleaseUpdated {
381+ string repo = 1;
382+ int64 id = 2;
383+ string tag = 3;
384+ bool draft = 4;
385+ bool prerelease = 5;
386+}
387+
388+// ReleaseDeleted reports a release change on repo:<name> and home topics.
389+message ReleaseDeleted {
390+ string repo = 1;
391+ int64 id = 2;
392+ string tag = 3;
393+}
394+
395+// ReleaseUnpublished reports a release change on repo:<name> and home topics.
396+message ReleaseUnpublished {
397+ string repo = 1;
398+ int64 id = 2;
399+ string tag = 3;
400+ bool draft = 4;
401+ bool prerelease = 5;
402+}
A proto/ermite/release.proto +264 -0
@@ -0,0 +1,264 @@
1+// SPDX-License-Identifier: MIT
2+
3+syntax = "proto3";
4+
5+package ermite;
6+
7+import "google/protobuf/field_mask.proto";
8+import "google/protobuf/timestamp.proto";
9+
10+// Release describes a tag and its notes. Drafts are visible only to writers.
11+message Release {
12+ int64 id = 1;
13+ string repo = 2;
14+ string tag = 3;
15+ string title = 4;
16+ string notes = 5;
17+ bool draft = 6;
18+ bool prerelease = 7;
19+ // Latest identifies the release returned by the latest selector, computed or pinned.
20+ bool latest = 8;
21+ // TargetCommitish is the tag's commit; empty for a draft without a tag.
22+ string target_commitish = 9;
23+ // Author is the label of the principal that created the release.
24+ string author = 10;
25+ google.protobuf.Timestamp created_at = 11;
26+ // PublishedAt is unset while draft.
27+ google.protobuf.Timestamp published_at = 12;
28+ google.protobuf.Timestamp updated_at = 13;
29+ // Assets contains uploaded assets only, ordered by name.
30+ repeated ReleaseAsset assets = 14;
31+}
32+
33+// ReleaseAsset describes an uploaded file, with a sha256:<hex> digest.
34+message ReleaseAsset {
35+ int64 id = 1;
36+ int64 release_id = 2;
37+ // Name is unique within the release, 1–255 characters, without slashes or controls.
38+ string name = 3;
39+ string label = 4;
40+ // ContentType defaults to application/octet-stream.
41+ string content_type = 5;
42+ int64 size = 6;
43+ string digest = 7;
44+ string uploader = 8;
45+ google.protobuf.Timestamp created_at = 9;
46+ google.protobuf.Timestamp updated_at = 10;
47+}
48+
49+// ReleaseService manages releases and their assets. Servers list "releases" in
50+// GetVersionResponse.features; other servers answer unimplemented.
51+// Published releases follow repository read access; drafts require write access.
52+// Unknown or unreadable repositories, releases and assets give not_found.
53+// Writes require release:write or a job token with contents: write for the repo;
54+// readers and branch-limited tokens receive permission_denied.
55+// Invalid names, media types or masks give invalid_argument. Size, asset count
56+// and repository quota limits give resource_exhausted and leave no stored upload.
57+service ReleaseService {
58+ // CreateRelease creates one release per tag (already_exists on duplication).
59+ // Publishing without an existing tag is failed_precondition, unless
60+ // target_commitish is supplied to create it; existing tags never move.
61+ rpc CreateRelease(CreateReleaseRequest) returns (CreateReleaseResponse);
62+ // GetRelease selects by id, tag or latest (latest must be true).
63+ rpc GetRelease(GetReleaseRequest) returns (GetReleaseResponse);
64+ // ListReleases lists newest first, including drafts only for writers.
65+ rpc ListReleases(ListReleasesRequest) returns (ListReleasesResponse);
66+ // UpdateRelease changes masked fields. Publishing requires an existing tag
67+ // or target_commitish to create it; otherwise failed_precondition.
68+ rpc UpdateRelease(UpdateReleaseRequest) returns (UpdateReleaseResponse);
69+ // DeleteRelease removes a release and its assets.
70+ rpc DeleteRelease(DeleteReleaseRequest) returns (DeleteReleaseResponse);
71+ // UploadReleaseAsset reserves size before reading. The first message carries
72+ // metadata; subsequent messages carry only data, at most 1 MiB per message.
73+ // Size must be nonnegative (-1 is refused). An interrupted stream stores no
74+ // asset. A taken name gives already_exists unless replace is true. Uploading
75+ // to a release of another repo gives failed_precondition.
76+ rpc UploadReleaseAsset(stream UploadReleaseAssetRequest) returns (UploadReleaseAssetResponse);
77+ // UpdateReleaseAsset changes masked name and label; a taken name gives already_exists.
78+ rpc UpdateReleaseAsset(UpdateReleaseAssetRequest) returns (UpdateReleaseAssetResponse);
79+ // DeleteReleaseAsset removes an asset.
80+ rpc DeleteReleaseAsset(DeleteReleaseAssetRequest) returns (DeleteReleaseAssetResponse);
81+ // DownloadReleaseAsset sends asset metadata first, then chunks of at most
82+ // 1 MiB. Resume with the offset after the last byte received. An offset
83+ // beyond the size gives out_of_range.
84+ rpc DownloadReleaseAsset(DownloadReleaseAssetRequest) returns (stream DownloadReleaseAssetResponse);
85+ // ListReleaseAssets lists uploaded assets, ordered by name.
86+ rpc ListReleaseAssets(ListReleaseAssetsRequest) returns (ListReleaseAssetsResponse);
87+ // GetReleaseUsage returns usage (including reserved uploads) and limits.
88+ rpc GetReleaseUsage(GetReleaseUsageRequest) returns (GetReleaseUsageResponse);
89+}
90+
91+// CreateReleaseRequest is the request of ReleaseService.CreateRelease.
92+message CreateReleaseRequest {
93+ string repo = 1;
94+ string tag = 2;
95+ string target_commitish = 3;
96+ string title = 4;
97+ string notes = 5;
98+ bool draft = 6;
99+ bool prerelease = 7;
100+ // MakeLatest pins this published non-prerelease as latest. False does not pin the release.
101+ bool make_latest = 8;
102+}
103+
104+// CreateReleaseResponse is the response of ReleaseService.CreateRelease.
105+message CreateReleaseResponse {
106+ Release release = 1;
107+}
108+
109+// ListReleasesRequest is the request of ReleaseService.ListReleases.
110+message ListReleasesRequest {
111+ string repo = 1;
112+ // PageSize is the maximum count; zero uses the server default.
113+ int32 page_size = 2;
114+ // PageToken is next_page_token from the preceding page, or empty initially.
115+ string page_token = 3;
116+}
117+
118+// ListReleasesResponse is the response of ReleaseService.ListReleases.
119+message ListReleasesResponse {
120+ repeated Release releases = 1;
121+ string next_page_token = 2;
122+}
123+
124+// UpdateReleaseRequest is the request of ReleaseService.UpdateRelease.
125+message UpdateReleaseRequest {
126+ string repo = 1;
127+ int64 id = 2;
128+ string tag = 3;
129+ string target_commitish = 4;
130+ string title = 5;
131+ string notes = 6;
132+ bool draft = 7;
133+ bool prerelease = 8;
134+ // MakeLatest pins this published non-prerelease as latest. False does not pin the release.
135+ bool make_latest = 9;
136+ // UpdateMask names the fields to change; unknown paths are invalid_argument.
137+ google.protobuf.FieldMask update_mask = 10;
138+}
139+
140+// UpdateReleaseResponse is the response of ReleaseService.UpdateRelease.
141+message UpdateReleaseResponse {
142+ Release release = 1;
143+}
144+
145+// DeleteReleaseRequest is the request of ReleaseService.DeleteRelease.
146+message DeleteReleaseRequest {
147+ string repo = 1;
148+ int64 id = 2;
149+}
150+
151+// DeleteReleaseResponse is the response of ReleaseService.DeleteRelease.
152+message DeleteReleaseResponse {
153+}
154+
155+// UploadReleaseAssetRequest is the request of ReleaseService.UploadReleaseAsset.
156+message UploadReleaseAssetRequest {
157+ string repo = 1;
158+ int64 release_id = 2;
159+ string name = 3;
160+ string label = 4;
161+ string content_type = 5;
162+ int64 size = 6;
163+ bool replace = 7;
164+ bytes data = 8;
165+}
166+
167+// UploadReleaseAssetResponse is the response of ReleaseService.UploadReleaseAsset.
168+message UploadReleaseAssetResponse {
169+ ReleaseAsset asset = 1;
170+}
171+
172+// UpdateReleaseAssetRequest is the request of ReleaseService.UpdateReleaseAsset.
173+message UpdateReleaseAssetRequest {
174+ string repo = 1;
175+ int64 asset_id = 2;
176+ string name = 3;
177+ string label = 4;
178+ // UpdateMask names the fields to change; unknown paths are invalid_argument.
179+ google.protobuf.FieldMask update_mask = 5;
180+}
181+
182+// UpdateReleaseAssetResponse is the response of ReleaseService.UpdateReleaseAsset.
183+message UpdateReleaseAssetResponse {
184+ ReleaseAsset asset = 1;
185+}
186+
187+// DeleteReleaseAssetRequest is the request of ReleaseService.DeleteReleaseAsset.
188+message DeleteReleaseAssetRequest {
189+ string repo = 1;
190+ int64 asset_id = 2;
191+}
192+
193+// DeleteReleaseAssetResponse is the response of ReleaseService.DeleteReleaseAsset.
194+message DeleteReleaseAssetResponse {
195+}
196+
197+// DownloadReleaseAssetResponse is the response of ReleaseService.DownloadReleaseAsset.
198+message DownloadReleaseAssetResponse {
199+ ReleaseAsset asset = 1;
200+ bytes chunk = 2;
201+}
202+
203+// ListReleaseAssetsRequest is the request of ReleaseService.ListReleaseAssets.
204+message ListReleaseAssetsRequest {
205+ string repo = 1;
206+ int64 release_id = 2;
207+}
208+
209+// ListReleaseAssetsResponse is the response of ReleaseService.ListReleaseAssets.
210+message ListReleaseAssetsResponse {
211+ repeated ReleaseAsset assets = 1;
212+}
213+
214+// GetReleaseUsageRequest is the request of ReleaseService.GetReleaseUsage.
215+message GetReleaseUsageRequest {
216+ string repo = 1;
217+}
218+
219+// GetReleaseUsageResponse is the response of ReleaseService.GetReleaseUsage.
220+message GetReleaseUsageResponse {
221+ int64 used_bytes = 1;
222+ int64 quota_bytes = 2;
223+ int64 asset_max_bytes = 3;
224+ int32 assets_max = 4;
225+}
226+
227+// GetReleaseRequest selects exactly one release.
228+message GetReleaseRequest {
229+ string repo = 1;
230+ oneof selector {
231+ int64 id = 2;
232+ string tag = 3;
233+ bool latest = 4;
234+ }
235+}
236+
237+// ReleaseAssetTag selects a named asset of a tag.
238+message ReleaseAssetTag {
239+ string tag = 1;
240+ string name = 2;
241+}
242+
243+// ReleaseAssetLatest selects a named asset of the latest release.
244+message ReleaseAssetLatest {
245+ // Latest must be true.
246+ bool latest = 1;
247+ string name = 2;
248+}
249+
250+// DownloadReleaseAssetRequest selects an asset and a resume offset.
251+message DownloadReleaseAssetRequest {
252+ string repo = 1;
253+ oneof selector {
254+ int64 asset_id = 2;
255+ ReleaseAssetTag tag = 3;
256+ ReleaseAssetLatest latest = 4;
257+ }
258+ int64 offset = 5;
259+}
260+
261+// GetReleaseResponse contains the selected release.
262+message GetReleaseResponse {
263+ Release release = 1;
264+}
@@ -0,0 +1,264 @@
1+// SPDX-License-Identifier: MIT
2+
3+syntax = "proto3";
4+
5+package ermite;
6+
7+import "google/protobuf/field_mask.proto";
8+import "google/protobuf/timestamp.proto";
9+
10+// Release describes a tag and its notes. Drafts are visible only to writers.
11+message Release {
12+ int64 id = 1;
13+ string repo = 2;
14+ string tag = 3;
15+ string title = 4;
16+ string notes = 5;
17+ bool draft = 6;
18+ bool prerelease = 7;
19+ // Latest identifies the release returned by the latest selector, computed or pinned.
20+ bool latest = 8;
21+ // TargetCommitish is the tag's commit; empty for a draft without a tag.
22+ string target_commitish = 9;
23+ // Author is the label of the principal that created the release.
24+ string author = 10;
25+ google.protobuf.Timestamp created_at = 11;
26+ // PublishedAt is unset while draft.
27+ google.protobuf.Timestamp published_at = 12;
28+ google.protobuf.Timestamp updated_at = 13;
29+ // Assets contains uploaded assets only, ordered by name.
30+ repeated ReleaseAsset assets = 14;
31+}
32+
33+// ReleaseAsset describes an uploaded file, with a sha256:<hex> digest.
34+message ReleaseAsset {
35+ int64 id = 1;
36+ int64 release_id = 2;
37+ // Name is unique within the release, 1–255 characters, without slashes or controls.
38+ string name = 3;
39+ string label = 4;
40+ // ContentType defaults to application/octet-stream.
41+ string content_type = 5;
42+ int64 size = 6;
43+ string digest = 7;
44+ string uploader = 8;
45+ google.protobuf.Timestamp created_at = 9;
46+ google.protobuf.Timestamp updated_at = 10;
47+}
48+
49+// ReleaseService manages releases and their assets. Servers list "releases" in
50+// GetVersionResponse.features; other servers answer unimplemented.
51+// Published releases follow repository read access; drafts require write access.
52+// Unknown or unreadable repositories, releases and assets give not_found.
53+// Writes require release:write or a job token with contents: write for the repo;
54+// readers and branch-limited tokens receive permission_denied.
55+// Invalid names, media types or masks give invalid_argument. Size, asset count
56+// and repository quota limits give resource_exhausted and leave no stored upload.
57+service ReleaseService {
58+ // CreateRelease creates one release per tag (already_exists on duplication).
59+ // Publishing without an existing tag is failed_precondition, unless
60+ // target_commitish is supplied to create it; existing tags never move.
61+ rpc CreateRelease(CreateReleaseRequest) returns (CreateReleaseResponse);
62+ // GetRelease selects by id, tag or latest (latest must be true).
63+ rpc GetRelease(GetReleaseRequest) returns (GetReleaseResponse);
64+ // ListReleases lists newest first, including drafts only for writers.
65+ rpc ListReleases(ListReleasesRequest) returns (ListReleasesResponse);
66+ // UpdateRelease changes masked fields. Publishing requires an existing tag
67+ // or target_commitish to create it; otherwise failed_precondition.
68+ rpc UpdateRelease(UpdateReleaseRequest) returns (UpdateReleaseResponse);
69+ // DeleteRelease removes a release and its assets.
70+ rpc DeleteRelease(DeleteReleaseRequest) returns (DeleteReleaseResponse);
71+ // UploadReleaseAsset reserves size before reading. The first message carries
72+ // metadata; subsequent messages carry only data, at most 1 MiB per message.
73+ // Size must be nonnegative (-1 is refused). An interrupted stream stores no
74+ // asset. A taken name gives already_exists unless replace is true. Uploading
75+ // to a release of another repo gives failed_precondition.
76+ rpc UploadReleaseAsset(stream UploadReleaseAssetRequest) returns (UploadReleaseAssetResponse);
77+ // UpdateReleaseAsset changes masked name and label; a taken name gives already_exists.
78+ rpc UpdateReleaseAsset(UpdateReleaseAssetRequest) returns (UpdateReleaseAssetResponse);
79+ // DeleteReleaseAsset removes an asset.
80+ rpc DeleteReleaseAsset(DeleteReleaseAssetRequest) returns (DeleteReleaseAssetResponse);
81+ // DownloadReleaseAsset sends asset metadata first, then chunks of at most
82+ // 1 MiB. Resume with the offset after the last byte received. An offset
83+ // beyond the size gives out_of_range.
84+ rpc DownloadReleaseAsset(DownloadReleaseAssetRequest) returns (stream DownloadReleaseAssetResponse);
85+ // ListReleaseAssets lists uploaded assets, ordered by name.
86+ rpc ListReleaseAssets(ListReleaseAssetsRequest) returns (ListReleaseAssetsResponse);
87+ // GetReleaseUsage returns usage (including reserved uploads) and limits.
88+ rpc GetReleaseUsage(GetReleaseUsageRequest) returns (GetReleaseUsageResponse);
89+}
90+
91+// CreateReleaseRequest is the request of ReleaseService.CreateRelease.
92+message CreateReleaseRequest {
93+ string repo = 1;
94+ string tag = 2;
95+ string target_commitish = 3;
96+ string title = 4;
97+ string notes = 5;
98+ bool draft = 6;
99+ bool prerelease = 7;
100+ // MakeLatest pins this published non-prerelease as latest. False does not pin the release.
101+ bool make_latest = 8;
102+}
103+
104+// CreateReleaseResponse is the response of ReleaseService.CreateRelease.
105+message CreateReleaseResponse {
106+ Release release = 1;
107+}
108+
109+// ListReleasesRequest is the request of ReleaseService.ListReleases.
110+message ListReleasesRequest {
111+ string repo = 1;
112+ // PageSize is the maximum count; zero uses the server default.
113+ int32 page_size = 2;
114+ // PageToken is next_page_token from the preceding page, or empty initially.
115+ string page_token = 3;
116+}
117+
118+// ListReleasesResponse is the response of ReleaseService.ListReleases.
119+message ListReleasesResponse {
120+ repeated Release releases = 1;
121+ string next_page_token = 2;
122+}
123+
124+// UpdateReleaseRequest is the request of ReleaseService.UpdateRelease.
125+message UpdateReleaseRequest {
126+ string repo = 1;
127+ int64 id = 2;
128+ string tag = 3;
129+ string target_commitish = 4;
130+ string title = 5;
131+ string notes = 6;
132+ bool draft = 7;
133+ bool prerelease = 8;
134+ // MakeLatest pins this published non-prerelease as latest. False does not pin the release.
135+ bool make_latest = 9;
136+ // UpdateMask names the fields to change; unknown paths are invalid_argument.
137+ google.protobuf.FieldMask update_mask = 10;
138+}
139+
140+// UpdateReleaseResponse is the response of ReleaseService.UpdateRelease.
141+message UpdateReleaseResponse {
142+ Release release = 1;
143+}
144+
145+// DeleteReleaseRequest is the request of ReleaseService.DeleteRelease.
146+message DeleteReleaseRequest {
147+ string repo = 1;
148+ int64 id = 2;
149+}
150+
151+// DeleteReleaseResponse is the response of ReleaseService.DeleteRelease.
152+message DeleteReleaseResponse {
153+}
154+
155+// UploadReleaseAssetRequest is the request of ReleaseService.UploadReleaseAsset.
156+message UploadReleaseAssetRequest {
157+ string repo = 1;
158+ int64 release_id = 2;
159+ string name = 3;
160+ string label = 4;
161+ string content_type = 5;
162+ int64 size = 6;
163+ bool replace = 7;
164+ bytes data = 8;
165+}
166+
167+// UploadReleaseAssetResponse is the response of ReleaseService.UploadReleaseAsset.
168+message UploadReleaseAssetResponse {
169+ ReleaseAsset asset = 1;
170+}
171+
172+// UpdateReleaseAssetRequest is the request of ReleaseService.UpdateReleaseAsset.
173+message UpdateReleaseAssetRequest {
174+ string repo = 1;
175+ int64 asset_id = 2;
176+ string name = 3;
177+ string label = 4;
178+ // UpdateMask names the fields to change; unknown paths are invalid_argument.
179+ google.protobuf.FieldMask update_mask = 5;
180+}
181+
182+// UpdateReleaseAssetResponse is the response of ReleaseService.UpdateReleaseAsset.
183+message UpdateReleaseAssetResponse {
184+ ReleaseAsset asset = 1;
185+}
186+
187+// DeleteReleaseAssetRequest is the request of ReleaseService.DeleteReleaseAsset.
188+message DeleteReleaseAssetRequest {
189+ string repo = 1;
190+ int64 asset_id = 2;
191+}
192+
193+// DeleteReleaseAssetResponse is the response of ReleaseService.DeleteReleaseAsset.
194+message DeleteReleaseAssetResponse {
195+}
196+
197+// DownloadReleaseAssetResponse is the response of ReleaseService.DownloadReleaseAsset.
198+message DownloadReleaseAssetResponse {
199+ ReleaseAsset asset = 1;
200+ bytes chunk = 2;
201+}
202+
203+// ListReleaseAssetsRequest is the request of ReleaseService.ListReleaseAssets.
204+message ListReleaseAssetsRequest {
205+ string repo = 1;
206+ int64 release_id = 2;
207+}
208+
209+// ListReleaseAssetsResponse is the response of ReleaseService.ListReleaseAssets.
210+message ListReleaseAssetsResponse {
211+ repeated ReleaseAsset assets = 1;
212+}
213+
214+// GetReleaseUsageRequest is the request of ReleaseService.GetReleaseUsage.
215+message GetReleaseUsageRequest {
216+ string repo = 1;
217+}
218+
219+// GetReleaseUsageResponse is the response of ReleaseService.GetReleaseUsage.
220+message GetReleaseUsageResponse {
221+ int64 used_bytes = 1;
222+ int64 quota_bytes = 2;
223+ int64 asset_max_bytes = 3;
224+ int32 assets_max = 4;
225+}
226+
227+// GetReleaseRequest selects exactly one release.
228+message GetReleaseRequest {
229+ string repo = 1;
230+ oneof selector {
231+ int64 id = 2;
232+ string tag = 3;
233+ bool latest = 4;
234+ }
235+}
236+
237+// ReleaseAssetTag selects a named asset of a tag.
238+message ReleaseAssetTag {
239+ string tag = 1;
240+ string name = 2;
241+}
242+
243+// ReleaseAssetLatest selects a named asset of the latest release.
244+message ReleaseAssetLatest {
245+ // Latest must be true.
246+ bool latest = 1;
247+ string name = 2;
248+}
249+
250+// DownloadReleaseAssetRequest selects an asset and a resume offset.
251+message DownloadReleaseAssetRequest {
252+ string repo = 1;
253+ oneof selector {
254+ int64 asset_id = 2;
255+ ReleaseAssetTag tag = 3;
256+ ReleaseAssetLatest latest = 4;
257+ }
258+ int64 offset = 5;
259+}
260+
261+// GetReleaseResponse contains the selected release.
262+message GetReleaseResponse {
263+ Release release = 1;
264+}
M proto/ermite/server.proto +2 -1
@@ -64,7 +64,8 @@ message GetVersionResponse {
6464 // RepoSettings.allow_auto_merge, MergeRequest.auto_merge and auto_merged,
6565 // the EnableAutoMerge and CancelAutoMerge RPCs, the
6666 // MergeRequestAutoMergeEnabled and MergeRequestAutoMergeCancelled events
67- // and MergeRequestMerged.auto.
67+ // and MergeRequestMerged.auto. "releases" covers ReleaseService and the
68+ // release_published, release_updated, release_deleted and release_unpublished events.
6869 repeated string features = 2;
6970 }
7071
@@ -64,7 +64,8 @@ message GetVersionResponse {
64 // RepoSettings.allow_auto_merge, MergeRequest.auto_merge and auto_merged,64 // RepoSettings.allow_auto_merge, MergeRequest.auto_merge and auto_merged,
65 // the EnableAutoMerge and CancelAutoMerge RPCs, the65 // the EnableAutoMerge and CancelAutoMerge RPCs, the
66 // MergeRequestAutoMergeEnabled and MergeRequestAutoMergeCancelled events66 // MergeRequestAutoMergeEnabled and MergeRequestAutoMergeCancelled events
67- // and MergeRequestMerged.auto.67+ // and MergeRequestMerged.auto. "releases" covers ReleaseService and the
68+ // release_published, release_updated, release_deleted and release_unpublished events.
68 repeated string features = 2;69 repeated string features = 2;
69 }70 }
70 71
M proto/ermite/token.proto +3 -0
@@ -49,6 +49,9 @@ enum Scope {
4949 // SCOPE_MR_FORCE_MERGE allows merging a merge request whatever its checks
5050 // say (MergeMergeRequestRequest.ignore_checks). Wire name: mr:force-merge.
5151 SCOPE_MR_FORCE_MERGE = 12;
52+ // SCOPE_RELEASE_WRITE allows creating, editing and deleting releases and their assets.
53+ // Wire name: release:write.
54+ SCOPE_RELEASE_WRITE = 13;
5255 }
5356
5457 // Token describes a stored token. It never contains the secret nor its hash.
@@ -49,6 +49,9 @@ enum Scope {
49 // SCOPE_MR_FORCE_MERGE allows merging a merge request whatever its checks49 // SCOPE_MR_FORCE_MERGE allows merging a merge request whatever its checks
50 // say (MergeMergeRequestRequest.ignore_checks). Wire name: mr:force-merge.50 // say (MergeMergeRequestRequest.ignore_checks). Wire name: mr:force-merge.
51 SCOPE_MR_FORCE_MERGE = 12;51 SCOPE_MR_FORCE_MERGE = 12;
52+ // SCOPE_RELEASE_WRITE allows creating, editing and deleting releases and their assets.
53+ // Wire name: release:write.
54+ SCOPE_RELEASE_WRITE = 13;
52 }55 }
53 56
54 // Token describes a stored token. It never contains the secret nor its hash.57 // Token describes a stored token. It never contains the secret nor its hash.

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 2

Tags 18

↑↓ moveenter openesc close