Merge pull request #87 from useblacksmith/vm-tailnet
src: join and leave tailnet on start and cleanup of builder
This commit is contained in:
commit
8e7197156e
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -111,7 +111,6 @@ describe('startBlacksmithBuilder', () => {
|
|||
exposeId: mockExposeId
|
||||
});
|
||||
expect(setupBuilder.startAndConfigureBuildkitd).toHaveBeenCalledWith(mockParallelism);
|
||||
expect(core.warning).not.toHaveBeenCalled();
|
||||
expect(reporter.reportBuildPushActionFailure).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
|
|
35
src/main.ts
35
src/main.ts
|
@ -21,12 +21,36 @@ import {promisify} from 'util';
|
|||
import {exec} from 'child_process';
|
||||
import * as reporter from './reporter';
|
||||
import {setupStickyDisk, startAndConfigureBuildkitd, getNumCPUs} from './setup_builder';
|
||||
import { Metric, Metric_MetricType } from "@buf/blacksmith_vm-agent.bufbuild_es/stickydisk/v1/stickydisk_pb";
|
||||
import { Metric_MetricType } from "@buf/blacksmith_vm-agent.bufbuild_es/stickydisk/v1/stickydisk_pb";
|
||||
|
||||
const buildxVersion = 'v0.17.0';
|
||||
const mountPoint = '/var/lib/buildkit';
|
||||
const execAsync = promisify(exec);
|
||||
|
||||
async function joinTailnet(): Promise<void> {
|
||||
const token = process.env.BLACKSMITH_TAILSCALE_TOKEN;
|
||||
if (!token) {
|
||||
core.warning('BLACKSMITH_TAILSCALE_TOKEN environment variable not set, skipping tailnet join');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
await execAsync(`sudo tailscale up --authkey=${token} --hostname=${process.env.VM_ID}`);
|
||||
|
||||
core.info('Successfully joined tailnet');
|
||||
} catch (error) {
|
||||
throw new Error(`Failed to join tailnet: ${error.message}`);
|
||||
}
|
||||
}
|
||||
|
||||
async function leaveTailnet(): Promise<void> {
|
||||
try {
|
||||
await execAsync('sudo tailscale down');
|
||||
} catch (error) {
|
||||
core.warning(`Error leaving tailnet: ${error.message}`);
|
||||
}
|
||||
}
|
||||
|
||||
async function setupBuildx(version: string, toolkit: Toolkit): Promise<void> {
|
||||
let toolPath;
|
||||
const standalone = await toolkit.buildx.isStandalone();
|
||||
|
@ -70,6 +94,8 @@ async function setupBuildx(version: string, toolkit: Toolkit): Promise<void> {
|
|||
*/
|
||||
export async function startBlacksmithBuilder(inputs: context.Inputs): Promise<{addr: string | null; buildId: string | null; exposeId: string}> {
|
||||
try {
|
||||
await joinTailnet();
|
||||
|
||||
const dockerfilePath = context.getDockerfilePath(inputs);
|
||||
if (!dockerfilePath) {
|
||||
throw new Error('Failed to resolve dockerfile path');
|
||||
|
@ -323,6 +349,9 @@ actionsToolkit.run(
|
|||
refs: ref ? [ref] : []
|
||||
});
|
||||
}
|
||||
|
||||
await leaveTailnet();
|
||||
|
||||
try {
|
||||
const {stdout} = await execAsync('pgrep buildkitd');
|
||||
if (stdout.trim()) {
|
||||
|
@ -403,6 +432,10 @@ actionsToolkit.run(
|
|||
fs.rmSync(stateHelper.tmpDir, {recursive: true});
|
||||
});
|
||||
}
|
||||
|
||||
// Ensure we've left the tailnet.
|
||||
await leaveTailnet();
|
||||
|
||||
// Check for any lingering buildkitd processes and try to clean up mounts
|
||||
try {
|
||||
// Check for buildkitd processes first
|
||||
|
|
Loading…
Reference in New Issue