type RunConfig … // Run generates and uploads reports, as allowed by the mode file. func Run(config RunConfig) error { … } type uploader … // newUploader creates a new uploader to use for running the upload for the // given config. // // Uploaders should only be used for one call to [uploader.Run]. func newUploader(rcfg RunConfig) (*uploader, error) { … } // Close cleans up any resources associated with the uploader. func (u *uploader) Close() error { … } // Run generates and uploads reports func (u *uploader) Run() error { … } // debugLogFile arranges to write a log file in the given debug directory, if // it exists. func debugLogFile(debugDir string) (*os.File, error) { … }