Compare commits
44 Commits
cb25dba7de
...
0.1.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
66e286f267
|
|||
|
9b99b35436
|
|||
|
fb246df01a
|
|||
|
0b153d7990
|
|||
|
558054464c
|
|||
|
54c07886ad
|
|||
|
f8e89ed0fa
|
|||
|
f596975bbc
|
|||
|
805100fa43
|
|||
|
f7f168b7fd
|
|||
|
99459a0a71
|
|||
|
f89efc8c5e
|
|||
|
85b285347b
|
|||
|
8c402f3f5f
|
|||
|
1429c51821
|
|||
|
1302b15ee2
|
|||
|
da810d0a45
|
|||
|
35d9422f07
|
|||
|
601869d457
|
|||
|
6d0108da0c
|
|||
|
bc0b740f95
|
|||
|
303cdef84b
|
|||
|
b5afc77428
|
|||
|
3f56dda568
|
|||
|
d1b3379815
|
|||
|
b557a60fa3
|
|||
|
5f4ef3b5b5
|
|||
|
ba1e61d99e
|
|||
|
bd56660683
|
|||
|
a480e942bc
|
|||
|
2b265a4ca5
|
|||
|
56a0bca00c
|
|||
|
7b30b78b67
|
|||
|
ce6eb3ec2f
|
|||
|
8302ede99e
|
|||
|
d9e91538fb
|
|||
|
c1a14ea855
|
|||
|
ddb5e6767a
|
|||
|
9c784d4dcb
|
|||
|
92cd6afa2b
|
|||
|
87390c4b63
|
|||
|
a8d35fed37
|
|||
|
357914ba93
|
|||
|
a39536364b
|
@@ -70,6 +70,7 @@ let package = Package(
|
||||
name: "ConfigurationClient",
|
||||
dependencies: [
|
||||
"CodersClient",
|
||||
"CommandClient",
|
||||
"FileClient",
|
||||
.product(name: "Dependencies", package: "swift-dependencies"),
|
||||
.product(name: "DependenciesMacros", package: "swift-dependencies"),
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import CodersClient
|
||||
import CommandClient
|
||||
import Dependencies
|
||||
import DependenciesMacros
|
||||
import FileClient
|
||||
@@ -155,6 +156,7 @@ struct LiveConfigurationClient {
|
||||
private let environment: [String: String]
|
||||
|
||||
@Dependency(\.coders) var coders
|
||||
@Dependency(\.commandClient) var commandClient
|
||||
@Dependency(\.fileClient) var fileManager
|
||||
@Dependency(\.logger) var logger
|
||||
|
||||
@@ -245,19 +247,13 @@ struct LiveConfigurationClient {
|
||||
try await fileManager.createDirectory(fileDirectory)
|
||||
}
|
||||
|
||||
// TODO: The hpa file needs to be copied somewhere on the system during install and
|
||||
// not use bundle, as it only works if the tool was built on the users system.
|
||||
if case .toml = file {
|
||||
// In the case of toml, we copy the internal resource that includes
|
||||
// usage comments in the file.
|
||||
guard let resourceFile = Bundle.module.url(
|
||||
forResource: HPAKey.resourceFileName,
|
||||
withExtension: HPAKey.resourceFileExtension
|
||||
) else {
|
||||
throw ConfigurationError.resourceNotFound
|
||||
}
|
||||
|
||||
try await fileManager.copy(resourceFile, fileUrl)
|
||||
// Copy the file using curl, because when installed as a pre-built binary we
|
||||
// don't have access to bundled resources.
|
||||
try await commandClient.run(
|
||||
quiet: true,
|
||||
["curl", HPAKey.tomlConfigUrl, "--output", fileUrl.path]
|
||||
)
|
||||
} else {
|
||||
// Json does not allow comments, so we write the mock configuration
|
||||
// to the file path.
|
||||
|
||||
@@ -15,6 +15,7 @@ public enum HPAKey {
|
||||
public static let resourceFileExtension = "toml"
|
||||
public static let defaultFileName = "config.toml"
|
||||
public static let defaultFileNameWithoutExtension = "config"
|
||||
public static let tomlConfigUrl = "https://git.housh.dev/michael/swift-hpa/raw/branch/main/Sources/ConfigurationClient/Resources/hpa.toml"
|
||||
}
|
||||
|
||||
extension [String: String] {
|
||||
|
||||
@@ -18,6 +18,8 @@ struct ConfigurationClientTests: TestCase {
|
||||
@Test(arguments: ["config.toml", "config.json"])
|
||||
func generateConfigFile(fileName: String) async throws {
|
||||
try await withTestLogger(key: "generateConfigFile") {
|
||||
$0.asyncShellClient = .liveValue
|
||||
$0.commandClient = .liveValue
|
||||
$0.coders = .liveValue
|
||||
$0.fileClient = .liveValue
|
||||
} operation: {
|
||||
@@ -42,6 +44,8 @@ struct ConfigurationClientTests: TestCase {
|
||||
@Test(arguments: ["config.toml", "config.json", nil])
|
||||
func loadConfigFile(fileName: String?) async throws {
|
||||
try await withTestLogger(key: "generateConfigFile") {
|
||||
$0.asyncShellClient = .liveValue
|
||||
$0.commandClient = .liveValue
|
||||
$0.coders = .liveValue
|
||||
$0.fileClient = .liveValue
|
||||
} operation: {
|
||||
@@ -65,6 +69,8 @@ struct ConfigurationClientTests: TestCase {
|
||||
@Test(arguments: ["config.toml", "config.json", ".hparc.json", ".hparc.toml"])
|
||||
func findConfiguration(fileName: String) async throws {
|
||||
try await withTestLogger(key: "findConfiguration") {
|
||||
$0.asyncShellClient = .liveValue
|
||||
$0.commandClient = .liveValue
|
||||
$0.fileClient = .liveValue
|
||||
} operation: {
|
||||
@Dependency(\.logger) var logger
|
||||
@@ -94,6 +100,8 @@ struct ConfigurationClientTests: TestCase {
|
||||
@Test(arguments: ["config.toml", "config.json", ".hparc.json", ".hparc.toml"])
|
||||
func findXdgConfiguration(fileName: String) async throws {
|
||||
try await withTestLogger(key: "findXdgConfiguration") {
|
||||
$0.asyncShellClient = .liveValue
|
||||
$0.commandClient = .liveValue
|
||||
$0.fileClient = .liveValue
|
||||
} operation: {
|
||||
@Dependency(\.logger) var logger
|
||||
@@ -133,6 +141,8 @@ struct ConfigurationClientTests: TestCase {
|
||||
@Test
|
||||
func writeCreatesBackupFile() async throws {
|
||||
try await withDependencies {
|
||||
$0.asyncShellClient = .liveValue
|
||||
$0.commandClient = .liveValue
|
||||
$0.fileClient = .liveValue
|
||||
} operation: {
|
||||
let client = ConfigurationClient.liveValue
|
||||
|
||||
2
justfile
2
justfile
@@ -26,6 +26,8 @@ build-docker file="Dockerfile" tag="latest":
|
||||
--file docker/{{file}} \
|
||||
--tag {{docker_image_name}}:{{tag}} .
|
||||
|
||||
build-docker-test: (build-docker "Dockerfile.test" "test")
|
||||
|
||||
# Build the docker test image used for testing.
|
||||
build-docker-test: (build-docker "Dockerfile.test" "test")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user