Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
141 commits
Select commit Hold shift + click to select a range
f17bbf4
docs: preserve Aberdeen plans and recovery checkpoint
arena-agent Sep 27, 2026
e0a1724
docs: record verified Aberdeen gateway responses
arena-agent Sep 27, 2026
af0e6ce
docs: document SEC access blocker and resumption requirements
arena-agent Sep 27, 2026
11f9e73
docs: verify official holdings downloads and NAV returns
arena-agent Sep 27, 2026
a466f60
feat: implement official Aberdeen updater with tested fallbacks
arena-agent Sep 27, 2026
240f687
fix: align derived return fields with published reporting dates
arena-agent Sep 27, 2026
744d903
feat: publish verified scoped Aberdeen ETF data
arena-agent Sep 27, 2026
75f8ae2
feat: copy JPMorgan watchlist UI with brand-only substitutions
arena-agent Sep 27, 2026
e9757d8
feat: publish complete verified Aberdeen ETF catalog
arena-agent Sep 27, 2026
9ba883b
chore: preserve CI draft and standard Dependabot configuration
arena-agent Sep 27, 2026
52d6666
feat: add persisted updater defaults and safe Actions overrides
arena-agent Sep 27, 2026
d49c049
docs: document verified sources configuration and limitations
arena-agent Sep 27, 2026
ae2a9cc
docs: record full-feed outage and browser verification
arena-agent Sep 27, 2026
c7f7182
docs: record Amplify README PR merge
arena-agent Sep 27, 2026
43b0d6a
docs: record Fidelity README PR merge
arena-agent Sep 27, 2026
9f5a21b
docs: record Franklin README PR merge
arena-agent Sep 27, 2026
d193bb5
docs: record Global-X README PR merge
arena-agent Sep 27, 2026
d28b00f
docs: record Goldman-Sachs README PR merge
arena-agent Sep 27, 2026
4ed55ce
docs: record Invesco README PR merge
arena-agent Sep 27, 2026
8162702
docs: record iShares README PR merge
arena-agent Sep 27, 2026
a0ebf24
docs: record JPMorgan README PR merge
arena-agent Sep 27, 2026
07e3af9
docs: record Neos README PR merge
arena-agent Sep 27, 2026
f00b620
docs: record ProShares README PR merge
arena-agent Sep 27, 2026
e7042bf
docs: record Schwab README PR merge
arena-agent Sep 27, 2026
78e6ce9
docs: record SPDR README PR merge
arena-agent Sep 27, 2026
f95fd14
docs: record VanEck README PR merge
arena-agent Sep 27, 2026
3daa488
docs: record Vanguard README PR merge
arena-agent Sep 27, 2026
24fd9fb
docs: record WisdomTree README PR merge
arena-agent Sep 27, 2026
5f5e4b1
docs: finalize PR status and explain refresh semantics
arena-agent Sep 27, 2026
bb33a4f
refactor: colocate updater configuration in scripts
arena-agent Sep 27, 2026
caea79a
fix: display None for empty dividend frequency
arena-agent Sep 27, 2026
db88726
docs: record authorized frequency label rollout and baselines
arena-agent Sep 27, 2026
4f208ff
docs: recover validated frequency rollout checkpoint
arena-agent Sep 27, 2026
a7809c5
fix: normalize ticker queue completion promises
arena-agent Sep 27, 2026
ec1de00
docs: record validation frequency rollout status
arena-agent Sep 27, 2026
8152114
docs: record Amplify frequency rollout status
arena-agent Sep 27, 2026
18a9b57
docs: record Fidelity frequency rollout status
arena-agent Sep 27, 2026
ec80411
docs: record Franklin frequency rollout status
arena-agent Sep 27, 2026
a47714a
docs: record Global-X frequency rollout status
arena-agent Sep 27, 2026
2832f58
docs: record Goldman-Sachs frequency rollout status
arena-agent Sep 27, 2026
9ced151
docs: record Invesco frequency rollout status
arena-agent Sep 27, 2026
9fbf678
docs: record iShares frequency rollout status
arena-agent Sep 27, 2026
3f3d0fc
docs: record JPMorgan frequency rollout status
arena-agent Sep 27, 2026
317501a
docs: record Neos frequency rollout status
arena-agent Sep 27, 2026
918a9d3
docs: record Schwab frequency rollout status
arena-agent Sep 27, 2026
37f170a
docs: record SPDR frequency rollout status
arena-agent Sep 27, 2026
bd75aa8
docs: record VanEck frequency rollout status
arena-agent Sep 27, 2026
d98b58b
docs: record Vanguard frequency rollout status
arena-agent Sep 27, 2026
e3877d7
docs: record WisdomTree frequency rollout status
arena-agent Sep 27, 2026
8cbc25c
make script executable
daggerok Sep 27, 2026
567c887
docs: finalize frequency rollout and ticker queue fix
arena-agent Sep 27, 2026
e4026a1
docs: establish self-contained worklog and recovery protocol
arena-agent Sep 27, 2026
7a9f48c
docs: record cross-repository ticker queue audit and baselines
arena-agent Sep 27, 2026
2712dbe
docs: checkpoint Global-X ticker queue rollout
arena-agent Sep 27, 2026
6473ec6
docs: checkpoint Global-X ticker queue rollout
arena-agent Sep 27, 2026
66817b3
docs: checkpoint Global-X ticker queue rollout
arena-agent Sep 27, 2026
3ede118
docs: checkpoint Goldman-Sachs ticker queue rollout
arena-agent Sep 27, 2026
81f0974
docs: checkpoint Goldman-Sachs ticker queue rollout
arena-agent Sep 27, 2026
f5a87e0
docs: checkpoint Goldman-Sachs ticker queue rollout
arena-agent Sep 27, 2026
a443eba
docs: checkpoint JPMorgan ticker queue rollout
arena-agent Sep 27, 2026
e513bc1
docs: checkpoint JPMorgan ticker queue rollout
arena-agent Sep 27, 2026
0f95448
docs: checkpoint JPMorgan ticker queue rollout
arena-agent Sep 27, 2026
c57b5df
docs: checkpoint Neos ticker queue rollout
arena-agent Sep 27, 2026
c64c9cb
docs: checkpoint Neos ticker queue rollout
arena-agent Sep 27, 2026
0111fd7
docs: checkpoint Neos ticker queue rollout
arena-agent Sep 27, 2026
1e602c2
docs: checkpoint ProShares ticker queue rollout
arena-agent Sep 27, 2026
a46088a
docs: checkpoint ProShares ticker queue rollout
arena-agent Sep 27, 2026
91dc588
docs: checkpoint ProShares ticker queue rollout
arena-agent Sep 27, 2026
50585c8
docs: checkpoint Schwab ticker queue rollout
arena-agent Sep 27, 2026
aa73cbe
docs: checkpoint Schwab ticker queue rollout
arena-agent Sep 27, 2026
f70e2f7
docs: checkpoint Schwab ticker queue rollout
arena-agent Sep 27, 2026
4d7f936
docs: checkpoint VanEck ticker queue rollout
arena-agent Sep 27, 2026
bee49bb
docs: checkpoint VanEck ticker queue rollout
arena-agent Sep 27, 2026
6774035
docs: checkpoint VanEck ticker queue rollout
arena-agent Sep 27, 2026
a6c4415
docs: checkpoint WisdomTree ticker queue rollout
arena-agent Sep 27, 2026
a91c03c
docs: checkpoint WisdomTree ticker queue rollout
arena-agent Sep 27, 2026
cfae9d0
docs: checkpoint WisdomTree ticker queue rollout
arena-agent Sep 27, 2026
c4a502b
docs: finalize queue rollout and canonical handoff
arena-agent Sep 27, 2026
27d25c8
docs: checkpoint scoped live validation and return-row review
arena-agent Sep 27, 2026
73bcd4b
test: record live ticker smoke and return-row audit
arena-agent Sep 27, 2026
51e1192
docs: checkpoint numeric return-row fix
arena-agent Sep 27, 2026
1c991d6
docs: checkpoint numeric return-row fix
arena-agent Sep 27, 2026
f5cef7b
docs: checkpoint numeric return-row fix
arena-agent Sep 27, 2026
11dead3
docs: align Aberdeen README and metadata with sibling template
arena-agent Sep 27, 2026
f5f756b
docs: record verified Aberdeen About alignment
arena-agent Sep 27, 2026
3dac604
docs: require live ticker acceptance and sibling presentation parity
arena-agent Sep 27, 2026
0a940eb
docs: checkpoint authorized shared header rollout
arena-agent Sep 28, 2026
283109c
update...
daggerok Sep 28, 2026
954ba03
docs: preserve owner cleanup and record header audit baselines
arena-agent Sep 28, 2026
b1e59ad
docs: specify shared compact header and approved parity changes
arena-agent Sep 28, 2026
52a3eb3
test: record all-repository header browser validation
arena-agent Sep 28, 2026
b780ea7
docs: checkpoint Amplify compact header rollout
arena-agent Sep 28, 2026
80d1ce6
docs: checkpoint Amplify compact header rollout
arena-agent Sep 28, 2026
44276b4
docs: checkpoint Amplify compact header rollout
arena-agent Sep 28, 2026
e2c6242
docs: checkpoint Fidelity compact header rollout
arena-agent Sep 28, 2026
fc97d91
docs: checkpoint Fidelity compact header rollout
arena-agent Sep 28, 2026
47dcab6
docs: checkpoint Fidelity compact header rollout
arena-agent Sep 28, 2026
bf62e4c
docs: checkpoint Franklin compact header rollout
arena-agent Sep 28, 2026
8b00c5d
docs: checkpoint Franklin compact header rollout
arena-agent Sep 28, 2026
6a2b9be
docs: checkpoint Franklin compact header rollout
arena-agent Sep 28, 2026
73e97ac
docs: checkpoint Global-X compact header rollout
arena-agent Sep 28, 2026
1e7bcec
docs: checkpoint Global-X compact header rollout
arena-agent Sep 28, 2026
8d971a2
docs: checkpoint Global-X compact header rollout
arena-agent Sep 28, 2026
f1435dd
docs: checkpoint Goldman-Sachs compact header rollout
arena-agent Sep 28, 2026
c1554a7
docs: checkpoint Goldman-Sachs compact header rollout
arena-agent Sep 28, 2026
b787a3c
docs: checkpoint Goldman-Sachs compact header rollout
arena-agent Sep 28, 2026
ad5f83e
docs: checkpoint Invesco compact header rollout
arena-agent Sep 28, 2026
798a67c
docs: checkpoint Invesco compact header rollout
arena-agent Sep 28, 2026
cb1c331
docs: checkpoint Invesco compact header rollout
arena-agent Sep 28, 2026
7a82e02
docs: checkpoint iShares compact header rollout
arena-agent Sep 28, 2026
c70aa33
docs: checkpoint iShares compact header rollout
arena-agent Sep 28, 2026
94f9558
docs: checkpoint iShares compact header rollout
arena-agent Sep 28, 2026
bed89e5
docs: checkpoint JPMorgan compact header rollout
arena-agent Sep 28, 2026
74493d2
docs: checkpoint JPMorgan compact header rollout
arena-agent Sep 28, 2026
ab10942
docs: checkpoint JPMorgan compact header rollout
arena-agent Sep 28, 2026
6bffba9
docs: checkpoint Neos compact header rollout
arena-agent Sep 28, 2026
d496cbc
docs: checkpoint Neos compact header rollout
arena-agent Sep 28, 2026
35cc85b
docs: checkpoint Neos compact header rollout
arena-agent Sep 28, 2026
98c4649
docs: checkpoint ProShares compact header rollout
arena-agent Sep 28, 2026
73d29a7
docs: checkpoint ProShares compact header rollout
arena-agent Sep 28, 2026
0e5e45f
docs: checkpoint ProShares compact header rollout
arena-agent Sep 28, 2026
f5e5bf1
docs: checkpoint Schwab compact header rollout
arena-agent Sep 28, 2026
4301fee
docs: checkpoint Schwab compact header rollout
arena-agent Sep 28, 2026
90d7e59
docs: checkpoint Schwab compact header rollout
arena-agent Sep 28, 2026
d7eea90
docs: checkpoint SPDR compact header rollout
arena-agent Sep 28, 2026
fc03c17
docs: checkpoint SPDR compact header rollout
arena-agent Sep 28, 2026
4d0f106
docs: checkpoint SPDR compact header rollout
arena-agent Sep 28, 2026
7a24017
docs: checkpoint VanEck compact header rollout
arena-agent Sep 28, 2026
bceab1c
docs: checkpoint VanEck compact header rollout
arena-agent Sep 28, 2026
a751ceb
docs: checkpoint VanEck compact header rollout
arena-agent Sep 28, 2026
405e7da
docs: checkpoint Vanguard compact header rollout
arena-agent Sep 28, 2026
a219de5
docs: checkpoint Vanguard compact header rollout
arena-agent Sep 28, 2026
68ce24a
docs: checkpoint Vanguard compact header rollout
arena-agent Sep 28, 2026
dadaca9
docs: checkpoint WisdomTree compact header rollout
arena-agent Sep 28, 2026
be08f78
docs: checkpoint WisdomTree compact header rollout
arena-agent Sep 28, 2026
67a6b83
docs: checkpoint WisdomTree compact header rollout
arena-agent Sep 28, 2026
1342d7b
docs: checkpoint aberdeen compact header rollout
arena-agent Sep 28, 2026
c34445e
docs: checkpoint aberdeen compact header rollout
arena-agent Sep 28, 2026
9853f03
feat: move header details into ETF count popover
daggerok Sep 28, 2026
03fe9f1
docs: checkpoint aberdeen compact header rollout
arena-agent Sep 28, 2026
0e52f5c
docs: finalize merged headers and verified Pages deployment
arena-agent Sep 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
version: 2
updates:
- package-ecosystem: "bun"
directory: "/"
schedule:
interval: "monthly"
open-pull-requests-limit: 10

- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"
open-pull-requests-limit: 10
185 changes: 185 additions & 0 deletions .github/workflows/update-data.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,185 @@
name: Update abrdn ETF data

on:
schedule:
- cron: '0 0 * * 0'
workflow_dispatch:
inputs:
max_fetches:
description: "Batch size; positive resumes cursor, 0 refreshes the selected universe and resets cursor; blank inherits scripts/update-data.config.json"
required: false
default: ""
type: string
request_sleep:
description: "Seconds between request starts including retries; conservative shared gate; blank inherits scripts/update-data.config.json"
required: false
default: ""
type: string
concurrency:
description: "Parallel fund workers; request starts remain conservatively paced; blank inherits scripts/update-data.config.json"
required: false
default: ""
type: string
aum:
description: "Net assets min:max in USD; K/M/B/T or nano/micro/small/mid/large preset; blank inherits scripts/update-data.config.json"
required: false
default: ""
type: string
ter:
description: "Gross expense ratio percent min:max; blank inherits scripts/update-data.config.json"
required: false
default: ""
type: string
dividend_yield:
description: "Indicated dividend yield percent min:max; blank inherits scripts/update-data.config.json"
required: false
default: ""
type: string
sec_yield:
description: "30-day SEC yield percent min:max; blank inherits scripts/update-data.config.json"
required: false
default: ""
type: string
tickers:
description: "Ticker allowlist separated by spaces, commas or semicolons; empty means all; blank inherits scripts/update-data.config.json"
required: false
default: ""
type: string
holdings_page_size:
description: "Rows per holdings JSON page; blank inherits scripts/update-data.config.json"
required: false
default: ""
type: string
history_page_size:
description: "Rows per market-price history JSON page; blank inherits scripts/update-data.config.json"
required: false
default: ""
type: string
max_retries:
description: "Retries after the first request; 0 disables retries; blank inherits scripts/update-data.config.json"
required: false
default: ""
type: string
history_range:
description: "Yahoo daily history range: max or Ny (e.g. 5y); preserves prior history; blank inherits scripts/update-data.config.json"
required: false
default: ""
type: string
skip_yahoo:
description: "Skip Yahoo history and dividends; retain published data; blank inherits scripts/update-data.config.json"
required: false
default: ""
type: string
edgar_fallback:
description: "Enable SEC N-PORT holdings fallback; never use an unrelated series; blank inherits scripts/update-data.config.json"
required: false
default: ""
type: string
performance_ytd:
description: "Annualized YTD return percent min:max; blank inherits scripts/update-data.config.json"
required: false
default: ""
type: string
performance_1y:
description: "Annualized 1Y return percent min:max; blank inherits scripts/update-data.config.json"
required: false
default: ""
type: string
performance_3y:
description: "Annualized 3Y return percent min:max; blank inherits scripts/update-data.config.json"
required: false
default: ""
type: string
performance_5y:
description: "Annualized 5Y return percent min:max; blank inherits scripts/update-data.config.json"
required: false
default: ""
type: string
performance_10y:
description: "Annualized 10Y return percent min:max; blank inherits scripts/update-data.config.json"
required: false
default: ""
type: string
total_return_ytd:
description: "Cumulative YTD return percent min:max; blank inherits scripts/update-data.config.json"
required: false
default: ""
type: string
total_return_1y:
description: "Cumulative 1Y return percent min:max; blank inherits scripts/update-data.config.json"
required: false
default: ""
type: string
total_return_3y:
description: "Cumulative 3Y return percent min:max; blank inherits scripts/update-data.config.json"
required: false
default: ""
type: string
total_return_5y:
description: "Cumulative 5Y return percent min:max; blank inherits scripts/update-data.config.json"
required: false
default: ""
type: string
total_return_10y:
description: "Cumulative 10Y return percent min:max; blank inherits scripts/update-data.config.json"
required: false
default: ""
type: string
advanced:
description: 'JSON overrides for any canonical env control; individual nonblank inputs win'
required: false
default: '{}'
type: string

permissions:
contents: write

concurrency:
group: update-data
cancel-in-progress: false

jobs:
update-data:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v7
- name: Setup bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Run updater unit tests
run: bun test scripts/update-data.test.ts
- name: Resolve file defaults and manual overrides
env:
DISPATCH_INPUTS: ${{ toJSON(inputs) }}
run: |
bun --eval '
import { resolveControls } from "./scripts/update-data.ts";
import { appendFile } from "node:fs/promises";
const inputs = JSON.parse(process.env.DISPATCH_INPUTS || "{}");
const advanced = JSON.parse(inputs.advanced || "{}");
const individual = Object.fromEntries(Object.entries(inputs)
.filter(([key]) => key !== "advanced")
.map(([key, value]) => [key.toUpperCase(), value]));
const file = await Bun.file("scripts/update-data.config.json").json();
const controls = resolveControls(file, advanced, individual);
await appendFile(process.env.GITHUB_ENV,
Object.entries(controls).map(([key,value]) => `${key}=${value}\n`).join(""));
'
- name: Generate api/aberdeen static data
run: bun ./scripts/update-data.ts
- name: Commit updated data
if: ${{ !cancelled() }}
run: |
git add api/aberdeen
if git diff --cached --quiet -- api/aberdeen; then
echo "api/aberdeen is already up to date"
exit 0
fi
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git commit -m "chore(data): update abrdn ETF data"
git push
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
node_modules/
.DS_Store
.idea/
.env
.env.*
*.tmp
Loading
Loading