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
10 changes: 5 additions & 5 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ on:

jobs:
test:
name: Run Swift Tests
name: Run Swift Static Tests
runs-on: macos-26

steps:
Expand All @@ -44,10 +44,10 @@ jobs:
- name: Build
run: swift build --build-tests

- name: Run tests
run: swift test
- name: Upload test results
- name: Run static tests
run: swift test --filter Container-Compose-StaticTests.

- name: Upload static test results
if: always()
uses: actions/upload-artifact@v4
with:
Expand Down
20 changes: 20 additions & 0 deletions .swiftpm/xcode/xcshareddata/xcschemes/Container-Compose.xcscheme
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,26 @@
ReferencedContainer = "container:">
</BuildableReference>
</TestableReference>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "Container-Compose-StaticTests"
BuildableName = "Container-Compose-StaticTests"
BlueprintName = "Container-Compose-StaticTests"
ReferencedContainer = "container:">
</BuildableReference>
</TestableReference>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "Container-Compose-DynamicTests"
BuildableName = "Container-Compose-DynamicTests"
BlueprintName = "Container-Compose-DynamicTests"
ReferencedContainer = "container:">
</BuildableReference>
</TestableReference>
</Testables>
</TestAction>
<LaunchAction
Expand Down
17 changes: 15 additions & 2 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,23 @@ let package = Package(
path: "Sources/ContainerComposeApp"
),

// Test Helper
.target(name: "TestHelpers", path: "Tests/TestHelpers"),

// Tests
.testTarget(
name: "Container-ComposeTests",
name: "Container-Compose-StaticTests",
dependencies: [
"ContainerComposeCore"
"ContainerComposeCore",
"TestHelpers"
]
),

.testTarget(
name: "Container-Compose-DynamicTests",
dependencies: [
"ContainerComposeCore",
"TestHelpers"
]
),
]
Expand Down
21 changes: 10 additions & 11 deletions Sources/Container-Compose/Commands/ComposeUp.swift
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,6 @@ public struct ComposeUp: AsyncParsableCommand, @unchecked Sendable {
if let networks = dockerCompose.networks {
print("\n--- Processing Networks ---")
for (networkName, networkConfig) in networks {
guard let networkConfig else { continue }
try await setupNetwork(name: networkName, config: networkConfig)
}
print("--- Networks Processed ---\n")
Expand Down Expand Up @@ -266,45 +265,45 @@ public struct ComposeUp: AsyncParsableCommand, @unchecked Sendable {
try? fileManager.createDirectory(atPath: volumePath, withIntermediateDirectories: true)
}

private func setupNetwork(name networkName: String, config networkConfig: Network) async throws {
let actualNetworkName = networkConfig.name ?? networkName // Use explicit name or key as name
private func setupNetwork(name networkName: String, config networkConfig: Network?) async throws {
let actualNetworkName = networkConfig?.name ?? networkName // Use explicit name or key as name

if let externalNetwork = networkConfig.external, externalNetwork.isExternal {
if let externalNetwork = networkConfig?.external, externalNetwork.isExternal {
print("Info: Network '\(networkName)' is declared as external.")
print("This tool assumes external network '\(externalNetwork.name ?? actualNetworkName)' already exists and will not attempt to create it.")
} else {
var networkCreateArgs: [String] = ["network", "create"]

#warning("Docker Compose Network Options Not Supported")
// Add driver and driver options
if let driver = networkConfig.driver, !driver.isEmpty {
if let driver = networkConfig?.driver, !driver.isEmpty {
// networkCreateArgs.append("--driver")
// networkCreateArgs.append(driver)
print("Network Driver Detected, But Not Supported")
}
if let driverOpts = networkConfig.driver_opts, !driverOpts.isEmpty {
if let driverOpts = networkConfig?.driver_opts, !driverOpts.isEmpty {
// for (optKey, optValue) in driverOpts {
// networkCreateArgs.append("--opt")
// networkCreateArgs.append("\(optKey)=\(optValue)")
// }
print("Network Options Detected, But Not Supported")
}
// Add various network flags
if networkConfig.attachable == true {
if networkConfig?.attachable == true {
// networkCreateArgs.append("--attachable")
print("Network Attachable Flag Detected, But Not Supported")
}
if networkConfig.enable_ipv6 == true {
if networkConfig?.enable_ipv6 == true {
// networkCreateArgs.append("--ipv6")
print("Network IPv6 Flag Detected, But Not Supported")
}
if networkConfig.isInternal == true {
if networkConfig?.isInternal == true {
// networkCreateArgs.append("--internal")
print("Network Internal Flag Detected, But Not Supported")
} // CORRECTED: Use isInternal

// Add labels
if let labels = networkConfig.labels, !labels.isEmpty {
if let labels = networkConfig?.labels, !labels.isEmpty {
print("Network Labels Detected, But Not Supported")
// for (labelKey, labelValue) in labels {
// networkCreateArgs.append("--label")
Expand Down Expand Up @@ -451,7 +450,7 @@ public struct ComposeUp: AsyncParsableCommand, @unchecked Sendable {
runCommandArgs.append(networkToConnect)
}
print(
"Info: Service '\(serviceName)' is configured to connect to networks: \(serviceNetworks.joined(separator: ", ")) ascertained from networks attribute in docker-compose.yml."
"Info: Service '\(serviceName)' is configured to connect to networks: \(serviceNetworks.joined(separator: ", ")) ascertained from networks attribute in \(composeFilename)."
)
print(
"Note: This tool assumes custom networks are defined at the top-level 'networks' key or are pre-existing. This tool does not create implicit networks for services if not explicitly defined at the top-level."
Expand Down
Loading