Skip to content

Commit

Permalink
Merge pull request #712 from forcedotcom/magrawal/push-upgrade-abort
Browse files Browse the repository at this point in the history
@W-17409066 feat - push upgrade request abort cli support
  • Loading branch information
mradulsf authored Jan 30, 2025
2 parents 1827d47 + 2b163bd commit 73c2790
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 1 deletion.
2 changes: 1 addition & 1 deletion LICENSE.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Copyright (c) 2024, Salesforce.com, Inc.
Copyright (c) 2025, Salesforce.com, Inc.
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
Expand Down
4 changes: 4 additions & 0 deletions src/interfaces/packagingInterfacesAndType.ts
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,10 @@ export type PackagePushRequestReportQueryOptions = {
packagePushRequestId: string;
};

export type PackagePushRequestAbortQueryOptions = {
packagePushRequestId: string;
};

export type PackageInstallCreateRequest = Partial<
Pick<
PackageInstallRequest,
Expand Down
48 changes: 48 additions & 0 deletions src/package/packagePushUpgrade.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import {
PackagePushRequestReportResult,
PackagePushRequestJobCountByStatusResult,
PackagePushRequestReportJobFailuresResult,
PackagePushRequestAbortQueryOptions,
} from '../interfaces';
import { applyErrorAction, massageErrorMessage } from '../utils/packageUtils';

Expand Down Expand Up @@ -188,6 +189,42 @@ export class PackagePushUpgrade {
}
}

public static async abort(connection: Connection, options: PackagePushRequestAbortQueryOptions): Promise<boolean> {
try {
// Fetch the current status of the PackagePushRequest
const abortQuery = util.format(getPushRequestStatusQuery(), getPushRequestStatusWhereClause(options));
const queryResult = await queryReport(abortQuery, connection);

if (!queryResult.records || queryResult.records.length === 0) {
throw new Error(`No PackagePushRequest found with Id: ${options.packagePushRequestId}`);
}

const pushRequest = queryResult.records[0];
// Validate the current status
if (!['Created', 'Pending'].includes(pushRequest.Status)) {
throw new Error(
`Cannot abort PackagePushRequest with status '${pushRequest.Status}'. Abortion is only allowed for 'Created' or 'Pending' statuses.`
);
}

// Abort the push request by setting its status to "Canceled"
await connection.request({
method: 'PATCH',
url:
`/services/data/v${connection.getApiVersion()}/sobjects/packagepushrequest/` + options.packagePushRequestId,
body: JSON.stringify({ Status: 'Canceled' }),
});

// Return the updated PackagePushRequest details
return true;
} catch (err) {
if (err instanceof Error) {
throw applyErrorAction(massageErrorMessage(err));
}
return false;
}
}

private static async writeJobErrorsToFile(
pushRequestId: string,
jobErrors: IngestJobV2FailedResults<Schema>
Expand Down Expand Up @@ -303,3 +340,14 @@ async function queryJobFailureReasons(
): Promise<QueryResult<PackagePushRequestReportJobFailuresResult>> {
return connection.autoFetchQuery<PackagePushRequestReportJobFailuresResult & Schema>(query, {});
}

function getPushRequestStatusWhereClause(options: PackagePushRequestAbortQueryOptions): string {
const where: string[] = [];
where.push(`Id = '${options.packagePushRequestId}'`);
return `WHERE ${where.join(' AND ')}`;
}

function getPushRequestStatusQuery(): string {
const QUERY = 'SELECT Id, Status FROM PackagePushRequest ' + '%s';
return QUERY;
}

0 comments on commit 73c2790

Please sign in to comment.