syntax = "proto3";

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

package gitlab.agent.agent_configuration.rpc;

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

import "pkg/agentcfg/agentcfg.proto";
import "buf/validate/validate.proto";

message ConfigurationRequest {
  // Last processed commit id. Optional.
  // Server will only send configuration 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.
  // Empty string: first poll
  // 'ref not found': ref was not found in a previous poll. No/empty repository, no HEAD branch.
  // other non-empty string: commit id
  string commit_id = 1;
  reserved 2, 3;
}

message ConfigurationResponse {
  agentcfg.AgentConfiguration configuration = 1 [(buf.validate.field).required = true];
  // Commit id of the configuration repository.
  // Can be used to resume connection from where it dropped.
  // 'ref not found' value means ref/repo was not found.
  string commit_id = 2 [(buf.validate.field).string.min_bytes = 1];
}

service AgentConfiguration {
  // Get agentk configuration.
  rpc GetConfiguration (ConfigurationRequest) returns (stream ConfigurationResponse) {
    option idempotency_level = IDEMPOTENT; // persists fetched config in DB
  }
}
