Ejemplo n.º 1
0
        /// <summary>
        /// Execute the PowerShell script that creates a manifest of the root package folder.
        /// </summary>
        /// <param name="packageData"></param>
        private static bool ExecuteManifestScript(PackageData packageData)
        {
            Logger.Log("Beginning execution of Manifest script for the " + packageData.PackageName + " package");

            using (PowerShell PowerShellInstance = PowerShell.Create())
            {
                PowerShellInstance.AddScript(PackageManager.Properties.Resources.Get_Md5Manifest);
                PowerShellInstance.AddParameter("Target", packageData.RootPackageFolder);
                PowerShellInstance.AddParameter("Recurse", true);

                Collection <PSObject> PSOutput = PowerShellInstance.Invoke();
                PSObject outputItem            = PSOutput.FirstOrDefault();

                if (outputItem != null)
                {
                    string outputManifest = packageData.RootPackageFolder + Path.DirectorySeparatorChar + packageData.PackageName + ".manfiest.json";
                    File.Create(outputManifest).Dispose();

                    using (var sw = new StreamWriter(outputManifest, true))
                    {
                        sw.Write(outputItem.BaseObject.ToString());
                    }
                }
                else
                {
                    Logger.Log("Failed to create a manifest file for the package");
                    return(false);
                }
            }

            Logger.Log("Manifest file created successfully");
            return(true);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Reads the input file to the program. This is where paramaters are provided for creating the package.
        /// </summary>
        /// <param name="inputFile"> Path to the input file. </param>
        /// <param name="packageData"> Data object for the package. </param>
        private static void ReadInputFileData(string inputFile, PackageData packageData)
        {
            try
            {
                Logger.Log("Reading input file");

                using (var streamReader = new StreamReader(new FileStream(inputFile, FileMode.Open, FileAccess.Read)))
                {
                    while (!streamReader.EndOfStream)
                    {
                        dynamic inputJson = JsonConvert.DeserializeObject(streamReader.ReadToEnd());

                        packageData.PackageName        = inputJson.PACKAGE_NAME;
                        packageData.Date               = inputJson.DATE;
                        packageData.BusinessItem       = inputJson.BUSINESS_ITEM;
                        packageData.Prerequisites      = inputJson.PREREQUISITES.ToObject <string[]>();
                        packageData.PackageDescription = inputJson.PACKAGE_DESCRIPTION;
                    }
                }

                Logger.Log("Finished reading input file");
            }
            catch (Exception e)
            {
                FatalError("Fatal Error reading input file: " + e.Message);
            }
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Sets the booleans that determine what key items are going to be a part of the package being created.
 /// </summary>
 /// <param name="packageData"> The data object for the package </param>
 private static void SetPackageContentBooleans(PackageData packageData)
 {
     packageData.HasForms            = !IsDirectoryEmpty(packageData.InputInstallFormsFolder);
     packageData.HasFirmware         = !IsDirectoryEmpty(packageData.InputInstallFirmwareFolder);
     packageData.HasFormsRollback    = !IsDirectoryEmpty(packageData.InputRollbackFormsFolder);
     packageData.HasFirmwareRollback = !IsDirectoryEmpty(packageData.InputRollbackFirmwareFolder);
 }
Ejemplo n.º 4
0
        static void Main(string[] args)
        {
            Logger.Log("Package Manager Start");

            PackageData packageData = new PackageData();

            packageData.InputInstallFormsFolder     = CreateFolder(CurrentFolder + Path.DirectorySeparatorChar, "install-forms");
            packageData.InputInstallFirmwareFolder  = CreateFolder(CurrentFolder + Path.DirectorySeparatorChar, "install-firmware");
            packageData.InputRollbackFormsFolder    = CreateFolder(CurrentFolder + Path.DirectorySeparatorChar, "rollback-forms");
            packageData.InputRollbackFirmwareFolder = CreateFolder(CurrentFolder + Path.DirectorySeparatorChar, "rollback-firmware");

            if (args.Length != 1)
            {
                ShowUsage();
                CreateSampleInputFile();
                FatalError("This program requires a json file passed as it's only argument. An example input file has been provided in the " +
                           "same directory from whence you ran the executable. Please try again");
            }

            string inputFile            = args[0];
            bool   inputFileIsValid     = ValidateInputFile(inputFile, ".json");
            bool   inputFoldersAreValid = ValidateInputFolders(packageData);

            if (!inputFileIsValid || !inputFoldersAreValid)
            {
                ShowUsage();
                CreateSampleInputFile();
                FatalError("The input file or input folders were not in a valid state. An example input file has been provided in the" +
                           "same directory from whence you ran the executable. Please try again.");
            }

            ReadInputFileData(inputFile, packageData);
            SetPackageContentBooleans(packageData);
            CreatePackageFolders(packageData);

            FileBuilder fileBuilder = new FileBuilder(packageData);

            BuildPackageFiles(fileBuilder, packageData);

            if (packageData.HasRollback)
            {
                HandleRollbackItems(packageData, fileBuilder);
            }

            ManifestPackage(packageData);
            CleanExecutableDirectory(packageData);

            Logger.Log("Package Manager End");
            Logger.Dispose();
        }
Ejemplo n.º 5
0
 /// <summary>
 /// Handle the creation of the file manifest for the package.
 /// </summary>
 /// <param name="packageData"> The data object for the package </param>
 private static void ManifestPackage(PackageData packageData)
 {
     if (ExecuteManifestScript(packageData))
     {
         Logger.Log("Manifest created successfully");
     }
     else
     {
         Console.WriteLine("Warning, the manifest file for this package was not able to be generated. All other package " +
                           "items were created successfully.");
         Console.WriteLine();
         Console.WriteLine("Press any key to continue");
         Console.ReadKey();
     }
 }
Ejemplo n.º 6
0
        /// <summary>
        /// Build all of the various files associated with a package.
        /// </summary>
        /// <param name="fileBuilder"> The file builder object, which contains methods for building each file type. </param>
        /// <param name="packageData"> The data object for the package </param>
        private static void BuildPackageFiles(FileBuilder fileBuilder, PackageData packageData)
        {
            string rootReadMe    = CreateFile(packageData.RootPackageFolder, "readme.md");
            string changeLogFile = CreateFile(packageData.RootPackageFolder, "changelog.txt");
            string verifyReadMe  = CreateFile(packageData.VerifyFolder, "readme.md");
            string touchScript   = CreateFile(packageData.ScriptsFolder, "touch.cmd");
            string installReadMe = CreateFile(packageData.InstallFolder, "readme.md");
            string installScript = CreateFile(packageData.InstallFolder, "install.cmd");

            fileBuilder.BuildRootReadMe(rootReadMe);
            fileBuilder.BuildChangeLog(changeLogFile);
            fileBuilder.BuildVerifyReadMe(verifyReadMe);
            fileBuilder.BuildTouchScript(touchScript);
            fileBuilder.BuildInstallReadMe(installReadMe);
            fileBuilder.BuildInstallScript(installScript);
        }
Ejemplo n.º 7
0
 /// <summary>
 /// Clean up the folder where the executable resides by getting rid of any remaining input folders.
 /// </summary>
 /// <param name="packageData"> The data object for the package </param>
 private static void CleanExecutableDirectory(PackageData packageData)
 {
     if (Directory.Exists(packageData.InputInstallFormsFolder))
     {
         Directory.Delete(packageData.InputInstallFormsFolder);
     }
     if (Directory.Exists(packageData.InputInstallFirmwareFolder))
     {
         Directory.Delete(packageData.InputInstallFirmwareFolder);
     }
     if (Directory.Exists(packageData.InputRollbackFormsFolder))
     {
         Directory.Delete(packageData.InputRollbackFormsFolder);
     }
     if (Directory.Exists(packageData.InputRollbackFirmwareFolder))
     {
         Directory.Delete(packageData.InputRollbackFirmwareFolder);
     }
 }
Ejemplo n.º 8
0
        /// <summary>
        /// Creates the core folders for the package.
        /// </summary>
        /// <param name="packageData"> The data object for the package </param>
        private static void CreatePackageFolders(PackageData packageData)
        {
            packageData.RootPackageFolder = CreateFolder(CurrentFolder, packageData.PackageName);
            packageData.InstallFolder     = CreateFolder(packageData.RootPackageFolder, "install");
            packageData.ScriptsFolder     = CreateFolder(packageData.RootPackageFolder, "scripts");
            packageData.VerifyFolder      = CreateFolder(packageData.RootPackageFolder, "verify");

            if (packageData.HasForms)
            {
                packageData.InstallForms            = GetFolderFiles(packageData.InputInstallFormsFolder);
                packageData.FinalInstallFormsFolder = packageData.InstallFolder + "\\Forms";
                Directory.Move(packageData.InputInstallFormsFolder, packageData.FinalInstallFormsFolder);
            }

            if (packageData.HasFirmware)
            {
                packageData.InstallFirmware            = GetFolderFiles(packageData.InputInstallFirmwareFolder);
                packageData.FinalInstallFirmwareFolder = packageData.InstallFolder + "\\Firmware";
                Directory.Move(packageData.InputInstallFirmwareFolder, packageData.FinalInstallFirmwareFolder);
            }
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Handles all items related to a rollback, if the package has one.
        /// </summary>
        /// <param name="packageData"> The data object for the package </param>
        /// <param name="fileBuilder"> The file building object, containing methods to build each file type for the package </param>
        private static void HandleRollbackItems(PackageData packageData, FileBuilder fileBuilder)
        {
            packageData.RollbackFolder = CreateFolder(packageData.RootPackageFolder, "rollback");
            string rollbackReadMe = CreateFile(packageData.RollbackFolder, "readme.md");
            string rollbackScript = CreateFile(packageData.RollbackFolder, "rollback.cmd");

            if (packageData.HasFormsRollback)
            {
                packageData.RollbackForms            = GetFolderFiles(packageData.InputRollbackFormsFolder);
                packageData.FinalRollbackFormsFolder = packageData.RollbackFolder + "\\Forms";
                Directory.Move(packageData.InputRollbackFormsFolder, packageData.FinalRollbackFormsFolder);
            }

            if (packageData.HasFirmwareRollback)
            {
                packageData.RollbackFirmware            = GetFolderFiles(packageData.InputRollbackFirmwareFolder);
                packageData.FinalRollbackFirmwareFolder = packageData.RollbackFolder + "\\Firmware";
                Directory.Move(packageData.InputRollbackFirmwareFolder, packageData.FinalRollbackFirmwareFolder);
            }

            fileBuilder.BuildRollbackReadMe(rollbackReadMe);
            fileBuilder.BuildRollbackScript(rollbackScript);
        }
Ejemplo n.º 10
0
 public FileBuilder(PackageData packageData)
 {
     Logger      = Logger.LoggerInstance;
     PackageData = packageData;
 }
Ejemplo n.º 11
0
 /// <summary>
 /// Check's the validity of the input folders for the program. Forgive me for this boolean logic.
 /// </summary>
 /// <param name="packageData"> The data object for the package </param>
 /// <returns> True or false, true if things are good, false if they aren't. </returns>
 private static bool ValidateInputFolders(PackageData packageData)
 {
     return(Directory.Exists(packageData.InputInstallFormsFolder) && Directory.Exists(packageData.InputRollbackFormsFolder) &&
            Directory.Exists(packageData.InputInstallFirmwareFolder) && Directory.Exists(packageData.InputRollbackFirmwareFolder) &&
            (!IsDirectoryEmpty(packageData.InputInstallFormsFolder) || !IsDirectoryEmpty(packageData.InputInstallFirmwareFolder)));
 }