コード例 #1
0
        public virtual void Push(SolutionPackageBase package, string apiUrl, string apiKey,
                                 int timeoutInMilliseconds,
                                 bool disableBuffering)
        {
            var packageFileFolder = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString("N"));
            var packageFilePath   = Path.Combine(packageFileFolder,
                                                 string.Format("{0}.{1}.nupkg", package.Id, package.Version));

            Directory.CreateDirectory(packageFileFolder);

            try
            {
                this.PackToFile(package, packageFilePath);

                var packageFile = new FileInfo(packageFilePath);
                var packageSize = packageFile.Length;

                var nuGetPackage = new ZipPackage(packageFilePath);

                Push(nuGetPackage, packageSize, apiUrl, apiKey, timeoutInMilliseconds, disableBuffering);
            }
            finally
            {
                if (File.Exists(packageFilePath))
                {
                    try
                    {
                        File.Delete(packageFilePath);
                    }
                    catch
                    {
                    }
                }
            }
        }
コード例 #2
0
 protected virtual void PushPackageToCIRepository(
     SolutionPackageBase solutionPackage,
     NuGetSolutionPackageService packagingService
     )
 {
     PushPackageToCIRepository(solutionPackage, null, packagingService);
 }
コード例 #3
0
 protected virtual void PushPackageToCIRepository(
     SolutionPackageBase solutionPackage,
     List <SolutionPackageBase> solutionDependencies,
     NuGetSolutionPackageService packagingService)
 {
     PushPackageToCIRepository(solutionPackage, solutionDependencies, packagingService, UseLocaNuGet);
 }
コード例 #4
0
        protected virtual SolutionPackageBase GetSolutionPackageTemplate()
        {
            var solutionPackage = new SolutionPackageBase();

            solutionPackage.Description = "SharePoint Flow Image Field. The SharePoint CSR UI control for working with pictures/images in field (upload, select from library)";

            solutionPackage.Authors = "DefinitelyPacked";
            solutionPackage.Company = "DefinitelyPacked";
            solutionPackage.Owners  = "DefinitelyPacked";

            solutionPackage.ReleaseNotes = string.Empty;
            solutionPackage.Summary      = string.Empty;

            solutionPackage.ProjectUrl = "https://github.com/SubPointSolutions/DefinitelyPacked";
            solutionPackage.IconUrl    = "https://sergeisnitko.github.io/repos/images/arvo_logo_simple.png";
            solutionPackage.LicenseUrl = "https://opensource.org/licenses/MIT";

            solutionPackage.Copyright = string.Empty;
            solutionPackage.Tags      = "SharePoint SP2013 Foundation Standard Enterprise SPO SharePointOnline O365 Office365 Office365Dev Provision SPMeta2 ARVO SPF SPFlow JavaScript CSR Client-Side Rendering";

            // flag a provider which will be used for solution package deployment
            solutionPackage.AdditionalOptions.Add(new OptionValue
            {
                Name  = DefaultOptions.SolutionToolPackage.PackageId.Id,
                Value = "MetaPack.SPMeta2"
            });

            return(solutionPackage);
        }
        private static SolutionPackageBase GetSolutionPackageTemplate()
        {
            var solutionPackage = new SolutionPackageBase();

            solutionPackage.Name = "DefinitelyPacked.jQuery";
            solutionPackage.Title = "DefinitelyPacked.jQuery";

            solutionPackage.Description = "Delivers jQuery JavaScript library to 'Style library'";
            solutionPackage.Id = "DefinitelyPacked.jQuery";

            solutionPackage.Authors = "DefinitelyPacked";
            solutionPackage.Company = "DefinitelyPacked";
            solutionPackage.Owners = "DefinitelyPacked";

            solutionPackage.ReleaseNotes = string.Empty;
            solutionPackage.Summary = string.Empty;
            solutionPackage.ProjectUrl = "https://github.com/SubPointSolutions/DefinitelyPacked";
            solutionPackage.IconUrl = "https://github.com/SubPointSolutions/DefinitelyPacked/DefinitelyPacked.png";
            solutionPackage.LicenseUrl = "https://opensource.org/licenses/MIT";

            solutionPackage.Copyright = string.Empty;
            solutionPackage.Tags = "jQuery SPMeta2 MetaPack DefinitelyPacked SharePoint Office365 Office365Dev SharePointOnline";

            // flag a provider which will be used for solution package deployment
            solutionPackage.AdditionalOptions.Add(new OptionValue
            {
                Name = DefaultOptions.SolutionToolPackage.PackageId.Id,
                Value = "MetaPack.SPMeta2"
            });

            return solutionPackage;
        }
コード例 #6
0
        public static void PackToFile(this SolutionPackageServiceBase service, SolutionPackageBase package, string filePath)
        {
            var packageStream = service.Pack(package, null);

            using (var fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write))
            {
                packageStream.CopyTo(fileStream);
            }
        }
コード例 #7
0
        protected virtual ManifestMetadata GetManifestMetadata <TSolutionPackage>(SolutionPackageBase package, Action <TSolutionPackage, ManifestMetadata> action)
            where TSolutionPackage : SolutionPackageBase
        {
            var metadata = new ManifestMetadata()
            {
                Title       = package.Title,
                Description = package.Description,
                Id          = package.Id,
                Authors     = package.Authors,

                Version = package.Version,
                Owners  = package.Owners,

                ReleaseNotes = package.ReleaseNotes,
                Summary      = package.Summary,

                ProjectUrl = package.ProjectUrl,
                IconUrl    = package.IconUrl,
                LicenseUrl = package.LicenseUrl,
                Copyright  = package.Copyright,
                Tags       = package.Tags
            };

            if (package.Dependencies.Any())
            {
                if (metadata.DependencySets == null)
                {
                    metadata.DependencySets = new List <ManifestDependencySet>();
                }

                var dependencySet = new ManifestDependencySet
                {
                    Dependencies = new List <ManifestDependency>()
                };

                foreach (var dependency in package.Dependencies)
                {
                    dependencySet.Dependencies.Add(new ManifestDependency
                    {
                        Id      = dependency.Id,
                        Version = dependency.Version
                    });
                }

                metadata.DependencySets.Add(dependencySet);
            }

            if (action != null && package is TSolutionPackage)
            {
                action(package as TSolutionPackage, metadata);
            }

            return(metadata);
        }
コード例 #8
0
        protected static void UpdatePackageVersion(SolutionPackageBase package)
        {
            var date = DateTime.UtcNow;

            package.Version = string.Format("1.{0}.{1}.{2}-alpha{3}",
                                            new string[] {
                date.ToString("yyyy"),
                date.ToString("MMdd"),
                date.ToString("HHHmmss"),
                date.ToString("fff")
            });
        }
コード例 #9
0
        protected virtual void PushPackageToCIRepository(
            SolutionPackageBase solutionPackage,
            List <SolutionPackageBase> solutionDependencies,
            NuGetSolutionPackageService packagingService,
            bool useLocal
            )
        {
            IPackageRepository repo = null;

            if (solutionDependencies != null)
            {
                foreach (var soutionDependency in solutionDependencies)
                {
                    if (useLocal)
                    {
                        var filePath = Path.Combine(LocalNuGetRepositoryFolderPath,
                                                    String.Format("{0}.{1}.nupkg", soutionDependency.Id, soutionDependency.Version));
                        packagingService.PackToFile(soutionDependency, filePath);
                    }
                    else
                    {
                        WithCINuGetContext((apiUrl, apiKey, repoUrl) =>
                        {
                            packagingService.Push(soutionDependency, apiUrl, apiKey);
                        });
                    }
                }
            }

            if (useLocal)
            {
                var filePath = Path.Combine(LocalNuGetRepositoryFolderPath,
                                            String.Format("{0}.{1}.nupkg", solutionPackage.Id, solutionPackage.Version));
                packagingService.PackToFile(solutionPackage, filePath);
            }
            else
            {
                WithCINuGetContext((apiUrl, apiKey, repoUrl) =>
                {
                    packagingService.Push(solutionPackage, apiUrl, apiKey);
                });
            }
        }
コード例 #10
0
        public override Stream Pack(SolutionPackageBase package, SolutionPackageOptions options)
        {
            var typedPackage = package;

            MetaPackTrace.Verbose("Packing solution package...");

            // create result stream and NuGet package
            var resultStream = new MemoryStream();
            var metadata     = GetManifestMetadata(package);

            var nugetPackageBuilder = new PackageBuilder();

            var solutionPackageManifestFile = new ManifestFile();
            var solutionFilePath            = SaveMetaPackSolutionFile <SolutionPackageBase>(solutionPackageManifestFile, typedPackage);

            nugetPackageBuilder.PopulateFiles("", new[] { solutionPackageManifestFile });
            nugetPackageBuilder.Populate(metadata);

            // TODO
            // implement container persistance

            var models = package.GetModels();

            foreach (var model in models)
            {
                var modelManifestFile = GetModelManifestFile(model);
                nugetPackageBuilder.PopulateFiles("", new[] { modelManifestFile });
            }

            // save nuget package into the final stream
            nugetPackageBuilder.Save(resultStream);

            resultStream.Position = 0;

            MetaPackTrace.Verbose("Packing solution package completed...");

            return(resultStream);
        }
コード例 #11
0
        protected virtual SolutionPackageBase CreateNewSolutionPackage(
            NuGetSolutionPackageService service,
            Action <SolutionPackageBase> action,
            RegressinModelLevel modelLevel)
        {
            var knownPackageType = false;

            SolutionPackageBase solutionPackage = null;

            if (service is SPMeta2SolutionPackageService)
            {
                var m2package = new SolutionPackageBase();

                m2package.Name  = "SPMeta2 CI Package Name";
                m2package.Title = "SPMeta2 CI Package Title";

                m2package.Description = "SPMeta2 CI Package description";
                m2package.Id          = "MetaPack.SPMeta2.CI";
                m2package.Authors     = "SubPoint Solutions Authors";
                m2package.Company     = "SubPoint Solutions Company";
                m2package.Version     = "1.0.0.0";
                m2package.Owners      = "SubPoint Solutions Owners";

                m2package.ReleaseNotes = "ReleaseNotes";
                m2package.Summary      = "Summary";
                m2package.ProjectUrl   = "https://github.com/SubPointSolutions/metapack";
                m2package.IconUrl      = "https://github.com/SubPointSolutions/metapack/metapack.png";
                m2package.LicenseUrl   = "https://opensource.org/licenses/MIT";

                m2package.Copyright = "Some copyright here";
                m2package.Tags      = "CI SPMeta2 MetaPack Tags";

                var models = new List <ModelNode>();

                switch (modelLevel)
                {
                case RegressinModelLevel.Farm:
                    models.Add(SPMeta2Model.NewFarmModel(farm => { }));
                    break;

                case RegressinModelLevel.WebApplication:
                    models.Add(SPMeta2Model.NewWebApplicationModel(webApp => { }));
                    break;

                case RegressinModelLevel.Site:
                    models.Add(SPMeta2Model.NewSiteModel(site => { }));
                    models.Add(SPMeta2Model.NewWebModel(web => { }));
                    break;

                case RegressinModelLevel.Web:
                    models.Add(SPMeta2Model.NewWebModel(web => { }));
                    break;

                case RegressinModelLevel.Subweb:
                    models.Add(SPMeta2Model.NewWebModel(web => { }));
                    break;

                default:
                    throw new NotImplementedException(string.Format(
                                                          "Unsupported model level:[{0}] for model genaration",
                                                          modelLevel));
                }

                var index = 0;

                foreach (var model in models)
                {
                    index++;

                    var xmlContext = SPMeta2Model.ToXML(model);

                    var modelContainer = new ModelContainerBase
                    {
                        Model = Encoding.UTF8.GetBytes(xmlContext),
                    };

                    modelContainer.AdditionalOptions.Add(new OptionValue
                    {
                        Name  = DefaultOptions.Model.Order.Id,
                        Value = index.ToString()
                    });

                    m2package.AddModel(modelContainer);
                }

                m2package.AdditionalOptions.Add(new OptionValue
                {
                    Name  = DefaultOptions.SolutionToolPackage.PackageId.Id,
                    Value = "MetaPack.SPMeta2"
                });

                solutionPackage = m2package;
            }

            if (service is SharePointPnPSolutionPackageService)
            {
                var pnpPackage = new SolutionPackageBase();

                pnpPackage.Name  = "SharePointPnP CI Package Name";
                pnpPackage.Title = "SharePointPnP Package Title";

                pnpPackage.Description = "SPMeta2 CI Package description";
                pnpPackage.Id          = "MetaPack.SharePointPnP.CI";
                pnpPackage.Authors     = "SubPoint Solutions Authors";
                pnpPackage.Company     = "SubPoint Solutions Company";
                pnpPackage.Version     = "1.0.0.0";
                pnpPackage.Owners      = "SubPoint Solutions Owners";

                pnpPackage.ReleaseNotes = "ReleaseNotes";
                pnpPackage.Summary      = "Summary";
                pnpPackage.ProjectUrl   = "https://github.com/SubPointSolutions/metapack";
                pnpPackage.IconUrl      = "https://github.com/SubPointSolutions/metapack/metapack.png";
                pnpPackage.LicenseUrl   = "https://opensource.org/licenses/MIT";

                pnpPackage.Copyright = "Some copyright here";
                pnpPackage.Tags      = "CI SPMeta2 MetaPack Tags";


                // TODO
                // Zip up and set the model type
                var asmFolder = Path.GetDirectoryName(GetType().Assembly.Location);

                var foldersPath       = Path.Combine(asmFolder, @"Data/PnPTemplates/Folders");
                var openXmlFolderPath = Path.Combine(asmFolder, @"Data/PnPTemplates/OpenXML");

                foreach (var templateFolder in Directory.GetDirectories(foldersPath))
                {
                    // package up into zip
                    var templateFolderZipFile = GetTempZipFilePath();
                    ZipFile.CreateFromDirectory(templateFolder, templateFolderZipFile);

                    var modelContainer = new ModelContainerBase
                    {
                        Model = System.IO.File.ReadAllBytes(templateFolderZipFile),
                    };

                    modelContainer.AdditionalOptions.Add(new OptionValue
                    {
                        Name  = DefaultOptions.Model.Type.Id,
                        Value = "SharePointPnP.FolderZip"
                    });

                    pnpPackage.AddModel(modelContainer);
                }



                var openXmlPackages = Directory.GetFiles(openXmlFolderPath, "*.pnp");

                foreach (var file in openXmlPackages)
                {
                    var modelContainer = new ModelContainerBase
                    {
                        Model = System.IO.File.ReadAllBytes(file),
                    };

                    modelContainer.AdditionalOptions.Add(new OptionValue
                    {
                        Name  = DefaultOptions.Model.Type.Id,
                        Value = "SharePointPnP.OpenXml"
                    });

                    pnpPackage.AddModel(modelContainer);
                }

                pnpPackage.AdditionalOptions.Add(new OptionValue
                {
                    Name  = DefaultOptions.SolutionToolPackage.PackageId.Id,
                    Value = "MetaPack.SharePointPnP"
                });

                solutionPackage = pnpPackage;
            }

            if (solutionPackage == null)
            {
                throw new NotImplementedException(string.Format(
                                                      "Unknown service type:[{0}]", service.GetType()));
            }

            if (action != null)
            {
                action(solutionPackage);
            }

            return(solutionPackage);
        }
コード例 #12
0
 public static Stream Pack(this SolutionPackageServiceBase service, SolutionPackageBase package)
 {
     return(service.Pack(package, null));
 }
コード例 #13
0
ファイル: Index.cs プロジェクト: qzrGG/MetaPack
        public void Create_Package_PnP()
        {
            // A high level abstraction for solution package.
            // Follows NuGet spec design - https://docs.nuget.org/ndocs/schema/nuspec
            // Solution package is a container for SERIALIZED models.
            // It means that solution package does not depend on a particular API oe assembly so that  models have to be in serialazable, platform and api independent way.

            var solutionPackage = new SolutionPackageBase();

            solutionPackage.Name  = "Contoso Intranet PnP - Site Fields";
            solutionPackage.Title = "Contoso Intranet PnP - Site Fields";

            solutionPackage.Description = "Contains site level fields for Contoso intranet";
            solutionPackage.Id          = "Contoso.Intranet.SiteFields.PnP";
            solutionPackage.Authors     = "SubPoint Solutions";
            solutionPackage.Company     = "SubPoint Solutions";
            solutionPackage.Version     = "1.0.0.0";
            solutionPackage.Owners      = "SubPoint Solutions";

            solutionPackage.ReleaseNotes = "Initial set of the site fields for Contoso Intranet";
            solutionPackage.Summary      = "All site fields required for Contoso intranet";
            solutionPackage.ProjectUrl   = "https://github.com/SubPointSolutions/DefinitelyPacked";
            solutionPackage.IconUrl      = "https://github.com/SubPointSolutions/metapack/metapack.png";
            solutionPackage.LicenseUrl   = "https://opensource.org/licenses/MIT";

            solutionPackage.Copyright = "All yours";
            solutionPackage.Tags      = "MetaPack SPMeta2 SiteFields Taxonomy";

            // create a new ModelContainerBase for every SharePointPnP solution
            // * currently only OpenXML PnP packages as supported
            // then add to solution package
            // you can put "Order" option to control deployment order of the models

            // all your SharePointPnP OpenXML packages
            var allPnPOpenXmlFiles = new List <string>();

            for (var index = 0; index < allPnPOpenXmlFiles.Count; index++)
            {
                var pnpPackageFilePath = allPnPOpenXmlFiles[index];
                var pnpPackageBytes    = System.IO.File.ReadAllBytes(pnpPackageFilePath);

                var modelContainer = new ModelContainerBase
                {
                    Model = pnpPackageBytes
                };

                // add sort order to control deployment order of the models
                modelContainer.AdditionalOptions.Add(new OptionValue
                {
                    Name  = DefaultOptions.Model.Order.Id,
                    Value = index.ToString()
                });

                // add type of the SharePointPnP package
                // current only OpenXml is supoported
                modelContainer.AdditionalOptions.Add(new OptionValue
                {
                    Name  = DefaultOptions.Model.Type.Id,
                    Value = "SharePointPnP.OpenXml"
                });

                // add model container to solution
                solutionPackage.AddModel(modelContainer);
            }

            // flag a provider which will be used for solution package deployment
            solutionPackage.AdditionalOptions.Add(new OptionValue
            {
                Name  = DefaultOptions.SolutionToolPackage.PackageId.Id,
                Value = "MetaPack.SharePointPnP"
            });

            var solutionPackageService = new SharePointPnPSolutionPackageService();

            // save your NuGet solution package as stream
            var nuGetPackageStream = solutionPackageService.Pack(solutionPackage, null);

            // or save it straight to file, for instance, on shared folder
            solutionPackageService.PackToFile(solutionPackage, "Contoso.Intranet.SiteFields.PnP.nupkg");

            // or push it straight to NuGet gallery you've got - http://NuGet.org or http://MyGet.org
            // follow instructions on how obtain Url/Key for a specific NuGet Gallery
            var nuGetGallery_ApiUrl = "";
            var nuGetGallery_ApiKey = "";

            solutionPackageService.Push(solutionPackage, nuGetGallery_ApiUrl, nuGetGallery_ApiKey);
        }
コード例 #14
0
ファイル: Index.cs プロジェクト: qzrGG/MetaPack
        public void Create_Package_SPMeta2()
        {
            // Follows NuGet spec design - https://docs.nuget.org/ndocs/schema/nuspec
            // Solution package is a container for SERIALIZED models.
            var solutionPackage = new SolutionPackageBase();

            solutionPackage.Name  = "Contoso Intranet SPMeta2 - Site Fields";
            solutionPackage.Title = "Contoso Intranet SPMeta2 - Site Fields";

            solutionPackage.Description = "Contains site level fields for Contoso intranet";
            solutionPackage.Id          = "Contoso.Intranet.SiteFields.SPMeta2";
            solutionPackage.Authors     = "SubPoint Solutions";
            solutionPackage.Company     = "SubPoint Solutions";
            solutionPackage.Version     = "1.0.0.0";
            solutionPackage.Owners      = "SubPoint Solutions";

            solutionPackage.ReleaseNotes = "Initial set of the site fields for Contoso Intranet";
            solutionPackage.Summary      = "All site fields required for Contoso intranet";
            solutionPackage.ProjectUrl   = "https://github.com/SubPointSolutions/DefinitelyPacked";
            solutionPackage.IconUrl      = "https://github.com/SubPointSolutions/metapack/metapack.png";
            solutionPackage.LicenseUrl   = "https://opensource.org/licenses/MIT";

            solutionPackage.Copyright = "All yours";
            solutionPackage.Tags      = "MetaPack SPMeta2 SiteFields Taxonomy";

            // here are all your SPMeta2 models
            var models = new List <ModelNode>();

            // create a new ModelContainerBase for every model
            // and then add to solution package
            // you can put "Order" option to control deployment order of the models

            for (var index = 0; index < models.Count; index++)
            {
                var model      = models[index];
                var xmlContext = SPMeta2Model.ToXML(model);

                // create ModelContainerBase, put serialized model there
                var modelContainer = new ModelContainerBase
                {
                    Model = Encoding.UTF8.GetBytes(xmlContext),
                };

                // add sort order to control deployment order of the models
                modelContainer.AdditionalOptions.Add(new OptionValue
                {
                    Name  = DefaultOptions.Model.Order.Id,
                    Value = index.ToString()
                });

                // add model container to solution
                solutionPackage.AddModel(modelContainer);
            }

            // flag a provider which will be used for solution package deployment
            solutionPackage.AdditionalOptions.Add(new OptionValue
            {
                Name  = DefaultOptions.SolutionToolPackage.PackageId.Id,
                Value = "MetaPack.SPMeta2"
            });

            var solutionPackageService = new SPMeta2SolutionPackageService();

            // save your NuGet solution package as stream
            var nuGetPackageStream = solutionPackageService.Pack(solutionPackage, null);

            // or save it straight to file, for instance, on shared folder
            solutionPackageService.PackToFile(solutionPackage, "Contoso.Intranet.SiteFields.SPMeta2.nupkg");

            // or push it straight to NuGet gallery you've got - http://NuGet.org or http://MyGet.org
            // follow instructions on how obtain Url/Key for a specific NuGet Gallery
            var nuGetGallery_ApiUrl = "";
            var nuGetGallery_ApiKey = "";

            solutionPackageService.Push(solutionPackage, nuGetGallery_ApiUrl, nuGetGallery_ApiKey);
        }
コード例 #15
0
 public virtual void Push(SolutionPackageBase package, string apiUrl, string apiKey)
 {
     Push(package, apiUrl, apiKey, 2 * 60 * 1000, false);
 }
コード例 #16
0
 public abstract Stream Pack(SolutionPackageBase package, SolutionPackageOptions options);
コード例 #17
0
 protected virtual ManifestMetadata GetManifestMetadata(SolutionPackageBase solution)
 {
     return(GetManifestMetadata <SolutionPackageBase>(solution, null));
 }
コード例 #18
0
 public override Stream Pack(SolutionPackageBase package, SolutionPackageOptions options)
 {
     throw new NotImplementedException();
 }