Compare commits
44 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5a3befe5af | |||
| 385a93a05e | |||
| b4d444ff05 | |||
| 487bcb9a70 | |||
| aaf11b66d7 | |||
| 83d7d46896 | |||
| 693bda6a49 | |||
| bfe3e266ee | |||
| 5f33ebd8a7 | |||
| f78c80e100 | |||
| f4d8656831 | |||
| 2290081ef0 | |||
| 189d02a16f | |||
| 55aee04334 | |||
| 0e407b9b9d | |||
| 24095bbd40 | |||
| f97ee94b5a | |||
| 4cf7aea374 | |||
| 6ab5e9cb30 | |||
| 95c1145bf5 | |||
| ea04a1b788 | |||
| 3bc2499d09 | |||
| 1f5967ac45 | |||
| fd952f086b | |||
| 79500cb2c2 | |||
| 6c58864fcf | |||
| 7ea3ac182d | |||
| 8979d26005 | |||
| c8876dac88 | |||
| 9c8a257c2a | |||
| 8b77930ece | |||
| ba672d030f | |||
| 8ad7e016e7 | |||
| d843311d7b | |||
| 14ef2cfa9b | |||
| 648effcf86 | |||
| 572738e88f | |||
| 129ae93044 | |||
| e910892231 | |||
| 6d9cabf7ee | |||
| 7c7787e811 | |||
| bde26cc312 | |||
| 29e81f3ae7 | |||
| 6337b20d62 |
@@ -1,7 +1,5 @@
|
||||
# gitzone ci_default
|
||||
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
|
||||
variables:
|
||||
GIT_STRATEGY: clone
|
||||
|
||||
cache:
|
||||
paths:
|
||||
@@ -102,7 +100,7 @@ trigger:
|
||||
pages:
|
||||
image: hosttoday/ht-docker-dbase:npmci
|
||||
services:
|
||||
- docker:18-dind
|
||||
- docker:stable-dind
|
||||
stage: metadata
|
||||
script:
|
||||
- npmci command npm install -g @gitzone/tsdoc
|
||||
|
||||
2122
package-lock.json
generated
2122
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
29
package.json
29
package.json
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@shipzone/npmci",
|
||||
"version": "3.1.42",
|
||||
"version": "3.1.65",
|
||||
"private": false,
|
||||
"description": "node and docker in gitlab ci on steroids",
|
||||
"main": "dist/index.js",
|
||||
@@ -9,8 +9,8 @@
|
||||
"npmci": "cli.js"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "(rm -f config.json) && tstest test/",
|
||||
"build": "(rm -f config.json) && tsbuild && (npm run testVersion)",
|
||||
"test": "tstest test/",
|
||||
"build": "tsbuild && (npm run testVersion)",
|
||||
"testVersion": "(cd test/assets/ && node ../../cli.js -v)"
|
||||
},
|
||||
"repository": {
|
||||
@@ -26,32 +26,33 @@
|
||||
"devDependencies": {
|
||||
"@gitzone/tsbuild": "^2.1.17",
|
||||
"@gitzone/tsrun": "^1.2.6",
|
||||
"@gitzone/tstest": "^1.0.24",
|
||||
"@gitzone/tstest": "^1.0.27",
|
||||
"@pushrocks/tapbundle": "^3.0.13",
|
||||
"@types/node": "^12.7.2",
|
||||
"tslint": "^5.19.0",
|
||||
"@types/node": "^12.7.9",
|
||||
"tslint": "^5.20.0",
|
||||
"tslint-config-prettier": "^1.18.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@apiglobal/typedrequest": "^1.0.24",
|
||||
"@pushrocks/lik": "^3.0.11",
|
||||
"@pushrocks/npmextra": "^3.0.5",
|
||||
"@pushrocks/npmextra": "^3.0.7",
|
||||
"@pushrocks/projectinfo": "^4.0.2",
|
||||
"@pushrocks/qenv": "^4.0.2",
|
||||
"@pushrocks/qenv": "^4.0.6",
|
||||
"@pushrocks/smartanalytics": "^2.0.15",
|
||||
"@pushrocks/smartcli": "^3.0.7",
|
||||
"@pushrocks/smartdelay": "^2.0.3",
|
||||
"@pushrocks/smartfile": "^7.0.2",
|
||||
"@pushrocks/smartfile": "^7.0.6",
|
||||
"@pushrocks/smartgit": "^1.0.13",
|
||||
"@pushrocks/smartlog": "^2.0.19",
|
||||
"@pushrocks/smartlog-destination-local": "^8.0.2",
|
||||
"@pushrocks/smartparam": "^1.0.4",
|
||||
"@pushrocks/smartpromise": "^3.0.2",
|
||||
"@pushrocks/smartrequest": "^1.1.23",
|
||||
"@pushrocks/smartshell": "^2.0.23",
|
||||
"@pushrocks/smartsocket": "^1.1.45",
|
||||
"@pushrocks/smartpromise": "^3.0.6",
|
||||
"@pushrocks/smartrequest": "^1.1.36",
|
||||
"@pushrocks/smartshell": "^2.0.25",
|
||||
"@pushrocks/smartsocket": "^1.1.49",
|
||||
"@pushrocks/smartssh": "^1.2.3",
|
||||
"@pushrocks/smartstring": "^3.0.10",
|
||||
"@servezone/servezone-interfaces": "^2.0.28",
|
||||
"@servezone/servezone-interfaces": "^2.0.51",
|
||||
"@types/shelljs": "^0.8.5",
|
||||
"@types/through2": "^2.0.34",
|
||||
"through2": "^3.0.1"
|
||||
|
||||
26
test/test.ts
26
test/test.ts
@@ -29,28 +29,34 @@ let sortableArray: npmci.Dockerfile[];
|
||||
|
||||
tap.test('should return valid Dockerfiles', async () => {
|
||||
const npmciInstance = new npmci.Npmci();
|
||||
dockerfile1 = new npmci.Dockerfile(npmciInstance.dockerManager, { filePath: './Dockerfile', read: true });
|
||||
dockerfile2 = new npmci.Dockerfile(npmciInstance.dockerManager, { filePath: './Dockerfile_sometag1', read: true });
|
||||
dockerfile1 = new npmci.Dockerfile(npmciInstance.dockerManager, {
|
||||
filePath: './Dockerfile',
|
||||
read: true
|
||||
});
|
||||
dockerfile2 = new npmci.Dockerfile(npmciInstance.dockerManager, {
|
||||
filePath: './Dockerfile_sometag1',
|
||||
read: true
|
||||
});
|
||||
expect(dockerfile1.version).to.equal('latest');
|
||||
return expect(dockerfile2.version).to.equal('sometag1');
|
||||
});
|
||||
|
||||
tap.test('should read a directory of Dockerfiles', async () => {
|
||||
const npmciInstance = new npmci.Npmci();
|
||||
return npmci.Dockerfile
|
||||
.readDockerfiles(npmciInstance.dockerManager)
|
||||
.then(async (readDockerfilesArrayArg: npmci.Dockerfile[]) => {
|
||||
return npmci.Dockerfile.readDockerfiles(npmciInstance.dockerManager).then(
|
||||
async (readDockerfilesArrayArg: npmci.Dockerfile[]) => {
|
||||
sortableArray = readDockerfilesArrayArg;
|
||||
return expect(readDockerfilesArrayArg[1].version).to.equal('sometag1');
|
||||
});
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
tap.test('should sort an array of Dockerfiles', async () => {
|
||||
return npmci.Dockerfile
|
||||
.sortDockerfiles(sortableArray)
|
||||
.then(async (sortedArrayArg: npmci.Dockerfile[]) => {
|
||||
return npmci.Dockerfile.sortDockerfiles(sortableArray).then(
|
||||
async (sortedArrayArg: npmci.Dockerfile[]) => {
|
||||
console.log(sortedArrayArg);
|
||||
});
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
tap.test('should build all Dockerfiles', async () => {
|
||||
|
||||
@@ -1,8 +1,32 @@
|
||||
import * as plugins from '../npmci.plugins';
|
||||
|
||||
import { Npmci } from '../npmci.classes.npmci';
|
||||
import { logger } from '../npmci.logging';
|
||||
|
||||
/**
|
||||
*
|
||||
* connects to cloudly
|
||||
*/
|
||||
export class CloudlyConnector {
|
||||
public npmciRef: Npmci;
|
||||
|
||||
}
|
||||
constructor(npmciRefArg: Npmci) {
|
||||
this.npmciRef = npmciRefArg;
|
||||
}
|
||||
|
||||
public async announceDockerContainer(optionsArg: plugins.servezoneInterfaces.version.IVersionData) {
|
||||
const cloudlyUrl = this.npmciRef.npmciConfig.getConfig().urlCloudly;
|
||||
if (!cloudlyUrl) {
|
||||
logger.log(
|
||||
'warn',
|
||||
'no cloudly url provided. Thus we cannot announce the newly built Dockerimage!'
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
const typedrequest = new plugins.typedrequest.TypedRequest<
|
||||
plugins.servezoneInterfaces.request.version.IRequest_Any_Cloudly_VersionManager_Update
|
||||
>(`https://${cloudlyUrl}/versionmanager`, 'update');
|
||||
|
||||
const response = await typedrequest.fire(optionsArg);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ export class NpmciDockerManager {
|
||||
`>>npmci docker ...<< cli arguments invalid... Please read the documentation.`
|
||||
);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* builds a cwd of Dockerfiles by triggering a promisechain
|
||||
@@ -62,7 +62,7 @@ export class NpmciDockerManager {
|
||||
.then(Dockerfile.sortDockerfiles)
|
||||
.then(Dockerfile.mapDockerfiles)
|
||||
.then(Dockerfile.buildDockerfiles);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* login to the DockerRegistries
|
||||
@@ -70,7 +70,7 @@ export class NpmciDockerManager {
|
||||
public login = async () => {
|
||||
await this.prepare();
|
||||
await this.npmciRegistryStorage.loginAll();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* logs in docker
|
||||
@@ -98,7 +98,7 @@ export class NpmciDockerManager {
|
||||
}
|
||||
);
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* pushes an image towards a registry
|
||||
@@ -146,7 +146,7 @@ export class NpmciDockerManager {
|
||||
await dockerfile.push(dockerRegistryToPushTo, suffix);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* pulls an image
|
||||
@@ -165,7 +165,7 @@ export class NpmciDockerManager {
|
||||
for (const dockerfile of dockerfileArray) {
|
||||
await dockerfile.pull(localDockerRegistry, suffix);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* tests docker files
|
||||
@@ -173,5 +173,5 @@ export class NpmciDockerManager {
|
||||
public test = async () => {
|
||||
await this.prepare();
|
||||
return await Dockerfile.readDockerfiles(this).then(Dockerfile.testDockerfiles);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -214,6 +214,7 @@ export class Dockerfile {
|
||||
public version: string;
|
||||
public cleanTag: string;
|
||||
public buildTag: string;
|
||||
public pushTag: string;
|
||||
public containerName: string;
|
||||
public content: string;
|
||||
public baseImage: string;
|
||||
@@ -248,7 +249,9 @@ export class Dockerfile {
|
||||
public async build() {
|
||||
logger.log('info', 'now building Dockerfile for ' + this.cleanTag);
|
||||
const buildArgsString = await Dockerfile.getDockerBuildArgs(this.npmciDockerManagerRef);
|
||||
const buildCommand = `docker build -t ${this.buildTag} -f ${this.filePath} ${buildArgsString} .`;
|
||||
const buildCommand = `docker build --label="version=${
|
||||
this.npmciDockerManagerRef.npmciRef.npmciConfig.getConfig().projectInfo.npm.version
|
||||
}" -t ${this.buildTag} -f ${this.filePath} ${buildArgsString} .`;
|
||||
await bash(buildCommand);
|
||||
return;
|
||||
}
|
||||
@@ -257,15 +260,24 @@ export class Dockerfile {
|
||||
* pushes the Dockerfile to a registry
|
||||
*/
|
||||
public async push(dockerRegistryArg: DockerRegistry, versionSuffix: string = null) {
|
||||
const pushTag = Dockerfile.getDockerTagString(
|
||||
this.pushTag = Dockerfile.getDockerTagString(
|
||||
this.npmciDockerManagerRef,
|
||||
dockerRegistryArg.registryUrl,
|
||||
this.repo,
|
||||
this.version,
|
||||
versionSuffix
|
||||
);
|
||||
await bash(`docker tag ${this.buildTag} ${pushTag}`);
|
||||
await bash(`docker push ${pushTag}`);
|
||||
await bash(`docker tag ${this.buildTag} ${this.pushTag}`);
|
||||
await bash(`docker push ${this.pushTag}`);
|
||||
const imageDigest = (await bash(
|
||||
`docker inspect --format="{{index .RepoDigests 0}}" ${this.pushTag}`
|
||||
)).split('@')[1];
|
||||
console.log(`The image ${this.pushTag} has digest ${imageDigest}`);
|
||||
await this.npmciDockerManagerRef.npmciRef.cloudlyConnector.announceDockerContainer({
|
||||
dockerImageUrl: this.pushTag,
|
||||
dockerImageVersion: this.npmciDockerManagerRef.npmciRef.npmciConfig.getConfig().projectInfo
|
||||
.npm.version
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -3,4 +3,3 @@ import * as plugins from './mod.plugins';
|
||||
import * as paths from '../npmci.paths';
|
||||
|
||||
import { Dockerfile } from './mod.classes.dockerfile';
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { logger } from '../npmci.logging';
|
||||
import * as plugins from './mod.plugins';
|
||||
import { bash } from '../npmci.bash';
|
||||
import { bash, bashNoError } from '../npmci.bash';
|
||||
import { Npmci } from '../npmci.classes.npmci';
|
||||
|
||||
export class NpmciGitManager {
|
||||
@@ -27,12 +27,12 @@ export class NpmciGitManager {
|
||||
} else {
|
||||
logger.log('info', `npmci git -> cli arguments invalid! Please read the documentation.`);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
public mirror = async () => {
|
||||
const githubToken = process.env.NPMCI_GIT_GITHUBTOKEN;
|
||||
const githubUser = process.env.NPMCI_GIT_GITHUBGROUP || this.npmciRef.npmciEnv.repo.user;
|
||||
const githubRepo = process.env.NPMCI_GIT_GITHUB || this.npmciRef.npmciEnv.repo;
|
||||
const githubRepo = process.env.NPMCI_GIT_GITHUB || this.npmciRef.npmciEnv.repo.repo;
|
||||
if (
|
||||
this.npmciRef.npmciConfig.getConfig().projectInfo.npm.packageJson.private === true ||
|
||||
this.npmciRef.npmciConfig.getConfig().npmAccessLevel === 'private'
|
||||
@@ -46,14 +46,20 @@ export class NpmciGitManager {
|
||||
if (githubToken) {
|
||||
logger.log('info', 'found github token.');
|
||||
logger.log('info', 'attempting the mirror the repository to GitHub');
|
||||
|
||||
|
||||
// plugins.smartgit.GitRepo;
|
||||
|
||||
|
||||
// remove old mirrors
|
||||
await bashNoError('git remote rm mirror');
|
||||
|
||||
// add the mirror
|
||||
await bash(
|
||||
`git remote add mirror https://${githubToken}@github.com/${githubUser}/${githubRepo}.git`
|
||||
);
|
||||
await bash(`git fetch`);
|
||||
await bash(`git push mirror --all`);
|
||||
await bash(`git checkout master`);
|
||||
await bash(`git push mirror master`);
|
||||
logger.log('ok', 'pushed all branches to mirror!');
|
||||
await bash(`git push mirror --tags`);
|
||||
logger.log('ok', 'pushed all tags to mirror!');
|
||||
@@ -61,5 +67,5 @@ export class NpmciGitManager {
|
||||
logger.log('error', `cannot find NPMCI_GIT_GITHUBTOKEN env var!`);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -22,6 +22,9 @@ export class NpmciNpmManager {
|
||||
case 'install':
|
||||
await this.install();
|
||||
break;
|
||||
case 'build':
|
||||
await this.build();
|
||||
break;
|
||||
case 'prepare':
|
||||
await this.prepare();
|
||||
break;
|
||||
@@ -133,8 +136,8 @@ export class NpmciNpmManager {
|
||||
await bash(`npm -v`);
|
||||
|
||||
// -> build it
|
||||
await bash(`npm install`);
|
||||
await bash(`npm run build`);
|
||||
await this.install();
|
||||
await this.build();
|
||||
|
||||
logger.log('success', `Nice!!! The build for the publication was successfull!`);
|
||||
logger.log('info', `Lets clean up so we don't publish any packages that don't belong to us:`);
|
||||
@@ -152,7 +155,12 @@ export class NpmciNpmManager {
|
||||
|
||||
public async install(): Promise<void> {
|
||||
logger.log('info', 'now installing dependencies:');
|
||||
await bash('npm install');
|
||||
await bash('npm ci');
|
||||
}
|
||||
|
||||
public async build(): Promise<void> {
|
||||
logger.log('info', 'now building the project:');
|
||||
await bash('npm run build');
|
||||
}
|
||||
|
||||
public async test(): Promise<void> {
|
||||
|
||||
@@ -34,7 +34,7 @@ export class Npmci {
|
||||
projectId: 'gitzone',
|
||||
appName: 'npmci'
|
||||
});
|
||||
this.cloudlyConnector = new CloudlyConnector();
|
||||
this.cloudlyConnector = new CloudlyConnector(this);
|
||||
this.npmciEnv = new NpmciEnv(this);
|
||||
this.npmciInfo = new NpmciInfo(this);
|
||||
this.npmciCli = new NpmciCli(this);
|
||||
@@ -52,4 +52,4 @@ export class Npmci {
|
||||
await this.npmciConfig.init();
|
||||
this.npmciCli.startParse();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -106,5 +106,5 @@ export class NpmciCli {
|
||||
|
||||
public startParse = () => {
|
||||
this.smartcli.startParse();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -51,7 +51,7 @@ export class NpmciConfig {
|
||||
logger
|
||||
);
|
||||
|
||||
this.configObject = {
|
||||
this.configObject = {
|
||||
projectInfo: new plugins.projectinfo.ProjectInfo(paths.cwd),
|
||||
npmGlobalTools: [],
|
||||
dockerRegistries: [],
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
import * as plugins from './npmci.plugins';
|
||||
import * as paths from './npmci.paths';
|
||||
import { logger } from "./npmci.logging";
|
||||
import { logger } from './npmci.logging';
|
||||
import { Npmci } from './npmci.classes.npmci';
|
||||
|
||||
export class NpmciInfo {
|
||||
|
||||
public npmciRef: Npmci;
|
||||
public projectInfo = new plugins.projectinfo.ProjectinfoNpm(paths.NpmciPackageRoot);
|
||||
|
||||
@@ -12,7 +11,7 @@ export class NpmciInfo {
|
||||
this.npmciRef = npmciArg;
|
||||
}
|
||||
|
||||
public printToConsole () {
|
||||
public printToConsole() {
|
||||
logger.log('info', `npmci version: ${this.projectInfo.version}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,12 +3,15 @@ import * as path from 'path';
|
||||
|
||||
export { path };
|
||||
|
||||
// @apiglobal
|
||||
import * as typedrequest from '@apiglobal/typedrequest';
|
||||
|
||||
export { typedrequest };
|
||||
|
||||
// @servezone
|
||||
import * as servezoneInterfaces from '@servezone/servezone-interfaces';
|
||||
|
||||
export {
|
||||
servezoneInterfaces
|
||||
};
|
||||
export { servezoneInterfaces };
|
||||
|
||||
// @pushrocks
|
||||
import * as npmextra from '@pushrocks/npmextra';
|
||||
|
||||
Reference in New Issue
Block a user