@@ -145,6 +145,7 @@ async function main() {
145145 throw new Error ( 'Either `project`, `workspace` or `spm-package-path` must be set, but they are mutually exclusive!' ) ;
146146 }
147147 const scheme = core . getInput ( 'scheme' , { required : ! ! workspace || ! ! spmPackage } ) ;
148+ const disableEnumInputValidation = core . getBooleanInput ( 'disable-enum-input-validation' ) ;
148149 function _pushArg ( name , value ) {
149150 xcodebuildArgs . push ( { name : `-${ name } ` , value : value } ) ;
150151 }
@@ -160,40 +161,58 @@ async function main() {
160161 _pushArg ( name , { originalValue : value , resolvedValue : processedValue } ) ;
161162 }
162163 function _addInputArg ( inputName , argName , opts ) {
163- if ( opts ?. isList ) {
164+ if ( opts ?. isList ) { // opts is guaranteed to be set in this branch.
164165 let values = core . getMultilineInput ( inputName ) ;
165- if ( values )
166- values . forEach ( value => _pushArgWithValue ( argName ?? inputName , value , {
167- isPath : opts ?. isPath ,
166+ if ( ! values )
167+ return false ;
168+ for ( const value of values ) {
169+ if ( ! disableEnumInputValidation && opts . validValues && ! opts . validValues . includes ( value ) )
170+ throw new Error ( `Invalid value for ${ inputName } : ${ value } ! Valid values: ${ opts . validValues . join ( ', ' ) } ` ) ;
171+ _pushArgWithValue ( argName ?? inputName , value , {
172+ isPath : opts . isPath ,
168173 skipEmptyValues : true ,
169- } ) ) ;
174+ } ) ;
175+ }
176+ return values . length > 0 ;
170177 }
171178 else {
172179 let value = core . getInput ( inputName ) ;
173- if ( value )
174- _pushArgWithValue ( argName ?? inputName , value , {
175- isPath : opts ?. isPath ,
176- skipEmptyValues : false ,
177- } ) ;
180+ if ( ! value )
181+ return false ;
182+ if ( ! disableEnumInputValidation && opts ?. validValues && ! opts . validValues . includes ( value ) )
183+ throw new Error ( `Invalid value for ${ inputName } : ${ value } ! Valid values: ${ opts . validValues . join ( ', ' ) } ` ) ;
184+ _pushArgWithValue ( argName ?? inputName , value , {
185+ isPath : opts ?. isPath ,
186+ skipEmptyValues : false ,
187+ } ) ;
188+ return true ;
178189 }
179190 }
180191 function addInputArg ( inputName , argName ) {
181- _addInputArg ( inputName , argName ) ;
192+ return _addInputArg ( inputName , argName ) ;
182193 }
183194 function addPathArg ( inputName , argName ) {
184- _addInputArg ( inputName , argName , { isPath : true } ) ;
195+ return _addInputArg ( inputName , argName , { isPath : true } ) ;
185196 }
186197 function addListArg ( inputName , argName ) {
187- _addInputArg ( inputName , argName , { isList : true } ) ;
198+ return _addInputArg ( inputName , argName , { isList : true } ) ;
199+ }
200+ function addEnumArg ( inputName , validValues , argName ) {
201+ return _addInputArg ( inputName , argName , { validValues } ) ;
188202 }
189203 function addBoolArg ( inputName , argName ) {
190204 const value = core . getInput ( inputName ) ;
191- if ( value ?. length )
205+ const hasValue = ! ! value && value . length > 0 ;
206+ if ( hasValue )
192207 _pushArgWithValue ( argName ?? inputName , core . getBooleanInput ( inputName ) ? 'YES' : 'NO' ) ;
208+ return hasValue ;
193209 }
194210 function addFlagArg ( inputName , argName ) {
195- if ( core . getInput ( inputName ) . length && core . getBooleanInput ( inputName ) )
211+ const value = core . getInput ( inputName ) ;
212+ const hasValue = ! ! value && value . length > 0 ;
213+ if ( hasValue && core . getBooleanInput ( inputName ) )
196214 _pushArg ( argName ?? inputName ) ;
215+ return hasValue ;
197216 }
198217 if ( workspace ) {
199218 _pushArgWithValue ( 'workspace' , workspace , { isPath : true } ) ;
@@ -203,12 +222,14 @@ async function main() {
203222 }
204223 if ( scheme )
205224 _pushArgWithValue ( 'scheme' , scheme ) ;
206- addInputArg ( 'target' ) ;
225+ if ( addInputArg ( 'target' ) && addFlagArg ( 'all-targets' , 'alltargets' ) )
226+ throw new Error ( '`target` and `all-targets` are mutually exclusive!' ) ;
207227 addInputArg ( 'destination' ) ;
208228 addInputArg ( 'configuration' ) ;
209229 addInputArg ( 'sdk' ) ;
210230 addInputArg ( 'arch' ) ;
211231 addPathArg ( 'xcconfig' ) ;
232+ addInputArg ( 'toolchain' ) ;
212233 addInputArg ( 'jobs' ) ;
213234 addFlagArg ( 'parallelize-targets' , 'parallelizeTargets' ) ;
214235 addBoolArg ( 'enable-code-coverage' , 'enableCodeCoverage' ) ;
@@ -225,19 +246,35 @@ async function main() {
225246 addPathArg ( 'cloned-source-packages-path' , 'clonedSourcePackagesDirPath' ) ;
226247 addPathArg ( 'package-cache-path' , 'packageCachePath' ) ;
227248 addPathArg ( 'derived-data-path' , 'derivedDataPath' ) ;
249+ addInputArg ( 'default-package-registry-url' , 'defaultPackageRegistryURL' ) ;
250+ addEnumArg ( 'package-dependency-scm-to-registry-transformation' , [ 'none' , 'useRegistryIdentity' , 'useRegistryIdentityAndSources' ] , 'packageDependencySCMToRegistryTransformation' ) ;
228251 addFlagArg ( 'disable-package-repository-cache' , 'disablePackageRepositoryCache' ) ;
229252 addFlagArg ( 'disable-automatic-package-resolution' , 'disableAutomaticPackageResolution' ) ;
230253 addFlagArg ( 'skip-package-updates' , 'skipPackageUpdates' ) ;
231254 addFlagArg ( 'skip-package-plugin-validation' , 'skipPackagePluginValidation' ) ;
232255 addFlagArg ( 'skip-macro-validation' , 'skipMacroValidation' ) ;
256+ addEnumArg ( 'package-fingerprint-policy' , [ 'warn' , 'strict' ] , 'packageFingerprintPolicy' ) ;
257+ addEnumArg ( 'package-signing-entity-policy' , [ 'warn' , 'strict' ] , 'packageSigningEntityPolicy' ) ;
233258 addPathArg ( 'xcroot' ) ;
234259 addPathArg ( 'xctestrun' ) ;
260+ addInputArg ( 'test-language' , 'testLanguage' ) ;
261+ addInputArg ( 'test-region' , 'testRegion' ) ;
235262 addInputArg ( 'test-plan' , 'testPlan' ) ;
236263 addListArg ( 'only-testing' ) ;
237264 addListArg ( 'skip-testing' ) ;
265+ addListArg ( 'only-test-configuration' ) ;
266+ addListArg ( 'skip-test-configuration' ) ;
267+ addInputArg ( 'test-iterations' ) ;
268+ addFlagArg ( 'retry-tests-on-failure' ) ;
269+ addFlagArg ( 'run-tests-until-failure' ) ;
238270 addFlagArg ( 'skip-unavailable-actions' , 'skipUnavailableActions' ) ;
239271 addFlagArg ( 'allow-provisioning-updates' , 'allowProvisioningUpdates' ) ;
240272 addFlagArg ( 'allow-provisioning-device-registration' , 'allowProvisioningDeviceRegistration' ) ;
273+ addFlagArg ( 'export-notarized-app' , 'exportNotarizedApp' ) ;
274+ addPathArg ( 'export-options-plist' , 'exportOptionsPlist' ) ;
275+ addFlagArg ( 'export-archive' , 'exportArchive' ) ;
276+ addPathArg ( 'archive-path' , 'archivePath' ) ;
277+ addFlagArg ( 'create-xcframework' ) ;
241278 const buildSettings = core . getInput ( 'build-settings' ) ;
242279 if ( buildSettings )
243280 xcodebuildArgs . push ( ...buildSettings . split ( ' ' ) . map ( v => { return { name : v } ; } ) ) ;
0 commit comments