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: 4 additions & 0 deletions __tests__/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,8 @@ RUN apt-get update && apt-get install -y \
curl \
&& rm -rf /var/lib/apt/lists/*

RUN echo "Sleeping..." && \
sleep 60 && \
echo "Done sleeping!"

CMD ["python3", "--version"]
12 changes: 6 additions & 6 deletions cleanup.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,26 +30,26 @@ async function cleanup() {
// Cleanup each builder using the WarpBuild API
for (const builder of builders) {
try {
let response = await teardownBuilder(config, builder.id);
let response = await teardownBuilder(config, builder);

// Handle retry for server errors
if (response.statusCode >= 500 && response.statusCode < 600) {
core.info(`Got ${response.statusCode} error, retrying teardown for builder ${builder.id} after 1 second...`);
core.info(`Got ${response.statusCode} error, retrying teardown for builder request ${builder.request_id} after 1 second...`);
await new Promise(resolve => setTimeout(resolve, 1000));
response = await teardownBuilder(config, builder.id);
response = await teardownBuilder(config, builder);
}

// Check if response is valid
if (response.statusCode >= 200 && response.statusCode < 300) {
core.info(`Successfully cleaned up builder ${builder.id}`);
core.info(`Successfully cleaned up builder request ${builder.request_id}`);
} else {
const errorMessage = response.message || response.error || 'Unknown error';
const errorDetails = response.rawData ? ` (Raw response: ${response.rawData})` : '';
const statusCode = response.statusCode || 'No status code';
core.warning(`Failed to cleanup builder ${builder.id}: ${statusCode} - ${errorMessage}${errorDetails}`);
core.warning(`Failed to cleanup builder request ${builder.request_id}: ${statusCode} - ${errorMessage}${errorDetails}`);
}
} catch (error) {
core.warning(`Error cleaning up builder ${builder.id}: ${error.message}`);
core.warning(`Error cleaning up builder request ${builder.request_id}: ${error.message}`);
}
}

Expand Down
26 changes: 13 additions & 13 deletions dist/cleanup.js
Original file line number Diff line number Diff line change
Expand Up @@ -25706,11 +25706,10 @@ class WarpBuildConfig {

/**
* Get builder teardown endpoint
* @param {string} builderId
* @returns {string}
*/
getBuilderTeardownEndpoint(builderId) {
return `${this.apiDomain}/api/v1/builders/${builderId}/teardown`;
getBuilderTeardownEndpoint() {
return `${this.apiDomain}/api/v1/builder-session-requests/complete`;
}
}

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

try {
const response = await makeWarpBuildRequest(
config.getBuilderTeardownEndpoint(builderId),
config.getBuilderTeardownEndpoint(),
{
method: 'DELETE',
method: 'POST',
headers: { [authType]: authValue },
timeout: 10000
}
},
JSON.stringify({ request_id: builder.request_id })
);

let parsedData;
Expand Down Expand Up @@ -27815,26 +27815,26 @@ async function cleanup() {
// Cleanup each builder using the WarpBuild API
for (const builder of builders) {
try {
let response = await teardownBuilder(config, builder.id);
let response = await teardownBuilder(config, builder);

// Handle retry for server errors
if (response.statusCode >= 500 && response.statusCode < 600) {
core.info(`Got ${response.statusCode} error, retrying teardown for builder ${builder.id} after 1 second...`);
core.info(`Got ${response.statusCode} error, retrying teardown for builder request ${builder.request_id} after 1 second...`);
await new Promise(resolve => setTimeout(resolve, 1000));
response = await teardownBuilder(config, builder.id);
response = await teardownBuilder(config, builder);
}

// Check if response is valid
if (response.statusCode >= 200 && response.statusCode < 300) {
core.info(`Successfully cleaned up builder ${builder.id}`);
core.info(`Successfully cleaned up builder request ${builder.request_id}`);
} else {
const errorMessage = response.message || response.error || 'Unknown error';
const errorDetails = response.rawData ? ` (Raw response: ${response.rawData})` : '';
const statusCode = response.statusCode || 'No status code';
core.warning(`Failed to cleanup builder ${builder.id}: ${statusCode} - ${errorMessage}${errorDetails}`);
core.warning(`Failed to cleanup builder request ${builder.request_id}: ${statusCode} - ${errorMessage}${errorDetails}`);
}
} catch (error) {
core.warning(`Error cleaning up builder ${builder.id}: ${error.message}`);
core.warning(`Error cleaning up builder request ${builder.request_id}: ${error.message}`);
}
}

Expand Down
16 changes: 9 additions & 7 deletions dist/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -26387,11 +26387,10 @@ class WarpBuildConfig {

/**
* Get builder teardown endpoint
* @param {string} builderId
* @returns {string}
*/
getBuilderTeardownEndpoint(builderId) {
return `${this.apiDomain}/api/v1/builders/${builderId}/teardown`;
getBuilderTeardownEndpoint() {
return `${this.apiDomain}/api/v1/builder-session-requests/complete`;
}
}

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

try {
const response = await makeWarpBuildRequest(
config.getBuilderTeardownEndpoint(builderId),
config.getBuilderTeardownEndpoint(),
{
method: 'DELETE',
method: 'POST',
headers: { [authType]: authValue },
timeout: 10000
}
},
JSON.stringify({ request_id: builder.request_id })
);

let parsedData;
Expand Down Expand Up @@ -28584,6 +28584,7 @@ async function run() {
builderName,
builders: responseData.builder_instances.map(b => ({
id: b.id,
request_id: b.request_id,
index: responseData.builder_instances.indexOf(b)
}))
};
Expand All @@ -28593,6 +28594,7 @@ async function run() {

// Setup each builder node
for (let i = 0; i < responseData.builder_instances.length; i++) {
core.info(`Setting up builder node ${responseData.builder_instances[i].id} and request ${responseData.builder_instances[i].request_id}...`);
await setupBuildxNode(
i,
responseData.builder_instances[i].id,
Expand Down
2 changes: 2 additions & 0 deletions main.js
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ async function run() {
builderName,
builders: responseData.builder_instances.map(b => ({
id: b.id,
request_id: b.request_id,
index: responseData.builder_instances.indexOf(b)
}))
};
Expand All @@ -127,6 +128,7 @@ async function run() {

// Setup each builder node
for (let i = 0; i < responseData.builder_instances.length; i++) {
core.info(`Setting up builder node ${responseData.builder_instances[i].id} and request ${responseData.builder_instances[i].request_id}...`);
await setupBuildxNode(
i,
responseData.builder_instances[i].id,
Expand Down
14 changes: 7 additions & 7 deletions utils/warpbuild.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,10 @@ class WarpBuildConfig {

/**
* Get builder teardown endpoint
* @param {string} builderId
* @returns {string}
*/
getBuilderTeardownEndpoint(builderId) {
return `${this.apiDomain}/api/v1/builders/${builderId}/teardown`;
getBuilderTeardownEndpoint() {
return `${this.apiDomain}/api/v1/builder-session-requests/complete`;
}
}

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

try {
const response = await makeWarpBuildRequest(
config.getBuilderTeardownEndpoint(builderId),
config.getBuilderTeardownEndpoint(),
{
method: 'DELETE',
method: 'POST',
headers: { [authType]: authValue },
timeout: 10000
}
},
JSON.stringify({ request_id: builder.request_id })
);

let parsedData;
Expand Down