static void Main(string[] args) { DateTime startDateTime = new DateTime(2017, 03, 20); DateTime endDateTime = DateTime.Now; var svnUtil = new SvnUtil(startDateTime, endDateTime); var messages = svnUtil.GetLogMessages(new Uri(@"http://tscore-svn:8050/svn/ts5conf/PackageStore")); Console.WriteLine(messages); Console.ReadKey(); }
public static string PrepareUniqueVersionJson(BuildTarget buildTarget, string versionDir) { // 请求build version Logger.Log("从构建服务器请求build version..."); var buildVer = IntegrationServer.RequestBuildVersion(); Logger.Log($"Build version: {buildVer}"); // 计算客户端版本号 var version = ClientVersion.New(versionDir, buildTarget); version.BuildVersion = buildVer; Logger.Log($"客户端版本号为:{version}"); // 保存 version.Serialize(); // 提交svn SvnUtil.Commit(version.path); return(version.path); }
static void Main(string[] args) { SpaceUtil.SetTempSpace("temp"); var logFile = SpaceUtil.GetPathInTemp($"NssIntegrationStart_{DateTime.Now.ToString("yyyyMMddhhmmss")}.log"); Logger.SetLogFile("NssIntegrationStart", new LogFile(logFile)); Logger.BeginMuteConsoleOutput(); CLApp.Init("NssIntegration"); var envConfigPath = SpaceUtil.GetPathInBase($"Config{Path.DirectorySeparatorChar}EnvConfig.json"); Dictionary <string, string> dicEnvConfig = null; if (File.Exists(envConfigPath)) { JsonSerializer jsonSerializer = new JsonSerializer(); dicEnvConfig = (Dictionary <string, string>)jsonSerializer.Deserialize(new StreamReader(envConfigPath), typeof(Dictionary <string, string>)); } // 初始化各种工具类 SvnUtil.Init(() => GetEnv(envConfigPath, dicEnvConfig, "SvnBin")); ApkTool.Init(() => GetEnv(envConfigPath, dicEnvConfig, "ApkTool")); IntegrationServer.Init(() => GetEnv(envConfigPath, dicEnvConfig, "IntegrationServerAddress")); IFSUtil.Init(() => GetEnv(envConfigPath, dicEnvConfig, "IIPS")); CLApp.AddCommand(NewMethodCommand(typeof(BuildProcedure), "AssemblyApk")); CLApp.AddCommand(NewMethodCommand(typeof(BuildProcedure), "PrepareUniqueVersionJson")); CLApp.AddCommand(NewMethodCommand(typeof(BuildProcedure), "ModifyMacro")); CLApp.AddCommand(NewMethodCommand(typeof(BuildProcedure), "BuildApk")); CLApp.AddCommand(NewMethodCommand(typeof(BuildEntry), "UnpackIFS")); CLApp.AddCommand(NewMethodCommand(typeof(BuildEntry), "Build")); Logger.SetLogFile("NssIntegrationStart", null); Logger.EndMuteConsoleOutput(); CLApp.Launch(args); }
public static void AcquireUnity(string unityPoolDir, string unitySvnUrl, string unitySvnRev, out string unityExePath, out IFLock unityLock) { if (DoodleEnv.curPlatform != Platform.OSX) { throw new NssIntegrationException($"'{nameof(AcquireUnity)}'只能在OS X系统使用!"); } if (!Directory.Exists(unityPoolDir)) { throw new NotDirException(unityPoolDir, nameof(unityPoolDir)); } unityExePath = null; unityLock = null; // 遍历目录下所有Unity,返回可以得到写锁的那个 string unityAppPath = null; var rootDir = new DirectoryInfo(unityPoolDir); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); IFLock flock = null; RepeateDo repeateDo = new RepeateDo(600); repeateDo.Do(() => { foreach (var dir in rootDir.GetDirectories("*.app")) { flock = FLockUtil.NewFLock(Path.Combine(unityPoolDir, dir.Name, "lock")); if (!flock.TryAcquireExclusiveLock()) { continue; } unityAppPath = Path.Combine(unityPoolDir, dir.Name, "Contents/MacOS/Unity"); break; } if (unityAppPath == null) { Logger.Log($"没有可用的Unity引擎,已等待{stopwatch.ElapsedMilliseconds / 1000 / 60}分钟..."); Thread.Sleep(60 * 1000); return(false); } return(true); }); repeateDo = new RepeateDo(5); repeateDo.IgnoreException <ExecutableException>(); repeateDo.Do(() => SvnUtil.Sync(unityAppPath, unitySvnUrl, unitySvnRev)); if (!flock.TryAcquireShareLock()) { throw new ImpossibleException($"之前已经获取了写锁了,获取读锁不可能失败!"); } // 赋执行权限 CmdUtil.Execute($"chmod -R +x {unityAppPath}"); unityExePath = Path.Combine(unityAppPath, "Contents/MacOS/Unity"); unityLock = flock; return; }
private static void Build( [NssConceptConfiguration(NssConcept.NssUnityProj)] string nssUnityProj, [NssConceptConfiguration(NssConcept.BuildTarget)] BuildTarget buildTarget, [ParameterConfiguration("是否使用唯一的构建版本号", optionTemplate = "-uniqueVersion")] bool uniqueVersion, [NssConceptConfiguration(NssConcept.ToolsDir, optionTemplate = "-toolsDir")] string toolsDir = null, [NssConceptConfiguration(NssConcept.BuildConfig, optionTemplate = "-buildConfig")] string buildConfigPath = "Config/BuildConfig.json", [NssConceptConfiguration(NssConcept.IFS, optionTemplate = "-ifs")] string ifsPath = null, [NssConceptConfiguration(NssConcept.BuildMode, optionTemplate = "-buildMode")] BuildMode buildMode = BuildMode.Debug, [NssConceptConfiguration(NssConcept.VerLine, optionTemplate = "-verLine")] VerLine verLine = VerLine.DB, [NssConceptConfiguration(NssConcept.PackageType, optionTemplate = "-packageType")] PackageType packageType = PackageType.Normal, [NssConceptConfiguration(NssConcept.BuildOption, optionTemplate = "-buildOption")] BuildOption buildOption = BuildOption.None, [ParameterConfiguration("输出目录", optionTemplate = "-outputDir")] string outputDir = "Output" ) { if (string.IsNullOrEmpty(toolsDir)) { toolsDir = Path.Combine(nssUnityProj, "../Tools"); } outputDir = Path.GetFullPath(outputDir); DirUtil.CreateEmptyDir(outputDir); var buildConfig = new BuildConfig(buildConfigPath); var unityExePath = NssConceptHelper.CheckConceptThrow<string>(NssConcept.UnityExe, buildConfig.Get<string>("UnityExe")); var svnRev = -1; try { svnRev = SvnUtil.GetSvnInfo(nssUnityProj).lastChangedRev; } catch { } string versionJsonPath = null; if (uniqueVersion) { versionJsonPath = BuildProcedure.PrepareUniqueVersionJson(buildTarget, Path.Combine(nssUnityProj, "Version")); } else { versionJsonPath = Path.Combine(nssUnityProj, "Version", ClientVersion.GetVersionFileName(buildTarget)); } BuildAppResult buildAppResult = null; if (buildTarget == BuildTarget.Android) { var sdkRoot = buildConfig.Get<string>("AndroidSDKRoot"); var ndkRoot = buildConfig.Get<string>("AndroidNDKRoot"); var jdkRoot = buildConfig.Get<string>("JDKRoot"); buildAppResult = BuildProcedure.BuildApk(unityExePath, nssUnityProj, buildMode, true, sdkRoot, ndkRoot, jdkRoot, versionJsonPath, verLine, packageType, buildOption, toolsDir, outputDir, svnRev); //buildAppResult = new BuildAppResult() //{ // appPath = "H:\\branches\\H_trunk\\NssUnityProj\\Output\\NSS_Debug_Test_DB_1.14.0.22330_349712.apk", // appVersion = "1.14.0.22330", // defaultTDir = "Test", //}; } else { throw new NotImplementedException(); } if (File.Exists(ifsPath)) { Logger.Log($"使用输入的IFS文件:{ifsPath}..."); ifsPath = IFSUtil.ModifyIFSVersion(ifsPath, buildTarget, buildAppResult.appVersion); } else { throw new NotImplementedException(); } BuildProcedure.AssemblyApk(buildAppResult.appPath, Path.Combine(outputDir, NssHelper.GetStandardAppName(buildTarget, buildMode, verLine, buildAppResult.defaultTDir, buildAppResult.appVersion, svnRev)), ifsPath); }