Skip to content

Commit

Permalink
Test creating 'fingerprints' dir
Browse files Browse the repository at this point in the history
Motivation:
Source compat test continues to fail even with #3928:

```
"You don’t have permission to save the file “fingerprints” in the folder “security”
```

https://ci.swift.org/job/swift-PR-source-compat-suite/5709/artifact/

Not sure how/why, but it seems like `security` directory is created just fine but not the `fingerprints` sub directory (`fingerprints` is a directory not a file, and the code add a file to the `fingerprints` dir for each downloaded package).

Modifications:
Test creating `fingerprints` directory instead of `security`, and if that fails, disable TOFU feature.
  • Loading branch information
yim-lee committed Dec 11, 2021
1 parent 2e60c7d commit 1dac71f
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 32 deletions.
18 changes: 13 additions & 5 deletions Sources/Basics/FileSystem+Extensions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,6 @@ extension FileSystem {
public var dotSwiftPM: AbsolutePath {
self.homeDirectory.appending(component: ".swiftpm")
}

/// SwiftPM security directory
public var swiftPMSecurityDirectory: AbsolutePath {
self.dotSwiftPM.appending(component: "security")
}
}

// MARK: - cache
Expand Down Expand Up @@ -117,6 +112,19 @@ extension FileSystem {
}
}

// MARK: - security

extension FileSystem {
/// SwiftPM security directory
public var swiftPMSecurityDirectory: AbsolutePath {
self.dotSwiftPM.appending(component: "security")
}

public var swiftPMFingerprintsDirectory: AbsolutePath {
self.swiftPMSecurityDirectory.appending(component: "fingerprints")
}
}

// MARK: - Utilities

extension FileSystem {
Expand Down
18 changes: 9 additions & 9 deletions Sources/Commands/SwiftTool.swift
Original file line number Diff line number Diff line change
Expand Up @@ -641,16 +641,16 @@ public class SwiftTool {
}
}

private func getSharedSecurityDirectory() throws -> AbsolutePath? {
private func getSharedFingerprintsDirectory() throws -> AbsolutePath? {
do {
let fileSystem = localFileSystem
let sharedSecurityDirectory = fileSystem.swiftPMSecurityDirectory
if !fileSystem.exists(sharedSecurityDirectory) {
try fileSystem.createDirectory(sharedSecurityDirectory, recursive: true)
let sharedFingerprintsDirectory = fileSystem.swiftPMFingerprintsDirectory
if !fileSystem.exists(sharedFingerprintsDirectory) {
try fileSystem.createDirectory(sharedFingerprintsDirectory, recursive: true)
}
return sharedSecurityDirectory
return sharedFingerprintsDirectory
} catch {
self.observabilityScope.emit(warning: "Failed creating shared security directory: \(error)")
self.observabilityScope.emit(warning: "Failed creating shared fingerprints directory: \(error)")
return .none
}
}
Expand All @@ -663,19 +663,19 @@ public class SwiftTool {

let delegate = ToolWorkspaceDelegate(self.outputStream, logLevel: self.logLevel, observabilityScope: self.observabilityScope)
let provider = GitRepositoryProvider(processSet: processSet)
let sharedSecurityDirectory = try self.getSharedSecurityDirectory()
let sharedCacheDirectory = try self.getSharedCacheDirectory()
let sharedConfigurationDirectory = try self.getSharedConfigurationDirectory()
let sharedFingerprintsDirectory = try self.getSharedFingerprintsDirectory()
let isXcodeBuildSystemEnabled = self.options.buildSystem == .xcode
let workspace = try Workspace(
fileSystem: localFileSystem,
location: .init(
workingDirectory: buildPath,
editsDirectory: self.editsDirectory(),
resolvedVersionsFile: self.resolvedVersionsFile(),
sharedSecurityDirectory: sharedSecurityDirectory,
sharedCacheDirectory: sharedCacheDirectory,
sharedConfigurationDirectory: sharedConfigurationDirectory
sharedConfigurationDirectory: sharedConfigurationDirectory,
sharedFingerprintsDirectory: sharedFingerprintsDirectory
),
mirrors: self.getMirrorsConfig(sharedConfigurationDirectory: sharedConfigurationDirectory).mirrors,
registries: try self.getRegistriesConfig(sharedConfigurationDirectory: sharedConfigurationDirectory).configuration,
Expand Down
4 changes: 2 additions & 2 deletions Sources/SPMTestSupport/MockWorkspace.swift
Original file line number Diff line number Diff line change
Expand Up @@ -239,9 +239,9 @@ public final class MockWorkspace {
workingDirectory: self.sandbox.appending(component: ".build"),
editsDirectory: self.sandbox.appending(component: "edits"),
resolvedVersionsFile: self.sandbox.appending(component: "Package.resolved"),
sharedSecurityDirectory: self.fileSystem.swiftPMSecurityDirectory,
sharedCacheDirectory: self.fileSystem.swiftPMCacheDirectory,
sharedConfigurationDirectory: self.fileSystem.swiftPMConfigDirectory
sharedConfigurationDirectory: self.fileSystem.swiftPMConfigDirectory,
sharedFingerprintsDirectory: self.fileSystem.swiftPMFingerprintsDirectory
),
mirrors: self.mirrors,
customToolsVersion: self.toolsVersion,
Expand Down
4 changes: 2 additions & 2 deletions Sources/Workspace/Workspace.swift
Original file line number Diff line number Diff line change
Expand Up @@ -417,9 +417,9 @@ public class Workspace {
workingDirectory: dataPath,
editsDirectory: editablesPath,
resolvedVersionsFile: pinsFile,
sharedSecurityDirectory: fileSystem.swiftPMSecurityDirectory,
sharedCacheDirectory: cachePath,
sharedConfigurationDirectory: nil // legacy
sharedConfigurationDirectory: nil, // legacy
sharedFingerprintsDirectory: fileSystem.swiftPMFingerprintsDirectory
),
mirrors: config?.mirrors,
authorizationProvider: netrcFilePath.map {
Expand Down
23 changes: 9 additions & 14 deletions Sources/Workspace/WorkspaceConfiguration.swift
Original file line number Diff line number Diff line change
Expand Up @@ -30,15 +30,15 @@ extension Workspace {

/// Path to the Package.resolved file.
public var resolvedVersionsFile: AbsolutePath

/// Path to the shared security directory
public var sharedSecurityDirectory: AbsolutePath?

/// Path to the shared cache directory
public var sharedCacheDirectory: AbsolutePath?

/// Path to the shared configuration directory
public var sharedConfigurationDirectory: AbsolutePath?

/// Path to the shared fingerprints directory
public var sharedFingerprintsDirectory: AbsolutePath?

/// Path to the repositories clones.
public var repositoriesDirectory: AbsolutePath {
Expand All @@ -59,11 +59,6 @@ extension Workspace {
public var artifactsDirectory: AbsolutePath {
self.workingDirectory.appending(component: "artifacts")
}

/// Path to the shared fingerprints directory.
public var sharedFingerprintsDirectory: AbsolutePath? {
self.sharedSecurityDirectory.map { $0.appending(component: "fingerprints") }
}

/// Path to the shared repositories cache.
public var sharedRepositoriesCacheDirectory: AbsolutePath? {
Expand Down Expand Up @@ -96,23 +91,23 @@ extension Workspace {
/// - workingDirectory: Path to working directory for this workspace.
/// - editsDirectory: Path to store the editable versions of dependencies.
/// - resolvedVersionsFile: Path to the Package.resolved file.
/// - sharedSecurityDirectory: Path to the shared security directory.
/// - sharedCacheDirectory: Path to the shared cache directory.
/// - sharedConfigurationDirectory: Path to the shared configuration directory.
/// - sharedFingerprintsDirectory: Path to the shared fingerprints directory.
public init(
workingDirectory: AbsolutePath,
editsDirectory: AbsolutePath,
resolvedVersionsFile: AbsolutePath,
sharedSecurityDirectory: AbsolutePath?,
sharedCacheDirectory: AbsolutePath?,
sharedConfigurationDirectory: AbsolutePath?
sharedConfigurationDirectory: AbsolutePath?,
sharedFingerprintsDirectory: AbsolutePath?
) {
self.workingDirectory = workingDirectory
self.editsDirectory = editsDirectory
self.resolvedVersionsFile = resolvedVersionsFile
self.sharedSecurityDirectory = sharedSecurityDirectory
self.sharedCacheDirectory = sharedCacheDirectory
self.sharedConfigurationDirectory = sharedConfigurationDirectory
self.sharedFingerprintsDirectory = sharedFingerprintsDirectory
}

/// Create a new workspace location.
Expand All @@ -124,9 +119,9 @@ extension Workspace {
workingDirectory: DefaultLocations.workingDirectory(forRootPackage: rootPath),
editsDirectory: DefaultLocations.editsDirectory(forRootPackage: rootPath),
resolvedVersionsFile: DefaultLocations.resolvedVersionsFile(forRootPackage: rootPath),
sharedSecurityDirectory: fileSystem.swiftPMSecurityDirectory,
sharedCacheDirectory: fileSystem.swiftPMCacheDirectory,
sharedConfigurationDirectory: fileSystem.swiftPMConfigDirectory
sharedConfigurationDirectory: fileSystem.swiftPMConfigDirectory,
sharedFingerprintsDirectory: fileSystem.swiftPMFingerprintsDirectory
)
}
}
Expand Down

0 comments on commit 1dac71f

Please sign in to comment.