protected void Page_Load(object sender, EventArgs e) { WebServiceResponse rsp; GetReleasesResponse response; int release_id; string action = Request ["action"]; response = Utils.LocalWebService.GetReleases(Master.WebServiceLogin); if (response.Exception != null) { lblMessage.Text = response.Exception.Message; return; } if (!string.IsNullOrEmpty(action)) { switch (action) { case "delete": if (int.TryParse(Request ["release_id"], out release_id)) { rsp = Utils.LocalWebService.DeleteRelease(Master.WebServiceLogin, release_id); if (rsp.Exception != null) { lblMessage.Text = rsp.Exception.Message; } else { Response.Redirect("Releases.aspx", false); return; } } else { lblMessage.Text = "Invalid release"; } break; case "download": if (string.IsNullOrEmpty(Request ["release_id"])) { break; } if (int.TryParse(Request ["release_id"], out release_id)) { foreach (DBRelease release in response.Releases) { if (release.id != release_id) { continue; } Response.ContentType = "application/zip"; Response.AddHeader("Content-Disposition", "attachment; filename=" + release.filename); Response.TransmitFile(Path.Combine(Configuration.GetReleaseDirectory(), release.filename)); return; } } else if (Request ["release_id"] == "latest") { Version latest = new Version(); DBRelease release_latest = null; foreach (DBRelease release in response.Releases) { Version v = new Version(release.version); if (v <= latest) { continue; } release_latest = release; } if (release_latest == null) { Response.StatusCode = 404; Response.Status = "Not found"; Response.StatusDescription = "No latest release exists"; return; } Response.ContentType = "application/zip"; Response.AddHeader("Content-Disposition", "attachment; filename=" + release_latest.filename); Response.TransmitFile(Path.Combine(Configuration.GetReleaseDirectory(), release_latest.filename)); return; } else { lblMessage.Text = "Invalid release"; } break; } } foreach (DBRelease release in response.Releases) { TableRow row = new TableRow(); row.Cells.Add(Utils.CreateTableCell(release.version)); row.Cells.Add(Utils.CreateTableCell(release.revision)); row.Cells.Add(Utils.CreateTableCell(release.description)); row.Cells.Add(Utils.CreateTableCell(release.filename)); row.Cells.Add(Utils.CreateTableCell( string.Format("<a href='Releases.aspx?action=delete&release_id={0}'>Delete</a>", release.id) + " " + string.Format("<a href='Releases.aspx?action=download&release_id={0}'>Download</a>", release.id) )); tblStatus.Rows.Add(row); } }
protected void Page_Load(object sender, EventArgs e) { GetBuildBotStatusResponse response; string action; response = Utils.LocalWebService.GetBuildBotStatus(Master.WebServiceLogin); action = Request ["action"]; if (!string.IsNullOrEmpty(action)) { switch (action) { case "select-release": { int release_id; int host_id; if (int.TryParse(Request ["release_id"], out release_id)) { if (int.TryParse(Request ["host_id"], out host_id)) { DBHost host = response.Hosts.Find((v) => v.id == host_id); if (host == null) { lblMessage.Text = "Invalid host id"; } else { host.release_id = release_id == 0 ? null : new int?(release_id); Utils.LocalWebService.EditHost(Master.WebServiceLogin, host); Response.Redirect("BuildBotStatus.aspx", false); return; } } else { lblMessage.Text = "Invalid host"; } } else { lblMessage.Text = "Invalid release"; } break; } } } if (response.Exception != null) { lblMessage.Text = response.Exception.Message; } else { foreach (DBBuildBotStatus status in response.Status) { DBHost host = response.Hosts.Find((v) => v.id == status.host_id); DBRelease configured_release = host.release_id.HasValue ? response.Releases.Find((v) => v.id == host.release_id.Value) : null; TableRow row = new TableRow(); row.Cells.Add(Utils.CreateTableCell(host.host)); row.Cells.Add(Utils.CreateTableCell(status.version)); row.Cells.Add(Utils.CreateTableCell(status.report_date.ToString("yyyy/MM/dd HH:mm:ss UTC"))); row.Cells.Add(Utils.CreateTableCell(string.Format("<a href='javascript: selectBuildBotRelease (\"{0}\", {1}, \"{2}\")'>{0}</a>", configured_release == null ? "Manual" : configured_release.version, host.id, tblReleases.ClientID))); tblStatus.Rows.Add(row); } foreach (DBRelease release in response.Releases) { TableRow row = new TableRow(); row.Cells.Add(Utils.CreateTableCell(string.Format("<a href='javascript: executeBuildBotSelection ({0})'>Select</a>", release.id))); row.Cells.Add(Utils.CreateTableCell(release.version)); row.Cells.Add(Utils.CreateTableCell(release.revision)); row.Cells.Add(Utils.CreateTableCell(release.description)); tblReleases.Rows.Add(row); } tblReleases.Attributes ["style"] = "display:none"; } }
static void CheckLog(string log_file, BuildInfo info) { DBRelease release = null; string line, l; string cmd; int index; using (FileStream fs = new FileStream(log_file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { using (StreamReader reader = new StreamReader(fs)) { List <String> files = new List <string> (); List <string> links = new List <string> (); List <bool> hidden = new List <bool> (); while (null != (l = reader.ReadLine())) { line = l; if (line.StartsWith("@Moonbuilder:")) { line = line.Substring("@Moonbuilder:".Length); } else if (line.StartsWith("@MonkeyWrench:")) { line = line.Substring("@MonkeyWrench:".Length); } else { continue; } line = line.TrimStart(' '); index = line.IndexOf(':'); if (index == -1) { continue; } cmd = line.Substring(0, index); line = line.Substring(index + 1); while (line.StartsWith(" ")) { line = line.Substring(1); } switch (cmd) { case "AddFile": case "AddHiddenFile": try { Logger.Log("@MonkeyWrench command: '{0}' args: '{1}'", cmd, line); files.Add(line.Trim()); hidden.Add(cmd.Contains("Hidden")); } catch (Exception e) { Logger.Log("Error while executing @MonkeyWrench command '{0}': '{1}'", cmd, e.Message); } break; case "AddDirectory": case "AddHiddenDirectory": try { Logger.Log("@MonkeyWrench command: '{0}' args: '{1}'", cmd, line); foreach (string file in Directory.GetFiles(line.Trim())) { files.Add(file); hidden.Add(cmd.Contains("Hidden")); } } catch (Exception e) { Logger.Log("Error while executing @MonkeyWrench command '{0}': '{1}'", cmd, e.Message); } break; case "AddFileLink": try { Logger.Log("@MonkeyWrench command: '{0}' args: '{1}'", cmd, line); links.Add(line.Trim()); } catch (Exception e) { Logger.Log("Error while executing @MonkeyWrench command '{0}': '{1}'", cmd, e.Message); } break; case "SetSummary": info.work.summary = line; info.work = WebService.ReportBuildStateSafe(info.work).Work; break; case "AddSummary": info.work.summary += line; info.work = WebService.ReportBuildStateSafe(info.work).Work; break; case "SetReleaseVersion": if (release == null) { release = new DBRelease(); } release.version = line.Trim(); break; case "SetReleaseRevision": if (release == null) { release = new DBRelease(); } release.revision = line.Trim(); break; case "SetReleaseDescription": if (release == null) { release = new DBRelease(); } release.description = line.Trim(); break; case "AddRelease": if (release == null) { Logger.Log("Invalid @MonkeyWrench command: '{0}: No release created", cmd); break; } WebServiceResponse rsp; try { release.filename = Path.GetFileName(line.Trim()); File.Copy(line.Trim(), Path.Combine(Configuration.GetReleaseDirectory(), release.filename), true); rsp = WebService.AddRelease(WebService.WebServiceLogin, release); if (rsp.Exception != null) { Logger.Log("Error while adding release: {0}", rsp.Exception); } } catch (Exception ex) { Logger.Log("Could not copy release: {0}", ex.ToString()); } break; default: Logger.Log("Invalid @MonkeyWrench command: '{0}', entire line: '{1}'", cmd, l); break; } } if (links.Count > 0) { try { WebService.UploadLinks(WebService.WebServiceLogin, info.work, links.ToArray()); } catch (Exception ex) { Logger.Log("Could not upload links: {0}", ex); } } WebService.UploadFilesSafe(info.work, files.ToArray(), hidden.ToArray()); } } }