Beispiel #1
0
        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));
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }