Repository navigation
139 lines (120 loc) · 5.4 KB
/
Copy pathdeploy.yml
File metadata and controls
139 lines (120 loc) · 5.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
name: Deploy Haber to Cloudflare
on:
push:
branches: [ main ]
workflow_dispatch:
permissions:
contents: read
# İki dağıtım aynı anda koşmamalı: ikisi de aynı Worker'a ve aynı D1'e
# yazıyor. `cancel-in-progress` yok — yarıda kesilen bir göç uygulaması,
# şemayı iki sürüm arasında bırakabilir.
concurrency:
group: haber-production
env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
jobs:
deploy:
runs-on: ubuntu-latest
timeout-minutes: 15
environment:
name: production
url: https://haber.sametbasbug.dev
steps:
- name: Checkout
uses: actions/checkout@v7
- name: Set up Node
uses: actions/setup-node@v7
with:
node-version: 24
cache: npm
- name: Install dependencies
run: npm ci
# Statik derleme dağıtılmıyor ama koşuluyor: iki config aynı `src/`
# ağacını paylaşıyor ve yalnız birinde patlayan değişiklikler oluyor.
- name: Build the static site as a cross-check
env:
PUBLIC_SITE_URL: https://haber.sametbasbug.dev
PUBLIC_NEWS_SITE_URL: https://haber.sametbasbug.dev
PUBLIC_MAIN_SITE_URL: https://sametbasbug.dev
PUBLIC_EQUINOX_HUB_URL: https://equinox.sametbasbug.dev
PUBLIC_NEWS_SUBDOMAIN_ENABLED: 'true'
run: npm run build
- name: Build the Worker
env:
PUBLIC_SITE_URL: https://haber.sametbasbug.dev
PUBLIC_NEWS_SITE_URL: https://haber.sametbasbug.dev
PUBLIC_MAIN_SITE_URL: https://sametbasbug.dev
PUBLIC_EQUINOX_HUB_URL: https://equinox.sametbasbug.dev
PUBLIC_NEWS_SUBDOMAIN_ENABLED: 'true'
run: npm run build:ssr
- name: Apply D1 migrations
env:
CLOUDFLARE_ACCOUNT_ID: ${{ vars.CLOUDFLARE_ACCOUNT_ID }}
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
run: npx wrangler d1 migrations apply DB --remote --config wrangler.ssr.jsonc
- name: Deploy the Worker
env:
CLOUDFLARE_ACCOUNT_ID: ${{ vars.CLOUDFLARE_ACCOUNT_ID }}
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
run: |
short_sha="${GITHUB_SHA::12}"
npx wrangler deploy \
--config wrangler.ssr.jsonc \
--message "Automatic deploy from main ${short_sha}"
# Bu adım bu deponun geçmişinden geliyor ve tek 200 kontrolü DEĞİL.
#
# 2026-08-21'de site Error 1102 ile kapandı: ana sayfa istek başına
# 612 ms CPU harcıyordu, ücretsiz planın sınırı 10 ms. O sürüm sorunsuz
# DERLENİYORDU. Yani derlemenin yeşili, sitenin ayakta olduğunu
# söylemiyor — kusur yalnız çalışma anında görünüyordu.
#
# Ana sayfaya arka arkaya istek atılıyor ve HERHANGİ biri 200 dışında
# dönerse dağıtım düşüyor. `--retry` bilerek yok: tekrar denemek, geçici
# olmayan bir CPU aşımını geçiciymiş gibi gösterirdi.
- name: Verify the live site
run: |
fail=0
for i in $(seq 1 8); do
code="$(curl --silent --output /dev/null --write-out '%{http_code}' \
"https://haber.sametbasbug.dev/?cachebust=${GITHUB_SHA}-${i}")"
echo "ana sayfa #${i}: ${code}"
[[ "$code" == '200' ]] || fail=1
done
# `/sayfa/2/` sayfalanmış listeyi, `/hakkimizda/` statik sayfayı
# kapsıyor. Arşiv kökü (`/arsiv/`) BİLEREK yok: canlıda 404 dönüyor,
# yani listeye konsaydı her dağıtımı düşürürdü.
for path in /rss.xml /sayfa/2/ /hakkimizda/; do
code="$(curl --silent --output /dev/null --write-out '%{http_code}' \
"https://haber.sametbasbug.dev${path}")"
echo "${path}: ${code}"
[[ "$code" == '200' ]] || fail=1
done
# Bir haber sayfası. Slug sabit yazılmıyor: haberler birleştirilebilir
# veya kaldırılabilir ve sabit bir slug, içerik değiştiği gün
# dağıtımı bozardı. En yeni haberin adresi RSS'ten okunuyor.
article="$(curl --silent https://haber.sametbasbug.dev/rss.xml \
| sed -n 's|.*<link>\(https://haber\.sametbasbug\.dev/[^<]*/\)</link>.*|\1|p' \
| head -1)"
if [[ -z "$article" ]]; then
echo 'RSS içinden bir haber adresi çıkarılamadı.' >&2
fail=1
else
code="$(curl --silent --output /dev/null --write-out '%{http_code}' "$article")"
echo "haber (${article}): ${code}"
[[ "$code" == '200' ]] || fail=1
fi
headers="$(mktemp)"
trap 'rm -f "$headers"' EXIT
curl --silent --output /dev/null --dump-header "$headers" \
https://haber.sametbasbug.dev/
# Cloudflare'den mi geliyor? `cf-ray` yoksa istek Worker'a hiç
# ulaşmamıştır.
grep -qi '^cf-ray:' "$headers" || { echo 'cf-ray yok: istek Cloudflare üzerinden gelmedi.' >&2; fail=1; }
# Pages'e düşme kontrolü. Pages dağıtımı bu commit'te kaldırıldı ama
# alan adı üzerindeki eski iddia bir gün geri gelirse, sessizce eski
# bir kopyayı sunmaya başlar. O durumu hata sayıyoruz.
if grep -qi '^server: GitHub.com' "$headers"; then
echo 'Site beklenmedik biçimde GitHub Pages üzerinden çözüldü.' >&2
fail=1
fi
exit "$fail"