@wocker/ws 1.0.25 → 1.0.27
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/README.md +1 -1
- package/lib/AppModule.d.ts +0 -4
- package/lib/AppModule.js +44 -48
- package/lib/env.d.ts +2 -3
- package/lib/env.js +12 -42
- package/lib/main.d.ts +2 -3
- package/lib/main.js +23 -25
- package/lib/makes/GithubClient.d.ts +24 -3
- package/lib/makes/GithubClient.js +20 -6
- package/lib/makes/Version.d.ts +22 -0
- package/lib/makes/Version.js +59 -0
- package/lib/makes/VersionRange.d.ts +6 -0
- package/lib/makes/VersionRange.js +18 -0
- package/lib/makes/VersionRule.d.ts +24 -0
- package/lib/makes/VersionRule.js +68 -0
- package/lib/makes/index.d.ts +2 -0
- package/lib/makes/index.js +2 -0
- package/lib/modules/core/index.js +7 -26
- package/lib/modules/dns/controllers/DnsController.d.ts +7 -0
- package/lib/modules/dns/controllers/DnsController.js +47 -0
- package/lib/modules/dns/index.d.ts +4 -0
- package/lib/modules/dns/index.js +44 -0
- package/lib/modules/dns/services/DnsService.d.ts +10 -0
- package/lib/modules/dns/services/DnsService.js +77 -0
- package/lib/modules/index.d.ts +3 -1
- package/lib/modules/index.js +3 -1
- package/lib/modules/keystore/controllers/KeystoreController.d.ts +0 -3
- package/lib/modules/keystore/controllers/KeystoreController.js +3 -54
- package/lib/modules/keystore/services/KeystoreService.d.ts +1 -0
- package/lib/modules/keystore/services/KeystoreService.js +4 -0
- package/lib/modules/keystore/utils/createEncryptionKey.d.ts +1 -1
- package/lib/modules/package-manager/index.d.ts +5 -0
- package/lib/modules/package-manager/index.js +33 -0
- package/lib/modules/package-manager/providers/NpmProvider.d.ts +7 -0
- package/lib/modules/package-manager/providers/NpmProvider.js +39 -0
- package/lib/modules/package-manager/providers/PnpmProvider.d.ts +7 -0
- package/lib/modules/package-manager/providers/PnpmProvider.js +30 -0
- package/lib/modules/package-manager/providers/YarnProvider.d.ts +7 -0
- package/lib/modules/package-manager/providers/YarnProvider.js +29 -0
- package/lib/modules/package-manager/service/PackageManager.d.ts +10 -0
- package/lib/modules/package-manager/service/PackageManager.js +70 -0
- package/lib/modules/package-manager/service/RegistryService.d.ts +4 -0
- package/lib/{services/NpmService.js → modules/package-manager/service/RegistryService.js} +6 -11
- package/lib/modules/package-manager/types/Package.d.ts +4 -0
- package/lib/modules/package-manager/types/PackageManagerProvider.d.ts +6 -0
- package/lib/modules/package-manager/types/PackageManagerProvider.js +6 -0
- package/lib/{controllers → modules/plugin/controllers}/PluginController.d.ts +2 -2
- package/lib/{controllers → modules/plugin/controllers}/PluginController.js +21 -20
- package/lib/modules/plugin/index.d.ts +4 -0
- package/lib/modules/plugin/index.js +67 -0
- package/lib/{services → modules/plugin/services}/PluginService.d.ts +7 -5
- package/lib/{services → modules/plugin/services}/PluginService.js +38 -40
- package/lib/modules/preset/controllers/PresetController.d.ts +2 -2
- package/lib/modules/preset/controllers/PresetController.js +14 -8
- package/lib/modules/preset/controllers/PresetListener.d.ts +1 -1
- package/lib/modules/preset/controllers/PresetListener.js +2 -2
- package/lib/modules/preset/index.js +5 -2
- package/lib/modules/preset/repositories/PresetRepository.d.ts +3 -2
- package/lib/modules/preset/repositories/PresetRepository.js +9 -4
- package/lib/modules/preset/services/PresetService.d.ts +2 -1
- package/lib/modules/preset/services/PresetService.js +74 -14
- package/lib/modules/project/controllers/ProjectController.d.ts +37 -2
- package/lib/modules/project/controllers/ProjectController.js +837 -7
- package/lib/modules/project/controllers/SecretsController.d.ts +8 -0
- package/lib/modules/project/controllers/SecretsController.js +72 -0
- package/lib/modules/project/index.js +11 -4
- package/lib/modules/project/repositories/ProjectRepository.d.ts +3 -6
- package/lib/modules/project/repositories/ProjectRepository.js +9 -28
- package/lib/modules/project/services/ProjectService.d.ts +5 -3
- package/lib/modules/project/services/ProjectService.js +59 -4
- package/lib/modules/proxy/controllers/ProxyController.d.ts +1 -2
- package/lib/modules/proxy/controllers/ProxyController.js +1 -2
- package/lib/modules/proxy/index.js +5 -2
- package/lib/modules/proxy/services/CertService.d.ts +1 -1
- package/lib/modules/proxy/services/CertService.js +3 -3
- package/lib/modules/proxy/services/ProxyService.d.ts +2 -1
- package/lib/modules/proxy/services/ProxyService.js +7 -3
- package/lib/utils/exec.js +4 -1
- package/lib/utils/get-cursor-position.js +1 -1
- package/package.json +16 -15
- package/plugins/dns/Dockerfile +35 -0
- package/plugins/dns/app/Procfile +2 -0
- package/plugins/dns/app/dnsmasq.conf.tmpl +11 -0
- package/plugins/dns/app/dnsmasq.sh +28 -0
- package/plugins/proxmox/Dockerfile +35 -0
- package/plugins/proxy/Dockerfile +23 -0
- package/plugins/proxy/Procfile +2 -0
- package/plugins/proxy/bin/wocker-create-ca +19 -0
- package/plugins/proxy/bin/wocker-create-cert +38 -0
- package/plugins/proxy/bin/wocker-create-domains +21 -0
- package/presets/shopify/Dockerfile +160 -0
- package/presets/shopify/bin/compare-version +3 -0
- package/presets/shopify/config.json +26 -0
- package/presets/shopify/etc/apache2/apache2.conf +230 -0
- package/presets/shopify/etc/apache2/mods-available/mpm_prefork.conf +16 -0
- package/presets/shopify/etc/apache2/sites-available/000-default.conf +21 -0
- package/bin/ws.js +0 -6
- package/lib/controllers/ProjectController.d.ts +0 -44
- package/lib/controllers/ProjectController.js +0 -956
- package/lib/controllers/index.d.ts +0 -5
- package/lib/controllers/index.js +0 -21
- package/lib/modules/docker/index.d.ts +0 -9
- package/lib/modules/docker/index.js +0 -45
- package/lib/modules/docker/services/ComposeService.d.ts +0 -32
- package/lib/modules/docker/services/ComposeService.js +0 -129
- package/lib/modules/docker/services/ContainerService.d.ts +0 -14
- package/lib/modules/docker/services/ContainerService.js +0 -115
- package/lib/modules/docker/services/DockerService.d.ts +0 -31
- package/lib/modules/docker/services/DockerService.js +0 -246
- package/lib/modules/docker/services/ImageService.d.ts +0 -12
- package/lib/modules/docker/services/ImageService.js +0 -80
- package/lib/modules/docker/services/ModemService.d.ts +0 -16
- package/lib/modules/docker/services/ModemService.js +0 -157
- package/lib/modules/docker/services/ProtoService.d.ts +0 -6
- package/lib/modules/docker/services/ProtoService.js +0 -20
- package/lib/modules/docker/type/ComposeConfig.d.ts +0 -12
- package/lib/modules/docker/utils/formatSizeUnits.d.ts +0 -1
- package/lib/modules/docker/utils/formatSizeUnits.js +0 -19
- package/lib/services/NpmService.d.ts +0 -5
- package/lib/types/index.d.ts +0 -1
- package/lib/types/index.js +0 -17
- /package/lib/{controllers → modules/core/controllers}/CompletionController.d.ts +0 -0
- /package/lib/{controllers → modules/core/controllers}/CompletionController.js +0 -0
- /package/lib/{controllers → modules/core/controllers}/DebugController.d.ts +0 -0
- /package/lib/{controllers → modules/core/controllers}/DebugController.js +0 -0
- /package/lib/{controllers → modules/core/controllers}/ExperimentalController.d.ts +0 -0
- /package/lib/{controllers → modules/core/controllers}/ExperimentalController.js +0 -0
- /package/lib/modules/{docker/type/ComposeConfig.js → package-manager/types/Package.js} +0 -0
- /package/lib/{types → modules/package-manager/types}/PackageInfo.d.ts +0 -0
- /package/lib/{types → modules/package-manager/types}/PackageInfo.js +0 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ProjectService } from "../services/ProjectService";
|
|
2
|
+
export declare class SecretsController {
|
|
3
|
+
protected readonly projectService: ProjectService;
|
|
4
|
+
constructor(projectService: ProjectService);
|
|
5
|
+
create(secret?: string, name?: string): Promise<void>;
|
|
6
|
+
inspect(secret?: string, name?: string): Promise<string | undefined>;
|
|
7
|
+
rm(secret?: string, name?: string): Promise<void>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.SecretsController = void 0;
|
|
16
|
+
const core_1 = require("@wocker/core");
|
|
17
|
+
const utils_1 = require("@wocker/utils");
|
|
18
|
+
const ProjectService_1 = require("../services/ProjectService");
|
|
19
|
+
let SecretsController = class SecretsController {
|
|
20
|
+
constructor(projectService) {
|
|
21
|
+
this.projectService = projectService;
|
|
22
|
+
}
|
|
23
|
+
async create(secret, name) {
|
|
24
|
+
const project = this.projectService.get(name);
|
|
25
|
+
const value = await (0, utils_1.promptInput)({
|
|
26
|
+
message: "Secret value",
|
|
27
|
+
type: "password"
|
|
28
|
+
});
|
|
29
|
+
await project.setSecret(secret, value);
|
|
30
|
+
}
|
|
31
|
+
async inspect(secret, name) {
|
|
32
|
+
const project = this.projectService.get(name);
|
|
33
|
+
return project.getSecret(secret);
|
|
34
|
+
}
|
|
35
|
+
async rm(secret, name) {
|
|
36
|
+
const project = this.projectService.get(name);
|
|
37
|
+
await project.unsetSecret(secret);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
exports.SecretsController = SecretsController;
|
|
41
|
+
__decorate([
|
|
42
|
+
(0, core_1.Command)("secret:create [secret]"),
|
|
43
|
+
(0, core_1.Description)("Adds project secret value to keystore"),
|
|
44
|
+
__param(0, (0, core_1.Param)("secret")),
|
|
45
|
+
__param(1, (0, core_1.Option)("name", "n")),
|
|
46
|
+
__metadata("design:type", Function),
|
|
47
|
+
__metadata("design:paramtypes", [String, String]),
|
|
48
|
+
__metadata("design:returntype", Promise)
|
|
49
|
+
], SecretsController.prototype, "create", null);
|
|
50
|
+
__decorate([
|
|
51
|
+
(0, core_1.Command)("secret:inspect [secret]"),
|
|
52
|
+
(0, core_1.Description)("Inspect secret value"),
|
|
53
|
+
__param(0, (0, core_1.Param)("secret")),
|
|
54
|
+
__param(1, (0, core_1.Option)("name", "n")),
|
|
55
|
+
__metadata("design:type", Function),
|
|
56
|
+
__metadata("design:paramtypes", [String, String]),
|
|
57
|
+
__metadata("design:returntype", Promise)
|
|
58
|
+
], SecretsController.prototype, "inspect", null);
|
|
59
|
+
__decorate([
|
|
60
|
+
(0, core_1.Command)("secret:rm [secret]"),
|
|
61
|
+
(0, core_1.Description)("Delete secret value"),
|
|
62
|
+
__param(0, (0, core_1.Param)("secret")),
|
|
63
|
+
__param(1, (0, core_1.Option)("name", "n")),
|
|
64
|
+
__metadata("design:type", Function),
|
|
65
|
+
__metadata("design:paramtypes", [String, String]),
|
|
66
|
+
__metadata("design:returntype", Promise)
|
|
67
|
+
], SecretsController.prototype, "rm", null);
|
|
68
|
+
exports.SecretsController = SecretsController = __decorate([
|
|
69
|
+
(0, core_1.Controller)(),
|
|
70
|
+
(0, core_1.Description)("Project secret commands"),
|
|
71
|
+
__metadata("design:paramtypes", [ProjectService_1.ProjectService])
|
|
72
|
+
], SecretsController);
|
|
@@ -5,13 +5,17 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
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
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
7
|
};
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
8
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
12
|
exports.ProjectService = exports.ProjectRepository = exports.ProjectModule = void 0;
|
|
10
13
|
const core_1 = require("@wocker/core");
|
|
14
|
+
const docker_module_1 = __importDefault(require("@wocker/docker-module"));
|
|
11
15
|
const keystore_1 = require("../keystore");
|
|
12
|
-
const docker_1 = require("../docker");
|
|
13
16
|
const preset_1 = require("../preset");
|
|
14
17
|
const ProjectController_1 = require("./controllers/ProjectController");
|
|
18
|
+
const SecretsController_1 = require("./controllers/SecretsController");
|
|
15
19
|
const ProjectRepository_1 = require("./repositories/ProjectRepository");
|
|
16
20
|
Object.defineProperty(exports, "ProjectRepository", { enumerable: true, get: function () { return ProjectRepository_1.ProjectRepository; } });
|
|
17
21
|
const ProjectService_1 = require("./services/ProjectService");
|
|
@@ -22,11 +26,14 @@ exports.ProjectModule = ProjectModule;
|
|
|
22
26
|
exports.ProjectModule = ProjectModule = __decorate([
|
|
23
27
|
(0, core_1.Module)({
|
|
24
28
|
imports: [
|
|
25
|
-
|
|
29
|
+
docker_module_1.default,
|
|
26
30
|
keystore_1.KeystoreModule,
|
|
27
|
-
|
|
31
|
+
preset_1.PresetModule
|
|
32
|
+
],
|
|
33
|
+
controllers: [
|
|
34
|
+
ProjectController_1.ProjectController,
|
|
35
|
+
SecretsController_1.SecretsController
|
|
28
36
|
],
|
|
29
|
-
controllers: [ProjectController_1.ProjectController],
|
|
30
37
|
providers: [
|
|
31
38
|
ProjectRepository_1.ProjectRepository,
|
|
32
39
|
ProjectService_1.ProjectService
|
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
import { AppConfigService, AppFileSystemService, Project,
|
|
2
|
-
|
|
3
|
-
export declare class ProjectRepository {
|
|
1
|
+
import { AppConfigService, AppFileSystemService, Project, ProjectRepository as CoreProjectRepository, ProjectRepositorySearchParams as SearchParams } from "@wocker/core";
|
|
2
|
+
export declare class ProjectRepository extends CoreProjectRepository {
|
|
4
3
|
protected readonly appConfigService: AppConfigService;
|
|
5
4
|
protected readonly fs: AppFileSystemService;
|
|
6
|
-
|
|
7
|
-
constructor(appConfigService: AppConfigService, fs: AppFileSystemService, keystoreService: KeystoreService);
|
|
5
|
+
constructor(appConfigService: AppConfigService, fs: AppFileSystemService);
|
|
8
6
|
getByName(name: string): Project;
|
|
9
|
-
fromObject(data: Partial<ProjectProperties>): Project;
|
|
10
7
|
save(project: Project): void;
|
|
11
8
|
search(params?: SearchParams): Project[];
|
|
12
9
|
searchOne(params?: SearchParams): Project | null;
|
|
@@ -11,37 +11,19 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.ProjectRepository = void 0;
|
|
13
13
|
const core_1 = require("@wocker/core");
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
let ProjectRepository = class ProjectRepository extends core_1.ProjectRepository {
|
|
15
|
+
constructor(appConfigService, fs) {
|
|
16
|
+
super();
|
|
17
17
|
this.appConfigService = appConfigService;
|
|
18
18
|
this.fs = fs;
|
|
19
|
-
this.keystoreService = keystoreService;
|
|
20
19
|
}
|
|
21
20
|
getByName(name) {
|
|
22
21
|
const ref = this.appConfigService.config.getProject(name), config = this.fs.readJSON(`projects/${name}/config.json`);
|
|
23
|
-
return
|
|
22
|
+
return new core_1.Project({
|
|
24
23
|
...config,
|
|
25
24
|
path: ref.path
|
|
26
25
|
});
|
|
27
26
|
}
|
|
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
27
|
save(project) {
|
|
46
28
|
if (!project.name) {
|
|
47
29
|
throw new Error("Project should has a name");
|
|
@@ -52,14 +34,14 @@ let ProjectRepository = class ProjectRepository {
|
|
|
52
34
|
if (!project.id) {
|
|
53
35
|
project.id = project.name;
|
|
54
36
|
}
|
|
55
|
-
if (!this.fs.exists(`projects/${project.
|
|
56
|
-
this.fs.mkdir(`projects/${project.
|
|
37
|
+
if (!this.fs.exists(`projects/${project.name}`)) {
|
|
38
|
+
this.fs.mkdir(`projects/${project.name}`, {
|
|
57
39
|
recursive: true
|
|
58
40
|
});
|
|
59
41
|
}
|
|
60
42
|
const { path, ...rest } = project.toObject();
|
|
61
|
-
this.appConfigService.addProject(project.
|
|
62
|
-
this.fs.writeJSON(`projects/${project.
|
|
43
|
+
this.appConfigService.addProject(project.name, path);
|
|
44
|
+
this.fs.writeJSON(`projects/${project.name}/config.json`, rest);
|
|
63
45
|
this.appConfigService.save();
|
|
64
46
|
}
|
|
65
47
|
search(params = {}) {
|
|
@@ -85,6 +67,5 @@ exports.ProjectRepository = ProjectRepository;
|
|
|
85
67
|
exports.ProjectRepository = ProjectRepository = __decorate([
|
|
86
68
|
(0, core_1.Injectable)(),
|
|
87
69
|
__metadata("design:paramtypes", [core_1.AppConfigService,
|
|
88
|
-
core_1.AppFileSystemService
|
|
89
|
-
keystore_1.KeystoreService])
|
|
70
|
+
core_1.AppFileSystemService])
|
|
90
71
|
], ProjectRepository);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { AppConfigService, EventService, LogService, ProcessService, Project, ProjectService as CoreProjectService, ProjectRepositorySearchParams as SearchParams } from "@wocker/core";
|
|
2
|
+
import { ComposeService, DockerService } from "@wocker/docker-module";
|
|
3
|
+
import { PresetRepository, PresetService } from "../../preset";
|
|
4
4
|
import { ProjectRepository } from "../repositories/ProjectRepository";
|
|
5
5
|
export declare class ProjectService extends CoreProjectService {
|
|
6
6
|
protected readonly appConfigService: AppConfigService;
|
|
@@ -20,6 +20,8 @@ export declare class ProjectService extends CoreProjectService {
|
|
|
20
20
|
start(project: Project, restart?: boolean, rebuild?: boolean, attach?: boolean): Promise<void>;
|
|
21
21
|
stop(project: Project): Promise<void>;
|
|
22
22
|
build(project: Project, rebuild?: boolean): Promise<void>;
|
|
23
|
+
attach(project: Project): Promise<void>;
|
|
24
|
+
run(project: Project, script: string, service?: string, args?: string[]): Promise<void>;
|
|
23
25
|
exec(project: Project, command: string[]): Promise<void>;
|
|
24
26
|
logs(project: Project, detach?: boolean): Promise<void>;
|
|
25
27
|
}
|
|
@@ -11,9 +11,15 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.ProjectService = void 0;
|
|
13
13
|
const core_1 = require("@wocker/core");
|
|
14
|
-
const
|
|
14
|
+
const docker_module_1 = require("@wocker/docker-module");
|
|
15
|
+
const cli_1 = require("@kearisp/cli");
|
|
15
16
|
const preset_1 = require("../../preset");
|
|
16
17
|
const ProjectRepository_1 = require("../repositories/ProjectRepository");
|
|
18
|
+
class PublicCli extends cli_1.Cli {
|
|
19
|
+
parseCommand(command, index) {
|
|
20
|
+
return super.parseCommand(command, index);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
17
23
|
let ProjectService = class ProjectService extends core_1.ProjectService {
|
|
18
24
|
constructor(appConfigService, processService, eventService, dockerService, composeService, projectRepository, presetService, presetRepository, logService) {
|
|
19
25
|
super();
|
|
@@ -66,6 +72,7 @@ let ProjectService = class ProjectService extends core_1.ProjectService {
|
|
|
66
72
|
container = await this.dockerService.createContainer({
|
|
67
73
|
name: project.containerName,
|
|
68
74
|
image: project.imageName,
|
|
75
|
+
cmd: project.cmd,
|
|
69
76
|
env: {
|
|
70
77
|
...this.appConfigService.config.env || {},
|
|
71
78
|
...project.env || {}
|
|
@@ -175,7 +182,9 @@ let ProjectService = class ProjectService extends core_1.ProjectService {
|
|
|
175
182
|
"org.wocker.preset": preset.name
|
|
176
183
|
},
|
|
177
184
|
buildArgs: project.buildArgs,
|
|
178
|
-
context:
|
|
185
|
+
context: project.presetMode === "project"
|
|
186
|
+
? [preset.path, project.path]
|
|
187
|
+
: preset.path,
|
|
179
188
|
dockerfile: preset.dockerfile
|
|
180
189
|
});
|
|
181
190
|
}
|
|
@@ -192,6 +201,52 @@ let ProjectService = class ProjectService extends core_1.ProjectService {
|
|
|
192
201
|
}
|
|
193
202
|
await this.eventService.emit("project:build", project, rebuild);
|
|
194
203
|
}
|
|
204
|
+
async attach(project) {
|
|
205
|
+
switch (project.type) {
|
|
206
|
+
case core_1.PROJECT_TYPE_IMAGE:
|
|
207
|
+
case core_1.PROJECT_TYPE_DOCKERFILE:
|
|
208
|
+
case core_1.PROJECT_TYPE_PRESET: {
|
|
209
|
+
await this.dockerService.attach(project.containerName);
|
|
210
|
+
break;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
async run(project, script, service, args = []) {
|
|
215
|
+
if (!project.scripts || !project.scripts[script]) {
|
|
216
|
+
throw new Error(`Script ${script} not found`);
|
|
217
|
+
}
|
|
218
|
+
switch (project.type) {
|
|
219
|
+
case core_1.PROJECT_TYPE_IMAGE:
|
|
220
|
+
case core_1.PROJECT_TYPE_DOCKERFILE:
|
|
221
|
+
case core_1.PROJECT_TYPE_PRESET: {
|
|
222
|
+
const container = await this.dockerService.getContainer(project.containerName);
|
|
223
|
+
if (!container) {
|
|
224
|
+
throw new Error("The project is not started");
|
|
225
|
+
}
|
|
226
|
+
const cli = new PublicCli();
|
|
227
|
+
const cmd = cli.parseCommand(`command ${project.scripts[script]}`, 0);
|
|
228
|
+
this.logService.debug(cmd);
|
|
229
|
+
const exec = await container.exec({
|
|
230
|
+
AttachStdin: true,
|
|
231
|
+
AttachStdout: true,
|
|
232
|
+
AttachStderr: true,
|
|
233
|
+
Tty: process.stdin.isTTY,
|
|
234
|
+
Cmd: [...cmd, ...args || []]
|
|
235
|
+
});
|
|
236
|
+
const stream = await exec.start({
|
|
237
|
+
hijack: true,
|
|
238
|
+
stdin: true,
|
|
239
|
+
Tty: process.stdin.isTTY
|
|
240
|
+
});
|
|
241
|
+
await this.dockerService.attachStream(stream);
|
|
242
|
+
break;
|
|
243
|
+
}
|
|
244
|
+
case core_1.PROJECT_TYPE_COMPOSE: {
|
|
245
|
+
console.log(service, script, args);
|
|
246
|
+
break;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
195
250
|
async exec(project, command) {
|
|
196
251
|
switch (project.type) {
|
|
197
252
|
case core_1.PROJECT_TYPE_IMAGE:
|
|
@@ -244,8 +299,8 @@ exports.ProjectService = ProjectService = __decorate([
|
|
|
244
299
|
__metadata("design:paramtypes", [core_1.AppConfigService,
|
|
245
300
|
core_1.ProcessService,
|
|
246
301
|
core_1.EventService,
|
|
247
|
-
|
|
248
|
-
|
|
302
|
+
docker_module_1.DockerService,
|
|
303
|
+
docker_module_1.ComposeService,
|
|
249
304
|
ProjectRepository_1.ProjectRepository,
|
|
250
305
|
preset_1.PresetService,
|
|
251
306
|
preset_1.PresetRepository,
|
|
@@ -6,10 +6,9 @@ export declare class ProxyController {
|
|
|
6
6
|
protected readonly eventService: EventService;
|
|
7
7
|
protected readonly projectService: ProjectService;
|
|
8
8
|
protected readonly proxyService: ProxyService;
|
|
9
|
-
protected containerName: string;
|
|
10
9
|
constructor(appConfigService: AppConfigService, eventService: EventService, projectService: ProjectService, proxyService: ProxyService);
|
|
11
10
|
onProjectStart(project: Project): Promise<void>;
|
|
12
|
-
onProjectStop(
|
|
11
|
+
onProjectStop(_project: Project): Promise<void>;
|
|
13
12
|
getProjectNames(): string[];
|
|
14
13
|
init(httpPort?: number, httpsPort?: number, sshPort?: number, sshPassword?: string): Promise<void>;
|
|
15
14
|
start(restart?: boolean, rebuild?: boolean): Promise<void>;
|
|
@@ -27,7 +27,6 @@ let ProxyController = class ProxyController {
|
|
|
27
27
|
this.eventService = eventService;
|
|
28
28
|
this.projectService = projectService;
|
|
29
29
|
this.proxyService = proxyService;
|
|
30
|
-
this.containerName = "proxy.workspace";
|
|
31
30
|
this.eventService.on("project:init", (project) => this.proxyService.init(project));
|
|
32
31
|
this.eventService.on("project:start", (project) => this.onProjectStart(project));
|
|
33
32
|
this.eventService.on("project:stop", (project) => this.onProjectStop(project));
|
|
@@ -42,7 +41,7 @@ let ProxyController = class ProxyController {
|
|
|
42
41
|
}
|
|
43
42
|
await this.start();
|
|
44
43
|
}
|
|
45
|
-
async onProjectStop(
|
|
44
|
+
async onProjectStop(_project) {
|
|
46
45
|
}
|
|
47
46
|
getProjectNames() {
|
|
48
47
|
const projects = this.projectService.search();
|
|
@@ -5,10 +5,13 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
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
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
7
|
};
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
8
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
12
|
exports.CertService = exports.ProxyService = exports.ProxyModule = void 0;
|
|
10
13
|
const core_1 = require("@wocker/core");
|
|
11
|
-
const
|
|
14
|
+
const docker_module_1 = __importDefault(require("@wocker/docker-module"));
|
|
12
15
|
const project_1 = require("../project");
|
|
13
16
|
const CertController_1 = require("./controllers/CertController");
|
|
14
17
|
const ProxyController_1 = require("./controllers/ProxyController");
|
|
@@ -22,7 +25,7 @@ exports.ProxyModule = ProxyModule;
|
|
|
22
25
|
exports.ProxyModule = ProxyModule = __decorate([
|
|
23
26
|
(0, core_1.Module)({
|
|
24
27
|
imports: [
|
|
25
|
-
|
|
28
|
+
docker_module_1.default,
|
|
26
29
|
project_1.ProjectModule
|
|
27
30
|
],
|
|
28
31
|
controllers: [
|
|
@@ -47,9 +47,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
47
47
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
48
|
exports.CertService = void 0;
|
|
49
49
|
const core_1 = require("@wocker/core");
|
|
50
|
+
const docker_module_1 = require("@wocker/docker-module");
|
|
50
51
|
const Path = __importStar(require("path"));
|
|
51
52
|
const cli_table3_1 = __importDefault(require("cli-table3"));
|
|
52
|
-
const docker_1 = require("../../docker");
|
|
53
53
|
const ProxyService_1 = require("./ProxyService");
|
|
54
54
|
let CertService = class CertService {
|
|
55
55
|
constructor(fs, proxyService, dockerService) {
|
|
@@ -72,7 +72,7 @@ let CertService = class CertService {
|
|
|
72
72
|
throw new Error("Cert name missing");
|
|
73
73
|
}
|
|
74
74
|
await this.proxyService.start();
|
|
75
|
-
const container = await this.dockerService.getContainer("proxy
|
|
75
|
+
const container = await this.dockerService.getContainer("wocker-proxy");
|
|
76
76
|
if (!container) {
|
|
77
77
|
throw new Error("Proxy not started");
|
|
78
78
|
}
|
|
@@ -146,5 +146,5 @@ exports.CertService = CertService = __decorate([
|
|
|
146
146
|
(0, core_1.Injectable)(),
|
|
147
147
|
__metadata("design:paramtypes", [core_1.AppFileSystemService,
|
|
148
148
|
ProxyService_1.ProxyService,
|
|
149
|
-
|
|
149
|
+
docker_module_1.DockerService])
|
|
150
150
|
], CertService);
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { Project, AppConfigService, AppFileSystemService, ProxyService as CoreProxyService } from "@wocker/core";
|
|
2
|
-
import { DockerService } from "
|
|
2
|
+
import { DockerService } from "@wocker/docker-module";
|
|
3
3
|
export declare class ProxyService extends CoreProxyService {
|
|
4
4
|
protected readonly appConfigService: AppConfigService;
|
|
5
5
|
protected readonly fs: AppFileSystemService;
|
|
6
6
|
protected readonly dockerService: DockerService;
|
|
7
7
|
protected containerName: string;
|
|
8
|
+
protected oldContainerNames: string[];
|
|
8
9
|
protected imageName: string;
|
|
9
10
|
protected oldImages: string[];
|
|
10
11
|
constructor(appConfigService: AppConfigService, fs: AppFileSystemService, dockerService: DockerService);
|
|
@@ -44,17 +44,18 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
44
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
45
|
exports.ProxyService = void 0;
|
|
46
46
|
const core_1 = require("@wocker/core");
|
|
47
|
+
const docker_module_1 = require("@wocker/docker-module");
|
|
47
48
|
const utils_1 = require("@wocker/utils");
|
|
48
49
|
const Path = __importStar(require("path"));
|
|
49
50
|
const env_1 = require("../../../env");
|
|
50
|
-
const docker_1 = require("../../docker");
|
|
51
51
|
let ProxyService = class ProxyService extends core_1.ProxyService {
|
|
52
52
|
constructor(appConfigService, fs, dockerService) {
|
|
53
53
|
super();
|
|
54
54
|
this.appConfigService = appConfigService;
|
|
55
55
|
this.fs = fs;
|
|
56
56
|
this.dockerService = dockerService;
|
|
57
|
-
this.containerName = "proxy
|
|
57
|
+
this.containerName = "wocker-proxy";
|
|
58
|
+
this.oldContainerNames = ["proxy.workspace"];
|
|
58
59
|
this.imageName = "wocker-proxy:1.0.1";
|
|
59
60
|
this.oldImages = [
|
|
60
61
|
"wocker-proxy:1.0.0"
|
|
@@ -75,6 +76,9 @@ let ProxyService = class ProxyService extends core_1.ProxyService {
|
|
|
75
76
|
}
|
|
76
77
|
let container = await this.dockerService.getContainer(this.containerName);
|
|
77
78
|
if (!container) {
|
|
79
|
+
for (const containerName of this.oldContainerNames) {
|
|
80
|
+
await this.dockerService.removeContainer(containerName);
|
|
81
|
+
}
|
|
78
82
|
console.info("Proxy starting...");
|
|
79
83
|
await this.build(rebuild);
|
|
80
84
|
const fs = this.fs;
|
|
@@ -163,5 +167,5 @@ exports.ProxyService = ProxyService = __decorate([
|
|
|
163
167
|
(0, core_1.Injectable)("PROXY_SERVICE"),
|
|
164
168
|
__metadata("design:paramtypes", [core_1.AppConfigService,
|
|
165
169
|
core_1.AppFileSystemService,
|
|
166
|
-
|
|
170
|
+
docker_module_1.DockerService])
|
|
167
171
|
], ProxyService);
|
package/lib/utils/exec.js
CHANGED
|
@@ -8,10 +8,13 @@ const exec = async (command, options) => {
|
|
|
8
8
|
maxBuffer: Infinity
|
|
9
9
|
});
|
|
10
10
|
return new Promise((resolve, reject) => {
|
|
11
|
-
let data = "";
|
|
11
|
+
let data = "", errData = "";
|
|
12
12
|
worker.stdout.on("data", (chunk) => {
|
|
13
13
|
data += chunk.toString();
|
|
14
14
|
});
|
|
15
|
+
worker.stderr.on("data", (chunk) => {
|
|
16
|
+
errData += chunk.toString();
|
|
17
|
+
});
|
|
15
18
|
worker.on("exit", (code) => {
|
|
16
19
|
if (code !== 0) {
|
|
17
20
|
reject(new Error(`Process exited with code ${code}`));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getCursorPosition = void 0;
|
|
4
|
-
const code =
|
|
4
|
+
const code = "\x1b[6n";
|
|
5
5
|
const getCursorPosition = async () => {
|
|
6
6
|
process.stdin.resume();
|
|
7
7
|
process.stdin.setRawMode(true);
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wocker/ws",
|
|
3
|
-
"
|
|
3
|
+
"type": "commonjs",
|
|
4
|
+
"version": "1.0.27",
|
|
4
5
|
"author": "Kris Papercut <krispcut@gmail.com>",
|
|
5
6
|
"description": "Docker workspace for web projects",
|
|
6
7
|
"license": "MIT",
|
|
@@ -13,7 +14,7 @@
|
|
|
13
14
|
"devops"
|
|
14
15
|
],
|
|
15
16
|
"bin": {
|
|
16
|
-
"ws": "
|
|
17
|
+
"ws": "lib/main.js"
|
|
17
18
|
},
|
|
18
19
|
"homepage": "https://kearisp.github.io/wocker",
|
|
19
20
|
"repository": {
|
|
@@ -27,43 +28,43 @@
|
|
|
27
28
|
"prepublishOnly": "npm run build",
|
|
28
29
|
"start": "npm run watch",
|
|
29
30
|
"build": "tsc --project tsconfig.build.json",
|
|
30
|
-
"
|
|
31
|
+
"postbuild": "chmod +x ./lib/main.js",
|
|
32
|
+
"watch": "npm run build && tsc -w --project tsconfig.build.json",
|
|
31
33
|
"test": "jest --colors",
|
|
32
34
|
"test-watch": "jest --colors --watchAll",
|
|
33
35
|
"make-coverage-badge": "make-coverage-badge"
|
|
34
36
|
},
|
|
35
37
|
"dependencies": {
|
|
36
|
-
"@wocker/core": "1.0.
|
|
37
|
-
"@wocker/
|
|
38
|
+
"@wocker/core": "1.0.27",
|
|
39
|
+
"@wocker/docker-module": "^0.0.1",
|
|
40
|
+
"@wocker/utils": "^2.0.6",
|
|
38
41
|
"async-mutex": "^0.4.0",
|
|
39
42
|
"axios": "^1.6.7",
|
|
40
43
|
"child_process": "^1.0.2",
|
|
41
44
|
"cli-table3": "^0.6.2",
|
|
42
45
|
"docker-compose": "^1.2.0",
|
|
43
46
|
"dockerode": "^4.0.2",
|
|
44
|
-
"fs": "^0.0.1-security",
|
|
45
47
|
"keytar": "^7.9.0",
|
|
46
48
|
"md5": "^2.3.0",
|
|
47
|
-
"os": "^0.1.2",
|
|
48
|
-
"path": "^0.12.7",
|
|
49
49
|
"protobufjs": "^7.5.1",
|
|
50
50
|
"unzipper": "^0.12.3",
|
|
51
51
|
"yoctocolors-cjs": "^2.1.2"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@types/dockerode": "^3.3.23",
|
|
55
|
-
"@types/jest": "^
|
|
55
|
+
"@types/jest": "^30.0.0",
|
|
56
56
|
"@types/md5": "^2.3.2",
|
|
57
57
|
"@types/mute-stream": "^0.0.4",
|
|
58
|
-
"@types/node": "^24.
|
|
58
|
+
"@types/node": "^24.5.2",
|
|
59
59
|
"@types/unzipper": "^0.10.10",
|
|
60
|
-
"@wocker/
|
|
61
|
-
"
|
|
60
|
+
"@wocker/docker-mock-module": "^0.0.1",
|
|
61
|
+
"@wocker/testing": "^1.0.4",
|
|
62
|
+
"jest": "^30.1.3",
|
|
62
63
|
"make-coverage-badge": "^1.2.0",
|
|
63
|
-
"memfs": "^4.
|
|
64
|
-
"ts-jest": "^29.
|
|
64
|
+
"memfs": "^4.49.0",
|
|
65
|
+
"ts-jest": "^29.4.4",
|
|
65
66
|
"ts-node": "^10.9.2",
|
|
66
|
-
"typescript": "^5.
|
|
67
|
+
"typescript": "^5.9.3",
|
|
67
68
|
"unionfs": "^4.5.4"
|
|
68
69
|
}
|
|
69
70
|
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
FROM docker.io/nginxproxy/docker-gen:0.15.0 AS docker-gen
|
|
2
|
+
|
|
3
|
+
FROM docker.io/nginxproxy/forego:0.18.3 AS forego
|
|
4
|
+
|
|
5
|
+
FROM alpine:edge
|
|
6
|
+
|
|
7
|
+
RUN set -eu && \
|
|
8
|
+
apk --no-cache add \
|
|
9
|
+
tini \
|
|
10
|
+
bash \
|
|
11
|
+
dnsmasq-dnssec && \
|
|
12
|
+
mkdir -p /etc/default/ && \
|
|
13
|
+
echo -e "ENABLED=1\nIGNORE_RESOLVCONF=yes" > /etc/default/dnsmasq && \
|
|
14
|
+
# rm -f /etc/dnsmasq.conf && \
|
|
15
|
+
rm -rf /tmp/* /var/cache/apk/*
|
|
16
|
+
|
|
17
|
+
#COPY ./dnsmasq.conf.tmpl /app/dnsmasq.conf.tmpl
|
|
18
|
+
#COPY ./Procfile /app/Procfile
|
|
19
|
+
|
|
20
|
+
#RUN wget https://github.com/jwilder/docker-gen/releases/download/0.3.3/docker-gen-linux-amd64-0.3.3.tar.gz && \
|
|
21
|
+
# tar xvzf docker-gen-linux-amd64-0.3.3.tar.gz && \
|
|
22
|
+
# rm docker-gen-linux-amd64-0.3.3.tar.gz && \
|
|
23
|
+
# mv docker-gen /usr/local/bin/
|
|
24
|
+
|
|
25
|
+
# Install Forego + docker-gen
|
|
26
|
+
COPY --from=forego /usr/local/bin/forego /usr/local/bin/forego
|
|
27
|
+
COPY --from=docker-gen /usr/local/bin/docker-gen /usr/local/bin/docker-gen
|
|
28
|
+
|
|
29
|
+
COPY app /app/
|
|
30
|
+
RUN chmod 755 /app/dnsmasq.sh
|
|
31
|
+
|
|
32
|
+
WORKDIR /app/
|
|
33
|
+
|
|
34
|
+
#ENTRYPOINT ["/sbin/tini", "--", "honcho", "-f", "/app/Procfile", "start"]
|
|
35
|
+
CMD ["forego", "start", "-r"]
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{{- $globals := dict }}
|
|
2
|
+
{{- $_ := set $globals "containers" $ }}
|
|
3
|
+
|
|
4
|
+
{{- range $hostname, $containers := groupByMulti $globals.containers "Env.VIRTUAL_HOST" "," }}
|
|
5
|
+
{{ $hostname }}
|
|
6
|
+
|
|
7
|
+
{{- range $container := $containers }}
|
|
8
|
+
{{ printf "%#v" $container.Networks }}
|
|
9
|
+
{{- end }}
|
|
10
|
+
{{- end }}
|
|
11
|
+
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -Eeuo pipefail
|
|
3
|
+
|
|
4
|
+
conf="/etc/dnsmasq.conf"
|
|
5
|
+
|
|
6
|
+
# Check if config file is not a directory
|
|
7
|
+
if [ -d "$conf" ]; then
|
|
8
|
+
echo "The bind $conf maps to a file that does not exist!"
|
|
9
|
+
exit 1
|
|
10
|
+
fi
|
|
11
|
+
|
|
12
|
+
if [ ! -f "$conf" ]; then
|
|
13
|
+
conf="/etc/dnsmasq.custom"
|
|
14
|
+
template="/etc/dnsmasq.default"
|
|
15
|
+
|
|
16
|
+
if [ ! -f "$template" ]; then
|
|
17
|
+
echo "Your /etc directory does not contain a valid dnsmasq.conf file!"
|
|
18
|
+
exit 1
|
|
19
|
+
fi
|
|
20
|
+
|
|
21
|
+
rm -f "$conf"
|
|
22
|
+
cp "$template" "$conf"
|
|
23
|
+
|
|
24
|
+
[ -n "$DNS1" ] && sed -i -e "s/1.0.0.1/$DNS1/g" "$conf"
|
|
25
|
+
[ -n "$DNS2" ] && sed -i -e "s/1.1.1.1/$DNS2/g" "$conf"
|
|
26
|
+
fi
|
|
27
|
+
|
|
28
|
+
exec dnsmasq "--conf-file=$conf" --no-daemon --no-resolv
|