Files

119 lines
4.3 KiB
YAML

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