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); }
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); } }
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; }