private async Task ReadArtifact(IAsyncStreamReader <BuildStatusUpdate> requestStream, IServerStreamWriter <RunBuildCommand> responseStream, IJobStatusUpdatable jobStatus, ArtifactInfo artifact, CancellationToken cancellationToken) { var artifactName = artifact.Name; if (artifactName == null || !PathUtil.IsValidSubPath(artifactName) || string.IsNullOrEmpty(artifactName)) { throw new Exception("Invalid path name."); } await responseStream.WriteAsync(new RunBuildCommand { Artifact = new ArtifactRequest { Artifact = artifact, }, }); var path = Path.Combine(jobStatus.ArtifactDir, artifactName); Directory.CreateDirectory(Path.GetDirectoryName(path)); await using var fileStream = File.Create(path); await ReadArtifactContent(requestStream, fileStream, cancellationToken); }
private async Task ReadReplay(IAsyncStreamReader <BuildStatusUpdate> requestStream, IServerStreamWriter <RunBuildCommand> responseStream, IJobStatusUpdatable jobStatus, CancellationToken cancellationToken) { await responseStream.WriteAsync(new RunBuildCommand { Artifact = new ArtifactRequest { Replay = new Empty(), }, }); await using var fileStream = jobStatus.OpenReplay(); await ReadArtifactContent(requestStream, fileStream, cancellationToken); }