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 { } } } }
protected virtual void PushPackageToCIRepository( SolutionPackageBase solutionPackage, NuGetSolutionPackageService packagingService ) { PushPackageToCIRepository(solutionPackage, null, packagingService); }
protected virtual void PushPackageToCIRepository( SolutionPackageBase solutionPackage, List <SolutionPackageBase> solutionDependencies, NuGetSolutionPackageService packagingService) { PushPackageToCIRepository(solutionPackage, solutionDependencies, packagingService, UseLocaNuGet); }
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; }
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); } }
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); }
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") }); }
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); }); } }
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); }
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); }
public static Stream Pack(this SolutionPackageServiceBase service, SolutionPackageBase package) { return(service.Pack(package, null)); }
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); }
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); }
public virtual void Push(SolutionPackageBase package, string apiUrl, string apiKey) { Push(package, apiUrl, apiKey, 2 * 60 * 1000, false); }
public abstract Stream Pack(SolutionPackageBase package, SolutionPackageOptions options);
protected virtual ManifestMetadata GetManifestMetadata(SolutionPackageBase solution) { return(GetManifestMetadata <SolutionPackageBase>(solution, null)); }
public override Stream Pack(SolutionPackageBase package, SolutionPackageOptions options) { throw new NotImplementedException(); }