Preskoči na sadržaj

Sentry release + bundle-id

TL;DR

Auto-stamp <service>:version u Sentry na deploy success. EAS servisi imaju i bundle-id placeholder za mobile ({bundle_id}). SENTRY_BUNDLE_ID_OVERRIDE Make var overriduje {bundle_id}, NE toggle-uje stampanje. Stamp je observability, ne gate — failure NE aborta deploy.

Šta se radi

Na deploy success:

  1. Formiraj release_name iz template-a.
  2. sentry-cli releases new <release_name>.
  3. sentry-cli releases set-commits <release_name> --auto.
  4. (EAS) sentry-cli releases finalize <release_name>.

Release name ide u Sentry kao "tražena verzija" — Sentry group-uje sve issue-ove za tu verziju, omogućava regression tracking.

Template

{
  "services": {
    "api": {
      "release_name_template": "{service}@{version}"
    },
    "mobile": {
      "release_name_template": "{service}@{version}+{bundle_id}"
    }
  }
}

Placeholder-i:

  • {service} — servis ime iz services.json
  • {version} — semver iz ci-state.json
  • {bundle_id} — EAS bundle ID (mobile); overridable

Sentry konfiguracija

{
  "observability": {
    "sentry": {
      "enabled": true,
      "stamp": {
        "auto": true,
        "finalize_on_deploy": true
      },
      "by_environment": {
        "production": { "environment": "production" },
        "staging": { "environment": "staging" }
      }
    }
  }
}
  • enabled: true — Sentry SDK se inkludira u image.
  • stamp.auto: true — auto-stamp na deploy success.
  • stamp.finalize_on_deploy: true — finaliziraj release odmah. Za mobilne, bez ovoga release ostaje "open" dok se app ne pošalje na store.
  • by_environment (v18+) — per-env override.

Bundle ID override

# CLI:
make <svc>-deploy SENTRY_BUNDLE_ID_OVERRIDE="custom-bundle-123"

Rezultat: {bundle_id} u template-u postaje custom-bundle-123.

NE radi:

  • SENTRY_BUNDLE_ID_OVERRIDE=true (boolean) — override JESTE override vrijednost, ne toggle.
  • SENTRY_BUNDLE_ID_OVERRIDE="" (prazno) — koristi prazno umjesto pravog bundle-id; Sentry će grupisati sve u isti release.

Failure handling

# ci/sentry/mobile_stamp.py (i deploy.py za ostale)
try:
    sentry_release_set_commits(...)
    sentry_release_finalize(...)
except VendorAuthError:
    log.warning("Sentry stamp failed: auth")
    # NE aborta deploy
except Exception:
    log.warning("Sentry stamp failed: transient")
    # NE aborta deploy

Sentry stamp je observability, NE gate. Ako Sentry padne, deploy se smatra uspješnim. Log warning + nastavi.

Izuzeci:

  • VendorAuthError (token loš) — fail-loud sa log warning, retry ne pomaže.
  • Network/5xx — log warning, retry na sljedećem deploy-u.

Kada NE raditi stamp

  • observability.sentry.enabled: false — kompletno preskoči.
  • stamp.auto: false — preskoči stamp (ali release JESTE kreiran u Sentry ako enabled: true).
  • failure_policy: strict servis + stamp fail — odluka servisa. Default je soft (ne aborta).

Vidi i