From bc9e563a303d1d2eddcabda7f9ee1fb2348a19f8 Mon Sep 17 00:00:00 2001 From: Florent Morin Date: Fri, 1 Dec 2023 13:02:39 +0100 Subject: [PATCH] Add `--disable-docker-image-update` plugin flag MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit motivation: sometimes, you need to use a customized local docker image and `docker pull` don’t have to be called changes: * add `--disable-docker-image-update` plugin flag to disable `docker pull` call --- Plugins/AWSLambdaPackager/Plugin.swift | 23 ++++++++++++++++------- readme.md | 1 + 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/Plugins/AWSLambdaPackager/Plugin.swift b/Plugins/AWSLambdaPackager/Plugin.swift index 9b4f318c..cd76f5c3 100644 --- a/Plugins/AWSLambdaPackager/Plugin.swift +++ b/Plugins/AWSLambdaPackager/Plugin.swift @@ -51,6 +51,7 @@ struct AWSLambdaPackager: CommandPlugin { toolsProvider: { name in try context.tool(named: name).path }, outputDirectory: configuration.outputDirectory, baseImage: configuration.baseDockerImage, + disableDockerImageUpdate: configuration.disableDockerImageUpdate, buildConfiguration: configuration.buildConfiguration, verboseLogging: configuration.verboseLogging ) @@ -77,6 +78,7 @@ struct AWSLambdaPackager: CommandPlugin { toolsProvider: (String) throws -> Path, outputDirectory: Path, baseImage: String, + disableDockerImageUpdate: Bool, buildConfiguration: PackageManager.BuildConfiguration, verboseLogging: Bool ) throws -> [LambdaProduct: Path] { @@ -86,13 +88,15 @@ struct AWSLambdaPackager: CommandPlugin { print("building \"\(packageIdentity)\" in docker") print("-------------------------------------------------------------------------") - // update the underlying docker image, if necessary - print("updating \"\(baseImage)\" docker image") - try self.execute( - executable: dockerToolPath, - arguments: ["pull", baseImage], - logLevel: .output - ) + if !disableDockerImageUpdate { + // update the underlying docker image, if necessary + print("updating \"\(baseImage)\" docker image") + try self.execute( + executable: dockerToolPath, + arguments: ["pull", baseImage], + logLevel: .output + ) + } // get the build output path let buildOutputPathCommand = "swift build -c \(buildConfiguration.rawValue) --show-bin-path" @@ -290,6 +294,7 @@ private struct Configuration: CustomStringConvertible { public let buildConfiguration: PackageManager.BuildConfiguration public let verboseLogging: Bool public let baseDockerImage: String + public let disableDockerImageUpdate: Bool public init( context: PluginContext, @@ -302,6 +307,7 @@ private struct Configuration: CustomStringConvertible { let configurationArgument = argumentExtractor.extractOption(named: "configuration") let swiftVersionArgument = argumentExtractor.extractOption(named: "swift-version") let baseDockerImageArgument = argumentExtractor.extractOption(named: "base-docker-image") + let disableDockerImageUpdateArgument = argumentExtractor.extractFlag(named: "disable-docker-image-update") > 0 self.verboseLogging = verboseArgument @@ -345,6 +351,8 @@ private struct Configuration: CustomStringConvertible { let swiftVersion = swiftVersionArgument.first ?? .none // undefined version will yield the latest docker image self.baseDockerImage = baseDockerImageArgument.first ?? "swift:\(swiftVersion.map { $0 + "-" } ?? "")amazonlinux2" + self.disableDockerImageUpdate = disableDockerImageUpdateArgument + if self.verboseLogging { print("-------------------------------------------------------------------------") print("configuration") @@ -360,6 +368,7 @@ private struct Configuration: CustomStringConvertible { products: \(self.products.map(\.name)) buildConfiguration: \(self.buildConfiguration) baseDockerImage: \(self.baseDockerImage) + disableDockerImageUpdate: \(self.disableDockerImageUpdate) } """ } diff --git a/readme.md b/readme.md index 113bd9fc..402ac8d1 100644 --- a/readme.md +++ b/readme.md @@ -197,6 +197,7 @@ The `archive` command can be customized using the following parameters * `2` (Debug) * `--swift-version` Swift language version used to define the Amazon Linux 2 Docker image. For example "5.7.3" * `--base-docker-image` An Amazon Linux 2 docker image name available in your system. +* `--disable-docker-image-update` If flag is set, docker image will not be updated and local image will be used. Both `--swift-version` and `--base-docker-image` are mutually exclusive