@wocker/ws 1.0.23 → 1.0.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/AppModule.js +14 -25
- package/lib/controllers/DebugController.d.ts +1 -2
- package/lib/controllers/DebugController.js +4 -6
- package/lib/controllers/ExperimentalController.d.ts +1 -1
- package/lib/controllers/ExperimentalController.js +1 -2
- package/lib/controllers/PluginController.d.ts +1 -1
- package/lib/controllers/PluginController.js +1 -2
- package/lib/controllers/ProjectController.d.ts +7 -11
- package/lib/controllers/ProjectController.js +63 -217
- package/lib/controllers/index.d.ts +0 -1
- package/lib/controllers/index.js +0 -1
- package/lib/env.d.ts +2 -2
- package/lib/env.js +5 -5
- package/lib/main.js +4 -8
- package/lib/makes/index.d.ts +0 -1
- package/lib/makes/index.js +0 -1
- package/lib/modules/core/index.d.ts +2 -0
- package/lib/modules/core/index.js +45 -0
- package/lib/modules/docker/index.d.ts +3 -2
- package/lib/modules/docker/index.js +9 -5
- package/lib/modules/docker/services/ComposeService.d.ts +32 -0
- package/lib/modules/docker/services/ComposeService.js +129 -0
- package/lib/modules/docker/services/DockerService.d.ts +2 -2
- package/lib/modules/docker/services/DockerService.js +7 -29
- package/lib/modules/docker/services/ImageService.d.ts +2 -8
- package/lib/modules/docker/services/ImageService.js +15 -3
- package/lib/modules/docker/services/ModemService.d.ts +4 -2
- package/lib/modules/docker/services/ModemService.js +25 -5
- package/lib/modules/docker/services/ProtoService.js +2 -2
- package/lib/modules/docker/type/ComposeConfig.d.ts +12 -0
- package/lib/modules/docker/type/ComposeConfig.js +2 -0
- package/lib/modules/index.d.ts +3 -0
- package/lib/modules/index.js +3 -0
- package/lib/modules/keystore/controllers/KeystoreController.d.ts +1 -1
- package/lib/modules/keystore/controllers/KeystoreController.js +1 -2
- package/lib/modules/keystore/providers/FileKeystoreProvider.d.ts +3 -4
- package/lib/modules/keystore/providers/FileKeystoreProvider.js +4 -5
- package/lib/modules/keystore/services/KeystoreService.d.ts +3 -3
- package/lib/modules/keystore/services/KeystoreService.js +7 -6
- package/lib/modules/preset/controllers/PresetController.d.ts +18 -0
- package/lib/modules/preset/controllers/PresetController.js +158 -0
- package/lib/modules/preset/controllers/PresetListener.d.ts +15 -0
- package/lib/modules/preset/controllers/PresetListener.js +143 -0
- package/lib/modules/preset/index.d.ts +5 -0
- package/lib/modules/preset/index.js +39 -0
- package/lib/modules/preset/repositories/PresetRepository.d.ts +16 -0
- package/lib/{repositories → modules/preset/repositories}/PresetRepository.js +9 -11
- package/lib/{services → modules/preset/services}/PresetService.d.ts +4 -12
- package/lib/{services → modules/preset/services}/PresetService.js +31 -26
- package/lib/modules/project/controllers/ProjectController.d.ts +14 -0
- package/lib/modules/project/controllers/ProjectController.js +143 -0
- package/lib/modules/project/index.d.ts +5 -0
- package/lib/modules/project/index.js +39 -0
- package/lib/modules/project/repositories/ProjectRepository.d.ts +13 -0
- package/lib/modules/project/repositories/ProjectRepository.js +90 -0
- package/lib/modules/project/services/ProjectService.d.ts +25 -0
- package/lib/modules/project/services/ProjectService.js +253 -0
- package/lib/modules/proxy/controllers/CertController.d.ts +1 -1
- package/lib/modules/proxy/controllers/CertController.js +2 -2
- package/lib/modules/proxy/controllers/ProxyController.d.ts +4 -6
- package/lib/modules/proxy/controllers/ProxyController.js +9 -11
- package/lib/modules/proxy/index.js +3 -1
- package/lib/modules/proxy/services/CertService.d.ts +3 -4
- package/lib/modules/proxy/services/CertService.js +5 -6
- package/lib/modules/proxy/services/ProxyService.d.ts +3 -3
- package/lib/modules/proxy/services/ProxyService.js +18 -18
- package/lib/services/PluginService.d.ts +1 -3
- package/lib/services/PluginService.js +9 -13
- package/lib/utils/index.d.ts +0 -1
- package/lib/utils/index.js +0 -1
- package/package.json +7 -6
- package/lib/controllers/PresetController.d.ts +0 -27
- package/lib/controllers/PresetController.js +0 -364
- package/lib/makes/Logger.d.ts +0 -9
- package/lib/makes/Logger.js +0 -34
- package/lib/modules/app/index.d.ts +0 -2
- package/lib/modules/app/index.js +0 -16
- package/lib/repositories/PresetRepository.d.ts +0 -23
- package/lib/repositories/index.d.ts +0 -1
- package/lib/repositories/index.js +0 -17
- package/lib/services/AppConfigService.d.ts +0 -24
- package/lib/services/AppConfigService.js +0 -154
- package/lib/services/AppEventsService.d.ts +0 -9
- package/lib/services/AppEventsService.js +0 -43
- package/lib/services/LogService.d.ts +0 -15
- package/lib/services/LogService.js +0 -67
- package/lib/services/ProjectService.d.ts +0 -27
- package/lib/services/ProjectService.js +0 -206
- package/lib/utils/followProgress2.d.ts +0 -1
- package/lib/utils/followProgress2.js +0 -63
- package/plugins/proxmox/Dockerfile +0 -35
- package/plugins/proxy/Dockerfile +0 -25
- package/plugins/proxy/Procfile +0 -2
- package/plugins/proxy/bin/wocker-create-ca +0 -19
- package/plugins/proxy/bin/wocker-create-cert +0 -38
- package/plugins/proxy/bin/wocker-create-domains +0 -21
- package/presets/go/Dockerfile +0 -19
- package/presets/go/config.json +0 -14
- package/presets/php-fpm/Dockerfile +0 -173
- package/presets/php-fpm/bin/compare-version +0 -3
- package/presets/php-fpm/config.json +0 -55
- package/presets/php-fpm/etc/nginx/sites-available/default.conf +0 -36
- package/presets/shopify/Dockerfile +0 -160
- package/presets/shopify/bin/compare-version +0 -3
- package/presets/shopify/config.json +0 -26
- package/presets/shopify/etc/apache2/apache2.conf +0 -230
- package/presets/shopify/etc/apache2/mods-available/mpm_prefork.conf +0 -16
- package/presets/shopify/etc/apache2/sites-available/000-default.conf +0 -21
- package/proto/buildkit.proto +0 -55
- package/proto/solver/pb/ops.proto +0 -443
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
15
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
16
|
+
};
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.ProjectController = void 0;
|
|
19
|
+
const core_1 = require("@wocker/core");
|
|
20
|
+
const utils_1 = require("@wocker/utils");
|
|
21
|
+
const path_1 = __importDefault(require("path"));
|
|
22
|
+
const preset_1 = require("../../preset");
|
|
23
|
+
const ProjectService_1 = require("../services/ProjectService");
|
|
24
|
+
let ProjectController = class ProjectController {
|
|
25
|
+
constructor(appConfigService, processService, projectService, presetService) {
|
|
26
|
+
this.appConfigService = appConfigService;
|
|
27
|
+
this.processService = processService;
|
|
28
|
+
this.projectService = projectService;
|
|
29
|
+
this.presetService = presetService;
|
|
30
|
+
}
|
|
31
|
+
async start(name, restart, build, attach) {
|
|
32
|
+
const project = this.projectService.get(name);
|
|
33
|
+
await this.projectService.start(project, restart, build, attach);
|
|
34
|
+
}
|
|
35
|
+
async stop(name) {
|
|
36
|
+
const project = this.projectService.get(name);
|
|
37
|
+
await this.projectService.stop(project);
|
|
38
|
+
}
|
|
39
|
+
async eject(name) {
|
|
40
|
+
const project = this.projectService.get(name);
|
|
41
|
+
const preset = this.presetService.get(project.preset);
|
|
42
|
+
if (!preset) {
|
|
43
|
+
throw new Error("Preset not found");
|
|
44
|
+
}
|
|
45
|
+
const confirm = await (0, utils_1.promptConfirm)({
|
|
46
|
+
message: "Confirm eject",
|
|
47
|
+
default: false
|
|
48
|
+
});
|
|
49
|
+
if (!confirm) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const copier = new core_1.FileSystemManager(preset.path, this.processService.pwd());
|
|
53
|
+
if (preset.dockerfile) {
|
|
54
|
+
if (!copier.destination.exists(preset.dockerfile)) {
|
|
55
|
+
copier.copy(preset.dockerfile);
|
|
56
|
+
}
|
|
57
|
+
project.type = "dockerfile";
|
|
58
|
+
project.dockerfile = preset.dockerfile;
|
|
59
|
+
}
|
|
60
|
+
const files = copier.source.readdir("", {
|
|
61
|
+
recursive: true
|
|
62
|
+
});
|
|
63
|
+
for (const path of files) {
|
|
64
|
+
const stat = copier.source.stat(path), dir = path_1.default.dirname(path);
|
|
65
|
+
if (stat.isFile() && path === "config.json") {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (stat.isFile() && path === preset.dockerfile) {
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
if (copier.destination.exists(path)) {
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (!copier.destination.exists(dir)) {
|
|
75
|
+
copier.destination.mkdir(dir, {
|
|
76
|
+
recursive: true
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
copier.copy(path);
|
|
80
|
+
}
|
|
81
|
+
delete project.preset;
|
|
82
|
+
delete project.imageName;
|
|
83
|
+
project.save();
|
|
84
|
+
}
|
|
85
|
+
async exec(command, name) {
|
|
86
|
+
const project = this.projectService.get(name);
|
|
87
|
+
await this.projectService.exec(project, command);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
exports.ProjectController = ProjectController;
|
|
91
|
+
__decorate([
|
|
92
|
+
(0, core_1.Command)("start"),
|
|
93
|
+
(0, core_1.Description)("Starting project"),
|
|
94
|
+
__param(0, (0, core_1.Option)("name", "n")),
|
|
95
|
+
__param(0, (0, core_1.Description)("The name of the project")),
|
|
96
|
+
__param(1, (0, core_1.Option)("restart", "r")),
|
|
97
|
+
__param(1, (0, core_1.Description)("Restarting project")),
|
|
98
|
+
__param(2, (0, core_1.Option)("build", "b")),
|
|
99
|
+
__param(2, (0, core_1.Description)("Build")),
|
|
100
|
+
__param(3, (0, core_1.Option)("attach", "a")),
|
|
101
|
+
__param(3, (0, core_1.Description)("Attach")),
|
|
102
|
+
__metadata("design:type", Function),
|
|
103
|
+
__metadata("design:paramtypes", [String, Boolean, Boolean, Boolean]),
|
|
104
|
+
__metadata("design:returntype", Promise)
|
|
105
|
+
], ProjectController.prototype, "start", null);
|
|
106
|
+
__decorate([
|
|
107
|
+
(0, core_1.Command)("stop"),
|
|
108
|
+
(0, core_1.Description)("Stopping project"),
|
|
109
|
+
__param(0, (0, core_1.Option)("name", "n")),
|
|
110
|
+
__param(0, (0, core_1.Description)("The name of the project")),
|
|
111
|
+
__metadata("design:type", Function),
|
|
112
|
+
__metadata("design:paramtypes", [String]),
|
|
113
|
+
__metadata("design:returntype", Promise)
|
|
114
|
+
], ProjectController.prototype, "stop", null);
|
|
115
|
+
__decorate([
|
|
116
|
+
(0, core_1.Command)("preset:eject"),
|
|
117
|
+
(0, core_1.Description)("Eject preset files into the project"),
|
|
118
|
+
__param(0, (0, core_1.Option)("name", "n")),
|
|
119
|
+
__param(0, (0, core_1.Description)("The name of the project")),
|
|
120
|
+
__metadata("design:type", Function),
|
|
121
|
+
__metadata("design:paramtypes", [String]),
|
|
122
|
+
__metadata("design:returntype", Promise)
|
|
123
|
+
], ProjectController.prototype, "eject", null);
|
|
124
|
+
__decorate([
|
|
125
|
+
(0, core_1.Command)("exec [...command]"),
|
|
126
|
+
__param(0, (0, core_1.Param)("command")),
|
|
127
|
+
__param(1, (0, core_1.Option)("name", {
|
|
128
|
+
type: "string",
|
|
129
|
+
alias: "n",
|
|
130
|
+
description: "The name of the project"
|
|
131
|
+
})),
|
|
132
|
+
__metadata("design:type", Function),
|
|
133
|
+
__metadata("design:paramtypes", [Array, String]),
|
|
134
|
+
__metadata("design:returntype", Promise)
|
|
135
|
+
], ProjectController.prototype, "exec", null);
|
|
136
|
+
exports.ProjectController = ProjectController = __decorate([
|
|
137
|
+
(0, core_1.Controller)(),
|
|
138
|
+
(0, core_1.Description)("Project commands"),
|
|
139
|
+
__metadata("design:paramtypes", [core_1.AppConfigService,
|
|
140
|
+
core_1.ProcessService,
|
|
141
|
+
ProjectService_1.ProjectService,
|
|
142
|
+
preset_1.PresetService])
|
|
143
|
+
], ProjectController);
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.ProjectService = exports.ProjectRepository = exports.ProjectModule = void 0;
|
|
10
|
+
const core_1 = require("@wocker/core");
|
|
11
|
+
const keystore_1 = require("../keystore");
|
|
12
|
+
const docker_1 = require("../docker");
|
|
13
|
+
const preset_1 = require("../preset");
|
|
14
|
+
const ProjectController_1 = require("./controllers/ProjectController");
|
|
15
|
+
const ProjectRepository_1 = require("./repositories/ProjectRepository");
|
|
16
|
+
Object.defineProperty(exports, "ProjectRepository", { enumerable: true, get: function () { return ProjectRepository_1.ProjectRepository; } });
|
|
17
|
+
const ProjectService_1 = require("./services/ProjectService");
|
|
18
|
+
Object.defineProperty(exports, "ProjectService", { enumerable: true, get: function () { return ProjectService_1.ProjectService; } });
|
|
19
|
+
let ProjectModule = class ProjectModule {
|
|
20
|
+
};
|
|
21
|
+
exports.ProjectModule = ProjectModule;
|
|
22
|
+
exports.ProjectModule = ProjectModule = __decorate([
|
|
23
|
+
(0, core_1.Module)({
|
|
24
|
+
imports: [
|
|
25
|
+
preset_1.PresetModule,
|
|
26
|
+
keystore_1.KeystoreModule,
|
|
27
|
+
docker_1.DockerModule
|
|
28
|
+
],
|
|
29
|
+
controllers: [ProjectController_1.ProjectController],
|
|
30
|
+
providers: [
|
|
31
|
+
ProjectRepository_1.ProjectRepository,
|
|
32
|
+
ProjectService_1.ProjectService
|
|
33
|
+
],
|
|
34
|
+
exports: [
|
|
35
|
+
ProjectRepository_1.ProjectRepository,
|
|
36
|
+
ProjectService_1.ProjectService
|
|
37
|
+
]
|
|
38
|
+
})
|
|
39
|
+
], ProjectModule);
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AppConfigService, AppFileSystemService, Project, ProjectProperties, ProjectServiceSearchParams as SearchParams } from "@wocker/core";
|
|
2
|
+
import { KeystoreService } from "../../keystore";
|
|
3
|
+
export declare class ProjectRepository {
|
|
4
|
+
protected readonly appConfigService: AppConfigService;
|
|
5
|
+
protected readonly fs: AppFileSystemService;
|
|
6
|
+
protected readonly keystoreService: KeystoreService;
|
|
7
|
+
constructor(appConfigService: AppConfigService, fs: AppFileSystemService, keystoreService: KeystoreService);
|
|
8
|
+
getByName(name: string): Project;
|
|
9
|
+
fromObject(data: Partial<ProjectProperties>): Project;
|
|
10
|
+
save(project: Project): void;
|
|
11
|
+
search(params?: SearchParams): Project[];
|
|
12
|
+
searchOne(params?: SearchParams): Project | null;
|
|
13
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ProjectRepository = void 0;
|
|
13
|
+
const core_1 = require("@wocker/core");
|
|
14
|
+
const keystore_1 = require("../../keystore");
|
|
15
|
+
let ProjectRepository = class ProjectRepository {
|
|
16
|
+
constructor(appConfigService, fs, keystoreService) {
|
|
17
|
+
this.appConfigService = appConfigService;
|
|
18
|
+
this.fs = fs;
|
|
19
|
+
this.keystoreService = keystoreService;
|
|
20
|
+
}
|
|
21
|
+
getByName(name) {
|
|
22
|
+
const ref = this.appConfigService.config.getProject(name), config = this.fs.readJSON(`projects/${name}/config.json`);
|
|
23
|
+
return this.fromObject({
|
|
24
|
+
...config,
|
|
25
|
+
path: ref.path
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
fromObject(data) {
|
|
29
|
+
const _this = this;
|
|
30
|
+
return new class extends core_1.Project {
|
|
31
|
+
constructor(data) {
|
|
32
|
+
super(data);
|
|
33
|
+
}
|
|
34
|
+
async getSecret(key, defaultValue) {
|
|
35
|
+
return _this.keystoreService.get(`p:${this.name}:${key}`, defaultValue);
|
|
36
|
+
}
|
|
37
|
+
async setSecret(key, value) {
|
|
38
|
+
return _this.keystoreService.set(`p:${this.name}:${key}`, value);
|
|
39
|
+
}
|
|
40
|
+
save() {
|
|
41
|
+
_this.save(this);
|
|
42
|
+
}
|
|
43
|
+
}(data);
|
|
44
|
+
}
|
|
45
|
+
save(project) {
|
|
46
|
+
if (!project.name) {
|
|
47
|
+
throw new Error("Project should has a name");
|
|
48
|
+
}
|
|
49
|
+
if (!project.path) {
|
|
50
|
+
throw new Error("Project should has a path");
|
|
51
|
+
}
|
|
52
|
+
if (!project.id) {
|
|
53
|
+
project.id = project.name;
|
|
54
|
+
}
|
|
55
|
+
if (!this.fs.exists(`projects/${project.id}`)) {
|
|
56
|
+
this.fs.mkdir(`projects/${project.id}`, {
|
|
57
|
+
recursive: true
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
const { path, ...rest } = project.toObject();
|
|
61
|
+
this.appConfigService.addProject(project.id, project.name, path);
|
|
62
|
+
this.fs.writeJSON(`projects/${project.id}/config.json`, rest);
|
|
63
|
+
this.appConfigService.save();
|
|
64
|
+
}
|
|
65
|
+
search(params = {}) {
|
|
66
|
+
const { name, path } = params, projects = [];
|
|
67
|
+
for (const ref of this.appConfigService.projects) {
|
|
68
|
+
if (name && ref.name !== name) {
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
if (path && ref.path !== path) {
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
const project = this.getByName(ref.name);
|
|
75
|
+
projects.push(project);
|
|
76
|
+
}
|
|
77
|
+
return projects;
|
|
78
|
+
}
|
|
79
|
+
searchOne(params = {}) {
|
|
80
|
+
const [project] = this.search(params);
|
|
81
|
+
return project || null;
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
exports.ProjectRepository = ProjectRepository;
|
|
85
|
+
exports.ProjectRepository = ProjectRepository = __decorate([
|
|
86
|
+
(0, core_1.Injectable)(),
|
|
87
|
+
__metadata("design:paramtypes", [core_1.AppConfigService,
|
|
88
|
+
core_1.AppFileSystemService,
|
|
89
|
+
keystore_1.KeystoreService])
|
|
90
|
+
], ProjectRepository);
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Project, AppConfigService, EventService, ProcessService, ProjectService as CoreProjectService, ProjectServiceSearchParams as SearchParams, LogService } from "@wocker/core";
|
|
2
|
+
import { DockerService, ComposeService } from "../../docker";
|
|
3
|
+
import { PresetService, PresetRepository } from "../../preset";
|
|
4
|
+
import { ProjectRepository } from "../repositories/ProjectRepository";
|
|
5
|
+
export declare class ProjectService extends CoreProjectService {
|
|
6
|
+
protected readonly appConfigService: AppConfigService;
|
|
7
|
+
protected readonly processService: ProcessService;
|
|
8
|
+
protected readonly eventService: EventService;
|
|
9
|
+
protected readonly dockerService: DockerService;
|
|
10
|
+
protected readonly composeService: ComposeService;
|
|
11
|
+
protected readonly projectRepository: ProjectRepository;
|
|
12
|
+
protected readonly presetService: PresetService;
|
|
13
|
+
protected readonly presetRepository: PresetRepository;
|
|
14
|
+
protected readonly logService: LogService;
|
|
15
|
+
constructor(appConfigService: AppConfigService, processService: ProcessService, eventService: EventService, dockerService: DockerService, composeService: ComposeService, projectRepository: ProjectRepository, presetService: PresetService, presetRepository: PresetRepository, logService: LogService);
|
|
16
|
+
get(name?: string): Project;
|
|
17
|
+
search(params?: SearchParams): Project[];
|
|
18
|
+
searchOne(params?: SearchParams): Project | null;
|
|
19
|
+
save(project: Project): void;
|
|
20
|
+
start(project: Project, restart?: boolean, rebuild?: boolean, attach?: boolean): Promise<void>;
|
|
21
|
+
stop(project: Project): Promise<void>;
|
|
22
|
+
build(project: Project, rebuild?: boolean): Promise<void>;
|
|
23
|
+
exec(project: Project, command: string[]): Promise<void>;
|
|
24
|
+
logs(project: Project, detach?: boolean): Promise<void>;
|
|
25
|
+
}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ProjectService = void 0;
|
|
13
|
+
const core_1 = require("@wocker/core");
|
|
14
|
+
const docker_1 = require("../../docker");
|
|
15
|
+
const preset_1 = require("../../preset");
|
|
16
|
+
const ProjectRepository_1 = require("../repositories/ProjectRepository");
|
|
17
|
+
let ProjectService = class ProjectService extends core_1.ProjectService {
|
|
18
|
+
constructor(appConfigService, processService, eventService, dockerService, composeService, projectRepository, presetService, presetRepository, logService) {
|
|
19
|
+
super();
|
|
20
|
+
this.appConfigService = appConfigService;
|
|
21
|
+
this.processService = processService;
|
|
22
|
+
this.eventService = eventService;
|
|
23
|
+
this.dockerService = dockerService;
|
|
24
|
+
this.composeService = composeService;
|
|
25
|
+
this.projectRepository = projectRepository;
|
|
26
|
+
this.presetService = presetService;
|
|
27
|
+
this.presetRepository = presetRepository;
|
|
28
|
+
this.logService = logService;
|
|
29
|
+
}
|
|
30
|
+
get(name) {
|
|
31
|
+
const project = name
|
|
32
|
+
? this.projectRepository.searchOne({ name })
|
|
33
|
+
: this.projectRepository.searchOne({
|
|
34
|
+
path: this.processService.pwd()
|
|
35
|
+
});
|
|
36
|
+
if (!project) {
|
|
37
|
+
throw new Error("Project not found");
|
|
38
|
+
}
|
|
39
|
+
if (name) {
|
|
40
|
+
this.processService.chdir(project.path);
|
|
41
|
+
}
|
|
42
|
+
return project;
|
|
43
|
+
}
|
|
44
|
+
search(params = {}) {
|
|
45
|
+
return this.projectRepository.search(params);
|
|
46
|
+
}
|
|
47
|
+
searchOne(params = {}) {
|
|
48
|
+
return this.projectRepository.searchOne(params);
|
|
49
|
+
}
|
|
50
|
+
save(project) {
|
|
51
|
+
this.projectRepository.save(project);
|
|
52
|
+
}
|
|
53
|
+
async start(project, restart, rebuild, attach) {
|
|
54
|
+
if (restart || rebuild) {
|
|
55
|
+
await this.stop(project);
|
|
56
|
+
}
|
|
57
|
+
await this.build(project, rebuild);
|
|
58
|
+
await this.eventService.emit("project:beforeStart", project);
|
|
59
|
+
switch (project.type) {
|
|
60
|
+
case core_1.PROJECT_TYPE_IMAGE:
|
|
61
|
+
case core_1.PROJECT_TYPE_DOCKERFILE:
|
|
62
|
+
case core_1.PROJECT_TYPE_PRESET: {
|
|
63
|
+
let container = await this.dockerService.getContainer(project.containerName);
|
|
64
|
+
const fs = new core_1.FileSystem(project.path);
|
|
65
|
+
if (!container) {
|
|
66
|
+
container = await this.dockerService.createContainer({
|
|
67
|
+
name: project.containerName,
|
|
68
|
+
image: project.imageName,
|
|
69
|
+
env: {
|
|
70
|
+
...this.appConfigService.config.env || {},
|
|
71
|
+
...project.env || {}
|
|
72
|
+
},
|
|
73
|
+
ports: project.ports || [],
|
|
74
|
+
volumes: (project.volumes || []).map((volume) => {
|
|
75
|
+
const regVolume = /^([^:]+):([^:]+)(?::([^:]+))?$/;
|
|
76
|
+
const [, source, destination, options] = regVolume.exec(volume);
|
|
77
|
+
if (source.startsWith("/")) {
|
|
78
|
+
return volume;
|
|
79
|
+
}
|
|
80
|
+
return `${fs.path(source)}:${destination}` + (options ? `:${options}` : "");
|
|
81
|
+
}),
|
|
82
|
+
extraHosts: Object.keys(project.extraHosts || {}).map((host) => {
|
|
83
|
+
return `${project.extraHosts[host]}:${host}`;
|
|
84
|
+
})
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
const { State: { Status } } = await container.inspect();
|
|
88
|
+
if (Status === "created" || Status === "exited") {
|
|
89
|
+
await container.start();
|
|
90
|
+
}
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
case core_1.PROJECT_TYPE_COMPOSE: {
|
|
94
|
+
await this.composeService.up({
|
|
95
|
+
context: project.path,
|
|
96
|
+
composefile: project.composefile
|
|
97
|
+
});
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
await this.eventService.emit("project:start", project);
|
|
102
|
+
await this.eventService.emit("project:afterStart", project);
|
|
103
|
+
if (attach) {
|
|
104
|
+
switch (project.type) {
|
|
105
|
+
case core_1.PROJECT_TYPE_IMAGE:
|
|
106
|
+
case core_1.PROJECT_TYPE_DOCKERFILE:
|
|
107
|
+
case core_1.PROJECT_TYPE_PRESET:
|
|
108
|
+
await this.dockerService.attach(project.containerName);
|
|
109
|
+
break;
|
|
110
|
+
case core_1.PROJECT_TYPE_COMPOSE:
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
async stop(project) {
|
|
116
|
+
await this.eventService.emit("project:beforeStop", project);
|
|
117
|
+
switch (project.type) {
|
|
118
|
+
case core_1.PROJECT_TYPE_IMAGE:
|
|
119
|
+
case core_1.PROJECT_TYPE_DOCKERFILE:
|
|
120
|
+
case core_1.PROJECT_TYPE_PRESET:
|
|
121
|
+
await this.dockerService.removeContainer(project.containerName);
|
|
122
|
+
break;
|
|
123
|
+
case core_1.PROJECT_TYPE_COMPOSE: {
|
|
124
|
+
await this.composeService.down({
|
|
125
|
+
context: project.path,
|
|
126
|
+
composefile: project.composefile
|
|
127
|
+
});
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
await this.eventService.emit("project:stop", project);
|
|
132
|
+
}
|
|
133
|
+
async build(project, rebuild) {
|
|
134
|
+
switch (project.type) {
|
|
135
|
+
case core_1.PROJECT_TYPE_IMAGE:
|
|
136
|
+
await this.dockerService.pullImage(project.imageName);
|
|
137
|
+
break;
|
|
138
|
+
case core_1.PROJECT_TYPE_DOCKERFILE: {
|
|
139
|
+
project.imageName = `project-${project.name}:develop`;
|
|
140
|
+
project.save();
|
|
141
|
+
if (rebuild) {
|
|
142
|
+
await this.dockerService.imageRm(project.imageName);
|
|
143
|
+
}
|
|
144
|
+
if (!await this.dockerService.imageExists(project.imageName)) {
|
|
145
|
+
await this.dockerService.buildImage({
|
|
146
|
+
version: this.appConfigService.isExperimentalEnabled("buildKit") ? "2" : "1",
|
|
147
|
+
tag: project.imageName,
|
|
148
|
+
buildArgs: project.buildArgs,
|
|
149
|
+
context: project.path,
|
|
150
|
+
dockerfile: project.dockerfile
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
case core_1.PROJECT_TYPE_PRESET: {
|
|
156
|
+
const preset = this.presetRepository.searchOne({
|
|
157
|
+
name: project.preset
|
|
158
|
+
});
|
|
159
|
+
if (preset.image) {
|
|
160
|
+
await this.dockerService.pullImage(preset.image);
|
|
161
|
+
project.imageName = preset.image;
|
|
162
|
+
project.save();
|
|
163
|
+
}
|
|
164
|
+
if (preset.dockerfile) {
|
|
165
|
+
project.imageName = this.presetService.getImageNameForProject(project, preset);
|
|
166
|
+
project.save();
|
|
167
|
+
if (rebuild) {
|
|
168
|
+
await this.dockerService.imageRm(project.imageName);
|
|
169
|
+
}
|
|
170
|
+
if (!await this.dockerService.imageExists(project.imageName)) {
|
|
171
|
+
await this.dockerService.buildImage({
|
|
172
|
+
version: this.appConfigService.isExperimentalEnabled("buildKit") ? "2" : "1",
|
|
173
|
+
tag: project.imageName,
|
|
174
|
+
labels: {
|
|
175
|
+
"org.wocker.preset": preset.name
|
|
176
|
+
},
|
|
177
|
+
buildArgs: project.buildArgs,
|
|
178
|
+
context: preset.path,
|
|
179
|
+
dockerfile: preset.dockerfile
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
case core_1.PROJECT_TYPE_COMPOSE: {
|
|
186
|
+
await this.composeService.build({
|
|
187
|
+
context: project.path,
|
|
188
|
+
composefile: project.composefile
|
|
189
|
+
});
|
|
190
|
+
break;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
await this.eventService.emit("project:build", project, rebuild);
|
|
194
|
+
}
|
|
195
|
+
async exec(project, command) {
|
|
196
|
+
switch (project.type) {
|
|
197
|
+
case core_1.PROJECT_TYPE_IMAGE:
|
|
198
|
+
case core_1.PROJECT_TYPE_DOCKERFILE:
|
|
199
|
+
case core_1.PROJECT_TYPE_PRESET:
|
|
200
|
+
await this.dockerService.exec(project.containerName, command, true);
|
|
201
|
+
break;
|
|
202
|
+
case core_1.PROJECT_TYPE_COMPOSE: {
|
|
203
|
+
const [service, ...args] = command;
|
|
204
|
+
await this.composeService.exec({
|
|
205
|
+
service,
|
|
206
|
+
args,
|
|
207
|
+
context: project.path,
|
|
208
|
+
composefile: project.composefile
|
|
209
|
+
});
|
|
210
|
+
break;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
async logs(project, detach) {
|
|
215
|
+
switch (project.type) {
|
|
216
|
+
case core_1.PROJECT_TYPE_IMAGE:
|
|
217
|
+
case core_1.PROJECT_TYPE_DOCKERFILE:
|
|
218
|
+
case core_1.PROJECT_TYPE_PRESET: {
|
|
219
|
+
const container = await this.dockerService.getContainer(project.containerName);
|
|
220
|
+
if (!container) {
|
|
221
|
+
throw new Error("Project not started");
|
|
222
|
+
}
|
|
223
|
+
if (!detach) {
|
|
224
|
+
await this.dockerService.logs(container);
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
const data = await container.logs({
|
|
228
|
+
stdout: true,
|
|
229
|
+
stderr: true,
|
|
230
|
+
follow: false
|
|
231
|
+
});
|
|
232
|
+
process.stdout.write(data);
|
|
233
|
+
}
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
case core_1.PROJECT_TYPE_COMPOSE:
|
|
237
|
+
break;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
exports.ProjectService = ProjectService;
|
|
242
|
+
exports.ProjectService = ProjectService = __decorate([
|
|
243
|
+
(0, core_1.Injectable)("PROJECT_SERVICE"),
|
|
244
|
+
__metadata("design:paramtypes", [core_1.AppConfigService,
|
|
245
|
+
core_1.ProcessService,
|
|
246
|
+
core_1.EventService,
|
|
247
|
+
docker_1.DockerService,
|
|
248
|
+
docker_1.ComposeService,
|
|
249
|
+
ProjectRepository_1.ProjectRepository,
|
|
250
|
+
preset_1.PresetService,
|
|
251
|
+
preset_1.PresetRepository,
|
|
252
|
+
core_1.LogService])
|
|
253
|
+
], ProjectService);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CertService } from "../services/CertService";
|
|
2
|
-
import { ProjectService } from "
|
|
2
|
+
import { ProjectService } from "../../project";
|
|
3
3
|
export declare class CertController {
|
|
4
4
|
protected readonly projectService: ProjectService;
|
|
5
5
|
protected readonly certService: CertService;
|
|
@@ -15,7 +15,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.CertController = void 0;
|
|
16
16
|
const core_1 = require("@wocker/core");
|
|
17
17
|
const CertService_1 = require("../services/CertService");
|
|
18
|
-
const
|
|
18
|
+
const project_1 = require("../../project");
|
|
19
19
|
let CertController = class CertController {
|
|
20
20
|
constructor(projectService, certService) {
|
|
21
21
|
this.projectService = projectService;
|
|
@@ -109,6 +109,6 @@ __decorate([
|
|
|
109
109
|
], CertController.prototype, "existsOtherNames", null);
|
|
110
110
|
exports.CertController = CertController = __decorate([
|
|
111
111
|
(0, core_1.Controller)(),
|
|
112
|
-
__metadata("design:paramtypes", [
|
|
112
|
+
__metadata("design:paramtypes", [project_1.ProjectService,
|
|
113
113
|
CertService_1.CertService])
|
|
114
114
|
], CertController);
|
|
@@ -1,15 +1,13 @@
|
|
|
1
|
-
import { Project } from "@wocker/core";
|
|
2
|
-
import {
|
|
3
|
-
import { AppEventsService } from "../../../services/AppEventsService";
|
|
4
|
-
import { ProjectService } from "../../../services/ProjectService";
|
|
1
|
+
import { Project, AppConfigService, EventService } from "@wocker/core";
|
|
2
|
+
import { ProjectService } from "../../project";
|
|
5
3
|
import { ProxyService } from "../services/ProxyService";
|
|
6
4
|
export declare class ProxyController {
|
|
7
5
|
protected readonly appConfigService: AppConfigService;
|
|
8
|
-
protected readonly
|
|
6
|
+
protected readonly eventService: EventService;
|
|
9
7
|
protected readonly projectService: ProjectService;
|
|
10
8
|
protected readonly proxyService: ProxyService;
|
|
11
9
|
protected containerName: string;
|
|
12
|
-
constructor(appConfigService: AppConfigService,
|
|
10
|
+
constructor(appConfigService: AppConfigService, eventService: EventService, projectService: ProjectService, proxyService: ProxyService);
|
|
13
11
|
onProjectStart(project: Project): Promise<void>;
|
|
14
12
|
onProjectStop(project: Project): Promise<void>;
|
|
15
13
|
getProjectNames(): string[];
|
|
@@ -19,20 +19,18 @@ exports.ProxyController = void 0;
|
|
|
19
19
|
const core_1 = require("@wocker/core");
|
|
20
20
|
const utils_1 = require("@wocker/utils");
|
|
21
21
|
const yoctocolors_cjs_1 = __importDefault(require("yoctocolors-cjs"));
|
|
22
|
-
const
|
|
23
|
-
const AppEventsService_1 = require("../../../services/AppEventsService");
|
|
24
|
-
const ProjectService_1 = require("../../../services/ProjectService");
|
|
22
|
+
const project_1 = require("../../project");
|
|
25
23
|
const ProxyService_1 = require("../services/ProxyService");
|
|
26
24
|
let ProxyController = class ProxyController {
|
|
27
|
-
constructor(appConfigService,
|
|
25
|
+
constructor(appConfigService, eventService, projectService, proxyService) {
|
|
28
26
|
this.appConfigService = appConfigService;
|
|
29
|
-
this.
|
|
27
|
+
this.eventService = eventService;
|
|
30
28
|
this.projectService = projectService;
|
|
31
29
|
this.proxyService = proxyService;
|
|
32
30
|
this.containerName = "proxy.workspace";
|
|
33
|
-
this.
|
|
34
|
-
this.
|
|
35
|
-
this.
|
|
31
|
+
this.eventService.on("project:init", (project) => this.proxyService.init(project));
|
|
32
|
+
this.eventService.on("project:start", (project) => this.onProjectStart(project));
|
|
33
|
+
this.eventService.on("project:stop", (project) => this.onProjectStop(project));
|
|
36
34
|
}
|
|
37
35
|
async onProjectStart(project) {
|
|
38
36
|
if (project.domains.length === 0) {
|
|
@@ -176,8 +174,8 @@ __decorate([
|
|
|
176
174
|
exports.ProxyController = ProxyController = __decorate([
|
|
177
175
|
(0, core_1.Controller)(),
|
|
178
176
|
(0, core_1.Description)("Proxy commands"),
|
|
179
|
-
__metadata("design:paramtypes", [
|
|
180
|
-
|
|
181
|
-
|
|
177
|
+
__metadata("design:paramtypes", [core_1.AppConfigService,
|
|
178
|
+
core_1.EventService,
|
|
179
|
+
project_1.ProjectService,
|
|
182
180
|
ProxyService_1.ProxyService])
|
|
183
181
|
], ProxyController);
|