Skip to content

Commit

Permalink
ci(release): publish latest release
Browse files Browse the repository at this point in the history
  • Loading branch information
hello-happy-puppy committed Sep 9, 2024
1 parent cd6e81b commit dd1b5ef
Show file tree
Hide file tree
Showing 9 changed files with 195 additions and 17 deletions.
17 changes: 6 additions & 11 deletions RELEASE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
IPFS hash of the deployment:
- CIDv0: `QmNseCQM3gjdY5cnH16fzEDwnaik9pnuLDaAXAWbET2gef`
- CIDv1: `bafybeiah6bwq7dezzdlgk22o5nbiel2t73ev5tpo75mqebz5f4p5dw5v5q`
- CIDv0: `QmTHCMo5RJfwvTbGVNppipkh5CmXYx9SPkyJM7qzyP4uLM`
- CIDv1: `bafybeicjm7s57co32yesjceb5zxpmrmzex4qqxt5ynyw57nov7xo46kwzi`

The latest release is always mirrored at [app.uniswap.org](https://app.uniswap.org).

Expand All @@ -10,15 +10,10 @@ You can also access the Uniswap Interface from an IPFS gateway.
Your Uniswap settings are never remembered across different URLs.

IPFS gateways:
- https://bafybeiah6bwq7dezzdlgk22o5nbiel2t73ev5tpo75mqebz5f4p5dw5v5q.ipfs.dweb.link/
- https://bafybeiah6bwq7dezzdlgk22o5nbiel2t73ev5tpo75mqebz5f4p5dw5v5q.ipfs.cf-ipfs.com/
- [ipfs://QmNseCQM3gjdY5cnH16fzEDwnaik9pnuLDaAXAWbET2gef/](ipfs://QmNseCQM3gjdY5cnH16fzEDwnaik9pnuLDaAXAWbET2gef/)
- https://bafybeicjm7s57co32yesjceb5zxpmrmzex4qqxt5ynyw57nov7xo46kwzi.ipfs.dweb.link/
- https://bafybeicjm7s57co32yesjceb5zxpmrmzex4qqxt5ynyw57nov7xo46kwzi.ipfs.cf-ipfs.com/
- [ipfs://QmTHCMo5RJfwvTbGVNppipkh5CmXYx9SPkyJM7qzyP4uLM/](ipfs://QmTHCMo5RJfwvTbGVNppipkh5CmXYx9SPkyJM7qzyP4uLM/)

### 5.45.3 (2024-09-05)


### Bug Fixes

* **web:** filter sugessstions if chain is undefined (#11572) f71048d
### 5.45.4 (2024-09-09)


2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
web/5.45.3
web/5.45.4
2 changes: 1 addition & 1 deletion apps/web/src/state/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import { isDevEnv, isTestEnv } from 'utilities/src/environment'

const persistConfig: PersistConfig<InterfaceState> = {
key: 'interface',
version: 16, // see migrations.ts for more details about this version
version: 17, // see migrations.ts for more details about this version
storage: localForage.createInstance({
name: INDEXED_DB_REDUX_TABLE_NAME,
driver: localForage.LOCALSTORAGE,
Expand Down
2 changes: 1 addition & 1 deletion apps/web/src/state/migrations.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ const defaultState = {
user: {},
_persist: {
rehydrated: true,
version: 16,
version: 17,
},
application: {
chainId: null,
Expand Down
2 changes: 2 additions & 0 deletions apps/web/src/state/migrations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { migration13 } from 'state/migrations/13'
import { migration14 } from 'state/migrations/14'
import { migration15 } from 'state/migrations/15'
import { migration16 } from 'state/migrations/16'
import { migration17 } from 'state/migrations/17'
import { migration2 } from 'state/migrations/2'
import { migration3 } from 'state/migrations/3'
import { migration4 } from 'state/migrations/4'
Expand Down Expand Up @@ -47,6 +48,7 @@ export const migrations: MigrationManifest = {
14: migration14,
15: migration15,
16: migration16,
17: migration17,
} as const

export const INDEXED_DB_REDUX_TABLE_NAME = 'redux'
Expand Down
2 changes: 1 addition & 1 deletion apps/web/src/state/migrations/16.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ const migrator = createMigrate(
{ debug: false },
)

describe('migration to v15', () => {
describe('migration to v16', () => {
it('migrates from user.tokens to shared tokens slice', async () => {
const result: any = await migrator(previousState, 16)
expect(result.user.tokens).toBe(undefined)
Expand Down
136 changes: 136 additions & 0 deletions apps/web/src/state/migrations/17.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
import { createMigrate } from 'redux-persist'
import { migration1 } from 'state/migrations/1'
import { migration10 } from 'state/migrations/10'
import { migration11 } from 'state/migrations/11'
import { migration12 } from 'state/migrations/12'
import { migration13 } from 'state/migrations/13'
import { migration14 } from 'state/migrations/14'
import { migration15 } from 'state/migrations/15'
import { migration16 } from 'state/migrations/16'
import { PersistAppStateV17, migration17 } from 'state/migrations/17'
import { migration2 } from 'state/migrations/2'
import { migration3 } from 'state/migrations/3'
import { migration4 } from 'state/migrations/4'
import { migration5 } from 'state/migrations/5'
import { migration6 } from 'state/migrations/6'
import { migration7 } from 'state/migrations/7'
import { migration8 } from 'state/migrations/8'
import { migration9 } from 'state/migrations/9'
import { SafetyLevel } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks'
import { SearchResultType } from 'uniswap/src/features/search/SearchResult'

const previousState: PersistAppStateV17 = {
_persist: {
version: 16,
rehydrated: true,
},
searchHistory: {
results: [
// token selector saved native asset
{
type: SearchResultType.Token,
chainId: 1,
address: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
name: 'Ethereum',
symbol: 'ETH',
logoUrl: 'https://token-icons.s3.amazonaws.com/eth.png',
safetyLevel: SafetyLevel.Verified,
searchId: 'token-1-0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
},
// navbar saved native asset
{
type: SearchResultType.Token,
chainId: 1,
symbol: 'ETH',
address: null,
name: 'Ethereum',
logoUrl: 'https://token-icons.s3.amazonaws.com/eth.png',
safetyLevel: SafetyLevel.Verified,
searchId: 'token-1-null',
},
// token selector saved token
{
type: SearchResultType.Token,
chainId: 42161,
symbol: 'USDC',
address: '0xaf88d065e77c8cc2239327c5edb3a432268e5831',
name: 'USD Coin',
logoUrl: 'https://coin-images.coingecko.com/coins/images/6319/large/usdc.png?1696506694',
safetyLevel: SafetyLevel.Verified,
searchId: 'token-42161-0xaf88d065e77c8cc2239327c5edb3a432268e5831',
},
// navbar saved nft collection
{
type: SearchResultType.NFTCollection,
chainId: 1,
address: '0xbd3531da5cf5857e7cfaa92426877b022e612cf8',
name: 'Pudgy Penguins',
imageUrl:
'https://i.seadn.io/gae/yNi-XdGxsgQCPpqSio4o31ygAV6wURdIdInWRcFIl46UjUQ1eV7BEndGe8L661OoG-clRi7EgInLX4LPu9Jfw4fq0bnVYHqg7RFi?w=500&auto=format',
isVerified: true,
searchId: 'nftCollection-1-0xbd3531da5cf5857e7cfaa92426877b022e612cf8',
},
],
},
}

const migrator = createMigrate(
{
1: migration1,
2: migration2,
3: migration3,
4: migration4,
5: migration5,
6: migration6,
7: migration7,
8: migration8,
9: migration9,
10: migration10,
11: migration11,
12: migration12,
13: migration13,
14: migration14,
15: migration15,
16: migration16,
17: migration17,
},
{ debug: false },
)

describe('migration to v17', () => {
it('migrates potentially invalid searchHistory', async () => {
const result: any = await migrator(previousState, 17)
expect(result.searchHistory.results).toEqual([
{
type: SearchResultType.Token,
chainId: 1,
symbol: 'ETH',
address: null,
name: 'Ethereum',
logoUrl: 'https://token-icons.s3.amazonaws.com/eth.png',
safetyLevel: SafetyLevel.Verified,
searchId: 'token-1-null',
},
{
type: SearchResultType.Token,
chainId: 42161,
symbol: 'USDC',
address: '0xaf88d065e77c8cc2239327c5edb3a432268e5831',
name: 'USD Coin',
logoUrl: 'https://coin-images.coingecko.com/coins/images/6319/large/usdc.png?1696506694',
safetyLevel: SafetyLevel.Verified,
searchId: 'token-42161-0xaf88d065e77c8cc2239327c5edb3a432268e5831',
},
{
type: SearchResultType.NFTCollection,
chainId: 1,
address: '0xbd3531da5cf5857e7cfaa92426877b022e612cf8',
name: 'Pudgy Penguins',
imageUrl:
'https://i.seadn.io/gae/yNi-XdGxsgQCPpqSio4o31ygAV6wURdIdInWRcFIl46UjUQ1eV7BEndGe8L661OoG-clRi7EgInLX4LPu9Jfw4fq0bnVYHqg7RFi?w=500&auto=format',
isVerified: true,
searchId: 'nftCollection-1-0xbd3531da5cf5857e7cfaa92426877b022e612cf8',
},
])
})
})
44 changes: 44 additions & 0 deletions apps/web/src/state/migrations/17.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import { PersistState } from 'redux-persist'
import { SearchResult, SearchResultType } from 'uniswap/src/features/search/SearchResult'
import { searchResultId } from 'uniswap/src/features/search/searchHistorySlice'
import { tokenAddressOrNativeAddress } from 'uniswap/src/features/search/utils'

export type PersistAppStateV17 = {
_persist: PersistState
searchHistory?: {
results: SearchResult[]
}
}

/**
* Move potentially invalid native asset search history items to valid format
*/
export const migration17 = (state: PersistAppStateV17 | undefined) => {
if (!state) {
return
}

const newState: any = { ...state }

// amend existing recently searched native assets that were saved with
// an address when they should not have been
newState.searchHistory.results.forEach((result: SearchResult) => {
if (result.type === SearchResultType.Token && result.address) {
const nativeAddress = tokenAddressOrNativeAddress(result.address, result.chainId)
if (result.address !== nativeAddress) {
result.address = nativeAddress
result.searchId = searchResultId(result)
}
}
})

// dedupe search history
const dedupedSearchHistory = newState.searchHistory.results.filter(
(result: SearchResult, index: number, self: SearchResult[]) =>
self.findIndex((t) => t.searchId === result.searchId) === index,
)

newState.searchHistory.results = dedupedSearchHistory

return { ...newState, _persist: { ...state._persist, version: 17 } }
}
5 changes: 3 additions & 2 deletions packages/uniswap/src/features/search/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@ import { buildCurrencyId, currencyIdToGraphQLAddress } from 'uniswap/src/utils/c
export const BACKEND_NATIVE_CHAIN_ADDRESS_STRING = 'NATIVE'

export function tokenAddressOrNativeAddress(address: string, chainId: UniverseChainId): string | null {
if (address !== BACKEND_NATIVE_CHAIN_ADDRESS_STRING) {
const nativeAddress = getNativeAddress(chainId)

if (address !== BACKEND_NATIVE_CHAIN_ADDRESS_STRING && address !== nativeAddress) {
return address
}

const nativeAddress = getNativeAddress(chainId)
return currencyIdToGraphQLAddress(buildCurrencyId(chainId, nativeAddress))
}

0 comments on commit dd1b5ef

Please sign in to comment.