protected override async Task <object> RemoteExecuteAsync(IRemoteOperationExecutionContext context) { var client = new ProGetClient(this.Server, this.FeedName, this.UserName, this.Password, this, context.CancellationToken); try { this.LogInformation($"Pushing package {this.Name} to ProGet..."); string path = context.ResolvePath(this.FilePath); this.LogDebug("Using package file: " + path); if (!FileEx.Exists(path)) { this.LogError(this.FilePath + " does not exist."); return(null); } if (string.IsNullOrWhiteSpace(this.Name) || string.IsNullOrWhiteSpace(this.Version)) { try { using (var package = new UniversalPackage(path)) { if (string.IsNullOrWhiteSpace(package.Name) || package.Version == null) { this.LogError("Name and Version properties are required unless pushing a package that already has those properties set."); return(null); } } } catch { this.LogError("Name and Version properties are required unless pushing a package that already has those properties set."); return(null); } } using (var file = FileEx.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read)) { var data = new ProGetPackagePushData { Title = this.Title, Description = this.Description, Icon = this.Icon, Dependencies = this.Dependencies?.ToArray() }; await client.PushPackageAsync(this.Group, this.Name, this.Version, data, file); } } catch (ProGetException ex) { this.LogError(ex.FullMessage); return(null); } this.LogInformation("Package pushed."); return(null); }
protected override async Task <object> RemoteExecuteAsync(IRemoteOperationExecutionContext context) { var client = new ProGetClient(this.Server, this.FeedName, this.UserName, this.Password, this); try { this.LogInformation($"Pushing package {this.Name} to ProGet..."); string path = context.ResolvePath(this.FilePath); this.LogDebug("Using package file: " + path); if (!FileEx.Exists(path)) { this.LogError(this.FilePath + " does not exist."); return(null); } using (var file = FileEx.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read)) { var data = new ProGetPackagePushData { Title = this.Title, Description = this.Description, Icon = this.Icon, Dependencies = this.Dependencies?.ToArray() }; await client.PushPackageAsync(this.Group, this.Name, this.Version, data, file).ConfigureAwait(false); } } catch (ProGetException ex) { this.LogError(ex.FullMessage); return(null); } this.LogInformation("Package pushed."); return(null); }
public async Task PushPackageAsync(string group, string name, string version, ProGetPackagePushData packageData, Stream content) { if (packageData == null) { throw new ArgumentNullException(nameof(packageData)); } var queryArgs = new List <string>(); if (!string.IsNullOrEmpty(group)) { queryArgs.Add("group=" + Uri.EscapeDataString(group)); } if (!string.IsNullOrEmpty(name)) { queryArgs.Add("name=" + Uri.EscapeDataString(name)); } if (!string.IsNullOrEmpty(version)) { queryArgs.Add("version=" + Uri.EscapeDataString(version)); } queryArgs.AddRange(packageData.GetQueryArgs()); var url = this.FeedUrl + "upload"; if (queryArgs.Count > 0) { url += "?" + string.Join("&", queryArgs); } var request = this.CreateWebRequest(url); request.Method = "PUT"; request.ContentType = "application/zip"; if (content.CanSeek) { request.ContentLength = content.Length - content.Position; } try { using (var requestStream = await request.GetRequestStreamAsync()) { await content.CopyToAsync(requestStream, 81920, this.CancellationToken); } using (var response = await request.GetResponseAsync()) using (var responseStream = response.GetResponseStream()) { } } catch (WebException ex) { using (var responseStream = ex.Response.GetResponseStream()) using (var reader = new StreamReader(responseStream, InedoLib.UTF8Encoding)) { var message = reader.ReadToEnd(); var statusCode = ((HttpWebResponse)ex.Response).StatusCode; if (statusCode == HttpStatusCode.InternalServerError && message.StartsWith("<!DOCTYPE")) { message = "Invalid feed URL. Ensure the feed URL follows the format: http://{proget-server}/upack/{feed-name}"; } throw new ProGetException((int)statusCode, message); } } }
public async Task PushPackageAsync(string group, string name, string version, ProGetPackagePushData packageData, Stream content) { if (packageData == null) { throw new ArgumentNullException(nameof(packageData)); } if (string.IsNullOrWhiteSpace(name)) { throw new ArgumentNullException(nameof(name)); } if (string.IsNullOrWhiteSpace(version)) { throw new ArgumentNullException(nameof(version)); } var url = Uri.EscapeDataString(name) + "/" + Uri.EscapeDataString(version); if (!string.IsNullOrEmpty(group)) { url = group + "/" + url; } using (var client = this.CreateClient()) using (var streamContent = new StreamContent(content)) { streamContent.Headers.ContentType = new MediaTypeHeaderValue("application/zip"); using (var response = await client.PostAsync(this.FeedUrl + "upload/" + url + packageData.ToQueryString(), streamContent, this.CancellationToken).ConfigureAwait(false)) { await HandleError(response).ConfigureAwait(false); } } }