Compare commits
38 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8e9a61bbb2 | |||
| dc809a6023 | |||
| 7eeca992b0 | |||
| d018102014 | |||
| 838f2d6959 | |||
| 0d42e5f6eb | |||
| f96de8cdc3 | |||
| 965833916f | |||
| 81ec1391e3 | |||
| bbbca44640 | |||
| 7ba7dc54a1 | |||
| 4f98eeec2a | |||
| 419a6b9e5f | |||
| 9c040c34f5 | |||
| 50d3f2d795 | |||
| 305856b9e1 | |||
| 3683743f3c | |||
| 41237e0e5f | |||
| bce84a0e74 | |||
| 79bed919d8 | |||
| 4b202ce00e | |||
| 16ca787314 | |||
| 3a9b6f658a | |||
| 5c5dbf303f | |||
| 4c07131e51 | |||
| ba039469ff | |||
| 49f2498ecd | |||
| 1060060366 | |||
| 0fa3a579f7 | |||
| 0e4556d59e | |||
| e2e7967fba | |||
| 45b8d67abf | |||
| 0a69aa5d62 | |||
| dfbab1a1df | |||
| e58f009a24 | |||
| 2afd9cddc5 | |||
| d79c5366ef | |||
| 8e4f7ad244 |
@@ -9,6 +9,7 @@ env:
|
|||||||
IMAGE: registry.gitlab.com/hosttoday/ht-docker-node:npmci
|
IMAGE: registry.gitlab.com/hosttoday/ht-docker-node:npmci
|
||||||
NPMCI_TOKEN_NPM: ${{secrets.NPMCI_TOKEN_NPM}}
|
NPMCI_TOKEN_NPM: ${{secrets.NPMCI_TOKEN_NPM}}
|
||||||
NPMCI_GIT_GITHUBTOKEN: ${{secrets.NPMCI_GIT_GITHUBTOKEN}}
|
NPMCI_GIT_GITHUBTOKEN: ${{secrets.NPMCI_GIT_GITHUBTOKEN}}
|
||||||
|
NPMCI_LOGIN_DOCKER_GITEA: ${{secrets.NPMCI_DOCKER_REGISTRYURL_DEFAULT}}|${{ gitea.repository_owner }}|${{ secrets.GITEA_TOKEN }}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
|
|||||||
@@ -12,10 +12,10 @@
|
|||||||
"projectType": "npm",
|
"projectType": "npm",
|
||||||
"module": {
|
"module": {
|
||||||
"githost": "gitlab.com",
|
"githost": "gitlab.com",
|
||||||
"gitscope": "shipzone",
|
"gitscope": "ship.zone",
|
||||||
"gitrepo": "npmci",
|
"gitrepo": "npmci",
|
||||||
"description": "node and docker in gitlab ci on steroids",
|
"description": "node and docker in gitlab ci on steroids",
|
||||||
"npmPackagename": "@shipzone/npmci",
|
"npmPackagename": "@ship.zone/npmci",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
54
package.json
54
package.json
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@shipzone/npmci",
|
"name": "@ship.zone/npmci",
|
||||||
"version": "4.1.10",
|
"version": "4.1.29",
|
||||||
"private": false,
|
"private": false,
|
||||||
"description": "node and docker in gitlab ci on steroids",
|
"description": "node and docker in gitlab ci on steroids",
|
||||||
"main": "dist_ts/index.js",
|
"main": "dist_ts/index.js",
|
||||||
@@ -27,33 +27,33 @@
|
|||||||
"homepage": "https://gitlab.com/gitzone/npmci#README",
|
"homepage": "https://gitlab.com/gitzone/npmci#README",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@gitzone/tsbuild": "^2.1.66",
|
"@gitzone/tsbuild": "^2.1.66",
|
||||||
"@gitzone/tsrun": "^1.2.42",
|
"@gitzone/tsrun": "^1.2.44",
|
||||||
"@gitzone/tstest": "^1.0.74",
|
"@gitzone/tstest": "^1.0.77",
|
||||||
"@pushrocks/tapbundle": "^5.0.8",
|
"@push.rocks/tapbundle": "^5.0.15",
|
||||||
"@types/node": "^20.3.1"
|
"@types/node": "^20.5.4"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@apiglobal/typedrequest": "^2.0.10",
|
"@api.global/typedrequest": "^3.0.1",
|
||||||
"@pushrocks/lik": "^6.0.2",
|
"@push.rocks/lik": "^6.0.5",
|
||||||
"@pushrocks/npmextra": "^3.0.9",
|
"@push.rocks/npmextra": "^4.0.0",
|
||||||
"@pushrocks/projectinfo": "^5.0.1",
|
"@push.rocks/projectinfo": "^5.0.2",
|
||||||
"@pushrocks/qenv": "^5.0.2",
|
"@push.rocks/qenv": "^6.0.2",
|
||||||
"@pushrocks/smartanalytics": "^2.0.15",
|
"@push.rocks/smartanalytics": "^2.0.15",
|
||||||
"@pushrocks/smartcli": "^4.0.6",
|
"@push.rocks/smartcli": "^4.0.8",
|
||||||
"@pushrocks/smartdelay": "^3.0.1",
|
"@push.rocks/smartdelay": "^3.0.5",
|
||||||
"@pushrocks/smartenv": "^5.0.5",
|
"@push.rocks/smartenv": "^5.0.5",
|
||||||
"@pushrocks/smartfile": "^10.0.25",
|
"@push.rocks/smartfile": "^10.0.30",
|
||||||
"@pushrocks/smartgit": "^3.0.0",
|
"@push.rocks/smartgit": "^3.0.1",
|
||||||
"@pushrocks/smartlog": "^3.0.2",
|
"@push.rocks/smartlog": "^3.0.3",
|
||||||
"@pushrocks/smartlog-destination-local": "^9.0.0",
|
"@push.rocks/smartlog-destination-local": "^9.0.0",
|
||||||
"@pushrocks/smartparam": "^1.1.6",
|
"@push.rocks/smartobject": "^1.0.12",
|
||||||
"@pushrocks/smartpath": "^5.0.5",
|
"@push.rocks/smartpath": "^5.0.11",
|
||||||
"@pushrocks/smartpromise": "^4.0.2",
|
"@push.rocks/smartpromise": "^4.0.2",
|
||||||
"@pushrocks/smartrequest": "^2.0.15",
|
"@push.rocks/smartrequest": "^2.0.18",
|
||||||
"@pushrocks/smartshell": "^3.0.3",
|
"@push.rocks/smartshell": "^3.0.3",
|
||||||
"@pushrocks/smartsocket": "^2.0.19",
|
"@push.rocks/smartsocket": "^2.0.22",
|
||||||
"@pushrocks/smartssh": "^2.0.0",
|
"@push.rocks/smartssh": "^2.0.1",
|
||||||
"@pushrocks/smartstring": "^4.0.5",
|
"@push.rocks/smartstring": "^4.0.8",
|
||||||
"@servezone/interfaces": "^1.0.3",
|
"@servezone/interfaces": "^1.0.3",
|
||||||
"@tsclass/tsclass": "^4.0.42",
|
"@tsclass/tsclass": "^4.0.42",
|
||||||
"@types/through2": "^2.0.38",
|
"@types/through2": "^2.0.38",
|
||||||
|
|||||||
2325
pnpm-lock.yaml
generated
2325
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
2
test/assets/Dockerfile_hello_##version##
Normal file
2
test/assets/Dockerfile_hello_##version##
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
FROM mygroup/myrepo:sometag2
|
||||||
|
RUN apt-get update
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
|
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
|
||||||
import { tap, expect } from '@pushrocks/tapbundle';
|
import { tap, expect } from '@push.rocks/tapbundle';
|
||||||
|
|
||||||
import * as cloudlyConnectorMod from '../ts/connector.cloudly/cloudlyconnector.js';
|
import * as cloudlyConnectorMod from '../ts/connector.cloudly/cloudlyconnector.js';
|
||||||
|
|
||||||
|
|||||||
30
test/test.ts
30
test/test.ts
@@ -1,6 +1,6 @@
|
|||||||
import { tap, expect } from '@pushrocks/tapbundle';
|
import { tap, expect } from '@push.rocks/tapbundle';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import * as smartpath from '@pushrocks/smartpath';
|
import * as smartpath from '@push.rocks/smartpath';
|
||||||
|
|
||||||
process.env.NPMTS_TEST = 'true';
|
process.env.NPMTS_TEST = 'true';
|
||||||
process.env.NPMCI_URL_CLOUDLY = 'localhost';
|
process.env.NPMCI_URL_CLOUDLY = 'localhost';
|
||||||
@@ -19,24 +19,20 @@ process.cwd = () => {
|
|||||||
return path.join(smartpath.get.dirnameFromImportMetaUrl(import.meta.url), 'assets/');
|
return path.join(smartpath.get.dirnameFromImportMetaUrl(import.meta.url), 'assets/');
|
||||||
};
|
};
|
||||||
|
|
||||||
let npmci: typeof import('../ts/index.js');
|
import type * as npmciTypes from '../ts/index.js';
|
||||||
|
const npmci = await import('../ts/index.js');
|
||||||
type TNpmciTypes = typeof import('../ts/index.js');
|
|
||||||
|
|
||||||
tap.preTask('should import npmci', async () => {
|
|
||||||
npmci = await import('../ts/index.js');
|
|
||||||
});
|
|
||||||
|
|
||||||
// ======
|
// ======
|
||||||
// Docker
|
// Docker
|
||||||
// ======
|
// ======
|
||||||
|
|
||||||
let dockerfile1: npmci.Dockerfile;
|
let dockerfile1: npmciTypes.Dockerfile;
|
||||||
let dockerfile2: npmci.Dockerfile;
|
let dockerfile2: npmciTypes.Dockerfile;
|
||||||
let sortableArray: npmci.Dockerfile[];
|
let sortableArray: npmciTypes.Dockerfile[];
|
||||||
|
|
||||||
tap.test('should return valid Dockerfiles', async () => {
|
tap.test('should return valid Dockerfiles', async () => {
|
||||||
const npmciInstance = new npmci.Npmci();
|
const npmciInstance = new npmci.Npmci();
|
||||||
|
await npmciInstance.start();
|
||||||
dockerfile1 = new npmci.Dockerfile(npmciInstance.dockerManager, {
|
dockerfile1 = new npmci.Dockerfile(npmciInstance.dockerManager, {
|
||||||
filePath: './Dockerfile',
|
filePath: './Dockerfile',
|
||||||
read: true,
|
read: true,
|
||||||
@@ -51,8 +47,9 @@ tap.test('should return valid Dockerfiles', async () => {
|
|||||||
|
|
||||||
tap.test('should read a directory of Dockerfiles', async () => {
|
tap.test('should read a directory of Dockerfiles', async () => {
|
||||||
const npmciInstance = new npmci.Npmci();
|
const npmciInstance = new npmci.Npmci();
|
||||||
|
await npmciInstance.start();
|
||||||
return npmci.Dockerfile.readDockerfiles(npmciInstance.dockerManager).then(
|
return npmci.Dockerfile.readDockerfiles(npmciInstance.dockerManager).then(
|
||||||
async (readDockerfilesArrayArg: npmci.Dockerfile[]) => {
|
async (readDockerfilesArrayArg: npmciTypes.Dockerfile[]) => {
|
||||||
sortableArray = readDockerfilesArrayArg;
|
sortableArray = readDockerfilesArrayArg;
|
||||||
return expect(readDockerfilesArrayArg[1].version).toEqual('sometag1');
|
return expect(readDockerfilesArrayArg[1].version).toEqual('sometag1');
|
||||||
}
|
}
|
||||||
@@ -61,7 +58,7 @@ tap.test('should read a directory of Dockerfiles', async () => {
|
|||||||
|
|
||||||
tap.test('should sort an array of Dockerfiles', async () => {
|
tap.test('should sort an array of Dockerfiles', async () => {
|
||||||
return npmci.Dockerfile.sortDockerfiles(sortableArray).then(
|
return npmci.Dockerfile.sortDockerfiles(sortableArray).then(
|
||||||
async (sortedArrayArg: npmci.Dockerfile[]) => {
|
async (sortedArrayArg: npmciTypes.Dockerfile[]) => {
|
||||||
console.log(sortedArrayArg);
|
console.log(sortedArrayArg);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -69,6 +66,7 @@ tap.test('should sort an array of Dockerfiles', async () => {
|
|||||||
|
|
||||||
tap.test('should build all Dockerfiles', async () => {
|
tap.test('should build all Dockerfiles', async () => {
|
||||||
const npmciInstance = new npmci.Npmci();
|
const npmciInstance = new npmci.Npmci();
|
||||||
|
await npmciInstance.start();
|
||||||
return npmciInstance.dockerManager.handleCli({
|
return npmciInstance.dockerManager.handleCli({
|
||||||
_: ['docker', 'build'],
|
_: ['docker', 'build'],
|
||||||
});
|
});
|
||||||
@@ -76,6 +74,7 @@ tap.test('should build all Dockerfiles', async () => {
|
|||||||
|
|
||||||
tap.test('should test all Dockerfiles', async () => {
|
tap.test('should test all Dockerfiles', async () => {
|
||||||
const npmciInstance = new npmci.Npmci();
|
const npmciInstance = new npmci.Npmci();
|
||||||
|
await npmciInstance.start();
|
||||||
return npmciInstance.dockerManager.handleCli({
|
return npmciInstance.dockerManager.handleCli({
|
||||||
_: ['docker', 'test'],
|
_: ['docker', 'test'],
|
||||||
});
|
});
|
||||||
@@ -83,6 +82,7 @@ tap.test('should test all Dockerfiles', async () => {
|
|||||||
|
|
||||||
tap.test('should test dockerfiles', async () => {
|
tap.test('should test dockerfiles', async () => {
|
||||||
const npmciInstance = new npmci.Npmci();
|
const npmciInstance = new npmci.Npmci();
|
||||||
|
await npmciInstance.start();
|
||||||
return npmciInstance.dockerManager.handleCli({
|
return npmciInstance.dockerManager.handleCli({
|
||||||
_: ['docker', 'test'],
|
_: ['docker', 'test'],
|
||||||
});
|
});
|
||||||
@@ -90,6 +90,7 @@ tap.test('should test dockerfiles', async () => {
|
|||||||
|
|
||||||
tap.test('should login docker daemon', async () => {
|
tap.test('should login docker daemon', async () => {
|
||||||
const npmciInstance = new npmci.Npmci();
|
const npmciInstance = new npmci.Npmci();
|
||||||
|
await npmciInstance.start();
|
||||||
return npmciInstance.dockerManager.handleCli({
|
return npmciInstance.dockerManager.handleCli({
|
||||||
_: ['docker', 'login'],
|
_: ['docker', 'login'],
|
||||||
});
|
});
|
||||||
@@ -110,6 +111,7 @@ tap.test('should prepare SSH keys', async () => {
|
|||||||
// ====
|
// ====
|
||||||
tap.test('should install a certain version of node', async () => {
|
tap.test('should install a certain version of node', async () => {
|
||||||
const npmciInstance = new npmci.Npmci();
|
const npmciInstance = new npmci.Npmci();
|
||||||
|
await npmciInstance.start();
|
||||||
await npmciInstance.nodejsManager.handleCli({
|
await npmciInstance.nodejsManager.handleCli({
|
||||||
_: ['node', 'install', 'stable'],
|
_: ['node', 'install', 'stable'],
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* autocreated commitinfo by @pushrocks/commitinfo
|
* autocreated commitinfo by @pushrocks/commitinfo
|
||||||
*/
|
*/
|
||||||
export const commitinfo = {
|
export const commitinfo = {
|
||||||
name: '@shipzone/npmci',
|
name: '@ship.zone/npmci',
|
||||||
version: '4.1.10',
|
version: '4.1.29',
|
||||||
description: 'node and docker in gitlab ci on steroids'
|
description: 'node and docker in gitlab ci on steroids'
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,5 +6,5 @@ export const npmciInstance = new Npmci();
|
|||||||
export { Dockerfile, Npmci };
|
export { Dockerfile, Npmci };
|
||||||
|
|
||||||
export const runCli = async () => {
|
export const runCli = async () => {
|
||||||
npmciInstance.start();
|
await npmciInstance.start();
|
||||||
};
|
};
|
||||||
|
|||||||
67
ts/manager.cloudron/index.ts
Normal file
67
ts/manager.cloudron/index.ts
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
import { logger } from '../npmci.logging.js';
|
||||||
|
import * as plugins from './mod.plugins.js';
|
||||||
|
import * as paths from '../npmci.paths.js';
|
||||||
|
import { bash } from '../npmci.bash.js';
|
||||||
|
import { Npmci } from '../npmci.classes.npmci.js';
|
||||||
|
|
||||||
|
export class NpmciCloudronManager {
|
||||||
|
public npmciRef: Npmci;
|
||||||
|
|
||||||
|
constructor(npmciArg: Npmci) {
|
||||||
|
this.npmciRef = npmciArg;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* handle cli input
|
||||||
|
* @param argvArg
|
||||||
|
*/
|
||||||
|
public handleCli = async (argvArg: any) => {
|
||||||
|
if (argvArg._.length >= 2) {
|
||||||
|
const action: string = argvArg._[1];
|
||||||
|
switch (action) {
|
||||||
|
case 'deploy':
|
||||||
|
await this.deploy();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
logger.log('error', `>>npmci cloudron ...<< action >>${action}<< not supported`);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logger.log(
|
||||||
|
'info',
|
||||||
|
`>>npmci cloudron ...<< cli arguments invalid... Please read the documentation.`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Replaces the version string in CloudronManifest file
|
||||||
|
* @param versionArg
|
||||||
|
*/
|
||||||
|
public deploy = async () => {
|
||||||
|
logger.log('info', 'now deploying to cloudron...');
|
||||||
|
logger.log('info', 'installing cloudron cli...');
|
||||||
|
await bash(`pnpm install -g cloudron`);
|
||||||
|
logger.log('ok', 'cloudron cli installed');
|
||||||
|
|
||||||
|
// lets set the version in the CloudronManifest file
|
||||||
|
await this.prepareCloudronManifest(this.npmciRef.npmciConfig.getConfig().projectInfo.npm.version);
|
||||||
|
logger.log('ok', 'CloudronManifest prepared');
|
||||||
|
|
||||||
|
// lets figure out the docker image tag
|
||||||
|
const dockerImageTag = await this.npmciRef.npmciConfig.kvStorage.readKey('latestPushedDockerTag');
|
||||||
|
const appName = this.npmciRef.npmciConfig.getConfig().cloudronAppName;
|
||||||
|
|
||||||
|
const cloudronEnvVar = process.env.NPMCI_LOGIN_CLOUDRON;
|
||||||
|
const cloudronServer = cloudronEnvVar.split('|')[0];
|
||||||
|
const cloudronToken = cloudronEnvVar.split('|')[1];
|
||||||
|
await bash(`cloudron update --server ${cloudronServer} --token ${cloudronToken} --image ${dockerImageTag} --app ${appName}`);
|
||||||
|
};
|
||||||
|
|
||||||
|
private prepareCloudronManifest = async (versionArg: string) => {
|
||||||
|
const manifestPath = plugins.path.join(paths.cwd, 'CloudronManifest.json');
|
||||||
|
let manifestFile = plugins.smartfile.fs.toStringSync(manifestPath);
|
||||||
|
manifestFile = manifestFile.replace(/##version##/g, versionArg);
|
||||||
|
plugins.smartfile.memory.toFsSync(manifestFile, manifestPath);
|
||||||
|
logger.log('info', 'Version replaced in CloudronManifest file');
|
||||||
|
}
|
||||||
|
}
|
||||||
1
ts/manager.cloudron/mod.plugins.ts
Normal file
1
ts/manager.cloudron/mod.plugins.ts
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export * from '../npmci.plugins.js';
|
||||||
@@ -93,7 +93,7 @@ export class NpmciDockerManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// handle registries
|
// handle registries
|
||||||
await plugins.smartparam.forEachMinimatch(
|
await plugins.smartobject.forEachMinimatch(
|
||||||
process.env,
|
process.env,
|
||||||
'NPMCI_LOGIN_DOCKER*',
|
'NPMCI_LOGIN_DOCKER*',
|
||||||
async (envString: string) => {
|
async (envString: string) => {
|
||||||
@@ -179,4 +179,12 @@ export class NpmciDockerManager {
|
|||||||
await this.prepare();
|
await this.prepare();
|
||||||
return await Dockerfile.readDockerfiles(this).then(Dockerfile.testDockerfiles);
|
return await Dockerfile.readDockerfiles(this).then(Dockerfile.testDockerfiles);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* can be used to get the Dockerfiles in the directory
|
||||||
|
*/
|
||||||
|
getDockerfiles = async () => {
|
||||||
|
const dockerfiles = await Dockerfile.readDockerfiles(this);
|
||||||
|
return dockerfiles;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -117,20 +117,24 @@ export class Dockerfile {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* returns a version for a docker file
|
* returns a version for a docker file
|
||||||
* @execution SYNC
|
* @execution SYNC
|
||||||
*/
|
*/
|
||||||
public static dockerFileVersion(dockerfileNameArg: string): string {
|
public static dockerFileVersion(dockerfileInstanceArg: Dockerfile, dockerfileNameArg: string): string {
|
||||||
let versionString: string;
|
let versionString: string;
|
||||||
const versionRegex = /Dockerfile_([a-zA-Z0-9\.]*)$/;
|
const versionRegex = /Dockerfile_(.+)$/;
|
||||||
const regexResultArray = versionRegex.exec(dockerfileNameArg);
|
const regexResultArray = versionRegex.exec(dockerfileNameArg);
|
||||||
if (regexResultArray && regexResultArray.length === 2) {
|
if (regexResultArray && regexResultArray.length === 2) {
|
||||||
versionString = regexResultArray[1];
|
versionString = regexResultArray[1];
|
||||||
} else {
|
} else {
|
||||||
versionString = 'latest';
|
versionString = 'latest';
|
||||||
}
|
|
||||||
return versionString;
|
|
||||||
}
|
}
|
||||||
|
versionString = versionString.replace(
|
||||||
|
'##version##',
|
||||||
|
dockerfileInstanceArg.npmciDockerManagerRef.npmciRef.npmciConfig.getConfig().projectInfo.npm.version
|
||||||
|
);
|
||||||
|
return versionString;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* returns the docker base image for a Dockerfile
|
* returns the docker base image for a Dockerfile
|
||||||
@@ -233,7 +237,7 @@ export class Dockerfile {
|
|||||||
this.npmciDockerManagerRef.npmciRef.npmciEnv.repo.user +
|
this.npmciDockerManagerRef.npmciRef.npmciEnv.repo.user +
|
||||||
'/' +
|
'/' +
|
||||||
this.npmciDockerManagerRef.npmciRef.npmciEnv.repo.repo;
|
this.npmciDockerManagerRef.npmciRef.npmciEnv.repo.repo;
|
||||||
this.version = Dockerfile.dockerFileVersion(plugins.path.parse(options.filePath).base);
|
this.version = Dockerfile.dockerFileVersion(this, plugins.path.parse(options.filePath).base);
|
||||||
this.cleanTag = this.repo + ':' + this.version;
|
this.cleanTag = this.repo + ':' + this.version;
|
||||||
this.buildTag = this.cleanTag;
|
this.buildTag = this.cleanTag;
|
||||||
|
|
||||||
@@ -281,6 +285,7 @@ export class Dockerfile {
|
|||||||
labels: [],
|
labels: [],
|
||||||
version: this.npmciDockerManagerRef.npmciRef.npmciConfig.getConfig().projectInfo.npm.version,
|
version: this.npmciDockerManagerRef.npmciRef.npmciConfig.getConfig().projectInfo.npm.version,
|
||||||
});
|
});
|
||||||
|
await this.npmciDockerManagerRef.npmciRef.npmciConfig.kvStorage.writeKey('latestPushedDockerTag', this.pushTag)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ export class DockerRegistry {
|
|||||||
process.exit(1);
|
process.exit(1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const registryUrl = dockerRegexResultArray[0];
|
const registryUrl = dockerRegexResultArray[0].replace('https://', '').replace('http://', '');
|
||||||
const username = dockerRegexResultArray[1];
|
const username = dockerRegexResultArray[1];
|
||||||
const password = dockerRegexResultArray[2];
|
const password = dockerRegexResultArray[2];
|
||||||
return new DockerRegistry({
|
return new DockerRegistry({
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
import { logger } from '../npmci.logging.js';
|
import { logger } from '../npmci.logging.js';
|
||||||
import * as plugins from './mod.plugins.js';
|
import * as plugins from './mod.plugins.js';
|
||||||
import { ObjectMap } from '@pushrocks/lik';
|
|
||||||
|
|
||||||
import { DockerRegistry } from './mod.classes.dockerregistry.js';
|
import { DockerRegistry } from './mod.classes.dockerregistry.js';
|
||||||
|
|
||||||
export class RegistryStorage {
|
export class RegistryStorage {
|
||||||
objectMap = new ObjectMap<DockerRegistry>();
|
objectMap = new plugins.lik.ObjectMap<DockerRegistry>();
|
||||||
constructor() {
|
constructor() {
|
||||||
// Nothing here
|
// Nothing here
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ export class NpmciNpmManager {
|
|||||||
public async prepare() {
|
public async prepare() {
|
||||||
const config = this.npmciRef.npmciConfig.getConfig();
|
const config = this.npmciRef.npmciConfig.getConfig();
|
||||||
let npmrcFileString: string = '';
|
let npmrcFileString: string = '';
|
||||||
await plugins.smartparam.forEachMinimatch(
|
await plugins.smartobject.forEachMinimatch(
|
||||||
process.env,
|
process.env,
|
||||||
'NPMCI_TOKEN_NPM*',
|
'NPMCI_TOKEN_NPM*',
|
||||||
(npmEnvArg: string) => {
|
(npmEnvArg: string) => {
|
||||||
@@ -100,7 +100,7 @@ export class NpmciNpmManager {
|
|||||||
let publishVerdaccioAsWell = false;
|
let publishVerdaccioAsWell = false;
|
||||||
const config = this.npmciRef.npmciConfig.getConfig();
|
const config = this.npmciRef.npmciConfig.getConfig();
|
||||||
const availableRegistries: string[] = [];
|
const availableRegistries: string[] = [];
|
||||||
await plugins.smartparam.forEachMinimatch(
|
await plugins.smartobject.forEachMinimatch(
|
||||||
process.env,
|
process.env,
|
||||||
'NPMCI_TOKEN_NPM*',
|
'NPMCI_TOKEN_NPM*',
|
||||||
(npmEnvArg: string) => {
|
(npmEnvArg: string) => {
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ const notUndefined = (stringArg: string) => {
|
|||||||
*/
|
*/
|
||||||
export let prepare = async () => {
|
export let prepare = async () => {
|
||||||
sshInstance = new plugins.smartssh.SshInstance(); // init ssh instance
|
sshInstance = new plugins.smartssh.SshInstance(); // init ssh instance
|
||||||
plugins.smartparam.forEachMinimatch(process.env, 'NPMCI_SSHKEY_*', evaluateSshEnv);
|
plugins.smartobject.forEachMinimatch(process.env, 'NPMCI_SSHKEY_*', evaluateSshEnv);
|
||||||
if (!process.env.NPMTS_TEST) {
|
if (!process.env.NPMTS_TEST) {
|
||||||
sshInstance.writeToDisk();
|
sshInstance.writeToDisk();
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ const triggerValueRegex =
|
|||||||
|
|
||||||
export let trigger = async () => {
|
export let trigger = async () => {
|
||||||
logger.log('info', 'now running triggers');
|
logger.log('info', 'now running triggers');
|
||||||
await plugins.smartparam.forEachMinimatch(process.env, 'NPMCI_TRIGGER_*', evaluateTrigger);
|
await plugins.smartobject.forEachMinimatch(process.env, 'NPMCI_TRIGGER_*', evaluateTrigger);
|
||||||
};
|
};
|
||||||
|
|
||||||
const evaluateTrigger = async (triggerEnvVarArg) => {
|
const evaluateTrigger = async (triggerEnvVarArg) => {
|
||||||
|
|||||||
@@ -2,12 +2,10 @@ import { logger } from './npmci.logging.js';
|
|||||||
import * as plugins from './npmci.plugins.js';
|
import * as plugins from './npmci.plugins.js';
|
||||||
import * as paths from './npmci.paths.js';
|
import * as paths from './npmci.paths.js';
|
||||||
|
|
||||||
import * as smartpromise from '@pushrocks/smartpromise';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* wether nvm is available or not
|
* wether nvm is available or not
|
||||||
*/
|
*/
|
||||||
export let nvmAvailable = smartpromise.defer<boolean>();
|
export let nvmAvailable = plugins.smartpromise.defer<boolean>();
|
||||||
/**
|
/**
|
||||||
* the smartshell instance for npmci
|
* the smartshell instance for npmci
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,17 +1,21 @@
|
|||||||
import * as plugins from './npmci.plugins.js';
|
import * as plugins from './npmci.plugins.js';
|
||||||
|
|
||||||
import { CloudlyConnector } from './connector.cloudly/cloudlyconnector.js';
|
|
||||||
|
|
||||||
|
// env
|
||||||
|
import { NpmciEnv } from './npmci.classes.npmcienv.js';
|
||||||
import { NpmciInfo } from './npmci.classes.npmciinfo.js';
|
import { NpmciInfo } from './npmci.classes.npmciinfo.js';
|
||||||
import { NpmciCli } from './npmci.classes.npmcicli.js';
|
import { NpmciCli } from './npmci.classes.npmcicli.js';
|
||||||
import { NpmciConfig } from './npmci.classes.npmciconfig.js';
|
import { NpmciConfig } from './npmci.classes.npmciconfig.js';
|
||||||
|
|
||||||
// mods
|
// connectors
|
||||||
|
import { CloudlyConnector } from './connector.cloudly/cloudlyconnector.js';
|
||||||
|
|
||||||
|
// managers
|
||||||
|
import { NpmciCloudronManager } from './manager.cloudron/index.js';
|
||||||
import { NpmciDockerManager } from './manager.docker/index.js';
|
import { NpmciDockerManager } from './manager.docker/index.js';
|
||||||
import { NpmciGitManager } from './manager.git/index.js';
|
import { NpmciGitManager } from './manager.git/index.js';
|
||||||
import { NpmciNodeJsManager } from './manager.nodejs/index.js';
|
import { NpmciNodeJsManager } from './manager.nodejs/index.js';
|
||||||
import { NpmciNpmManager } from './manager.npm/index.js';
|
import { NpmciNpmManager } from './manager.npm/index.js';
|
||||||
import { NpmciEnv } from './npmci.classes.npmcienv.js';
|
|
||||||
|
|
||||||
export class Npmci {
|
export class Npmci {
|
||||||
public analytics: plugins.smartanalytics.Analytics;
|
public analytics: plugins.smartanalytics.Analytics;
|
||||||
@@ -23,6 +27,7 @@ export class Npmci {
|
|||||||
public npmciCli: NpmciCli;
|
public npmciCli: NpmciCli;
|
||||||
|
|
||||||
// managers
|
// managers
|
||||||
|
public cloudronManager: NpmciCloudronManager;
|
||||||
public dockerManager: NpmciDockerManager;
|
public dockerManager: NpmciDockerManager;
|
||||||
public gitManager: NpmciGitManager;
|
public gitManager: NpmciGitManager;
|
||||||
public nodejsManager: NpmciNodeJsManager;
|
public nodejsManager: NpmciNodeJsManager;
|
||||||
@@ -34,22 +39,23 @@ export class Npmci {
|
|||||||
projectId: 'gitzone',
|
projectId: 'gitzone',
|
||||||
appName: 'npmci',
|
appName: 'npmci',
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public async start() {
|
||||||
this.cloudlyConnector = new CloudlyConnector(this);
|
this.cloudlyConnector = new CloudlyConnector(this);
|
||||||
this.npmciEnv = new NpmciEnv(this);
|
this.npmciEnv = new NpmciEnv(this);
|
||||||
this.npmciInfo = new NpmciInfo(this);
|
this.npmciInfo = new NpmciInfo(this);
|
||||||
|
await this.npmciInfo.printToConsole();
|
||||||
this.npmciCli = new NpmciCli(this);
|
this.npmciCli = new NpmciCli(this);
|
||||||
this.npmciConfig = new NpmciConfig(this);
|
this.npmciConfig = new NpmciConfig(this);
|
||||||
|
await this.npmciConfig.init();
|
||||||
|
|
||||||
// managers
|
// managers
|
||||||
|
this.cloudronManager = new NpmciCloudronManager(this);
|
||||||
this.dockerManager = new NpmciDockerManager(this);
|
this.dockerManager = new NpmciDockerManager(this);
|
||||||
this.gitManager = new NpmciGitManager(this);
|
this.gitManager = new NpmciGitManager(this);
|
||||||
this.nodejsManager = new NpmciNodeJsManager(this);
|
this.nodejsManager = new NpmciNodeJsManager(this);
|
||||||
this.npmManager = new NpmciNpmManager(this);
|
this.npmManager = new NpmciNpmManager(this);
|
||||||
}
|
|
||||||
|
|
||||||
public async start() {
|
|
||||||
await this.npmciInfo.printToConsole();
|
|
||||||
await this.npmciConfig.init();
|
|
||||||
this.npmciCli.startParse();
|
this.npmciCli.startParse();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,17 @@ export class NpmciCli {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// cloudron
|
||||||
|
this.smartcli.addCommand('cloudron').subscribe(
|
||||||
|
async (argv) => {
|
||||||
|
await this.npmciRef.cloudronManager.handleCli(argv);
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
console.log(err);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
// command
|
// command
|
||||||
this.smartcli.addCommand('command').subscribe(
|
this.smartcli.addCommand('command').subscribe(
|
||||||
async (argv) => {
|
async (argv) => {
|
||||||
@@ -36,7 +47,7 @@ export class NpmciCli {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
// command
|
// git
|
||||||
this.smartcli.addCommand('git').subscribe(
|
this.smartcli.addCommand('git').subscribe(
|
||||||
async (argvArg) => {
|
async (argvArg) => {
|
||||||
await this.npmciRef.gitManager.handleCli(argvArg);
|
await this.npmciRef.gitManager.handleCli(argvArg);
|
||||||
|
|||||||
@@ -25,6 +25,9 @@ export interface INpmciOptions {
|
|||||||
|
|
||||||
// urls
|
// urls
|
||||||
urlCloudly: string;
|
urlCloudly: string;
|
||||||
|
|
||||||
|
// cloudron
|
||||||
|
cloudronAppName?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -41,10 +44,12 @@ export class NpmciConfig {
|
|||||||
|
|
||||||
constructor(npmciRefArg: Npmci) {
|
constructor(npmciRefArg: Npmci) {
|
||||||
this.npmciRef = npmciRefArg;
|
this.npmciRef = npmciRefArg;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async init() {
|
||||||
this.npmciNpmextra = new plugins.npmextra.Npmextra(paths.cwd);
|
this.npmciNpmextra = new plugins.npmextra.Npmextra(paths.cwd);
|
||||||
this.kvStorage = new plugins.npmextra.KeyValueStore(
|
this.kvStorage = new plugins.npmextra.KeyValueStore(
|
||||||
'custom',
|
'userHomeDir',
|
||||||
`${this.npmciRef.npmciEnv.repo.user}_${this.npmciRef.npmciEnv.repo.repo}`
|
`${this.npmciRef.npmciEnv.repo.user}_${this.npmciRef.npmciEnv.repo.repo}`
|
||||||
);
|
);
|
||||||
this.npmciQenv = new plugins.qenv.Qenv(
|
this.npmciQenv = new plugins.qenv.Qenv(
|
||||||
@@ -62,11 +67,8 @@ export class NpmciConfig {
|
|||||||
npmRegistryUrl: 'registry.npmjs.org',
|
npmRegistryUrl: 'registry.npmjs.org',
|
||||||
gitlabRunnerTags: [],
|
gitlabRunnerTags: [],
|
||||||
dockerBuildargEnvMap: {},
|
dockerBuildargEnvMap: {},
|
||||||
urlCloudly: this.npmciQenv.getEnvVarOnDemand('NPMCI_URL_CLOUDLY'),
|
urlCloudly: await this.npmciQenv.getEnvVarOnDemand('NPMCI_URL_CLOUDLY'),
|
||||||
};
|
};
|
||||||
}
|
|
||||||
|
|
||||||
public async init() {
|
|
||||||
this.configObject = this.npmciNpmextra.dataFor<INpmciOptions>('npmci', this.configObject);
|
this.configObject = this.npmciNpmextra.dataFor<INpmciOptions>('npmci', this.configObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,12 @@ export class NpmciEnv {
|
|||||||
|
|
||||||
constructor(npmciRefArg: Npmci) {
|
constructor(npmciRefArg: Npmci) {
|
||||||
this.npmciRef = npmciRefArg;
|
this.npmciRef = npmciRefArg;
|
||||||
this.repoString = process.env.CI_REPOSITORY_URL;
|
if (process.env.GITLAB_CI) {
|
||||||
|
this.repoString = process.env.CI_REPOSITORY_URL;
|
||||||
|
}
|
||||||
|
if (process.env.NPMCI_COMPUTED_REPOURL) {
|
||||||
|
this.repoString = process.env.NPMCI_COMPUTED_REPOURL;
|
||||||
|
}
|
||||||
if (!this.repoString) {
|
if (!this.repoString) {
|
||||||
this.repoString = 'https://undefined:undefined@github.com/undefined/undefined.git';
|
this.repoString = 'https://undefined:undefined@github.com/undefined/undefined.git';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ export class NpmciInfo {
|
|||||||
this.npmciRef = npmciArg;
|
this.npmciRef = npmciArg;
|
||||||
}
|
}
|
||||||
|
|
||||||
public printToConsole() {
|
public async printToConsole() {
|
||||||
logger.log('info', `npmci version: ${this.projectInfo.version}`);
|
await logger.log('info', `npmci version: ${this.projectInfo.version}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import * as path from 'path';
|
|||||||
export { path };
|
export { path };
|
||||||
|
|
||||||
// @apiglobal
|
// @apiglobal
|
||||||
import * as typedrequest from '@apiglobal/typedrequest';
|
import * as typedrequest from '@api.global/typedrequest';
|
||||||
|
|
||||||
export { typedrequest };
|
export { typedrequest };
|
||||||
|
|
||||||
@@ -13,27 +13,29 @@ import * as servezoneInterfaces from '@servezone/interfaces';
|
|||||||
|
|
||||||
export { servezoneInterfaces };
|
export { servezoneInterfaces };
|
||||||
|
|
||||||
// @pushrocks
|
// @push.rocks
|
||||||
import * as npmextra from '@pushrocks/npmextra';
|
import * as lik from '@push.rocks/lik';
|
||||||
import * as projectinfo from '@pushrocks/projectinfo';
|
import * as npmextra from '@push.rocks/npmextra';
|
||||||
import * as qenv from '@pushrocks/qenv';
|
import * as projectinfo from '@push.rocks/projectinfo';
|
||||||
import * as smartanalytics from '@pushrocks/smartanalytics';
|
import * as qenv from '@push.rocks/qenv';
|
||||||
import * as smartdelay from '@pushrocks/smartdelay';
|
import * as smartanalytics from '@push.rocks/smartanalytics';
|
||||||
import * as smartfile from '@pushrocks/smartfile';
|
import * as smartdelay from '@push.rocks/smartdelay';
|
||||||
import * as smartcli from '@pushrocks/smartcli';
|
import * as smartfile from '@push.rocks/smartfile';
|
||||||
import * as smartgit from '@pushrocks/smartgit';
|
import * as smartcli from '@push.rocks/smartcli';
|
||||||
import * as smartlog from '@pushrocks/smartlog';
|
import * as smartgit from '@push.rocks/smartgit';
|
||||||
import * as smartlogDestinationLocal from '@pushrocks/smartlog-destination-local';
|
import * as smartlog from '@push.rocks/smartlog';
|
||||||
import * as smartparam from '@pushrocks/smartparam';
|
import * as smartlogDestinationLocal from '@push.rocks/smartlog-destination-local';
|
||||||
import * as smartpath from '@pushrocks/smartpath';
|
import * as smartobject from '@push.rocks/smartobject';
|
||||||
import * as smartpromise from '@pushrocks/smartpromise';
|
import * as smartpath from '@push.rocks/smartpath';
|
||||||
import * as smartrequest from '@pushrocks/smartrequest';
|
import * as smartpromise from '@push.rocks/smartpromise';
|
||||||
import * as smartshell from '@pushrocks/smartshell';
|
import * as smartrequest from '@push.rocks/smartrequest';
|
||||||
import * as smartsocket from '@pushrocks/smartsocket';
|
import * as smartshell from '@push.rocks/smartshell';
|
||||||
import * as smartssh from '@pushrocks/smartssh';
|
import * as smartsocket from '@push.rocks/smartsocket';
|
||||||
import * as smartstring from '@pushrocks/smartstring';
|
import * as smartssh from '@push.rocks/smartssh';
|
||||||
|
import * as smartstring from '@push.rocks/smartstring';
|
||||||
|
|
||||||
export {
|
export {
|
||||||
|
lik,
|
||||||
npmextra,
|
npmextra,
|
||||||
projectinfo,
|
projectinfo,
|
||||||
qenv,
|
qenv,
|
||||||
@@ -44,7 +46,7 @@ export {
|
|||||||
smartcli,
|
smartcli,
|
||||||
smartlog,
|
smartlog,
|
||||||
smartlogDestinationLocal,
|
smartlogDestinationLocal,
|
||||||
smartparam,
|
smartobject,
|
||||||
smartpath,
|
smartpath,
|
||||||
smartpromise,
|
smartpromise,
|
||||||
smartrequest,
|
smartrequest,
|
||||||
|
|||||||
Reference in New Issue
Block a user