Skip to content

Commit

Permalink
buildx(history): detach dial-stdio process
Browse files Browse the repository at this point in the history
Signed-off-by: CrazyMax <[email protected]>
  • Loading branch information
crazy-max committed Jul 2, 2024
1 parent 2cb2c55 commit 200e43c
Showing 1 changed file with 20 additions and 13 deletions.
33 changes: 20 additions & 13 deletions src/buildx/history.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,8 @@
* limitations under the License.
*/

import {ChildProcessByStdio, spawn} from 'child_process';
import {spawn} from 'child_process';
import fs from 'fs';
import {Readable, Writable} from 'node:stream';
import os from 'os';
import path from 'path';
import * as core from '@actions/core';
Expand Down Expand Up @@ -93,9 +92,17 @@ export class History {
await Exec.exec('mkfifo', [buildxOutFifoPath]);

const buildxCmd = await this.buildx.getCommand(['--builder', builderName, 'dial-stdio']);
const buildxDialStdioProc = History.spawn(buildxCmd.command, buildxCmd.args);

core.info(`[command]${buildxCmd.command} ${buildxCmd.args.join(' ')}`);
const buildxDialStdioProc = spawn(buildxCmd.command, buildxCmd.args, {
stdio: ['pipe', 'pipe', 'inherit'],
detached: true
});
fs.createReadStream(buildxInFifoPath).pipe(buildxDialStdioProc.stdin);
buildxDialStdioProc.stdout.pipe(fs.createWriteStream(buildxOutFifoPath));
buildxDialStdioProc.on('exit', code => {
core.info(`Process "buildx dial-stdio" exited with code ${code}`);
});

const tmpDockerbuildFilename = path.join(outDir, 'rec.dockerbuild');
const summaryFilename = path.join(outDir, 'summary.json');
Expand All @@ -112,13 +119,17 @@ export class History {
ebargs.push(`--gid=${process.getgid()}`);
}
// prettier-ignore
const dockerRunProc = History.spawn('docker', [
const dockerRunArgs = [
'run', '--rm', '-i',
'-v', `${Buildx.refsDir}:/buildx-refs`,
'-v', `${outDir}:/out`,
opts.image || History.EXPORT_TOOL_IMAGE,
...ebargs
]);
]
core.info(`[command]docker ${dockerRunArgs.join(' ')}`);
const dockerRunProc = spawn('docker', dockerRunArgs, {
stdio: ['pipe', 'pipe', 'inherit']
});
fs.createReadStream(buildxOutFifoPath).pipe(dockerRunProc.stdin);
dockerRunProc.stdout.pipe(fs.createWriteStream(buildxInFifoPath));
dockerRunProc.on('close', code => {
Expand All @@ -133,9 +144,12 @@ export class History {
}
});
dockerRunProc.on('error', err => {
core.error(`Error executing buildx dial-stdio: ${err}`);
core.error(`Error executing "docker run": ${err}`);
reject(err);
});
dockerRunProc.on('exit', code => {
core.info(`Process "docker run" exited with code ${code}`);
});
}).catch(err => {
throw err;
});
Expand All @@ -162,11 +176,4 @@ export class History {
refs: refs
};
}

private static spawn(command: string, args?: ReadonlyArray<string>): ChildProcessByStdio<Writable, Readable, null> {
core.info(`[command]${command}${args ? ` ${args.join(' ')}` : ''}`);
return spawn(command, args || [], {
stdio: ['pipe', 'pipe', 'inherit']
});
}
}

0 comments on commit 200e43c

Please sign in to comment.