File: rpc.proto

package info (click to toggle)
gitlab-agent 16.1.3-2
  • links: PTS, VCS
  • area: contrib
  • in suites: trixie
  • size: 6,324 kB
  • sloc: makefile: 175; sh: 52; ruby: 3
file content (110 lines) | stat: -rw-r--r-- 4,056 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
syntax = "proto3";

// If you make any changes make sure you run: make regenerate-proto

package gitlab.agent.gitops.rpc;

option go_package = "gitlab.com/gitlab-org/cluster-integration/gitlab-agent/v16/internal/module/gitops/rpc";

import "internal/tool/grpctool/automata/automata.proto";
//import "github.com/envoyproxy/protoc-gen-validate/blob/master/validate/validate.proto";
import "validate/validate.proto";

// GitRef in the repository to fetch manifests from.
message GitRefCF {
  oneof ref {
    option (validate.required) = true;

    // A Git tag name, without `refs/tags/`
    string tag = 1 [json_name = "tag", (validate.rules).string.min_bytes = 1];
    // A Git branch name, without `refs/heads/`
    string branch = 2 [json_name = "branch", (validate.rules).string.min_bytes = 1];
    // A Git commit SHA
    string commit = 3 [json_name = "commit", (validate.rules).string.min_bytes = 1];
  }
}

message PathCF {
  oneof path {
    option (validate.required) = true;

    // Glob to use to scan for files in the repository.
    // Directories with names starting with a dot are ignored.
    // See https://github.com/bmatcuk/doublestar#about and
    // https://pkg.go.dev/github.com/bmatcuk/doublestar/v2#Match for
    // globbing rules.
    string glob = 1 [json_name = "glob", (validate.rules).string.min_bytes = 1];
    // A single file to fetch.
    string file = 2 [json_name = "file", (validate.rules).string.min_bytes = 1];
  }
}

message ObjectsToSynchronizeRequest {
  // Project to fetch Kubernetes object manifests from.
  // e.g. gitlab-org/cluster-integration/gitlab-agent
  string project_id = 1 [(validate.rules).string.min_bytes = 1];
  // Ref within the project to fetch Kubernetes object manifest from.
  GitRefCF ref = 4;
  // Last processed commit id. Optional.
  // Server will only send objects if the last commit on the branch is
  // a different one. If a connection breaks, this allows to resume
  // the stream without sending the same data again.
  string commit_id = 2;
  // A list of paths inside of the project to scan
  // for .yaml/.yml/.json manifest files.
  repeated PathCF paths = 3 [(validate.rules).repeated.min_items = 1];
}

message ObjectsToSynchronizeResponse {
  // First message of the stream.
  message Header {
    // Commit id of the manifest repository.
    // Can be used to resume connection from where it dropped.
    string commit_id = 1 [(validate.rules).string.min_bytes = 1];
    // Numeric project id of the manifest repository.
    int64 project_id = 2;
  }
  // Subsequent messages of the stream.
  message Object {
    // Source of the YAML e.g. file name.
    // Several subsequent messages may contain the same source string.
    // That means data should be accumulated to form the whole blob of data.
    string source = 1 [(validate.rules).string.min_bytes = 1];

    // YAML object manifest.
    // Might be partial data, see comment for source.
    bytes data = 2;
  }
  // Last message of the stream.
  message Trailer {
  }
  oneof message {

    option (grpctool.automata.first_allowed_field) = 1;
    option (grpctool.automata.first_allowed_field) = -1; // EOF means there is nothing to do
    option (validate.required) = true;

    Header header = 1 [
      (grpctool.automata.next_allowed_field) = 2,
      (grpctool.automata.next_allowed_field) = 3,
      (validate.rules).message.required = true
    ];
    Object object = 2 [
      (grpctool.automata.next_allowed_field) = 2,
      (grpctool.automata.next_allowed_field) = 3,
      (validate.rules).message.required = true
    ];
    Trailer trailer = 3 [
      (grpctool.automata.next_allowed_field) = -1,
      (validate.rules).message.required = true
    ];
  }
}

service Gitops {
  // Fetch Kubernetes objects to synchronize with the cluster.
  // Server closes the stream when it's done transmitting the full batch of
  // objects. New request should be made after that to get the next batch.
  rpc GetObjectsToSynchronize (ObjectsToSynchronizeRequest) returns (stream ObjectsToSynchronizeResponse) {
  }
}