aspire2coolify 1.0.15 → 2.0.17
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 +161 -35
- package/dist/api/coolify.d.ts +160 -0
- package/dist/api/coolify.d.ts.map +1 -0
- package/dist/api/coolify.js +107 -0
- package/dist/api/coolify.js.map +1 -0
- package/dist/api/deployer.d.ts +31 -0
- package/dist/api/deployer.d.ts.map +1 -0
- package/dist/api/deployer.js +291 -0
- package/dist/api/deployer.js.map +1 -0
- package/dist/api/index.d.ts +7 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +7 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/token.d.ts +44 -0
- package/dist/api/token.d.ts.map +1 -0
- package/dist/api/token.js +100 -0
- package/dist/api/token.js.map +1 -0
- package/dist/cli/index.js +93 -36
- package/dist/cli/index.js.map +1 -1
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +4 -3
- package/dist/config/index.js.map +1 -1
- package/dist/generators/coolify/application.d.ts +8 -2
- package/dist/generators/coolify/application.d.ts.map +1 -1
- package/dist/generators/coolify/application.js +27 -42
- package/dist/generators/coolify/application.js.map +1 -1
- package/dist/generators/coolify/database.d.ts +8 -2
- package/dist/generators/coolify/database.d.ts.map +1 -1
- package/dist/generators/coolify/database.js +21 -21
- package/dist/generators/coolify/database.js.map +1 -1
- package/dist/generators/coolify/index.d.ts +4 -2
- package/dist/generators/coolify/index.d.ts.map +1 -1
- package/dist/generators/coolify/index.js +14 -30
- package/dist/generators/coolify/index.js.map +1 -1
- package/dist/generators/coolify/service.d.ts +9 -3
- package/dist/generators/coolify/service.d.ts.map +1 -1
- package/dist/generators/coolify/service.js +38 -53
- package/dist/generators/coolify/service.js.map +1 -1
- package/dist/models/coolify.d.ts +25 -20
- package/dist/models/coolify.d.ts.map +1 -1
- package/dist/models/coolify.js +49 -4
- package/dist/models/coolify.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
[](https://opensource.org/licenses/MIT)
|
|
6
6
|
[](https://github.com/semantic-release/semantic-release)
|
|
7
7
|
|
|
8
|
-
CLI tool to convert .NET Aspire configurations to Coolify
|
|
8
|
+
CLI tool to convert .NET Aspire configurations to Coolify deployments using the Coolify REST API.
|
|
9
9
|
|
|
10
10
|
## Installation
|
|
11
11
|
|
|
@@ -20,6 +20,23 @@ npm install
|
|
|
20
20
|
npm run build
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
+
## Quick Start
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# 1. Initialize config file
|
|
27
|
+
aspire2coolify init
|
|
28
|
+
|
|
29
|
+
# 2. Set your Coolify credentials
|
|
30
|
+
export COOLIFY_API_URL=https://coolify.example.com
|
|
31
|
+
export COOLIFY_TOKEN=your-api-token
|
|
32
|
+
|
|
33
|
+
# 3. Deploy your Aspire app
|
|
34
|
+
aspire2coolify deploy ./AppHost/Program.cs \
|
|
35
|
+
--project-id your-project-uuid \
|
|
36
|
+
--server-id your-server-uuid \
|
|
37
|
+
--environment-name production
|
|
38
|
+
```
|
|
39
|
+
|
|
23
40
|
## Usage
|
|
24
41
|
|
|
25
42
|
### Parse Command
|
|
@@ -35,7 +52,7 @@ aspire2coolify parse ./AppHost/Program.cs -o model.json
|
|
|
35
52
|
|
|
36
53
|
### Generate Command
|
|
37
54
|
|
|
38
|
-
Generate
|
|
55
|
+
Generate a bash script with curl commands to deploy via the Coolify API:
|
|
39
56
|
|
|
40
57
|
```bash
|
|
41
58
|
aspire2coolify generate ./AppHost/Program.cs
|
|
@@ -43,27 +60,57 @@ aspire2coolify generate ./AppHost/Program.cs
|
|
|
43
60
|
# Output to file
|
|
44
61
|
aspire2coolify generate ./AppHost/Program.cs -o deploy.sh
|
|
45
62
|
|
|
46
|
-
# With Coolify project/server IDs
|
|
63
|
+
# With Coolify project/server IDs baked into the script
|
|
47
64
|
aspire2coolify generate ./AppHost/Program.cs \
|
|
48
65
|
--project-id proj-123 \
|
|
49
|
-
--server-id srv-456
|
|
66
|
+
--server-id srv-456 \
|
|
67
|
+
--environment-name production
|
|
50
68
|
|
|
51
|
-
# Output as JSON
|
|
69
|
+
# Output as JSON (API payloads)
|
|
52
70
|
aspire2coolify generate ./AppHost/Program.cs --json
|
|
53
71
|
```
|
|
54
72
|
|
|
55
73
|
### Deploy Command
|
|
56
74
|
|
|
57
|
-
|
|
75
|
+
Deploy directly to Coolify via the REST API:
|
|
58
76
|
|
|
59
77
|
```bash
|
|
60
|
-
#
|
|
61
|
-
|
|
78
|
+
# Set credentials via environment variables (recommended)
|
|
79
|
+
export COOLIFY_API_URL=https://coolify.example.com
|
|
80
|
+
export COOLIFY_TOKEN=your-api-token
|
|
62
81
|
|
|
63
|
-
#
|
|
64
|
-
aspire2coolify deploy ./AppHost/Program.cs
|
|
82
|
+
# Dry run (shows what would be deployed)
|
|
83
|
+
aspire2coolify deploy ./AppHost/Program.cs --dry-run \
|
|
84
|
+
--project-id proj-123 \
|
|
85
|
+
--server-id srv-456 \
|
|
86
|
+
--environment-name production
|
|
87
|
+
|
|
88
|
+
# Execute deployment
|
|
89
|
+
aspire2coolify deploy ./AppHost/Program.cs \
|
|
90
|
+
--project-id proj-123 \
|
|
91
|
+
--server-id srv-456 \
|
|
92
|
+
--environment-name production
|
|
93
|
+
|
|
94
|
+
# Deploy and start resources immediately
|
|
95
|
+
aspire2coolify deploy ./AppHost/Program.cs \
|
|
96
|
+
--project-id proj-123 \
|
|
97
|
+
--server-id srv-456 \
|
|
98
|
+
--environment-name production \
|
|
99
|
+
--instant-deploy
|
|
65
100
|
```
|
|
66
101
|
|
|
102
|
+
#### Deploy Options
|
|
103
|
+
|
|
104
|
+
| Option | Description |
|
|
105
|
+
|--------|-------------|
|
|
106
|
+
| `--api-url <url>` | Coolify API URL (or use `COOLIFY_API_URL` env var) |
|
|
107
|
+
| `--token <token>` | Coolify API token (or use `COOLIFY_TOKEN` env var) |
|
|
108
|
+
| `--project-id <id>` | Coolify project UUID |
|
|
109
|
+
| `--server-id <id>` | Coolify server UUID |
|
|
110
|
+
| `--environment-name <name>` | Environment name (e.g., `production`, `staging`) |
|
|
111
|
+
| `--instant-deploy` | Deploy resources immediately after creation |
|
|
112
|
+
| `--dry-run` | Preview deployment without executing |
|
|
113
|
+
|
|
67
114
|
### Init Command
|
|
68
115
|
|
|
69
116
|
Create a configuration file:
|
|
@@ -97,35 +144,73 @@ builder.AddNpmApp("svelte", "../VibeCode.SvelteKit")
|
|
|
97
144
|
builder.Build().Run();
|
|
98
145
|
```
|
|
99
146
|
|
|
100
|
-
### Output (Coolify
|
|
147
|
+
### Output (Coolify API Script)
|
|
101
148
|
|
|
102
149
|
```bash
|
|
103
150
|
#!/bin/bash
|
|
104
151
|
# Generated by aspire2coolify
|
|
152
|
+
# Coolify API deployment script
|
|
153
|
+
#
|
|
154
|
+
# Required environment variables:
|
|
155
|
+
# COOLIFY_API_URL - Your Coolify instance URL (e.g., https://coolify.example.com)
|
|
156
|
+
# COOLIFY_TOKEN - Your Coolify API token
|
|
157
|
+
#
|
|
158
|
+
# Usage:
|
|
159
|
+
# export COOLIFY_API_URL=https://coolify.example.com
|
|
160
|
+
# export COOLIFY_TOKEN=your-api-token
|
|
161
|
+
# ./deploy.sh
|
|
162
|
+
|
|
163
|
+
set -e
|
|
164
|
+
|
|
165
|
+
# Validate environment variables
|
|
166
|
+
if [ -z "$COOLIFY_API_URL" ]; then
|
|
167
|
+
echo "Error: COOLIFY_API_URL environment variable is not set"
|
|
168
|
+
exit 1
|
|
169
|
+
fi
|
|
170
|
+
|
|
171
|
+
if [ -z "$COOLIFY_TOKEN" ]; then
|
|
172
|
+
echo "Error: COOLIFY_TOKEN environment variable is not set"
|
|
173
|
+
exit 1
|
|
174
|
+
fi
|
|
175
|
+
|
|
176
|
+
echo "Deploying to Coolify at $COOLIFY_API_URL"
|
|
177
|
+
echo ""
|
|
105
178
|
|
|
106
179
|
# Database: postgreServer (postgres)
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
180
|
+
echo "Creating postgreServer..."
|
|
181
|
+
curl -X POST "${COOLIFY_API_URL}/api/v1/databases/postgresql" \
|
|
182
|
+
-H "Authorization: Bearer ${COOLIFY_TOKEN}" \
|
|
183
|
+
-H "Content-Type: application/json" \
|
|
184
|
+
-d '{
|
|
185
|
+
"server_uuid": "${SERVER_UUID}",
|
|
186
|
+
"project_uuid": "${PROJECT_UUID}",
|
|
187
|
+
"environment_name": "${ENVIRONMENT_NAME}",
|
|
188
|
+
"name": "postgreServer",
|
|
189
|
+
"image": "pgvector/pgvector:pg17",
|
|
190
|
+
"is_public": true,
|
|
191
|
+
"public_port": 5432,
|
|
192
|
+
"instant_deploy": true
|
|
193
|
+
}'
|
|
194
|
+
echo ""
|
|
119
195
|
|
|
120
196
|
# Application: svelte (npm)
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
197
|
+
echo "Creating svelte..."
|
|
198
|
+
curl -X POST "${COOLIFY_API_URL}/api/v1/applications/dockerimage" \
|
|
199
|
+
-H "Authorization: Bearer ${COOLIFY_TOKEN}" \
|
|
200
|
+
-H "Content-Type: application/json" \
|
|
201
|
+
-d '{
|
|
202
|
+
"server_uuid": "${SERVER_UUID}",
|
|
203
|
+
"project_uuid": "${PROJECT_UUID}",
|
|
204
|
+
"environment_name": "${ENVIRONMENT_NAME}",
|
|
205
|
+
"docker_registry_image_name": "svelte",
|
|
206
|
+
"docker_registry_image_tag": "latest",
|
|
207
|
+
"name": "svelte",
|
|
208
|
+
"ports_exposes": "80",
|
|
209
|
+
"instant_deploy": false
|
|
210
|
+
}'
|
|
211
|
+
echo ""
|
|
212
|
+
|
|
213
|
+
echo "Deployment complete!"
|
|
129
214
|
```
|
|
130
215
|
|
|
131
216
|
## Configuration
|
|
@@ -135,20 +220,41 @@ Create an `aspire2coolify.config.js` file:
|
|
|
135
220
|
```javascript
|
|
136
221
|
export default {
|
|
137
222
|
coolify: {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
223
|
+
// API connection
|
|
224
|
+
apiUrl: 'https://coolify.example.com',
|
|
225
|
+
token: 'your-api-token', // Or use COOLIFY_TOKEN env var (recommended)
|
|
226
|
+
|
|
227
|
+
// Deployment target
|
|
228
|
+
projectId: 'your-project-uuid',
|
|
229
|
+
serverId: 'your-server-uuid',
|
|
230
|
+
environmentName: 'production',
|
|
141
231
|
},
|
|
142
232
|
defaults: {
|
|
143
233
|
buildPack: 'nixpacks',
|
|
144
234
|
},
|
|
145
235
|
output: {
|
|
146
236
|
includeComments: true,
|
|
147
|
-
format: 'shell',
|
|
237
|
+
format: 'shell', // 'shell' | 'json'
|
|
148
238
|
},
|
|
149
239
|
};
|
|
150
240
|
```
|
|
151
241
|
|
|
242
|
+
### Environment Variables
|
|
243
|
+
|
|
244
|
+
| Variable | Description |
|
|
245
|
+
|----------|-------------|
|
|
246
|
+
| `COOLIFY_API_URL` | Your Coolify instance URL |
|
|
247
|
+
| `COOLIFY_TOKEN` | Your Coolify API token (from Keys & Tokens in Coolify) |
|
|
248
|
+
|
|
249
|
+
### Credential Priority
|
|
250
|
+
|
|
251
|
+
Credentials are resolved in this order (highest to lowest priority):
|
|
252
|
+
|
|
253
|
+
1. CLI flags (`--api-url`, `--token`)
|
|
254
|
+
2. Environment variables (`COOLIFY_API_URL`, `COOLIFY_TOKEN`)
|
|
255
|
+
3. Config file (`coolify.apiUrl`, `coolify.token`)
|
|
256
|
+
4. Interactive prompt (for token, if running in a TTY)
|
|
257
|
+
|
|
152
258
|
## Supported Aspire Methods
|
|
153
259
|
|
|
154
260
|
### Databases
|
|
@@ -189,6 +295,19 @@ export default {
|
|
|
189
295
|
- `PublishAsDockerFile()`
|
|
190
296
|
- `RunAsContainer()`
|
|
191
297
|
|
|
298
|
+
## API Reference
|
|
299
|
+
|
|
300
|
+
This tool uses the [Coolify REST API](https://coolify.io/docs/api-reference/api/) to create and manage resources:
|
|
301
|
+
|
|
302
|
+
| Resource | API Endpoint |
|
|
303
|
+
|----------|--------------|
|
|
304
|
+
| PostgreSQL | `POST /api/v1/databases/postgresql` |
|
|
305
|
+
| MySQL | `POST /api/v1/databases/mysql` |
|
|
306
|
+
| MongoDB | `POST /api/v1/databases/mongodb` |
|
|
307
|
+
| Redis | `POST /api/v1/databases/redis` |
|
|
308
|
+
| Services | `POST /api/v1/services` |
|
|
309
|
+
| Applications | `POST /api/v1/applications/dockerimage` |
|
|
310
|
+
|
|
192
311
|
## Development
|
|
193
312
|
|
|
194
313
|
```bash
|
|
@@ -203,4 +322,11 @@ npm test
|
|
|
203
322
|
|
|
204
323
|
# Watch mode
|
|
205
324
|
npm run dev
|
|
325
|
+
|
|
326
|
+
# Lint
|
|
327
|
+
npm run lint
|
|
206
328
|
```
|
|
329
|
+
|
|
330
|
+
## License
|
|
331
|
+
|
|
332
|
+
MIT
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coolify REST API client
|
|
3
|
+
*/
|
|
4
|
+
export interface CoolifyApiConfig {
|
|
5
|
+
apiUrl: string;
|
|
6
|
+
token: string;
|
|
7
|
+
}
|
|
8
|
+
export interface CoolifyApiResponse<T = unknown> {
|
|
9
|
+
success: boolean;
|
|
10
|
+
data?: T;
|
|
11
|
+
error?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface CreateDatabaseResponse {
|
|
14
|
+
uuid: string;
|
|
15
|
+
}
|
|
16
|
+
export interface CreateApplicationResponse {
|
|
17
|
+
uuid: string;
|
|
18
|
+
}
|
|
19
|
+
export interface CreateServiceResponse {
|
|
20
|
+
uuid: string;
|
|
21
|
+
domains: string[];
|
|
22
|
+
}
|
|
23
|
+
export interface PostgresDatabasePayload {
|
|
24
|
+
server_uuid: string;
|
|
25
|
+
project_uuid: string;
|
|
26
|
+
environment_name: string;
|
|
27
|
+
name?: string;
|
|
28
|
+
description?: string;
|
|
29
|
+
image?: string;
|
|
30
|
+
postgres_user?: string;
|
|
31
|
+
postgres_password?: string;
|
|
32
|
+
postgres_db?: string;
|
|
33
|
+
is_public?: boolean;
|
|
34
|
+
public_port?: number;
|
|
35
|
+
instant_deploy?: boolean;
|
|
36
|
+
}
|
|
37
|
+
export interface MysqlDatabasePayload {
|
|
38
|
+
server_uuid: string;
|
|
39
|
+
project_uuid: string;
|
|
40
|
+
environment_name: string;
|
|
41
|
+
name?: string;
|
|
42
|
+
description?: string;
|
|
43
|
+
image?: string;
|
|
44
|
+
mysql_user?: string;
|
|
45
|
+
mysql_password?: string;
|
|
46
|
+
mysql_database?: string;
|
|
47
|
+
mysql_root_password?: string;
|
|
48
|
+
is_public?: boolean;
|
|
49
|
+
public_port?: number;
|
|
50
|
+
instant_deploy?: boolean;
|
|
51
|
+
}
|
|
52
|
+
export interface MongoDbDatabasePayload {
|
|
53
|
+
server_uuid: string;
|
|
54
|
+
project_uuid: string;
|
|
55
|
+
environment_name: string;
|
|
56
|
+
name?: string;
|
|
57
|
+
description?: string;
|
|
58
|
+
image?: string;
|
|
59
|
+
mongo_initdb_root_username?: string;
|
|
60
|
+
mongo_initdb_root_password?: string;
|
|
61
|
+
mongo_initdb_database?: string;
|
|
62
|
+
is_public?: boolean;
|
|
63
|
+
public_port?: number;
|
|
64
|
+
instant_deploy?: boolean;
|
|
65
|
+
}
|
|
66
|
+
export interface RedisDatabasePayload {
|
|
67
|
+
server_uuid: string;
|
|
68
|
+
project_uuid: string;
|
|
69
|
+
environment_name: string;
|
|
70
|
+
name?: string;
|
|
71
|
+
description?: string;
|
|
72
|
+
image?: string;
|
|
73
|
+
redis_password?: string;
|
|
74
|
+
is_public?: boolean;
|
|
75
|
+
public_port?: number;
|
|
76
|
+
instant_deploy?: boolean;
|
|
77
|
+
}
|
|
78
|
+
export interface DockerImageApplicationPayload {
|
|
79
|
+
server_uuid: string;
|
|
80
|
+
project_uuid: string;
|
|
81
|
+
environment_name: string;
|
|
82
|
+
docker_registry_image_name: string;
|
|
83
|
+
docker_registry_image_tag?: string;
|
|
84
|
+
name?: string;
|
|
85
|
+
description?: string;
|
|
86
|
+
domains?: string;
|
|
87
|
+
ports_exposes?: string;
|
|
88
|
+
ports_mappings?: string;
|
|
89
|
+
instant_deploy?: boolean;
|
|
90
|
+
}
|
|
91
|
+
export interface DockerfileApplicationPayload {
|
|
92
|
+
server_uuid: string;
|
|
93
|
+
project_uuid: string;
|
|
94
|
+
environment_name: string;
|
|
95
|
+
dockerfile: string;
|
|
96
|
+
name: string;
|
|
97
|
+
description?: string;
|
|
98
|
+
domains?: string;
|
|
99
|
+
ports_exposes?: string;
|
|
100
|
+
ports_mappings?: string;
|
|
101
|
+
base_directory?: string;
|
|
102
|
+
instant_deploy?: boolean;
|
|
103
|
+
}
|
|
104
|
+
export interface ServicePayload {
|
|
105
|
+
server_uuid: string;
|
|
106
|
+
project_uuid: string;
|
|
107
|
+
environment_name: string;
|
|
108
|
+
type: string;
|
|
109
|
+
name: string;
|
|
110
|
+
description?: string;
|
|
111
|
+
instant_deploy?: boolean;
|
|
112
|
+
docker_compose_raw?: string;
|
|
113
|
+
}
|
|
114
|
+
export type DatabasePayload = PostgresDatabasePayload | MysqlDatabasePayload | MongoDbDatabasePayload | RedisDatabasePayload;
|
|
115
|
+
export type ApplicationPayload = DockerImageApplicationPayload | DockerfileApplicationPayload;
|
|
116
|
+
export declare class CoolifyApiClient {
|
|
117
|
+
private apiUrl;
|
|
118
|
+
private token;
|
|
119
|
+
constructor(config: CoolifyApiConfig);
|
|
120
|
+
private request;
|
|
121
|
+
/**
|
|
122
|
+
* Create a PostgreSQL database
|
|
123
|
+
*/
|
|
124
|
+
createPostgresDatabase(payload: PostgresDatabasePayload): Promise<CoolifyApiResponse<CreateDatabaseResponse>>;
|
|
125
|
+
/**
|
|
126
|
+
* Create a MySQL database
|
|
127
|
+
*/
|
|
128
|
+
createMysqlDatabase(payload: MysqlDatabasePayload): Promise<CoolifyApiResponse<CreateDatabaseResponse>>;
|
|
129
|
+
/**
|
|
130
|
+
* Create a MongoDB database
|
|
131
|
+
*/
|
|
132
|
+
createMongoDatabase(payload: MongoDbDatabasePayload): Promise<CoolifyApiResponse<CreateDatabaseResponse>>;
|
|
133
|
+
/**
|
|
134
|
+
* Create a Redis database
|
|
135
|
+
*/
|
|
136
|
+
createRedisDatabase(payload: RedisDatabasePayload): Promise<CoolifyApiResponse<CreateDatabaseResponse>>;
|
|
137
|
+
/**
|
|
138
|
+
* Create a MariaDB database
|
|
139
|
+
*/
|
|
140
|
+
createMariaDbDatabase(payload: MysqlDatabasePayload): Promise<CoolifyApiResponse<CreateDatabaseResponse>>;
|
|
141
|
+
/**
|
|
142
|
+
* Create a Docker image application
|
|
143
|
+
*/
|
|
144
|
+
createDockerImageApplication(payload: DockerImageApplicationPayload): Promise<CoolifyApiResponse<CreateApplicationResponse>>;
|
|
145
|
+
/**
|
|
146
|
+
* Create a Dockerfile application
|
|
147
|
+
*/
|
|
148
|
+
createDockerfileApplication(payload: DockerfileApplicationPayload): Promise<CoolifyApiResponse<CreateApplicationResponse>>;
|
|
149
|
+
/**
|
|
150
|
+
* Create a service (one-click services like RabbitMQ, MinIO, etc.)
|
|
151
|
+
*/
|
|
152
|
+
createService(payload: ServicePayload): Promise<CoolifyApiResponse<CreateServiceResponse>>;
|
|
153
|
+
/**
|
|
154
|
+
* Test connection to the Coolify API
|
|
155
|
+
*/
|
|
156
|
+
testConnection(): Promise<CoolifyApiResponse<{
|
|
157
|
+
version?: string;
|
|
158
|
+
}>>;
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=coolify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coolify.d.ts","sourceRoot":"","sources":["../../src/api/coolify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coolify REST API client
|
|
3
|
+
*/
|
|
4
|
+
export class CoolifyApiClient {
|
|
5
|
+
apiUrl;
|
|
6
|
+
token;
|
|
7
|
+
constructor(config) {
|
|
8
|
+
// Remove trailing slash from API URL
|
|
9
|
+
this.apiUrl = config.apiUrl.replace(/\/+$/, '');
|
|
10
|
+
this.token = config.token;
|
|
11
|
+
}
|
|
12
|
+
async request(method, endpoint, body) {
|
|
13
|
+
const url = `${this.apiUrl}/api/v1${endpoint}`;
|
|
14
|
+
try {
|
|
15
|
+
const response = await fetch(url, {
|
|
16
|
+
method,
|
|
17
|
+
headers: {
|
|
18
|
+
Authorization: `Bearer ${this.token}`,
|
|
19
|
+
'Content-Type': 'application/json',
|
|
20
|
+
Accept: 'application/json',
|
|
21
|
+
},
|
|
22
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
23
|
+
});
|
|
24
|
+
if (!response.ok) {
|
|
25
|
+
const errorText = await response.text();
|
|
26
|
+
let errorMessage;
|
|
27
|
+
try {
|
|
28
|
+
const errorJson = JSON.parse(errorText);
|
|
29
|
+
errorMessage = errorJson.message || errorJson.error || errorText;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
errorMessage = errorText || `HTTP ${response.status}: ${response.statusText}`;
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
success: false,
|
|
36
|
+
error: errorMessage,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
const data = (await response.json());
|
|
40
|
+
return {
|
|
41
|
+
success: true,
|
|
42
|
+
data,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
return {
|
|
47
|
+
success: false,
|
|
48
|
+
error: err instanceof Error ? err.message : String(err),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Create a PostgreSQL database
|
|
54
|
+
*/
|
|
55
|
+
async createPostgresDatabase(payload) {
|
|
56
|
+
return this.request('POST', '/databases/postgresql', payload);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Create a MySQL database
|
|
60
|
+
*/
|
|
61
|
+
async createMysqlDatabase(payload) {
|
|
62
|
+
return this.request('POST', '/databases/mysql', payload);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Create a MongoDB database
|
|
66
|
+
*/
|
|
67
|
+
async createMongoDatabase(payload) {
|
|
68
|
+
return this.request('POST', '/databases/mongodb', payload);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Create a Redis database
|
|
72
|
+
*/
|
|
73
|
+
async createRedisDatabase(payload) {
|
|
74
|
+
return this.request('POST', '/databases/redis', payload);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Create a MariaDB database
|
|
78
|
+
*/
|
|
79
|
+
async createMariaDbDatabase(payload) {
|
|
80
|
+
return this.request('POST', '/databases/mariadb', payload);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Create a Docker image application
|
|
84
|
+
*/
|
|
85
|
+
async createDockerImageApplication(payload) {
|
|
86
|
+
return this.request('POST', '/applications/dockerimage', payload);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Create a Dockerfile application
|
|
90
|
+
*/
|
|
91
|
+
async createDockerfileApplication(payload) {
|
|
92
|
+
return this.request('POST', '/applications/dockerfile', payload);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Create a service (one-click services like RabbitMQ, MinIO, etc.)
|
|
96
|
+
*/
|
|
97
|
+
async createService(payload) {
|
|
98
|
+
return this.request('POST', '/services', payload);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Test connection to the Coolify API
|
|
102
|
+
*/
|
|
103
|
+
async testConnection() {
|
|
104
|
+
return this.request('GET', '/version');
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=coolify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coolify.js","sourceRoot":"","sources":["../../src/api/coolify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deployer - Deploys Aspire resources to Coolify via API
|
|
3
|
+
*/
|
|
4
|
+
import type { AspireApp } from '../models/aspire.js';
|
|
5
|
+
import { CoolifyApiClient } from './coolify.js';
|
|
6
|
+
export interface DeployConfig {
|
|
7
|
+
projectUuid: string;
|
|
8
|
+
serverUuid: string;
|
|
9
|
+
environmentName: string;
|
|
10
|
+
instantDeploy?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface DeployResult {
|
|
13
|
+
success: boolean;
|
|
14
|
+
resourceType: 'database' | 'service' | 'application';
|
|
15
|
+
name: string;
|
|
16
|
+
uuid?: string;
|
|
17
|
+
error?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface DeploymentSummary {
|
|
20
|
+
results: DeployResult[];
|
|
21
|
+
successful: number;
|
|
22
|
+
failed: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Deploy an Aspire application model to Coolify
|
|
26
|
+
*/
|
|
27
|
+
export declare function deployToCloudify(client: CoolifyApiClient, app: AspireApp, config: DeployConfig, options?: {
|
|
28
|
+
dryRun?: boolean;
|
|
29
|
+
onProgress?: (message: string) => void;
|
|
30
|
+
}): Promise<DeploymentSummary>;
|
|
31
|
+
//# sourceMappingURL=deployer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployer.d.ts","sourceRoot":"","sources":["../../src/api/deployer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAkD,MAAM,qBAAqB,CAAC;AACrG,OAAO,EACL,gBAAgB,EAOjB,MAAM,cAAc,CAAC;AAEtB,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,UAAU,GAAG,SAAS,GAAG,aAAa,CAAC;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,gBAAgB,EACxB,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,GACL,OAAO,CAAC,iBAAiB,CAAC,CAwG5B"}
|