code: func (s *ReleaseServer) UpdateRelease(c ctx.Context, req *services.UpdateReleaseRequest) (*services.UpdateReleaseResponse, error) {
  	if err := validateReleaseName(req.Name); err != nil {
  		s.Log("updateRelease: Release name is invalid: %s", req.Name)
  		return nil, err
  	}
  	s.Log("preparing update for %s", req.Name)
  	currentRelease, updatedRelease, err := s.prepareUpdate(req)
  	if err != nil {
  		if req.Force {
  			// Use the --force, Luke.
  			return s.performUpdateForce(req)
  		}
  		return nil, err
  	}
  
  	if !req.DryRun {
  		s.Log("creating updated release for %s", req.Name)
  		if err := s.env.Releases.Create(updatedRelease); err != nil {
  			return nil, err
  		}
  	}
  
  	s.Log("performing update for %s", req.Name)
  	res, err := s.performUpdate(currentRelease, updatedRelease, req)
  	if err != nil {
  		return res, err
  	}
  
  	if !req.DryRun {
  		s.Log("updating status for updated release for %s", req.Name)
  		if err := s.env.Releases.Update(updatedRelease); err != nil {
  			return res, err
  		}
  	}
  
  	return res, nil
  }
docs: // UpdateRelease takes an existing release and new information, and upgrades the release.