From c50667908617cd0fec6e0d7537c2c56d5e5bd511 Mon Sep 17 00:00:00 2001 From: jwinterm Date: Tue, 19 May 2026 17:37:00 -0400 Subject: [PATCH 1/3] iOS sim: drop sudo /etc/hosts rewrite, add upload diagnostic The runtime sudo rewrite step hung 51m waiting for a password the runner can't enter. The Mac mini's /etc/hosts already points git.such.software at 127.0.0.1, and the host-mode act_runner inherits it directly, so no runtime modification is needed. Replace the rewrite with a passive grep assertion that fails fast with instructions if the entry is missing. Add a diagnostic step before the upload that prints ACTIONS_RUNTIME_URL, ACTIONS_RESULTS_URL, GITHUB_SERVER_URL + probes each with curl -kIv. The last run never reached the upload step, so we still don't know whether upload-artifact targets git.such.software (uses our hosts override) or a different address injected by act_runner. --- .github/workflows/build-ios-sim.yml | 77 ++++++++++++++++++----------- 1 file changed, 49 insertions(+), 28 deletions(-) diff --git a/.github/workflows/build-ios-sim.yml b/.github/workflows/build-ios-sim.yml index 80eade0e..12a9538f 100644 --- a/.github/workflows/build-ios-sim.yml +++ b/.github/workflows/build-ios-sim.yml @@ -272,36 +272,57 @@ jobs: cd build/ios/iphonesimulator zip -r hash_wallet_ios_sim_${{ github.sha }}.zip Runner.app - # Make git.such.software resolve to something the runner can actually - # reach. Independent of whether the Mac's /etc/hosts has an entry, - # we override at job runtime — inside whatever environment this step - # actually runs in (native shell, Docker container, etc.). Try - # host.docker.internal first (Docker Desktop's host gateway). Fall - # back to 127.0.0.1 (works for host-mode runners). - - name: Force git.such.software to resolve locally + # Confirm git.such.software resolves to a local target (the Mac itself). + # The runner inherits the Mac's /etc/hosts directly (host-mode act_runner), + # so the user should have: + # 127.0.0.1 git.such.software + # already in /etc/hosts. We only assert that here, don't modify (sudo + # without NOPASSWD prompts for a password the runner can't enter). + # + # macOS's `getent` doesn't exist and `nslookup` bypasses /etc/hosts. + # We grep /etc/hosts directly — that's what Node's getaddrinfo will + # actually consult. + - name: Verify Gitea hostname resolves locally run: | - set -x - echo "=== before ===" - cat /etc/hosts | tail -10 || true - getent hosts git.such.software 2>/dev/null || nslookup git.such.software 2>/dev/null || true + if grep -qE '^[[:space:]]*(127\.0\.0\.1|host\.docker\.internal|192\.168\.)[[:space:]]+git\.such\.software' /etc/hosts; then + echo "✓ /etc/hosts points git.such.software at a local target:" + grep git.such.software /etc/hosts + else + echo "✗ /etc/hosts is MISSING a local override for git.such.software." + echo " Node will resolve to the public IP and fail on NAT hairpin." + echo " Add (once, on the Mac mini):" + echo " sudo sh -c 'echo \"127.0.0.1 git.such.software\" >> /etc/hosts'" + exit 1 + fi - if getent hosts host.docker.internal >/dev/null 2>&1; then - TARGET=host.docker.internal - else - TARGET=127.0.0.1 - fi - echo "Pointing git.such.software → $TARGET" - # Remove any prior entry, append ours. sudo if available, plain - # write otherwise (root in containers, or NOPASSWD sudo). - if command -v sudo >/dev/null; then - sudo sh -c "sed -i.bak '/git\\.such\\.software/d' /etc/hosts; echo '$TARGET git.such.software' >> /etc/hosts" - else - sed -i.bak '/git\.such\.software/d' /etc/hosts - echo "$TARGET git.such.software" >> /etc/hosts - fi - echo "=== after ===" - cat /etc/hosts | tail -5 - getent hosts git.such.software || nslookup git.such.software || true + # Diagnostic: print exactly where upload-artifact will try to send data. + # act_runner injects these env vars; their values tell us whether the + # upload targets git.such.software (uses our /etc/hosts override) or + # a LAN IP directly (override irrelevant). Also probe the URL with + # curl -k so we see the cert + reachability before the real upload. + - name: Diagnose Actions API endpoint + run: | + set +e + echo "=== Actions runtime env ===" + echo "ACTIONS_RUNTIME_URL=${ACTIONS_RUNTIME_URL:-}" + echo "ACTIONS_RESULTS_URL=${ACTIONS_RESULTS_URL:-}" + echo "ACTIONS_CACHE_URL=${ACTIONS_CACHE_URL:-}" + echo "GITHUB_SERVER_URL=${GITHUB_SERVER_URL:-}" + echo "GITHUB_API_URL=${GITHUB_API_URL:-}" + echo "NODE_TLS_REJECT_UNAUTHORIZED=${NODE_TLS_REJECT_UNAUTHORIZED:-}" + echo + # Probe each non-empty URL to see what Node will actually hit. + for var in ACTIONS_RUNTIME_URL ACTIONS_RESULTS_URL GITHUB_SERVER_URL; do + url="${!var}" + [ -z "$url" ] && continue + host=$(echo "$url" | sed -E 's|^https?://([^/:]+).*|\1|') + echo "--- $var → $url ---" + echo "DNS for $host:" + dscacheutil -q host -a name "$host" 2>/dev/null || nslookup "$host" 2>/dev/null || true + echo "HEAD probe (curl -kIv, 10s timeout):" + curl -kIv --max-time 10 "$url" 2>&1 | head -40 || true + echo + done - name: Upload .app artifact uses: actions/upload-artifact@v3 -- 2.50.1 (Apple Git-155) From 52b8cd090d0843d3278ee8d40f6585ecc1356c7d Mon Sep 17 00:00:00 2001 From: jwinterm Date: Tue, 19 May 2026 17:58:22 -0400 Subject: [PATCH 2/3] Wownero: fix missing icon in wallet picker MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The wow CryptoCurrency had iconPath pointing at assets/images/crypto/wownero.svg, which doesn't exist — so the row in Create New Wallet rendered with no logo. The actual asset lives at assets/new-ui/crypto_full_icons/wownero.svg (same location every other coin uses). Point iconPath there and add flatIconPath for the balance-card-flat icon, mirroring the Monero definition. --- cw_core/lib/crypto_currency.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cw_core/lib/crypto_currency.dart b/cw_core/lib/crypto_currency.dart index 87e86a80..5bd09999 100644 --- a/cw_core/lib/crypto_currency.dart +++ b/cw_core/lib/crypto_currency.dart @@ -246,7 +246,7 @@ class CryptoCurrency extends EnumerableItem with Serializable implemen static const usdtSol = CryptoCurrency(title: 'USDT', tag: 'SOL', fullName: 'Tether', raw: 91, name: 'usdtsol', iconPath: 'assets/new-ui/crypto_full_icons/usdt.svg', decimals: 6); static const usdcTrc20 = CryptoCurrency(title: 'USDC', tag: 'TRX', fullName: 'USDC Coin', raw: 92, name: 'usdctrc20', iconPath: 'assets/new-ui/crypto_full_icons/usdc.svg', decimals: 6); static const tbtc = CryptoCurrency(title: 'tBTC', fullName: 'Testnet Bitcoin', raw: 93, name: 'tbtc', iconPath: 'assets/images/tbtc.png', decimals: 8); - static const wow = CryptoCurrency(title: 'WOW', fullName: 'Wownero', raw: 94, name: 'wow', iconPath: 'assets/images/crypto/wownero.svg', decimals: 11); + static const wow = CryptoCurrency(title: 'WOW', fullName: 'Wownero', raw: 94, name: 'wow', iconPath: 'assets/new-ui/crypto_full_icons/wownero.svg', decimals: 11, flatIconPath: "assets/new-ui/balance_card_icons/wownero.svg"); static const ton = CryptoCurrency(title: 'TON', fullName: 'Toncoin', raw: 95, name: 'ton', iconPath: 'assets/new-ui/crypto_full_icons/ton.svg', decimals: 8); static const zano = CryptoCurrency(title: 'ZANO', tag: 'ZANO', fullName: 'Zano', raw: 96, name: 'zano', iconPath: 'assets/new-ui/crypto_full_icons/zano.svg', decimals: 12, flatIconPath: "assets/new-ui/balance_card_icons/zano.svg", chainIconPath: "assets/new-ui/chain_badges/zano.svg"); static const flip = CryptoCurrency(title: 'FLIP', tag: 'ETH', fullName: 'Chainflip', raw: 97, name: 'flip', iconPath: 'assets/images/flip_icon.png', decimals: 18); -- 2.50.1 (Apple Git-155) From a6bb3c595da7d3a7d1b1f90a06d103d03d504204 Mon Sep 17 00:00:00 2001 From: jwinterm Date: Tue, 19 May 2026 17:58:22 -0400 Subject: [PATCH 3/3] =?UTF-8?q?Branding:=20Hash=20Wallet=20=E2=86=92=20Has?= =?UTF-8?q?h=20Bags=20for=20Windows=20+=20Linux=20app=20name?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Final public name is Hash Bags (Such Software). iOS CFBundleDisplayName and Android app.properties (generated by scripts/android/app_env.sh) were already on Hash Bags; this catches the two remaining user-facing places: - env.json CW_WIN_APP_NAME (Windows launcher label) - linux/com.suchsoftware.HashWallet.desktop Name= (Linux app menu label) Bundle IDs, Dart package name, and the .desktop file's app-id all stay on hashwallet — those are internal identifiers that nobody sees. --- env.json | 2 +- linux/com.suchsoftware.HashWallet.desktop | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/env.json b/env.json index ec5d2cc7..e6d07fb1 100644 --- a/env.json +++ b/env.json @@ -1,5 +1,5 @@ { - "CW_WIN_APP_NAME":"Hash Wallet", + "CW_WIN_APP_NAME":"Hash Bags", "CW_WIN_APP_PACKAGE_NAME": "com.suchsoftware.hashwallet", "CW_WIN_APP_VERSION": "1.0.0", "CW_WIN_APP_BUILD_NUMBER": "1" diff --git a/linux/com.suchsoftware.HashWallet.desktop b/linux/com.suchsoftware.HashWallet.desktop index bc12a789..6de7b0c9 100644 --- a/linux/com.suchsoftware.HashWallet.desktop +++ b/linux/com.suchsoftware.HashWallet.desktop @@ -1,7 +1,7 @@ [Desktop Entry] Version=1.0 Type=Application -Name=Hash Wallet +Name=Hash Bags Comment=A noncustodial multi-currency wallet Categories=Office;Finance; Terminal=false -- 2.50.1 (Apple Git-155)