public OrbisCtrl(TargetDevicePS4 Device, ILogger Logger, IDeploymentSession Callback, CancellationToken Token) { this.Device = Device; this.Logger = Logger; this.Callback = Callback; this.Token = Token; this.OrbisCtrlPath = Path.Combine(Environment.ExpandEnvironmentVariables("%SCE_ROOT_DIR%"), @"ORBIS\Tools\Target Manager Server\bin\orbis-ctrl.exe"); }
private bool UploadDirectory(IDeploymentSession Callback, SftpClient Sftp, string SourcePath, string DestinationPath, string DirSearchPattern) { if (Token.IsCancellationRequested) { return(false); } var SourceDirectories = Directory.GetDirectories(SourcePath, DirSearchPattern, SearchOption.TopDirectoryOnly); foreach (var SourceDirectory in SourceDirectories) { try { DirectoryInfo SourceDirectoryInfo = new DirectoryInfo(SourceDirectory); string DestinationDirectory = Path.Combine(DestinationPath, SourceDirectoryInfo.Name).Replace("\\", "/"); Sftp.CreateDirectory(DestinationDirectory); var SourceFiles = Directory.GetFiles(SourceDirectory, "*.*", SearchOption.TopDirectoryOnly); foreach (var SourceFile in SourceFiles) { if (Token.IsCancellationRequested) { return(false); } DirectoryInfo SourceFileInfo = new DirectoryInfo(SourceFile); string UploadFilePath = Path.Combine(DestinationDirectory, SourceFileInfo.Name).Replace("\\", "/"); using (var UploadFileStream = System.IO.File.OpenRead(SourceFile)) { Sftp.UploadFile(UploadFileStream, UploadFilePath, true); Logger.Info(string.Format(@"Copying file to {0}/{1}", Address, UploadFilePath)); Callback.OnFileDeployed(this, SourceFile); } } if (!UploadDirectory(Callback, Sftp, SourceDirectory, DestinationDirectory, "*")) { return(false); } } catch (Exception e) { Logger.Error(string.Format("Upload directory threw an exception during file transfer '{0}'. Ex: {1}", SourceDirectory, e.Message)); return(false); } } return(true); }
public override bool DeployBuild(BuildNode Build, IDeploymentSession Callback, CancellationToken Token) { this.Build = Build; this.Callback = Callback; this.Token = Token; try { if (!ResetProgress()) { return(CheckCancelationRequestAndReport()); } if (!StopProcesses()) { return(CheckCancelationRequestAndReport()); } if (!DeployBuild()) { return(CheckCancelationRequestAndReport()); } // Only start downloaded servers automatically if (Build.Role.Equals(RoleType.Server.ToString()) && !StartProcess()) { return(CheckCancelationRequestAndReport()); } Logger.Info(string.Format("Build {0} successfully deployed to Win64 machine {1}", Build.Number, Address)); Callback.OnBuildDeployed(this, Build); return(true); } catch (Exception e) { Logger.Error(string.Format("Failed to deploy Win64 build {0} to device {1}. {2}", Build.Number, Address, e.Message)); } return(CheckCancelationRequestAndReport()); }
private bool DeployBuild(BuildNode InBuild, IDeploymentSession Callback, CancellationToken Token) { foreach (var Device in Devices) { var Build = new BuildNode(InBuild.UseBuild, InBuild.Number, InBuild.Timestamp, InBuild.Path, InBuild.Platform, InBuild.Solution, InBuild.Role, InBuild.AutomatedTestStatus); Device.Build = Build; Build.Status = "Waiting for Device"; ThreadHelperClass.DeployBuild(WinForm, DeviceView, Device); } foreach (var Device in Devices) { Device.ProjectConfig = WinForm.GetProject(Device.Build); Device.DeployBuild(Device.Build, Callback, Token); } return(true); }
public override bool DeployBuild(BuildNode Build, IDeploymentSession Callback, CancellationToken Token) { this.Build = Build; this.Callback = Callback; this.Token = Token; try { if (!ResetProgress()) { return(CheckCancelationRequestAndReport()); } if (!StopProcesses()) { return(CheckCancelationRequestAndReport()); } if (!InstallBuild()) { return(CheckCancelationRequestAndReport()); } if (!StartProcess()) { return(CheckCancelationRequestAndReport()); } Logger.Info(string.Format("Build {0} successfully deployed to Linux machine {1}", Build.Number, Address)); Callback.OnBuildDeployed(this, Build); return(true); } catch (Exception e) { Logger.Error(string.Format("Deploy build {0} failed with error {1}", Build.Number, e.Message)); } return(CheckCancelationRequestAndReport()); }
public virtual bool DeployBuild(BuildNode Build, IDeploymentSession Callback, CancellationToken Token) { throw new NotImplementedException(); }
public override bool DeployBuild(BuildNode Build, IDeploymentSession Callback, CancellationToken Token) { try { this.Build = Build; this.Callback = Callback; this.Token = Token; OrbisCtrlProc = new OrbisCtrl(this, Logger, Callback, Token); if (!ResetProgress()) { return(CheckCancelationRequestAndReport()); } Build.Progress++; // Add PS4 to Neighborhood. ITarget Target = TargetManager.AddTarget(Address); SetMappedDirectory(Target); LogDeviceDetails(Target); Build.Progress++; if (Target.PowerStatus != ePowerStatus.POWER_STATUS_ON) { Target.PowerOn(); } if (!OrbisCtrlProc.Execute("pkill")) { return(false); } int ExitCode = 0; while (!OrbisCtrlProc.HasExited(out ExitCode)) { if (Token.IsCancellationRequested) { OrbisCtrlProc.Kill(); Callback.OnBuildDeployedAborted(this, Build); return(false); } Logger.Info(string.Format("Waiting for PS4 process to exit on PS4 device {0}", Address)); } Build.Progress++; if (!InstallPackage()) { return(CheckCancelationRequestAndReport()); } Build.Progress++; Callback.OnBuildDeployed(this, Build); } catch (Exception e) { Callback.OnBuildDeployedError(this, Build, e.Message); Logger.Error(string.Format("Failed to deploy build to PS4 device '{0}'. Ex: {1}", Address, e.Message)); } return(false); }