export async function postTransformationJob()

in packages/core/src/codewhisperer/commands/startTransformByQ.ts [686:765]


export async function postTransformationJob() {
    updateJobHistory()
    if (jobPlanProgress['uploadCode'] !== StepProgress.Succeeded) {
        jobPlanProgress['uploadCode'] = StepProgress.Failed
    }
    if (jobPlanProgress['buildCode'] !== StepProgress.Succeeded) {
        jobPlanProgress['buildCode'] = StepProgress.Failed
    }
    if (jobPlanProgress['generatePlan'] !== StepProgress.Succeeded) {
        jobPlanProgress['generatePlan'] = StepProgress.Failed
    }
    if (jobPlanProgress['transformCode'] !== StepProgress.Succeeded) {
        jobPlanProgress['transformCode'] = StepProgress.Failed
    }

    let chatMessage = transformByQState.getJobFailureErrorChatMessage()
    const diffMessage = CodeWhispererConstants.diffMessage(transformByQState.getMultipleDiffs())
    if (transformByQState.isSucceeded()) {
        chatMessage = CodeWhispererConstants.jobCompletedChatMessage(diffMessage)
    } else if (transformByQState.isPartiallySucceeded()) {
        chatMessage = CodeWhispererConstants.jobPartiallyCompletedChatMessage(diffMessage)
    }

    transformByQState.getChatControllers()?.transformationFinished.fire({
        message: chatMessage,
        tabID: ChatSessionManager.Instance.getSession().tabID,
    })
    const durationInMs = calculateTotalLatency(CodeTransformTelemetryState.instance.getStartTime())
    const resultStatusMessage = transformByQState.getStatus()

    if (transformByQState.getTransformationType() !== TransformationType.SQL_CONVERSION) {
        // the below is only applicable when user is doing a Java 8/11 language upgrade
        const versionInfo = await getVersionData()
        const mavenVersionInfoMessage = `${versionInfo[0]} (${transformByQState.getMavenName()})`
        const javaVersionInfoMessage = `${versionInfo[1]} (${transformByQState.getMavenName()})`

        telemetry.codeTransform_totalRunTime.emit({
            buildSystemVersion: mavenVersionInfoMessage,
            codeTransformSessionId: CodeTransformTelemetryState.instance.getSessionId(),
            codeTransformJobId: transformByQState.getJobId(),
            codeTransformResultStatusMessage: resultStatusMessage,
            codeTransformRunTimeLatency: durationInMs,
            codeTransformLocalJavaVersion: javaVersionInfoMessage,
            result: resultStatusMessage === TransformByQStatus.Succeeded ? MetadataResult.Pass : MetadataResult.Fail,
            reason: `${resultStatusMessage}-${chatMessage}`,
        })
    }

    if (transformByQState.isSucceeded()) {
        void vscode.window.showInformationMessage(CodeWhispererConstants.jobCompletedNotification(diffMessage), {
            title: localizedText.ok,
        })
    } else if (transformByQState.isPartiallySucceeded()) {
        void vscode.window
            .showInformationMessage(
                CodeWhispererConstants.jobPartiallyCompletedNotification(diffMessage),
                CodeWhispererConstants.amazonQFeedbackText
            )
            .then((choice) => {
                if (choice === CodeWhispererConstants.amazonQFeedbackText) {
                    void submitFeedback(
                        placeholder,
                        CodeWhispererConstants.amazonQFeedbackKey,
                        getFeedbackCommentData()
                    )
                }
            })
    }

    if (transformByQState.getPayloadFilePath() !== '') {
        // delete original upload ZIP at very end of transformation
        fs.rmSync(transformByQState.getPayloadFilePath(), { recursive: true, force: true })
    }

    // attempt download for user
    // TODO: refactor as explained here https://github.com/aws/aws-toolkit-vscode/pull/6519/files#r1946873107
    if (transformByQState.isSucceeded() || transformByQState.isPartiallySucceeded()) {
        await vscode.commands.executeCommand('aws.amazonq.transformationHub.reviewChanges.startReview')
    }
}