@@ -45,7 +45,11 @@ struct EnvironmentClient {
4545 var loadSPIManifest : @Sendable ( String ) -> SPIManifest . Manifest ?
4646 var maintenanceMessage : @Sendable ( ) -> String ?
4747 var mastodonCredentials : @Sendable ( ) -> Mastodon . Credentials ?
48+ var metricsPushGatewayUrl : @Sendable ( ) -> String ?
49+ var plausibleBackendReportingSiteID : @Sendable ( ) -> String ?
50+ var processingBuildBacklog : @Sendable ( ) -> Bool = { XCTFail ( " processingBuildBacklog " ) ; return false }
4851 var random : @Sendable ( _ range: ClosedRange < Double > ) -> Double = { XCTFail ( " random " ) ; return Double . random ( in: $0) }
52+ var runnerIds : @Sendable ( ) -> [ String ] = { XCTFail ( " runnerIds " ) ; return [ ] }
4953
5054 enum FailureMode : String {
5155 case fetchMetadataFailed
@@ -55,7 +59,8 @@ struct EnvironmentClient {
5559 case repositorySaveFailed
5660 case repositorySaveUniqueViolation
5761 }
58- var shouldFail : @Sendable ( _ failureMode: FailureMode ) -> Bool = { _ in false }
62+ var shouldFail : @Sendable ( _ failureMode: FailureMode ) -> Bool = { _ in XCTFail ( " shouldFail " ) ; return false }
63+ var siteURL : @Sendable ( ) -> String = { XCTFail ( " siteURL " ) ; return " " }
5964}
6065
6166
@@ -79,10 +84,7 @@ extension EnvironmentClient: DependencyKey {
7984 builderToken: { Environment . get ( " BUILDER_TOKEN " ) } ,
8085 buildTimeout: { Environment . get ( " BUILD_TIMEOUT " ) . flatMap ( Int . init) ?? 10 } ,
8186 buildTriggerAllowList: {
82- Environment . get ( " BUILD_TRIGGER_ALLOW_LIST " )
83- . map { Data ( $0. utf8) }
84- . flatMap { try ? JSONDecoder ( ) . decode ( [ Package . Id ] . self, from: $0) }
85- ?? [ ]
87+ Environment . decode ( " BUILD_TRIGGER_ALLOW_LIST " , as: [ Package . Id ] . self) ?? [ ]
8688 } ,
8789 buildTriggerDownscaling: {
8890 Environment . get ( " BUILD_TRIGGER_DOWNSCALING " )
@@ -118,14 +120,19 @@ extension EnvironmentClient: DependencyKey {
118120 Environment . get ( " MASTODON_ACCESS_TOKEN " )
119121 . map ( Mastodon . Credentials. init ( accessToken: ) )
120122 } ,
123+ metricsPushGatewayUrl: { Environment . get ( " METRICS_PUSHGATEWAY_URL " ) } ,
124+ plausibleBackendReportingSiteID: { Environment . get ( " PLAUSIBLE_BACKEND_REPORTING_SITE_ID " ) } ,
125+ processingBuildBacklog: {
126+ Environment . get ( " PROCESSING_BUILD_BACKLOG " ) . flatMap ( \. asBool) ?? false
127+ } ,
121128 random: { range in Double . random ( in: range) } ,
129+ runnerIds: { Environment . decode ( " RUNNER_IDS " , as: [ String ] . self) ?? [ ] } ,
122130 shouldFail: { failureMode in
123- let shouldFail = Environment . get ( " FAILURE_MODE " )
124- . map { Data ( $0. utf8) }
125- . flatMap { try ? JSONDecoder ( ) . decode ( [ String : Double ] . self, from: $0) } ?? [ : ]
131+ let shouldFail = Environment . decode ( " FAILURE_MODE " , as: [ String : Double ] . self) ?? [ : ]
126132 guard let rate = shouldFail [ failureMode. rawValue] else { return false }
127133 return Double . random ( in: 0 ... 1 ) <= rate
128- }
134+ } ,
135+ siteURL: { Environment . get ( " SITE_URL " ) ?? " http://localhost:8080 " }
129136 )
130137 }
131138}
@@ -156,6 +163,8 @@ extension EnvironmentClient: TestDependencyKey {
156163 mock. appVersion = { " test " }
157164 mock. current = { . development }
158165 mock. hideStagingBanner = { false }
166+ mock. siteURL = { " http://localhost:8080 " }
167+ mock. shouldFail = { @Sendable _ in false }
159168 return mock
160169 }
161170}
@@ -167,3 +176,12 @@ extension DependencyValues {
167176 set { self [ EnvironmentClient . self] = newValue }
168177 }
169178}
179+
180+
181+ private extension Environment {
182+ static func decode< T: Decodable > ( _ key: String , as type: T . Type ) -> T ? {
183+ Environment . get ( key)
184+ . map { Data ( $0. utf8) }
185+ . flatMap { try ? JSONDecoder ( ) . decode ( type, from: $0) }
186+ }
187+ }
0 commit comments