diff --git a/scripts/CommandBuilders/CopyCommandBuilder.py b/scripts/CommandBuilders/CopyCommandBuilder.py index 475cdc8..297557f 100644 --- a/scripts/CommandBuilders/CopyCommandBuilder.py +++ b/scripts/CommandBuilders/CopyCommandBuilder.py @@ -3,11 +3,6 @@ from parser.CopyParser.CopyLineParser import CopyLineParser class CopyCommandBuilder: - def __init__(self, pathProvider): - assert pathProvider is not None - - self.__pathProvider = pathProvider - def isCopy(self, line): assert line is not None @@ -19,5 +14,5 @@ class CopyCommandBuilder: parser = CopyLineParser() cpArg = parser.parseLine(line) - command = CopyCommand(self.__pathProvider, cpArg) + command = CopyCommand(cpArg) return command diff --git a/scripts/CommandBuilders/CreateBackupCommandBuilder.py b/scripts/CommandBuilders/CreateBackupCommandBuilder.py index f1f7f17..79b7cbb 100644 --- a/scripts/CommandBuilders/CreateBackupCommandBuilder.py +++ b/scripts/CommandBuilders/CreateBackupCommandBuilder.py @@ -3,11 +3,6 @@ from parser.BackupParser.CreateBackupParser import CreateBackupParser class CreateBackupCommandBuilder: - def __init__(self, pathProvider): - assert pathProvider is not None - - self.__pathProvider = pathProvider - def isCreateBackup(self, line): assert line is not None @@ -20,5 +15,5 @@ class CreateBackupCommandBuilder: parser = CreateBackupParser() backupArguments = parser.parseLine(line) - command = CreateBackupCommand(self.__pathProvider, backupArguments) + command = CreateBackupCommand(backupArguments) return command diff --git a/scripts/CommandBuilders/DeleteBackupCommandBuilder.py b/scripts/CommandBuilders/DeleteBackupCommandBuilder.py index 0e9eb76..49b8259 100644 --- a/scripts/CommandBuilders/DeleteBackupCommandBuilder.py +++ b/scripts/CommandBuilders/DeleteBackupCommandBuilder.py @@ -3,10 +3,6 @@ from parser.BackupParser.DeleteBackupParser import DeleteBackupParser class DeleteBackupCommandBuilder: - def __init__(self, pathProvider): - assert pathProvider is not None - self.__pathProvider = pathProvider - def isDeleteBackup(self, line): assert line is not None @@ -21,5 +17,5 @@ class DeleteBackupCommandBuilder: parser = DeleteBackupParser() parser.parseLine(line) - command = DeleteBackupCommand(self.__pathProvider) + command = DeleteBackupCommand() return command diff --git a/scripts/CommandBuilders/PatchCsprojCommandBuilder.py b/scripts/CommandBuilders/PatchCsprojCommandBuilder.py index ac130b7..1901be6 100644 --- a/scripts/CommandBuilders/PatchCsprojCommandBuilder.py +++ b/scripts/CommandBuilders/PatchCsprojCommandBuilder.py @@ -3,13 +3,11 @@ from parser.InsideParser.InsideSetParser import InsideSetParser class PatchCsprojCommandBuilder: - def __init__(self, config, pathProvider, valueProvider): + def __init__(self, config, valueProvider): assert config is not None - assert pathProvider is not None assert valueProvider is not None self.__config = config - self.__pathProvider = pathProvider self.__valueProvider = valueProvider def getCommandFor(self, line): @@ -18,12 +16,20 @@ class PatchCsprojCommandBuilder: parser = InsideSetParser(self.__valueProvider, 'csproj') result = parser.parseLine(line) - relPath = result[0] + csprojPath = result[0] key = result[1] value = self.__valueProvider.getValueFor(result[2]) - csprojAbsPath = self.__pathProvider.resolveAbsPath(relPath) slnConfig = self.__config['sln_config'] - command = PatchCsprojCommand(csprojAbsPath, key, value, slnConfig) + command = PatchCsprojCommand(csprojPath, key, value, slnConfig) return command + + def isPatchCsproj(self, line): + assert line is not None + + parser = InsideSetParser(self.__valueProvider, 'csproj') + isValid = parser.isValidLine(line) + + return isValid + diff --git a/scripts/CommandBuilders/RestoreBackupCommandBuilder.py b/scripts/CommandBuilders/RestoreBackupCommandBuilder.py index 4b7c9a3..5dbdb34 100644 --- a/scripts/CommandBuilders/RestoreBackupCommandBuilder.py +++ b/scripts/CommandBuilders/RestoreBackupCommandBuilder.py @@ -3,10 +3,6 @@ from parser.BackupParser.RestoreBackupParser import RestoreBackupParser class RestoreBackupCommandBuilder: - def __init__(self, pathProvider): - assert pathProvider is not None - self.__pathProvider = pathProvider - def isRestoreBackup(self, line): assert line is not None @@ -21,5 +17,5 @@ class RestoreBackupCommandBuilder: parser = RestoreBackupParser() parser.parseLine(line) - command = RestoreBackupCommand(self.__pathProvider) + command = RestoreBackupCommand() return command diff --git a/scripts/IosSteps.txt b/scripts/IosSteps.txt index fc25e06..870290c 100644 --- a/scripts/IosSteps.txt +++ b/scripts/IosSteps.txt @@ -1 +1,22 @@ +restore from backup +create backup for 'BuildSample' + +inside 'BuildSample/BuildSample.sln' remove NotCompileApp project + +inside 'BuildSample/BuildSample/CoolApp.csproj' set OutputPath to 'Output' +inside 'BuildSample/BuildSample/Info.plist' set CFBundleVersion to '1.2.3' +inside 'BuildSample/BuildSample/Info.plist' set CFBundleDisplayName to 'CoolApp' + +copy 'BuildSample/BuildSample/Profiles/8F606DAE-F9C9-4A19-8EFF-34B990D76C28.mobileprovision' to '~/Library/MobileDevice/Provisioning Profiles/BuildScript.mobileprovision' + +clean 'BuildSample/BuildSample.sln' for 'Release|iPhone' +build 'BuildSample/BuildSample.sln' for 'Release|iPhone' + +create dirs 'Output/Appstore/Artifacts' +copy 'BuildSample/BuildSample/Output/BuildSample-1.2.3.ipa' to 'Output/Appstore/Artifacts' +sh cp -a BuildSample/BuildSample/Output/ Output/Appstore/ + +restore from backup +delete backup + sh echo hello from Rustam \ No newline at end of file diff --git a/scripts/StepRunner/StepsRunner.py b/scripts/StepRunner/StepsRunner.py index e56f802..b805fc7 100644 --- a/scripts/StepRunner/StepsRunner.py +++ b/scripts/StepRunner/StepsRunner.py @@ -1,9 +1,35 @@ +from CommandBuilders.CleanBuildCommandBuilder import CleanBuildCommandBuilder +from CommandBuilders.CopyCommandBuilder import CopyCommandBuilder +from CommandBuilders.CreateBackupCommandBuilder import CreateBackupCommandBuilder +from CommandBuilders.DeleteBackupCommandBuilder import DeleteBackupCommandBuilder +from CommandBuilders.MakeDirsCommandBuilder import MakeDirsCommandBuilder +from CommandBuilders.PatchCsprojCommandBuilder import PatchCsprojCommandBuilder +from CommandBuilders.PatchInfoplistCommandBuilder import PatchInfoplistCommandBuilder +from CommandBuilders.RemoveProjectCommandBuilder import RemoveProjectCommandBuilder +from CommandBuilders.RestoreBackupCommandBuilder import RestoreBackupCommandBuilder from CommandBuilders.ShCommandBuilder import ShCommandBuilder +from commands.ValueProvider import ValueProvider class StepsRunner: - def __init__(self): + def __init__(self, config): + assert config is not None + + self.valueProvider = ValueProvider(config) + self.shCommandBuilder = ShCommandBuilder() + self.removeProjectBuilder = RemoveProjectCommandBuilder() + self.createBackupBuilder = CreateBackupCommandBuilder() + self.restoreFromBackupBuilder = RestoreBackupCommandBuilder() + self.deleteBackupBuilder = DeleteBackupCommandBuilder() + self.createDirs = MakeDirsCommandBuilder() + self.patchCsproj = PatchCsprojCommandBuilder(config, self.valueProvider) + self.patchInfoPlist = PatchInfoplistCommandBuilder(self.valueProvider) + self.copyBuilder = CopyCommandBuilder() + + buildUtilPath = config['build_tool'] + self.cleanBuilder = CleanBuildCommandBuilder(buildUtilPath, 'clean') + self.buildBuilder = CleanBuildCommandBuilder(buildUtilPath, 'build') def run(self, content): assert content is not None @@ -23,5 +49,36 @@ class StepsRunner: if self.shCommandBuilder.isShCommand(line): cmd = self.shCommandBuilder.getCommandFor(line) cmd.execute() + elif self.removeProjectBuilder.isRemoveProject(line): + cmd = self.removeProjectBuilder.getCommandFor(line) + cmd.execute() + elif self.cleanBuilder.isCleanBuild(line): + cmd = self.cleanBuilder.getCommandFor(line) + cmd.execute() + elif self.buildBuilder.isCleanBuild(line): + cmd = self.buildBuilder.getCommandFor(line) + cmd.execute() + elif self.createBackupBuilder.isCreateBackup(line): + cmd = self.createBackupBuilder.getCommandFor(line) + cmd.execute() + elif self.createDirs.isMakeDirsCommand(line): + cmd = self.createDirs.getCommandFor(line) + cmd.execute() + elif self.patchCsproj.isPatchCsproj(line): + cmd = self.patchCsproj.getCommandFor(line) + cmd.execute() + elif self.patchInfoPlist.isPatchInfoPlist(line): + cmd = self.patchInfoPlist.getCommandFor(line) + cmd.execute() + elif self.copyBuilder.isCopy(line): + cmd =self.copyBuilder.getCommandFor(line) + cmd.execute() + elif self.restoreFromBackupBuilder.isRestoreBackup(line): + cmd = self.restoreFromBackupBuilder.getCommandFor(line) + cmd.execute() + elif self.deleteBackupBuilder.isDeleteBackup(line): + cmd =self.deleteBackupBuilder.getCommandFor(line) + cmd.execute() else: - raise Exception('unrecognised step') \ No newline at end of file + msg = "unrecognised step. Line: '{0}'".format(line) + raise Exception(msg) \ No newline at end of file diff --git a/scripts/commands/CopyCommand.py b/scripts/commands/CopyCommand.py index daf4127..dc8dd94 100644 --- a/scripts/commands/CopyCommand.py +++ b/scripts/commands/CopyCommand.py @@ -2,11 +2,9 @@ import shutil import os class CopyCommand: - def __init__(self, pathProvider, copyArguments): - assert pathProvider is not None + def __init__(self, copyArguments): assert copyArguments is not None - self.__pathProvider = pathProvider self.__copyArguments = copyArguments def execute(self): @@ -17,9 +15,6 @@ class CopyCommand: def __expandPath(self, path): path = os.path.expanduser(path) - if not os.path.isabs(path): - path = self.__pathProvider.resolveAbsPath(path) - return path diff --git a/scripts/commands/CreateBackupCommand.py b/scripts/commands/CreateBackupCommand.py index 59d5ab9..fde6715 100644 --- a/scripts/commands/CreateBackupCommand.py +++ b/scripts/commands/CreateBackupCommand.py @@ -1,16 +1,14 @@ import shutil class CreateBackupCommand: - def __init__(self, pathProvider, createBackupArguments): - assert pathProvider is not None - assert createBackupArguments is not None + def __init__(self, backupArguments): + assert backupArguments is not None - self.__pathProvider = pathProvider - self.__createBackupArguments = createBackupArguments + self.__backupArguments = backupArguments def execute(self): - src = self.__pathProvider.resolveAbsPath(self.__createBackupArguments.getSourceFolderName()) - dst = self.__pathProvider.resolveAbsPath(self.__createBackupArguments.getBackupFolderName()) + src = self.__backupArguments.getSourceFolderName() + dst = self.__backupArguments.getBackupFolderName() shutil.rmtree(dst, ignore_errors=True) shutil.copytree(src, dst, symlinks=False) diff --git a/scripts/commands/DeleteBackupCommand.py b/scripts/commands/DeleteBackupCommand.py index 6eb9735..c34add1 100644 --- a/scripts/commands/DeleteBackupCommand.py +++ b/scripts/commands/DeleteBackupCommand.py @@ -2,14 +2,7 @@ import os import shutil class DeleteBackupCommand: - def __init__(self, pathProvider): - assert pathProvider is not None - - self.__pathProvider = pathProvider - def execute(self): - baseDir = self.__pathProvider.resolveAbsPath('.') - - dirs = [self.__pathProvider.resolveAbsPath(name) for name in os.listdir(baseDir) if os.path.isdir(os.path.join(baseDir, name)) & name.startswith('backup.')] + dirs = [name for name in os.listdir('.') if os.path.isdir(os.path.join('.', name)) & name.startswith('backup.')] for dir in dirs: shutil.rmtree(dir) \ No newline at end of file diff --git a/scripts/commands/RestoreBackupCommand.py b/scripts/commands/RestoreBackupCommand.py index edf56de..f92362a 100644 --- a/scripts/commands/RestoreBackupCommand.py +++ b/scripts/commands/RestoreBackupCommand.py @@ -3,18 +3,11 @@ import shutil class RestoreBackupCommand: - def __init__(self, pathProvider): - assert pathProvider is not None - - self.__pathProvider = pathProvider - def execute(self): - baseDir = self.__pathProvider.resolveAbsPath('.') - - dirPairs = [(name, "backup.{0}".format(name)) for name in os.listdir(baseDir) if os.path.isdir(self.__pathProvider.resolveAbsPath(name)) and not name.startswith('backup.')] + dirPairs = [(name, "backup.{0}".format(name)) for name in os.listdir('.') if os.path.isdir(name) and not name.startswith('backup.')] for pair in dirPairs: - absPair = (self.__pathProvider.resolveAbsPath(pair[0]), self.__pathProvider.resolveAbsPath(pair[1])) + absPair = (pair[0], pair[1]) if not os.path.exists(absPair[1]): continue diff --git a/scripts/parser/BackupParser/RestoreBackupParser.py b/scripts/parser/BackupParser/RestoreBackupParser.py index f8bafb5..52ac72b 100644 --- a/scripts/parser/BackupParser/RestoreBackupParser.py +++ b/scripts/parser/BackupParser/RestoreBackupParser.py @@ -16,4 +16,5 @@ class RestoreBackupParser(LineParser): assert line is not None isValid = line.startswith('restore from backup') + return isValid diff --git a/scripts/settings.txt b/scripts/settings.txt index c80f5db..ae50dd1 100644 --- a/scripts/settings.txt +++ b/scripts/settings.txt @@ -11,6 +11,7 @@ ios.steps = 'scripts/IosSteps.txt' # config settings ios.appstore.build_ready = 'true' ios.appstore.app_name = 'CoolApp' +ios.appstore.sln_config = 'Release|iPhone' -ios.staging.build_ready = 'true' +#ios.staging.build_ready = 'true' ios.staging.app_name = 'CoolApp staging' diff --git a/scripts/taskRunner.py b/scripts/taskRunner.py index e24df71..1da1d76 100644 --- a/scripts/taskRunner.py +++ b/scripts/taskRunner.py @@ -24,7 +24,7 @@ class TaskRunner: def runConfig(self, config): content = self.getStepsContent(config) - stepsRunner = StepsRunner() + stepsRunner = StepsRunner(config) stepsRunner.run(content) def getStepsContent(self, config):