Skip to content

Commit ec85b6e

Browse files
authored
fix(teleport): correct ratio direction and harden release gh cli repo binding (#495)
1 parent ce3d743 commit ec85b6e

3 files changed

Lines changed: 46 additions & 10 deletions

File tree

.github/workflows/cd.yml

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -421,7 +421,7 @@ jobs:
421421
echo "No release assets found"
422422
exit 1
423423
fi
424-
if gh release view "$TAG_NAME" >/dev/null 2>&1; then
424+
if gh release view "$TAG_NAME" -R "$REPO" >/dev/null 2>&1; then
425425
release_json=$(gh api "repos/${{ github.repository }}/releases/tags/$TAG_NAME")
426426
upload_files=()
427427
for file in "${release_files[@]}"; do
@@ -436,10 +436,11 @@ jobs:
436436
if [ "${#upload_files[@]}" -eq 0 ]; then
437437
echo "All release assets already exist, skip upload"
438438
else
439-
gh release upload "$TAG_NAME" "${upload_files[@]}"
439+
gh release upload "$TAG_NAME" -R "$REPO" "${upload_files[@]}"
440440
fi
441441
else
442442
gh release create "$TAG_NAME" \
443+
-R "$REPO" \
443444
--title "$RELEASE_TITLE" \
444445
--notes "$RELEASE_NOTES" \
445446
${{ steps.channel.outputs.channel == 'beta' && '--prerelease' || '' }} \
@@ -448,6 +449,7 @@ jobs:
448449
fi
449450
env:
450451
GH_TOKEN: ${{ github.token }}
452+
REPO: ${{ github.repository }}
451453
TAG_NAME: ${{ steps.channel.outputs.channel == 'stable' && format('v{0}', steps.version.outputs.version) || 'beta' }}
452454
RELEASE_TITLE: ${{ steps.channel.outputs.channel == 'stable' && format('BFM Pay v{0}', steps.version.outputs.version) || 'BFM Pay Beta' }}
453455
RELEASE_NOTES: |
@@ -951,7 +953,7 @@ jobs:
951953
echo "No release assets found"
952954
exit 1
953955
fi
954-
if gh release view "$TAG_NAME" >/dev/null 2>&1; then
956+
if gh release view "$TAG_NAME" -R "$REPO" >/dev/null 2>&1; then
955957
release_json=$(gh api "repos/${{ github.repository }}/releases/tags/$TAG_NAME")
956958
upload_files=()
957959
for file in "${release_files[@]}"; do
@@ -966,10 +968,11 @@ jobs:
966968
if [ "${#upload_files[@]}" -eq 0 ]; then
967969
echo "All release assets already exist, skip upload"
968970
else
969-
gh release upload "$TAG_NAME" "${upload_files[@]}"
971+
gh release upload "$TAG_NAME" -R "$REPO" "${upload_files[@]}"
970972
fi
971973
else
972974
gh release create "$TAG_NAME" \
975+
-R "$REPO" \
973976
--title "$RELEASE_TITLE" \
974977
--notes "$RELEASE_NOTES" \
975978
${{ needs.build-standard.outputs.channel == 'beta' && '--prerelease' || '' }} \
@@ -978,6 +981,7 @@ jobs:
978981
fi
979982
env:
980983
GH_TOKEN: ${{ github.token }}
984+
REPO: ${{ github.repository }}
981985
TAG_NAME: ${{ needs.build-standard.outputs.channel == 'stable' && format('v{0}', needs.build-standard.outputs.version) || 'beta' }}
982986
RELEASE_TITLE: ${{ needs.build-standard.outputs.channel == 'stable' && format('BFM Pay v{0}', needs.build-standard.outputs.version) || 'BFM Pay Beta' }}
983987
RELEASE_NOTES: |

miniapps/teleport/src/App.test.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -472,8 +472,12 @@ describe('Teleport App', () => {
472472
fireEvent.click(screen.getByTestId('target-button'))
473473

474474
await waitFor(() => {
475-
expect(screen.getByText('1 BFT = 0.0416 BFM')).toBeInTheDocument()
476-
expect(screen.getByText(/416 BFM/)).toBeInTheDocument()
475+
expect(screen.getByText('1 BFT = 24.03846154 BFM')).toBeInTheDocument()
476+
expect(screen.getByText('1 BFM = 0.0416 BFT')).toBeInTheDocument()
477+
expect(
478+
screen.getAllByText((_, node) => node?.textContent?.includes('240384.61538462 BFM') ?? false)
479+
.length,
480+
).toBeGreaterThan(0)
477481
})
478482
})
479483

miniapps/teleport/src/App.tsx

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,16 @@ const formatRawBalance = (raw: string, decimals: number): string => {
261261

262262
const formatRatioRate = (
263263
ratio: { numerator: number | string; denominator: number | string } | null | undefined,
264+
): string => {
265+
if (!ratio) return '0';
266+
const numerator = Number(ratio.numerator);
267+
const denominator = Number(ratio.denominator);
268+
if (!Number.isFinite(numerator) || !Number.isFinite(denominator) || numerator === 0) return '0';
269+
return (denominator / numerator).toFixed(8).replace(/\.?0+$/, '');
270+
};
271+
272+
const formatInverseRatioRate = (
273+
ratio: { numerator: number | string; denominator: number | string } | null | undefined,
264274
): string => {
265275
if (!ratio) return '0';
266276
const numerator = Number(ratio.numerator);
@@ -602,7 +612,7 @@ export default function App() {
602612
if (!selectedAsset || !amount) return '0';
603613
const amountNum = Number(amount);
604614
if (!Number.isFinite(amountNum)) return '0';
605-
const ratioNum = Number(selectedAsset.ratio.numerator) / Number(selectedAsset.ratio.denominator);
615+
const ratioNum = Number(selectedAsset.ratio.denominator) / Number(selectedAsset.ratio.numerator);
606616
if (!Number.isFinite(ratioNum)) return '0';
607617
return (amountNum * ratioNum).toFixed(8).replace(/\.?0+$/, '');
608618
}, [selectedAsset, amount]);
@@ -746,6 +756,7 @@ export default function App() {
746756
) : (
747757
sortedAvailableAssets.map((asset, i) => {
748758
const rate = formatRatioRate(asset.ratio);
759+
const inverseRate = formatInverseRatioRate(asset.ratio);
749760
const routeLabel = `${asset.chain}/${asset.symbol} ${t('common.arrow')} ${asset.targetChain}/${asset.targetAsset}`;
750761
return (
751762
<motion.div
@@ -770,8 +781,17 @@ export default function App() {
770781
<AssetAvatar symbol={asset.symbol} chain={asset.chain} />
771782
<div className="min-w-0 flex-1">
772783
<CardTitle className="text-base break-words">{routeLabel}</CardTitle>
773-
<CardDescription>
774-
{t('asset.ratio', { from: asset.symbol, rate, to: asset.targetAsset })}
784+
<CardDescription className="space-y-0.5">
785+
<div>
786+
{t('asset.ratio', { from: asset.symbol, rate, to: asset.targetAsset })}
787+
</div>
788+
<div className="text-muted-foreground/70">
789+
{t('asset.ratio', {
790+
from: asset.targetAsset,
791+
rate: inverseRate,
792+
to: asset.symbol,
793+
})}
794+
</div>
775795
</CardDescription>
776796
</div>
777797
</div>
@@ -996,12 +1016,20 @@ export default function App() {
9961016
<Separator />
9971017
<div className="flex justify-between">
9981018
<span className="text-muted-foreground">{t('confirm.ratio')}</span>
999-
<span>
1019+
<span className="text-right">
10001020
{t('asset.ratio', {
10011021
from: selectedAsset?.symbol ?? '',
10021022
rate: formatRatioRate(selectedAsset?.ratio),
10031023
to: selectedAsset?.targetAsset ?? '',
10041024
})}
1025+
<br />
1026+
<span className="text-muted-foreground/70">
1027+
{t('asset.ratio', {
1028+
from: selectedAsset?.targetAsset ?? '',
1029+
rate: formatInverseRatioRate(selectedAsset?.ratio),
1030+
to: selectedAsset?.symbol ?? '',
1031+
})}
1032+
</span>
10051033
</span>
10061034
</div>
10071035
<Separator />

0 commit comments

Comments
 (0)