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);
        }
Exemplo n.º 3
0
        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);
                    }
            }
        }
Exemplo n.º 4
0
        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);
                    }
                }
        }