From b6e47f870a04c66176ae317b9c54c17ded4e5560 Mon Sep 17 00:00:00 2001 From: rdlabo Date: Wed, 16 Sep 2026 16:48:34 +0900 Subject: [PATCH 1/4] ci: run native simulator suites on the Xcode 27 runner Wire the existing local verification scripts into a scheduled/manual workflow so the iOS 27 projection checks (page tour, placement, search, edge gestures) run on real simulators instead of only on maintainer machines. Three matrix jobs keep wall-clock time low, and DerivedData is cached per suite. The consumer fixture no longer passes --ignore-scripts because it skipped the git dependency prepare step and left @rdlabo/ionic-theme-utils without its dist build. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- .github/workflows/native-e2e.yml | 98 +++++++++++++++++++++++++++++++ scripts/ci-simulator.sh | 50 ++++++++++++++++ scripts/verify-native-search.sh | 7 ++- scripts/verify-native-ui-shell.sh | 7 ++- 4 files changed, 160 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/native-e2e.yml create mode 100644 scripts/ci-simulator.sh diff --git a/.github/workflows/native-e2e.yml b/.github/workflows/native-e2e.yml new file mode 100644 index 00000000..38992349 --- /dev/null +++ b/.github/workflows/native-e2e.yml @@ -0,0 +1,98 @@ +name: Native Simulator Tests + +on: + push: + branches: + - ci/native-e2e + workflow_dispatch: + schedule: + - cron: '0 18 * * 0' # Weekly, Monday 03:00 JST + +permissions: + contents: read + +concurrency: + group: native-e2e-${{ github.ref }} + cancel-in-progress: false + +jobs: + suite: + timeout-minutes: 75 + runs-on: xcode-27 + strategy: + fail-fast: false + matrix: + include: + - suite: ui-shell + script: scripts/verify-native-ui-shell.sh + kana: '' + - suite: search + script: scripts/verify-native-search.sh + scenario: search + kana: kana + - suite: edge + script: scripts/verify-native-search.sh + scenario: edge + kana: '' + env: + DEVELOPER_DIR: /Applications/Xcode_27.0.app/Contents/Developer + VERIFY_ARTIFACTS_DIR: ${{ runner.temp }}/native-${{ matrix.suite }} + steps: + - uses: actions/checkout@v5 + - uses: actions/setup-node@v5 + with: + node-version: 24 + + - id: meta + run: | + xcodebuild -version + echo "xcode_version=$(xcodebuild -version | head -n 1 | tr ' ' '-')" >> "$GITHUB_OUTPUT" + echo "image_version=${ImageVersion:-unknown}" >> "$GITHUB_OUTPUT" + + - uses: actions/cache@v5 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + + - name: Restore incremental build products + uses: actions/cache@v5 + with: + path: ${{ env.VERIFY_ARTIFACTS_DIR }} + key: native-${{ matrix.suite }}-${{ steps.meta.outputs.xcode_version }}-${{ hashFiles('**/package-lock.json', 'ios/**', 'demo/ios/**', 'demo/native-*-fixture/**', 'src/**') }} + restore-keys: | + native-${{ matrix.suite }}-${{ steps.meta.outputs.xcode_version }}- + + - name: Install XcodeGen + run: brew list xcodegen >/dev/null 2>&1 || brew install xcodegen + + - run: npm ci + - run: npm ci + working-directory: './demo' + + - name: Create and boot simulator + run: sh scripts/ci-simulator.sh "iPhone 17" "iOS 27.0" ${{ matrix.kana }} + + - name: Run ${{ matrix.suite }} suite + run: sh ${{ matrix.script }} "$SIM_UDID" ${{ matrix.scenario }} + + - name: Upload screenshots and logs + uses: actions/upload-artifact@v5 + if: always() + with: + name: native-${{ matrix.suite }}-screenshots + path: | + ${{ env.VERIFY_ARTIFACTS_DIR }}/screenshots + ${{ env.VERIFY_ARTIFACTS_DIR }}/*.log + if-no-files-found: warn + retention-days: 7 + + - name: Upload result bundle on failure + uses: actions/upload-artifact@v5 + if: failure() + with: + name: native-${{ matrix.suite }}-xcresult + path: ${{ env.VERIFY_ARTIFACTS_DIR }}/tests.xcresult + if-no-files-found: warn + retention-days: 7 diff --git a/scripts/ci-simulator.sh b/scripts/ci-simulator.sh new file mode 100644 index 00000000..cdb9444d --- /dev/null +++ b/scripts/ci-simulator.sh @@ -0,0 +1,50 @@ +#!/bin/sh +# Create, configure, and boot an iOS Simulator for CI runs. +# Usage: sh scripts/ci-simulator.sh DEVICE_NAME RUNTIME_NAME [kana] +# DEVICE_NAME e.g. "iPhone 17" (xcrun simctl list devicetypes) +# RUNTIME_NAME e.g. "iOS 27.0" (xcrun simctl list runtimes) +# kana enable the Japanese Kana keyboard for the search suite +# Prints the booted device UDID on the last stdout line and exports SIM_UDID +# to GITHUB_ENV when running under GitHub Actions. +set -eu + +device=${1:?Usage: ci-simulator.sh DEVICE_NAME RUNTIME_NAME [kana]} +runtime=${2:?Usage: ci-simulator.sh DEVICE_NAME RUNTIME_NAME [kana]} +extra=${3:-} + +device_type=$(xcrun simctl list devicetypes -j | jq -r --arg name "$device" \ + '.devicetypes[] | select(.name == $name) | .identifier' | head -n 1) +runtime_id=$(xcrun simctl list runtimes -j | jq -r --arg name "$runtime" \ + '.runtimes[] | select(.name == $name and .isAvailable) | .identifier' | head -n 1) + +if [ -z "$device_type" ] || [ -z "$runtime_id" ]; then + printf 'Could not resolve device "%s" or runtime "%s".\n' "$device" "$runtime" >&2 + xcrun simctl list devicetypes >&2 + xcrun simctl list runtimes >&2 + exit 1 +fi + +udid=$(xcrun simctl create "ci-$runtime-$device" "$device_type" "$runtime_id") +printf 'Created simulator %s (%s / %s)\n' "$udid" "$device" "$runtime" + +# The simulator reads this host default at boot; keep the software keyboard. +defaults write com.apple.iphonesimulator ConnectHardwareKeyboard -bool false + +xcrun simctl boot "$udid" 2>/dev/null || true +xcrun simctl bootstatus "$udid" -b + +if [ "$extra" = "kana" ]; then + # First boot resets preferences, so write inside the booted sim and reboot + # to let the text input service pick up the Kana keyboard. + xcrun simctl spawn "$udid" defaults write com.apple.Preferences AppleKeyboards -array "en_US@sw=QWERTY" "ja_JP@sw=Kana" + xcrun simctl spawn "$udid" defaults write com.apple.Preferences AppleKeyboardsVisible -array "en_US@sw=QWERTY" "ja_JP@sw=Kana" + xcrun simctl shutdown "$udid" + xcrun simctl boot "$udid" + xcrun simctl bootstatus "$udid" -b + printf 'Enabled Kana keyboard preferences.\n' +fi + +if [ "${GITHUB_ENV:-}" ]; then + printf 'SIM_UDID=%s\n' "$udid" >> "$GITHUB_ENV" +fi +printf '%s\n' "$udid" diff --git a/scripts/verify-native-search.sh b/scripts/verify-native-search.sh index 5292b7d2..5517d801 100644 --- a/scripts/verify-native-search.sh +++ b/scripts/verify-native-search.sh @@ -10,7 +10,12 @@ case "$scenario" in esac repo=$(CDPATH='' cd -- "$(dirname -- "$0")/.." && pwd) fixture="$repo/demo/native-$scenario-fixture" -artifacts=$(mktemp -d "/tmp/ionic-native-$scenario-verification.XXXXXX") +if [ "${VERIFY_ARTIFACTS_DIR:-}" ]; then + artifacts=$VERIFY_ARTIFACTS_DIR + mkdir -p "$artifacts" +else + artifacts=$(mktemp -d "/tmp/ionic-native-$scenario-verification.XXXXXX") +fi printf 'Native %s verification artifacts: %s\n' "$scenario" "$artifacts" cd "$repo" npm run build diff --git a/scripts/verify-native-ui-shell.sh b/scripts/verify-native-ui-shell.sh index b3f0d231..75978c56 100644 --- a/scripts/verify-native-ui-shell.sh +++ b/scripts/verify-native-ui-shell.sh @@ -6,7 +6,12 @@ set -eu simulator=${1:?Usage: sh scripts/verify-native-ui-shell.sh SIMULATOR_UDID} repo=$(CDPATH='' cd -- "$(dirname -- "$0")/.." && pwd) -artifacts=$(mktemp -d /tmp/ionic-native-ui-shell-verification.XXXXXX) +if [ "${VERIFY_ARTIFACTS_DIR:-}" ]; then + artifacts=$VERIFY_ARTIFACTS_DIR + mkdir -p "$artifacts" +else + artifacts=$(mktemp -d /tmp/ionic-native-ui-shell-verification.XXXXXX) +fi printf 'Native UI Shell verification artifacts: %s\n' "$artifacts" cd "$repo" From 8810be0c26326505646003c019c8bfe11d445962 Mon Sep 17 00:00:00 2001 From: rdlabo Date: Wed, 16 Sep 2026 16:51:03 +0900 Subject: [PATCH 2/4] ci: probe runner availability with macos-26 --- .github/workflows/native-e2e.yml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/.github/workflows/native-e2e.yml b/.github/workflows/native-e2e.yml index 38992349..23a39ab9 100644 --- a/.github/workflows/native-e2e.yml +++ b/.github/workflows/native-e2e.yml @@ -18,7 +18,7 @@ concurrency: jobs: suite: timeout-minutes: 75 - runs-on: xcode-27 + runs-on: macos-26 strategy: fail-fast: false matrix: @@ -35,8 +35,7 @@ jobs: scenario: edge kana: '' env: - DEVELOPER_DIR: /Applications/Xcode_27.0.app/Contents/Developer - VERIFY_ARTIFACTS_DIR: ${{ runner.temp }}/native-${{ matrix.suite }} + DEVELOPER_DIR: /Applications/Xcode_26.6.app/Contents/Developer steps: - uses: actions/checkout@v5 - uses: actions/setup-node@v5 @@ -59,7 +58,7 @@ jobs: - name: Restore incremental build products uses: actions/cache@v5 with: - path: ${{ env.VERIFY_ARTIFACTS_DIR }} + path: ${{ runner.temp }}/native-${{ matrix.suite }} key: native-${{ matrix.suite }}-${{ steps.meta.outputs.xcode_version }}-${{ hashFiles('**/package-lock.json', 'ios/**', 'demo/ios/**', 'demo/native-*-fixture/**', 'src/**') }} restore-keys: | native-${{ matrix.suite }}-${{ steps.meta.outputs.xcode_version }}- @@ -72,10 +71,12 @@ jobs: working-directory: './demo' - name: Create and boot simulator - run: sh scripts/ci-simulator.sh "iPhone 17" "iOS 27.0" ${{ matrix.kana }} + run: sh scripts/ci-simulator.sh "iPhone 17" "iOS 26.5" ${{ matrix.kana }} - name: Run ${{ matrix.suite }} suite run: sh ${{ matrix.script }} "$SIM_UDID" ${{ matrix.scenario }} + env: + VERIFY_ARTIFACTS_DIR: ${{ runner.temp }}/native-${{ matrix.suite }} - name: Upload screenshots and logs uses: actions/upload-artifact@v5 @@ -83,8 +84,8 @@ jobs: with: name: native-${{ matrix.suite }}-screenshots path: | - ${{ env.VERIFY_ARTIFACTS_DIR }}/screenshots - ${{ env.VERIFY_ARTIFACTS_DIR }}/*.log + ${{ runner.temp }}/native-${{ matrix.suite }}/screenshots + ${{ runner.temp }}/native-${{ matrix.suite }}/*.log if-no-files-found: warn retention-days: 7 @@ -93,6 +94,6 @@ jobs: if: failure() with: name: native-${{ matrix.suite }}-xcresult - path: ${{ env.VERIFY_ARTIFACTS_DIR }}/tests.xcresult + path: ${{ runner.temp }}/native-${{ matrix.suite }}/tests.xcresult if-no-files-found: warn retention-days: 7 From f8ce33270b3c32dbe983161a1d1170182e016d4e Mon Sep 17 00:00:00 2001 From: rdlabo Date: Wed, 16 Sep 2026 16:52:01 +0900 Subject: [PATCH 3/4] ci: probe xcode-27-arm64 label --- .github/workflows/native-e2e.yml | 2 +- scripts/verify-native-search.sh | 4 +++- scripts/verify-native-ui-shell.sh | 4 +++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/native-e2e.yml b/.github/workflows/native-e2e.yml index 23a39ab9..c999c3f9 100644 --- a/.github/workflows/native-e2e.yml +++ b/.github/workflows/native-e2e.yml @@ -18,7 +18,7 @@ concurrency: jobs: suite: timeout-minutes: 75 - runs-on: macos-26 + runs-on: xcode-27-arm64 strategy: fail-fast: false matrix: diff --git a/scripts/verify-native-search.sh b/scripts/verify-native-search.sh index 5517d801..9738d77d 100644 --- a/scripts/verify-native-search.sh +++ b/scripts/verify-native-search.sh @@ -33,7 +33,9 @@ const file = process.argv[2]; writeFileSync(file, readFileSync(file, 'utf8').replace('', ``)); JS cd "$artifacts/consumer" -npm install --ignore-scripts "$artifacts/$archive" @capacitor/core@8.5.2 @capacitor/ios@8.5.2 @capacitor/cli@8.5.2 @capacitor/keyboard@8.0.5 @ionic/core@8.8.19 +# --ignore-scripts would skip the git dependency's prepare script, leaving +# @rdlabo/ionic-theme-utils without its dist build. +npm install "$artifacts/$archive" @capacitor/core@8.5.2 @capacitor/ios@8.5.2 @capacitor/cli@8.5.2 @capacitor/keyboard@8.0.5 @ionic/core@8.8.19 npx cap add ios --packagemanager SPM xcodebuild -project ios/App/App.xcodeproj -scheme App -configuration Debug \ -sdk iphonesimulator -destination "platform=iOS Simulator,id=$simulator" \ diff --git a/scripts/verify-native-ui-shell.sh b/scripts/verify-native-ui-shell.sh index 75978c56..9544c5d1 100644 --- a/scripts/verify-native-ui-shell.sh +++ b/scripts/verify-native-ui-shell.sh @@ -31,7 +31,9 @@ mkdir -p "$artifacts/consumer/www" cp "$repo/demo/native-package-fixture/app.js" "$repo/demo/native-package-fixture/capacitor.config.json" "$artifacts/consumer/" cp "$repo/demo/native-package-fixture/index.html" "$artifacts/consumer/www/" cd "$artifacts/consumer" -npm install --ignore-scripts "$artifacts/$archive" @capacitor/core@8.5.2 @capacitor/ios@8.5.2 @capacitor/cli@8.5.2 @ionic/core@8.8.19 +# --ignore-scripts would skip the git dependency's prepare script, leaving +# @rdlabo/ionic-theme-utils without its dist build. +npm install "$artifacts/$archive" @capacitor/core@8.5.2 @capacitor/ios@8.5.2 @capacitor/cli@8.5.2 @ionic/core@8.8.19 "$repo/demo/node_modules/.bin/esbuild" app.js --bundle --format=esm --outdir=www npx cap add ios --packagemanager SPM xcodebuild -project ios/App/App.xcodeproj -scheme App -configuration Debug \ From 1d0ef36bea2de32289e9dca7bb51cb1bba172a17 Mon Sep 17 00:00:00 2001 From: rdlabo Date: Wed, 16 Sep 2026 18:53:13 +0900 Subject: [PATCH 4/4] ci: fetch simulator setup from ionic-theme-utils and harden consumer deps - scripts/ci-simulator.sh now lives in rdlabo-dev/ionic-theme-utils so both theme repos share one copy; the workflow fetches it at the pinned sha. - verify scripts build @rdlabo/ionic-theme-utils dist explicitly when npm skips `prepare` for the transitive git dependency (seen on CI runners). - retarget the suite to the xcode-27 image (iOS 27.0, default toolchain). Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- .github/workflows/native-e2e.yml | 13 +++++--- package-lock.json | 4 +-- package.json | 2 +- scripts/ci-simulator.sh | 50 ------------------------------- scripts/verify-native-search.sh | 5 ++++ scripts/verify-native-ui-shell.sh | 5 ++++ 6 files changed, 22 insertions(+), 57 deletions(-) delete mode 100644 scripts/ci-simulator.sh diff --git a/.github/workflows/native-e2e.yml b/.github/workflows/native-e2e.yml index c999c3f9..49f9ed5a 100644 --- a/.github/workflows/native-e2e.yml +++ b/.github/workflows/native-e2e.yml @@ -18,7 +18,9 @@ concurrency: jobs: suite: timeout-minutes: 75 - runs-on: xcode-27-arm64 + # xcode-27 preview label; Xcode 27 beta is the default toolchain on that + # image, so no DEVELOPER_DIR override is needed. + runs-on: xcode-27 strategy: fail-fast: false matrix: @@ -34,8 +36,6 @@ jobs: script: scripts/verify-native-search.sh scenario: edge kana: '' - env: - DEVELOPER_DIR: /Applications/Xcode_26.6.app/Contents/Developer steps: - uses: actions/checkout@v5 - uses: actions/setup-node@v5 @@ -70,8 +70,13 @@ jobs: - run: npm ci working-directory: './demo' + - name: Fetch shared simulator setup script + run: | + sha=$(jq -r '.packages["node_modules/@rdlabo/ionic-theme-utils"].resolved' package-lock.json | sed 's/.*#//') + curl -fsSL "https://raw.githubusercontent.com/rdlabo-dev/ionic-theme-utils/$sha/scripts/ci-simulator.sh" -o "$RUNNER_TEMP/ci-simulator.sh" + - name: Create and boot simulator - run: sh scripts/ci-simulator.sh "iPhone 17" "iOS 26.5" ${{ matrix.kana }} + run: sh "$RUNNER_TEMP/ci-simulator.sh" "iPhone 17" "iOS 27.0" ${{ matrix.kana }} - name: Run ${{ matrix.suite }} suite run: sh ${{ matrix.script }} "$SIM_UDID" ${{ matrix.scenario }} diff --git a/package-lock.json b/package-lock.json index 1c5e8879..8e9c2fa3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.1.0", "license": "MIT", "dependencies": { - "@rdlabo/ionic-theme-utils": "git+ssh://git@github.com/rdlabo-dev/ionic-theme-utils.git#66eb2fccca10646ebfccdfb3b6c2f3b4c9b00bf6" + "@rdlabo/ionic-theme-utils": "git+ssh://git@github.com/rdlabo-dev/ionic-theme-utils.git#ec42938042c0fb65ef6f3c312c4240d820a2cf6f" }, "devDependencies": { "@capacitor/core": "^8.5.2", @@ -2255,7 +2255,7 @@ }, "node_modules/@rdlabo/ionic-theme-utils": { "version": "0.1.0", - "resolved": "git+ssh://git@github.com/rdlabo-dev/ionic-theme-utils.git#66eb2fccca10646ebfccdfb3b6c2f3b4c9b00bf6", + "resolved": "git+ssh://git@github.com/rdlabo-dev/ionic-theme-utils.git#ec42938042c0fb65ef6f3c312c4240d820a2cf6f", "integrity": "sha512-0/aRkysY012ByvBJFaKBNiU5BFeR7uHCxuQ/BBprq1eHjOgS2AoyZwcBqhqP3SZDDDhnGKLK/SfLQYRySeFAng==", "license": "MIT", "peerDependencies": { diff --git a/package.json b/package.json index ef3343d1..1c41ebf3 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ }, "homepage": "https://docs.rdlabo.dev/projects/ionic-theme-ios27", "dependencies": { - "@rdlabo/ionic-theme-utils": "git+ssh://git@github.com/rdlabo-dev/ionic-theme-utils.git#66eb2fccca10646ebfccdfb3b6c2f3b4c9b00bf6" + "@rdlabo/ionic-theme-utils": "git+ssh://git@github.com/rdlabo-dev/ionic-theme-utils.git#ec42938042c0fb65ef6f3c312c4240d820a2cf6f" }, "devDependencies": { "@capacitor/core": "^8.5.2", diff --git a/scripts/ci-simulator.sh b/scripts/ci-simulator.sh deleted file mode 100644 index cdb9444d..00000000 --- a/scripts/ci-simulator.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/sh -# Create, configure, and boot an iOS Simulator for CI runs. -# Usage: sh scripts/ci-simulator.sh DEVICE_NAME RUNTIME_NAME [kana] -# DEVICE_NAME e.g. "iPhone 17" (xcrun simctl list devicetypes) -# RUNTIME_NAME e.g. "iOS 27.0" (xcrun simctl list runtimes) -# kana enable the Japanese Kana keyboard for the search suite -# Prints the booted device UDID on the last stdout line and exports SIM_UDID -# to GITHUB_ENV when running under GitHub Actions. -set -eu - -device=${1:?Usage: ci-simulator.sh DEVICE_NAME RUNTIME_NAME [kana]} -runtime=${2:?Usage: ci-simulator.sh DEVICE_NAME RUNTIME_NAME [kana]} -extra=${3:-} - -device_type=$(xcrun simctl list devicetypes -j | jq -r --arg name "$device" \ - '.devicetypes[] | select(.name == $name) | .identifier' | head -n 1) -runtime_id=$(xcrun simctl list runtimes -j | jq -r --arg name "$runtime" \ - '.runtimes[] | select(.name == $name and .isAvailable) | .identifier' | head -n 1) - -if [ -z "$device_type" ] || [ -z "$runtime_id" ]; then - printf 'Could not resolve device "%s" or runtime "%s".\n' "$device" "$runtime" >&2 - xcrun simctl list devicetypes >&2 - xcrun simctl list runtimes >&2 - exit 1 -fi - -udid=$(xcrun simctl create "ci-$runtime-$device" "$device_type" "$runtime_id") -printf 'Created simulator %s (%s / %s)\n' "$udid" "$device" "$runtime" - -# The simulator reads this host default at boot; keep the software keyboard. -defaults write com.apple.iphonesimulator ConnectHardwareKeyboard -bool false - -xcrun simctl boot "$udid" 2>/dev/null || true -xcrun simctl bootstatus "$udid" -b - -if [ "$extra" = "kana" ]; then - # First boot resets preferences, so write inside the booted sim and reboot - # to let the text input service pick up the Kana keyboard. - xcrun simctl spawn "$udid" defaults write com.apple.Preferences AppleKeyboards -array "en_US@sw=QWERTY" "ja_JP@sw=Kana" - xcrun simctl spawn "$udid" defaults write com.apple.Preferences AppleKeyboardsVisible -array "en_US@sw=QWERTY" "ja_JP@sw=Kana" - xcrun simctl shutdown "$udid" - xcrun simctl boot "$udid" - xcrun simctl bootstatus "$udid" -b - printf 'Enabled Kana keyboard preferences.\n' -fi - -if [ "${GITHUB_ENV:-}" ]; then - printf 'SIM_UDID=%s\n' "$udid" >> "$GITHUB_ENV" -fi -printf '%s\n' "$udid" diff --git a/scripts/verify-native-search.sh b/scripts/verify-native-search.sh index 9738d77d..a7bd4c97 100644 --- a/scripts/verify-native-search.sh +++ b/scripts/verify-native-search.sh @@ -36,6 +36,11 @@ cd "$artifacts/consumer" # --ignore-scripts would skip the git dependency's prepare script, leaving # @rdlabo/ionic-theme-utils without its dist build. npm install "$artifacts/$archive" @capacitor/core@8.5.2 @capacitor/ios@8.5.2 @capacitor/cli@8.5.2 @capacitor/keyboard@8.0.5 @ionic/core@8.8.19 +# Some npm versions skip `prepare` for transitive git dependencies; build the +# utils dist explicitly when it was not produced. +if [ ! -f node_modules/@rdlabo/ionic-theme-utils/dist/index.js ]; then + (cd node_modules/@rdlabo/ionic-theme-utils && npm install --no-save --no-audit --no-fund typescript && npm run build) +fi npx cap add ios --packagemanager SPM xcodebuild -project ios/App/App.xcodeproj -scheme App -configuration Debug \ -sdk iphonesimulator -destination "platform=iOS Simulator,id=$simulator" \ diff --git a/scripts/verify-native-ui-shell.sh b/scripts/verify-native-ui-shell.sh index 9544c5d1..9ed7c2ed 100644 --- a/scripts/verify-native-ui-shell.sh +++ b/scripts/verify-native-ui-shell.sh @@ -34,6 +34,11 @@ cd "$artifacts/consumer" # --ignore-scripts would skip the git dependency's prepare script, leaving # @rdlabo/ionic-theme-utils without its dist build. npm install "$artifacts/$archive" @capacitor/core@8.5.2 @capacitor/ios@8.5.2 @capacitor/cli@8.5.2 @ionic/core@8.8.19 +# Some npm versions skip `prepare` for transitive git dependencies; build the +# utils dist explicitly when it was not produced. +if [ ! -f node_modules/@rdlabo/ionic-theme-utils/dist/index.js ]; then + (cd node_modules/@rdlabo/ionic-theme-utils && npm install --no-save --no-audit --no-fund typescript && npm run build) +fi "$repo/demo/node_modules/.bin/esbuild" app.js --bundle --format=esm --outdir=www npx cap add ios --packagemanager SPM xcodebuild -project ios/App/App.xcodeproj -scheme App -configuration Debug \