private async Task <IActionResult> ReturnZipFile(int buildId, string artifactName, string filePath) { var artifact = await _client.GetArtifact(buildId, artifactName); if (artifact == null) { return(NotFound()); } var zip = await _client.DownloadZipFile(artifact.Resource.DownloadUrl); var pathRegex = PathGlob.Create(filePath); var entry = zip.Entries .OrderByDescending(e => e.LastWriteTime) .FirstOrDefault(x => pathRegex.IsMatch(x.FullName)); if (entry == null) { return(NotFound()); } var contentType = _contentTypeProvider.TryGetContentType(filePath, out var c) ? c : "application/octet-stream"; return(File(entry.Open(), contentType)); }
public async Task <ArtifactDetails> GetArtifact(int buildId, string artifactName) { if (PathGlob.HasWildcards(artifactName)) { return(await SearchForLatestArtifact(buildId, artifactName)); } var artifact = await _client.GetFromJsonAsync <ArtifactDetails>($"build/builds/{buildId}/artifacts?artifactName={artifactName}&api-version=6.0"); return(artifact); }
private async Task <ArtifactDetails> SearchForLatestArtifact(int buildId, string artifactName) { var artifactRegex = PathGlob.Create(artifactName); var artifacts = await FindArtifacts(buildId); var artifact = artifacts .Where(a => artifactRegex.IsMatch(a.Name)) .OrderByDescending(a => a.Id) .FirstOrDefault(); return(artifact); }