tillerhand 3.28.3 → 3.28.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/hooks/commit-gate.mjs +15 -4
- package/.github/workflows/kit-tests.yml +2 -2
- package/.github/workflows/npm-publish.yml +7 -5
- package/README.en.md +1 -1
- package/README.md +1 -1
- package/kit/CHANGELOG.md +9 -0
- package/kit/VERSION +1 -1
- package/kit/guide.html +1 -1
- package/kit/templates/addons/tr/types/web-saas/.github/workflows/payment-webhook.yml +2 -2
- package/kit/templates/backend/.github/workflows/ci.yml +8 -8
- package/kit/templates/backend/.github/workflows/claude-ci-fix.yml +1 -1
- package/kit/templates/backend/.github/workflows/claude-maintenance.yml +1 -1
- package/kit/templates/backend/.github/workflows/live-monitoring.yml +2 -2
- package/kit/templates/mobile/.github/workflows/ci.yml +10 -10
- package/kit/templates/mobile/.github/workflows/claude-ci-fix.yml +1 -1
- package/kit/templates/mobile/.github/workflows/claude-maintenance.yml +1 -1
- package/kit/templates/web-saas/.github/workflows/ci.yml +12 -12
- package/kit/templates/web-saas/.github/workflows/claude-ci-fix.yml +1 -1
- package/kit/templates/web-saas/.github/workflows/claude-maintenance.yml +1 -1
- package/kit/templates/web-saas/.github/workflows/live-monitoring.yml +2 -2
- package/package.json +1 -1
|
@@ -49,11 +49,22 @@ const escapeRe = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
|
49
49
|
// git aliases that run commit ([alias] ci = commit, cm = !git commit), from git config and from an inline -c alias.x=commit
|
|
50
50
|
export function commitPattern(command) {
|
|
51
51
|
if (!/\bgit/.test(command)) return COMMIT; // this hook runs on every Bash call: git config only when git is named
|
|
52
|
+
// An alias defined in the same command (git -c alias.x=…, git config alias.x …, GIT_CONFIG_* env) cannot be read beforehand:
|
|
53
|
+
// every git subcommand then counts as a commit (inline), and the chain check, which only knows plain commit, stops the command.
|
|
54
|
+
if (/GIT_CONFIG_|\balias\.[\w-]+=|\bconfig\b[^;&|\n]*\balias\./i.test(command)) return Object.assign(commitRe(['\\S+']), { inline: true });
|
|
52
55
|
let config = '';
|
|
53
56
|
try { config = git('config --get-regexp ^alias\\.'); } catch { /* no alias or no repo */ }
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
+
// Aliases are case-insensitive; one whose value names commit anywhere (a !shell alias too) or calls such an alias is a commit
|
|
58
|
+
const aliases = [...config.matchAll(/^alias\.(\S+)\s+(.*)$/gm)].map(([, name, value]) => [name.toLowerCase(), value]);
|
|
59
|
+
const names = new Set();
|
|
60
|
+
for (let grew = true; grew;) {
|
|
61
|
+
grew = false;
|
|
62
|
+
for (const [name, value] of aliases) {
|
|
63
|
+
const words = value.toLowerCase().split(/[^\w.-]+/);
|
|
64
|
+
if (!names.has(name) && (words.includes('commit') || words.some((w) => names.has(w)))) { names.add(name); grew = true; }
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return names.size ? new RegExp(commitRe(['commit', ...[...names].map(escapeRe)]).source, 'i') : COMMIT;
|
|
57
68
|
}
|
|
58
69
|
|
|
59
70
|
// The hook sees the command before it runs: anything that can change files before the commit defeats the review.
|
|
@@ -171,7 +182,7 @@ async function hook() {
|
|
|
171
182
|
}
|
|
172
183
|
if (!commit.test(command) && !commit.test(open)) process.exit(0);
|
|
173
184
|
if (!hasBoard() || reviewOff()) process.exit(0);
|
|
174
|
-
const chain = chainIssue(command, commit);
|
|
185
|
+
const chain = chainIssue(command, commit.inline ? COMMIT : commit);
|
|
175
186
|
if (chain) {
|
|
176
187
|
process.stderr.write(`Commit durduruldu: ${chain}. Kapı komut çalışmadan önceki değişiklikleri denetler; commit'i tek başına ` +
|
|
177
188
|
'(veya yalnızca "git add … && git commit" ile) çalıştır. Push ve diğer komutları ayrı çalıştır.\n');
|
|
@@ -12,8 +12,8 @@ jobs:
|
|
|
12
12
|
# kit.mjs install bu dosyayı projeye taşımaz.
|
|
13
13
|
runs-on: ubuntu-latest
|
|
14
14
|
steps:
|
|
15
|
-
- uses: actions/checkout@
|
|
16
|
-
- uses: actions/setup-node@
|
|
15
|
+
- uses: actions/checkout@v7
|
|
16
|
+
- uses: actions/setup-node@v7
|
|
17
17
|
with:
|
|
18
18
|
node-version: 22
|
|
19
19
|
- name: Testler
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Kitin npm paketini (tillerhand) yayınlar: v* tag'i push edilince. Projelere kopyalanmaz (kit/kit.mjs → KIT_ONLY).
|
|
2
2
|
# Token yok: npm Trusted Publishing (OIDC). npmjs.com → tillerhand → Settings → Trusted Publisher: GitHub Actions,
|
|
3
3
|
# burakdogrul / TillerHand / npm-publish.yml / environment: npm. Kaynak: docs.npmjs.com/trusted-publishers (2026-10-06).
|
|
4
|
-
# Action'lar commit SHA'sına sabit (
|
|
4
|
+
# Action'lar commit SHA'sına sabit (checkout v7.0.1, setup-node v7.1.0); yeni sürüme geçerken SHA'yı github.com/actions/<ad>/releases'tan al.
|
|
5
5
|
name: npm-publish
|
|
6
6
|
|
|
7
7
|
on:
|
|
@@ -16,12 +16,13 @@ jobs:
|
|
|
16
16
|
test:
|
|
17
17
|
runs-on: ubuntu-latest
|
|
18
18
|
steps:
|
|
19
|
-
- uses: actions/checkout@
|
|
19
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
20
20
|
with:
|
|
21
21
|
fetch-depth: 0
|
|
22
|
-
- uses: actions/setup-node@
|
|
22
|
+
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
|
|
23
23
|
with:
|
|
24
24
|
node-version: 24
|
|
25
|
+
package-manager-cache: false # no cache in a release workflow (cache poisoning)
|
|
25
26
|
- name: Tag main'deki bir commit'i mi gösteriyor
|
|
26
27
|
run: git merge-base --is-ancestor "$GITHUB_SHA" origin/main || { echo "Tag main dalında değil, yayın durdu."; exit 1; }
|
|
27
28
|
- name: Sürümler aynı mı (tag, package.json, kit/VERSION)
|
|
@@ -42,10 +43,11 @@ jobs:
|
|
|
42
43
|
contents: read
|
|
43
44
|
id-token: write
|
|
44
45
|
steps:
|
|
45
|
-
- uses: actions/checkout@
|
|
46
|
-
- uses: actions/setup-node@
|
|
46
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
47
|
+
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
|
|
47
48
|
with:
|
|
48
49
|
node-version: 24
|
|
50
|
+
package-manager-cache: false # no cache in a release workflow (cache poisoning)
|
|
49
51
|
registry-url: https://registry.npmjs.org
|
|
50
52
|
- name: npm sürümü (Trusted Publishing 11.5.1+ ister)
|
|
51
53
|
run: node -e "const [a,b,c]=process.argv[1].split('.').map(Number); process.exit(a>11||(a===11&&(b>5||(b===5&&c>=1)))?0:1)" "$(npm --version)"
|
package/README.en.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
</p>
|
|
7
7
|
|
|
8
8
|
<p align="center">
|
|
9
|
-
<a href="kit/CHANGELOG.md"><img alt="Version" src="https://img.shields.io/badge/version-3.28.
|
|
9
|
+
<a href="kit/CHANGELOG.md"><img alt="Version" src="https://img.shields.io/badge/version-3.28.4-2a78d6?style=flat-square"></a>
|
|
10
10
|
<a href="LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/license-MIT-2a78d6?style=flat-square"></a>
|
|
11
11
|
<img alt="Claude Code" src="https://img.shields.io/badge/Claude%20Code-ready-d97757?style=flat-square">
|
|
12
12
|
<img alt="Also Codex and Antigravity" src="https://img.shields.io/badge/also-Codex%20%C2%B7%20Antigravity-5b6577?style=flat-square">
|
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
</p>
|
|
7
7
|
|
|
8
8
|
<p align="center">
|
|
9
|
-
<a href="kit/CHANGELOG.md"><img alt="Sürüm" src="https://img.shields.io/badge/s%C3%BCr%C3%BCm-3.28.
|
|
9
|
+
<a href="kit/CHANGELOG.md"><img alt="Sürüm" src="https://img.shields.io/badge/s%C3%BCr%C3%BCm-3.28.4-2a78d6?style=flat-square"></a>
|
|
10
10
|
<a href="LICENSE"><img alt="Lisans: MIT" src="https://img.shields.io/badge/lisans-MIT-2a78d6?style=flat-square"></a>
|
|
11
11
|
<img alt="Claude Code" src="https://img.shields.io/badge/Claude%20Code-haz%C4%B1r-d97757?style=flat-square">
|
|
12
12
|
<img alt="Codex ve Antigravity" src="https://img.shields.io/badge/ayr%C4%B1ca-Codex%20%C2%B7%20Antigravity-5b6577?style=flat-square">
|
package/kit/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,15 @@
|
|
|
3
3
|
Kit sürümü `kit/VERSION` dosyasında. Bir projeyi güncellemek: projede `/kit-update`.
|
|
4
4
|
"Elle uyarla" notu olan maddeler projeye ait dosyalardadır; güncelleme bunlara dokunmaz.
|
|
5
5
|
|
|
6
|
+
## [3.28.4] - 2026-10-26
|
|
7
|
+
|
|
8
|
+
### Değişen
|
|
9
|
+
- **GitHub Actions sürümleri Node 24'e geçti** (GitHub, Node 20 ile çalışan action'ları zorla Node 24'te çalıştırıyordu ve uyarı veriyordu): `actions/checkout` v7, `actions/setup-node` v7, `gitleaks/gitleaks-action` v3, `astral-sh/setup-uv` v10. Şablonlardaki CI, bakım, canlı izleme ve ödeme webhook iş akışları güncellendi. Kitin npm yayın iş akışı commit SHA'sına sabit kalıyor ve paket önbelleğini kapatıyor (önbellek zehirlenmesine karşı).
|
|
10
|
+
- Elle uyarla: Projedeki iş akışını kendin değiştirdiysen `/kit-update` yeni sürümü `.kit-new` olarak bırakır; sürüm satırlarını oradan al.
|
|
11
|
+
|
|
12
|
+
### Düzeltilen
|
|
13
|
+
- **Commit alias'ı tespiti genişledi:** büyük/küçük harf duyarsız; başka bir alias'ı çağıran ya da değerinde `commit` geçen `!` kabuk alias'ları da commit sayılıyor. Aynı komutta tanımlanan alias (`git -c alias.x=…`, `git config alias.x …`, `GIT_CONFIG_*`) önceden okunamadığı için komut durduruluyor.
|
|
14
|
+
|
|
6
15
|
## [3.28.3] - 2026-10-26
|
|
7
16
|
|
|
8
17
|
### Düzeltilen
|
package/kit/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.28.
|
|
1
|
+
3.28.4
|
package/kit/guide.html
CHANGED
|
@@ -287,7 +287,7 @@ footer .container { display: flex; flex-wrap: wrap; gap: 16px; justify-content:
|
|
|
287
287
|
<section class="hero">
|
|
288
288
|
<div class="container">
|
|
289
289
|
<div>
|
|
290
|
-
<span class="pill"><b>v3.28.
|
|
290
|
+
<span class="pill"><b>v3.28.4</b> Claude Code için başlangıç kiti · MIT</span>
|
|
291
291
|
<h1>Kodu AI yazar.<br><em>Dümen sende.</em></h1>
|
|
292
292
|
<p class="sub">TillerHand, Claude Code ile bir ürünü fikirden canlıya ve bakıma kadar götürür. Her önemli kararda AI sana seçenekleri, önerisini ve her seçeneğin bedelini sunar. Bir uzman kurulu işi denetler, korumalar hatayı daha olmadan durdurur.</p>
|
|
293
293
|
<div class="install"><span id="cmd">npx tillerhand init</span><button class="copy" type="button" data-copy="cmd">Kopyala</button></div>
|
|
@@ -14,8 +14,8 @@ jobs:
|
|
|
14
14
|
test:
|
|
15
15
|
runs-on: ubuntu-latest
|
|
16
16
|
steps:
|
|
17
|
-
- uses: actions/checkout@
|
|
18
|
-
- uses: actions/setup-node@
|
|
17
|
+
- uses: actions/checkout@v7
|
|
18
|
+
- uses: actions/setup-node@v7
|
|
19
19
|
with:
|
|
20
20
|
node-version: 22
|
|
21
21
|
# Node 22.18+ .ts modülünü doğrudan çalıştırır; bağımlılık kurulumu gerekmez
|
|
@@ -27,8 +27,8 @@ jobs:
|
|
|
27
27
|
ENV: test
|
|
28
28
|
DATABASE_URL: postgresql+psycopg://app:app@localhost:5432/app_test
|
|
29
29
|
steps:
|
|
30
|
-
- uses: actions/checkout@
|
|
31
|
-
- uses: astral-sh/setup-uv@
|
|
30
|
+
- uses: actions/checkout@v7
|
|
31
|
+
- uses: astral-sh/setup-uv@v10
|
|
32
32
|
- run: uv sync --locked
|
|
33
33
|
- run: uv run ruff check .
|
|
34
34
|
- run: uv run ruff format --check .
|
|
@@ -43,14 +43,14 @@ jobs:
|
|
|
43
43
|
structure:
|
|
44
44
|
runs-on: ubuntu-latest
|
|
45
45
|
steps:
|
|
46
|
-
- uses: actions/checkout@
|
|
46
|
+
- uses: actions/checkout@v7
|
|
47
47
|
- name: Klasör yapısı (.claude/structure.json)
|
|
48
48
|
run: node .claude/hooks/structure-guard.mjs --check
|
|
49
49
|
|
|
50
50
|
karmasiklik:
|
|
51
51
|
runs-on: ubuntu-latest
|
|
52
52
|
steps:
|
|
53
|
-
- uses: actions/checkout@
|
|
53
|
+
- uses: actions/checkout@v7
|
|
54
54
|
with:
|
|
55
55
|
fetch-depth: 0 # base commit'iyle karşılaştırmak için
|
|
56
56
|
- name: Karmaşıklık bütçesi (değişen dosyalar; fonksiyon karmaşıklığı 15, fonksiyon 80, dosya 400 satır)
|
|
@@ -63,14 +63,14 @@ jobs:
|
|
|
63
63
|
container:
|
|
64
64
|
image: semgrep/semgrep
|
|
65
65
|
steps:
|
|
66
|
-
- uses: actions/checkout@
|
|
66
|
+
- uses: actions/checkout@v7
|
|
67
67
|
- name: Statik güvenlik analizi (yüksek önemli bulgular CI'ı durdurur)
|
|
68
68
|
run: semgrep scan --config p/default --config p/owasp-top-ten --severity ERROR --error
|
|
69
69
|
|
|
70
70
|
kopya-kod:
|
|
71
71
|
runs-on: ubuntu-latest
|
|
72
72
|
steps:
|
|
73
|
-
- uses: actions/checkout@
|
|
73
|
+
- uses: actions/checkout@v7
|
|
74
74
|
- name: Kopya kod oranı (eşik %5)
|
|
75
75
|
run: npx --yes jscpd@4 --threshold 5 --silent --ignore "**/node_modules/**,**/.next/**,**/dist/**,**/build/**,**/.venv/**,**/coverage/**,**/.expo/**" .
|
|
76
76
|
|
|
@@ -81,11 +81,11 @@ jobs:
|
|
|
81
81
|
contents: read
|
|
82
82
|
pull-requests: read
|
|
83
83
|
steps:
|
|
84
|
-
- uses: actions/checkout@
|
|
84
|
+
- uses: actions/checkout@v7
|
|
85
85
|
with:
|
|
86
86
|
fetch-depth: 0 # tüm geçmiş taranır
|
|
87
87
|
# Kişisel hesapta ücretsiz; organizasyon deposunda GITLEAKS_LICENSE sırrı gerekir
|
|
88
|
-
- uses: gitleaks/gitleaks-action@
|
|
88
|
+
- uses: gitleaks/gitleaks-action@v3
|
|
89
89
|
env:
|
|
90
90
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
91
91
|
# Token salt okunur: PR yorumu kapalı, sızıntı işi kırmızı yapar
|
|
@@ -23,7 +23,7 @@ jobs:
|
|
|
23
23
|
runs-on: ubuntu-latest
|
|
24
24
|
timeout-minutes: 10
|
|
25
25
|
steps:
|
|
26
|
-
- uses: actions/checkout@
|
|
26
|
+
- uses: actions/checkout@v7
|
|
27
27
|
- name: Sağlık ve yanıt süresi
|
|
28
28
|
run: |
|
|
29
29
|
t=$(curl -fsS -o /dev/null --max-time 10 -w '%{time_total}' "${{ vars.LIVE_URL }}/health")
|
|
@@ -31,7 +31,7 @@ jobs:
|
|
|
31
31
|
awk -v t="$t" -v max="$MAX" 'BEGIN { exit (t > max) }'
|
|
32
32
|
env:
|
|
33
33
|
MAX: ${{ vars.LIVE_MAX_SECONDS || '2' }}
|
|
34
|
-
- uses: astral-sh/setup-uv@
|
|
34
|
+
- uses: astral-sh/setup-uv@v10
|
|
35
35
|
if: hashFiles('tests/live/**') != ''
|
|
36
36
|
- name: Kritik uçlar (canlı)
|
|
37
37
|
if: hashFiles('tests/live/**') != ''
|
|
@@ -14,8 +14,8 @@ jobs:
|
|
|
14
14
|
kontrol:
|
|
15
15
|
runs-on: ubuntu-latest
|
|
16
16
|
steps:
|
|
17
|
-
- uses: actions/checkout@
|
|
18
|
-
- uses: actions/setup-node@
|
|
17
|
+
- uses: actions/checkout@v7
|
|
18
|
+
- uses: actions/setup-node@v7
|
|
19
19
|
with:
|
|
20
20
|
node-version: 22
|
|
21
21
|
cache: npm
|
|
@@ -31,14 +31,14 @@ jobs:
|
|
|
31
31
|
structure:
|
|
32
32
|
runs-on: ubuntu-latest
|
|
33
33
|
steps:
|
|
34
|
-
- uses: actions/checkout@
|
|
34
|
+
- uses: actions/checkout@v7
|
|
35
35
|
- name: Klasör yapısı (.claude/structure.json)
|
|
36
36
|
run: node .claude/hooks/structure-guard.mjs --check
|
|
37
37
|
|
|
38
38
|
karmasiklik:
|
|
39
39
|
runs-on: ubuntu-latest
|
|
40
40
|
steps:
|
|
41
|
-
- uses: actions/checkout@
|
|
41
|
+
- uses: actions/checkout@v7
|
|
42
42
|
with:
|
|
43
43
|
fetch-depth: 0 # base commit'iyle karşılaştırmak için
|
|
44
44
|
- name: Karmaşıklık bütçesi (değişen dosyalar; fonksiyon karmaşıklığı 15, fonksiyon 80, dosya 400 satır)
|
|
@@ -51,8 +51,8 @@ jobs:
|
|
|
51
51
|
rls:
|
|
52
52
|
runs-on: ubuntu-latest
|
|
53
53
|
steps:
|
|
54
|
-
- uses: actions/checkout@
|
|
55
|
-
- uses: actions/setup-node@
|
|
54
|
+
- uses: actions/checkout@v7
|
|
55
|
+
- uses: actions/setup-node@v7
|
|
56
56
|
if: hashFiles('supabase/config.toml') != ''
|
|
57
57
|
with:
|
|
58
58
|
node-version: 22
|
|
@@ -75,14 +75,14 @@ jobs:
|
|
|
75
75
|
container:
|
|
76
76
|
image: semgrep/semgrep
|
|
77
77
|
steps:
|
|
78
|
-
- uses: actions/checkout@
|
|
78
|
+
- uses: actions/checkout@v7
|
|
79
79
|
- name: Statik güvenlik analizi (yüksek önemli bulgular CI'ı durdurur)
|
|
80
80
|
run: semgrep scan --config p/default --config p/owasp-top-ten --severity ERROR --error
|
|
81
81
|
|
|
82
82
|
kopya-kod:
|
|
83
83
|
runs-on: ubuntu-latest
|
|
84
84
|
steps:
|
|
85
|
-
- uses: actions/checkout@
|
|
85
|
+
- uses: actions/checkout@v7
|
|
86
86
|
- name: Kopya kod oranı (eşik %5)
|
|
87
87
|
run: npx --yes jscpd@4 --threshold 5 --silent --ignore "**/node_modules/**,**/.next/**,**/dist/**,**/build/**,**/.venv/**,**/coverage/**,**/.expo/**" .
|
|
88
88
|
|
|
@@ -93,11 +93,11 @@ jobs:
|
|
|
93
93
|
contents: read
|
|
94
94
|
pull-requests: read
|
|
95
95
|
steps:
|
|
96
|
-
- uses: actions/checkout@
|
|
96
|
+
- uses: actions/checkout@v7
|
|
97
97
|
with:
|
|
98
98
|
fetch-depth: 0 # tüm geçmiş taranır
|
|
99
99
|
# Kişisel hesapta ücretsiz; organizasyon deposunda GITLEAKS_LICENSE sırrı gerekir
|
|
100
|
-
- uses: gitleaks/gitleaks-action@
|
|
100
|
+
- uses: gitleaks/gitleaks-action@v3
|
|
101
101
|
env:
|
|
102
102
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
103
103
|
# Token salt okunur: PR yorumu kapalı, sızıntı işi kırmızı yapar
|
|
@@ -15,8 +15,8 @@ jobs:
|
|
|
15
15
|
kontrol:
|
|
16
16
|
runs-on: ubuntu-latest
|
|
17
17
|
steps:
|
|
18
|
-
- uses: actions/checkout@
|
|
19
|
-
- uses: actions/setup-node@
|
|
18
|
+
- uses: actions/checkout@v7
|
|
19
|
+
- uses: actions/setup-node@v7
|
|
20
20
|
with:
|
|
21
21
|
node-version: 22
|
|
22
22
|
cache: npm
|
|
@@ -37,8 +37,8 @@ jobs:
|
|
|
37
37
|
# e2e:
|
|
38
38
|
# runs-on: ubuntu-latest
|
|
39
39
|
# steps:
|
|
40
|
-
# - uses: actions/checkout@
|
|
41
|
-
# - uses: actions/setup-node@
|
|
40
|
+
# - uses: actions/checkout@v7
|
|
41
|
+
# - uses: actions/setup-node@v7
|
|
42
42
|
# with: { node-version: 22, cache: npm }
|
|
43
43
|
# - run: npm ci
|
|
44
44
|
# - run: npx playwright install --with-deps chromium
|
|
@@ -47,14 +47,14 @@ jobs:
|
|
|
47
47
|
structure:
|
|
48
48
|
runs-on: ubuntu-latest
|
|
49
49
|
steps:
|
|
50
|
-
- uses: actions/checkout@
|
|
50
|
+
- uses: actions/checkout@v7
|
|
51
51
|
- name: Klasör yapısı (.claude/structure.json)
|
|
52
52
|
run: node .claude/hooks/structure-guard.mjs --check
|
|
53
53
|
|
|
54
54
|
karmasiklik:
|
|
55
55
|
runs-on: ubuntu-latest
|
|
56
56
|
steps:
|
|
57
|
-
- uses: actions/checkout@
|
|
57
|
+
- uses: actions/checkout@v7
|
|
58
58
|
with:
|
|
59
59
|
fetch-depth: 0 # base commit'iyle karşılaştırmak için
|
|
60
60
|
- name: Karmaşıklık bütçesi (değişen dosyalar; fonksiyon karmaşıklığı 15, fonksiyon 80, dosya 400 satır)
|
|
@@ -67,8 +67,8 @@ jobs:
|
|
|
67
67
|
rls:
|
|
68
68
|
runs-on: ubuntu-latest
|
|
69
69
|
steps:
|
|
70
|
-
- uses: actions/checkout@
|
|
71
|
-
- uses: actions/setup-node@
|
|
70
|
+
- uses: actions/checkout@v7
|
|
71
|
+
- uses: actions/setup-node@v7
|
|
72
72
|
if: hashFiles('supabase/config.toml') != ''
|
|
73
73
|
with:
|
|
74
74
|
node-version: 22
|
|
@@ -91,14 +91,14 @@ jobs:
|
|
|
91
91
|
container:
|
|
92
92
|
image: semgrep/semgrep
|
|
93
93
|
steps:
|
|
94
|
-
- uses: actions/checkout@
|
|
94
|
+
- uses: actions/checkout@v7
|
|
95
95
|
- name: Statik güvenlik analizi (yüksek önemli bulgular CI'ı durdurur)
|
|
96
96
|
run: semgrep scan --config p/default --config p/owasp-top-ten --severity ERROR --error
|
|
97
97
|
|
|
98
98
|
kopya-kod:
|
|
99
99
|
runs-on: ubuntu-latest
|
|
100
100
|
steps:
|
|
101
|
-
- uses: actions/checkout@
|
|
101
|
+
- uses: actions/checkout@v7
|
|
102
102
|
- name: Kopya kod oranı (eşik %5)
|
|
103
103
|
run: npx --yes jscpd@4 --threshold 5 --silent --ignore "**/node_modules/**,**/.next/**,**/dist/**,**/build/**,**/.venv/**,**/coverage/**,**/.expo/**" .
|
|
104
104
|
|
|
@@ -109,11 +109,11 @@ jobs:
|
|
|
109
109
|
contents: read
|
|
110
110
|
pull-requests: read
|
|
111
111
|
steps:
|
|
112
|
-
- uses: actions/checkout@
|
|
112
|
+
- uses: actions/checkout@v7
|
|
113
113
|
with:
|
|
114
114
|
fetch-depth: 0 # tüm geçmiş taranır
|
|
115
115
|
# Kişisel hesapta ücretsiz; organizasyon deposunda GITLEAKS_LICENSE sırrı gerekir
|
|
116
|
-
- uses: gitleaks/gitleaks-action@
|
|
116
|
+
- uses: gitleaks/gitleaks-action@v3
|
|
117
117
|
env:
|
|
118
118
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
119
119
|
# Token salt okunur: PR yorumu kapalı, sızıntı işi kırmızı yapar
|
package/package.json
CHANGED