5 Commits

Author SHA1 Message Date
pezkuwichain c4fe2df923 fix(build): declare resource-task deps for google-services bind task
bindDevelopGithubGoogleServicesToRelease writes into src/develop, which
generate/mergeDevelopResources read — Gradle 8.9 fails on the implicit
dependency. Add generate/mergeResources to the bind task's dependents
(null-safe via findByName).
2026-06-13 09:12:46 -07:00
pezkuwichain 4361230c47 fix(build): bind production google-services to develop variant
develop now uses the base io.pezkuwichain.wallet applicationId, whose
google-services client is in the production google-services.json (the DEV
google-services.json only has a .debug client). Extend the release-binding
task to copy src/release/google-services.json into src/develop so
processDevelopGoogleServices finds a matching client.
2026-06-13 08:13:22 -07:00
pezkuwichain 84978e147e fix(build): develop variant uses base applicationId io.pezkuwichain.wallet
The develop build type appended a '.dev' applicationIdSuffix, producing
io.pezkuwichain.wallet.dev, which has no matching client in the
google-services.json and broke every PR/develop build at
processDevelopGoogleServices. Drop the suffix so develop uses the base
io.pezkuwichain.wallet identity (keeps the -develop versionName suffix).
2026-06-13 07:29:57 -07:00
pezkuwichain 959bfa6b0d feat(assets): PEZ-20 badge on PEZ & USDT in token list
Show a small PEZ-20 pill next to PEZ and USDT (wUSDT) token rows in the
main balance list. These are fungible assets on Pezkuwi Asset Hub — the
PEZ-20 token standard.

- item_token_asset.xml: add itemTokenAssetPez20 chip (gone by default).
- TokenAssetViewHolder: show it when chainId == Pezkuwi Asset Hub and the
  symbol is PEZ/USDT/wUSDT.

Additive only; native HEZ and other chains are unbadged. Consistent with
the pex and Telegram mini app badges.
2026-06-12 23:36:15 -07:00
pezkuwichain f5df785a42 fix(ci): free disk space before building debug androidTest APKs (#1)
The scheduled 'Run balances tests' workflow has been failing for weeks
with 'No space left on device' — assembleDebug + assembleDebugAndroidTest
for every module exceeds the ~14 GB free on GitHub-hosted runners.

Add an opt-in free-disk-space input to the reusable build workflow that
removes preinstalled toolchains we never use (dotnet, ghc, CodeQL, swift,
boost, etc., ~30+ GB), and enable it for the balances test build. Other
callers of the reusable workflow are unaffected.
2026-06-11 07:22:10 -07:00
5 changed files with 59 additions and 5 deletions
+15
View File
@@ -31,6 +31,10 @@ on:
required: false
type: boolean
default: false
free-disk-space:
required: false
type: boolean
default: false
secrets:
# Crowdloan secrets - NOT NEEDED for Pezkuwi (own blockchain)
ACALA_PROD_AUTH_TOKEN:
@@ -140,6 +144,17 @@ jobs:
runs-on: ubuntu-24.04
timeout-minutes: 90
steps:
- name: 🧹 Free disk space
if: ${{ inputs.free-disk-space }}
run: |
# The androidTest build of all modules fills the ~14 GB free on
# GitHub-hosted runners; drop preinstalled toolchains we never use.
sudo rm -rf /usr/share/dotnet /usr/share/swift /opt/ghc /usr/local/.ghcup \
/opt/hostedtoolcache/CodeQL /usr/local/share/boost /usr/local/share/powershell \
/usr/local/lib/node_modules /usr/local/julia* /opt/microsoft
sudo docker image prune -af > /dev/null 2>&1 || true
df -h /
- name: Checkout particular branch
uses: actions/checkout@v4
with:
+1
View File
@@ -14,6 +14,7 @@ jobs:
upload-name: develop-apk
run-tests: false
build-debug-tests: true
free-disk-space: true
secrets: inherit
run-tests:
+13 -4
View File
@@ -80,7 +80,8 @@ android {
signingConfig signingConfigs.dev
matchingFallbacks = ['debug']
versionNameSuffix '-develop'
applicationIdSuffix '.dev'
// Use the base applicationId (io.pezkuwichain.wallet) — no ".dev" suffix —
// so it matches the registered google-services client.
//Init firebase
def localReleaseNotes = releaseNotes()
def localFirebaseGroup = firebaseGroup()
@@ -120,7 +121,10 @@ android {
applicationVariants.all { variant ->
String name = variant.buildType.name
if (name != "release" && name.startsWith("release")) {
// 'develop' now shares the base io.pezkuwichain.wallet applicationId, whose
// google-services client lives in the production google-services.json — so bind
// it for develop too (the DEV google-services.json has no matching client).
if ((name != "release" && name.startsWith("release")) || name == "develop") {
createBindReleaseFileTask(variant.buildType.name)
}
}
@@ -158,11 +162,16 @@ void createBindReleaseFileTask(String destination) {
"merge${capitalizedDestination}JniLibFolders".toString(),
"merge${capitalizedDestination}StartupProfile".toString(),
"merge${capitalizedDestination}Shaders".toString(),
"merge${capitalizedDestination}ArtProfile".toString()
"merge${capitalizedDestination}ArtProfile".toString(),
// The bind task writes into src/<dest>, which resource tasks read —
// declare the dependency so Gradle 8.9 doesn't fail on implicit ordering.
"generate${capitalizedDestination}Resources".toString(),
"merge${capitalizedDestination}Resources".toString()
]
dependentTasks.forEach {
tasks.getByName(it).dependsOn(task)
def t = tasks.findByName(it)
if (t != null) t.dependsOn(task)
}
}
}
@@ -1,5 +1,6 @@
package io.novafoundation.nova.feature_assets.presentation.balance.common.holders
import androidx.core.view.isVisible
import coil.ImageLoader
import io.novafoundation.nova.common.list.GroupedListHolder
import io.novafoundation.nova.common.presentation.masking.setMaskableText
@@ -13,6 +14,11 @@ import io.novafoundation.nova.feature_assets.presentation.balance.list.model.ite
import io.novafoundation.nova.feature_assets.presentation.model.AssetModel
import io.novafoundation.nova.feature_wallet_api.presentation.model.maskableFiat
import io.novafoundation.nova.feature_wallet_api.presentation.model.maskableToken
import io.novafoundation.nova.runtime.ext.Geneses
import io.novafoundation.nova.runtime.multiNetwork.chain.model.Chain
// Fungible assets on Pezkuwi Asset Hub follow the PEZ-20 token standard.
private val PEZ20_SYMBOLS = setOf("PEZ", "USDT", "wUSDT")
class TokenAssetViewHolder(
private val binder: ItemTokenAssetBinding,
@@ -31,7 +37,12 @@ class TokenAssetViewHolder(
bindTotal(asset)
binder.itemTokenAssetToken.text = asset.token.configuration.symbol.value
val config = asset.token.configuration
binder.itemTokenAssetToken.text = config.symbol.value
val isPez20 = config.chainId == Chain.Geneses.PEZKUWI_ASSET_HUB && config.symbol.value in PEZ20_SYMBOLS
binder.itemTokenAssetPez20.isVisible = isPez20
if (isPez20) binder.itemTokenAssetPez20.text = "PEZ-20"
setOnClickListener { itemHandler.assetClicked(asset.token.configuration) }
}
@@ -32,6 +32,24 @@
app:layout_constraintVertical_chainStyle="packed"
tools:text="DOT" />
<TextView
android:id="@+id/itemTokenAssetPez20"
style="@style/TextAppearance.NovaFoundation.Regular.Caption1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:background="@drawable/bg_chip_6"
android:paddingHorizontal="6dp"
android:paddingVertical="1dp"
android:textColor="@color/chip_text"
android:textSize="9sp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@+id/itemTokenAssetToken"
app:layout_constraintStart_toEndOf="@+id/itemTokenAssetToken"
app:layout_constraintTop_toTopOf="@+id/itemTokenAssetToken"
tools:text="PEZ-20"
tools:visibility="visible" />
<LinearLayout
android:id="@+id/itemTokenAssetRateContainer"
android:layout_width="wrap_content"