From e589226bd3790c610d03bf7961336e31faefd9d1 Mon Sep 17 00:00:00 2001 From: Andrea Bueide Date: Wed, 18 Feb 2026 12:53:46 -0600 Subject: [PATCH 1/2] switch to segment-integration plugins --- .github/workflows/ci-e2e-full.yml | 30 +- .github/workflows/ci-e2e-latest.yml | 19 +- .github/workflows/publish.yml | 30 +- .../devices/max.json | 6 + .../devices/min.json | 6 + .../devices/max.json | 4 + .../devices/min.json | 4 + devbox.json | 103 +-- devbox.lock | 615 +++++++++++++----- nix/flake.lock | 27 - nix/flake.nix | 74 --- nix/platform-versions.json | 13 - scripts/android/env.sh | 82 --- scripts/android/manager.sh | 57 -- scripts/android/setup.sh | 150 ----- scripts/android/test.sh | 13 - scripts/build.sh | 10 - scripts/ios/env.sh | 55 -- scripts/ios/manager.sh | 51 -- scripts/ios/setup.sh | 69 -- scripts/ios/simctl.sh | 127 ---- scripts/ios/test.sh | 25 - scripts/platform-versions.sh | 12 - scripts/shared/common.sh | 54 -- shells/devbox-android.json | 21 - shells/devbox-fast.json | 7 +- shells/devbox-ios.json | 21 - shells/devbox.lock | 252 +++++-- shells/gradle.properties | 1 - 29 files changed, 699 insertions(+), 1239 deletions(-) create mode 100644 devbox.d/segment-integrations.devbox-plugins.android/devices/max.json create mode 100644 devbox.d/segment-integrations.devbox-plugins.android/devices/min.json create mode 100644 devbox.d/segment-integrations.devbox-plugins.ios/devices/max.json create mode 100644 devbox.d/segment-integrations.devbox-plugins.ios/devices/min.json delete mode 100644 nix/flake.lock delete mode 100644 nix/flake.nix delete mode 100644 nix/platform-versions.json delete mode 100755 scripts/android/env.sh delete mode 100755 scripts/android/manager.sh delete mode 100755 scripts/android/setup.sh delete mode 100755 scripts/android/test.sh delete mode 100755 scripts/build.sh delete mode 100755 scripts/ios/env.sh delete mode 100755 scripts/ios/manager.sh delete mode 100755 scripts/ios/setup.sh delete mode 100644 scripts/ios/simctl.sh delete mode 100755 scripts/ios/test.sh delete mode 100644 scripts/platform-versions.sh delete mode 100644 scripts/shared/common.sh delete mode 100644 shells/devbox-android.json delete mode 100644 shells/devbox-ios.json delete mode 100644 shells/gradle.properties diff --git a/.github/workflows/ci-e2e-full.yml b/.github/workflows/ci-e2e-full.yml index 31d37f8b4..830b95dd4 100644 --- a/.github/workflows/ci-e2e-full.yml +++ b/.github/workflows/ci-e2e-full.yml @@ -15,6 +15,7 @@ jobs: env: YARN_ENABLE_HARDENED_MODE: 0 XCODE_VERSION: '26.2' + ANDROID_SKIP_DOWNLOADS: 1 strategy: matrix: include: @@ -42,25 +43,20 @@ jobs: - name: devbox installer uses: jetify-com/devbox-install-action@v0.14.0 with: - project-path: shells/devbox-ios.json enable-cache: 'false' - name: Resolve iOS targets run: | - . scripts/platform-versions.sh - if [ "${{ matrix.name }}" = "ios-min" ]; then - echo "DETOX_IOS_DEVICE=${PLATFORM_IOS_MIN_DEVICE}" >> "$GITHUB_ENV" - echo "IOS_RUNTIME=${PLATFORM_IOS_MIN_RUNTIME}" >> "$GITHUB_ENV" - else - echo "DETOX_IOS_DEVICE=${PLATFORM_IOS_MAX_DEVICE}" >> "$GITHUB_ENV" - echo "IOS_RUNTIME=${PLATFORM_IOS_MAX_RUNTIME}" >> "$GITHUB_ENV" - fi + target=${{ matrix.name == 'ios-min' && 'min' || 'max' }} + device_json="devbox.d/segment-integrations.devbox-plugins.ios/devices/${target}.json" + echo "DETOX_IOS_DEVICE=$(jq -r '.name' "$device_json")" >> "$GITHUB_ENV" - name: iOS E2E Tests - run: devbox run --config=shells/devbox-ios.json test-ios + run: devbox run test-ios run-e2e-android: runs-on: ubuntu-24.04-arm env: EMU_HEADLESS: 1 + IOS_SKIP_SETUP: 1 strategy: matrix: include: @@ -89,19 +85,11 @@ jobs: - name: devbox installer uses: jetify-com/devbox-install-action@v0.14.0 with: - project-path: shells/devbox-android.json enable-cache: 'false' - name: Resolve Android targets run: | - . scripts/platform-versions.sh - if [ "${{ matrix.target }}" = "min" ]; then - api="$PLATFORM_ANDROID_MIN_API" - device="$PLATFORM_ANDROID_MIN_DEVICE" - else - api="$PLATFORM_ANDROID_MAX_API" - device="$PLATFORM_ANDROID_MAX_DEVICE" - fi - avd_name="${device}_API${api}_arm64_v8a" + device_json="devbox.d/segment-integrations.devbox-plugins.android/devices/${{ matrix.target }}.json" + avd_name=$(jq -r '.name' "$device_json") echo "DETOX_AVD=${avd_name}" >> "$GITHUB_ENV" - name: Android E2E Tests - run: devbox run --config=shells/devbox-android.json test-android + run: devbox run test-android diff --git a/.github/workflows/ci-e2e-latest.yml b/.github/workflows/ci-e2e-latest.yml index 98fd45c6d..672cc3420 100644 --- a/.github/workflows/ci-e2e-latest.yml +++ b/.github/workflows/ci-e2e-latest.yml @@ -13,6 +13,7 @@ jobs: env: YARN_ENABLE_HARDENED_MODE: 0 XCODE_VERSION: '26.2' + ANDROID_SKIP_DOWNLOADS: 1 steps: - uses: actions/checkout@v4 - name: Aggressive disk cleanup (macOS) @@ -35,20 +36,19 @@ jobs: - name: devbox installer uses: jetify-com/devbox-install-action@v0.14.0 with: - project-path: shells/devbox-ios.json enable-cache: 'false' - name: Resolve iOS targets run: | - . scripts/platform-versions.sh - echo "DETOX_IOS_DEVICE=${PLATFORM_IOS_MAX_DEVICE}" >> "$GITHUB_ENV" - echo "IOS_RUNTIME=${PLATFORM_IOS_MAX_RUNTIME}" >> "$GITHUB_ENV" + device_json="devbox.d/segment-integrations.devbox-plugins.ios/devices/max.json" + echo "DETOX_IOS_DEVICE=$(jq -r '.name' "$device_json")" >> "$GITHUB_ENV" - name: iOS E2E Tests (latest) - run: devbox run --config=shells/devbox-ios.json test-ios + run: devbox run test-ios run-e2e-android: runs-on: ubuntu-24.04-arm env: EMU_HEADLESS: 1 + IOS_SKIP_SETUP: 1 steps: - uses: actions/checkout@v4 - name: Aggressive disk cleanup (Ubuntu) @@ -70,14 +70,11 @@ jobs: - name: devbox installer uses: jetify-com/devbox-install-action@v0.14.0 with: - project-path: shells/devbox-android.json enable-cache: 'false' - name: Resolve Android targets run: | - . scripts/platform-versions.sh - api="$PLATFORM_ANDROID_MAX_API" - device="$PLATFORM_ANDROID_MAX_DEVICE" - avd_name="${device}_API${api}_arm64_v8a" + device_json="devbox.d/segment-integrations.devbox-plugins.android/devices/max.json" + avd_name=$(jq -r '.name' "$device_json") echo "DETOX_AVD=${avd_name}" >> "$GITHUB_ENV" - name: Android E2E Tests (latest) - run: devbox run --config=shells/devbox-android.json test-android + run: devbox run test-android diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 18f54d087..b1ec863bd 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -28,6 +28,7 @@ jobs: env: YARN_ENABLE_HARDENED_MODE: 0 XCODE_VERSION: '26.2' + ANDROID_SKIP_DOWNLOADS: 1 strategy: matrix: include: @@ -55,26 +56,21 @@ jobs: - name: devbox installer uses: jetify-com/devbox-install-action@v0.14.0 with: - project-path: shells/devbox-ios.json enable-cache: 'false' - name: Resolve iOS targets run: | - . scripts/platform-versions.sh - if [ "${{ matrix.name }}" = "ios-min" ]; then - echo "DETOX_IOS_DEVICE=${PLATFORM_IOS_MIN_DEVICE}" >> "$GITHUB_ENV" - echo "IOS_RUNTIME=${PLATFORM_IOS_MIN_RUNTIME}" >> "$GITHUB_ENV" - else - echo "DETOX_IOS_DEVICE=${PLATFORM_IOS_MAX_DEVICE}" >> "$GITHUB_ENV" - echo "IOS_RUNTIME=${PLATFORM_IOS_MAX_RUNTIME}" >> "$GITHUB_ENV" - fi + target=${{ matrix.name == 'ios-min' && 'min' || 'max' }} + device_json="devbox.d/segment-integrations.devbox-plugins.ios/devices/${target}.json" + echo "DETOX_IOS_DEVICE=$(jq -r '.name' "$device_json")" >> "$GITHUB_ENV" - name: iOS E2E Tests - run: devbox run --config=shells/devbox-ios.json test-ios + run: devbox run test-ios e2e-android: name: E2E Android (min/max) runs-on: ubuntu-24.04-arm env: EMU_HEADLESS: 1 + IOS_SKIP_SETUP: 1 strategy: matrix: include: @@ -103,22 +99,14 @@ jobs: - name: devbox installer uses: jetify-com/devbox-install-action@v0.14.0 with: - project-path: shells/devbox-android.json enable-cache: 'false' - name: Resolve Android targets run: | - . scripts/platform-versions.sh - if [ "${{ matrix.target }}" = "min" ]; then - api="$PLATFORM_ANDROID_MIN_API" - device="$PLATFORM_ANDROID_MIN_DEVICE" - else - api="$PLATFORM_ANDROID_MAX_API" - device="$PLATFORM_ANDROID_MAX_DEVICE" - fi - avd_name="${device}_API${api}_arm64_v8a" + device_json="devbox.d/segment-integrations.devbox-plugins.android/devices/${{ matrix.target }}.json" + avd_name=$(jq -r '.name' "$device_json") echo "DETOX_AVD=${avd_name}" >> "$GITHUB_ENV" - name: Android E2E Tests - run: devbox run --config=shells/devbox-android.json test-android + run: devbox run test-android publish: name: Publish to npm diff --git a/devbox.d/segment-integrations.devbox-plugins.android/devices/max.json b/devbox.d/segment-integrations.devbox-plugins.android/devices/max.json new file mode 100644 index 000000000..7ed1bd7d2 --- /dev/null +++ b/devbox.d/segment-integrations.devbox-plugins.android/devices/max.json @@ -0,0 +1,6 @@ +{ + "name": "medium_phone_api36", + "api": 36, + "device": "medium_phone", + "tag": "google_apis" +} diff --git a/devbox.d/segment-integrations.devbox-plugins.android/devices/min.json b/devbox.d/segment-integrations.devbox-plugins.android/devices/min.json new file mode 100644 index 000000000..8c3394cdd --- /dev/null +++ b/devbox.d/segment-integrations.devbox-plugins.android/devices/min.json @@ -0,0 +1,6 @@ +{ + "name": "pixel_api21", + "api": 21, + "device": "pixel", + "tag": "google_apis" +} diff --git a/devbox.d/segment-integrations.devbox-plugins.ios/devices/max.json b/devbox.d/segment-integrations.devbox-plugins.ios/devices/max.json new file mode 100644 index 000000000..0e76d6983 --- /dev/null +++ b/devbox.d/segment-integrations.devbox-plugins.ios/devices/max.json @@ -0,0 +1,4 @@ +{ + "name": "iPhone 17", + "runtime": "26.2" +} diff --git a/devbox.d/segment-integrations.devbox-plugins.ios/devices/min.json b/devbox.d/segment-integrations.devbox-plugins.ios/devices/min.json new file mode 100644 index 000000000..fba99bb50 --- /dev/null +++ b/devbox.d/segment-integrations.devbox-plugins.ios/devices/min.json @@ -0,0 +1,4 @@ +{ + "name": "iPhone 13", + "runtime": "15.4" +} diff --git a/devbox.json b/devbox.json index 6dd289314..55caf4eb8 100644 --- a/devbox.json +++ b/devbox.json @@ -1,53 +1,48 @@ { "$schema": "https://raw.githubusercontent.com/jetify-com/devbox/0.14.2/.schema/devbox.schema.json", + "include": [ + "github:segment-integrations/devbox-plugins?dir=plugins/android", + "github:segment-integrations/devbox-plugins?dir=plugins/ios" + ], "packages": { - "cocoapods": { - "version": "latest", - "platforms": ["x86_64-darwin", "aarch64-darwin"] - }, "yarn-berry": "latest", "treefmt": "latest", "nixfmt": "latest", - "shfmt": "latest", - "jdk17": "latest", - "gradle": "latest", - "jq": "latest", - "netcat": "latest", - "path:./nix#android-sdk": "" + "shfmt": "latest" }, "shell": { - "init_hook": [ - "echo 'Welcome to analytics-react-native devbox!' > /dev/null", - ". $DEVBOX_PROJECT_ROOT/scripts/shared/common.sh", - "if [ \"$(uname -s)\" = \"Darwin\" ]; then . $DEVBOX_PROJECT_ROOT/scripts/ios/env.sh; fi", - ". $DEVBOX_PROJECT_ROOT/scripts/android/env.sh", - "echo 'Android SDK env configured (details: wiki/devbox.md#devbox-android).'" - ], "scripts": { "clean": [ "rm -rf $DEVBOX_PROJECT_ROOT/examples/E2E/ios/Podfile.lock", "rm -rf $DEVBOX_PROJECT_ROOT/examples/E2E/ios/Pods", - "cd $DEVBOX_PROJECT_DIR/examples/E2E/android && gradle clean", "yarn cache clean", "find $DEVBOX_PROJECT_DIR -type d -name node_modules -exec rmdir {} \\;" ], - "build": ["bash $SCRIPTS_DIR/build.sh"], + "build": [ + "yarn install --immutable", + "yarn build", + "yarn lint" + ], "format": ["treefmt"], "lint": ["treefmt --fail-on-change"], - "test-android": ["bash $SCRIPTS_DIR/android/test.sh"], - "test-ios": ["bash $SCRIPTS_DIR/ios/test.sh"], - "act-ci": [ - "bash $SCRIPTS_DIR/act-ci.sh --platform ubuntu-latest=ghcr.io/catthehacker/ubuntu:act-24.04" + "test-android": [ + "yarn install", + "yarn e2e install", + "yarn build", + "yarn e2e build:android", + "yarn e2e test:android" + ], + "test-ios": [ + "yarn install", + "yarn e2e install", + "yarn e2e pods", + "yarn build", + "yarn e2e build:ios", + "yarn e2e test:ios" ], - "setup-android": ["bash $SCRIPTS_DIR/android/setup.sh"], - "setup-ios": ["bash $SCRIPTS_DIR/ios/setup.sh"], - "start-emulator": ["bash $SCRIPTS_DIR/android/manager.sh start"], - "start-ios": ["bash $SCRIPTS_DIR/ios/manager.sh start"], - "start-android-minsdk": ["bash $SCRIPTS_DIR/android/manager.sh start"], - "start-android-latest": [ - "AVD_FLAVOR=latest bash $SCRIPTS_DIR/android/manager.sh start" + "act-ci": [ + "bash $DEVBOX_PROJECT_ROOT/scripts/act-ci.sh --platform ubuntu-latest=ghcr.io/catthehacker/ubuntu:act-24.04" ], - "start-android": ["bash $SCRIPTS_DIR/android/manager.sh start"], "update-apps": [ "yarn install --no-immutable", "yarn e2e install --no-immutable", @@ -55,52 +50,8 @@ ], "update-shells": [ "devbox update", - "devbox update --config=shells/devbox-fast.json", - "devbox update --config=shells/devbox-android.json", - "devbox update --config=shells/devbox-ios.json" - ], - "reset-android": [ - "rm -rf ~/.android/avd", - "rm -f ~/.android/adbkey*", - "echo \"AVDs and adb keys removed. Recreate via devbox run start-android* as needed.\"" - ], - "reset-ios": [ - "xcrun simctl shutdown all || true", - "xcrun simctl erase all || true", - "xcrun simctl delete all || true", - "xcrun simctl delete unavailable || true", - "killall -9 com.apple.CoreSimulatorService 2>/dev/null || true", - "echo \"Simulators reset via simctl. Recreate via devbox run start-ios.\"" - ], - "stop-android": [ - "if command -v adb >/dev/null 2>&1; then", - " devices=$(adb devices -l 2>/dev/null | tail -n +2 | awk '{print $1}' | tr '\\n' ' ');", - " if [[ -n \"$devices\" ]]; then", - " echo \"Stopping Android emulators: $devices\";", - " for d in $devices; do adb -s \"$d\" emu kill >/dev/null 2>&1 || true; done;", - " else", - " echo \"No Android emulators detected via adb.\";", - " fi;", - "else", - " echo \"adb not found; skipping Android emulator shutdown.\";", - "fi", - "pkill -f \"emulator@\" >/dev/null 2>&1 || true", - "echo \"Android emulators stopped (if any were running).\"" - ], - "stop-ios": [ - "if command -v xcrun >/dev/null 2>&1 && xcrun -f simctl >/dev/null 2>&1; then", - " if xcrun simctl list devices booted | grep -q \"Booted\"; then", - " echo \"Shutting down booted iOS simulators...\";", - " xcrun simctl shutdown all >/dev/null 2>&1 || true;", - " else", - " echo \"No booted iOS simulators detected.\";", - " fi;", - "else", - " echo \"simctl not available; skipping iOS shutdown.\";", - "fi", - "echo \"iOS simulators shutdown (if any were running).\"" + "devbox update --config=shells/devbox-fast.json" ], - "stop": ["devbox run stop-android", "devbox run stop-ios"], "test": ["devbox run test-android", "devbox run test-ios"] } } diff --git a/devbox.lock b/devbox.lock index 81129d34f..12bb82173 100644 --- a/devbox.lock +++ b/devbox.lock @@ -1,354 +1,565 @@ { "lockfile_version": "1", "packages": { - "cocoapods@latest": { - "last_modified": "2025-12-31T03:27:36Z", - "resolved": "github:NixOS/nixpkgs/f665af0cdb70ed27e1bd8f9fdfecaf451260fc55#cocoapods", + "bash@latest": { + "last_modified": "2026-02-15T09:18:18Z", + "resolved": "github:NixOS/nixpkgs/e3cb16bccd9facebae3ba29c6a76a4cc1b73462a#bash", "source": "devbox-search", - "version": "1.16.2", + "version": "5.3p9", "systems": { "aarch64-darwin": { "outputs": [ { "name": "out", - "path": "/nix/store/av5g6hfp0yiir3iavg72js70ian8hxyf-cocoapods-1.16.2", + "path": "/nix/store/ngqf98amj0hv0jhzhz540p03wxjj0chj-bash-interactive-5.3p9", "default": true + }, + { + "name": "man", + "path": "/nix/store/k23hpm86ymd7l92c7cg0a2wsjadr8mx6-bash-interactive-5.3p9-man", + "default": true + }, + { + "name": "dev", + "path": "/nix/store/vhhwpi6h16bxbrvx1sdg5ag973dln1r9-bash-interactive-5.3p9-dev" + }, + { + "name": "doc", + "path": "/nix/store/dahmvcafcvsp553w8lhkqy2ppv7gd6m5-bash-interactive-5.3p9-doc" + }, + { + "name": "info", + "path": "/nix/store/lqd7rdyads0i42dhxj8zwzj0d01hbgqf-bash-interactive-5.3p9-info" } ], - "store_path": "/nix/store/av5g6hfp0yiir3iavg72js70ian8hxyf-cocoapods-1.16.2" + "store_path": "/nix/store/ngqf98amj0hv0jhzhz540p03wxjj0chj-bash-interactive-5.3p9" }, - "x86_64-darwin": { + "aarch64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/har71589bwmh6h6skisd20b3c6lrwmz7-cocoapods-1.16.2", + "path": "/nix/store/62p6g8nz491c6z224wc6ci1m699y2jhn-bash-interactive-5.3p9", "default": true + }, + { + "name": "man", + "path": "/nix/store/1ma79ibx4dn0hdbflsxyxccrxzjqqwr3-bash-interactive-5.3p9-man", + "default": true + }, + { + "name": "debug", + "path": "/nix/store/j1i5n2snbiim8s63x9d41yiqv1anmsvi-bash-interactive-5.3p9-debug" + }, + { + "name": "dev", + "path": "/nix/store/n2i7ipwdbxiypxfballikvp8gx4jkivz-bash-interactive-5.3p9-dev" + }, + { + "name": "doc", + "path": "/nix/store/3a9xbr58hfgbj42rmsd9x2fwnir2aasy-bash-interactive-5.3p9-doc" + }, + { + "name": "info", + "path": "/nix/store/h87j74dh8b6lrj11720bda5qq1zfzac0-bash-interactive-5.3p9-info" } ], - "store_path": "/nix/store/har71589bwmh6h6skisd20b3c6lrwmz7-cocoapods-1.16.2" - } - } - }, - "github:NixOS/nixpkgs/nixpkgs-unstable": { - "last_modified": "2026-01-27T15:18:14Z", - "resolved": "github:NixOS/nixpkgs/afce96367b2e37fc29afb5543573cd49db3357b7?lastModified=1769527094" - }, - "gradle@latest": { - "last_modified": "2025-12-31T03:27:36Z", - "plugin_version": "0.0.1", - "resolved": "github:NixOS/nixpkgs/f665af0cdb70ed27e1bd8f9fdfecaf451260fc55#gradle", - "source": "devbox-search", - "version": "8.14.3", - "systems": { - "aarch64-darwin": { + "store_path": "/nix/store/62p6g8nz491c6z224wc6ci1m699y2jhn-bash-interactive-5.3p9" + }, + "x86_64-darwin": { "outputs": [ { "name": "out", - "path": "/nix/store/v2xbkgrvn0b4g4qq7j5x60va0d4gf0kw-gradle-8.14.3", + "path": "/nix/store/n129ikd89z3didy0p2xw8hqgfaphyv11-bash-interactive-5.3p9", + "default": true + }, + { + "name": "man", + "path": "/nix/store/2m52h1lgaahqz6fag0aqw1499fjzq473-bash-interactive-5.3p9-man", "default": true + }, + { + "name": "dev", + "path": "/nix/store/7px2mpd1qj0106g64qp411p2y5cwlzbz-bash-interactive-5.3p9-dev" + }, + { + "name": "doc", + "path": "/nix/store/s9wwkzamvd36hwz94661rzg0s8bs86bc-bash-interactive-5.3p9-doc" + }, + { + "name": "info", + "path": "/nix/store/z9v40pvapyx3qd6liy9q4v6iwncwapl5-bash-interactive-5.3p9-info" } ], - "store_path": "/nix/store/v2xbkgrvn0b4g4qq7j5x60va0d4gf0kw-gradle-8.14.3" + "store_path": "/nix/store/n129ikd89z3didy0p2xw8hqgfaphyv11-bash-interactive-5.3p9" }, - "aarch64-linux": { + "x86_64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/mvs8d5c60yyx3sxpppg1r67yjvlrrhhh-gradle-8.14.3", + "path": "/nix/store/x12lw455sq6qy2wcya85d7rb88ybc3df-bash-interactive-5.3p9", + "default": true + }, + { + "name": "man", + "path": "/nix/store/1yg24id0csjk4nq1a3apimwf8dqisr9d-bash-interactive-5.3p9-man", "default": true + }, + { + "name": "debug", + "path": "/nix/store/sihl8njk3077kr0bh1fnagdxy83hbyfb-bash-interactive-5.3p9-debug" + }, + { + "name": "dev", + "path": "/nix/store/a1phwny3n394ij9j7csxa51lvb7nf45d-bash-interactive-5.3p9-dev" + }, + { + "name": "doc", + "path": "/nix/store/64qrsa2hiz1ayjv0m655cqwzx54hib9w-bash-interactive-5.3p9-doc" + }, + { + "name": "info", + "path": "/nix/store/by59bhs57xx4i2nh01bsjm3gdprgrby1-bash-interactive-5.3p9-info" } ], - "store_path": "/nix/store/mvs8d5c60yyx3sxpppg1r67yjvlrrhhh-gradle-8.14.3" - }, - "x86_64-darwin": { + "store_path": "/nix/store/x12lw455sq6qy2wcya85d7rb88ybc3df-bash-interactive-5.3p9" + } + } + }, + "cocoapods@latest": { + "last_modified": "2026-01-23T17:20:52Z", + "resolved": "github:NixOS/nixpkgs/a1bab9e494f5f4939442a57a58d0449a109593fe#cocoapods", + "source": "devbox-search", + "version": "1.16.2", + "systems": { + "aarch64-darwin": { "outputs": [ { "name": "out", - "path": "/nix/store/jy3fpkvcymjaglzi9z2gbpzcyqypgfxh-gradle-8.14.3", + "path": "/nix/store/xmpbzlm4h97izn0nwf5r3flxa3hqiawa-cocoapods-1.16.2", "default": true } ], - "store_path": "/nix/store/jy3fpkvcymjaglzi9z2gbpzcyqypgfxh-gradle-8.14.3" + "store_path": "/nix/store/xmpbzlm4h97izn0nwf5r3flxa3hqiawa-cocoapods-1.16.2" }, - "x86_64-linux": { + "x86_64-darwin": { "outputs": [ { "name": "out", - "path": "/nix/store/80fgl9ffaxlxl9s4i1jb37krcljx669g-gradle-8.14.3", + "path": "/nix/store/kk994ybb09jk38n2k2sp5mifgka5mixg-cocoapods-1.16.2", "default": true } ], - "store_path": "/nix/store/80fgl9ffaxlxl9s4i1jb37krcljx669g-gradle-8.14.3" + "store_path": "/nix/store/kk994ybb09jk38n2k2sp5mifgka5mixg-cocoapods-1.16.2" } } }, - "jdk17@latest": { - "last_modified": "2025-10-22T20:59:19Z", - "resolved": "github:NixOS/nixpkgs/01b6809f7f9d1183a2b3e081f0a1e6f8f415cb09#jdk17", + "coreutils@latest": { + "last_modified": "2026-01-23T17:20:52Z", + "resolved": "github:NixOS/nixpkgs/a1bab9e494f5f4939442a57a58d0449a109593fe#coreutils", "source": "devbox-search", - "version": "17.0.12", + "version": "9.9", "systems": { "aarch64-darwin": { "outputs": [ { "name": "out", - "path": "/nix/store/hlm8a8cnp4hm8xkg0a2yy4kv7cq44jii-zulu-ca-jdk-17.0.12", + "path": "/nix/store/hf6y9njhfwvigr25kzrwmsvmv6jpni5n-coreutils-9.9", "default": true + }, + { + "name": "info", + "path": "/nix/store/6bf622yq75zzhq5mdn187sk70sxs6fkh-coreutils-9.9-info" } ], - "store_path": "/nix/store/hlm8a8cnp4hm8xkg0a2yy4kv7cq44jii-zulu-ca-jdk-17.0.12" + "store_path": "/nix/store/hf6y9njhfwvigr25kzrwmsvmv6jpni5n-coreutils-9.9" + }, + "aarch64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/5pwllqskykz2by85b87kp1a8af587vcn-coreutils-9.9", + "default": true + }, + { + "name": "debug", + "path": "/nix/store/q3bqmaf9gi315ghy600wsyamzmnahkhk-coreutils-9.9-debug" + }, + { + "name": "info", + "path": "/nix/store/fxvw68h1qhpydph2l8j9p4hhs48va1fc-coreutils-9.9-info" + } + ], + "store_path": "/nix/store/5pwllqskykz2by85b87kp1a8af587vcn-coreutils-9.9" }, "x86_64-darwin": { "outputs": [ { "name": "out", - "path": "/nix/store/i4zgq9685y6284hbf5a7ac9ysb88dvlz-zulu-ca-jdk-17.0.12", + "path": "/nix/store/qgdq763j9ddmj7aq45x3s5108qvq4z7q-coreutils-9.9", "default": true + }, + { + "name": "info", + "path": "/nix/store/fvsrfwspi4w7kkn2wvmhjv0f9jrzwqja-coreutils-9.9-info" } ], - "store_path": "/nix/store/i4zgq9685y6284hbf5a7ac9ysb88dvlz-zulu-ca-jdk-17.0.12" + "store_path": "/nix/store/qgdq763j9ddmj7aq45x3s5108qvq4z7q-coreutils-9.9" + }, + "x86_64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/i2vmgx46q9hd3z6rigaiman3wl3i2gc4-coreutils-9.9", + "default": true + }, + { + "name": "debug", + "path": "/nix/store/fzcbb02abzvmyrvpa360abfbspnz9l1j-coreutils-9.9-debug" + }, + { + "name": "info", + "path": "/nix/store/7c3i7919ys6jk8qkccspz3bkc1lv82d9-coreutils-9.9-info" + } + ], + "store_path": "/nix/store/i2vmgx46q9hd3z6rigaiman3wl3i2gc4-coreutils-9.9" } } }, - "jq@latest": { - "last_modified": "2026-01-12T00:44:08Z", - "resolved": "github:NixOS/nixpkgs/3fbab70c6e69c87ea2b6e48aa6629da2aa6a23b0#jq", + "gawk@latest": { + "last_modified": "2026-01-23T17:20:52Z", + "resolved": "github:NixOS/nixpkgs/a1bab9e494f5f4939442a57a58d0449a109593fe#gawk", "source": "devbox-search", - "version": "1.8.1", + "version": "5.3.2", "systems": { "aarch64-darwin": { "outputs": [ { - "name": "bin", - "path": "/nix/store/9rm6fm3zq1jq8rgsx528cw8wkmfya2gf-jq-1.8.1-bin", + "name": "out", + "path": "/nix/store/78jn4adsl7zf2padciq7bfq15qykn5wf-gawk-5.3.2", "default": true }, { "name": "man", - "path": "/nix/store/cv999saj62xhq7xv5i7q6944vljykfmw-jq-1.8.1-man", + "path": "/nix/store/1gj15nimzw33ik7l2cqs2ry52yxgiq2h-gawk-5.3.2-man", "default": true }, { - "name": "dev", - "path": "/nix/store/5camppj4hz2mgkdbxs0kr6nvh6qa65wf-jq-1.8.1-dev" - }, - { - "name": "doc", - "path": "/nix/store/lak094rhhxlaj1qycadmxyfphgjadj5r-jq-1.8.1-doc" - }, - { - "name": "out", - "path": "/nix/store/g371yvjasdr552v98p5kav7n35s1dfib-jq-1.8.1" + "name": "info", + "path": "/nix/store/0a3x2fkdzkbkkqz4myjsr6r19n3mgiz4-gawk-5.3.2-info" } ], - "store_path": "/nix/store/9rm6fm3zq1jq8rgsx528cw8wkmfya2gf-jq-1.8.1-bin" + "store_path": "/nix/store/78jn4adsl7zf2padciq7bfq15qykn5wf-gawk-5.3.2" }, "aarch64-linux": { "outputs": [ { - "name": "bin", - "path": "/nix/store/m8qv4g54q3jmjb8i33v9lljcwhydx2vd-jq-1.8.1-bin", + "name": "out", + "path": "/nix/store/p1ff2bvyyb0vzskfkls91nvpf8g7zwcc-gawk-5.3.2", "default": true }, { "name": "man", - "path": "/nix/store/9x2457g76jikfy7xq4mjqwzl8iz3zvxj-jq-1.8.1-man", + "path": "/nix/store/9aqrvrdpz4viqmdw1fy6f8855ixhvfaq-gawk-5.3.2-man", "default": true }, { - "name": "dev", - "path": "/nix/store/5ykn83b3hhvnnq0p5vqgcrzihrl9wpsl-jq-1.8.1-dev" + "name": "info", + "path": "/nix/store/sxpvs7nxblvg5fis84w67rz80ygvrcgw-gawk-5.3.2-info" + } + ], + "store_path": "/nix/store/p1ff2bvyyb0vzskfkls91nvpf8g7zwcc-gawk-5.3.2" + }, + "x86_64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/mknqzwppq332dqs43fgcgmgar24dgayq-gawk-5.3.2", + "default": true }, { - "name": "doc", - "path": "/nix/store/37ypy1595g6rj3cymh1mpk2b25fx40g7-jq-1.8.1-doc" + "name": "man", + "path": "/nix/store/45llzyqcsqrx45rjz1dghs891s3xbny6-gawk-5.3.2-man", + "default": true }, { - "name": "out", - "path": "/nix/store/16lg603jzppwjanlakcak1ais69mkd03-jq-1.8.1" + "name": "info", + "path": "/nix/store/nhjsr3i830m044qglqalkbkqh9g7bwaq-gawk-5.3.2-info" } ], - "store_path": "/nix/store/m8qv4g54q3jmjb8i33v9lljcwhydx2vd-jq-1.8.1-bin" + "store_path": "/nix/store/mknqzwppq332dqs43fgcgmgar24dgayq-gawk-5.3.2" }, - "x86_64-darwin": { + "x86_64-linux": { "outputs": [ { - "name": "bin", - "path": "/nix/store/kkb17whpkdrmn9g3gk7y6l69vipxsw0i-jq-1.8.1-bin", + "name": "out", + "path": "/nix/store/2xq9rayckw8zq26k274xxlikn77jn60j-gawk-5.3.2", "default": true }, { "name": "man", - "path": "/nix/store/iwr61wi83kflqvz8j5nf7ridaqq6nh2w-jq-1.8.1-man", + "path": "/nix/store/44gbnv9kk7cy5grvpwnjjapq3fxgsh4y-gawk-5.3.2-man", "default": true }, { - "name": "dev", - "path": "/nix/store/lypnqs272644l8ff6wfji9rg5jw10v7h-jq-1.8.1-dev" + "name": "info", + "path": "/nix/store/miv2z2631wsjpp2vhism5bc4ipch490r-gawk-5.3.2-info" + } + ], + "store_path": "/nix/store/2xq9rayckw8zq26k274xxlikn77jn60j-gawk-5.3.2" + } + } + }, + "github:NixOS/nixpkgs/nixpkgs-unstable": { + "last_modified": "2026-02-15T17:45:47Z", + "resolved": "github:NixOS/nixpkgs/ac055f38c798b0d87695240c7b761b82fc7e5bc2?lastModified=1771177547" + }, + "gnugrep@latest": { + "last_modified": "2026-01-23T17:20:52Z", + "resolved": "github:NixOS/nixpkgs/a1bab9e494f5f4939442a57a58d0449a109593fe#gnugrep", + "source": "devbox-search", + "version": "3.12", + "systems": { + "aarch64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/vh7z511kn1g6c4j4rrj2fgxnjsbny5mw-gnugrep-3.12", + "default": true }, { - "name": "doc", - "path": "/nix/store/nyw97c4pywfcqqap5hyk9xjghczlbshl-jq-1.8.1-doc" + "name": "info", + "path": "/nix/store/i484zygrqw554k0ddswv6k7lkn7i3za1-gnugrep-3.12-info" + } + ], + "store_path": "/nix/store/vh7z511kn1g6c4j4rrj2fgxnjsbny5mw-gnugrep-3.12" + }, + "aarch64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/r21ffchrdgccar73w3skkah0aj15mj2b-gnugrep-3.12", + "default": true }, + { + "name": "info", + "path": "/nix/store/2lj0xvg84lzn5bvap89grjzvrgx43kz9-gnugrep-3.12-info" + } + ], + "store_path": "/nix/store/r21ffchrdgccar73w3skkah0aj15mj2b-gnugrep-3.12" + }, + "x86_64-darwin": { + "outputs": [ { "name": "out", - "path": "/nix/store/ri930a557685c64bdh88a5031i7hx3vy-jq-1.8.1" + "path": "/nix/store/jblpqghdm8kbsk6lm2szsfz6qqy3ldfd-gnugrep-3.12", + "default": true + }, + { + "name": "info", + "path": "/nix/store/zvgc176fjzpnyhlp6y0f7pd1jl6zvv91-gnugrep-3.12-info" } ], - "store_path": "/nix/store/kkb17whpkdrmn9g3gk7y6l69vipxsw0i-jq-1.8.1-bin" + "store_path": "/nix/store/jblpqghdm8kbsk6lm2szsfz6qqy3ldfd-gnugrep-3.12" }, "x86_64-linux": { "outputs": [ { - "name": "bin", - "path": "/nix/store/zssasryipb2x4gk2ahzacl4mvvcmk48j-jq-1.8.1-bin", + "name": "out", + "path": "/nix/store/02vv0r262agf9j5n2y1gmbjvdf12zkl0-gnugrep-3.12", "default": true }, { - "name": "man", - "path": "/nix/store/7d4pv1iymyqk2lykwj1ydml3rjhc6gl3-jq-1.8.1-man", + "name": "info", + "path": "/nix/store/cgk1j37lw5vw7lxdlzhdhji3fii5b5id-gnugrep-3.12-info" + } + ], + "store_path": "/nix/store/02vv0r262agf9j5n2y1gmbjvdf12zkl0-gnugrep-3.12" + } + } + }, + "gnused@latest": { + "last_modified": "2026-01-23T17:20:52Z", + "resolved": "github:NixOS/nixpkgs/a1bab9e494f5f4939442a57a58d0449a109593fe#gnused", + "source": "devbox-search", + "version": "4.9", + "systems": { + "aarch64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/bdhywjmavg1hw3515cxsh8vxx8p42ixw-gnused-4.9", "default": true }, { - "name": "dev", - "path": "/nix/store/rmxxm5jnxq93kvkhbr2b3hzj6v3ldp8z-jq-1.8.1-dev" + "name": "info", + "path": "/nix/store/2q7ry9sap952dh21xda36g2gx44m9jvl-gnused-4.9-info" + } + ], + "store_path": "/nix/store/bdhywjmavg1hw3515cxsh8vxx8p42ixw-gnused-4.9" + }, + "aarch64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/wl7cvwbv3p0ag201jry906ydpij3a9ij-gnused-4.9", + "default": true }, { - "name": "doc", - "path": "/nix/store/mkhfvc69grlky3iblibkw9wcc12jcdqq-jq-1.8.1-doc" + "name": "info", + "path": "/nix/store/srvxijm4zzcqp6krhxk8qhfcr52mh39a-gnused-4.9-info" + } + ], + "store_path": "/nix/store/wl7cvwbv3p0ag201jry906ydpij3a9ij-gnused-4.9" + }, + "x86_64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/b882ldrvxjjkc130pqy53948y09hci8m-gnused-4.9", + "default": true }, + { + "name": "info", + "path": "/nix/store/12wwcnqr14xnbjs9mf6l5igpqc167y61-gnused-4.9-info" + } + ], + "store_path": "/nix/store/b882ldrvxjjkc130pqy53948y09hci8m-gnused-4.9" + }, + "x86_64-linux": { + "outputs": [ { "name": "out", - "path": "/nix/store/807g765zgpmp1c8fm5y40rw2gbr1k6dk-jq-1.8.1" + "path": "/nix/store/ryz8kcrm2bxpccllfqlb7qldsfnqp5c2-gnused-4.9", + "default": true + }, + { + "name": "info", + "path": "/nix/store/rr44gnjkn0j0h67blxaf7c69w6y5xv03-gnused-4.9-info" } ], - "store_path": "/nix/store/zssasryipb2x4gk2ahzacl4mvvcmk48j-jq-1.8.1-bin" + "store_path": "/nix/store/ryz8kcrm2bxpccllfqlb7qldsfnqp5c2-gnused-4.9" } } }, - "netcat@latest": { - "last_modified": "2026-01-20T02:11:35Z", - "resolved": "github:NixOS/nixpkgs/ed142ab1b3a092c4d149245d0c4126a5d7ea00b0#netcat", + "jq@latest": { + "last_modified": "2026-02-15T17:45:47Z", + "resolved": "github:NixOS/nixpkgs/ac055f38c798b0d87695240c7b761b82fc7e5bc2#jq", "source": "devbox-search", - "version": "4.2.1", + "version": "1.8.1", "systems": { "aarch64-darwin": { "outputs": [ - { - "name": "nc", - "path": "/nix/store/y2i4f3bwmgpxw4m6dl99dz9d7zp5axz2-libressl-4.2.1-nc", - "default": true - }, { "name": "bin", - "path": "/nix/store/ycvwxl29jb6ajjzgkq2jgy1nqpahq5k4-libressl-4.2.1-bin", + "path": "/nix/store/qjs0qndyz1g97rsc1zp4cd692y5iph64-jq-1.8.1-bin", "default": true }, { "name": "man", - "path": "/nix/store/2b61bckfnaiw3n5ppjg70avgd9rn60bp-libressl-4.2.1-man", + "path": "/nix/store/jlpyybc7pdh4gk17dc266d6a1szm7dk6-jq-1.8.1-man", "default": true }, { - "name": "out", - "path": "/nix/store/fm6zdqw6856i2snd4fikcsi9d1qagj5j-libressl-4.2.1" + "name": "dev", + "path": "/nix/store/bhryp10d5w5h9rsav5k9m9jb55z26bsl-jq-1.8.1-dev" }, { - "name": "dev", - "path": "/nix/store/bz5h2baa7bkpz8sgjc9ld8fr7cg5wapg-libressl-4.2.1-dev" + "name": "doc", + "path": "/nix/store/238sn0gg3i3i9v6kgx4g1k6b19frzy49-jq-1.8.1-doc" + }, + { + "name": "out", + "path": "/nix/store/n64h0247s3674kry90l6kszx06zyrgfn-jq-1.8.1" } ], - "store_path": "/nix/store/y2i4f3bwmgpxw4m6dl99dz9d7zp5axz2-libressl-4.2.1-nc" + "store_path": "/nix/store/qjs0qndyz1g97rsc1zp4cd692y5iph64-jq-1.8.1-bin" }, "aarch64-linux": { "outputs": [ - { - "name": "nc", - "path": "/nix/store/0dzxkwilv9lgd7j0429s2rmshy7p8gw7-libressl-4.2.1-nc", - "default": true - }, { "name": "bin", - "path": "/nix/store/5ama6wp3yi03hbixdcm5jy2ya9ikvzjz-libressl-4.2.1-bin", + "path": "/nix/store/c1qm5fsn6qbl09xdjx649vifabypyywd-jq-1.8.1-bin", "default": true }, { "name": "man", - "path": "/nix/store/vr4wlcvj5ba6wdmhj2aidalzqk33lrph-libressl-4.2.1-man", + "path": "/nix/store/2pjwv0ab8nilrg1lvjazf9y9w6g6pk5y-jq-1.8.1-man", "default": true }, { "name": "dev", - "path": "/nix/store/hs5c0yvhf7n60xijr7bmpi592n45pb6i-libressl-4.2.1-dev" + "path": "/nix/store/2sy4y09ddbi64pbg4is078110z70jsdw-jq-1.8.1-dev" + }, + { + "name": "doc", + "path": "/nix/store/vx81xggapqwdd2l64mmxrkbafih461jc-jq-1.8.1-doc" }, { "name": "out", - "path": "/nix/store/fiy9987ph2kqr5drlr136w7hvm3v6rvg-libressl-4.2.1" + "path": "/nix/store/cfhajjz1k7gf31krbj18q9acb54xp5z9-jq-1.8.1" } ], - "store_path": "/nix/store/0dzxkwilv9lgd7j0429s2rmshy7p8gw7-libressl-4.2.1-nc" + "store_path": "/nix/store/c1qm5fsn6qbl09xdjx649vifabypyywd-jq-1.8.1-bin" }, "x86_64-darwin": { "outputs": [ - { - "name": "nc", - "path": "/nix/store/vmrm6nr9hfhw7x8ln3ms98gszq709bfa-libressl-4.2.1-nc", - "default": true - }, { "name": "bin", - "path": "/nix/store/7kafgvpwc6s8pnzar90bd8017wc3cnvx-libressl-4.2.1-bin", + "path": "/nix/store/51343hgchh7by4l8r1g244ma05ny3x0b-jq-1.8.1-bin", "default": true }, { "name": "man", - "path": "/nix/store/jwdgv2x1a2a84v2jkj964xvm2s0kymps-libressl-4.2.1-man", + "path": "/nix/store/vx840ik1sj1h8fhqwa40aglvrgpa0r18-jq-1.8.1-man", "default": true }, { "name": "dev", - "path": "/nix/store/sjiz0iphbc7dvddlrbrk8k7kkqi3swz3-libressl-4.2.1-dev" + "path": "/nix/store/pp2hrljvalrrwyxh7is69nnlmxb2m7lk-jq-1.8.1-dev" + }, + { + "name": "doc", + "path": "/nix/store/h05xaf7fsasgp8cpyar2195cc8lbgih8-jq-1.8.1-doc" }, { "name": "out", - "path": "/nix/store/rn10w2jbdkz3f7p1q1fl6aml9b0352ki-libressl-4.2.1" + "path": "/nix/store/bmg2xfw86wavg7fm062nyf6v48xzxh0j-jq-1.8.1" } ], - "store_path": "/nix/store/vmrm6nr9hfhw7x8ln3ms98gszq709bfa-libressl-4.2.1-nc" + "store_path": "/nix/store/51343hgchh7by4l8r1g244ma05ny3x0b-jq-1.8.1-bin" }, "x86_64-linux": { "outputs": [ - { - "name": "nc", - "path": "/nix/store/54hijwy3gpc728s3468rv3sdw78ksakh-libressl-4.2.1-nc", - "default": true - }, { "name": "bin", - "path": "/nix/store/l5vvbs0vl734mshifahals0054pimlx4-libressl-4.2.1-bin", + "path": "/nix/store/qnaw7i777j52fpgbl5pgmzkq85znp083-jq-1.8.1-bin", "default": true }, { "name": "man", - "path": "/nix/store/j26qyc85gk95bk06dq0fi0c9q8y7livx-libressl-4.2.1-man", + "path": "/nix/store/6mh88qsh57ivh31c5nqxc43n0hv9xhbk-jq-1.8.1-man", "default": true }, + { + "name": "doc", + "path": "/nix/store/3ynrp4ypwv1g1jgsk638443p8lpd9g8f-jq-1.8.1-doc" + }, { "name": "out", - "path": "/nix/store/4f21prki98shrvp29r88pnxhzw2y4qr2-libressl-4.2.1" + "path": "/nix/store/fgsvqffyvcpjqs093wwf2d6dzxnmnqnv-jq-1.8.1" }, { "name": "dev", - "path": "/nix/store/0dndzgjzx25y7v1942c2rys20narddp8-libressl-4.2.1-dev" + "path": "/nix/store/d73i1fvhrqms0sbfrvqaynsr8iva216v-jq-1.8.1-dev" } ], - "store_path": "/nix/store/54hijwy3gpc728s3468rv3sdw78ksakh-libressl-4.2.1-nc" + "store_path": "/nix/store/qnaw7i777j52fpgbl5pgmzkq85znp083-jq-1.8.1-bin" } } }, "nixfmt@latest": { - "last_modified": "2026-01-09T13:41:53Z", - "resolved": "github:NixOS/nixpkgs/5f02c91314c8ba4afe83b256b023756412218535#nixfmt", + "last_modified": "2026-01-23T17:20:52Z", + "resolved": "github:NixOS/nixpkgs/a1bab9e494f5f4939442a57a58d0449a109593fe#nixfmt", "source": "devbox-search", "version": "1.2.0", "systems": { @@ -356,47 +567,95 @@ "outputs": [ { "name": "out", - "path": "/nix/store/4jzq73b6bax62245z5a5ag8xdazfw4fg-nixfmt-1.2.0", + "path": "/nix/store/lvb2z93xn3m0m2hw0w6cc0c3bsl2s8pp-nixfmt-1.2.0", + "default": true + } + ], + "store_path": "/nix/store/lvb2z93xn3m0m2hw0w6cc0c3bsl2s8pp-nixfmt-1.2.0" + }, + "aarch64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/0qdx7ah7b1dwyxa03fblhcdjnpi29q25-nixfmt-1.2.0", + "default": true + } + ], + "store_path": "/nix/store/0qdx7ah7b1dwyxa03fblhcdjnpi29q25-nixfmt-1.2.0" + }, + "x86_64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/jicz2kx49mqif3hkl1m2wbwvx2lg457l-nixfmt-1.2.0", + "default": true + } + ], + "store_path": "/nix/store/jicz2kx49mqif3hkl1m2wbwvx2lg457l-nixfmt-1.2.0" + }, + "x86_64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/b5m1h822ln0s493r30sgns77618ws59n-nixfmt-1.2.0", + "default": true + } + ], + "store_path": "/nix/store/b5m1h822ln0s493r30sgns77618ws59n-nixfmt-1.2.0" + } + } + }, + "process-compose@latest": { + "last_modified": "2026-02-02T23:09:17Z", + "resolved": "github:NixOS/nixpkgs/47472570b1e607482890801aeaf29bfb749884f6#process-compose", + "source": "devbox-search", + "version": "1.90.0", + "systems": { + "aarch64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/ky986spyv6sfijb1k44hddla7hvi56lp-process-compose-1.90.0", "default": true } ], - "store_path": "/nix/store/4jzq73b6bax62245z5a5ag8xdazfw4fg-nixfmt-1.2.0" + "store_path": "/nix/store/ky986spyv6sfijb1k44hddla7hvi56lp-process-compose-1.90.0" }, "aarch64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/as7f2yrlqgv130vdiw2xi7rhlgd1yk8v-nixfmt-1.2.0", + "path": "/nix/store/iqx95vl5dwkrsfcf4mj2643bfisyj1ff-process-compose-1.90.0", "default": true } ], - "store_path": "/nix/store/as7f2yrlqgv130vdiw2xi7rhlgd1yk8v-nixfmt-1.2.0" + "store_path": "/nix/store/iqx95vl5dwkrsfcf4mj2643bfisyj1ff-process-compose-1.90.0" }, "x86_64-darwin": { "outputs": [ { "name": "out", - "path": "/nix/store/qmas80hmzqbm7n5h9is2im9gjzxsl04a-nixfmt-1.2.0", + "path": "/nix/store/fki23dffy7nzlma507q5lhf3dkm5l6wv-process-compose-1.90.0", "default": true } ], - "store_path": "/nix/store/qmas80hmzqbm7n5h9is2im9gjzxsl04a-nixfmt-1.2.0" + "store_path": "/nix/store/fki23dffy7nzlma507q5lhf3dkm5l6wv-process-compose-1.90.0" }, "x86_64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/yx338k689yp9hpnl6h5y22f7vbmi5pky-nixfmt-1.2.0", + "path": "/nix/store/c7fywarscr5c07bxgd6d5g0isn0ijysz-process-compose-1.90.0", "default": true } ], - "store_path": "/nix/store/yx338k689yp9hpnl6h5y22f7vbmi5pky-nixfmt-1.2.0" + "store_path": "/nix/store/c7fywarscr5c07bxgd6d5g0isn0ijysz-process-compose-1.90.0" } } }, "shfmt@latest": { - "last_modified": "2025-12-31T03:27:36Z", - "resolved": "github:NixOS/nixpkgs/f665af0cdb70ed27e1bd8f9fdfecaf451260fc55#shfmt", + "last_modified": "2026-01-23T17:20:52Z", + "resolved": "github:NixOS/nixpkgs/a1bab9e494f5f4939442a57a58d0449a109593fe#shfmt", "source": "devbox-search", "version": "3.12.0", "systems": { @@ -404,47 +663,47 @@ "outputs": [ { "name": "out", - "path": "/nix/store/dwz5z2wp95pkv6gsmz74w01qrihvhl1h-shfmt-3.12.0", + "path": "/nix/store/5ywb1qkbd829kazxxkcfxb356m7hljjw-shfmt-3.12.0", "default": true } ], - "store_path": "/nix/store/dwz5z2wp95pkv6gsmz74w01qrihvhl1h-shfmt-3.12.0" + "store_path": "/nix/store/5ywb1qkbd829kazxxkcfxb356m7hljjw-shfmt-3.12.0" }, "aarch64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/6gqqharpvjfzm1wzny6a0zgf1v0aj53a-shfmt-3.12.0", + "path": "/nix/store/bii41pz9k7xf3z3f80s1ip29l42488ry-shfmt-3.12.0", "default": true } ], - "store_path": "/nix/store/6gqqharpvjfzm1wzny6a0zgf1v0aj53a-shfmt-3.12.0" + "store_path": "/nix/store/bii41pz9k7xf3z3f80s1ip29l42488ry-shfmt-3.12.0" }, "x86_64-darwin": { "outputs": [ { "name": "out", - "path": "/nix/store/98fwma9rxd04pxj9jrsgvf9xs76f9hlf-shfmt-3.12.0", + "path": "/nix/store/a8l3l8rdzs3agq7garh59m0xn8h3zgpq-shfmt-3.12.0", "default": true } ], - "store_path": "/nix/store/98fwma9rxd04pxj9jrsgvf9xs76f9hlf-shfmt-3.12.0" + "store_path": "/nix/store/a8l3l8rdzs3agq7garh59m0xn8h3zgpq-shfmt-3.12.0" }, "x86_64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/c3bgrcwq2735ybl5zw68n9nqgwaa0yrj-shfmt-3.12.0", + "path": "/nix/store/r3pj36ll7v3ss2z679arpwkg7pnka3s3-shfmt-3.12.0", "default": true } ], - "store_path": "/nix/store/c3bgrcwq2735ybl5zw68n9nqgwaa0yrj-shfmt-3.12.0" + "store_path": "/nix/store/r3pj36ll7v3ss2z679arpwkg7pnka3s3-shfmt-3.12.0" } } }, "treefmt@latest": { - "last_modified": "2025-12-31T03:27:36Z", - "resolved": "github:NixOS/nixpkgs/f665af0cdb70ed27e1bd8f9fdfecaf451260fc55#treefmt", + "last_modified": "2026-01-23T17:20:52Z", + "resolved": "github:NixOS/nixpkgs/a1bab9e494f5f4939442a57a58d0449a109593fe#treefmt", "source": "devbox-search", "version": "2.4.0", "systems": { @@ -452,47 +711,47 @@ "outputs": [ { "name": "out", - "path": "/nix/store/48r10kj61pjhz8alfscs8vgrdmlfnqx9-treefmt-2.4.0", + "path": "/nix/store/37qcrdrfdf8b9pyli0j0vj9d69dykmpr-treefmt-2.4.0", "default": true } ], - "store_path": "/nix/store/48r10kj61pjhz8alfscs8vgrdmlfnqx9-treefmt-2.4.0" + "store_path": "/nix/store/37qcrdrfdf8b9pyli0j0vj9d69dykmpr-treefmt-2.4.0" }, "aarch64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/d46fscf82k9ay6s8a3qxk3682ycqalds-treefmt-2.4.0", + "path": "/nix/store/ccv7dxwff3xpivsdhrjbq3mpk0br5v7d-treefmt-2.4.0", "default": true } ], - "store_path": "/nix/store/d46fscf82k9ay6s8a3qxk3682ycqalds-treefmt-2.4.0" + "store_path": "/nix/store/ccv7dxwff3xpivsdhrjbq3mpk0br5v7d-treefmt-2.4.0" }, "x86_64-darwin": { "outputs": [ { "name": "out", - "path": "/nix/store/yllw5b2js10ia8v0z8x3crbakhal0cs7-treefmt-2.4.0", + "path": "/nix/store/sbq2psv4q9hvfvalk00g0pkqjl2912m1-treefmt-2.4.0", "default": true } ], - "store_path": "/nix/store/yllw5b2js10ia8v0z8x3crbakhal0cs7-treefmt-2.4.0" + "store_path": "/nix/store/sbq2psv4q9hvfvalk00g0pkqjl2912m1-treefmt-2.4.0" }, "x86_64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/1pdwlp9d1rrm3xp4s5rhhk7mkmx9cmv2-treefmt-2.4.0", + "path": "/nix/store/z8xrjfswqqpydc42lyas064pp8kxgnl0-treefmt-2.4.0", "default": true } ], - "store_path": "/nix/store/1pdwlp9d1rrm3xp4s5rhhk7mkmx9cmv2-treefmt-2.4.0" + "store_path": "/nix/store/z8xrjfswqqpydc42lyas064pp8kxgnl0-treefmt-2.4.0" } } }, "yarn-berry@latest": { - "last_modified": "2025-12-31T03:27:36Z", - "resolved": "github:NixOS/nixpkgs/f665af0cdb70ed27e1bd8f9fdfecaf451260fc55#yarn-berry", + "last_modified": "2026-01-23T17:20:52Z", + "resolved": "github:NixOS/nixpkgs/a1bab9e494f5f4939442a57a58d0449a109593fe#yarn-berry", "source": "devbox-search", "version": "4.12.0", "systems": { @@ -500,41 +759,41 @@ "outputs": [ { "name": "out", - "path": "/nix/store/2l7sbyyqardvrzr35zkrw67gbng5gb8y-yarn-berry-4.12.0", + "path": "/nix/store/k9bh72bpyqjnfq1nd3c6p1z2ijkx2yg6-yarn-berry-4.12.0", "default": true } ], - "store_path": "/nix/store/2l7sbyyqardvrzr35zkrw67gbng5gb8y-yarn-berry-4.12.0" + "store_path": "/nix/store/k9bh72bpyqjnfq1nd3c6p1z2ijkx2yg6-yarn-berry-4.12.0" }, "aarch64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/klx9ndw1djgx0zhhyrkcn9an094rmmwv-yarn-berry-4.12.0", + "path": "/nix/store/mcvbqzb1kir87g5pm5624c5ysnfh89wp-yarn-berry-4.12.0", "default": true } ], - "store_path": "/nix/store/klx9ndw1djgx0zhhyrkcn9an094rmmwv-yarn-berry-4.12.0" + "store_path": "/nix/store/mcvbqzb1kir87g5pm5624c5ysnfh89wp-yarn-berry-4.12.0" }, "x86_64-darwin": { "outputs": [ { "name": "out", - "path": "/nix/store/m6cwiya6hrbwnlprh2cbnmz6c7mkylrf-yarn-berry-4.12.0", + "path": "/nix/store/hn3j954rlcc0gx8nm41sgfzbx0qwfq3c-yarn-berry-4.12.0", "default": true } ], - "store_path": "/nix/store/m6cwiya6hrbwnlprh2cbnmz6c7mkylrf-yarn-berry-4.12.0" + "store_path": "/nix/store/hn3j954rlcc0gx8nm41sgfzbx0qwfq3c-yarn-berry-4.12.0" }, "x86_64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/q1gys3zgijcciiafbh9nfawkx5wj8179-yarn-berry-4.12.0", + "path": "/nix/store/2pmvaaggpi7ikx9xmhy3x2j0rpklaqrv-yarn-berry-4.12.0", "default": true } ], - "store_path": "/nix/store/q1gys3zgijcciiafbh9nfawkx5wj8179-yarn-berry-4.12.0" + "store_path": "/nix/store/2pmvaaggpi7ikx9xmhy3x2j0rpklaqrv-yarn-berry-4.12.0" } } } diff --git a/nix/flake.lock b/nix/flake.lock deleted file mode 100644 index d1f4e1080..000000000 --- a/nix/flake.lock +++ /dev/null @@ -1,27 +0,0 @@ -{ - "nodes": { - "nixpkgs": { - "locked": { - "lastModified": 1769527094, - "narHash": "sha256-xV20Alb7ZGN7qujnsi5lG1NckSUmpIb05H2Xar73TDc=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "afce96367b2e37fc29afb5543573cd49db3357b7", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "root": { - "inputs": { - "nixpkgs": "nixpkgs" - } - } - }, - "root": "root", - "version": 7 -} diff --git a/nix/flake.nix b/nix/flake.nix deleted file mode 100644 index 06ff87380..000000000 --- a/nix/flake.nix +++ /dev/null @@ -1,74 +0,0 @@ -{ - description = "Slim Android SDK tools for Devbox via flakes"; - - inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; - - outputs = - { self, nixpkgs }: - let - systems = [ - "x86_64-linux" - "aarch64-linux" - "x86_64-darwin" - "aarch64-darwin" - ]; - - versionData = builtins.fromJSON (builtins.readFile ./platform-versions.json); - getVar = - name: default: - if builtins.hasAttr name versionData then toString (builtins.getAttr name versionData) else default; - - androidSdkConfig = { - platformVersions = [ - (getVar "PLATFORM_ANDROID_MIN_API" "21") - (getVar "PLATFORM_ANDROID_MAX_API" "33") - ]; - buildToolsVersion = getVar "PLATFORM_ANDROID_BUILD_TOOLS_VERSION" "30.0.3"; - cmdLineToolsVersion = getVar "PLATFORM_ANDROID_CMDLINE_TOOLS_VERSION" "19.0"; - systemImageTypes = [ (getVar "PLATFORM_ANDROID_SYSTEM_IMAGE_TAG" "google_apis") ]; - }; - - forAllSystems = - f: - builtins.listToAttrs ( - map (system: { - name = system; - value = f system; - }) systems - ); - in - { - packages = forAllSystems ( - system: - let - pkgs = import nixpkgs { - inherit system; - config = { - allowUnfree = true; - android_sdk.accept_license = true; - }; - }; - - abiVersions = if builtins.match "aarch64-.*" system != null then [ "arm64-v8a" ] else [ "x86_64" ]; - - androidPkgs = pkgs.androidenv.composeAndroidPackages { - # Keep API 21 images for the AVD and add API 33 for React Native builds. - platformVersions = androidSdkConfig.platformVersions; - buildToolsVersions = [ androidSdkConfig.buildToolsVersion ]; - cmdLineToolsVersion = androidSdkConfig.cmdLineToolsVersion; - includeEmulator = true; - includeSystemImages = true; - includeNDK = false; - abiVersions = abiVersions; - systemImageTypes = androidSdkConfig.systemImageTypes; - }; - in - { - android-sdk = androidPkgs.androidsdk; - default = androidPkgs.androidsdk; - } - ); - - androidSdkConfig = androidSdkConfig; - }; -} diff --git a/nix/platform-versions.json b/nix/platform-versions.json deleted file mode 100644 index 506669900..000000000 --- a/nix/platform-versions.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "PLATFORM_ANDROID_MIN_API": "21", - "PLATFORM_ANDROID_MAX_API": "33", - "PLATFORM_ANDROID_BUILD_TOOLS_VERSION": "30.0.3", - "PLATFORM_ANDROID_CMDLINE_TOOLS_VERSION": "19.0", - "PLATFORM_ANDROID_SYSTEM_IMAGE_TAG": "google_apis", - "PLATFORM_ANDROID_MIN_DEVICE": "pixel", - "PLATFORM_ANDROID_MAX_DEVICE": "medium_phone", - "PLATFORM_IOS_MIN_RUNTIME": "15.0", - "PLATFORM_IOS_MAX_RUNTIME": "", - "PLATFORM_IOS_MIN_DEVICE": "iPhone 13", - "PLATFORM_IOS_MAX_DEVICE": "iPhone 17" -} diff --git a/scripts/android/env.sh b/scripts/android/env.sh deleted file mode 100755 index 0ffe24379..000000000 --- a/scripts/android/env.sh +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env bash -# Sets ANDROID_SDK_ROOT/ANDROID_HOME and PATH to the flake-pinned SDK if not already set. - -# Load shared platform versions if present. -script_path="${BASH_SOURCE[0]:-$0}" -script_dir="$(cd "$(dirname "$script_path")" && pwd)" -# shellcheck disable=SC1090 -. "$script_dir/../shared/common.sh" -load_platform_versions "$script_dir" - -if [ -z "${ANDROID_MIN_API:-}" ] && [ -n "${PLATFORM_ANDROID_MIN_API:-}" ]; then - ANDROID_MIN_API="$PLATFORM_ANDROID_MIN_API" -fi -if [ -z "${ANDROID_MAX_API:-}" ] && [ -n "${PLATFORM_ANDROID_MAX_API:-}" ]; then - ANDROID_MAX_API="$PLATFORM_ANDROID_MAX_API" -fi -if [ -z "${ANDROID_BUILD_TOOLS_VERSION:-}" ] && [ -n "${PLATFORM_ANDROID_BUILD_TOOLS_VERSION:-}" ]; then - ANDROID_BUILD_TOOLS_VERSION="$PLATFORM_ANDROID_BUILD_TOOLS_VERSION" -fi -if [ -z "${ANDROID_CMDLINE_TOOLS_VERSION:-}" ] && [ -n "${PLATFORM_ANDROID_CMDLINE_TOOLS_VERSION:-}" ]; then - ANDROID_CMDLINE_TOOLS_VERSION="$PLATFORM_ANDROID_CMDLINE_TOOLS_VERSION" -fi -if [ -z "${ANDROID_SYSTEM_IMAGE_TAG:-}" ] && [ -n "${PLATFORM_ANDROID_SYSTEM_IMAGE_TAG:-}" ]; then - ANDROID_SYSTEM_IMAGE_TAG="$PLATFORM_ANDROID_SYSTEM_IMAGE_TAG" -fi - -# Only act if neither var is already provided. -if [ -z "${ANDROID_SDK_ROOT:-}" ] && [ -z "${ANDROID_HOME:-}" ]; then - DEVBOX_SDK_OUT=$( - nix --extra-experimental-features 'nix-command flakes' \ - eval --raw "path:${DEVBOX_PROJECT_ROOT}/nix#android-sdk.outPath" 2>/dev/null || true - ) - if [ -n "${DEVBOX_SDK_OUT:-}" ] && [ -d "$DEVBOX_SDK_OUT/libexec/android-sdk" ]; then - ANDROID_SDK_ROOT="$DEVBOX_SDK_OUT/libexec/android-sdk" - ANDROID_HOME="$ANDROID_SDK_ROOT" - fi -fi - -if [ -z "${ANDROID_SDK_ROOT:-}" ] && [ -n "${ANDROID_HOME:-}" ]; then - ANDROID_SDK_ROOT="$ANDROID_HOME" -fi - -if [ -n "${ANDROID_SDK_ROOT:-}" ] && [ -z "${ANDROID_HOME:-}" ]; then - ANDROID_HOME="$ANDROID_SDK_ROOT" -fi - -export ANDROID_SDK_ROOT ANDROID_HOME -export ANDROID_BUILD_TOOLS_VERSION - -if [ -n "${ANDROID_SDK_ROOT:-}" ]; then - # Prefer cmdline-tools;latest, or fall back to the highest numbered cmdline-tools folder. - cmdline_tools_bin="" - if [ -d "$ANDROID_SDK_ROOT/cmdline-tools/latest/bin" ]; then - cmdline_tools_bin="$ANDROID_SDK_ROOT/cmdline-tools/latest/bin" - else - cmdline_tools_dir=$(find "$ANDROID_SDK_ROOT/cmdline-tools" -maxdepth 1 -mindepth 1 -type d -not -name latest 2>/dev/null | sort -V | tail -n 1) - if [ -n "${cmdline_tools_dir:-}" ] && [ -d "$cmdline_tools_dir/bin" ]; then - cmdline_tools_bin="$cmdline_tools_dir/bin" - fi - fi - - new_path="$ANDROID_SDK_ROOT/emulator:$ANDROID_SDK_ROOT/platform-tools" - - if [ -n "${cmdline_tools_bin:-}" ]; then - new_path="$new_path:$cmdline_tools_bin" - fi - - new_path="$new_path:$ANDROID_SDK_ROOT/tools/bin:$PATH" - PATH="$new_path" - export PATH - echo "Using Android SDK: $ANDROID_SDK_ROOT" - case "$ANDROID_SDK_ROOT" in - /nix/store/*) - echo "Source: Nix flake (reproducible, pinned). To use your local SDK instead, set ANDROID_HOME/ANDROID_SDK_ROOT before starting devbox shell." - ;; - *) - echo "Source: User/local SDK. To use the pinned Nix SDK, unset ANDROID_HOME/ANDROID_SDK_ROOT before starting devbox shell." - ;; - esac -else - echo "Android SDK not set; using system PATH" -fi diff --git a/scripts/android/manager.sh b/scripts/android/manager.sh deleted file mode 100755 index a1275adb6..000000000 --- a/scripts/android/manager.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -action="${1:-}" -shift || true - -source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/env.sh" - -start_android() { - local flavor="${AVD_FLAVOR:-latest}" headless="${EMU_HEADLESS:-}" port="${EMU_PORT:-5554}" - local avd="${DETOX_AVD:-}" - - if [[ -z $avd ]]; then - if [[ $flavor == "latest" ]]; then - local host_arch - host_arch="$(uname -m)" - avd="medium_phone_API33_$([[ $host_arch == "arm64" || $host_arch == "aarch64" ]] && echo arm64_v8a || echo x86_64)" - else - avd="pixel_API21_$(uname -m | grep -qi arm && echo arm64_v8a || echo x86_64)" - fi - fi - - devbox run setup-android - local target_serial="emulator-${port}" - if command -v adb >/dev/null 2>&1; then - adb devices | awk 'NR>1 && $2=="offline" {print $1}' | while read -r d; do adb -s "$d" emu kill >/dev/null 2>&1 || true; done - fi - echo "Starting Android emulator: ${avd} (flavor ${flavor}, port ${port}, headless=${headless:-0})" - emulator -avd "${avd}" ${headless:+-no-window} -port "${port}" -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none -accel on -writable-system -no-snapshot-save & - adb -s "${target_serial}" wait-for-device - local boot_completed="" - until [ "$boot_completed" = "1" ]; do - boot_completed=$(adb -s "${target_serial}" shell getprop sys.boot_completed 2>/dev/null | tr -d "\r") - sleep 5 - done - adb -s "${target_serial}" shell settings put global window_animation_scale 0 - adb -s "${target_serial}" shell settings put global transition_animation_scale 0 - adb -s "${target_serial}" shell settings put global animator_duration_scale 0 -} - -stop_android() { - devbox run stop-android -} - -reset_android() { - devbox run reset-android -} - -case "$action" in -start) start_android ;; -stop) stop_android ;; -reset) reset_android ;; -*) - echo "Usage: manager.sh {start|stop|reset}" >&2 - exit 1 - ;; -esac diff --git a/scripts/android/setup.sh b/scripts/android/setup.sh deleted file mode 100755 index ffc0b7cef..000000000 --- a/scripts/android/setup.sh +++ /dev/null @@ -1,150 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -# Creates AVDs using the Android SDK provided by devbox/flake (system images, emulator, NDK already installed). -# Run inside a devbox shell so SDK tools are available. -# Configurable via env: -# AVD_API (default 21) -# AVD_DEVICE (default "pixel") -# AVD_TAG (default "google_apis") -# AVD_ABI (preferred ABI; optional) -# AVD_NAME (override final AVD name; otherwise computed) -# Secondary AVD (created in addition to the primary): -# AVD_SECONDARY_API (default 33) -# AVD_SECONDARY_DEVICE (default "medium_phone") -# AVD_SECONDARY_TAG (default "google_apis") -# AVD_SECONDARY_ABI (preferred ABI; optional) -# AVD_SECONDARY_NAME (override final name) - -script_dir="$(cd "$(dirname "$0")" && pwd)" -# shellcheck disable=SC1090 -. "$script_dir/../shared/common.sh" -load_platform_versions "$script_dir" - -detect_sdk_root() { - if [[ -n ${ANDROID_SDK_ROOT:-} ]]; then - echo "$ANDROID_SDK_ROOT" - return - fi - - local sm - sm="$(command -v sdkmanager 2>/dev/null || true)" - if [[ -z $sm ]]; then - return - fi - sm="$(readlink -f "$sm")" - local candidates=( - "$(dirname "$sm")/.." - "$(dirname "$sm")/../share/android-sdk" - "$(dirname "$sm")/../libexec/android-sdk" - "$(dirname "$sm")/../.." - ) - for c in "${candidates[@]}"; do - if [[ -d "$c/platform-tools" || -d "$c/platforms" || -d "$c/system-images" ]]; then - echo "$c" - return - fi - done -} - -avd_exists() { - local name="$1" - avdmanager list avd | grep -q "Name: ${name}" -} - -pick_image() { - local api="$1" tag="$2" preferred_abi="$3" - local host_arch - host_arch="$(uname -m)" - - local candidates=() - if [[ -n ${preferred_abi:-} ]]; then - candidates=("$preferred_abi") - else - case "$host_arch" in - arm64 | aarch64) candidates=("arm64-v8a" "x86_64" "x86") ;; - *) candidates=("x86_64" "x86" "arm64-v8a") ;; - esac - fi - - for abi in "${candidates[@]}"; do - local image="system-images;android-${api};${tag};${abi}" - local path="${ANDROID_SDK_ROOT}/system-images/android-${api}/${tag}/${abi}" - if [[ -d $path ]]; then - echo "$image" - return 0 - fi - done - - return 1 -} - -create_avd() { - local name="$1" device="$2" image="$3" - local abi="${image##*;}" - - if avd_exists "$name"; then - echo "AVD ${name} already exists." - return 0 - fi - - echo "Creating AVD ${name} with ${image}..." - avdmanager create avd --force --name "$name" --package "$image" --device "$device" --abi "$abi" --sdcard 512M -} - -main() { - local detected_sdk_root - detected_sdk_root="$(detect_sdk_root)" - - if [[ -z ${ANDROID_SDK_ROOT:-} && -n $detected_sdk_root ]]; then - export ANDROID_SDK_ROOT="$detected_sdk_root" - fi - - if [[ -z ${ANDROID_SDK_ROOT:-} && -z ${ANDROID_HOME:-} ]]; then - echo "ANDROID_SDK_ROOT/ANDROID_HOME must be set. In a devbox shell, the flake-provided SDK should supply sdkmanager in PATH; if not, set ANDROID_SDK_ROOT to the flake's android-sdk path." >&2 - exit 1 - fi - - export ANDROID_HOME="${ANDROID_HOME:-$ANDROID_SDK_ROOT}" - - require_tool avdmanager - require_tool emulator - - local primary_api="${AVD_API:-${ANDROID_MIN_API:-${PLATFORM_ANDROID_MIN_API:-21}}}" - local primary_tag="${AVD_TAG:-${ANDROID_SYSTEM_IMAGE_TAG:-${PLATFORM_ANDROID_SYSTEM_IMAGE_TAG:-google_apis}}}" - local primary_device="${AVD_DEVICE:-pixel}" - local primary_preferred_abi="${AVD_ABI:-}" - - local secondary_api="${AVD_SECONDARY_API:-${ANDROID_MAX_API:-${PLATFORM_ANDROID_MAX_API:-33}}}" - local secondary_tag="${AVD_SECONDARY_TAG:-${ANDROID_SYSTEM_IMAGE_TAG:-${PLATFORM_ANDROID_SYSTEM_IMAGE_TAG:-google_apis}}}" - local secondary_device="${AVD_SECONDARY_DEVICE:-medium_phone}" - local secondary_preferred_abi="${AVD_SECONDARY_ABI:-}" - - local targets=( - "$primary_api|$primary_tag|$primary_device|$primary_preferred_abi|${AVD_NAME:-}" - "$secondary_api|$secondary_tag|$secondary_device|$secondary_preferred_abi|${AVD_SECONDARY_NAME:-}" - ) - - for target in "${targets[@]}"; do - IFS="|" read -r api tag device preferred_abi name_override <<<"$target" - - local api_image - if ! api_image="$(pick_image "$api" "$tag" "$preferred_abi")"; then - echo "Expected API ${api} system image (${tag}; preferred ABI ${preferred_abi:-auto}) not found under ${ANDROID_SDK_ROOT}/system-images/android-${api}." >&2 - echo "Re-enter the devbox shell (flake should provide images) or rebuild Devbox to fetch them." >&2 - continue - fi - - local abi="${api_image##*;}" - local avd_name="${name_override:-$(printf '%s_API%s_%s' "$device" "$api" "${abi//-/_}")}" - - create_avd "$avd_name" "$device" "$api_image" - if avd_exists "$avd_name"; then - echo "AVD ready: ${avd_name} (${api_image})" - fi - done - - echo "AVDs ready. Boot with: emulator -avd --netdelay none --netspeed full" -} - -main "$@" diff --git a/scripts/android/test.sh b/scripts/android/test.sh deleted file mode 100755 index 342a187a0..000000000 --- a/scripts/android/test.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -script_dir="$(cd "$(dirname "$0")" && pwd)" -# shellcheck disable=SC1090 -. "$script_dir/../shared/common.sh" - -bash "$SCRIPTS_DIR/android/setup.sh" -yarn install -yarn e2e install -yarn build -yarn e2e build:android -yarn e2e test:android diff --git a/scripts/build.sh b/scripts/build.sh deleted file mode 100755 index d22efb734..000000000 --- a/scripts/build.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -script_dir="$(cd "$(dirname "$0")" && pwd)" -# shellcheck disable=SC1090 -. "$script_dir/shared/common.sh" - -yarn install --immutable -yarn build -yarn lint diff --git a/scripts/ios/env.sh b/scripts/ios/env.sh deleted file mode 100755 index c5ee09930..000000000 --- a/scripts/ios/env.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -devbox_omit_nix_env() { - if [ "${DEVBOX_OMIT_NIX_ENV_APPLIED:-}" = "1" ]; then - return 0 - fi - - export DEVBOX_OMIT_NIX_ENV_APPLIED=1 - - dump_env() { - echo "devbox omit-nix-env $1" - echo " PATH=$PATH" - echo " CC=${CC:-}" - echo " CXX=${CXX:-}" - echo " LD=${LD:-}" - echo " CPP=${CPP:-}" - echo " AR=${AR:-}" - echo " SDKROOT=${SDKROOT:-}" - echo " DEVELOPER_DIR=${DEVELOPER_DIR:-}" - } - - dump_env "before" - - eval "$(devbox shellenv --init-hook --install --no-refresh-alias --omit-nix-env=true)" - - if [ "$(uname -s)" = "Darwin" ]; then - PATH="$(printf '%s' "$PATH" | tr ':' '\n' | awk '!/^\/nix\/store\//{print}' | paste -sd ':' -)" - - for var in CC CXX LD CPP AR AS NM RANLIB STRIP OBJC OBJCXX SDKROOT DEVELOPER_DIR; do - value="${!var:-}" - if [ -n "$value" ] && [ "${value#/nix/store/}" != "$value" ]; then - unset "$var" - fi - done - - if [ -x /usr/bin/clang ]; then - export CC=/usr/bin/clang - export CXX=/usr/bin/clang++ - fi - - if command -v xcode-select >/dev/null 2>&1; then - dev_dir="$(xcode-select -p 2>/dev/null || true)" - if [ -n "$dev_dir" ]; then - export DEVELOPER_DIR="$dev_dir" - fi - fi - - unset SDKROOT - fi - - dump_env "after" -} - -devbox_omit_nix_env diff --git a/scripts/ios/manager.sh b/scripts/ios/manager.sh deleted file mode 100755 index 52359735f..000000000 --- a/scripts/ios/manager.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -script_dir="$(cd "$(dirname "$0")" && pwd)" -# shellcheck disable=SC1090 -. "$script_dir/../shared/common.sh" -load_platform_versions "$script_dir" - -action="${1:-}" -shift || true - -start_ios() { - local flavor="${IOS_FLAVOR:-latest}" - if [[ $flavor == "minsdk" ]]; then - export IOS_DEVICE_NAMES="${IOS_MIN_DEVICE:-${PLATFORM_IOS_MIN_DEVICE:-iPhone 13}}" - export IOS_RUNTIME="${IOS_MIN_RUNTIME:-${PLATFORM_IOS_MIN_RUNTIME:-15.0}}" - export DETOX_IOS_DEVICE="${DETOX_IOS_DEVICE:-${IOS_MIN_DEVICE:-${PLATFORM_IOS_MIN_DEVICE:-iPhone 13}}}" - else - export IOS_DEVICE_NAMES="${IOS_DEVICE_NAMES:-${IOS_MIN_DEVICE:-${PLATFORM_IOS_MIN_DEVICE:-iPhone 13}},${IOS_MAX_DEVICE:-${PLATFORM_IOS_MAX_DEVICE:-iPhone 17}}}" - export IOS_RUNTIME="${IOS_RUNTIME:-${IOS_MAX_RUNTIME:-${PLATFORM_IOS_MAX_RUNTIME:-}}}" - export DETOX_IOS_DEVICE="${DETOX_IOS_DEVICE:-iPhone 17}" - fi - - devbox run setup-ios - local sim_device="${DETOX_IOS_DEVICE}" - if ! xcrun simctl list devices | grep -q "${sim_device}"; then - echo "Simulator ${sim_device} not found; ensure setup-ios created it." >&2 - exit 1 - fi - echo "Starting iOS simulator: ${sim_device} (runtime ${IOS_RUNTIME})" - xcrun simctl boot "$sim_device" || true - open -a Simulator -} - -stop_ios() { - devbox run stop-ios -} - -reset_ios() { - devbox run reset-ios -} - -case "$action" in -start) start_ios ;; -stop) stop_ios ;; -reset) reset_ios ;; -*) - echo "Usage: manager.sh {start|stop|reset}" >&2 - exit 1 - ;; -esac diff --git a/scripts/ios/setup.sh b/scripts/ios/setup.sh deleted file mode 100755 index de7827cad..000000000 --- a/scripts/ios/setup.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -script_dir="$(cd "$(dirname "$0")" && pwd)" -# shellcheck disable=SC1090 -. "$script_dir/../shared/common.sh" -# shellcheck disable=SC1090 -. "$script_dir/simctl.sh" -load_platform_versions "$script_dir" - -# Creates local iOS simulators for common targets. Requires Xcode command-line tools and jq. -# Env overrides: -# IOS_DEVICE_NAMES="iPhone 15,iPhone 17" (comma-separated) -# IOS_RUNTIME="26.1" (preferred runtime prefix; falls back to latest available) -# IOS_DOWNLOAD_RUNTIME=1 to attempt xcodebuild -downloadPlatform iOS when the preferred runtime is missing -# IOS_DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer" to override the Xcode path; defaults to xcode-select -p or the standard Xcode.app if found - -ensure_developer_dir() { - local desired="${IOS_DEVELOPER_DIR:-}" - if [[ -z $desired ]]; then - if xcode-select -p >/dev/null 2>&1; then - desired="$(xcode-select -p)" - elif [[ -d /Applications/Xcode.app/Contents/Developer ]]; then - desired="/Applications/Xcode.app/Contents/Developer" - fi - fi - - if [[ -n $desired && -d $desired ]]; then - export DEVELOPER_DIR="$desired" - export PATH="$DEVELOPER_DIR/usr/bin:$PATH" - return 0 - fi - - echo "Xcode developer directory not found. Install Xcode/CLI tools or set IOS_DEVELOPER_DIR to an Xcode path (e.g., /Applications/Xcode.app/Contents/Developer)." >&2 - exit 1 -} - -ensure_developer_dir - -require_tool xcrun "Missing required tool: xcrun. Install Xcode CLI tools before running (xcode-select --install or Xcode.app + xcode-select -s)." -require_tool jq - -ensure_simctl() { - if xcrun -f simctl >/dev/null 2>&1; then - return 0 - fi - cat >&2 <<'EOF' -Missing simctl. -- The standalone Command Line Tools do NOT include simctl; you need full Xcode. -- Install/locate Xcode.app, then select it: - sudo xcode-select -s /Applications/Xcode.app/Contents/Developer -- You can also set IOS_DEVELOPER_DIR to your Xcode path for this script. -EOF - exit 1 -} - -ensure_simctl - -main() { - ensure_core_sim_service || return 1 - IFS=',' read -r -a devices <<<"${IOS_DEVICE_NAMES:-${IOS_MIN_DEVICE:-${PLATFORM_IOS_MIN_DEVICE:-iPhone 13}},${IOS_MAX_DEVICE:-${PLATFORM_IOS_MAX_DEVICE:-iPhone 17}}}" - local runtime="${IOS_RUNTIME:-${IOS_MIN_RUNTIME:-${PLATFORM_IOS_MIN_RUNTIME:-15.0}}}" - for device in "${devices[@]}"; do - ensure_device "$(echo "$device" | xargs)" "$runtime" - done - echo "Done. Launch via Xcode > Devices or 'xcrun simctl boot \"\"' then 'open -a Simulator'." -} - -main "$@" diff --git a/scripts/ios/simctl.sh b/scripts/ios/simctl.sh deleted file mode 100644 index ddfe7bf27..000000000 --- a/scripts/ios/simctl.sh +++ /dev/null @@ -1,127 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -ensure_core_sim_service() { - local output status - output="$(xcrun simctl list devices -j 2>&1)" || status=$? - if [[ -n ${status:-} ]]; then - echo "simctl failed while listing devices (status ${status}). CoreSimulatorService may be unhealthy." >&2 - echo "Try restarting it:" >&2 - echo " killall -9 com.apple.CoreSimulatorService 2>/dev/null || true" >&2 - echo " launchctl kickstart -k gui/$UID/com.apple.CoreSimulatorService" >&2 - echo "Then open Simulator once and rerun devbox run setup-ios." >&2 - echo "simctl error output:" >&2 - echo "$output" >&2 - return 1 - fi - - if echo "$output" | grep -q "CoreSimulatorService connection became invalid"; then - echo "CoreSimulatorService is not healthy. Try restarting it:" >&2 - echo " killall -9 com.apple.CoreSimulatorService 2>/dev/null || true" >&2 - echo " launchctl kickstart -k gui/$UID/com.apple.CoreSimulatorService" >&2 - echo "Then open Simulator once and rerun devbox run setup-ios." >&2 - echo "simctl error output:" >&2 - echo "$output" >&2 - return 1 - fi -} - -pick_runtime() { - local preferred="$1" - local json choice - json="$(xcrun simctl list runtimes -j)" - choice="$(echo "$json" | jq -r --arg v "$preferred" '.runtimes[] | select(.isAvailable and (.name|startswith("iOS \($v)"))) | "\(.identifier)|\(.name)"' | head -n1)" - if [[ -z $choice || $choice == "null" ]]; then - choice="$(echo "$json" | jq -r '.runtimes[] | select(.isAvailable and (.name|startswith("iOS "))) | "\(.version)|\(.identifier)|\(.name)"' | sort -Vr | head -n1 | cut -d"|" -f2-)" - fi - [[ -n $choice && $choice != "null" ]] || return 1 - echo "$choice" -} - -resolve_runtime() { - local preferred="$1" - if choice=$(pick_runtime "$preferred"); then - echo "$choice" - return 0 - fi - - if [[ ${IOS_DOWNLOAD_RUNTIME:-1} != "0" ]] && command -v xcodebuild >/dev/null 2>&1; then - echo "Preferred runtime iOS ${preferred} not found. Attempting to download via xcodebuild -downloadPlatform iOS..." >&2 - if xcodebuild -downloadPlatform iOS; then - if choice=$(pick_runtime "$preferred"); then - echo "$choice" - return 0 - fi - else - echo "xcodebuild -downloadPlatform iOS failed; continuing with available runtimes." >&2 - fi - fi - - pick_runtime "$preferred" -} - -existing_device_udid_any_runtime() { - local name="$1" - xcrun simctl list devices -j | jq -r --arg name "$name" '.devices[]?[]? | select(.name == $name) | .udid' | head -n1 -} - -device_data_dir_exists() { - local udid="${1:-}" - [[ -n $udid ]] || return 1 - local dir="$HOME/Library/Developer/CoreSimulator/Devices/$udid" - [[ -d $dir ]] -} - -devicetype_id_for_name() { - local name="$1" - xcrun simctl list devicetypes -j | jq -r --arg name "$name" '.devicetypes[] | select((.name|ascii_downcase) == ($name|ascii_downcase)) | .identifier' | head -n1 -} - -ensure_device() { - local base_name="$1" preferred_runtime="$2" - - # If a device with this name already exists anywhere, reuse it. - if - existing_udid=$(existing_device_udid_any_runtime "$base_name") - [[ -n ${existing_udid} ]] - then - if device_data_dir_exists "$existing_udid"; then - echo "Found existing ${base_name}: ${existing_udid}" - return 0 - fi - echo "Existing ${base_name} (${existing_udid}) is missing its data directory. Deleting stale simulator..." - xcrun simctl delete "$existing_udid" || true - fi - - local choice runtime_id runtime_name - if ! choice=$(resolve_runtime "$preferred_runtime"); then - echo "No available iOS simulator runtime found. Install one in Xcode (Settings > Platforms) and retry." >&2 - return 1 - fi - runtime_id="$(echo "$choice" | cut -d'|' -f1)" - runtime_name="$(echo "$choice" | cut -d'|' -f2)" - - local display_name="${base_name} (${runtime_name})" - - if ! device_type=$(devicetype_id_for_name "$base_name"); then - echo "Device type '${base_name}' is unavailable in this Xcode install. Skipping ${display_name}." >&2 - return 0 - fi - - # Also check for an existing device with the runtime-qualified display name. - if - existing_udid=$(existing_device_udid_any_runtime "$display_name") - [[ -n ${existing_udid} ]] - then - if device_data_dir_exists "$existing_udid"; then - echo "Found existing ${display_name}: ${existing_udid}" - return 0 - fi - echo "Existing ${display_name} (${existing_udid}) is missing its data directory. Deleting stale simulator..." - xcrun simctl delete "$existing_udid" || true - fi - - echo "Creating ${display_name}..." - xcrun simctl create "$display_name" "$device_type" "$runtime_id" - echo "Created ${display_name}" -} diff --git a/scripts/ios/test.sh b/scripts/ios/test.sh deleted file mode 100755 index 7bf5a4189..000000000 --- a/scripts/ios/test.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -script_dir="$(cd "$(dirname "$0")" && pwd)" -# shellcheck disable=SC1090 -. "$script_dir/../shared/common.sh" - -if [ "$(uname -s)" = "Darwin" ]; then - . "$SCRIPTS_DIR/ios/env.sh" -fi - -echo "iOS test env" -echo " PATH=$PATH" -echo " CC=${CC:-}" -echo " CXX=${CXX:-}" -echo " SDKROOT=${SDKROOT:-}" -echo " DEVELOPER_DIR=${DEVELOPER_DIR:-}" - -bash "$SCRIPTS_DIR/ios/setup.sh" -yarn install -yarn e2e install -yarn e2e pods -yarn build -yarn e2e build:ios -yarn e2e test:ios diff --git a/scripts/platform-versions.sh b/scripts/platform-versions.sh deleted file mode 100644 index 0713ce9cb..000000000 --- a/scripts/platform-versions.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env sh -# Load shared platform version defaults from JSON for a single source of truth. - -script_dir="$(cd "$(dirname "$0")" && pwd)" -repo_root="$(cd "$script_dir/.." && pwd)" -versions_json="${PLATFORM_VERSIONS_JSON:-$repo_root/nix/platform-versions.json}" - -if [ -f "$versions_json" ] && command -v jq >/dev/null 2>&1; then - eval "$( - jq -r 'to_entries[] | "\(.key)=\(.value|@sh)"' "$versions_json" - )" -fi diff --git a/scripts/shared/common.sh b/scripts/shared/common.sh deleted file mode 100644 index a62edbf02..000000000 --- a/scripts/shared/common.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/env sh - -require_tool() { - tool="$1" - message="${2:-Missing required tool: $tool. Ensure devbox shell is active and required packages are installed.}" - if ! command -v "$tool" >/dev/null 2>&1; then - echo "$message" >&2 - exit 1 - fi -} - -ensure_project_root() { - if [ -n "${PROJECT_ROOT:-}" ]; then - return 0 - fi - - base_dir="${1:-}" - if [ -z "$base_dir" ]; then - base_dir="$PWD" - fi - - git_root="" - if command -v git >/dev/null 2>&1; then - git_root="$(git -C "$base_dir" rev-parse --show-toplevel 2>/dev/null || true)" - fi - - if [ -n "$git_root" ]; then - PROJECT_ROOT="$git_root" - elif [ -f "$base_dir/../shared/common.sh" ] && [ -f "$base_dir/../build.sh" ]; then - PROJECT_ROOT="$(cd "$base_dir/.." && pwd)" - elif [ -f "$base_dir/shared/common.sh" ] && [ -f "$base_dir/build.sh" ]; then - PROJECT_ROOT="$(cd "$base_dir" && pwd)" - fi - - if [ -n "${PROJECT_ROOT:-}" ]; then - export PROJECT_ROOT - fi -} - -load_platform_versions() { - base_dir="$1" - platform_versions="${base_dir%/}/../platform-versions.sh" - if [ -f "$platform_versions" ]; then - # shellcheck disable=SC1090 - . "$platform_versions" - fi -} - -ensure_project_root "${SCRIPT_DIR:-${script_dir:-${PWD}}}" - -if [ -z "${SCRIPTS_DIR:-}" ] && [ -n "${PROJECT_ROOT:-}" ]; then - SCRIPTS_DIR="$PROJECT_ROOT/scripts" - export SCRIPTS_DIR -fi diff --git a/shells/devbox-android.json b/shells/devbox-android.json deleted file mode 100644 index a1be49c55..000000000 --- a/shells/devbox-android.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/jetify-com/devbox/0.14.2/.schema/devbox.schema.json", - "packages": { - "yarn-berry": "latest", - "jdk17": "latest", - "gradle": "latest", - "jq": "latest", - "path:../nix#android-sdk": "" - }, - "shell": { - "init_hook": [ - ". $DEVBOX_PROJECT_ROOT/../scripts/shared/common.sh", - "echo 'Android SDK env configured (details: wiki/devbox.md#devbox-android).'", - ". $SCRIPTS_DIR/android/env.sh" - ], - "scripts": { - "setup-android": ["bash $SCRIPTS_DIR/android/setup.sh"], - "test-android": ["bash $SCRIPTS_DIR/android/test.sh"] - } - } -} diff --git a/shells/devbox-fast.json b/shells/devbox-fast.json index 2413eb4e5..ec8f5a823 100644 --- a/shells/devbox-fast.json +++ b/shells/devbox-fast.json @@ -8,9 +8,12 @@ "shfmt": "latest" }, "shell": { - "init_hook": [". $DEVBOX_PROJECT_ROOT/../scripts/shared/common.sh"], "scripts": { - "build": ["bash $SCRIPTS_DIR/build.sh"], + "build": [ + "yarn install --immutable", + "yarn build", + "yarn lint" + ], "release": [ "npm config set //registry.npmjs.org/:_authToken ${NPM_TOKEN}", "yarn install --immutable", diff --git a/shells/devbox-ios.json b/shells/devbox-ios.json deleted file mode 100644 index ba43b7d33..000000000 --- a/shells/devbox-ios.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/jetify-com/devbox/0.14.2/.schema/devbox.schema.json", - "packages": { - "cocoapods": { - "version": "latest", - "platforms": ["x86_64-darwin", "aarch64-darwin"] - }, - "yarn-berry": "latest", - "jq": "latest" - }, - "shell": { - "init_hook": [ - ". $DEVBOX_PROJECT_ROOT/../scripts/shared/common.sh", - "if [ \"$(uname -s)\" = \"Darwin\" ]; then . $SCRIPTS_DIR/ios/env.sh; fi" - ], - "scripts": { - "setup-ios": ["bash $SCRIPTS_DIR/ios/setup.sh"], - "test-ios": ["bash $SCRIPTS_DIR/ios/test.sh"] - } - } -} diff --git a/shells/devbox.lock b/shells/devbox.lock index ae82190ba..53797e9c2 100644 --- a/shells/devbox.lock +++ b/shells/devbox.lock @@ -1,41 +1,13 @@ { "lockfile_version": "1", "packages": { - "cocoapods@latest": { - "last_modified": "2025-12-31T03:27:36Z", - "resolved": "github:NixOS/nixpkgs/f665af0cdb70ed27e1bd8f9fdfecaf451260fc55#cocoapods", - "source": "devbox-search", - "version": "1.16.2", - "systems": { - "aarch64-darwin": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/av5g6hfp0yiir3iavg72js70ian8hxyf-cocoapods-1.16.2", - "default": true - } - ], - "store_path": "/nix/store/av5g6hfp0yiir3iavg72js70ian8hxyf-cocoapods-1.16.2" - }, - "x86_64-darwin": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/har71589bwmh6h6skisd20b3c6lrwmz7-cocoapods-1.16.2", - "default": true - } - ], - "store_path": "/nix/store/har71589bwmh6h6skisd20b3c6lrwmz7-cocoapods-1.16.2" - } - } - }, "github:NixOS/nixpkgs/nixpkgs-unstable": { - "last_modified": "2026-01-27T15:18:14Z", - "resolved": "github:NixOS/nixpkgs/afce96367b2e37fc29afb5543573cd49db3357b7?lastModified=1769527094" + "last_modified": "2026-02-15T17:45:47Z", + "resolved": "github:NixOS/nixpkgs/ac055f38c798b0d87695240c7b761b82fc7e5bc2?lastModified=1771177547" }, "jq@latest": { - "last_modified": "2026-01-20T02:11:35Z", - "resolved": "github:NixOS/nixpkgs/ed142ab1b3a092c4d149245d0c4126a5d7ea00b0#jq", + "last_modified": "2026-02-15T17:45:47Z", + "resolved": "github:NixOS/nixpkgs/ac055f38c798b0d87695240c7b761b82fc7e5bc2#jq", "source": "devbox-search", "version": "1.8.1", "systems": { @@ -43,115 +15,259 @@ "outputs": [ { "name": "bin", - "path": "/nix/store/9rm6fm3zq1jq8rgsx528cw8wkmfya2gf-jq-1.8.1-bin", + "path": "/nix/store/qjs0qndyz1g97rsc1zp4cd692y5iph64-jq-1.8.1-bin", "default": true }, { "name": "man", - "path": "/nix/store/cv999saj62xhq7xv5i7q6944vljykfmw-jq-1.8.1-man", + "path": "/nix/store/jlpyybc7pdh4gk17dc266d6a1szm7dk6-jq-1.8.1-man", "default": true }, { "name": "dev", - "path": "/nix/store/5camppj4hz2mgkdbxs0kr6nvh6qa65wf-jq-1.8.1-dev" + "path": "/nix/store/bhryp10d5w5h9rsav5k9m9jb55z26bsl-jq-1.8.1-dev" }, { "name": "doc", - "path": "/nix/store/lak094rhhxlaj1qycadmxyfphgjadj5r-jq-1.8.1-doc" + "path": "/nix/store/238sn0gg3i3i9v6kgx4g1k6b19frzy49-jq-1.8.1-doc" }, { "name": "out", - "path": "/nix/store/g371yvjasdr552v98p5kav7n35s1dfib-jq-1.8.1" + "path": "/nix/store/n64h0247s3674kry90l6kszx06zyrgfn-jq-1.8.1" } ], - "store_path": "/nix/store/9rm6fm3zq1jq8rgsx528cw8wkmfya2gf-jq-1.8.1-bin" + "store_path": "/nix/store/qjs0qndyz1g97rsc1zp4cd692y5iph64-jq-1.8.1-bin" }, "aarch64-linux": { "outputs": [ { "name": "bin", - "path": "/nix/store/m8qv4g54q3jmjb8i33v9lljcwhydx2vd-jq-1.8.1-bin", + "path": "/nix/store/c1qm5fsn6qbl09xdjx649vifabypyywd-jq-1.8.1-bin", "default": true }, { "name": "man", - "path": "/nix/store/9x2457g76jikfy7xq4mjqwzl8iz3zvxj-jq-1.8.1-man", + "path": "/nix/store/2pjwv0ab8nilrg1lvjazf9y9w6g6pk5y-jq-1.8.1-man", "default": true }, { "name": "dev", - "path": "/nix/store/5ykn83b3hhvnnq0p5vqgcrzihrl9wpsl-jq-1.8.1-dev" + "path": "/nix/store/2sy4y09ddbi64pbg4is078110z70jsdw-jq-1.8.1-dev" }, { "name": "doc", - "path": "/nix/store/37ypy1595g6rj3cymh1mpk2b25fx40g7-jq-1.8.1-doc" + "path": "/nix/store/vx81xggapqwdd2l64mmxrkbafih461jc-jq-1.8.1-doc" }, { "name": "out", - "path": "/nix/store/16lg603jzppwjanlakcak1ais69mkd03-jq-1.8.1" + "path": "/nix/store/cfhajjz1k7gf31krbj18q9acb54xp5z9-jq-1.8.1" } ], - "store_path": "/nix/store/m8qv4g54q3jmjb8i33v9lljcwhydx2vd-jq-1.8.1-bin" + "store_path": "/nix/store/c1qm5fsn6qbl09xdjx649vifabypyywd-jq-1.8.1-bin" }, "x86_64-darwin": { "outputs": [ { "name": "bin", - "path": "/nix/store/kkb17whpkdrmn9g3gk7y6l69vipxsw0i-jq-1.8.1-bin", + "path": "/nix/store/51343hgchh7by4l8r1g244ma05ny3x0b-jq-1.8.1-bin", "default": true }, { "name": "man", - "path": "/nix/store/iwr61wi83kflqvz8j5nf7ridaqq6nh2w-jq-1.8.1-man", + "path": "/nix/store/vx840ik1sj1h8fhqwa40aglvrgpa0r18-jq-1.8.1-man", "default": true }, { "name": "dev", - "path": "/nix/store/lypnqs272644l8ff6wfji9rg5jw10v7h-jq-1.8.1-dev" + "path": "/nix/store/pp2hrljvalrrwyxh7is69nnlmxb2m7lk-jq-1.8.1-dev" }, { "name": "doc", - "path": "/nix/store/nyw97c4pywfcqqap5hyk9xjghczlbshl-jq-1.8.1-doc" + "path": "/nix/store/h05xaf7fsasgp8cpyar2195cc8lbgih8-jq-1.8.1-doc" }, { "name": "out", - "path": "/nix/store/ri930a557685c64bdh88a5031i7hx3vy-jq-1.8.1" + "path": "/nix/store/bmg2xfw86wavg7fm062nyf6v48xzxh0j-jq-1.8.1" } ], - "store_path": "/nix/store/kkb17whpkdrmn9g3gk7y6l69vipxsw0i-jq-1.8.1-bin" + "store_path": "/nix/store/51343hgchh7by4l8r1g244ma05ny3x0b-jq-1.8.1-bin" }, "x86_64-linux": { "outputs": [ { "name": "bin", - "path": "/nix/store/zssasryipb2x4gk2ahzacl4mvvcmk48j-jq-1.8.1-bin", + "path": "/nix/store/qnaw7i777j52fpgbl5pgmzkq85znp083-jq-1.8.1-bin", "default": true }, { "name": "man", - "path": "/nix/store/7d4pv1iymyqk2lykwj1ydml3rjhc6gl3-jq-1.8.1-man", + "path": "/nix/store/6mh88qsh57ivh31c5nqxc43n0hv9xhbk-jq-1.8.1-man", "default": true }, { - "name": "dev", - "path": "/nix/store/rmxxm5jnxq93kvkhbr2b3hzj6v3ldp8z-jq-1.8.1-dev" + "name": "doc", + "path": "/nix/store/3ynrp4ypwv1g1jgsk638443p8lpd9g8f-jq-1.8.1-doc" }, { - "name": "doc", - "path": "/nix/store/mkhfvc69grlky3iblibkw9wcc12jcdqq-jq-1.8.1-doc" + "name": "out", + "path": "/nix/store/fgsvqffyvcpjqs093wwf2d6dzxnmnqnv-jq-1.8.1" }, + { + "name": "dev", + "path": "/nix/store/d73i1fvhrqms0sbfrvqaynsr8iva216v-jq-1.8.1-dev" + } + ], + "store_path": "/nix/store/qnaw7i777j52fpgbl5pgmzkq85znp083-jq-1.8.1-bin" + } + } + }, + "nixfmt@latest": { + "last_modified": "2026-01-23T17:20:52Z", + "resolved": "github:NixOS/nixpkgs/a1bab9e494f5f4939442a57a58d0449a109593fe#nixfmt", + "source": "devbox-search", + "version": "1.2.0", + "systems": { + "aarch64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/lvb2z93xn3m0m2hw0w6cc0c3bsl2s8pp-nixfmt-1.2.0", + "default": true + } + ], + "store_path": "/nix/store/lvb2z93xn3m0m2hw0w6cc0c3bsl2s8pp-nixfmt-1.2.0" + }, + "aarch64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/0qdx7ah7b1dwyxa03fblhcdjnpi29q25-nixfmt-1.2.0", + "default": true + } + ], + "store_path": "/nix/store/0qdx7ah7b1dwyxa03fblhcdjnpi29q25-nixfmt-1.2.0" + }, + "x86_64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/jicz2kx49mqif3hkl1m2wbwvx2lg457l-nixfmt-1.2.0", + "default": true + } + ], + "store_path": "/nix/store/jicz2kx49mqif3hkl1m2wbwvx2lg457l-nixfmt-1.2.0" + }, + "x86_64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/b5m1h822ln0s493r30sgns77618ws59n-nixfmt-1.2.0", + "default": true + } + ], + "store_path": "/nix/store/b5m1h822ln0s493r30sgns77618ws59n-nixfmt-1.2.0" + } + } + }, + "shfmt@latest": { + "last_modified": "2026-01-23T17:20:52Z", + "resolved": "github:NixOS/nixpkgs/a1bab9e494f5f4939442a57a58d0449a109593fe#shfmt", + "source": "devbox-search", + "version": "3.12.0", + "systems": { + "aarch64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/5ywb1qkbd829kazxxkcfxb356m7hljjw-shfmt-3.12.0", + "default": true + } + ], + "store_path": "/nix/store/5ywb1qkbd829kazxxkcfxb356m7hljjw-shfmt-3.12.0" + }, + "aarch64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/bii41pz9k7xf3z3f80s1ip29l42488ry-shfmt-3.12.0", + "default": true + } + ], + "store_path": "/nix/store/bii41pz9k7xf3z3f80s1ip29l42488ry-shfmt-3.12.0" + }, + "x86_64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/a8l3l8rdzs3agq7garh59m0xn8h3zgpq-shfmt-3.12.0", + "default": true + } + ], + "store_path": "/nix/store/a8l3l8rdzs3agq7garh59m0xn8h3zgpq-shfmt-3.12.0" + }, + "x86_64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/r3pj36ll7v3ss2z679arpwkg7pnka3s3-shfmt-3.12.0", + "default": true + } + ], + "store_path": "/nix/store/r3pj36ll7v3ss2z679arpwkg7pnka3s3-shfmt-3.12.0" + } + } + }, + "treefmt@latest": { + "last_modified": "2026-01-23T17:20:52Z", + "resolved": "github:NixOS/nixpkgs/a1bab9e494f5f4939442a57a58d0449a109593fe#treefmt", + "source": "devbox-search", + "version": "2.4.0", + "systems": { + "aarch64-darwin": { + "outputs": [ { "name": "out", - "path": "/nix/store/807g765zgpmp1c8fm5y40rw2gbr1k6dk-jq-1.8.1" + "path": "/nix/store/37qcrdrfdf8b9pyli0j0vj9d69dykmpr-treefmt-2.4.0", + "default": true + } + ], + "store_path": "/nix/store/37qcrdrfdf8b9pyli0j0vj9d69dykmpr-treefmt-2.4.0" + }, + "aarch64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/ccv7dxwff3xpivsdhrjbq3mpk0br5v7d-treefmt-2.4.0", + "default": true + } + ], + "store_path": "/nix/store/ccv7dxwff3xpivsdhrjbq3mpk0br5v7d-treefmt-2.4.0" + }, + "x86_64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/sbq2psv4q9hvfvalk00g0pkqjl2912m1-treefmt-2.4.0", + "default": true + } + ], + "store_path": "/nix/store/sbq2psv4q9hvfvalk00g0pkqjl2912m1-treefmt-2.4.0" + }, + "x86_64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/z8xrjfswqqpydc42lyas064pp8kxgnl0-treefmt-2.4.0", + "default": true } ], - "store_path": "/nix/store/zssasryipb2x4gk2ahzacl4mvvcmk48j-jq-1.8.1-bin" + "store_path": "/nix/store/z8xrjfswqqpydc42lyas064pp8kxgnl0-treefmt-2.4.0" } } }, "yarn-berry@latest": { - "last_modified": "2025-12-31T03:27:36Z", - "resolved": "github:NixOS/nixpkgs/f665af0cdb70ed27e1bd8f9fdfecaf451260fc55#yarn-berry", + "last_modified": "2026-01-23T17:20:52Z", + "resolved": "github:NixOS/nixpkgs/a1bab9e494f5f4939442a57a58d0449a109593fe#yarn-berry", "source": "devbox-search", "version": "4.12.0", "systems": { @@ -159,41 +275,41 @@ "outputs": [ { "name": "out", - "path": "/nix/store/2l7sbyyqardvrzr35zkrw67gbng5gb8y-yarn-berry-4.12.0", + "path": "/nix/store/k9bh72bpyqjnfq1nd3c6p1z2ijkx2yg6-yarn-berry-4.12.0", "default": true } ], - "store_path": "/nix/store/2l7sbyyqardvrzr35zkrw67gbng5gb8y-yarn-berry-4.12.0" + "store_path": "/nix/store/k9bh72bpyqjnfq1nd3c6p1z2ijkx2yg6-yarn-berry-4.12.0" }, "aarch64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/klx9ndw1djgx0zhhyrkcn9an094rmmwv-yarn-berry-4.12.0", + "path": "/nix/store/mcvbqzb1kir87g5pm5624c5ysnfh89wp-yarn-berry-4.12.0", "default": true } ], - "store_path": "/nix/store/klx9ndw1djgx0zhhyrkcn9an094rmmwv-yarn-berry-4.12.0" + "store_path": "/nix/store/mcvbqzb1kir87g5pm5624c5ysnfh89wp-yarn-berry-4.12.0" }, "x86_64-darwin": { "outputs": [ { "name": "out", - "path": "/nix/store/m6cwiya6hrbwnlprh2cbnmz6c7mkylrf-yarn-berry-4.12.0", + "path": "/nix/store/hn3j954rlcc0gx8nm41sgfzbx0qwfq3c-yarn-berry-4.12.0", "default": true } ], - "store_path": "/nix/store/m6cwiya6hrbwnlprh2cbnmz6c7mkylrf-yarn-berry-4.12.0" + "store_path": "/nix/store/hn3j954rlcc0gx8nm41sgfzbx0qwfq3c-yarn-berry-4.12.0" }, "x86_64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/q1gys3zgijcciiafbh9nfawkx5wj8179-yarn-berry-4.12.0", + "path": "/nix/store/2pmvaaggpi7ikx9xmhy3x2j0rpklaqrv-yarn-berry-4.12.0", "default": true } ], - "store_path": "/nix/store/q1gys3zgijcciiafbh9nfawkx5wj8179-yarn-berry-4.12.0" + "store_path": "/nix/store/2pmvaaggpi7ikx9xmhy3x2j0rpklaqrv-yarn-berry-4.12.0" } } } diff --git a/shells/gradle.properties b/shells/gradle.properties deleted file mode 100644 index a468eda9e..000000000 --- a/shells/gradle.properties +++ /dev/null @@ -1 +0,0 @@ -org.gradle.java.home=/nix/store/hlm8a8cnp4hm8xkg0a2yy4kv7cq44jii-zulu-ca-jdk-17.0.12 From 44461a02dfea89a688f76b998d33bd2f3ff22127 Mon Sep 17 00:00:00 2001 From: Andrea Bueide Date: Wed, 18 Feb 2026 12:54:10 -0600 Subject: [PATCH 2/2] format --- .../devices/devices.lock | 18 ++++++++++++++++++ .../devices/devices.lock | 14 ++++++++++++++ devbox.json | 6 +----- shells/devbox-fast.json | 6 +----- 4 files changed, 34 insertions(+), 10 deletions(-) create mode 100644 devbox.d/segment-integrations.devbox-plugins.android/devices/devices.lock create mode 100644 devbox.d/segment-integrations.devbox-plugins.ios/devices/devices.lock diff --git a/devbox.d/segment-integrations.devbox-plugins.android/devices/devices.lock b/devbox.d/segment-integrations.devbox-plugins.android/devices/devices.lock new file mode 100644 index 000000000..5a595dc2b --- /dev/null +++ b/devbox.d/segment-integrations.devbox-plugins.android/devices/devices.lock @@ -0,0 +1,18 @@ +{ + "devices": [ + { + "name": "medium_phone_api36", + "api": 36, + "device": "medium_phone", + "tag": "google_apis" + }, + { + "name": "pixel_api21", + "api": 21, + "device": "pixel", + "tag": "google_apis" + } + ], + "checksum": "8df4d3393b61fbbb08e45cf8762f95c521316938e514527916e4fce88a849d57", + "generated_at": "2026-02-18T18:53:57Z" +} diff --git a/devbox.d/segment-integrations.devbox-plugins.ios/devices/devices.lock b/devbox.d/segment-integrations.devbox-plugins.ios/devices/devices.lock new file mode 100644 index 000000000..b8e239260 --- /dev/null +++ b/devbox.d/segment-integrations.devbox-plugins.ios/devices/devices.lock @@ -0,0 +1,14 @@ +{ + "devices": [ + { + "name": "iPhone 17", + "runtime": "26.2" + }, + { + "name": "iPhone 13", + "runtime": "15.4" + } + ], + "checksum": "4d5276f203d7ad62860bfc067f76194df53be449d4aa8a3b2d069855ec1f3232", + "generated_at": "2026-02-18T18:53:59Z" +} diff --git a/devbox.json b/devbox.json index 55caf4eb8..b784d7bd2 100644 --- a/devbox.json +++ b/devbox.json @@ -18,11 +18,7 @@ "yarn cache clean", "find $DEVBOX_PROJECT_DIR -type d -name node_modules -exec rmdir {} \\;" ], - "build": [ - "yarn install --immutable", - "yarn build", - "yarn lint" - ], + "build": ["yarn install --immutable", "yarn build", "yarn lint"], "format": ["treefmt"], "lint": ["treefmt --fail-on-change"], "test-android": [ diff --git a/shells/devbox-fast.json b/shells/devbox-fast.json index ec8f5a823..18ff8966b 100644 --- a/shells/devbox-fast.json +++ b/shells/devbox-fast.json @@ -9,11 +9,7 @@ }, "shell": { "scripts": { - "build": [ - "yarn install --immutable", - "yarn build", - "yarn lint" - ], + "build": ["yarn install --immutable", "yarn build", "yarn lint"], "release": [ "npm config set //registry.npmjs.org/:_authToken ${NPM_TOKEN}", "yarn install --immutable",