Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions plugins/apple/swift/v1.22.0/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
*
!Dockerfile
!extramoduleimports.patch
14 changes: 14 additions & 0 deletions plugins/apple/swift/v1.22.0/Dockerfile
Original file line number Diff line number Diff line change
@@ -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" ]
20 changes: 20 additions & 0 deletions plugins/apple/swift/v1.22.0/buf.plugin.yaml
Original file line number Diff line number Diff line change
@@ -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
58 changes: 58 additions & 0 deletions plugins/apple/swift/v1.22.0/extramoduleimports.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
diff --git a/Sources/protoc-gen-swift/FileGenerator.swift b/Sources/protoc-gen-swift/FileGenerator.swift
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated the patch to apply cleanly on this version - there were some changes upstream in apple/swift-protobuf@6b33e90 that caused the previous patch not to apply.

@pgmitche / @stefanvanburen / @rebello95 - I'm not sure if we want to do anything here with the new visibilityAnnotation logic?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The patch looks essentially identical, so happy to approve on that basis.

If I'm understanding the annotation correctly, then it sounds like symbols in the packages generated with that annotation would not be importable, so wouldn't be compatible with remote packages.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't think we need to do anything for that new option, we don't have a use case for implementation-only imports with remote packages. Also updating Connect-Swift: connectrpc/connect-swift#136

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
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
h1:ffGsj903OkejaJHBJ9J0lmZkRiA58mar/OznBW1O9Wo=
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
h1:0b5iqMifZQ1mLRYdO83BFuNf3JagkBeYg5O++DTSFhE=