@@ -2,6 +2,26 @@ fn release_workflow() -> &'static str {
22 include_str ! ( "../.github/workflows/release.yml" )
33}
44
5+ fn release_quality_policy_script ( ) -> & ' static str {
6+ include_str ! ( "../.github/release-quality-policy.sh" )
7+ }
8+
9+ fn release_quality_policy (
10+ blocking_commands : & str ,
11+ audit_result : & str ,
12+ lint_result : & str ,
13+ test_result : & str ,
14+ ) -> std:: process:: Output {
15+ std:: process:: Command :: new ( "bash" )
16+ . arg ( ".github/release-quality-policy.sh" )
17+ . env ( "BLOCKING_COMMANDS" , blocking_commands)
18+ . env ( "AUDIT_RESULT" , audit_result)
19+ . env ( "LINT_RESULT" , lint_result)
20+ . env ( "TEST_RESULT" , test_result)
21+ . output ( )
22+ . expect ( "release quality policy should run" )
23+ }
24+
525fn job_section < ' a > ( workflow : & ' a str , job : & str ) -> & ' a str {
626 let marker = format ! ( " {job}:\n " ) ;
727 let start = workflow
@@ -51,13 +71,28 @@ fn release_quality_policy_defaults_to_lint_and_test_blocking() {
5171 let policy = job_section ( release_workflow ( ) , "release-quality-policy" ) ;
5272
5373 assert ! ( policy. contains( "BLOCKING_COMMANDS: ${{ env.RELEASE_BLOCKING_COMMANDS }}" ) ) ;
74+ assert ! ( policy. contains( "bash .github/release-quality-policy.sh" ) ) ;
5475 assert ! ( policy. contains(
5576 "AUDIT_RESULT: ${{ needs.gate-audit.outputs.audit-result || needs.gate-audit.result }}"
5677 ) ) ;
57- assert ! ( policy. contains( "check_command audit" ) ) ;
58- assert ! ( policy. contains( "check_command lint" ) ) ;
59- assert ! ( policy. contains( "check_command test" ) ) ;
60- assert ! ( policy. contains( "Command ${command} is tracked but not release-blocking" ) ) ;
78+ assert ! ( release_quality_policy_script( ) . contains( "check_command audit" ) ) ;
79+ assert ! ( release_quality_policy_script( ) . contains( "check_command lint" ) ) ;
80+ assert ! ( release_quality_policy_script( ) . contains( "check_command test" ) ) ;
81+ assert ! ( release_quality_policy_script( )
82+ . contains( "Command ${command} is tracked but not release-blocking" ) ) ;
83+ }
84+
85+ #[ test]
86+ fn release_quality_policy_blocks_review_test_failures_and_allows_passing_gates ( ) {
87+ let failed = release_quality_policy ( "review lint,review test" , "failure" , "success" , "failure" ) ;
88+
89+ assert ! ( !failed. status. success( ) ) ;
90+ assert ! ( String :: from_utf8_lossy( & failed. stdout)
91+ . contains( "Release-blocking command test finished with result: failure" ) ) ;
92+
93+ let passed = release_quality_policy ( "review lint,review test" , "failure" , "success" , "success" ) ;
94+
95+ assert ! ( passed. status. success( ) ) ;
6196}
6297
6398#[ test]
0 commit comments