diff --git a/plugins/apple/swift/v1.22.0/.dockerignore b/plugins/apple/swift/v1.22.0/.dockerignore new file mode 100644 index 000000000..ff0a69ef1 --- /dev/null +++ b/plugins/apple/swift/v1.22.0/.dockerignore @@ -0,0 +1,3 @@ +* +!Dockerfile +!extramoduleimports.patch diff --git a/plugins/apple/swift/v1.22.0/Dockerfile b/plugins/apple/swift/v1.22.0/Dockerfile new file mode 100644 index 000000000..a404dac63 --- /dev/null +++ b/plugins/apple/swift/v1.22.0/Dockerfile @@ -0,0 +1,14 @@ +# syntax=docker/dockerfile:1.4 +FROM swift:5.8.1-focal AS build + +COPY extramoduleimports.patch /app/extramoduleimports.patch +WORKDIR /app +RUN git clone --depth 1 --branch 1.22.0 https://github.com/apple/swift-protobuf --recursive +WORKDIR /app/swift-protobuf +RUN git apply /app/extramoduleimports.patch +RUN swift build -c release --static-swift-stdlib -Xlinker -s + +FROM gcr.io/distroless/cc-debian11 +COPY --from=build --link /app/swift-protobuf/.build/release/protoc-gen-swift . +USER nobody +ENTRYPOINT [ "/protoc-gen-swift" ] diff --git a/plugins/apple/swift/v1.22.0/buf.plugin.yaml b/plugins/apple/swift/v1.22.0/buf.plugin.yaml new file mode 100644 index 000000000..7bf100375 --- /dev/null +++ b/plugins/apple/swift/v1.22.0/buf.plugin.yaml @@ -0,0 +1,20 @@ +version: v1 +name: buf.build/apple/swift +plugin_version: v1.22.0 +source_url: https://github.com/apple/swift-protobuf +description: Base types for Swift. Generates message and enum types. +output_languages: + - swift +registry: + swift: + deps: + - source: https://github.com/apple/swift-protobuf.git + package: swift-protobuf + swift_versions: [ ".v5" ] + products: [ SwiftProtobuf ] + version: 1.22.0 + opts: + - Visibility=Public + - FileNaming=PathToUnderscores +spdx_license_id: Apache-2.0 +license_url: https://github.com/apple/swift-protobuf/blob/1.22.0/LICENSE.txt diff --git a/plugins/apple/swift/v1.22.0/extramoduleimports.patch b/plugins/apple/swift/v1.22.0/extramoduleimports.patch new file mode 100644 index 000000000..fe55fc26d --- /dev/null +++ b/plugins/apple/swift/v1.22.0/extramoduleimports.patch @@ -0,0 +1,58 @@ +diff --git a/Sources/protoc-gen-swift/FileGenerator.swift b/Sources/protoc-gen-swift/FileGenerator.swift +index 90fd06a6..93460574 100644 +--- a/Sources/protoc-gen-swift/FileGenerator.swift ++++ b/Sources/protoc-gen-swift/FileGenerator.swift +@@ -121,6 +121,13 @@ class FileGenerator { + p.print("\(visibilityAnnotation)import \(i)\n") + } + } ++ let neededCustomImports = generatorOptions.extraModuleImports ++ if !neededCustomImports.isEmpty { ++ p.print() ++ for i in neededCustomImports { ++ p.print("import \(i)\n") ++ } ++ } + + p.print("\n") + generateVersionCheck(printer: &p) +diff --git a/Sources/protoc-gen-swift/GeneratorOptions.swift b/Sources/protoc-gen-swift/GeneratorOptions.swift +index 69ecdb86..e0f2e26e 100644 +--- a/Sources/protoc-gen-swift/GeneratorOptions.swift ++++ b/Sources/protoc-gen-swift/GeneratorOptions.swift +@@ -50,6 +50,7 @@ class GeneratorOptions { + let protoToModuleMappings: ProtoFileToModuleMappings + let visibility: Visibility + let implementationOnlyImports: Bool ++ let extraModuleImports: [String] + + /// A string snippet to insert for the visibility + let visibilitySourceSnippet: String +@@ -60,6 +61,7 @@ class GeneratorOptions { + var visibility: Visibility = .internal + var swiftProtobufModuleName: String? = nil + var implementationOnlyImports: Bool = false ++ var externalModuleImports: [String] = [] + + for pair in parseParameter(string:parameter) { + switch pair.key { +@@ -94,6 +96,12 @@ class GeneratorOptions { + if let value = Bool(pair.value) { + implementationOnlyImports = value + } ++ case "ExtraModuleImports": ++ if !pair.value.isEmpty { ++ externalModuleImports.append(pair.value) ++ } else { ++ throw GenerationError.invalidParameterValue(name: pair.key, value: pair.value) ++ } + default: + throw GenerationError.unknownParameter(name: pair.key) + } +@@ -122,5 +130,6 @@ class GeneratorOptions { + } + + self.implementationOnlyImports = implementationOnlyImports ++ self.extraModuleImports = externalModuleImports + } + } diff --git a/tests/testdata/buf.build/apple/swift/v1.22.0/eliza/plugin.sum b/tests/testdata/buf.build/apple/swift/v1.22.0/eliza/plugin.sum new file mode 100644 index 000000000..85aa17497 --- /dev/null +++ b/tests/testdata/buf.build/apple/swift/v1.22.0/eliza/plugin.sum @@ -0,0 +1 @@ +h1:ffGsj903OkejaJHBJ9J0lmZkRiA58mar/OznBW1O9Wo= diff --git a/tests/testdata/buf.build/apple/swift/v1.22.0/petapis/plugin.sum b/tests/testdata/buf.build/apple/swift/v1.22.0/petapis/plugin.sum new file mode 100644 index 000000000..dc7c17aed --- /dev/null +++ b/tests/testdata/buf.build/apple/swift/v1.22.0/petapis/plugin.sum @@ -0,0 +1 @@ +h1:0b5iqMifZQ1mLRYdO83BFuNf3JagkBeYg5O++DTSFhE=