# Sürümler, Canlıya Alma ve Geri Alma

> Sürüm durumları, aktivasyon sonuçları, korumalı önizleme bağlantıları, canlıya alma ve geri alma kuralları, panel Sürümler ekranı ve derleme günlükleri.
>
> Kaynak: https://tecof-app-dev.vercel.app/versions-and-rollback · Bölüm: CLI · Son güncelleme: 2018-10-20

Her alan, kodunun her üretim derlemesini numaralı bir sürüm olarak tutar. Bu sayfa sürümün yaşam döngüsünü, staged ve production hedeflerini, önizleme bağlantılarını, canlıya alma ve geri alma kurallarını ve paneldeki **Sürümler** ekranını anlatır. Örnekler tema komutlarıyla verilmiştir; uygulamalarda aynı işlemler `tecof app push|versions|promote|rollback` ile yapılır.

> Sürümler alanın **kodunu** kapsar. Sayfa içerikleri, ürünler, CMS kayıtları ve mağaza ayarları sürümlenmez; canlıya alma ve geri alma onları değiştirmez.

---

## Sürüm Nedir

- Bir sürüm, alan deposundaki bir commit ve onun üretim derlemesidir. Numara (`v1`, `v2`, …) alan başına artar ve bir kez verilir.
- CLI push'ları dışında `main` dalına giden her yayın da sürüm olur: Cloud IDE kayıtları (`ide`), AI tema işleri (`ai`), `tecof app deploy` (`cli`) ve diğer commit'ler (`git`). Önizleme (production olmayan) derlemeleri sürüm değildir.
- Staged bir sürüm canlıya alındıktan sonra Vercel'in `main` dalı için yaptığı ikinci derleme aynı sürüme bağlanır; yeni numara açılmaz. Elle yeniden dağıtılan bir commit de mevcut sürümüne bağlanır.
- Sürüme `v12`, `12` ya da sürüm kimliğiyle başvurulur.
- `source` alanını okuyan araçlar tanımadıkları bir değeri genel bir kaynak olarak ele almalıdır; değer listesi genişleyebilir.

---

## Durumlar

| Durum | Panelde | Anlamı |
| :--- | :--- | :--- |
| `uploading` | Yükleniyor | Commit kuruluyor |
| `queued` | Sırada | Derleme sırada |
| `building` | Derleniyor | Derleme sürüyor |
| `ready` | Hazır | Derleme başarılı; önizlenebilir ve canlıya alınabilir |
| `error` | Hata | Derleme ya da commit başarısız; `errorMessage` ve `tecof theme logs vN` |
| `canceled` | İptal edildi | Derleme iptal edildi ya da `--prod` push'ta `main` aynı anda ilerlediği için commit `main` dalına yazılamadı (`errorMessage: "base-moved"`) |

```text
push ─▶ uploading ─▶ queued ─▶ building ─┬─▶ ready ─┬─▶ staged:     promote ile canlıya çıkar
                                         │          └─▶ production: derleme bitince canlıya çıkar
                                         └─▶ error | canceled
```

CLI push sırasında sürümü `ready`, `error` ya da `canceled` olana kadar yoklar. Sonradan izlemek için:

```bash
tecof theme versions          # liste (varsayılan 20, --limit ile en çok 100)
tecof theme versions v12      # tek sürüm; durum, commit, taban, adres, zamanlar
```

---

## Staged ve Production

| | Staged (varsayılan) | Production (`--prod`) |
| :--- | :--- | :--- |
| Komut | `tecof theme push` | `tecof theme push --prod` |
| `main` dalı | Değişmez; commit `tecof/vN` etiketinde durur | Commit `main` dalına hızlı ileri yazılır |
| Derleme | Canlı sitenin ortam değişkenleriyle tam üretim derlemesi; alan adı atanmaz | `main` dalının üretim derlemesi |
| Canlıya çıkış | `promote` ile, yeniden derlemeden | Derleme bitince kendiliğinden |
| `main` ilerlemişse | Push başarılı olur; canlıya alma `409 base-moved` alır | Push `409 base-moved` alır, sürüm açılmaz |
| Derleme sayısı | İki: staged derleme ve canlıya almadan sonra `main` derlemesi | Bir |
| Onay | Push onay istemez; `promote` onay ister | Push onay ister |

Uygulamalarda push her zaman `main` dalının o anki hâlinin üstüne kurulur ve klasör istenen son durum sayılır; temalardaki gibi yerel taban tutulmaz.

---

## Aktivasyon

Push, sürüm ayrıntısı, canlıya alma ve geri alma yanıtları sürümün canlıya göre konumunu `activation.outcome` ile verir:

| Değer | Anlamı |
| :--- | :--- |
| `activated` | Sürüm canlıda |
| `staged` | Hazır, hiç canlıya alınmadı; `promote` bekliyor |
| `pending` | Derleme sürüyor ya da canlıya alma / geri alma Vercel'de sırada. Sürüm okundukça sonuçlanır |
| `rolled-back` | Geri alma yanıtında: geri alma yapıldı, alan geri alınmış durumda. Sürüm ayrıntısında: sürüm hazır ama alan geri alınmış olduğu için canlıya çıkmadı |
| `superseded` | Başka bir sürüm canlıda |

Başarısız ya da iptal edilmiş sürümde `outcome` `null` olur. Nesne ayrıca `liveVersion`, `rolledBack` ve `diagnostics` alanlarını taşır. Staged bir derlemenin beklenmedik şekilde alan adı alması `diagnostics` içinde `unexpected-activation` olarak bildirilir.

---

## Önizleme Bağlantıları

`tecof theme open vN` ve paneldeki **Önizle** düğmesi hazır bir sürümün kendi adresini açar. Sürüm adresleri Vercel dağıtım adresleridir (`*.vercel.app`).

- Alanın Vercel projesinde dağıtım koruması açıksa sürüm adresleri kilitlidir. Tecof proje başına bir erişim sırrı üretir ve bağlantıya ekler:

  ```text
  https://<dağıtım>.vercel.app/?x-vercel-protection-bypass=<sır>&x-vercel-set-bypass-cookie=true
  ```

  Bağlantı tarayıcıya bir erişim çerezi bırakır; aynı adreste sonraki gezinmeler çerezle açılır.
- **Bağlantı sır içerir.** Sır proje geneli olduğu için tam bağlantıyı bilen herkes yalnız o sürümü değil, alanın bütün korumalı sürüm adreslerini açabilir. Bağlantının son kullanma zamanı yoktur (`expiresAt: null`). Yalnız yetkili kişilerle paylaşın.
- CLI sırrı terminalde ve `--json` makbuzunda maskeler (`x-vercel-protection-bypass=***`); tam bağlantıyı `--show-secret` basar. Tarayıcıda açılan bağlantı her zaman tamdır.
- Panel bağlantıyı yalnız açtığı yeni sekmeye verir; panelin kendisinde saklamaz ve göstermez.
- Koruma kapalıysa bağlantı düz dağıtım adresidir ve yanıtta `protected: false` olur.
- Bağlantıyı alana okuma erişimi olan herkes alabilir; `read` yetkili CI token'ı dahil.

---

## Canlıya Alma

`tecof theme promote vN` · panelde **Canlıya al**

1. Sürüm `ready` olmalıdır; değilse `409 version-not-ready`.
2. Yeniden derleme yapılmaz; alan adları saniyeler içinde sürümü gösterir. Vercel isteği sıraya alırsa sonuç `pending` olur ve sürüm okundukça (`tecof theme versions vN`) sonuçlanır.
3. **Hiç canlı olmamış staged sürüm:** `main` dalı sürümün commit'ine hızlı ileri alınır. Bu yalnız `main` hâlâ sürümün tabanındaysa yapılır; değilse işlem hiç başlamaz ve `409 base-moved` döner (`data.mainSha`, `data.baseSha`). Canlıya alma sürerken `main` ilerlerse (yarış) Tecof önceki canlı derlemeye döner ve yine `409 base-moved` döner (`data.reverted: true`).
4. **Bilinen bedel:** hızlı ileri alma, Vercel'in `main` dalındaki aynı commit'i bir kez daha derlemesine yol açar. İçerik aynıdır, canlı site etkilenmez ve ikinci derleme aynı sürüme bağlanır; yalnız derleme süresi harcanır. Önizlemeye ihtiyacınız olmayan değişikliklerde `--prod` tek derlemeyle yayınlar.
5. **Zaten `main` dalında olan sürüm** (production hedefli, ör. geri almadan sonra ileri alma): `main` değişmez ve `base-moved` denetimi yapılmaz.
6. **Daha önce canlıda olmuş sürüm:** Vercel'in geri alma mekanizmasıyla canlıya alınır; alan geri alınmış durumda kalır ([aşağıda](#geri-almadan-sonra-yayinlar)).
7. Zaten canlı olan sürümü canlıya almak bir şey değiştirmez (`activation.noop: true`).
8. Alan başına aynı anda tek commit, canlıya alma ya da geri alma çalışır; diğeri `409 space-busy` alır (`data.retryAfterSec`).

---

## Geri Alma

`tecof theme rollback [vN]` · panelde **Geri al**

1. Yalnız daha önce canlıda olmuş ve `ready` durumdaki bir sürüme geri alınabilir. Hiç canlı olmamış bir sürüm için `409 rollback-target-invalid` (`data.reason: "never-live"`) döner; o sürümü `promote` ile canlıya alın.
2. Sürüm verilmezse şu anki canlı sürüm dışında en son canlıda olmuş sürüme dönülür. Böyle bir sürüm yoksa `409 rollback-target-invalid` (`data.reason: "no-previous-version"`).
3. Geçiş anlıktır ve yeniden derleme yapılmaz. `main` dalına dokunulmaz: daha yeni değişiklikler `main` dalında kalır ama canlıda olmaz.
4. Zaten canlı olan sürüme geri almak bir şey değiştirmez.

### Geri Almadan Sonra Yayınlar

Geri almadan sonra Vercel, `main` dalının yeni derlemelerine alan adlarını kendiliğinden atamayı durdurur. Tecof alanı **geri alınmış** olarak işaretler: `rolledBack: true`, `tecof spaces ls` çıktısında `rolled-back` sütunu, panelde "Canlı site vN sürümüne geri alındı" bandı.

Tecof'ta `main` dalına giden her yayın bir yayın niyetidir. Bu yüzden alan geri alınmışken staged olmayan yeni bir üretim derlemesi hazır olduğunda — Cloud IDE kaydı, AI tema işi, `tecof theme push --prod`, `tecof app push --prod`, `tecof app deploy` ya da `main` dalına giden başka bir commit — Tecof o derlemeyi kendiliğinden canlıya alır, geri alınmış işaretini kaldırır ve mağazanın etkinlik kaydına "geri alma yeni yayınla kaldırıldı" kaydı düşer. Böylece Cloud IDE ya da AI ile yayın yapan biri "yayınladım ama canlıda değil" durumunda kalmaz.

| Olay | Sonuç |
| :--- | :--- |
| `main` dalına yeni yayın (Cloud IDE, AI, `--prod`, `tecof app deploy`, diğer commit'ler) | Derleme bitince Tecof canlıya alır; geri alınmış işareti kalkar |
| Staged push | Canlıya çıkmaz; geri alınmış durum sürer |
| Hiç canlı olmamış bir sürümü canlıya alma | Sürüm canlıya çıkar; geri alınmış işareti kalkar |
| Daha önce canlıda olmuş bir sürümü canlıya alma | Sürüm canlıya çıkar; alan geri alınmış durumda kalır. Sonraki `main` yayınları yine yukarıdaki kuralla canlıya alınır |

> Otomatik canlıya alma anında alanda başka bir canlıya alma ya da geri alma sürüyorsa otomatik adım atlanır ve yeni sürüm `ready` olarak kalır. Bu durumda sürümü panelden ya da `tecof theme promote vN` ile canlıya alın.

---

## Paneldeki Sürümler Ekranı

- **Tema:** **Temalar** → tema kartındaki ⋯ menüsü → **Sürümler** (`https://app.tecof.com/app/themes/<kurulum kimliği>/versions`). Cloud IDE araç çubuğundaki **Sürümler** bağlantısı aynı ekranı yeni sekmede açar.
- **Uygulama:** geliştirici portalında uygulamanın **Sürümler** sekmesi (`https://app.tecof.com/partner/apps/<uygulama kimliği>?tab=versions`). Yalnız Tecof barındırmalı uygulamalarda; eski **Dağıtımlar** sekmesi (`tecof app deploy`) olduğu gibi durur.

| Bölüm | İçerik |
| :--- | :--- |
| Canlı özet | Canlı sürüm, canlıya alınma zamanı, alan adı ve hızlı "vM sürümüne geri al" |
| Sürüm listesi | Numara, **Canlı** rozeti, durum, hedef (**Hazırlık** = staged, **Üretim** = production), kaynak, mesaj, kısa commit, yazar, zaman, yüklenen ve silinen dosya sayısı, hata metni |
| Eylemler | **Önizle**, **Canlıya al**, **Geri al**, **Günlük**; canlı sürümde **Canlı siteyi aç** |
| Yenile | Canlı sürümü Vercel'den yeniden okur |
| Geri alınmış bant | "Canlı site vN sürümüne geri alındı" ve en yeni hazır sürüm için **İleri al (vM)** |
| Alan kimliği | CLI'da `--space` ile kullanılan kimlik ve kopyalama düğmesi |
| Boş durum | İlk sürüm için CLI hızlı başlangıç komutları |

- Canlıya alma ve geri alma her zaman onay penceresi açar; sonuç sunucunun döndüğü aktivasyonla bildirilir.
- Süren bir derleme varken liste kendiliğinden tazelenir; derleme bitince bildirim gösterilir.
- Mağaza paketi özel temaları kapsamıyorsa liste ve önizleme açık kalır, canlıya alma ve geri alma kapanır.
- Katalog temalarında ekran salt okunurdur ve **Özel temaya kopyala** önerir ([Salt okunur alanlar](/spaces#salt-okunur-alanlar)).

---

## Derleme Günlükleri

`tecof theme logs vN` (uygulamada `tecof app logs vN`) ve paneldeki **Günlük** düğmesi sürümün derleme günlüğünün son 300 satırını gösterir. Tecof token biçimleri günlükte maskelenir. Derleme başarısız olursa `tecof theme push` son 40 satırı kendisi basar.

---

## Etkinlik Kaydı

Tema alanlarında push, canlıya alma, geri alma ve otomatik canlıya alma mağazanın etkinlik kaydına kod kategorisinde yazılır: işlemi yapan kullanıcı, kullanılan token, sürüm ve sonuç.

---

## İlgili Sayfalar

- [Tema Geliştirme: Hızlı Başlangıç](/theme-quickstart)
- [Güvenlik ve CI](/dev-security)
- [CLI Başvurusu](/cli-reference)
