DEV: Upgrade routes

This commit is contained in:
Jarek Radosz 2023-01-23 00:22:27 +01:00
parent 00e19a30df
commit 61ff8e52b1
3 changed files with 54 additions and 56 deletions

View File

@ -1,34 +1,34 @@
import Repo from "discourse/plugins/docker_manager/discourse/models/repo";
import Route from "@ember/routing/route";
export default Route.extend({
export default class UpgradeIndex extends Route {
model() {
return Repo.findAll();
},
}
loadRepos(list) {
async loadRepos(list) {
if (list.length === 0) {
return;
}
this.loadRepo(list.shift()).then(() => this.loadRepos(list));
},
loadRepo(repo) {
return repo.findLatest();
},
await list.shift().findLatest();
this.loadRepos(list);
}
setupController(controller, model) {
const upgradeController = this.controllerFor("upgrade");
controller.setProperties({ model, upgrading: null });
controller.model = model;
controller.upgrading = null;
model.forEach((repo) => {
if (repo.upgrading) {
controller.set("upgrading", repo);
controller.upgrading = repo;
}
// Special case: Upgrade docker manager first
if (repo.id === "docker_manager") {
controller.set("managerRepo", repo);
controller.managerRepo = repo;
}
// Special case: If the branch is "main" warn user
@ -43,5 +43,5 @@ export default Route.extend({
});
this.loadRepos(model.slice(0));
},
});
}
}

View File

@ -1,11 +1,11 @@
import ProcessList from "discourse/plugins/docker_manager/discourse/models/process-list";
import Route from "@ember/routing/route";
export default Route.extend({
export default class UpgradeProcesses extends Route {
async model() {
const processes = new ProcessList();
await processes.refresh();
return processes;
},
});
}
}

View File

@ -1,61 +1,59 @@
import Repo from "discourse/plugins/docker_manager/discourse/models/repo";
import Route from "@ember/routing/route";
import { Promise } from "rsvp";
import { tracked } from "@glimmer/tracking";
export default class UpgradeShow extends Route {
@tracked progress;
export default Route.extend({
model(params) {
if (params.id === "all") {
return Repo.findAll();
}
return Repo.find(params.id);
},
}
afterModel(model) {
async afterModel(model) {
if (Array.isArray(model)) {
return Repo.findLatestAll().then((response) => {
JSON.parse(response).repos.forEach((repoData) => {
const repo = model.find((_repo) => _repo.path === repoData.path);
if (!repo) {
return;
}
delete repoData.path;
const response = await Repo.findLatestAll();
for (const [key, value] of Object.entries(repoData)) {
repo.latest[key] = value;
}
});
for (const repoData of JSON.parse(response).repos) {
const repo = model.find((_repo) => _repo.path === repoData.path);
if (!repo) {
return;
}
return Repo.findAllProgress(
model.filter((repo) => !repo.upToDate)
).then((progress) => {
this.set("progress", JSON.parse(progress).progress);
});
});
delete repoData.path;
for (const [key, value] of Object.entries(repoData)) {
repo.latest[key] = value;
}
}
const progress = await Repo.findAllProgress(
model.filter((repo) => !repo.upToDate)
);
this.progress = JSON.parse(progress).progress;
return;
}
return Repo.findUpgrading().then((u) => {
if (u && u !== model) {
return Promise.reject("wat");
}
return model.findLatest().then(() => {
return model.findProgress().then((progress) => {
this.set("progress", progress);
});
});
});
},
await Repo.findUpgrading();
await model.findLatest();
const progress = await model.findProgress();
this.progress = progress;
}
setupController(controller, model) {
controller.reset();
controller.setProperties({
model: Array.isArray(model) ? model : [model],
output: this.get("progress.logs"),
percent: this.get("progress.percentage"),
});
controller.model = Array.isArray(model) ? model : [model];
controller.output = this.progress.logs;
controller.percent = this.progress.percentage;
controller.startBus();
},
}
deactivate() {
this.controllerFor("upgrade.show").stopBus();
},
});
}
}