name: Control iOS Xcode Cloud on: workflow_dispatch: inputs: mode: description: Inspect workflows or start the selected Archive workflow required: true type: choice options: - inspect - start - monitor - describe - store-status - cancel-review default: inspect workflow_id: description: Optional Xcode Cloud workflow ID; auto-selects a single enabled Archive workflow when empty required: false type: string build_run_id: description: Xcode Cloud build run ID to monitor required: false type: string app_store_version: description: App Store marketing version to inspect required: false type: string app_store_build_id: description: App Store Connect build resource ID to inspect required: false type: string current_review_build_id: description: Exact linked build ID expected before canceling a mismatched review required: false type: string permissions: contents: read jobs: xcode-cloud: if: github.repository == 'tianma-if/edgeever' runs-on: ubuntu-latest timeout-minutes: 90 steps: - name: Check out Xcode Cloud tooling uses: actions/checkout@v5 - name: Install App Store Connect client dependencies run: python3 -m pip install --quiet PyJWT cryptography - name: Inspect, start, or monitor Xcode Cloud env: ASC_APP_ID: "6792625631" ASC_API_ISSUER: ${{ secrets.EDGEEVER_APPLE_API_ISSUER }} ASC_API_KEY_ID: ${{ secrets.EDGEEVER_APPLE_API_KEY_ID }} ASC_API_KEY_BASE64: ${{ secrets.EDGEEVER_APPLE_API_KEY_BASE64 }} XCODE_CLOUD_MODE: ${{ inputs.mode }} XCODE_CLOUD_WORKFLOW_ID: ${{ inputs.workflow_id }} XCODE_CLOUD_BUILD_RUN_ID: ${{ inputs.build_run_id }} APP_STORE_VERSION: ${{ inputs.app_store_version }} APP_STORE_BUILD_ID: ${{ inputs.app_store_build_id }} CURRENT_REVIEW_BUILD_ID: ${{ inputs.current_review_build_id }} run: | case "$XCODE_CLOUD_MODE" in inspect) python3 scripts/xcode-cloud-control.py inspect ;; start) args=(start --wait) if [[ -n "$XCODE_CLOUD_WORKFLOW_ID" ]]; then args+=(--workflow-id "$XCODE_CLOUD_WORKFLOW_ID") fi python3 scripts/xcode-cloud-control.py "${args[@]}" ;; describe) if [[ -z "$XCODE_CLOUD_BUILD_RUN_ID" ]]; then echo "::error::build_run_id is required in describe mode" exit 1 fi python3 scripts/xcode-cloud-control.py describe \ --build-run-id "$XCODE_CLOUD_BUILD_RUN_ID" ;; monitor) if [[ -z "$XCODE_CLOUD_BUILD_RUN_ID" ]]; then echo "::error::build_run_id is required in monitor mode" exit 1 fi python3 scripts/xcode-cloud-control.py wait \ --build-run-id "$XCODE_CLOUD_BUILD_RUN_ID" \ --wait-valid ;; store-status) if [[ -z "$APP_STORE_VERSION" || -z "$APP_STORE_BUILD_ID" ]]; then echo "::error::app_store_version and app_store_build_id are required in store-status mode" exit 1 fi python3 scripts/xcode-cloud-control.py store-status \ --version "$APP_STORE_VERSION" \ --build-id "$APP_STORE_BUILD_ID" ;; cancel-review) if [[ -z "$APP_STORE_VERSION" || -z "$APP_STORE_BUILD_ID" || -z "$CURRENT_REVIEW_BUILD_ID" ]]; then echo "::error::app_store_version, app_store_build_id, and current_review_build_id are required in cancel-review mode" exit 1 fi python3 scripts/xcode-cloud-control.py cancel-review \ --version "$APP_STORE_VERSION" \ --current-build-id "$CURRENT_REVIEW_BUILD_ID" \ --replacement-build-id "$APP_STORE_BUILD_ID" ;; *) echo "::error::Unsupported Xcode Cloud mode: $XCODE_CLOUD_MODE" exit 1 ;; esac