dev #25

Merged
such-gitea merged 3 commits from github-such-software/hash-wallet:dev into dev 2026-05-19 18:11:04 -04:00
4 changed files with 52 additions and 31 deletions

View File

@@ -272,36 +272,57 @@ jobs:
cd build/ios/iphonesimulator cd build/ios/iphonesimulator
zip -r hash_wallet_ios_sim_${{ github.sha }}.zip Runner.app zip -r hash_wallet_ios_sim_${{ github.sha }}.zip Runner.app
# Make git.such.software resolve to something the runner can actually # Confirm git.such.software resolves to a local target (the Mac itself).
# reach. Independent of whether the Mac's /etc/hosts has an entry, # The runner inherits the Mac's /etc/hosts directly (host-mode act_runner),
# we override at job runtime — inside whatever environment this step # so the user should have:
# actually runs in (native shell, Docker container, etc.). Try # 127.0.0.1 git.such.software
# host.docker.internal first (Docker Desktop's host gateway). Fall # already in /etc/hosts. We only assert that here, don't modify (sudo
# back to 127.0.0.1 (works for host-mode runners). # without NOPASSWD prompts for a password the runner can't enter).
- name: Force git.such.software to resolve locally #
# 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: | run: |
set -x if grep -qE '^[[:space:]]*(127\.0\.0\.1|host\.docker\.internal|192\.168\.)[[:space:]]+git\.such\.software' /etc/hosts; then
echo "=== before ===" echo "✓ /etc/hosts points git.such.software at a local target:"
cat /etc/hosts | tail -10 || true grep git.such.software /etc/hosts
getent hosts git.such.software 2>/dev/null || nslookup git.such.software 2>/dev/null || true 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 # Diagnostic: print exactly where upload-artifact will try to send data.
TARGET=host.docker.internal # act_runner injects these env vars; their values tell us whether the
else # upload targets git.such.software (uses our /etc/hosts override) or
TARGET=127.0.0.1 # a LAN IP directly (override irrelevant). Also probe the URL with
fi # curl -k so we see the cert + reachability before the real upload.
echo "Pointing git.such.software → $TARGET" - name: Diagnose Actions API endpoint
# Remove any prior entry, append ours. sudo if available, plain run: |
# write otherwise (root in containers, or NOPASSWD sudo). set +e
if command -v sudo >/dev/null; then echo "=== Actions runtime env ==="
sudo sh -c "sed -i.bak '/git\\.such\\.software/d' /etc/hosts; echo '$TARGET git.such.software' >> /etc/hosts" echo "ACTIONS_RUNTIME_URL=${ACTIONS_RUNTIME_URL:-<unset>}"
else echo "ACTIONS_RESULTS_URL=${ACTIONS_RESULTS_URL:-<unset>}"
sed -i.bak '/git\.such\.software/d' /etc/hosts echo "ACTIONS_CACHE_URL=${ACTIONS_CACHE_URL:-<unset>}"
echo "$TARGET git.such.software" >> /etc/hosts echo "GITHUB_SERVER_URL=${GITHUB_SERVER_URL:-<unset>}"
fi echo "GITHUB_API_URL=${GITHUB_API_URL:-<unset>}"
echo "=== after ===" echo "NODE_TLS_REJECT_UNAUTHORIZED=${NODE_TLS_REJECT_UNAUTHORIZED:-<unset>}"
cat /etc/hosts | tail -5 echo
getent hosts git.such.software || nslookup git.such.software || true # 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 - name: Upload .app artifact
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@v3

View File

@@ -246,7 +246,7 @@ class CryptoCurrency extends EnumerableItem<int> with Serializable<int> 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 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 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 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 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 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); static const flip = CryptoCurrency(title: 'FLIP', tag: 'ETH', fullName: 'Chainflip', raw: 97, name: 'flip', iconPath: 'assets/images/flip_icon.png', decimals: 18);

View File

@@ -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_PACKAGE_NAME": "com.suchsoftware.hashwallet",
"CW_WIN_APP_VERSION": "1.0.0", "CW_WIN_APP_VERSION": "1.0.0",
"CW_WIN_APP_BUILD_NUMBER": "1" "CW_WIN_APP_BUILD_NUMBER": "1"

View File

@@ -1,7 +1,7 @@
[Desktop Entry] [Desktop Entry]
Version=1.0 Version=1.0
Type=Application Type=Application
Name=Hash Wallet Name=Hash Bags
Comment=A noncustodial multi-currency wallet Comment=A noncustodial multi-currency wallet
Categories=Office;Finance; Categories=Office;Finance;
Terminal=false Terminal=false