Skip to content

Real EU gateway data (42 clusters) + release via assets - #1

Merged
dunefro merged 7 commits into
mainfrom
feat/eu-gateway-data
Oct 12, 2026
Merged

dunefro merged 7 commits into
mainfrom
feat/eu-gateway-data

Conversation

@shubhamrai1993

@shubhamrai1993 shubhamrai1993 commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

Replaces the placeholder scaffold with the LLMGateway Clusters fleet, and reworks releases so they don't need to push to main.

Data

42 gateway clusters on *.gateway.truefoundry.ai, into data/eu/gateway.json. 15 live, 27 provisioned.

The wiki's NAT cells are corrupted — paired addresses render as one unseparated string (18.119.53.2363.130.37.65). Several split more than one way and every candidate parses as valid IPv4, so none of these were eyeballed. Each was resolved against AWS ip-ranges.json, GCP cloud.json and Azure service tags, accepting a split only when both addresses fall inside the region the row claims. All 42 resolved; zero ambiguous.

Two do not split the way they look:

Cluster Looks like Actually
tfy-aws-fra-gtw 3.65.93.126 + 3.181.139.3 3.65.93.12 + 63.181.139.3
tfy-aws-hnd-gtw 54.238.73.11 + 8.178.26.39 54.238.73.1 + 18.178.26.39

3.181.139.3 and 8.178.26.39 are in no AWS range at all.

Two wiki region codes are wrong and are corrected here, both confirmed the same way:

  • tfy-aws-mad-gtw: ap-south-2 → eu-south-2
  • tfy-aws-zrh-gtw: eu-central-1 → eu-central-2

Worth fixing on the wiki too.

Schema

Adds status (live | provisioned). 27 clusters have NAT addresses allocated but no published endpoint, so hostname is now required only for live entries, and must agree with its airport_code. Both statuses are published — allowlisting a provisioned IP costs nothing and avoids an urgent firewall change when a region activates.

Release mechanics

The ruleset on main requires PRs, so the old commit-dist-back-to-main step could never succeed. dist/ is now untracked; CI builds it and attaches it to the release, and gh creates the tag at the merge commit. Diff baseline comes from the previous release's asset, so old releases must not be deleted.

Still missing

data/eu/control-plane.json, data/us/control-plane.json, data/us/gateway.json — not on the source page. Absent rather than stubbed.

Not yet decided

Whether to publish the 27 provisioned regions at all. They're included with status: provisioned; say the word and I'll filter to the 15 live ones.


Note

Medium Risk
Customers must switch allowlist URLs/format from legacy nat-ips.json to per-plane releases; incorrect NAT data would break customer firewall rules, though CI validation and rollup checks reduce that risk.

Overview
Replaces the placeholder NAT IP repo layout with a hostname-centric IP ranges model and ships real EU AI Gateway egress allowlists.

Data & schema: Source of truth moves from data/<plane>/*.json to eu/ip-ranges.json and us/ip-ranges.json (US empty for now). Endpoints are keyed by hostname and nat_ips, with optional airport_code for PoPs and rollup hostnames like gateway.truefoundry.ai / eu.gateway.truefoundry.ai. Placeholder entries, combined nat-ips.json, and the old schema/ + root scripts/ are removed.

Tooling: New JSON Schema under .github/schema/, with validate/build/release-notes scripts under .github/scripts/. Validation enforces ordering, public CIDRs, and that geolocated gateway nat_ips match the union of their airport endpoints.

Release & CI: dist/ is generated only in CI (gitignored)—no commit back to main. Releases are created with gh at the merge commit, attach eu.json / us.json (+ .txt), diff against the previous release’s assets, and skip publishing when no addresses changed. README documents the 15-day activation window for new IPs.

Reviewed by Cursor Bugbot for commit 7b13c09. Bugbot is set up for automated code reviews on this repo. Configure here.

Replaces the placeholder scaffold with the LLMGateway Clusters fleet.

The wiki renders paired NAT addresses as one unseparated string
(18.119.53.2363.130.37.65). Several split more than one way with every
candidate parsing as valid IPv4, so each was resolved against AWS
ip-ranges.json, GCP cloud.json and Azure service tags, accepting a split
only when both addresses fall inside the region the row claims. Two do not
split the way they look:

  tfy-aws-fra-gtw -> 3.65.93.12 + 63.181.139.3
  tfy-aws-hnd-gtw -> 54.238.73.1 + 18.178.26.39

Two wiki region codes are also wrong and corrected here: mad is eu-south-2
(not ap-south-2) and zrh is eu-central-2 (not eu-central-1).

Adds a status field: 15 clusters are live with a published endpoint, 27 have
NAT addresses allocated but no endpoint yet. Both are published so customers
can allowlist ahead of a region activating. hostname is now required only for
live entries, and must agree with its airport_code.

Control-plane IPs for both planes, and the US gateway fleet, are still to
come; those files are absent rather than stubbed.
The org ruleset on main requires pull requests, so the release workflow's
commit-and-push step could never succeed. Rather than ask for a bot bypass,
stop tracking dist/ at all: it is a build artifact, CI builds it and attaches
it to the release, and gh creates the tag at the merge commit.

The diff baseline for release notes now comes from the previous release's
nat-ips.json asset rather than from git, so old releases must not be deleted.

Consumer URLs are unaffected - they already pointed at release assets.
The diff job builds the base branch's data/ with the PR's build.py, so this
PR's new required status field made the baseline build crash with KeyError.

Read gateway-only keys defensively, and mark the job continue-on-error: it
exists to render a reviewer-facing diff, and validate is the real gate.
@github-actions

github-actions Bot commented Oct 12, 2026 •

Copy link
Copy Markdown

Proposed IP changes

Allowlist 28 new addresses before they start carrying traffic, 15 days after this release.

EU · as.gateway.truefoundry.ai

Added:

  • 13.126.176.139/32
  • 13.251.96.74/32
  • 15.207.191.126/32
  • 16.51.12.109/32
  • 16.51.101.207/32
  • 18.143.12.175/32
  • 34.18.22.15/32
  • 34.18.192.62/32

EU · au.gateway.truefoundry.ai

Added:

  • 3.105.148.45/32
  • 13.237.191.204/32
  • 13.251.96.74/32
  • 16.51.12.109/32
  • 16.51.101.207/32
  • 18.143.12.175/32

EU · bom.gateway.truefoundry.ai

Added:

  • 13.126.176.139/32
  • 15.207.191.126/32

EU · cpt.gateway.truefoundry.ai

Added:

  • 13.244.129.178/32
  • 13.246.115.110/32

EU · dfw.gateway.truefoundry.ai

Added:

  • 34.174.18.136/32
  • 34.174.240.150/32

EU · dia.gateway.truefoundry.ai

Added:

  • 34.18.22.15/32
  • 34.18.192.62/32

EU · eu.gateway.truefoundry.ai

Added:

  • 4.165.99.208/32
  • 4.165.129.123/32
  • 13.42.115.230/32
  • 18.130.148.118/32
  • 34.18.22.15/32
  • 34.18.192.62/32
  • 34.175.44.33/32
  • 34.175.219.109/32

EU · gateway.truefoundry.ai

Added:

  • 3.105.148.45/32
  • 4.165.99.208/32
  • 4.165.129.123/32
  • 13.42.115.230/32
  • 13.126.176.139/32
  • 13.237.191.204/32
  • 13.244.129.178/32
  • 13.246.115.110/32
  • 13.251.96.74/32
  • 15.207.191.126/32
  • 16.51.12.109/32
  • 16.51.101.207/32
  • 18.130.148.118/32
  • 18.143.12.175/32
  • 20.245.207.53/32
  • 34.18.22.15/32
  • 34.18.192.62/32
  • 34.39.220.106/32
  • 34.39.220.236/32
  • 34.130.196.232/32
  • 34.130.234.128/32
  • 34.174.18.136/32
  • 34.174.240.150/32
  • 34.175.44.33/32
  • 34.175.219.109/32
  • 40.75.129.73/32
  • 52.4.51.133/32
  • 54.204.114.10/32

EU · gru.gateway.truefoundry.ai

Added:

  • 34.39.220.106/32
  • 34.39.220.236/32

EU · gvx.gateway.truefoundry.ai

Added:

  • 4.165.99.208/32
  • 4.165.129.123/32

EU · lhr.gateway.truefoundry.ai

Added:

  • 13.42.115.230/32
  • 18.130.148.118/32

EU · mad.gateway.truefoundry.ai

Added:

  • 34.175.44.33/32
  • 34.175.219.109/32

EU · mel.gateway.truefoundry.ai

Added:

  • 16.51.12.109/32
  • 16.51.101.207/32

EU · orf.gateway.truefoundry.ai

Added:

  • 52.4.51.133/32
  • 54.204.114.10/32

EU · sa.gateway.truefoundry.ai

Added:

  • 34.39.220.106/32
  • 34.39.220.236/32

EU · sfo.gateway.truefoundry.ai

Added:

  • 20.245.207.53/32
  • 40.75.129.73/32

EU · sin.gateway.truefoundry.ai

Added:

  • 13.251.96.74/32
  • 18.143.12.175/32

EU · syd.gateway.truefoundry.ai

Added:

  • 3.105.148.45/32
  • 13.237.191.204/32

EU · us.gateway.truefoundry.ai

Added:

  • 20.245.207.53/32
  • 34.130.196.232/32
  • 34.130.234.128/32
  • 34.174.18.136/32
  • 34.174.240.150/32
  • 40.75.129.73/32
  • 52.4.51.133/32
  • 54.204.114.10/32

EU · yyz.gateway.truefoundry.ai

Added:

  • 34.130.196.232/32
  • 34.130.234.128/32

Full list

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 8a9e73a. Configure here.

Comment thread data/eu/gateway.json Outdated
…thub

Per review:
- status is gone. A cluster without a published endpoint simply has no
  hostname, which carries the same information without a second field to
  keep in sync. live_count/provisioned_count drop out of the envelope too.
- CONTRIBUTING.md removed; the README already covers the edit flow and the
  wiki transcription hazard.
- scripts/ moved to .github/scripts/, matching truefoundry/models.

The move broke ROOT, which was parent.parent and is now parents[2]. validate.py
failed loudly on the missing schema, but build.py just produced an empty build -
in CI that would have published a release saying there is nothing to allowlist.
build.py now refuses to run when data/ yields no files.
@dunefro
dunefro merged commit db61c13 into main Oct 12, 2026
3 checks passed
@dunefro
dunefro deleted the feat/eu-gateway-data branch October 12, 2026 16:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants