diff --git a/AWSSDKSwiftCLI/Sources/AWSSDKSwiftCLI/Utils/Process+Utils.swift b/AWSSDKSwiftCLI/Sources/AWSSDKSwiftCLI/Utils/Process+Utils.swift index fe8101d11a6..4f66da0d358 100644 --- a/AWSSDKSwiftCLI/Sources/AWSSDKSwiftCLI/Utils/Process+Utils.swift +++ b/AWSSDKSwiftCLI/Sources/AWSSDKSwiftCLI/Utils/Process+Utils.swift @@ -6,6 +6,7 @@ // import Foundation +import ArgumentParser extension Process { /// Creates a process using `/usr/bin/env` as the executable @@ -73,6 +74,10 @@ struct ProcessRunner { log("Running process: \(process.commandString)") try process.run() process.waitUntilExit() + let exitCode = ExitCode(process.terminationStatus) + if !exitCode.isSuccess { + throw exitCode + } } #if DEBUG diff --git a/AWSSDKSwiftCLI/Tests/AWSSDKSwiftCLITests/Utils/ProcessUtilsTests.swift b/AWSSDKSwiftCLI/Tests/AWSSDKSwiftCLITests/Utils/ProcessUtilsTests.swift new file mode 100644 index 00000000000..d2124be186b --- /dev/null +++ b/AWSSDKSwiftCLI/Tests/AWSSDKSwiftCLITests/Utils/ProcessUtilsTests.swift @@ -0,0 +1,26 @@ +// +// Copyright Amazon.com Inc. or its affiliates. +// All Rights Reserved. +// +// SPDX-License-Identifier: Apache-2.0 +// + +@testable import AWSSDKSwiftCLI +import PackageDescription +import ArgumentParser +import XCTest + +class ProcessUtilsTests: XCTestCase { + + func test_exit_itThrowsErrorWithErrorCode() { + let process = Process("false") // this refers to /usr/bin/false which always returns unsuccessfully + do { + try ProcessRunner.standard.run(process) + XCTFail("Process runner should have thrown") + } catch let exitCodeError as ExitCode { + XCTAssertTrue(exitCodeError.rawValue != 0) + } catch { + XCTFail("Process runner threw an unexpected type of error") + } + } +}