/// <summary> /// Runs the doc generator to produce or update a consistent documentation /// set for the SDK. /// </summary> /// <param name="options"></param> /// <returns>0 on successful completion</returns> public int Execute(GeneratorOptions options) { // this is just to record the run duration, so we can monitor and optimize // build-time perf _startTimeTicks = DateTime.Now.Ticks; Options = options; Trace.Listeners.Add(new ConditionalConsoleTraceListener(Options.Verbose)); if (Options.TestMode) SetOptionsForTestMode(); if (string.IsNullOrEmpty(Options.SDKAssembliesRoot)) { Info("ERROR: SDKAssembliesRoot option not set"); return -1; } if (Options.Verbose) { Info("Starting generation with options:"); Info("...TestMode: {0}", Options.TestMode); Info("...Clean: {0}", Options.Clean); Info("...WriteStaticContent: {0}", Options.WriteStaticContent); Info("...WaitOnExit: {0}", Options.WaitOnExit); Info(""); Info("...SDKAssembliesRoot: {0}", Options.SDKAssembliesRoot); Info("...OutputFolder: {0}", Options.OutputFolder); Info("...Platform: {0}", Options.Platform); Info("...Services: {0}", string.Join(",", Options.Services)); Info("...CodeSamplesRootFolder: {0}", Options.CodeSamplesRootFolder); Info(""); } if (options.Clean) FileUtilties.CleanFolder(options.OutputFolder, true); if (!Directory.Exists(options.OutputFolder)) Directory.CreateDirectory(options.OutputFolder); // use the sdk root and primary platform to determine the set of // service manifests to process var manifests = ConstructGenerationManifests(); // We want to aggregate all types(such as AmazonS3Config) under Amazon namespace before generating docs for Core. // Currently, the doc generator will stomp over files with conflicting namespaces across dll. If we encounter manifest // for Core, stash all its types and process it last. List<string> namespacesToIgnore = new List<string> { "Amazon", "Amazon.Util", "Amazon.Runtime", "Amazon.Runtime.SharedInterfaces" }; GenerationManifest coreManifest = null; PartialTypeProvider additionalTypeProvider = new PartialTypeProvider(null); foreach (var m in manifests) { if (m.ServiceName.Equals("Core", StringComparison.InvariantCultureIgnoreCase)) { coreManifest = m; continue; } m.Generate(namespacesToIgnore); foreach(var namespaceName in namespacesToIgnore) { additionalTypeProvider.ProcessTypes(m.AssemblyWrapper.GetTypesForNamespace(namespaceName)); } } coreManifest.AssemblyWrapper.SetSecondaryTypeProvider(additionalTypeProvider); coreManifest.Generate(null); // finish up by outputting/updating the TOC and emitting the static doc framework content if requested // we try and generate the toc based on the .Net 4.5 platform by preference, falling back as necessary GenerateTableOfContents(manifests); CopyVersionInfoManifest(); if (options.WriteStaticContent) { Info("Generating/copying static content:"); Info("...creating landing page"); var lpWriter = new LandingPageWriter(options); lpWriter.Write(); Info("...copying static resources"); var sourceLocation = Directory.GetParent(typeof(SdkDocGenerator).Assembly.Location).FullName; FileUtilties.FolderCopy(Path.Combine(sourceLocation, "output-files"), options.OutputFolder, true); } return 0; }
/// <summary> /// Runs the doc generator to produce or update a consistent documentation /// set for the SDK. /// </summary> /// <param name="options"></param> /// <returns>0 on successful completion</returns> public int Execute(GeneratorOptions options) { // this is just to record the run duration, so we can monitor and optimize // build-time perf _startTimeTicks = DateTime.Now.Ticks; Options = options; Trace.Listeners.Add(new ConditionalConsoleTraceListener(Options.Verbose)); if (Options.TestMode) { SetOptionsForTestMode(); } if (string.IsNullOrEmpty(Options.SDKAssembliesRoot)) { Info("ERROR: SDKAssembliesRoot option not set"); return(-1); } if (Options.Verbose) { Info("Starting generation with options:"); Info("...TestMode: {0}", Options.TestMode); Info("...Clean: {0}", Options.Clean); Info("...WriteStaticContent: {0}", Options.WriteStaticContent); Info("...WaitOnExit: {0}", Options.WaitOnExit); Info(""); Info("...SDKAssembliesRoot: {0}", Options.SDKAssembliesRoot); Info("...OutputFolder: {0}", Options.OutputFolder); Info("...Platform: {0}", Options.Platform); Info("...Services: {0}", string.Join(",", Options.Services)); Info("...CodeSamplesRootFolder: {0}", Options.CodeSamplesRootFolder); Info(""); } if (options.Clean) { FileUtilties.CleanFolder(options.OutputFolder, true); } if (!Directory.Exists(options.OutputFolder)) { Directory.CreateDirectory(options.OutputFolder); } // use the sdk root and primary platform to determine the set of // service manifests to process var manifests = ConstructGenerationManifests(); // We want to aggregate all types(such as AmazonS3Config) under Amazon namespace before generating docs for Core. // Currently, the doc generator will stomp over files with conflicting namespaces across dll. If we encounter manifest // for Core, stash all its types and process it last. List <string> namespacesToIgnore = new List <string> { "Amazon", "Amazon.Util", "Amazon.Runtime", "Amazon.Runtime.SharedInterfaces" }; GenerationManifest coreManifest = null; PartialTypeProvider additionalTypeProvider = new PartialTypeProvider(null); foreach (var m in manifests) { if (m.ServiceName.Equals("Core", StringComparison.InvariantCultureIgnoreCase)) { coreManifest = m; continue; } m.Generate(namespacesToIgnore); foreach (var namespaceName in namespacesToIgnore) { additionalTypeProvider.ProcessTypes(m.AssemblyWrapper.GetTypesForNamespace(namespaceName)); } } coreManifest.AssemblyWrapper.SetSecondaryTypeProvider(additionalTypeProvider); coreManifest.Generate(null); // finish up by outputting/updating the TOC and emitting the static doc framework content if requested // we try and generate the toc based on the .Net 4.5 platform by preference, falling back as necessary GenerateTableOfContents(manifests); CopyVersionInfoManifest(); if (options.WriteStaticContent) { Info("Generating/copying static content:"); Info("...creating landing page"); var lpWriter = new LandingPageWriter(options); lpWriter.Write(); Info("...copying static resources"); var sourceLocation = Directory.GetParent(typeof(SdkDocGenerator).Assembly.Location).FullName; FileUtilties.FolderCopy(Path.Combine(sourceLocation, "output-files"), options.OutputFolder, true); } // Write out all the redirect rules for doc cross-linking. using (Stream stream = File.Open(Path.Combine(options.OutputFolder, SDKDocRedirectWriter.RedirectFileName), FileMode.Create)) { SDKDocRedirectWriter.Write(stream); } return(0); }