public override async Task <IResponseMessage> Process(ProjectPackagePushRequest requestMessage) { try { if (!PhotonServer.Instance.Sessions.TryGet(requestMessage.ServerSessionId, out var session)) { throw new Exception($"Agent Session ID '{requestMessage.ServerSessionId}' not found!"); } var metadata = await ProjectPackageTools.GetMetadataAsync(requestMessage.Filename); if (metadata == null) { throw new ApplicationException("No metadata found!"); } await PhotonServer.Instance.ProjectPackages.Add(requestMessage.Filename); session.PushedProjectPackageList.Add(new PackageReference(metadata.Id, metadata.Version)); } finally { try { File.Delete(requestMessage.Filename); } catch {} } return(new ProjectPackagePushResponse()); }
public async Task Add(string filename) { var metadata = await ProjectPackageTools.GetMetadataAsync(filename); if (metadata == null) { throw new Exception("No metadata file found in package!"); } await base.Add(filename, metadata); }
private async Task <ProjectPackage> LoadItem(string packageId, string version) { var packageMgr = PhotonServer.Instance.ProjectPackages; if (!packageMgr.TryGet(packageId, version, out var filename)) { throw new ApplicationException($"Package '{packageId}' version '{version}' not found!"); } return(await ProjectPackageTools.GetMetadataAsync(filename)); }
private void PackageClient_OnPushProjectPackage(string filename, RemoteTaskCompletionSource taskHandle) { Task.Run(async() => { var metadata = await ProjectPackageTools.GetMetadataAsync(filename); if (metadata == null) { throw new ApplicationException($"Invalid Project Package '{filename}'! No metadata found."); } await projectPackages.Add(filename); PushedProjectPackageList.Add(new PackageReference(metadata.Id, metadata.Version)); }).ContinueWith(taskHandle.FromTask); }
public override async Task <HttpHandlerResult> PostAsync(CancellationToken token) { var qProjectId = GetQuery("project"); var projectPackageId = GetQuery("package"); var projectPackageVersion = GetQuery("version"); var environmentName = GetQuery("env"); if (string.IsNullOrWhiteSpace(projectPackageId)) { return(Response.BadRequest().SetText("'package' is undefined!")); } if (string.IsNullOrWhiteSpace(projectPackageVersion)) { return(Response.BadRequest().SetText("'version' is undefined!")); } try { if (!PhotonServer.Instance.ProjectPackages.TryGet(projectPackageId, projectPackageVersion, out var packageFilename)) { return(Response.BadRequest().SetText($"Project Package '{projectPackageId}.{projectPackageVersion}' was not found!")); } var metadata = await ProjectPackageTools.GetMetadataAsync(packageFilename); var projectId = metadata.ProjectId; if (!string.IsNullOrEmpty(qProjectId)) { projectId = qProjectId; } if (string.IsNullOrEmpty(projectId)) { throw new ApplicationException("'project' is undefined!"); } if (!PhotonServer.Instance.Projects.TryGet(projectId, out var project)) { return(Response.BadRequest().SetText($"Project '{projectId}' was not found!")); } var deployment = await project.StartNewDeployment(); deployment.PackageId = projectPackageId; deployment.PackageVersion = projectPackageVersion; deployment.EnvironmentName = environmentName; //deployment.ScriptName = ?; var session = new ServerDeploySession { Project = project.Description, Deployment = deployment, ProjectPackageId = projectPackageId, ProjectPackageVersion = projectPackageVersion, ProjectPackageFilename = packageFilename, EnvironmentName = environmentName, }; deployment.ServerSessionId = session.SessionId; PhotonServer.Instance.Sessions.BeginSession(session); PhotonServer.Instance.Queue.Add(session); var response = new HttpDeployStartResponse { SessionId = session.SessionId, }; return(Response.Json(response)); } catch (Exception error) { Log.Error($"Deployment of Project Package '{projectPackageId}.{projectPackageVersion}' has failed!", error); return(Response.Exception(error)); } }