Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1077 commits
Select commit Hold shift + click to select a range
86a99d8
Merge pull request #5874 from russeree/portlandhodl-install-cksolo-fix
wiz Apr 15, 2025
41fe542
autobuild
mononaut Jan 24, 2025
3337c82
Merge pull request #5877 from mempool/mononaut/autobuild-scaffolding
wiz Apr 15, 2025
537ac26
maybe fix pickaxe svg bug
mononaut Apr 15, 2025
34f18bc
Merge pull request #5878 from mempool/mononaut/vanishing-pickaxe
wiz Apr 15, 2025
411beb1
Fix cropped difficulty series in hashrate chart
natsoni Apr 14, 2025
2445ea9
Remove Bisq from install script.
portlandhodl Apr 15, 2025
ae7d414
Merge pull request #5879 from russeree/portlandhodl-mempool-prod-inst…
wiz Apr 15, 2025
62c7b1e
Reset taptree widget on address change
natsoni Apr 15, 2025
d4074b3
Merge pull request #5880 from mempool/natsoni/reset-taptree
softsimon Apr 15, 2025
f218ff2
Merge pull request #5876 from mempool/natsoni/fix-hashrate-chart-over…
nymkappa Apr 16, 2025
e58d0e6
Fix pickaxe disappearing on certain desktop viewports
hunicus Apr 16, 2025
47dcb0b
Switch mempool nav icons to svg
hunicus Apr 17, 2025
829abed
Switch liquid nav icons to svg
hunicus Apr 17, 2025
c274b8b
Remove unused fa icons from shared module
hunicus Apr 18, 2025
8f06238
Add back icon used in dot space repo
hunicus Apr 21, 2025
ad48d81
Make pickaxe bigger
hunicus Apr 21, 2025
90a0029
ops: Add global /twidget path for twitter widget
wiz Apr 22, 2025
384e0fe
Use new /twidget/username hack in frontend code
wiz Apr 22, 2025
95df451
ops: Fix regex in nginx /twidget location pattern
wiz Apr 22, 2025
a683cbc
ops: Fix regex case matching in nginx /twidget location
wiz Apr 22, 2025
c8f3aa5
Change frontend /twidget to /api/v1/services/x/:handle
wiz Apr 22, 2025
ba0e72f
Make pickaxe sizing consistent with other nav icons
hunicus Apr 23, 2025
b35fc7b
Merge branch 'master' into hunicus/pickaxe-peek-a-boo
hunicus Apr 23, 2025
b1ea5bd
Make pickaxe svg pure white
hunicus Apr 23, 2025
3cf0f28
Merge pull request #5882 from mempool/hunicus/pickaxe-peek-a-boo
wiz Apr 24, 2025
9929bbf
Add metaplanet to enterprise sponsors
hunicus Apr 27, 2025
28ab999
Make gemini logo great again
hunicus Apr 27, 2025
e9bb9c3
Merge pull request #5888 from mempool/hunicus/add-metaplanet-about
wiz Apr 28, 2025
f872104
[auth] better handling of 'disabled' users
nymkappa Apr 29, 2025
69f9aa6
update custom dashboard configs
mononaut Apr 29, 2025
fad1ae4
Merge pull request #5892 from mempool/mononaut/update-dashboards
wiz Apr 29, 2025
0745695
revert broken svg fix
mononaut Apr 30, 2025
acd9d0f
restore overflow rule for nav icon svgs
mononaut Apr 30, 2025
e2e2303
Merge pull request #5894 from mempool/mononaut/revert-borked-svg-fix
wiz Apr 30, 2025
71bdf27
ops: Add gcc to prod install script packages
wiz May 4, 2025
2ec7977
Merge pull request #5891 from mempool/nymkappa/auth-disabled-user
wiz May 5, 2025
9560d44
Merge pull request #5875 from mempool/natsoni/disable-button-zoom
wiz May 5, 2025
cbd896b
Add basic treasuries dashboard
mononaut Apr 3, 2025
e4a5fd8
extend treasuries dashboard with leaderboard
mononaut Apr 25, 2025
2ec8cdd
restrict treasuries dashboard to official build
mononaut Apr 25, 2025
a5fe71c
add pie chart to treasuries dashboard
mononaut May 2, 2025
bf3467b
Add treasuries API
mononaut May 5, 2025
6a90134
simple sighash highlighting
mononaut Apr 9, 2025
5a66a30
extend sighash feature to witness details
mononaut Apr 16, 2025
e87bd59
fix taproot signature parsing
mononaut Apr 16, 2025
27b4dd4
Add signature annotations to legacy scriptsigs
mononaut Apr 17, 2025
773037b
handle many signatures
mononaut Apr 21, 2025
b3af382
Support for sighash display preferences
mononaut May 5, 2025
dd183f7
Update utxo chart colors & add acceleration support
mononaut May 7, 2025
e508286
[mining] fix potential bug where we try to index hashrate even if the…
nymkappa May 8, 2025
da7b691
Merge pull request #5901 from mempool/nymkappa/tape-fix-hashrate-inde…
wiz May 8, 2025
13b4126
[lightning] make sure channel id has valid format before caching its …
nymkappa May 8, 2025
c67c257
[lightning] make sure tx idx is present in block
nymkappa May 8, 2025
297015d
Merge pull request #5902 from mempool/nymkappa/tape-fix-lightning
wiz May 8, 2025
c04196f
Merge pull request #5899 from mempool/mononaut/accelerated-utxos
wiz May 8, 2025
56ba5e0
Merge branch 'master' into mononaut/treasury-dashboard
wiz May 8, 2025
2ff15a3
Merge branch 'master' into mononaut/sighash-highlighting
wiz May 8, 2025
caf04dd
Merge pull request #5886 from mempool/mononaut/treasury-dashboard
wiz May 8, 2025
91858c0
fix e2e tests
mononaut May 8, 2025
aae22fa
fix enterprise network redirect bug
mononaut May 8, 2025
c6b3078
Merge pull request #5903 from mempool/mononaut/fix-enterprise-newtork…
wiz May 9, 2025
bce25d0
Merge branch 'master' into mononaut/sighash-highlighting
wiz May 9, 2025
093dffe
Merge pull request #5881 from mempool/mononaut/sighash-highlighting
wiz May 9, 2025
14919fa
misc signature highlighting fixes
mononaut May 9, 2025
4f2a0bd
Merge pull request #5904 from mempool/mononaut/sighash-fixes
wiz May 9, 2025
1472e33
use stricter format for detecting DER signatures
mononaut May 9, 2025
7495d41
Detect nonstandard annex & add goggles flag in backend
mononaut May 10, 2025
7758e02
Detect nonstandard annex & add goggles flag in frontend
mononaut May 10, 2025
af186c6
db migration to reindex blocks since first annex tx
mononaut May 10, 2025
a08a256
label annex in transaction details
mononaut May 10, 2025
083b59f
avoid requesting infinite acceleration history pages
mononaut May 10, 2025
e650a06
Merge pull request #5907 from mempool/mononaut/acceleration-history-s…
wiz May 11, 2025
7ed2d9c
Merge pull request #5905 from mempool/mononaut/strict-der-sigs
wiz May 11, 2025
cba4308
Merge pull request #5906 from mempool/mononaut/annexes
wiz May 11, 2025
ce9d16f
Add get-block-v1 doc
hunicus May 13, 2025
e5973b7
Get correct backend property
hunicus May 13, 2025
cc150b4
Add get-blocks-v1 doc
hunicus May 14, 2025
7fd006d
Add get-blocks-v1 doc for liquid
hunicus May 14, 2025
5a53368
fix copy, add missing error string
nymkappa May 17, 2025
f35855b
Update social sharing image
orangesurf May 18, 2025
fb98f62
Fix meta image file format
orangesurf May 18, 2025
5d0596d
Fix meta image file format
orangesurf May 18, 2025
a3c6487
prioritize testnet4 address search results
mononaut May 19, 2025
75972f7
Merge pull request #5915 from mempool/mononaut/testnet4-search
wiz May 20, 2025
e0c8cdd
Add historical price endpoint to Liquid backend
natsoni May 20, 2025
a87cdff
Add USD series to Liquid reserves graph
natsoni May 20, 2025
4d6935c
Fix crash when toggling coinbase tx details
natsoni May 21, 2025
b3db3ce
Fix colspan value
natsoni May 21, 2025
6be58dd
Merge pull request #5918 from mempool/natsoni/fix-tx-details-crash
mononaut May 21, 2025
082a06c
Merge pull request #5919 from mempool/natsoni/fix-details-colspan
mononaut May 21, 2025
30c50a1
Crop large OP_RETURN data in tx details section
natsoni May 22, 2025
b25429a
Merge pull request #5911 from mempool/nymkappa/click-here
nymkappa May 23, 2025
59a1c62
Fix missing y axis on difficulty chart
natsoni May 30, 2025
3f07e08
Merge pull request #5912 from mempool/orangesurf/metaplanet-sharing-i…
mononaut Jun 2, 2025
77fdb67
reduce enterprise unfurler cluster sizes
mononaut Jun 2, 2025
36775a2
Merge pull request #5926 from mempool/natsoni/hashrate-graph-axis
wiz Jun 2, 2025
1ffcc8f
Merge branch 'master' into mononaut/adjust-unfurler-clusters
wiz Jun 2, 2025
b796a21
Merge pull request #5909 from mempool/hunicus/get-block-9001
wiz Jun 2, 2025
51a014e
Merge branch 'master' into mononaut/adjust-unfurler-clusters
wiz Jun 2, 2025
961c554
Merge pull request #5927 from mempool/mononaut/adjust-unfurler-clusters
wiz Jun 2, 2025
721a647
Merge pull request #5916 from mempool/natsoni/liquid-usd
wiz Jun 2, 2025
9c1025f
Merge branch 'master' into natsoni/fix-the-filters
wiz Jun 4, 2025
e1d4c04
Show decimal in block fee range
natsoni Jun 3, 2025
a7156b2
more dashboards
mononaut Jun 12, 2025
d9460c5
[accelerator] show square payment receipt on pizza tracker
nymkappa Jun 15, 2025
6c8ac6c
Improve cropping in asm component
natsoni Jun 18, 2025
f53d151
Fix issues with OP_RETURN data toggling and slicing
natsoni Jun 19, 2025
c2bf39f
[accelerator] fix top-up link
nymkappa Jun 21, 2025
44baf28
[services] add new menu icons
nymkappa Jun 21, 2025
1869c6a
[services] add new bitcoin logo for card on file topup
nymkappa Jun 21, 2025
b6ac9ff
fix typo
softsimon Jun 22, 2025
90a011c
fix sub-1 sat/vb colors
mononaut Jun 22, 2025
47c9616
fix broken ronindojo link
softsimon Jun 22, 2025
999cadc
Merge pull request #5920 from mempool/natsoni/fix-the-filters
mononaut Jun 23, 2025
28acec0
Merge pull request #5936 from mempool/nymkappa/fix-broken-link
mononaut Jun 23, 2025
8588495
Merge pull request #5937 from mempool/nymkappa/services-menu-icons
mononaut Jun 23, 2025
2c27941
fix sub sat charts
mononaut Jun 23, 2025
bee7446
support sub 1 sat rates in stats chart
mononaut Jun 23, 2025
9430d3e
Fix vsize_0 handling in statistics replication
mononaut Jun 23, 2025
536c58d
Fix offline button wrongly opening tx preview
natsoni Jun 23, 2025
6ae3cd0
Hide signature details on coinbase preview
natsoni Jun 24, 2025
61bede2
Merge pull request #5942 from mempool/natsoni/fix-offline-button
mononaut Jun 24, 2025
fc06e1d
add sp widget to custom dashboard
mononaut Dec 30, 2024
b80cbdd
add new sp widget to dashboard
mononaut Jun 16, 2025
15c03b9
add logo to sp widget
mononaut Jun 21, 2025
cf9cc33
use relative pathname for /api/v1/services/sp/verified/$key
nymkappa Jun 25, 2025
f33c84a
adjust cubo search bar to align rows
mononaut Jun 25, 2025
7b9428a
Merge pull request #5935 from mempool/mononaut/sp-cubo-widget
wiz Jun 26, 2025
5797709
Merge pull request #5939 from mempool/mononaut/sub-sat
wiz Jun 26, 2025
0b08c24
Merge pull request #5932 from mempool/mononaut/more-dashboards
wiz Jun 26, 2025
9caec06
Merge branch 'master' into natsoni/decimal-fee-rate
wiz Jun 26, 2025
74fe7b9
Merge pull request #5933 from mempool/nymkappa/square-receipt-pizza-t…
wiz Jun 26, 2025
b920d19
Merge pull request #5938 from mempool/nymkappa/bitcoin-logo
wiz Jun 26, 2025
91fe7cf
Merge pull request #5929 from mempool/natsoni/decimal-fee-rate
wiz Jun 26, 2025
0545713
tweak chart colors
mononaut Jun 26, 2025
ad151fb
fix cubo mobile layout
mononaut Jun 27, 2025
1893b56
Merge pull request #5945 from mempool/mononaut/fix-cubo-mobile
wiz Jun 27, 2025
a50486b
Merge pull request #5944 from mempool/mononaut/tweak-chart-colors
wiz Jun 28, 2025
844b64c
Bump base-x from 4.0.0 to 4.0.1 in /backend
nymkappa Jun 29, 2025
687a446
Merge pull request #5895 from mempool/dependabot/npm_and_yarn/backend…
nymkappa Jun 29, 2025
3b92ba3
bump package-lock.json version (mismatch with package.json)
nymkappa Jun 29, 2025
4a80744
Bump mysql2 from 3.13.0 to 3.14.1 in /backend
dependabot[bot] Jun 29, 2025
e70bb9f
Merge pull request #5889 from mempool/dependabot/npm_and_yarn/backend…
nymkappa Jun 29, 2025
dc47672
Fix duplicate transaction decoding in tx preview
natsoni Jun 30, 2025
2c10791
Use PSBT in tx preview fragment when possible
natsoni Jun 30, 2025
af82f7d
Fix redeem witness script filling in tx preview
natsoni Jun 30, 2025
d7daebe
Merge pull request #5947 from mempool/nymkappa/fix-package-lock-version
mononaut Jul 1, 2025
2fa7405
nit changes on psbt signatures pre-filling
natsoni Jul 1, 2025
efaeacc
PSBT support for script and signature pre-filling in P2TR inputs
natsoni Jul 1, 2025
ccc5ce8
ops: Add more mempool servers to elements.conf
wiz Jul 4, 2025
78987f1
ops: Bump elements to v23.3.0
wiz Jul 4, 2025
f4edc35
Fix median fee calculation in underfilled blocks
mononaut Jul 6, 2025
6123c4f
ops: Bump bitcoin to v29.0
wiz Jul 7, 2025
6842965
Tx preview: fill missing signature weight in unsigned transactions
natsoni Jul 2, 2025
eab5944
standardize ephemeral dust
mononaut Jul 10, 2025
f88527b
handle sub-1-sat-vb in audits
mononaut Jul 12, 2025
65d34b3
fix frontend goggles annex detection
mononaut Jul 12, 2025
7b9c89b
Add adambor to contributors
adambor Jul 12, 2025
9838d1a
Merge pull request #5960 from mempool/mononaut/sub-1-sat-audits
wiz Jul 12, 2025
2a253b3
Merge pull request #5958 from mempool/mononaut/standardize-ephemeral-…
wiz Jul 12, 2025
1878318
Merge pull request #5961 from mempool/mononaut/fix-annex-detection
wiz Jul 12, 2025
3d5c7bf
cubo widget tweaks
mononaut Jul 14, 2025
bb5fabf
Merge pull request #5954 from mempool/mononaut/fix-underfilled-median
wiz Jul 15, 2025
27f64ff
Merge pull request #5962 from atomiqlabs/add-adambor-agreement
wiz Jul 15, 2025
b237d72
Merge pull request #5965 from mempool/mononaut/cubo-tweaks
wiz Jul 15, 2025
318d922
Merge branch 'master' into natsoni/tx-preview-fill-signatures
wiz Jul 15, 2025
a76c307
Merge pull request #5953 from mempool/natsoni/tx-preview-fill-signatures
wiz Jul 15, 2025
33bfc2c
ops: Use minrelaytxfee=0.000001 for Bitcoin mainnet
wiz Jul 15, 2025
1c0637b
bluer <1sat color
mononaut Jul 15, 2025
6f23c8e
Merge pull request #5966 from mempool/mononaut/more-blue
wiz Jul 15, 2025
f51f9ae
refactor fee recommendations to support unit testing
mononaut Jul 16, 2025
db686b5
initial fee recommendation unit tests
mononaut Jul 16, 2025
4299219
ignore <1 sat for fee recommendations
mononaut Jul 16, 2025
c86c353
support sub-1 sat txs in projected block fee charts
mononaut Jul 16, 2025
4889d83
tighten missing prevout inscription heuristic
mononaut Jul 16, 2025
eb5ad36
reclassify txs after prevouts added
mononaut Jul 16, 2025
6191384
L-BTC -> LBTC
natsoni Jul 16, 2025
e960961
Merge pull request #5970 from mempool/mononaut/sub-1s-fee-chart
wiz Jul 16, 2025
e82c5a1
Merge pull request #5973 from mempool/mononaut/fix-missing-prevout-go…
wiz Jul 16, 2025
59d78c0
Update Liquid logos
natsoni Jul 16, 2025
c215732
Merge pull request #5974 from mempool/natsoni/liquid-logo
wiz Jul 16, 2025
a8c0a88
Merge pull request #5969 from mempool/mononaut/fix-fee-recommendations
wiz Jul 16, 2025
bbea251
fix blank fee distribution graph bug
mononaut Jul 18, 2025
9ddb37c
Fix goggles non-standard anchor test
mononaut Jul 18, 2025
19ec108
Fix blockheight for frontend goggles classification
mononaut Jul 18, 2025
6fa1a24
Merge pull request #5977 from mempool/mononaut/fix-fee-distribution-c…
wiz Jul 18, 2025
048bf27
Merge pull request #5978 from mempool/mononaut/fix-nonstandard-anchor…
wiz Jul 18, 2025
1ea9829
Calculator default value
softsimon Jul 19, 2025
d1d3ef3
Merge pull request #5979 from mempool/simon/calculator-default
wiz Jul 19, 2025
99f202b
Bump axios from 1.8.1 to 1.10.0 in /backend
dependabot[bot] Jul 21, 2025
bd151e1
Merge pull request #5934 from mempool/dependabot/npm_and_yarn/backend…
mononaut Jul 21, 2025
f757d63
Bump esbuild from 0.24.0 to 0.25.8 in /frontend
dependabot[bot] Jul 21, 2025
4cb844c
Bump on-headers and compression in /frontend
dependabot[bot] Jul 21, 2025
d40c554
Merge pull request #5980 from mempool/dependabot/npm_and_yarn/fronten…
mononaut Jul 21, 2025
28c668b
Merge pull request #5976 from mempool/dependabot/npm_and_yarn/fronten…
mononaut Jul 21, 2025
d22e310
Bump form-data from 4.0.0 to 4.0.4 in /backend
dependabot[bot] Jul 21, 2025
f143cdc
Bump form-data from 4.0.0 to 4.0.4 in /frontend
dependabot[bot] Jul 21, 2025
f61bbc0
Fix missing typescript import path aliases
mononaut Jul 22, 2025
1dc160b
Liquid quick patch for simplicity tapscript spends
mononaut Jul 23, 2025
4a9eebe
add missing optional chaining
mononaut Jul 24, 2025
6abf908
refactor simplicity tapleaf detection
mononaut Jul 24, 2025
3a521f9
Fix missing unit for numbers below 1000 in amount shortener
natsoni Jul 24, 2025
090d2cc
Larger units in amount shortener
natsoni Jul 24, 2025
b0a1254
Use amount shortener pipe for hashrate related data
natsoni Jul 24, 2025
ae57b85
ops: Update check script for new servers
wiz Jul 25, 2025
9441b92
Add special block for Simplicity activation
natsoni Jul 25, 2025
2765e37
Merge pull request #5989 from mempool/natsoni/simplicity-countdown
wiz Jul 25, 2025
f7182bd
Merge pull request #5988 from mempool/natsoni/amount-shortener-units
wiz Jul 25, 2025
4ee6107
Merge pull request #5984 from mempool/mononaut/fix-typescript-path-al…
wiz Jul 25, 2025
acf7a1c
Merge pull request #5986 from mempool/mononaut/liquid-simplicity-fix
wiz Jul 25, 2025
981cb35
improve op_return display
mononaut Jul 26, 2025
048a706
fix op_return toggle overflow
mononaut Jul 26, 2025
4a69473
extract i18n from source
softsimon Jul 27, 2025
ab45911
i18n updates
softsimon Jul 28, 2025
23ee270
update from transifex
softsimon Jul 28, 2025
4faf3bd
fix i18n duplicates
softsimon Jul 28, 2025
fe59574
Merge pull request #5982 from mempool/dependabot/npm_and_yarn/backend…
nymkappa Jul 28, 2025
de9f359
Merge pull request #5983 from mempool/dependabot/npm_and_yarn/fronten…
nymkappa Jul 28, 2025
49381bd
Update simplicity script to use the correct witness element
natsoni Jul 29, 2025
d57d2bb
Merge pull request #5990 from mempool/mononaut/opreturn-tweaks
wiz Jul 30, 2025
45f126a
standardize taproot witness treatment
mononaut Jul 30, 2025
2146b8d
standardize taproot witness treatment
mononaut Jul 30, 2025
8295a0b
fix treasury names
mononaut Jul 30, 2025
bb520e2
Merge pull request #5992 from mempool/natsoni/fix-simplicity-script
mononaut Jul 30, 2025
68f76e6
Merge pull request #5993 from mempool/mononaut/fix-treasury-names
wiz Jul 31, 2025
c4b6f0b
handle missing USD price data
mononaut Aug 1, 2025
35cd476
Add db migration to remove bad price data
mononaut Aug 1, 2025
66eb31b
Fix broken blocks_prices data during indexing
mononaut Aug 1, 2025
5fc8a9f
Merge pull request #5994 from mempool/mononaut/handle-missing-price-data
wiz Aug 1, 2025
252b796
Add 'None' filter mode to mempool goggles
natsoni Aug 1, 2025
a04df3f
add hybrid build hash to monitoring
mononaut Aug 1, 2025
20be899
Merge pull request #5996 from mempool/mononaut/hybrid-hash
wiz Aug 1, 2025
8ea1078
Fix scriptsig_asm in coinbase on non-esplora backends
natsoni Aug 4, 2025
b94698f
Merge pull request #5997 from mempool/natsoni/coinbase-scriptsig_asm
mononaut Aug 4, 2025
df533ad
Update bull bitcoin logo for 2025
hunicus Feb 22, 2025
ac10721
Update conversions rates before sending them to websocket
natsoni Aug 6, 2025
40f32c8
Log when falling back to latest known price
natsoni Aug 6, 2025
a20d383
Check if latest USD price is valid before updating rates
natsoni Aug 6, 2025
1d35c92
Fix fiat value in total received amount
natsoni Aug 7, 2025
965a1f3
Merge pull request #6002 from mempool/natsoni/address-page-details
nymkappa Aug 7, 2025
1a73466
Merge pull request #5792 from mempool/hunicus/bull-branding-25
nymkappa Aug 7, 2025
62dd1ca
[prices] only print "latest avg price from exchanges" upon success
nymkappa Aug 7, 2025
8f23be3
Merge pull request #5999 from mempool/natsoni/fix-rates
nymkappa Aug 7, 2025
3855034
Update frontend/src/app/components/block-overview-graph/block-overvie…
mononaut Aug 10, 2025
8b2844c
Merge pull request #5995 from mempool/natsoni/none-mode-mempool-goggles
mononaut Aug 12, 2025
b59b7f1
[accelerator] minor tweak to dashboard `recent` widget to align status
nymkappa Aug 12, 2025
6c1adc2
Merge pull request #6009 from mempool/nymkappa/accel-dashboard-align
mononaut Aug 12, 2025
2545ab7
ops: Remove bisq stuff from production folder
wiz Aug 14, 2025
a41290d
ops: Tweak start times on elements screens
wiz Aug 16, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
100 changes: 73 additions & 27 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,19 @@ name: CI Pipeline for the Backend and Frontend
on:
pull_request:
types: [opened, review_requested, synchronize]
push:
branches:
- master

jobs:
backend:
if: "!contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')"
if: "(github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')) || github.event_name == 'push'"
strategy:
matrix:
node: ["20", "21"]
node: ["22.14.0"]
flavor: ["dev", "prod"]
fail-fast: false
runs-on: "ubuntu-latest"
runs-on: ubuntu-latest

name: Backend (${{ matrix.flavor }}) - node ${{ matrix.node }}
steps:
Expand Down Expand Up @@ -66,7 +69,7 @@ jobs:

cache:
name: "Cache assets for builds"
runs-on: "ubuntu-latest"
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
Expand Down Expand Up @@ -157,13 +160,13 @@ jobs:

frontend:
needs: cache
if: "!contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')"
if: "(github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')) || github.event_name == 'push'"
strategy:
matrix:
node: ["20", "21"]
node: ["22.14.0"]
flavor: ["dev", "prod"]
fail-fast: false
runs-on: "ubuntu-latest"
runs-on: ubuntu-latest

name: Frontend (${{ matrix.flavor }}) - node ${{ matrix.node }}
steps:
Expand Down Expand Up @@ -245,23 +248,13 @@ jobs:
VERBOSE: 1

e2e:
if: "!contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')"
runs-on: "ubuntu-latest"
if: "(github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')) || github.event_name == 'push'"
runs-on: ubuntu-latest
needs: frontend
strategy:
fail-fast: false
matrix:
module: ["mempool", "liquid"]
include:
- module: "mempool"
spec: |
cypress/e2e/mainnet/*.spec.ts
cypress/e2e/signet/*.spec.ts
cypress/e2e/testnet4/*.spec.ts
- module: "liquid"
spec: |
cypress/e2e/liquid/liquid.spec.ts
cypress/e2e/liquidtestnet/liquidtestnet.spec.ts
module: ["mempool", "liquid", "testnet4"]

name: E2E tests for ${{ matrix.module }}
steps:
Expand All @@ -273,7 +266,7 @@ jobs:
- name: Setup node
uses: actions/setup-node@v3
with:
node-version: 20
node-version: 22
cache: "npm"
cache-dependency-path: ${{ matrix.module }}/frontend/package-lock.json

Expand Down Expand Up @@ -310,19 +303,23 @@ jobs:

- name: Unzip assets before building (src/resources)
run: unzip -o promo-video-assets.zip -d ${{ matrix.module }}/frontend/src/resources/promo-video


# mempool
- name: Chrome browser tests (${{ matrix.module }})
if: ${{ matrix.module == 'mempool' }}
uses: cypress-io/github-action@v5
with:
tag: ${{ github.event_name }}
working-directory: ${{ matrix.module }}/frontend
build: npm run config:defaults:${{ matrix.module }}
start: npm run start:local-staging
start: npm run start:parameterized
wait-on: "http://localhost:4200"
wait-on-timeout: 120
record: true
parallel: true
spec: ${{ matrix.spec }}
spec: |
cypress/e2e/mainnet/*.spec.ts
cypress/e2e/signet/*.spec.ts
group: Tests on Chrome (${{ matrix.module }})
browser: "chrome"
ci-build-id: "${{ github.sha }}-${{ github.workflow }}-${{ github.event_name }}"
Expand All @@ -332,9 +329,58 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CYPRESS_PROJECT_ID: ${{ secrets.CYPRESS_PROJECT_ID }}

# liquid
- name: Chrome browser tests (${{ matrix.module }})
if: ${{ matrix.module == 'liquid' }}
uses: cypress-io/github-action@v5
with:
tag: ${{ github.event_name }}
working-directory: ${{ matrix.module }}/frontend
build: npm run config:defaults:${{ matrix.module }}
start: npm run start:parameterized
wait-on: "http://localhost:4200"
wait-on-timeout: 120
record: true
parallel: true
spec: |
cypress/e2e/liquid/liquid.spec.ts
cypress/e2e/liquidtestnet/liquidtestnet.spec.ts
group: Tests on Chrome (${{ matrix.module }})
browser: "chrome"
ci-build-id: "${{ github.sha }}-${{ github.workflow }}-${{ github.event_name }}"
env:
COMMIT_INFO_MESSAGE: ${{ github.event.pull_request.title }}
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CYPRESS_PROJECT_ID: ${{ secrets.CYPRESS_PROJECT_ID }}

# testnet
- name: Chrome browser tests (${{ matrix.module }})
if: ${{ matrix.module == 'testnet4' }}
uses: cypress-io/github-action@v5
with:
tag: ${{ github.event_name }}
working-directory: ${{ matrix.module }}/frontend
build: npm run config:defaults:mempool
start: npm run start:parameterized
wait-on: "http://localhost:4200"
wait-on-timeout: 120
record: true
parallel: true
spec: |
cypress/e2e/testnet4/*.spec.ts
group: Tests on Chrome (${{ matrix.module }})
browser: "chrome"
ci-build-id: "${{ github.sha }}-${{ github.workflow }}-${{ github.event_name }}"
env:
CYPRESS_REROUTE_TESTNET: true
COMMIT_INFO_MESSAGE: ${{ github.event.pull_request.title }}
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CYPRESS_PROJECT_ID: ${{ secrets.CYPRESS_PROJECT_ID }}
validate_docker_json:
if: "!contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')"
runs-on: "ubuntu-latest"
if: "(github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')) || github.event_name == 'push'"
runs-on: ubuntu-latest
name: Validate generated backend Docker JSON

steps:
Expand All @@ -359,4 +405,4 @@ jobs:
- name: Validate JSON syntax
run: |
cat mempool-config.json | jq
working-directory: docker/docker/backend
working-directory: docker/docker/backend
181 changes: 181 additions & 0 deletions .github/workflows/docker_update_latest_tag.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,181 @@
name: Docker - Update latest tag

on:
workflow_dispatch:
inputs:
tag:
description: 'The Docker image tag to pull'
required: true
type: string

jobs:
retag-and-push:
strategy:
matrix:
service:
- frontend
- backend
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3
id: buildx
with:
install: true

- name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
platforms: linux/amd64,linux/arm64

- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USER }}
password: ${{ secrets.DOCKER_PASSWORD }}

- name: Get source image manifest and SHAs
id: source-manifest
run: |
set -e
echo "Fetching source manifest..."
MANIFEST=$(docker manifest inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:${{ github.event.inputs.tag }})
if [ -z "$MANIFEST" ]; then
echo "No manifest found. Assuming single-arch image."
exit 1
fi

echo "Original source manifest:"
echo "$MANIFEST" | jq .

AMD64_SHA=$(echo "$MANIFEST" | jq -r '.manifests[] | select(.platform.architecture=="amd64" and .platform.os=="linux") | .digest')
ARM64_SHA=$(echo "$MANIFEST" | jq -r '.manifests[] | select(.platform.architecture=="arm64" and .platform.os=="linux") | .digest')

if [ -z "$AMD64_SHA" ] || [ -z "$ARM64_SHA" ]; then
echo "Source image is not multi-arch (missing amd64 or arm64)"
exit 1
fi

echo "Source amd64 manifest digest: $AMD64_SHA"
echo "Source arm64 manifest digest: $ARM64_SHA"

echo "amd64_sha=$AMD64_SHA" >> $GITHUB_OUTPUT
echo "arm64_sha=$ARM64_SHA" >> $GITHUB_OUTPUT

- name: Pull and retag architecture-specific images
run: |
set -e

docker buildx inspect --bootstrap

# Remove any existing local images to avoid cache interference
echo "Removing existing local images if they exist..."
docker image rm ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:${{ github.event.inputs.tag }} || true

# Pull amd64 image by digest
echo "Pulling amd64 image by digest..."
docker pull --platform linux/amd64 ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.amd64_sha }}
PULLED_AMD64_MANIFEST_DIGEST=$(docker inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.amd64_sha }} --format '{{index .RepoDigests 0}}' | cut -d@ -f2)
PULLED_AMD64_IMAGE_ID=$(docker inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.amd64_sha }} --format '{{.Id}}')
echo "Pulled amd64 manifest digest: $PULLED_AMD64_MANIFEST_DIGEST"
echo "Pulled amd64 image ID (sha256): $PULLED_AMD64_IMAGE_ID"

# Pull arm64 image by digest
echo "Pulling arm64 image by digest..."
docker pull --platform linux/arm64 ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.arm64_sha }}
PULLED_ARM64_MANIFEST_DIGEST=$(docker inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.arm64_sha }} --format '{{index .RepoDigests 0}}' | cut -d@ -f2)
PULLED_ARM64_IMAGE_ID=$(docker inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.arm64_sha }} --format '{{.Id}}')
echo "Pulled arm64 manifest digest: $PULLED_ARM64_MANIFEST_DIGEST"
echo "Pulled arm64 image ID (sha256): $PULLED_ARM64_IMAGE_ID"

# Tag the images
docker tag ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.amd64_sha }} ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-amd64
docker tag ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.arm64_sha }} ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-arm64

# Verify tagged images
TAGGED_AMD64_IMAGE_ID=$(docker inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-amd64 --format '{{.Id}}')
TAGGED_ARM64_IMAGE_ID=$(docker inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-arm64 --format '{{.Id}}')
echo "Tagged amd64 image ID (sha256): $TAGGED_AMD64_IMAGE_ID"
echo "Tagged arm64 image ID (sha256): $TAGGED_ARM64_IMAGE_ID"

- name: Push architecture-specific images
run: |
set -e

echo "Pushing amd64 image..."
docker push ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-amd64
PUSHED_AMD64_DIGEST=$(docker inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-amd64 --format '{{index .RepoDigests 0}}' | cut -d@ -f2)
echo "Pushed amd64 manifest digest (local): $PUSHED_AMD64_DIGEST"

# Fetch manifest from registry after push
echo "Fetching pushed amd64 manifest from registry..."
PUSHED_AMD64_REGISTRY_MANIFEST=$(docker manifest inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-amd64)
PUSHED_AMD64_REGISTRY_DIGEST=$(echo "$PUSHED_AMD64_REGISTRY_MANIFEST" | jq -r '.config.digest')
echo "Pushed amd64 manifest digest (registry): $PUSHED_AMD64_REGISTRY_DIGEST"

echo "Pushing arm64 image..."
docker push ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-arm64
PUSHED_ARM64_DIGEST=$(docker inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-arm64 --format '{{index .RepoDigests 0}}' | cut -d@ -f2)
echo "Pushed arm64 manifest digest (local): $PUSHED_ARM64_DIGEST"

# Fetch manifest from registry after push
echo "Fetching pushed arm64 manifest from registry..."
PUSHED_ARM64_REGISTRY_MANIFEST=$(docker manifest inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-arm64)
PUSHED_ARM64_REGISTRY_DIGEST=$(echo "$PUSHED_ARM64_REGISTRY_MANIFEST" | jq -r '.config.digest')
echo "Pushed arm64 manifest digest (registry): $PUSHED_ARM64_REGISTRY_DIGEST"

- name: Create and push multi-arch manifest with original digests
run: |
set -e

echo "Creating multi-arch manifest with original digests..."
docker manifest create ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest \
${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.amd64_sha }} \
${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.arm64_sha }}

echo "Pushing multi-arch manifest..."
docker manifest push ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest

- name: Clean up intermediate tags
if: success()
run: |
docker rmi ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-amd64 || true
docker rmi ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-arm64 || true
docker rmi ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:${{ github.event.inputs.tag }} || true

- name: Verify final manifest
run: |
set -e
echo "Fetching final generated manifest..."
FINAL_MANIFEST=$(docker manifest inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest)
echo "Generated final manifest:"
echo "$FINAL_MANIFEST" | jq .

FINAL_AMD64_SHA=$(echo "$FINAL_MANIFEST" | jq -r '.manifests[] | select(.platform.architecture=="amd64" and .platform.os=="linux") | .digest')
FINAL_ARM64_SHA=$(echo "$FINAL_MANIFEST" | jq -r '.manifests[] | select(.platform.architecture=="arm64" and .platform.os=="linux") | .digest')

echo "Final amd64 manifest digest: $FINAL_AMD64_SHA"
echo "Final arm64 manifest digest: $FINAL_ARM64_SHA"

# Compare all digests
echo "Comparing digests..."
echo "Source amd64 digest: ${{ steps.source-manifest.outputs.amd64_sha }}"
echo "Pulled amd64 manifest digest: $PULLED_AMD64_MANIFEST_DIGEST"
echo "Pushed amd64 manifest digest (local): $PUSHED_AMD64_DIGEST"
echo "Pushed amd64 manifest digest (registry): $PUSHED_AMD64_REGISTRY_DIGEST"
echo "Final amd64 digest: $FINAL_AMD64_SHA"
echo "Source arm64 digest: ${{ steps.source-manifest.outputs.arm64_sha }}"
echo "Pulled arm64 manifest digest: $PULLED_ARM64_MANIFEST_DIGEST"
echo "Pushed arm64 manifest digest (local): $PUSHED_ARM64_DIGEST"
echo "Pushed arm64 manifest digest (registry): $PUSHED_ARM64_REGISTRY_DIGEST"
echo "Final arm64 digest: $FINAL_ARM64_SHA"

if [ "$FINAL_AMD64_SHA" != "${{ steps.source-manifest.outputs.amd64_sha }}" ] || [ "$FINAL_ARM64_SHA" != "${{ steps.source-manifest.outputs.arm64_sha }}" ]; then
echo "Error: Final manifest SHAs do not match source SHAs"
exit 1
fi

echo "Successfully created multi-arch ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest from ${{ github.event.inputs.tag }}"
Loading