feat(cli/buildx): add pull control for builds and isolate buildx builders per project
This commit is contained in:
@@ -4,6 +4,7 @@ import { logger } from './tsdocker.logging.js';
|
||||
|
||||
export interface ISessionConfig {
|
||||
sessionId: string;
|
||||
projectHash: string;
|
||||
registryPort: number;
|
||||
registryHost: string;
|
||||
registryContainerName: string;
|
||||
@@ -17,8 +18,8 @@ export interface ISessionConfig {
|
||||
* Generates unique ports, container names, and builder names so that
|
||||
* concurrent CI jobs on the same Docker host don't collide.
|
||||
*
|
||||
* In local (non-CI) dev the builder suffix is empty, preserving the
|
||||
* persistent builder behavior.
|
||||
* In local (non-CI) dev the builder suffix contains a project hash so
|
||||
* that concurrent runs in different project directories use separate builders.
|
||||
*/
|
||||
export class TsDockerSession {
|
||||
public config: ISessionConfig;
|
||||
@@ -34,16 +35,18 @@ export class TsDockerSession {
|
||||
public static async create(): Promise<TsDockerSession> {
|
||||
const sessionId =
|
||||
process.env.TSDOCKER_SESSION_ID || crypto.randomBytes(4).toString('hex');
|
||||
const projectHash = crypto.createHash('sha256').update(process.cwd()).digest('hex').substring(0, 8);
|
||||
|
||||
const registryPort = await TsDockerSession.allocatePort();
|
||||
const registryHost = `localhost:${registryPort}`;
|
||||
const registryContainerName = `tsdocker-registry-${sessionId}`;
|
||||
|
||||
const { isCI, ciSystem } = TsDockerSession.detectCI();
|
||||
const builderSuffix = isCI ? `-${sessionId}` : '';
|
||||
const builderSuffix = isCI ? `-${projectHash}-${sessionId}` : `-${projectHash}`;
|
||||
|
||||
const config: ISessionConfig = {
|
||||
sessionId,
|
||||
projectHash,
|
||||
registryPort,
|
||||
registryHost,
|
||||
registryContainerName,
|
||||
@@ -99,9 +102,10 @@ export class TsDockerSession {
|
||||
logger.log('info', '=== TSDOCKER SESSION ===');
|
||||
logger.log('info', `Session ID: ${c.sessionId}`);
|
||||
logger.log('info', `Registry: ${c.registryHost} (container: ${c.registryContainerName})`);
|
||||
logger.log('info', `Project hash: ${c.projectHash}`);
|
||||
logger.log('info', `Builder suffix: ${c.builderSuffix}`);
|
||||
if (c.isCI) {
|
||||
logger.log('info', `CI detected: ${c.ciSystem}`);
|
||||
logger.log('info', `Builder suffix: ${c.builderSuffix}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user