code: func (s *Server) UpdateConfig(ctx context.Context, request *api.UpdateConfigRequest) (*api.UpdateConfigResponse, error) {
  	if request.ConfigID == "" || request.ConfigVersion == nil {
  		return nil, status.Errorf(codes.InvalidArgument, errInvalidArgument.Error())
  	}
  
  	var config *api.Config
  	err := s.store.Update(func(tx store.Tx) error {
  		config = store.GetConfig(tx, request.ConfigID)
  		if config == nil {
  			return status.Errorf(codes.NotFound, "config %s not found", request.ConfigID)
  		}
  
  		// Check if the Name is different than the current name, or the config is non-nil and different
  		// than the current config
  		if config.Spec.Annotations.Name != request.Spec.Annotations.Name ||
  			(request.Spec.Data != nil && !bytes.Equal(request.Spec.Data, config.Spec.Data)) {
  			return status.Errorf(codes.InvalidArgument, "only updates to Labels are allowed")
  		}
  
  		// We only allow updating Labels
  		config.Meta.Version = *request.ConfigVersion
  		config.Spec.Annotations.Labels = request.Spec.Annotations.Labels
  
  		return store.UpdateConfig(tx, config)
  	})
  	if err != nil {
  		return nil, err
  	}
  
  	log.G(ctx).WithFields(logrus.Fields{
  		"config.ID":   request.ConfigID,
  		"config.Name": request.Spec.Annotations.Name,
  		"method":      "UpdateConfig",
  	}).Debugf("config updated")
  
  	return &api.UpdateConfigResponse{
  		Config: config,
  	}, nil
  }
docs: // UpdateConfig updates a Config referenced by ConfigID with the given ConfigSpec.
  // - Returns `NotFound` if the Config is not found.
  // - Returns `InvalidArgument` if the ConfigSpec is malformed or anything other than Labels is changed
  // - Returns an error if the update fails.