fix(structure): improve structure, prepare better CI integration
This commit is contained in:
parent
2e6e7f6ca8
commit
55b2872ffc
24
test/test.apiclient.ts
Normal file
24
test/test.apiclient.ts
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
import { tap, expect } from '@push.rocks/tapbundle';
|
||||||
|
|
||||||
|
import * as cloudlyApiClient from '../ts_apiclient/index.js';
|
||||||
|
|
||||||
|
let testClient: cloudlyApiClient.CloudlyApiClient;
|
||||||
|
|
||||||
|
tap.test('should create a new cloudlyApiClient', async () => {
|
||||||
|
testClient = new cloudlyApiClient.CloudlyApiClient({
|
||||||
|
registerAs: 'api',
|
||||||
|
cloudlyUrl: 'http://localhost:3000',
|
||||||
|
});
|
||||||
|
await testClient.start();
|
||||||
|
expect(testClient).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
tap.test('should trigger a server action', async () => {
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
tap.test('should stop the apiclient', async () => {
|
||||||
|
await testClient.stop();
|
||||||
|
})
|
||||||
|
|
||||||
|
export default tap.start();
|
19
test/test.ts
19
test/test.ts
@ -10,20 +10,19 @@ import * as cloudly from '../ts/index.js';
|
|||||||
let testCloudly: cloudly.Cloudly;
|
let testCloudly: cloudly.Cloudly;
|
||||||
tap.test('first test', async () => {
|
tap.test('first test', async () => {
|
||||||
const cloudlyConfig: cloudly.ICloudlyConfig = {
|
const cloudlyConfig: cloudly.ICloudlyConfig = {
|
||||||
cfToken: testQenv.getEnvVarOnDemand('CF_TOKEN'),
|
cfToken: await testQenv.getEnvVarOnDemand('CF_TOKEN'),
|
||||||
environment: 'integration',
|
environment: 'integration',
|
||||||
letsEncryptEmail: testQenv.getEnvVarOnDemand('LETSENCRYPT_EMAIL'),
|
letsEncryptEmail: await testQenv.getEnvVarOnDemand('LETSENCRYPT_EMAIL'),
|
||||||
publicUrl: testQenv.getEnvVarOnDemand('SERVEZONE_URL'),
|
publicUrl: await testQenv.getEnvVarOnDemand('SERVEZONE_URL'),
|
||||||
publicPort: testQenv.getEnvVarOnDemand('SERVEZONE_PORT'),
|
publicPort: await testQenv.getEnvVarOnDemand('SERVEZONE_PORT'),
|
||||||
mongoDescriptor: {
|
mongoDescriptor: {
|
||||||
mongoDbName: testQenv.getEnvVarOnDemand('MONGODB_DATABASE'),
|
mongoDbName: await testQenv.getEnvVarOnDemand('MONGODB_DATABASE'),
|
||||||
mongoDbUser: testQenv.getEnvVarOnDemand('MONGODB_USER'),
|
mongoDbUser: await testQenv.getEnvVarOnDemand('MONGODB_USER'),
|
||||||
mongoDbPass: testQenv.getEnvVarOnDemand('MONGODB_PASSWORD'),
|
mongoDbPass: await testQenv.getEnvVarOnDemand('MONGODB_PASSWORD'),
|
||||||
mongoDbUrl: testQenv.getEnvVarOnDemand('MONGODB_URL'),
|
mongoDbUrl: await testQenv.getEnvVarOnDemand('MONGODB_URL'),
|
||||||
},
|
},
|
||||||
digitalOceanToken: testQenv.getEnvVarOnDemand('DIGITALOCEAN_TOKEN'),
|
|
||||||
};
|
};
|
||||||
testCloudly = new cloudly.Cloudly(cloudlyConfig);
|
testCloudly = new cloudly.Cloudly();
|
||||||
expect(testCloudly).toBeInstanceOf(cloudly.Cloudly);
|
expect(testCloudly).toBeInstanceOf(cloudly.Cloudly);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -3,6 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
export const commitinfo = {
|
export const commitinfo = {
|
||||||
name: '@serve.zone/cloudly',
|
name: '@serve.zone/cloudly',
|
||||||
version: '1.1.2',
|
version: '1.1.3',
|
||||||
description: 'A cloud manager leveraging Docker Swarmkit for multi-cloud operations including DigitalOcean, Hetzner Cloud, and Cloudflare, with integration support and robust configuration management system.'
|
description: 'A cloud manager leveraging Docker Swarmkit for multi-cloud operations including DigitalOcean, Hetzner Cloud, and Cloudflare, with integration support and robust configuration management system.'
|
||||||
}
|
}
|
||||||
|
@ -26,3 +26,5 @@ const runCli = async () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export { runCli, Cloudly };
|
export { runCli, Cloudly };
|
||||||
|
type ICloudlyConfig = plugins.servezoneInterfaces.data.ICloudlyConfig;
|
||||||
|
export { type ICloudlyConfig }
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
import * as plugins from './plugins.js';
|
import * as plugins from './plugins.js';
|
||||||
|
|
||||||
export type TClientType = 'coreflow' | 'cli' | 'serverconfig';
|
export type TClientType = 'api' | 'ci' | 'coreflow' | 'cli' | 'serverconfig';
|
||||||
|
|
||||||
import { Image } from './classes.image.js';
|
import { Image } from './classes.image.js';
|
||||||
|
|
||||||
export class CloudlyClient {
|
export class CloudlyApiClient {
|
||||||
private cloudlyUrl: string;
|
private cloudlyUrl: string;
|
||||||
private registerAs: string;
|
private registerAs: string;
|
||||||
|
|
||||||
@ -20,9 +20,13 @@ export class CloudlyClient {
|
|||||||
plugins.servezoneInterfaces.requests.server.IRequest_TriggerServerAction['request']
|
plugins.servezoneInterfaces.requests.server.IRequest_TriggerServerAction['request']
|
||||||
>();
|
>();
|
||||||
|
|
||||||
constructor(registerAsArg: TClientType) {
|
constructor(optionsArg?: {
|
||||||
this.cloudlyUrl = process.env.CLOUDLY_URL || 'https://cloudly.layer.io:443';
|
registerAs: TClientType;
|
||||||
this.registerAs = registerAsArg;
|
cloudlyUrl?: string;
|
||||||
|
}) {
|
||||||
|
this.registerAs = optionsArg.registerAs;
|
||||||
|
this.cloudlyUrl =
|
||||||
|
optionsArg?.cloudlyUrl || process.env.CLOUDLY_URL || 'https://cloudly.layer.io:443';
|
||||||
|
|
||||||
console.log(
|
console.log(
|
||||||
`creating LoleCloudlyClient: registering as ${this.registerAs} and target url ${this.cloudlyUrl}`
|
`creating LoleCloudlyClient: registering as ${this.registerAs} and target url ${this.cloudlyUrl}`
|
||||||
@ -35,13 +39,6 @@ export class CloudlyClient {
|
|||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
this.typedrouter.addTypedHandler<plugins.servezoneInterfaces.requests.config.IRequest_Cloudly_Coreflow_PushClusterConfig>(
|
|
||||||
new plugins.typedrequest.TypedHandler('pushClusterConfig', async (dataArg) => {
|
|
||||||
this.configUpdateSubject.next(dataArg);
|
|
||||||
return {};
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
this.typedrouter.addTypedHandler<plugins.servezoneInterfaces.requests.server.IRequest_TriggerServerAction>(
|
this.typedrouter.addTypedHandler<plugins.servezoneInterfaces.requests.server.IRequest_TriggerServerAction>(
|
||||||
new plugins.typedrequest.TypedHandler('triggerServerAction', async (dataArg) => {
|
new plugins.typedrequest.TypedHandler('triggerServerAction', async (dataArg) => {
|
||||||
this.serverActionSubject.next(dataArg);
|
this.serverActionSubject.next(dataArg);
|
||||||
@ -57,7 +54,9 @@ export class CloudlyClient {
|
|||||||
this.typedrouter,
|
this.typedrouter,
|
||||||
this.cloudlyUrl
|
this.cloudlyUrl
|
||||||
);
|
);
|
||||||
console.log(`CloudlyCluent connected to cloudly at ${this.cloudlyUrl}. Remember to get an identity.`)
|
console.log(
|
||||||
|
`CloudlyCluent connected to cloudly at ${this.cloudlyUrl}. Remember to get an identity.`
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async stop() {
|
public async stop() {
|
||||||
@ -115,7 +114,7 @@ export class CloudlyClient {
|
|||||||
);
|
);
|
||||||
const response = await serverConfigRequest.fire({
|
const response = await serverConfigRequest.fire({
|
||||||
jwt: '', // TODO: do proper auth here
|
jwt: '', // TODO: do proper auth here
|
||||||
serverId: '' // TODO: get server id here
|
serverId: '', // TODO: get server id here
|
||||||
});
|
});
|
||||||
return response.configData;
|
return response.configData;
|
||||||
}
|
}
|
||||||
@ -125,7 +124,9 @@ export class CloudlyClient {
|
|||||||
* @param serviceNameArg
|
* @param serviceNameArg
|
||||||
* @param domainNameArg
|
* @param domainNameArg
|
||||||
*/
|
*/
|
||||||
public async getCertificateForDomainOverHttps(domainNameArg: string): Promise<plugins.tsclass.network.ICert> {
|
public async getCertificateForDomainOverHttps(
|
||||||
|
domainNameArg: string
|
||||||
|
): Promise<plugins.tsclass.network.ICert> {
|
||||||
const typedCertificateRequest =
|
const typedCertificateRequest =
|
||||||
this.typedsocketClient.createTypedRequest<plugins.servezoneInterfaces.requests.certificate.IRequest_Any_Cloudly_GetSslCertificate>(
|
this.typedsocketClient.createTypedRequest<plugins.servezoneInterfaces.requests.certificate.IRequest_Any_Cloudly_GetSslCertificate>(
|
||||||
'getSslCertificate'
|
'getSslCertificate'
|
@ -1,8 +1,8 @@
|
|||||||
import type { CloudlyClient } from './classes.cloudlyclient.js';
|
import type { CloudlyApiClient } from './classes.cloudlyapiclient.js';
|
||||||
import * as plugins from './plugins.js';
|
import * as plugins from './plugins.js';
|
||||||
|
|
||||||
export class Image implements plugins.servezoneInterfaces.data.IImage {
|
export class Image implements plugins.servezoneInterfaces.data.IImage {
|
||||||
public static async getImages(cloudlyClientRef: CloudlyClient) {
|
public static async getImages(cloudlyClientRef: CloudlyApiClient) {
|
||||||
const getAllImagesTR = cloudlyClientRef.typedsocketClient.createTypedRequest<plugins.servezoneInterfaces.requests.image.IRequest_GetAllImages>(
|
const getAllImagesTR = cloudlyClientRef.typedsocketClient.createTypedRequest<plugins.servezoneInterfaces.requests.image.IRequest_GetAllImages>(
|
||||||
'getAllImages'
|
'getAllImages'
|
||||||
);
|
);
|
||||||
@ -19,12 +19,12 @@ export class Image implements plugins.servezoneInterfaces.data.IImage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// INSTANCE
|
// INSTANCE
|
||||||
cloudlyClientRef: CloudlyClient;
|
cloudlyClientRef: CloudlyApiClient;
|
||||||
|
|
||||||
id: plugins.servezoneInterfaces.data.IImage['id'];
|
id: plugins.servezoneInterfaces.data.IImage['id'];
|
||||||
data: plugins.servezoneInterfaces.data.IImage['data'];
|
data: plugins.servezoneInterfaces.data.IImage['data'];
|
||||||
|
|
||||||
constructor(cloudlyClientRef: CloudlyClient) {
|
constructor(cloudlyClientRef: CloudlyApiClient) {
|
||||||
this.cloudlyClientRef = cloudlyClientRef;
|
this.cloudlyClientRef = cloudlyClientRef;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
export * from './classes.cloudlyclient.js';
|
export * from './classes.cloudlyapiclient.js';
|
@ -3,6 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
export const commitinfo = {
|
export const commitinfo = {
|
||||||
name: '@serve.zone/cloudly',
|
name: '@serve.zone/cloudly',
|
||||||
version: '1.1.2',
|
version: '1.1.3',
|
||||||
description: 'A cloud manager leveraging Docker Swarmkit for multi-cloud operations including DigitalOcean, Hetzner Cloud, and Cloudflare, with integration support and robust configuration management system.'
|
description: 'A cloud manager leveraging Docker Swarmkit for multi-cloud operations including DigitalOcean, Hetzner Cloud, and Cloudflare, with integration support and robust configuration management system.'
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user