draken 0.1.0
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 +108 -0
- package/dist/auth/middleware.d.ts +23 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +117 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +70 -0
- package/dist/cli.js.map +1 -0
- package/dist/db/queries.d.ts +16 -0
- package/dist/db/queries.d.ts.map +1 -0
- package/dist/db/queries.js +91 -0
- package/dist/db/queries.js.map +1 -0
- package/dist/db/schema.d.ts +4 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +71 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/docker/dockerfile.d.ts +5 -0
- package/dist/docker/dockerfile.d.ts.map +1 -0
- package/dist/docker/dockerfile.js +32 -0
- package/dist/docker/dockerfile.js.map +1 -0
- package/dist/docker/manager.d.ts +42 -0
- package/dist/docker/manager.d.ts.map +1 -0
- package/dist/docker/manager.js +311 -0
- package/dist/docker/manager.js.map +1 -0
- package/dist/git/status.d.ts +36 -0
- package/dist/git/status.d.ts.map +1 -0
- package/dist/git/status.js +213 -0
- package/dist/git/status.js.map +1 -0
- package/dist/routes/auth.d.ts +3 -0
- package/dist/routes/auth.d.ts.map +1 -0
- package/dist/routes/auth.js +49 -0
- package/dist/routes/auth.js.map +1 -0
- package/dist/routes/browse.d.ts +3 -0
- package/dist/routes/browse.d.ts.map +1 -0
- package/dist/routes/browse.js +49 -0
- package/dist/routes/browse.js.map +1 -0
- package/dist/routes/git.d.ts +3 -0
- package/dist/routes/git.d.ts.map +1 -0
- package/dist/routes/git.js +135 -0
- package/dist/routes/git.js.map +1 -0
- package/dist/routes/projects.d.ts +3 -0
- package/dist/routes/projects.d.ts.map +1 -0
- package/dist/routes/projects.js +149 -0
- package/dist/routes/projects.js.map +1 -0
- package/dist/routes/tasks.d.ts +3 -0
- package/dist/routes/tasks.d.ts.map +1 -0
- package/dist/routes/tasks.js +313 -0
- package/dist/routes/tasks.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +60 -0
- package/dist/server.js.map +1 -0
- package/dist/types.d.ts +32 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/draken.dockerfile.template +18 -0
- package/package.json +59 -0
- package/public/assets/index-B_sRrhlE.css +1 -0
- package/public/assets/index-DHRickdD.js +235 -0
- package/public/draken.svg +13 -0
- package/public/index.html +18 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const express_1 = require("express");
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const os_1 = __importDefault(require("os"));
|
|
10
|
+
const router = (0, express_1.Router)();
|
|
11
|
+
router.get('/', (req, res) => {
|
|
12
|
+
const requestedPath = req.query.path || os_1.default.homedir();
|
|
13
|
+
try {
|
|
14
|
+
// Resolve to absolute path
|
|
15
|
+
const absolutePath = path_1.default.resolve(requestedPath);
|
|
16
|
+
// Check if path exists and is a directory
|
|
17
|
+
if (!fs_1.default.existsSync(absolutePath)) {
|
|
18
|
+
return res.status(404).json({ error: 'Path not found' });
|
|
19
|
+
}
|
|
20
|
+
const stats = fs_1.default.statSync(absolutePath);
|
|
21
|
+
if (!stats.isDirectory()) {
|
|
22
|
+
return res.status(400).json({ error: 'Path is not a directory' });
|
|
23
|
+
}
|
|
24
|
+
// Read directory contents
|
|
25
|
+
const entries = fs_1.default.readdirSync(absolutePath, { withFileTypes: true });
|
|
26
|
+
const directories = entries
|
|
27
|
+
.filter(entry => entry.isDirectory() && !entry.name.startsWith('.'))
|
|
28
|
+
.map(entry => ({
|
|
29
|
+
name: entry.name,
|
|
30
|
+
path: path_1.default.join(absolutePath, entry.name),
|
|
31
|
+
isDirectory: true,
|
|
32
|
+
}))
|
|
33
|
+
.sort((a, b) => a.name.localeCompare(b.name));
|
|
34
|
+
// Get parent directory
|
|
35
|
+
const parentPath = path_1.default.dirname(absolutePath);
|
|
36
|
+
const hasParent = parentPath !== absolutePath;
|
|
37
|
+
res.json({
|
|
38
|
+
currentPath: absolutePath,
|
|
39
|
+
parentPath: hasParent ? parentPath : null,
|
|
40
|
+
entries: directories,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
console.error('Browse error:', err);
|
|
45
|
+
res.status(500).json({ error: 'Failed to browse directory' });
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
exports.default = router;
|
|
49
|
+
//# sourceMappingURL=browse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browse.js","sourceRoot":"","sources":["../../src/routes/browse.ts"],"names":[],"mappings":";;;;;AAAA,qCAAoD;AACpD,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AAGpB,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;AAExB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IAC9C,MAAM,aAAa,GAAI,GAAG,CAAC,KAAK,CAAC,IAAe,IAAI,YAAE,CAAC,OAAO,EAAE,CAAC;IAEjE,IAAI,CAAC;QACH,2BAA2B;QAC3B,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAEjD,0CAA0C;QAC1C,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,KAAK,GAAG,YAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,0BAA0B;QAC1B,MAAM,OAAO,GAAG,YAAE,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAEtE,MAAM,WAAW,GAAqB,OAAO;aAC1C,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;aACnE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACb,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC;YACzC,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;aACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAEhD,uBAAuB;QACvB,MAAM,UAAU,GAAG,cAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,UAAU,KAAK,YAAY,CAAC;QAE9C,GAAG,CAAC,IAAI,CAAC;YACP,WAAW,EAAE,YAAY;YACzB,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;YACzC,OAAO,EAAE,WAAW;SACrB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;QACpC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC,CAAC;IAChE,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,kBAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/routes/git.ts"],"names":[],"mappings":"AAMA,QAAA,MAAM,MAAM,4CAAW,CAAC;AAgJxB,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const express_1 = require("express");
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const queries_1 = require("../db/queries");
|
|
10
|
+
const status_1 = require("../git/status");
|
|
11
|
+
const router = (0, express_1.Router)();
|
|
12
|
+
// Max file size to read (100KB)
|
|
13
|
+
const MAX_FILE_SIZE = 100 * 1024;
|
|
14
|
+
// Get git status for a project
|
|
15
|
+
router.get('/:projectId/status', async (req, res) => {
|
|
16
|
+
try {
|
|
17
|
+
const projectId = parseInt(req.params.projectId, 10);
|
|
18
|
+
const project = (0, queries_1.getProjectById)(projectId);
|
|
19
|
+
if (!project) {
|
|
20
|
+
return res.status(404).json({ error: 'Project not found' });
|
|
21
|
+
}
|
|
22
|
+
const status = await (0, status_1.getGitStatus)(project.path);
|
|
23
|
+
res.json(status);
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
console.error('Error getting git status:', err);
|
|
27
|
+
res.status(500).json({ error: 'Failed to get git status' });
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
// Get git diff for a project
|
|
31
|
+
router.get('/:projectId/diff', async (req, res) => {
|
|
32
|
+
try {
|
|
33
|
+
const projectId = parseInt(req.params.projectId, 10);
|
|
34
|
+
const staged = req.query.staged === 'true';
|
|
35
|
+
const project = (0, queries_1.getProjectById)(projectId);
|
|
36
|
+
if (!project) {
|
|
37
|
+
return res.status(404).json({ error: 'Project not found' });
|
|
38
|
+
}
|
|
39
|
+
const diff = await (0, status_1.getGitDiff)(project.path, staged);
|
|
40
|
+
res.json({ diff });
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
console.error('Error getting git diff:', err);
|
|
44
|
+
res.status(500).json({ error: 'Failed to get git diff' });
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
// Get both staged and unstaged diffs
|
|
48
|
+
router.get('/:projectId/diffs', async (req, res) => {
|
|
49
|
+
try {
|
|
50
|
+
const projectId = parseInt(req.params.projectId, 10);
|
|
51
|
+
const project = (0, queries_1.getProjectById)(projectId);
|
|
52
|
+
if (!project) {
|
|
53
|
+
return res.status(404).json({ error: 'Project not found' });
|
|
54
|
+
}
|
|
55
|
+
const diffs = await (0, status_1.getGitDiffs)(project.path);
|
|
56
|
+
res.json(diffs);
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
console.error('Error getting git diffs:', err);
|
|
60
|
+
res.status(500).json({ error: 'Failed to get git diffs' });
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
// Get old/new content for file diff comparison
|
|
64
|
+
router.get('/:projectId/file-diff', async (req, res) => {
|
|
65
|
+
try {
|
|
66
|
+
const projectId = parseInt(req.params.projectId, 10);
|
|
67
|
+
const filePath = req.query.path;
|
|
68
|
+
const staged = req.query.staged === 'true';
|
|
69
|
+
if (!filePath) {
|
|
70
|
+
return res.status(400).json({ error: 'File path is required' });
|
|
71
|
+
}
|
|
72
|
+
const project = (0, queries_1.getProjectById)(projectId);
|
|
73
|
+
if (!project) {
|
|
74
|
+
return res.status(404).json({ error: 'Project not found' });
|
|
75
|
+
}
|
|
76
|
+
// Prevent path traversal
|
|
77
|
+
const fullPath = path_1.default.join(project.path, filePath);
|
|
78
|
+
if (!fullPath.startsWith(project.path)) {
|
|
79
|
+
return res.status(403).json({ error: 'Access denied' });
|
|
80
|
+
}
|
|
81
|
+
const diffContent = await (0, status_1.getFileDiffContent)(project.path, filePath, staged);
|
|
82
|
+
res.json(diffContent);
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
console.error('Error getting file diff content:', err);
|
|
86
|
+
res.status(500).json({ error: 'Failed to get file diff content' });
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
// Get content of a specific file (for untracked files)
|
|
90
|
+
router.get('/:projectId/file', (req, res) => {
|
|
91
|
+
try {
|
|
92
|
+
const projectId = parseInt(req.params.projectId, 10);
|
|
93
|
+
const filePath = req.query.path;
|
|
94
|
+
if (!filePath) {
|
|
95
|
+
return res.status(400).json({ error: 'File path is required' });
|
|
96
|
+
}
|
|
97
|
+
const project = (0, queries_1.getProjectById)(projectId);
|
|
98
|
+
if (!project) {
|
|
99
|
+
return res.status(404).json({ error: 'Project not found' });
|
|
100
|
+
}
|
|
101
|
+
// Prevent path traversal
|
|
102
|
+
const fullPath = path_1.default.join(project.path, filePath);
|
|
103
|
+
if (!fullPath.startsWith(project.path)) {
|
|
104
|
+
return res.status(403).json({ error: 'Access denied' });
|
|
105
|
+
}
|
|
106
|
+
// Check if file exists and is not too large
|
|
107
|
+
if (!fs_1.default.existsSync(fullPath)) {
|
|
108
|
+
return res.status(404).json({ error: 'File not found' });
|
|
109
|
+
}
|
|
110
|
+
const stat = fs_1.default.statSync(fullPath);
|
|
111
|
+
if (stat.isDirectory()) {
|
|
112
|
+
return res.json({ content: null, isDirectory: true });
|
|
113
|
+
}
|
|
114
|
+
if (stat.size > MAX_FILE_SIZE) {
|
|
115
|
+
return res.json({ content: null, tooLarge: true, size: stat.size });
|
|
116
|
+
}
|
|
117
|
+
// Check if it's a binary file (simple heuristic)
|
|
118
|
+
const buffer = Buffer.alloc(512);
|
|
119
|
+
const fd = fs_1.default.openSync(fullPath, 'r');
|
|
120
|
+
fs_1.default.readSync(fd, buffer, 0, 512, 0);
|
|
121
|
+
fs_1.default.closeSync(fd);
|
|
122
|
+
const isBinary = buffer.includes(0);
|
|
123
|
+
if (isBinary) {
|
|
124
|
+
return res.json({ content: null, isBinary: true });
|
|
125
|
+
}
|
|
126
|
+
const content = fs_1.default.readFileSync(fullPath, 'utf-8');
|
|
127
|
+
res.json({ content });
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
console.error('Error reading file:', err);
|
|
131
|
+
res.status(500).json({ error: 'Failed to read file' });
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
exports.default = router;
|
|
135
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/routes/git.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/routes/projects.ts"],"names":[],"mappings":"AAcA,QAAA,MAAM,MAAM,4CAAW,CAAC;AA6JxB,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const express_1 = require("express");
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const queries_1 = require("../db/queries");
|
|
10
|
+
const dockerfile_1 = require("../docker/dockerfile");
|
|
11
|
+
const manager_1 = require("../docker/manager");
|
|
12
|
+
const router = (0, express_1.Router)();
|
|
13
|
+
// Get all projects
|
|
14
|
+
router.get('/', (_req, res) => {
|
|
15
|
+
try {
|
|
16
|
+
const projects = (0, queries_1.getAllProjects)();
|
|
17
|
+
// Update dockerfile status for each project
|
|
18
|
+
projects.forEach(project => {
|
|
19
|
+
const exists = (0, dockerfile_1.dockerfileExists)(project.path);
|
|
20
|
+
if (exists !== !!project.dockerfile_exists) {
|
|
21
|
+
(0, queries_1.updateProjectDockerfileStatus)(project.id, exists);
|
|
22
|
+
project.dockerfile_exists = exists ? 1 : 0;
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
res.json(projects);
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
console.error('Error fetching projects:', err);
|
|
29
|
+
res.status(500).json({ error: 'Failed to fetch projects' });
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
// Get single project
|
|
33
|
+
router.get('/:id', (req, res) => {
|
|
34
|
+
try {
|
|
35
|
+
const id = parseInt(req.params.id, 10);
|
|
36
|
+
const project = (0, queries_1.getProjectById)(id);
|
|
37
|
+
if (!project) {
|
|
38
|
+
return res.status(404).json({ error: 'Project not found' });
|
|
39
|
+
}
|
|
40
|
+
// Update dockerfile status
|
|
41
|
+
const exists = (0, dockerfile_1.dockerfileExists)(project.path);
|
|
42
|
+
if (exists !== !!project.dockerfile_exists) {
|
|
43
|
+
(0, queries_1.updateProjectDockerfileStatus)(project.id, exists);
|
|
44
|
+
project.dockerfile_exists = exists ? 1 : 0;
|
|
45
|
+
}
|
|
46
|
+
res.json(project);
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
console.error('Error fetching project:', err);
|
|
50
|
+
res.status(500).json({ error: 'Failed to fetch project' });
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
// Create new project
|
|
54
|
+
router.post('/', (req, res) => {
|
|
55
|
+
try {
|
|
56
|
+
const { path: projectPath, name } = req.body;
|
|
57
|
+
if (!projectPath) {
|
|
58
|
+
return res.status(400).json({ error: 'Path is required' });
|
|
59
|
+
}
|
|
60
|
+
// Validate path exists
|
|
61
|
+
if (!fs_1.default.existsSync(projectPath)) {
|
|
62
|
+
return res.status(400).json({ error: 'Path does not exist' });
|
|
63
|
+
}
|
|
64
|
+
// Use folder name as project name if not provided
|
|
65
|
+
const projectName = name || path_1.default.basename(projectPath);
|
|
66
|
+
const project = (0, queries_1.createProject)(projectName, projectPath);
|
|
67
|
+
// Check if dockerfile exists
|
|
68
|
+
const exists = (0, dockerfile_1.dockerfileExists)(projectPath);
|
|
69
|
+
if (exists) {
|
|
70
|
+
(0, queries_1.updateProjectDockerfileStatus)(project.id, true);
|
|
71
|
+
project.dockerfile_exists = 1;
|
|
72
|
+
}
|
|
73
|
+
res.status(201).json(project);
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
const error = err;
|
|
77
|
+
console.error('Error creating project:', err);
|
|
78
|
+
if (error.code === 'SQLITE_CONSTRAINT_UNIQUE') {
|
|
79
|
+
return res.status(409).json({ error: 'Project with this path already exists' });
|
|
80
|
+
}
|
|
81
|
+
res.status(500).json({ error: 'Failed to create project' });
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
// Delete project
|
|
85
|
+
router.delete('/:id', (req, res) => {
|
|
86
|
+
try {
|
|
87
|
+
const id = parseInt(req.params.id, 10);
|
|
88
|
+
const deleted = (0, queries_1.deleteProject)(id);
|
|
89
|
+
if (!deleted) {
|
|
90
|
+
return res.status(404).json({ error: 'Project not found' });
|
|
91
|
+
}
|
|
92
|
+
res.status(204).send();
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
console.error('Error deleting project:', err);
|
|
96
|
+
res.status(500).json({ error: 'Failed to delete project' });
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
// Get dockerfile status
|
|
100
|
+
router.get('/:id/dockerfile', (req, res) => {
|
|
101
|
+
try {
|
|
102
|
+
const id = parseInt(req.params.id, 10);
|
|
103
|
+
const project = (0, queries_1.getProjectById)(id);
|
|
104
|
+
if (!project) {
|
|
105
|
+
return res.status(404).json({ error: 'Project not found' });
|
|
106
|
+
}
|
|
107
|
+
const exists = (0, dockerfile_1.dockerfileExists)(project.path);
|
|
108
|
+
const content = exists ? (0, dockerfile_1.getDockerfileContent)(project.path) : null;
|
|
109
|
+
// Update status in DB if changed
|
|
110
|
+
if (exists !== !!project.dockerfile_exists) {
|
|
111
|
+
(0, queries_1.updateProjectDockerfileStatus)(project.id, exists);
|
|
112
|
+
}
|
|
113
|
+
res.json({ exists, content });
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
console.error('Error checking dockerfile:', err);
|
|
117
|
+
res.status(500).json({ error: 'Failed to check dockerfile' });
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
// Generate dockerfile
|
|
121
|
+
router.post('/:id/generate-dockerfile', async (req, res) => {
|
|
122
|
+
try {
|
|
123
|
+
const id = parseInt(req.params.id, 10);
|
|
124
|
+
const project = (0, queries_1.getProjectById)(id);
|
|
125
|
+
if (!project) {
|
|
126
|
+
return res.status(404).json({ error: 'Project not found' });
|
|
127
|
+
}
|
|
128
|
+
// Generate dockerfile from template
|
|
129
|
+
(0, dockerfile_1.generateDockerfile)(project.path);
|
|
130
|
+
(0, queries_1.updateProjectDockerfileStatus)(project.id, true);
|
|
131
|
+
// Build the Docker image
|
|
132
|
+
try {
|
|
133
|
+
await (0, manager_1.buildProjectImage)(project.path, project.id);
|
|
134
|
+
}
|
|
135
|
+
catch (buildErr) {
|
|
136
|
+
console.error('Error building Docker image:', buildErr);
|
|
137
|
+
// Dockerfile was created, but image build failed - still return success
|
|
138
|
+
// The image will be built on first task run
|
|
139
|
+
}
|
|
140
|
+
const content = (0, dockerfile_1.getDockerfileContent)(project.path);
|
|
141
|
+
res.json({ exists: true, content });
|
|
142
|
+
}
|
|
143
|
+
catch (err) {
|
|
144
|
+
console.error('Error generating dockerfile:', err);
|
|
145
|
+
res.status(500).json({ error: 'Failed to generate dockerfile' });
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
exports.default = router;
|
|
149
|
+
//# sourceMappingURL=projects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/routes/projects.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/routes/tasks.ts"],"names":[],"mappings":"AAsBA,QAAA,MAAM,MAAM,4CAAW,CAAC;AAsWxB,eAAe,MAAM,CAAC"}
|