@@ -21,14 +21,17 @@ import Vapor
2121struct EnvironmentClient {
2222 // See https://swiftpackageindex.com/pointfreeco/swift-dependencies/main/documentation/dependenciesmacros/dependencyclient()#Restrictions
2323 // regarding the use of XCTFail here.
24- var allowBuildTriggers : @Sendable ( ) -> Bool = { XCTFail ( #function ) ; return true }
25- var allowSocialPosts : @Sendable ( ) -> Bool = { XCTFail ( #function ) ; return true }
24+ var allowBuildTriggers : @Sendable ( ) -> Bool = { XCTFail ( " allowBuildTriggers " ) ; return true }
25+ var allowSocialPosts : @Sendable ( ) -> Bool = { XCTFail ( " allowSocialPosts " ) ; return true }
2626 var awsAccessKeyId : @Sendable ( ) -> String ?
2727 var awsDocsBucket : @Sendable ( ) -> String ?
2828 var awsReadmeBucket : @Sendable ( ) -> String ?
2929 var awsSecretAccessKey : @Sendable ( ) -> String ?
3030 var builderToken : @Sendable ( ) -> String ?
31- var buildTimeout : @Sendable ( ) -> Int = { XCTFail ( #function) ; return 10 }
31+ var buildTimeout : @Sendable ( ) -> Int = { XCTFail ( " buildTimeout " ) ; return 10 }
32+ var buildTriggerAllowList : @Sendable ( ) -> [ Package . Id ] = { XCTFail ( " buildTriggerAllowList " ) ; return [ ] }
33+ var buildTriggerDownscaling : @Sendable ( ) -> Double = { XCTFail ( " buildTriggerDownscaling " ) ; return 1 }
34+ var buildTriggerLatestSwiftVersionDownscaling : @Sendable ( ) -> Double = { XCTFail ( " buildTriggerLatestSwiftVersionDownscaling " ) ; return 1 }
3235 // We're not defaulting current to XCTFail, because its use is too pervasive and would require the vast
3336 // majority of tests to be wrapped with `withDependencies`.
3437 // We can do so at a later time once more tests are transitioned over for other dependencies. This is
@@ -37,6 +40,7 @@ struct EnvironmentClient {
3740 var current : @Sendable ( ) -> Environment = { . development }
3841 var mastodonCredentials : @Sendable ( ) -> Mastodon . Credentials ?
3942 var mastodonPost : @Sendable ( _ client: Client , _ post: String ) async throws -> Void
43+ var random : @Sendable ( _ range: ClosedRange < Double > ) -> Double = { XCTFail ( " random " ) ; return Double . random ( in: $0) }
4044}
4145
4246
@@ -57,17 +61,46 @@ extension EnvironmentClient: DependencyKey {
5761 awsSecretAccessKey: { Environment . get ( " AWS_SECRET_ACCESS_KEY " ) } ,
5862 builderToken: { Environment . get ( " BUILDER_TOKEN " ) } ,
5963 buildTimeout: { Environment . get ( " BUILD_TIMEOUT " ) . flatMap ( Int . init) ?? 10 } ,
64+ buildTriggerAllowList: {
65+ Environment . get ( " BUILD_TRIGGER_ALLOW_LIST " )
66+ . map { Data ( $0. utf8) }
67+ . flatMap { try ? JSONDecoder ( ) . decode ( [ Package . Id ] . self, from: $0) }
68+ ?? [ ]
69+ } ,
70+ buildTriggerDownscaling: {
71+ Environment . get ( " BUILD_TRIGGER_DOWNSCALING " )
72+ . flatMap ( Double . init)
73+ ?? 1.0
74+ } ,
75+ buildTriggerLatestSwiftVersionDownscaling: {
76+ Environment . get ( " BUILD_TRIGGER_LATEST_SWIFT_VERSION_DOWNSCALING " )
77+ . flatMap ( Double . init)
78+ ?? 1.0
79+ } ,
6080 current: { ( try ? Environment . detect ( ) ) ?? . development } ,
6181 mastodonCredentials: {
6282 Environment . get ( " MASTODON_ACCESS_TOKEN " )
6383 . map ( Mastodon . Credentials. init ( accessToken: ) )
6484 } ,
65- mastodonPost: { client, message in try await Mastodon . post ( client: client, message: message) }
85+ mastodonPost: { client, message in try await Mastodon . post ( client: client, message: message) } ,
86+ random: { range in Double . random ( in: range) }
6687 )
6788 }
6889}
6990
7091
92+ extension EnvironmentClient {
93+ var buildTriggerCandidatesWithLatestSwiftVersion : Bool {
94+ guard buildTriggerLatestSwiftVersionDownscaling ( ) < 1 else { return true }
95+ return random ( 0 ... 1 ) < buildTriggerLatestSwiftVersionDownscaling ( )
96+ }
97+
98+ var buildTriggerDownscalingAccepted : Bool {
99+ random ( 0 ... 1 ) < buildTriggerDownscaling ( )
100+ }
101+ }
102+
103+
71104extension EnvironmentClient : TestDependencyKey {
72105 static var testValue : Self { Self ( ) }
73106}
0 commit comments