Example #1
0
        protected virtual Stream CreateSPFFieldSettingsPackage(ModelNode model, Action <SolutionPackageBase> action)
        {
            // save solution to XML file
            var xmlContext = SPMeta2Model.ToXML(model);

            // pack model
            var solutionPackage = GetSolutionPackageTemplate();

            // update version and add model
            action(solutionPackage);

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

            solutionPackage.AddModel(modelContainer);

            // pack to NuGet package
            var packageService        = new SPMeta2SolutionPackageService();
            var solutionPackageStream = packageService.Pack(solutionPackage);

            return(solutionPackageStream);
        }
Example #2
0
        public MetaPackScenarioTestBase()
        {
            var useSPMeta2Provider       = true;
            var useSharePointPnPProvider = false;

            var files2delete = new List <string>();

            files2delete.AddRange(Directory.GetFiles(Directory.GetCurrentDirectory(), "SPMeta2.CSOM**dll"));
            files2delete.AddRange(Directory.GetFiles(Directory.GetCurrentDirectory(), "Microsoft.SharePoint.Client**dll"));

            foreach (var f in files2delete)
            {
                try
                {
                    System.IO.File.Delete(f);
                }
                catch (Exception e)
                {
                }
            }


            var regressionTraceService = new RegressionTraceService();

            SPMeta2SolutionPackagingService       = new SPMeta2SolutionPackageService();
            SharePointPnPSolutionPackagingService = new SharePointPnPSolutionPackageService();

            MetaPackServiceContainer.Instance.ReplaceService(typeof(TraceServiceBase), regressionTraceService);

            UseLocaNuGet = true;

            InitEnvironmentVariables();

            SPMeta2ServiceContext = new MetaPackServiceContext
            {
                PackagingService  = new SPMeta2SolutionPackageService(),
                DeploymentService = new SPMeta2SolutionPackageDeploymentService(),

                ToolPackage = new SolutionToolPackage
                {
                    Id = "MetaPack.SPMeta2"
                },

                CIPackageId = "MetaPack.SPMeta2.CI"
            };

            SharePointPnPServiceContext = new MetaPackServiceContext
            {
                PackagingService  = new SharePointPnPSolutionPackageService(),
                DeploymentService = new SharePointPnPSolutionDeploymentService(),

                ToolPackage = new SolutionToolPackage
                {
                    Id = "MetaPack.SharePointPnP"
                },

                CIPackageId = "MetaPack.SharePointPnP.CI"
            };

            //if (!Environment.Is64BitProcess)
            //    throw new Exception("x64 process is requred. VS -> Test -> Test Settings -> Default process architecture -> x64");

            // packaging
            MetaPackService = new List <MetaPackServiceContext>();

            if (useSPMeta2Provider)
            {
                MetaPackService.Add(SPMeta2ServiceContext);
            }

            if (useSharePointPnPProvider)
            {
                MetaPackService.Add(SharePointPnPServiceContext);
            }

            var localAssemblyDirectoryPath = Path.GetDirectoryName(GetType().Assembly.Location);
            var localNuGetFolder           = Path.GetFullPath(localAssemblyDirectoryPath + @"\..\..\..\Build\local-ci-packages");

            LocalNuGetRepositoryFolderPath = localNuGetFolder;

            Directory.CreateDirectory(LocalNuGetRepositoryFolderPath);

            if (UseLocaNuGet)
            {
                var toolResolutionService = new ToolResolutionService();
                toolResolutionService.PackageSources.Add(LocalNuGetRepositoryFolderPath);

                // environment varioable must go first so that we can override stuff
                toolResolutionService.InitPackageSourcesFromGetEnvironmentVariable("MetaPack.NuGet.Galleries", EnvironmentVariableTarget.Machine);
                toolResolutionService.InitPackageSourcesFromGetEnvironmentVariable("MetaPack.NuGet.Galleries", EnvironmentVariableTarget.User);
                toolResolutionService.InitPackageSourcesFromGetEnvironmentVariable("MetaPack.NuGet.Galleries", EnvironmentVariableTarget.Process);

                toolResolutionService.InitPackageSourcesFromString(ConfigurationManager.AppSettings["NuGet.Galleries"]);

                toolResolutionService.RefreshPackageManager();

                MetaPackServiceContainer.Instance.RegisterService(typeof(ToolResolutionService), toolResolutionService);
            }
        }
Example #3
0
        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);
        }
        protected virtual IEnumerable<Stream> CreateMetaPackPackages()
        {
            var result = new List<Stream>();

            // pack model
            var solutionPackage = GetSolutionPackageTemplate();

            // update version and add model
            solutionPackage.Version = "0.1.0-beta1";

            var assemblyDirectoryPath = Path.GetDirectoryName(GetType().Assembly.Location);
            var jQueryDirectoryPath = Path.Combine(assemblyDirectoryPath, "jQuery");

            if (!Directory.Exists(jQueryDirectoryPath))
                throw new Exception(string.Format("Cannot find directory:[{0}]", jQueryDirectoryPath));

            var jQueryVersionFolderPaths = Directory.GetDirectories(jQueryDirectoryPath);

            foreach (var versionFolderPath in jQueryVersionFolderPaths)
            {
                var jQueryVersion = Path.GetFileName(versionFolderPath);

                var versionFolderName = (new DirectoryInfo(versionFolderPath)).Name;
                var filePaths = Directory.GetFiles(versionFolderPath, "*.*");

                // create model
                var webModel = SPMeta2Model.NewWebModel(web =>
                {
                    web.AddHostList(BuiltInListDefinitions.StyleLibrary, list =>
                    {
                        list.AddFolder(new FolderDefinition { Name = "jQuery" }, jQueryFolder =>
                        {
                            jQueryFolder.AddFolder(new FolderDefinition { Name = versionFolderName }, folder =>
                            {
                                foreach (var filePath in filePaths)
                                {
                                    folder.AddModuleFile(new ModuleFileDefinition
                                    {
                                        FileName = Path.GetFileName(filePath),
                                        Content = File.ReadAllBytes(filePath)
                                    });
                                }
                            });
                        });
                    });
                });

                // save solution to XML file
                var xmlContext = SPMeta2Model.ToXML(webModel);



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

                modelContainer.AdditionalOptions.Add(new OptionValue
                {
                    Name = "_metapack.model.id",
                    Value = string.Format("jQuery.{0}", jQueryVersion)
                });

                solutionPackage.AddModel(modelContainer);
            }

            // pack to NuGet package
            var packageService = new SPMeta2SolutionPackageService();
            var solutionPackageStream = packageService.Pack(solutionPackage);

            // add to result strems
            result.Add(solutionPackageStream);

            return result;
        }