mirror of
https://github.com/louislam/uptime-kuma.git
synced 2024-11-30 18:24:03 +00:00
Implement update
This commit is contained in:
parent
4642f9be0a
commit
22902139d2
2 changed files with 67 additions and 12 deletions
|
@ -27,11 +27,12 @@ namespace UptimeKuma {
|
||||||
label.Text = "Reading latest version...";
|
label.Text = "Reading latest version...";
|
||||||
|
|
||||||
// Read json from https://uptime.kuma.pet/version
|
// Read json from https://uptime.kuma.pet/version
|
||||||
var versionObj = JsonConvert.DeserializeObject<Version>(new WebClient().DownloadString("https://uptime.kuma.pet/version"));
|
var versionJson = new WebClient().DownloadString("https://uptime.kuma.pet/version");
|
||||||
|
var versionObj = JsonConvert.DeserializeObject<Version>(versionJson);
|
||||||
|
|
||||||
var nodeVersion = versionObj.nodejs;
|
var nodeVersion = versionObj.nodejs;
|
||||||
var uptimeKumaVersion = versionObj.latest;
|
var uptimeKumaVersion = versionObj.latest;
|
||||||
|
var hasUpdateFile = File.Exists("update");
|
||||||
|
|
||||||
if (!Directory.Exists("node")) {
|
if (!Directory.Exists("node")) {
|
||||||
downloadQueue.Enqueue(new DownloadItem {
|
downloadQueue.Enqueue(new DownloadItem {
|
||||||
|
@ -41,12 +42,30 @@ namespace UptimeKuma {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Directory.Exists("node")) {
|
if (!Directory.Exists("core") || hasUpdateFile) {
|
||||||
|
|
||||||
|
// It is update, rename the core folder to core.old
|
||||||
|
if (Directory.Exists("core")) {
|
||||||
|
// Remove the old core.old folder
|
||||||
|
if (Directory.Exists("core.old")) {
|
||||||
|
Directory.Delete("core.old", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
Directory.Move("core", "core.old");
|
||||||
|
}
|
||||||
|
|
||||||
downloadQueue.Enqueue(new DownloadItem {
|
downloadQueue.Enqueue(new DownloadItem {
|
||||||
URL = $"https://github.com/louislam/uptime-kuma/archive/refs/tags/{uptimeKumaVersion}.zip",
|
URL = $"https://github.com/louislam/uptime-kuma/archive/refs/tags/{uptimeKumaVersion}.zip",
|
||||||
Filename = "core.zip",
|
Filename = "core.zip",
|
||||||
TargetFolder = "core"
|
TargetFolder = "core"
|
||||||
});
|
});
|
||||||
|
|
||||||
|
File.WriteAllText("version.json", versionJson);
|
||||||
|
|
||||||
|
// Delete the update file
|
||||||
|
if (hasUpdateFile) {
|
||||||
|
File.Delete("update");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DownloadNextFile();
|
DownloadNextFile();
|
||||||
|
@ -75,9 +94,12 @@ namespace UptimeKuma {
|
||||||
void npmSetup() {
|
void npmSetup() {
|
||||||
labelData.Text = "";
|
labelData.Text = "";
|
||||||
|
|
||||||
|
var npm = "..\\node\\npm.cmd";
|
||||||
|
var cmd = $"{npm} ci --production & {npm} run download-dist & exit";
|
||||||
|
|
||||||
var startInfo = new ProcessStartInfo {
|
var startInfo = new ProcessStartInfo {
|
||||||
FileName = "cmd.exe",
|
FileName = "cmd.exe",
|
||||||
Arguments = "run setup",
|
Arguments = $"/k \"{cmd}\"",
|
||||||
RedirectStandardOutput = false,
|
RedirectStandardOutput = false,
|
||||||
RedirectStandardError = false,
|
RedirectStandardError = false,
|
||||||
RedirectStandardInput = true,
|
RedirectStandardInput = true,
|
||||||
|
@ -89,11 +111,11 @@ namespace UptimeKuma {
|
||||||
var process = new Process();
|
var process = new Process();
|
||||||
process.StartInfo = startInfo;
|
process.StartInfo = startInfo;
|
||||||
process.EnableRaisingEvents = true;
|
process.EnableRaisingEvents = true;
|
||||||
process.Exited += (object _, EventArgs e) => {
|
process.Exited += (_, e) => {
|
||||||
progressBar.Value = 100;
|
progressBar.Value = 100;
|
||||||
|
|
||||||
if (process.ExitCode == 0) {
|
if (process.ExitCode == 0) {
|
||||||
Task.Delay(2000).ContinueWith((task) => {
|
Task.Delay(2000).ContinueWith(_ => {
|
||||||
Application.Restart();
|
Application.Restart();
|
||||||
});
|
});
|
||||||
label.Text = "Done";
|
label.Text = "Done";
|
||||||
|
@ -105,10 +127,7 @@ namespace UptimeKuma {
|
||||||
process.Start();
|
process.Start();
|
||||||
label.Text = "Installing dependencies and download dist files";
|
label.Text = "Installing dependencies and download dist files";
|
||||||
progressBar.Value = 50;
|
progressBar.Value = 50;
|
||||||
|
process.WaitForExit();
|
||||||
process.StandardInput.WriteLine("\"../node/npm\" ci --production");
|
|
||||||
process.StandardInput.WriteLine("\"../node/npm\" run download-dist");
|
|
||||||
process.StandardInput.WriteLine("exit");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) {
|
void DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) {
|
||||||
|
|
|
@ -4,11 +4,13 @@ using System.Diagnostics;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using Microsoft.Win32;
|
using Microsoft.Win32;
|
||||||
|
using Newtonsoft.Json;
|
||||||
using UptimeKuma.Properties;
|
using UptimeKuma.Properties;
|
||||||
|
|
||||||
namespace UptimeKuma {
|
namespace UptimeKuma {
|
||||||
|
@ -56,7 +58,9 @@ namespace UptimeKuma {
|
||||||
trayIcon.MouseDoubleClick += new MouseEventHandler(Open);
|
trayIcon.MouseDoubleClick += new MouseEventHandler(Open);
|
||||||
trayIcon.Visible = true;
|
trayIcon.Visible = true;
|
||||||
|
|
||||||
if (Directory.Exists("core") && Directory.Exists("node") && Directory.Exists("core/node_modules") && Directory.Exists("core/dist")) {
|
var hasUpdateFile = File.Exists("update");
|
||||||
|
|
||||||
|
if (!hasUpdateFile && Directory.Exists("core") && Directory.Exists("node") && Directory.Exists("core/node_modules") && Directory.Exists("core/dist")) {
|
||||||
// Go go go
|
// Go go go
|
||||||
StartProcess();
|
StartProcess();
|
||||||
} else {
|
} else {
|
||||||
|
@ -110,6 +114,10 @@ namespace UptimeKuma {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void StopProcess() {
|
||||||
|
process?.Kill();
|
||||||
|
}
|
||||||
|
|
||||||
void Open(object sender, EventArgs e) {
|
void Open(object sender, EventArgs e) {
|
||||||
Process.Start("http://localhost:3001");
|
Process.Start("http://localhost:3001");
|
||||||
}
|
}
|
||||||
|
@ -119,7 +127,35 @@ namespace UptimeKuma {
|
||||||
}
|
}
|
||||||
|
|
||||||
void CheckForUpdate(object sender, EventArgs e) {
|
void CheckForUpdate(object sender, EventArgs e) {
|
||||||
Process.Start("https://github.com/louislam/uptime-kuma/releases");
|
var needUpdate = false;
|
||||||
|
|
||||||
|
// Check version.json exists
|
||||||
|
if (File.Exists("version.json")) {
|
||||||
|
// Load version.json and compare with the latest version from GitHub
|
||||||
|
var currentVersionObj = JsonConvert.DeserializeObject<Version>(File.ReadAllText("version.json"));
|
||||||
|
|
||||||
|
var versionJson = new WebClient().DownloadString("https://uptime.kuma.pet/version");
|
||||||
|
var latestVersionObj = JsonConvert.DeserializeObject<Version>(versionJson);
|
||||||
|
|
||||||
|
// Compare version, if the latest version is newer, then update
|
||||||
|
if (new System.Version(latestVersionObj.latest).CompareTo(new System.Version(currentVersionObj.latest)) > 0) {
|
||||||
|
var result = MessageBox.Show("A new version is available. Do you want to update?", "Update", MessageBoxButtons.YesNo);
|
||||||
|
if (result == DialogResult.Yes) {
|
||||||
|
// Create a empty file `update`, so the app will download the core files again at startup
|
||||||
|
File.Create("update").Close();
|
||||||
|
|
||||||
|
trayIcon.Visible = false;
|
||||||
|
process?.Kill();
|
||||||
|
|
||||||
|
// Restart the app, it will download the core files again at startup
|
||||||
|
Application.Restart();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
MessageBox.Show("You are using the latest version.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void VisitGitHub(object sender, EventArgs e)
|
void VisitGitHub(object sender, EventArgs e)
|
||||||
|
|
Loading…
Reference in a new issue