Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions cleanup.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ async function cleanup() {
}

const buildersState = JSON.parse(buildersStateJson);
const { builderName, builders } = buildersState;
const { builderName, idempotencyKey, builders } = buildersState;

core.info(`Cleaning up ${builders.length} builders...`);

Expand All @@ -30,7 +30,7 @@ async function cleanup() {
// Cleanup each builder using the WarpBuild API
for (const builder of builders) {
try {
let response = await teardownBuilder(config, builder);
let response = await teardownBuilder(config, idempotencyKey, builder);

// Handle retry for server errors
if (response.statusCode >= 500 && response.statusCode < 600) {
Expand Down
27 changes: 21 additions & 6 deletions dist/cleanup.js
Original file line number Diff line number Diff line change
Expand Up @@ -25711,6 +25711,21 @@ class WarpBuildConfig {
getBuilderTeardownEndpoint() {
return `${this.apiDomain}/api/v1/builder-session-requests/complete`;
}

/**
* Get request context from github action job environment variables
*
* @returns {Object}
*/
getRequestContext() {
return {
runner_name: process.env.RUNNER_NAME,
github_job_id: process.env.GITHUB_JOB,
run_id: process.env.GITHUB_RUN_ID,
run_attempt: process.env.GITHUB_RUN_ATTEMPT,
repo: process.env.GITHUB_REPOSITORY,
};
}
}

/**
Expand Down Expand Up @@ -25745,7 +25760,7 @@ async function makeWarpBuildRequest(url, options, data = null) {
* @param {string} profileName - Profile name to assign builders for
* @returns {Promise<Object>} - Parsed response with builder instances
*/
async function assignBuilders(config, profileName, timeout) {
async function assignBuilders(config, idempotencyKey, profileName, timeout) {
const [authType, authValue] = config.authHeader.split(':').map(s => s.trim());

let profileNameList = profileName.split(',');
Expand All @@ -25772,7 +25787,7 @@ async function assignBuilders(config, profileName, timeout) {
[authType]: authValue
}
},
JSON.stringify({ profile_name: profile })
JSON.stringify({ profile_name: profile , request_metadata: config.getRequestContext(), external_unique_id: idempotencyKey})
);

const responseData = JSON.parse(response.data);
Expand Down Expand Up @@ -25827,7 +25842,7 @@ async function getBuilderDetails(config, builderId) {
* @param {WarpBuildConfig} config - WarpBuild configuration
* @param {string} builderId - Builder ID to teardown
*/
async function teardownBuilder(config, builder) {
async function teardownBuilder(config, idempotencyKey, builder) {
const [authType, authValue] = config.authHeader.split(':').map(s => s.trim());

try {
Expand All @@ -25838,7 +25853,7 @@ async function teardownBuilder(config, builder) {
headers: { [authType]: authValue },
timeout: 10000
},
JSON.stringify({ request_id: builder.request_id })
JSON.stringify({ request_id: builder.request_id, external_unique_id: idempotencyKey })
);

let parsedData;
Expand Down Expand Up @@ -27797,7 +27812,7 @@ async function cleanup() {
}

const buildersState = JSON.parse(buildersStateJson);
const { builderName, builders } = buildersState;
const { builderName, idempotencyKey, builders } = buildersState;

core.info(`Cleaning up ${builders.length} builders...`);

Expand All @@ -27815,7 +27830,7 @@ async function cleanup() {
// Cleanup each builder using the WarpBuild API
for (const builder of builders) {
try {
let response = await teardownBuilder(config, builder);
let response = await teardownBuilder(config, idempotencyKey, builder);

// Handle retry for server errors
if (response.statusCode >= 500 && response.statusCode < 600) {
Expand Down
30 changes: 24 additions & 6 deletions dist/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -26392,6 +26392,21 @@ class WarpBuildConfig {
getBuilderTeardownEndpoint() {
return `${this.apiDomain}/api/v1/builder-session-requests/complete`;
}

/**
* Get request context from github action job environment variables
*
* @returns {Object}
*/
getRequestContext() {
return {
runner_name: process.env.RUNNER_NAME,
github_job_id: process.env.GITHUB_JOB,
run_id: process.env.GITHUB_RUN_ID,
run_attempt: process.env.GITHUB_RUN_ATTEMPT,
repo: process.env.GITHUB_REPOSITORY,
};
}
}

/**
Expand Down Expand Up @@ -26426,7 +26441,7 @@ async function makeWarpBuildRequest(url, options, data = null) {
* @param {string} profileName - Profile name to assign builders for
* @returns {Promise<Object>} - Parsed response with builder instances
*/
async function assignBuilders(config, profileName, timeout) {
async function assignBuilders(config, idempotencyKey, profileName, timeout) {
const [authType, authValue] = config.authHeader.split(':').map(s => s.trim());

let profileNameList = profileName.split(',');
Expand All @@ -26453,7 +26468,7 @@ async function assignBuilders(config, profileName, timeout) {
[authType]: authValue
}
},
JSON.stringify({ profile_name: profile })
JSON.stringify({ profile_name: profile , request_metadata: config.getRequestContext(), external_unique_id: idempotencyKey})
);

const responseData = JSON.parse(response.data);
Expand Down Expand Up @@ -26508,7 +26523,7 @@ async function getBuilderDetails(config, builderId) {
* @param {WarpBuildConfig} config - WarpBuild configuration
* @param {string} builderId - Builder ID to teardown
*/
async function teardownBuilder(config, builder) {
async function teardownBuilder(config, idempotencyKey, builder) {
const [authType, authValue] = config.authHeader.split(':').map(s => s.trim());

try {
Expand All @@ -26519,7 +26534,7 @@ async function teardownBuilder(config, builder) {
headers: { [authType]: authValue },
timeout: 10000
},
JSON.stringify({ request_id: builder.request_id })
JSON.stringify({ request_id: builder.request_id, external_unique_id: idempotencyKey })
);

let parsedData;
Expand Down Expand Up @@ -28575,13 +28590,16 @@ async function run() {
// Initialize WarpBuild configuration
const config = new WarpBuildConfig();

// Example output: lq1cr8p2n5x7d3fy
const idempotencyKey = uuidv4().replace(/-/g, '').substring(0, 16);
const builderName = `builder-${idempotencyKey}`;
// Assign builders
const responseData = await assignBuilders(config, profileName, timeout);
const builderName = `builder-${uuidv4()}`;
const responseData = await assignBuilders(config, idempotencyKey, profileName, timeout);

// Save builder information for cleanup
const buildersState = {
builderName,
idempotencyKey,
builders: responseData.builder_instances.map(b => ({
id: b.id,
request_id: b.request_id,
Expand Down
7 changes: 5 additions & 2 deletions main.js
Original file line number Diff line number Diff line change
Expand Up @@ -109,13 +109,16 @@ async function run() {
// Initialize WarpBuild configuration
const config = new WarpBuildConfig();

// Example output: lq1cr8p2n5x7d3fy
const idempotencyKey = uuidv4().replace(/-/g, '').substring(0, 16);
const builderName = `builder-${idempotencyKey}`;
// Assign builders
const responseData = await assignBuilders(config, profileName, timeout);
const builderName = `builder-${uuidv4()}`;
const responseData = await assignBuilders(config, idempotencyKey, profileName, timeout);

// Save builder information for cleanup
const buildersState = {
builderName,
idempotencyKey,
builders: responseData.builder_instances.map(b => ({
id: b.id,
request_id: b.request_id,
Expand Down
23 changes: 19 additions & 4 deletions utils/warpbuild.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,21 @@ class WarpBuildConfig {
getBuilderTeardownEndpoint() {
return `${this.apiDomain}/api/v1/builder-session-requests/complete`;
}

/**
* Get request context from github action job environment variables
*
* @returns {Object}
*/
getRequestContext() {
return {
runner_name: process.env.RUNNER_NAME,
github_job_id: process.env.GITHUB_JOB,
run_id: process.env.GITHUB_RUN_ID,
run_attempt: process.env.GITHUB_RUN_ATTEMPT,
repo: process.env.GITHUB_REPOSITORY,
};
}
}

/**
Expand Down Expand Up @@ -97,7 +112,7 @@ async function makeWarpBuildRequest(url, options, data = null) {
* @param {string} profileName - Profile name to assign builders for
* @returns {Promise<Object>} - Parsed response with builder instances
*/
async function assignBuilders(config, profileName, timeout) {
async function assignBuilders(config, idempotencyKey, profileName, timeout) {
const [authType, authValue] = config.authHeader.split(':').map(s => s.trim());

let profileNameList = profileName.split(',');
Expand All @@ -124,7 +139,7 @@ async function assignBuilders(config, profileName, timeout) {
[authType]: authValue
}
},
JSON.stringify({ profile_name: profile })
JSON.stringify({ profile_name: profile , request_metadata: config.getRequestContext(), external_unique_id: idempotencyKey})
);

const responseData = JSON.parse(response.data);
Expand Down Expand Up @@ -179,7 +194,7 @@ async function getBuilderDetails(config, builderId) {
* @param {WarpBuildConfig} config - WarpBuild configuration
* @param {string} builderId - Builder ID to teardown
*/
async function teardownBuilder(config, builder) {
async function teardownBuilder(config, idempotencyKey, builder) {
const [authType, authValue] = config.authHeader.split(':').map(s => s.trim());

try {
Expand All @@ -190,7 +205,7 @@ async function teardownBuilder(config, builder) {
headers: { [authType]: authValue },
timeout: 10000
},
JSON.stringify({ request_id: builder.request_id })
JSON.stringify({ request_id: builder.request_id, external_unique_id: idempotencyKey })
);

let parsedData;
Expand Down