@kadi.build/deploy-ability 0.0.3 → 0.0.5
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/dist/targets/akash/bids.d.ts +183 -0
- package/dist/targets/akash/bids.d.ts.map +1 -0
- package/dist/targets/akash/bids.js +247 -0
- package/dist/targets/akash/bids.js.map +1 -0
- package/dist/targets/akash/certificate-manager.d.ts +89 -167
- package/dist/targets/akash/certificate-manager.d.ts.map +1 -1
- package/dist/targets/akash/certificate-manager.js +193 -301
- package/dist/targets/akash/certificate-manager.js.map +1 -1
- package/dist/targets/akash/client.d.ts +644 -0
- package/dist/targets/akash/client.d.ts.map +1 -0
- package/dist/targets/akash/client.js +972 -0
- package/dist/targets/akash/client.js.map +1 -0
- package/dist/targets/akash/constants.d.ts +12 -149
- package/dist/targets/akash/constants.d.ts.map +1 -1
- package/dist/targets/akash/constants.js +14 -136
- package/dist/targets/akash/constants.js.map +1 -1
- package/dist/targets/akash/deployer.d.ts +3 -82
- package/dist/targets/akash/deployer.d.ts.map +1 -1
- package/dist/targets/akash/deployer.js +122 -160
- package/dist/targets/akash/deployer.js.map +1 -1
- package/dist/targets/akash/environment.d.ts +16 -214
- package/dist/targets/akash/environment.d.ts.map +1 -1
- package/dist/targets/akash/environment.js +20 -210
- package/dist/targets/akash/environment.js.map +1 -1
- package/dist/targets/akash/index.d.ts +95 -189
- package/dist/targets/akash/index.d.ts.map +1 -1
- package/dist/targets/akash/index.js +69 -197
- package/dist/targets/akash/index.js.map +1 -1
- package/dist/targets/akash/lease-monitor.d.ts +3 -21
- package/dist/targets/akash/lease-monitor.d.ts.map +1 -1
- package/dist/targets/akash/lease-monitor.js +39 -56
- package/dist/targets/akash/lease-monitor.js.map +1 -1
- package/dist/targets/akash/logs.d.ts +103 -4
- package/dist/targets/akash/logs.d.ts.map +1 -1
- package/dist/targets/akash/logs.js +12 -3
- package/dist/targets/akash/logs.js.map +1 -1
- package/dist/targets/akash/pricing.d.ts +12 -191
- package/dist/targets/akash/pricing.d.ts.map +1 -1
- package/dist/targets/akash/pricing.js +12 -188
- package/dist/targets/akash/pricing.js.map +1 -1
- package/dist/targets/akash/provider-manager.d.ts +120 -0
- package/dist/targets/akash/provider-manager.d.ts.map +1 -0
- package/dist/targets/akash/provider-manager.js +574 -0
- package/dist/targets/akash/provider-manager.js.map +1 -0
- package/dist/targets/akash/sdl-generator.d.ts +2 -2
- package/dist/targets/akash/sdl-generator.d.ts.map +1 -1
- package/dist/targets/akash/sdl-generator.js +6 -39
- package/dist/targets/akash/sdl-generator.js.map +1 -1
- package/dist/targets/akash/types.d.ts +66 -243
- package/dist/targets/akash/types.d.ts.map +1 -1
- package/dist/targets/akash/types.js +4 -41
- package/dist/targets/akash/types.js.map +1 -1
- package/dist/targets/akash/wallet-manager.d.ts +35 -352
- package/dist/targets/akash/wallet-manager.d.ts.map +1 -1
- package/dist/targets/akash/wallet-manager.js +37 -439
- package/dist/targets/akash/wallet-manager.js.map +1 -1
- package/dist/targets/local/compose-generator.d.ts.map +1 -1
- package/dist/targets/local/compose-generator.js +1 -0
- package/dist/targets/local/compose-generator.js.map +1 -1
- package/dist/targets/local/deployer.js +4 -4
- package/dist/targets/local/deployer.js.map +1 -1
- package/dist/targets/local/types.d.ts +4 -0
- package/dist/targets/local/types.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/options.d.ts +45 -4
- package/dist/types/options.d.ts.map +1 -1
- package/dist/utils/registry/manager.js +6 -6
- package/dist/utils/registry/manager.js.map +1 -1
- package/dist/utils/registry/setup.js +4 -4
- package/dist/utils/registry/setup.js.map +1 -1
- package/docs/KADI_ABILITY_CONVERSION.md +1365 -0
- package/docs/PIPELINE_BUILDER_DESIGN.md +1149 -0
- package/package.json +8 -11
- package/dist/targets/akash/bid-selectors.d.ts +0 -251
- package/dist/targets/akash/bid-selectors.d.ts.map +0 -1
- package/dist/targets/akash/bid-selectors.js +0 -322
- package/dist/targets/akash/bid-selectors.js.map +0 -1
- package/dist/targets/akash/bid-types.d.ts +0 -297
- package/dist/targets/akash/bid-types.d.ts.map +0 -1
- package/dist/targets/akash/bid-types.js +0 -89
- package/dist/targets/akash/bid-types.js.map +0 -1
- package/dist/targets/akash/blockchain-client.d.ts +0 -577
- package/dist/targets/akash/blockchain-client.d.ts.map +0 -1
- package/dist/targets/akash/blockchain-client.js +0 -803
- package/dist/targets/akash/blockchain-client.js.map +0 -1
- package/dist/targets/akash/logs.types.d.ts +0 -102
- package/dist/targets/akash/logs.types.d.ts.map +0 -1
- package/dist/targets/akash/logs.types.js +0 -9
- package/dist/targets/akash/logs.types.js.map +0 -1
- package/dist/targets/akash/provider-client.d.ts +0 -114
- package/dist/targets/akash/provider-client.d.ts.map +0 -1
- package/dist/targets/akash/provider-client.js +0 -318
- package/dist/targets/akash/provider-client.js.map +0 -1
- package/dist/targets/akash/provider-metadata.d.ts +0 -228
- package/dist/targets/akash/provider-metadata.d.ts.map +0 -1
- package/dist/targets/akash/provider-metadata.js +0 -14
- package/dist/targets/akash/provider-metadata.js.map +0 -1
- package/dist/targets/akash/provider-service.d.ts +0 -133
- package/dist/targets/akash/provider-service.d.ts.map +0 -1
- package/dist/targets/akash/provider-service.js +0 -391
- package/dist/targets/akash/provider-service.js.map +0 -1
- package/dist/targets/akash/query-client.d.ts +0 -125
- package/dist/targets/akash/query-client.d.ts.map +0 -1
- package/dist/targets/akash/query-client.js +0 -332
- package/dist/targets/akash/query-client.js.map +0 -1
- package/docs/EXAMPLES.md +0 -293
- package/docs/PLACEMENT.md +0 -433
- package/docs/STORAGE.md +0 -318
|
@@ -1,332 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Akash RPC Query Client
|
|
3
|
-
*
|
|
4
|
-
* Provides typed helper functions for querying Akash blockchain state via the
|
|
5
|
-
* gRPC query endpoints exposed by @akashnetwork/akash-api. All helpers return
|
|
6
|
-
* Result<T, DeploymentError> to encourage explicit error handling by callers.
|
|
7
|
-
*
|
|
8
|
-
* Responsibilities:
|
|
9
|
-
* 1. Fetch lease information (price, state, identifiers)
|
|
10
|
-
* 2. Fetch deployment group/resource information
|
|
11
|
-
* 3. Fetch provider metadata (host URI, attributes)
|
|
12
|
-
* 4. Optionally combine the above into a consolidated deployment overview
|
|
13
|
-
*
|
|
14
|
-
* Each function normalises protobuf responses into lightweight, serialisable
|
|
15
|
-
* TypeScript interfaces – ready for logging, display, or further processing.
|
|
16
|
-
*
|
|
17
|
-
* @module targets/akash/query-client
|
|
18
|
-
*/
|
|
19
|
-
import Long from 'long';
|
|
20
|
-
import { URL } from 'node:url';
|
|
21
|
-
import { getRpc } from '@akashnetwork/akashjs/build/rpc/index.js';
|
|
22
|
-
import { QueryClientImpl as MarketQueryClient, QueryLeasesRequest, QueryLeaseRequest, } from '@akashnetwork/akash-api/akash/market/v1beta4';
|
|
23
|
-
import { QueryClientImpl as DeploymentQueryClient, QueryDeploymentRequest, } from '@akashnetwork/akash-api/akash/deployment/v1beta3';
|
|
24
|
-
import { QueryClientImpl as ProviderQueryClient, QueryProviderRequest, } from '@akashnetwork/akash-api/akash/provider/v1beta3';
|
|
25
|
-
import { success, failure } from '../../types/index.js';
|
|
26
|
-
import { DeploymentError } from '../../errors/index.js';
|
|
27
|
-
import { getNetworkConfig, } from './environment.js';
|
|
28
|
-
/** Text decoder for protobuf byte fields */
|
|
29
|
-
const DECODER = new TextDecoder();
|
|
30
|
-
/**
|
|
31
|
-
* Creates a query client for the Akash market module
|
|
32
|
-
*/
|
|
33
|
-
async function createMarketClient(network) {
|
|
34
|
-
const { rpc } = getNetworkConfig(network);
|
|
35
|
-
return new MarketQueryClient(await getRpc(rpc));
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Creates a query client for the Akash deployment module
|
|
39
|
-
*/
|
|
40
|
-
async function createDeploymentClient(network) {
|
|
41
|
-
const { rpc } = getNetworkConfig(network);
|
|
42
|
-
return new DeploymentQueryClient(await getRpc(rpc));
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Creates a query client for the Akash provider module
|
|
46
|
-
*/
|
|
47
|
-
async function createProviderClient(network) {
|
|
48
|
-
const { rpc } = getNetworkConfig(network);
|
|
49
|
-
return new ProviderQueryClient(await getRpc(rpc));
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Fetches leases matching the provided filters.
|
|
53
|
-
*/
|
|
54
|
-
export async function getLeaseRecords(network, filters) {
|
|
55
|
-
try {
|
|
56
|
-
const client = await createMarketClient(network);
|
|
57
|
-
const leaseFilters = {};
|
|
58
|
-
if (filters.owner)
|
|
59
|
-
leaseFilters.owner = filters.owner;
|
|
60
|
-
if (filters.dseq !== undefined) {
|
|
61
|
-
leaseFilters.dseq = Long.fromString(String(filters.dseq));
|
|
62
|
-
}
|
|
63
|
-
if (filters.provider)
|
|
64
|
-
leaseFilters.provider = filters.provider;
|
|
65
|
-
if (typeof filters.gseq === 'number')
|
|
66
|
-
leaseFilters.gseq = filters.gseq;
|
|
67
|
-
if (typeof filters.oseq === 'number')
|
|
68
|
-
leaseFilters.oseq = filters.oseq;
|
|
69
|
-
if (filters.state)
|
|
70
|
-
leaseFilters.state = filters.state;
|
|
71
|
-
const request = QueryLeasesRequest.fromPartial({ filters: leaseFilters });
|
|
72
|
-
const response = await client.Leases(request);
|
|
73
|
-
const leases = [];
|
|
74
|
-
for (const entry of response.leases ?? []) {
|
|
75
|
-
const details = mapLease(entry);
|
|
76
|
-
if (details) {
|
|
77
|
-
leases.push(details);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
return success(Object.freeze(leases));
|
|
81
|
-
}
|
|
82
|
-
catch (error) {
|
|
83
|
-
return failure(createRpcError('Failed to query leases', network, error));
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
export async function getLeaseById(network, lease) {
|
|
87
|
-
try {
|
|
88
|
-
const client = await createMarketClient(network);
|
|
89
|
-
const request = QueryLeaseRequest.fromPartial({
|
|
90
|
-
id: {
|
|
91
|
-
owner: lease.owner,
|
|
92
|
-
provider: lease.provider,
|
|
93
|
-
dseq: Long.fromString(String(lease.dseq)),
|
|
94
|
-
gseq: lease.gseq,
|
|
95
|
-
oseq: lease.oseq,
|
|
96
|
-
},
|
|
97
|
-
});
|
|
98
|
-
const response = await client.Lease(request);
|
|
99
|
-
const details = mapLease(response);
|
|
100
|
-
if (!details) {
|
|
101
|
-
return failure(new DeploymentError('Lease not found', 'LEASE_NOT_FOUND', { network, lease }));
|
|
102
|
-
}
|
|
103
|
-
return success(details);
|
|
104
|
-
}
|
|
105
|
-
catch (error) {
|
|
106
|
-
return failure(createRpcError('Failed to query lease', network, error));
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Fetches deployment metadata and group resource information.
|
|
111
|
-
*/
|
|
112
|
-
export async function getDeploymentDetails(network, owner, dseq) {
|
|
113
|
-
try {
|
|
114
|
-
const client = await createDeploymentClient(network);
|
|
115
|
-
const request = QueryDeploymentRequest.fromPartial({
|
|
116
|
-
id: {
|
|
117
|
-
owner,
|
|
118
|
-
dseq: Long.fromString(String(dseq)),
|
|
119
|
-
},
|
|
120
|
-
});
|
|
121
|
-
const response = await client.Deployment(request);
|
|
122
|
-
if (!response.deployment) {
|
|
123
|
-
return failure(new DeploymentError('Deployment not found', 'DEPLOYMENT_NOT_FOUND', { network, owner, dseq }));
|
|
124
|
-
}
|
|
125
|
-
const details = mapDeployment(response);
|
|
126
|
-
return success(details);
|
|
127
|
-
}
|
|
128
|
-
catch (error) {
|
|
129
|
-
return failure(createRpcError('Failed to query deployment', network, error));
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Fetches provider metadata (host URI and attributes).
|
|
134
|
-
*/
|
|
135
|
-
export async function getProviderMetadata(network, providerAddress) {
|
|
136
|
-
try {
|
|
137
|
-
const client = await createProviderClient(network);
|
|
138
|
-
const request = QueryProviderRequest.fromPartial({ owner: providerAddress });
|
|
139
|
-
const response = await client.Provider(request);
|
|
140
|
-
if (!response.provider) {
|
|
141
|
-
return success(undefined);
|
|
142
|
-
}
|
|
143
|
-
return success(mapProvider(response.provider));
|
|
144
|
-
}
|
|
145
|
-
catch (error) {
|
|
146
|
-
return failure(createRpcError('Failed to query provider', network, error));
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* Aggregates lease, deployment, and provider information into one object.
|
|
151
|
-
*/
|
|
152
|
-
export async function getDeploymentOverview(network, lease) {
|
|
153
|
-
const [deploymentResult, providerResult] = await Promise.all([
|
|
154
|
-
getDeploymentDetails(network, lease.owner, lease.dseq),
|
|
155
|
-
getProviderMetadata(network, lease.provider),
|
|
156
|
-
]);
|
|
157
|
-
if (!deploymentResult.success) {
|
|
158
|
-
return deploymentResult;
|
|
159
|
-
}
|
|
160
|
-
if (!providerResult.success) {
|
|
161
|
-
return providerResult;
|
|
162
|
-
}
|
|
163
|
-
return success(Object.freeze({
|
|
164
|
-
lease,
|
|
165
|
-
deployment: deploymentResult.data,
|
|
166
|
-
provider: providerResult.data,
|
|
167
|
-
}));
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* Maps a QueryLeaseResponse into a LeaseDetails structure.
|
|
171
|
-
*/
|
|
172
|
-
function mapLease(response) {
|
|
173
|
-
// Early return if response or lease is missing
|
|
174
|
-
if (!response?.lease) {
|
|
175
|
-
return null;
|
|
176
|
-
}
|
|
177
|
-
const lease = response.lease;
|
|
178
|
-
const id = lease.leaseId;
|
|
179
|
-
// Additional check: lease ID must exist
|
|
180
|
-
if (!id) {
|
|
181
|
-
return null;
|
|
182
|
-
}
|
|
183
|
-
return {
|
|
184
|
-
owner: id.owner,
|
|
185
|
-
provider: id.provider,
|
|
186
|
-
dseq: longToString(id.dseq),
|
|
187
|
-
gseq: id.gseq,
|
|
188
|
-
oseq: id.oseq,
|
|
189
|
-
state: mapLeaseState(lease.state),
|
|
190
|
-
price: {
|
|
191
|
-
denom: lease.price?.denom ?? 'uakt',
|
|
192
|
-
amount: lease.price?.amount ?? '0',
|
|
193
|
-
},
|
|
194
|
-
createdAt: longToString(lease.createdAt ?? Long.ZERO),
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
|
-
/**
|
|
198
|
-
* Maps deployment response into DeploymentDetails.
|
|
199
|
-
*/
|
|
200
|
-
function mapDeployment(response) {
|
|
201
|
-
const deployment = response.deployment;
|
|
202
|
-
const owner = deployment.deploymentId?.owner ?? '';
|
|
203
|
-
const dseq = deployment.deploymentId?.dseq ?? '';
|
|
204
|
-
// Map deployment state enum to string
|
|
205
|
-
const state = mapDeploymentState(deployment.state);
|
|
206
|
-
const version = toHexString(deployment.version);
|
|
207
|
-
// Long types from protobuf need explicit conversion
|
|
208
|
-
const createdAt = longToString(deployment.createdAt ?? Long.ZERO);
|
|
209
|
-
const groups = (response.groups ?? []).map((group) => {
|
|
210
|
-
const groupSpec = group.groupSpec;
|
|
211
|
-
const resources = (groupSpec?.resources ?? []).map((item) => {
|
|
212
|
-
const resource = item.resource;
|
|
213
|
-
return {
|
|
214
|
-
resourceId: resource?.id ?? 0,
|
|
215
|
-
count: item.count ?? 0,
|
|
216
|
-
cpuUnits: decodeResourceValue(resource?.cpu?.units?.val),
|
|
217
|
-
memoryQuantity: decodeResourceValue(resource?.memory?.quantity?.val),
|
|
218
|
-
storageQuantities: (resource?.storage ?? []).map((storage) => decodeResourceValue(storage.quantity?.val)),
|
|
219
|
-
};
|
|
220
|
-
});
|
|
221
|
-
return {
|
|
222
|
-
name: groupSpec?.name ?? 'group',
|
|
223
|
-
resources: Object.freeze(resources),
|
|
224
|
-
};
|
|
225
|
-
});
|
|
226
|
-
return {
|
|
227
|
-
owner: owner,
|
|
228
|
-
dseq: String(dseq),
|
|
229
|
-
state,
|
|
230
|
-
version,
|
|
231
|
-
createdAt,
|
|
232
|
-
groups: Object.freeze(groups),
|
|
233
|
-
};
|
|
234
|
-
}
|
|
235
|
-
/**
|
|
236
|
-
* Maps provider metadata into a typed structure.
|
|
237
|
-
*/
|
|
238
|
-
function mapProvider(provider) {
|
|
239
|
-
return {
|
|
240
|
-
owner: provider.owner,
|
|
241
|
-
hostUri: normaliseProviderUri(provider.hostUri),
|
|
242
|
-
attributes: Object.freeze((provider.attributes ?? []).map((attr) => ({
|
|
243
|
-
key: attr.key ?? '',
|
|
244
|
-
value: attr.value ?? '',
|
|
245
|
-
}))),
|
|
246
|
-
};
|
|
247
|
-
}
|
|
248
|
-
/**
|
|
249
|
-
* Converts protobuf byte arrays into UTF-8 strings. Returns empty string if missing.
|
|
250
|
-
*/
|
|
251
|
-
function decodeResourceValue(value) {
|
|
252
|
-
if (!value || value.length === 0) {
|
|
253
|
-
return '0';
|
|
254
|
-
}
|
|
255
|
-
return DECODER.decode(value);
|
|
256
|
-
}
|
|
257
|
-
/**
|
|
258
|
-
* Converts binary version hash to hexadecimal string.
|
|
259
|
-
*/
|
|
260
|
-
function toHexString(value) {
|
|
261
|
-
if (!value || value.length === 0) {
|
|
262
|
-
return '';
|
|
263
|
-
}
|
|
264
|
-
return Buffer.from(value).toString('hex');
|
|
265
|
-
}
|
|
266
|
-
/**
|
|
267
|
-
* Converts Long/number/string values to string representation.
|
|
268
|
-
*/
|
|
269
|
-
function longToString(value) {
|
|
270
|
-
if (Long.isLong(value)) {
|
|
271
|
-
return value.toString();
|
|
272
|
-
}
|
|
273
|
-
return String(value);
|
|
274
|
-
}
|
|
275
|
-
function mapLeaseState(state) {
|
|
276
|
-
if (typeof state === 'string') {
|
|
277
|
-
return state;
|
|
278
|
-
}
|
|
279
|
-
switch (state) {
|
|
280
|
-
case 1:
|
|
281
|
-
return 'active';
|
|
282
|
-
case 2:
|
|
283
|
-
return 'insufficient_funds';
|
|
284
|
-
case 3:
|
|
285
|
-
return 'closed';
|
|
286
|
-
default:
|
|
287
|
-
return 'unknown';
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
/**
|
|
291
|
-
* Maps deployment state enum to human-readable string
|
|
292
|
-
*/
|
|
293
|
-
function mapDeploymentState(state) {
|
|
294
|
-
if (typeof state === 'string') {
|
|
295
|
-
return state;
|
|
296
|
-
}
|
|
297
|
-
switch (state) {
|
|
298
|
-
case 1:
|
|
299
|
-
return 'active';
|
|
300
|
-
case 2:
|
|
301
|
-
return 'closed';
|
|
302
|
-
default:
|
|
303
|
-
return 'unknown';
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
/**
|
|
307
|
-
* Normalises provider URI strings, returning undefined if invalid.
|
|
308
|
-
*/
|
|
309
|
-
function normaliseProviderUri(uri) {
|
|
310
|
-
if (!uri) {
|
|
311
|
-
return undefined;
|
|
312
|
-
}
|
|
313
|
-
try {
|
|
314
|
-
const parsed = new URL(uri);
|
|
315
|
-
if (parsed.protocol !== 'https:') {
|
|
316
|
-
return undefined;
|
|
317
|
-
}
|
|
318
|
-
parsed.pathname = parsed.pathname.replace(/\/$/, '');
|
|
319
|
-
return parsed.toString();
|
|
320
|
-
}
|
|
321
|
-
catch {
|
|
322
|
-
return undefined;
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
/**
|
|
326
|
-
* Wraps low-level RPC errors into DeploymentError instances for consistency.
|
|
327
|
-
*/
|
|
328
|
-
function createRpcError(message, network, error) {
|
|
329
|
-
const description = error instanceof Error ? error.message : String(error);
|
|
330
|
-
return new DeploymentError(message, 'RPC_ERROR', { network, error: description }, true);
|
|
331
|
-
}
|
|
332
|
-
//# sourceMappingURL=query-client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"query-client.js","sourceRoot":"","sources":["../../../src/targets/akash/query-client.ts"],"names":[],"mappings":"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"}
|
package/docs/EXAMPLES.md
DELETED
|
@@ -1,293 +0,0 @@
|
|
|
1
|
-
# deploy-ability Examples
|
|
2
|
-
|
|
3
|
-
Detailed examples for various use cases.
|
|
4
|
-
|
|
5
|
-
## 3. CI/CD Automation
|
|
6
|
-
|
|
7
|
-
**Scenario:** Automated deployments from GitHub Actions, GitLab CI, or other CI/CD platforms.
|
|
8
|
-
|
|
9
|
-
### GitHub Actions Example
|
|
10
|
-
|
|
11
|
-
```typescript
|
|
12
|
-
// .github/workflows/deploy.ts
|
|
13
|
-
import { createWalletContextFromSigner, deployToAkash } from 'deploy-ability';
|
|
14
|
-
import { DirectSecp256k1HdWallet } from '@cosmjs/proto-signing';
|
|
15
|
-
|
|
16
|
-
async function deploy() {
|
|
17
|
-
const environment = process.env.GITHUB_REF_NAME; // branch name
|
|
18
|
-
const profile = environment === 'main' ? 'production' : 'staging';
|
|
19
|
-
const network = environment === 'main' ? 'mainnet' : 'testnet';
|
|
20
|
-
|
|
21
|
-
console.log(`Deploying ${environment} to ${network}...`);
|
|
22
|
-
|
|
23
|
-
// Create signer from GitHub Secret
|
|
24
|
-
const mnemonic = process.env.AKASH_DEPLOYMENT_MNEMONIC!;
|
|
25
|
-
const signer = await DirectSecp256k1HdWallet.fromMnemonic(mnemonic, {
|
|
26
|
-
prefix: 'akash'
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
// Create wallet context
|
|
30
|
-
const wallet = await createWalletContextFromSigner(signer, network);
|
|
31
|
-
|
|
32
|
-
if (!wallet.success) {
|
|
33
|
-
console.error('Wallet setup failed:', wallet.error.message);
|
|
34
|
-
process.exit(1);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// Deploy!
|
|
38
|
-
const result = await deployToAkash({
|
|
39
|
-
wallet: wallet.data,
|
|
40
|
-
projectRoot: process.cwd(),
|
|
41
|
-
profile,
|
|
42
|
-
network
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
if (result.success) {
|
|
46
|
-
console.log(`Deployed successfully!`);
|
|
47
|
-
console.log(` DSEQ: ${result.data.dseq}`);
|
|
48
|
-
console.log(` Provider: ${result.data.providerUri}`);
|
|
49
|
-
console.log(` Console: https://console.akash.network/deployments/${result.data.dseq}`);
|
|
50
|
-
|
|
51
|
-
// Post to Slack/Discord
|
|
52
|
-
await notify({
|
|
53
|
-
environment,
|
|
54
|
-
dseq: result.data.dseq,
|
|
55
|
-
url: `https://console.akash.network/deployments/${result.data.dseq}`
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
process.exit(0);
|
|
59
|
-
} else {
|
|
60
|
-
console.error('Deployment failed:', result.error.message);
|
|
61
|
-
process.exit(1);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
deploy().catch(err => {
|
|
66
|
-
console.error('Fatal error:', err);
|
|
67
|
-
process.exit(1);
|
|
68
|
-
});
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### GitHub Actions Workflow
|
|
72
|
-
|
|
73
|
-
```yaml
|
|
74
|
-
# .github/workflows/deploy.yml
|
|
75
|
-
name: Deploy to Akash
|
|
76
|
-
|
|
77
|
-
on:
|
|
78
|
-
push:
|
|
79
|
-
branches: [main, staging]
|
|
80
|
-
|
|
81
|
-
jobs:
|
|
82
|
-
deploy:
|
|
83
|
-
runs-on: ubuntu-latest
|
|
84
|
-
steps:
|
|
85
|
-
- uses: actions/checkout@v3
|
|
86
|
-
|
|
87
|
-
- name: Setup Node.js
|
|
88
|
-
uses: actions/setup-node@v3
|
|
89
|
-
with:
|
|
90
|
-
node-version: '20'
|
|
91
|
-
|
|
92
|
-
- name: Install dependencies
|
|
93
|
-
run: npm ci
|
|
94
|
-
|
|
95
|
-
- name: Deploy to Akash
|
|
96
|
-
env:
|
|
97
|
-
AKASH_DEPLOYMENT_MNEMONIC: ${{ secrets.AKASH_DEPLOYMENT_MNEMONIC }}
|
|
98
|
-
run: npx tsx .github/workflows/deploy.ts
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
---
|
|
102
|
-
|
|
103
|
-
## 4. API Servers
|
|
104
|
-
|
|
105
|
-
**Scenario:** Deployment-as-a-Service - users trigger deployments via REST API.
|
|
106
|
-
|
|
107
|
-
```typescript
|
|
108
|
-
import express from 'express';
|
|
109
|
-
import {
|
|
110
|
-
deployToAkash,
|
|
111
|
-
createWalletContextFromSigner,
|
|
112
|
-
DeploymentError
|
|
113
|
-
} from 'deploy-ability';
|
|
114
|
-
import { DirectSecp256k1HdWallet } from '@cosmjs/proto-signing';
|
|
115
|
-
|
|
116
|
-
const app = express();
|
|
117
|
-
app.use(express.json());
|
|
118
|
-
|
|
119
|
-
// Service wallet (pays for deployments)
|
|
120
|
-
let serviceWallet: WalletContext;
|
|
121
|
-
|
|
122
|
-
async function initializeServiceWallet() {
|
|
123
|
-
const mnemonic = process.env.SERVICE_WALLET_MNEMONIC!;
|
|
124
|
-
const signer = await DirectSecp256k1HdWallet.fromMnemonic(mnemonic, {
|
|
125
|
-
prefix: 'akash'
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
const result = await createWalletContextFromSigner(signer, 'mainnet');
|
|
129
|
-
if (!result.success) throw result.error;
|
|
130
|
-
|
|
131
|
-
serviceWallet = result.data;
|
|
132
|
-
console.log('Service wallet initialized:', serviceWallet.address);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
app.post('/api/deployments', async (req, res) => {
|
|
136
|
-
const { projectPath, profile, network } = req.body;
|
|
137
|
-
|
|
138
|
-
// Validate request
|
|
139
|
-
if (!projectPath || !profile) {
|
|
140
|
-
return res.status(400).json({
|
|
141
|
-
error: 'Missing required fields: projectPath, profile'
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
try {
|
|
146
|
-
// Deploy using service wallet
|
|
147
|
-
const result = await deployToAkash({
|
|
148
|
-
wallet: serviceWallet,
|
|
149
|
-
projectRoot: projectPath,
|
|
150
|
-
profile,
|
|
151
|
-
network: network || 'mainnet'
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
if (result.success) {
|
|
155
|
-
res.json({
|
|
156
|
-
success: true,
|
|
157
|
-
deployment: {
|
|
158
|
-
dseq: result.data.dseq,
|
|
159
|
-
provider: result.data.provider,
|
|
160
|
-
providerUri: result.data.providerUri,
|
|
161
|
-
consoleUrl: `https://console.akash.network/deployments/${result.data.dseq}`
|
|
162
|
-
}
|
|
163
|
-
});
|
|
164
|
-
} else {
|
|
165
|
-
res.status(500).json({
|
|
166
|
-
success: false,
|
|
167
|
-
error: result.error.message,
|
|
168
|
-
code: result.error.code
|
|
169
|
-
});
|
|
170
|
-
}
|
|
171
|
-
} catch (error) {
|
|
172
|
-
console.error('Deployment error:', error);
|
|
173
|
-
|
|
174
|
-
if (error instanceof DeploymentError) {
|
|
175
|
-
res.status(400).json({
|
|
176
|
-
success: false,
|
|
177
|
-
error: error.message,
|
|
178
|
-
code: error.code,
|
|
179
|
-
context: error.context
|
|
180
|
-
});
|
|
181
|
-
} else {
|
|
182
|
-
res.status(500).json({
|
|
183
|
-
success: false,
|
|
184
|
-
error: 'Internal server error'
|
|
185
|
-
});
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
});
|
|
189
|
-
|
|
190
|
-
// Initialize and start server
|
|
191
|
-
initializeServiceWallet().then(() => {
|
|
192
|
-
app.listen(3000, () => {
|
|
193
|
-
console.log('Deployment API running on http://localhost:3000');
|
|
194
|
-
});
|
|
195
|
-
});
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
---
|
|
199
|
-
## Examples
|
|
200
|
-
|
|
201
|
-
### Complete Deployment Script
|
|
202
|
-
|
|
203
|
-
```typescript
|
|
204
|
-
import {
|
|
205
|
-
connectWallet,
|
|
206
|
-
createSigningClient,
|
|
207
|
-
ensureCertificate,
|
|
208
|
-
deployToAkash
|
|
209
|
-
} from 'deploy-ability';
|
|
210
|
-
import QRCode from 'qrcode-terminal';
|
|
211
|
-
|
|
212
|
-
async function main() {
|
|
213
|
-
console.log('Deploying to Akash Network...\n');
|
|
214
|
-
|
|
215
|
-
// 1. Connect wallet
|
|
216
|
-
console.log('Step 1: Connect Keplr Wallet');
|
|
217
|
-
const walletResult = await connectWallet(
|
|
218
|
-
'your-project-id',
|
|
219
|
-
'mainnet',
|
|
220
|
-
{
|
|
221
|
-
onUriGenerated: (uri) => {
|
|
222
|
-
QRCode.generate(uri, { small: true });
|
|
223
|
-
console.log('Scan QR code with Keplr mobile app');
|
|
224
|
-
console.log('Waiting for approval...');
|
|
225
|
-
},
|
|
226
|
-
timeoutMs: 120000
|
|
227
|
-
}
|
|
228
|
-
);
|
|
229
|
-
|
|
230
|
-
if (!walletResult.success) {
|
|
231
|
-
console.error('Wallet connection failed:', walletResult.error.message);
|
|
232
|
-
process.exit(1);
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
console.log(`Connected: ${walletResult.data.address}\n`);
|
|
236
|
-
|
|
237
|
-
// 2. Create signing client
|
|
238
|
-
console.log('Step 2: Connect to Akash Blockchain');
|
|
239
|
-
const clientResult = await createSigningClient(walletResult.data, 'mainnet');
|
|
240
|
-
|
|
241
|
-
if (!clientResult.success) {
|
|
242
|
-
console.error('Client creation failed:', clientResult.error.message);
|
|
243
|
-
process.exit(1);
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
console.log('Connected to Akash RPC\n');
|
|
247
|
-
|
|
248
|
-
// 3. Ensure certificate
|
|
249
|
-
console.log('Step 3: Setup Certificate');
|
|
250
|
-
const certResult = await ensureCertificate(
|
|
251
|
-
walletResult.data,
|
|
252
|
-
'mainnet',
|
|
253
|
-
clientResult.data.client
|
|
254
|
-
);
|
|
255
|
-
|
|
256
|
-
if (!certResult.success) {
|
|
257
|
-
console.error('Certificate setup failed:', certResult.error.message);
|
|
258
|
-
process.exit(1);
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
console.log('Certificate ready\n');
|
|
262
|
-
|
|
263
|
-
// 4. Deploy!
|
|
264
|
-
console.log('Step 4: Deploy to Akash');
|
|
265
|
-
const result = await deployToAkash({
|
|
266
|
-
wallet: walletResult.data,
|
|
267
|
-
certificate: certResult.data,
|
|
268
|
-
projectRoot: process.cwd(),
|
|
269
|
-
profile: 'production',
|
|
270
|
-
network: 'mainnet'
|
|
271
|
-
});
|
|
272
|
-
|
|
273
|
-
if (!result.success) {
|
|
274
|
-
console.error('Deployment failed:', result.error.message);
|
|
275
|
-
process.exit(1);
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
// Success!
|
|
279
|
-
console.log('\nDeployment Successful!\n');
|
|
280
|
-
console.log('Deployment Details:');
|
|
281
|
-
console.log(` DSEQ: ${result.data.dseq}`);
|
|
282
|
-
console.log(` Provider: ${result.data.provider}`);
|
|
283
|
-
console.log(` Provider URI: ${result.data.providerUri}`);
|
|
284
|
-
console.log(` Console: https://console.akash.network/deployments/${result.data.dseq}`);
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
main().catch(err => {
|
|
288
|
-
console.error('Fatal error:', err);
|
|
289
|
-
process.exit(1);
|
|
290
|
-
});
|
|
291
|
-
```
|
|
292
|
-
|
|
293
|
-
---
|