name: FinanceGPT API contract

on:
  push:
  pull_request:

jobs:
  financegpt-contract:
    runs-on: ubuntu-latest
    steps:
      - name: Verify FinanceGPT API v2 contract
        shell: bash
        env:
          FINANCEGPT_EXPECTED_OPENAPI_SHA256: '228f3cf999f801d03634f0dad1fc6d296671bc13a8cf0d80994b00a57b62f910'
        run: |
          set -euo pipefail
          python3 - <<'PY'
          import hashlib, json, os, urllib.request
          base='https://financegpt.uk'
          with urllib.request.urlopen(base+'/developers/api-reference.json', timeout=20) as response:
              index=json.load(response)
          actual=index.get('source_sha256')
          expected=os.environ['FINANCEGPT_EXPECTED_OPENAPI_SHA256']
          if actual != expected:
              raise SystemExit('FinanceGPT OpenAPI contract hash changed: %s != %s' % (actual, expected))
          with urllib.request.urlopen(base+'/developers/versioning.json', timeout=20) as response:
              policy=json.load(response)
          if policy.get('schema') != 'financegpt.api-compatibility-policy.v1':
              raise SystemExit('Unexpected FinanceGPT compatibility policy schema')
          if int(policy.get('evidence',{}).get('scope_mismatches',0)) != 0:
              raise SystemExit('FinanceGPT Developer Catalog/OpenAPI scope mismatch detected')
          print('FinanceGPT contract verified:', actual)
          PY
