fillercut 1.2.4__tar.gz

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.
Files changed (171) hide show
  1. fillercut-1.2.4/.github/workflows/release.yml +270 -0
  2. fillercut-1.2.4/.gitignore +44 -0
  3. fillercut-1.2.4/AGENTS.md +1761 -0
  4. fillercut-1.2.4/CHANGELOG.md +1193 -0
  5. fillercut-1.2.4/CLAUDE.md +1 -0
  6. fillercut-1.2.4/DESIGN.md +173 -0
  7. fillercut-1.2.4/KNOWN_ISSUES.md +1460 -0
  8. fillercut-1.2.4/LICENSE +21 -0
  9. fillercut-1.2.4/PKG-INFO +417 -0
  10. fillercut-1.2.4/README.md +371 -0
  11. fillercut-1.2.4/README.tr.md +368 -0
  12. fillercut-1.2.4/docs/assets/smartscreen.png +0 -0
  13. fillercut-1.2.4/docs/images/ui-isleniyor.png +0 -0
  14. fillercut-1.2.4/docs/images/ui-review.png +0 -0
  15. fillercut-1.2.4/docs/images/ui-tamamlandi.png +0 -0
  16. fillercut-1.2.4/docs/images/ui-video-sec.png +0 -0
  17. fillercut-1.2.4/experiments/amf_usage/README.md +81 -0
  18. fillercut-1.2.4/experiments/amf_usage/izgara.py +409 -0
  19. fillercut-1.2.4/experiments/amf_usage/sonuclar/izgara.md +48 -0
  20. fillercut-1.2.4/experiments/amf_usage/sonuclar/kosular.json +1156 -0
  21. fillercut-1.2.4/experiments/download_spike/README.md +98 -0
  22. fillercut-1.2.4/experiments/download_spike/kaynak_olcum.py +135 -0
  23. fillercut-1.2.4/experiments/expand_silence/README.md +72 -0
  24. fillercut-1.2.4/experiments/expand_silence/faz0.py +441 -0
  25. fillercut-1.2.4/experiments/expand_silence/faz1_ab.py +465 -0
  26. fillercut-1.2.4/experiments/expand_silence/ortak.py +171 -0
  27. fillercut-1.2.4/experiments/expand_silence/sonuclar/faz0.json +1238 -0
  28. fillercut-1.2.4/experiments/expand_silence/sonuclar/faz0.md +88 -0
  29. fillercut-1.2.4/experiments/expand_silence/sonuclar/faz1.json +865 -0
  30. fillercut-1.2.4/experiments/expand_silence/sonuclar/faz1.md +84 -0
  31. fillercut-1.2.4/experiments/filler_leak/README.md +138 -0
  32. fillercut-1.2.4/experiments/filler_leak/asr_runner.py +427 -0
  33. fillercut-1.2.4/experiments/filler_leak/baseline.py +530 -0
  34. fillercut-1.2.4/experiments/filler_leak/faz1_confidence.py +453 -0
  35. fillercut-1.2.4/experiments/filler_leak/faz2_vowel_run.py +572 -0
  36. fillercut-1.2.4/experiments/filler_leak/korpus.py +186 -0
  37. fillercut-1.2.4/experiments/filler_leak/sonuclar/baseline.json +843 -0
  38. fillercut-1.2.4/experiments/filler_leak/sonuclar/baseline.md +105 -0
  39. fillercut-1.2.4/experiments/filler_leak/sonuclar/faz1.json +7751 -0
  40. fillercut-1.2.4/experiments/filler_leak/sonuclar/faz1.md +60 -0
  41. fillercut-1.2.4/experiments/filler_leak/sonuclar/faz2.json +1353 -0
  42. fillercut-1.2.4/experiments/filler_leak/sonuclar/faz2.md +72 -0
  43. fillercut-1.2.4/experiments/paketleme_spike/README.md +100 -0
  44. fillercut-1.2.4/experiments/paketleme_spike/acilis_sure.py +148 -0
  45. fillercut-1.2.4/experiments/paketleme_spike/backend_sure.py +147 -0
  46. fillercut-1.2.4/experiments/paketleme_spike/onedir_onefile.md +66 -0
  47. fillercut-1.2.4/experiments/pywebview_spike/README.md +81 -0
  48. fillercut-1.2.4/experiments/pywebview_spike/delta_olcum.py +85 -0
  49. fillercut-1.2.4/experiments/pywebview_spike/kol.py +92 -0
  50. fillercut-1.2.4/experiments/wcpp_threads/README.md +69 -0
  51. fillercut-1.2.4/experiments/wcpp_threads/olcum.py +250 -0
  52. fillercut-1.2.4/experiments/wcpp_threads/sonuclar/ham_log.txt +89 -0
  53. fillercut-1.2.4/experiments/wcpp_threads/sonuclar/kosular.json +4815 -0
  54. fillercut-1.2.4/packaging/THIRD_PARTY_NOTICES.md +55 -0
  55. fillercut-1.2.4/packaging/entry_cli.py +11 -0
  56. fillercut-1.2.4/packaging/entry_ui.py +31 -0
  57. fillercut-1.2.4/packaging/fillercut.ico +0 -0
  58. fillercut-1.2.4/packaging/fillercut.iss +298 -0
  59. fillercut-1.2.4/packaging/fillercut.spec +157 -0
  60. fillercut-1.2.4/packaging/ikon_uret.py +147 -0
  61. fillercut-1.2.4/packaging/webview2.json +26 -0
  62. fillercut-1.2.4/packaging/webview2_indir.py +136 -0
  63. fillercut-1.2.4/pyproject.toml +114 -0
  64. fillercut-1.2.4/scripts/build_exe.ps1 +134 -0
  65. fillercut-1.2.4/scripts/build_setup.ps1 +125 -0
  66. fillercut-1.2.4/scripts/release_notlari.py +169 -0
  67. fillercut-1.2.4/src/fillercut/__init__.py +22 -0
  68. fillercut-1.2.4/src/fillercut/assets/__init__.py +196 -0
  69. fillercut-1.2.4/src/fillercut/assets/manifest.json +43 -0
  70. fillercut-1.2.4/src/fillercut/audio/__init__.py +1 -0
  71. fillercut-1.2.4/src/fillercut/audio/extractor.py +119 -0
  72. fillercut-1.2.4/src/fillercut/audio/probe.py +98 -0
  73. fillercut-1.2.4/src/fillercut/audio/silence.py +161 -0
  74. fillercut-1.2.4/src/fillercut/cli.py +870 -0
  75. fillercut-1.2.4/src/fillercut/config.py +492 -0
  76. fillercut-1.2.4/src/fillercut/detect/__init__.py +1 -0
  77. fillercut-1.2.4/src/fillercut/detect/fillers.py +149 -0
  78. fillercut-1.2.4/src/fillercut/detect/silence.py +40 -0
  79. fillercut-1.2.4/src/fillercut/export/__init__.py +15 -0
  80. fillercut-1.2.4/src/fillercut/export/fcp7.py +281 -0
  81. fillercut-1.2.4/src/fillercut/export/medya.py +289 -0
  82. fillercut-1.2.4/src/fillercut/export/srt.py +245 -0
  83. fillercut-1.2.4/src/fillercut/gunluk.py +205 -0
  84. fillercut-1.2.4/src/fillercut/kurulum/__init__.py +16 -0
  85. fillercut-1.2.4/src/fillercut/kurulum/indir.py +314 -0
  86. fillercut-1.2.4/src/fillercut/kurulum/yollar.py +235 -0
  87. fillercut-1.2.4/src/fillercut/models.py +141 -0
  88. fillercut-1.2.4/src/fillercut/pipeline.py +719 -0
  89. fillercut-1.2.4/src/fillercut/plan/__init__.py +1 -0
  90. fillercut-1.2.4/src/fillercut/plan/cutplan.py +458 -0
  91. fillercut-1.2.4/src/fillercut/render/__init__.py +1 -0
  92. fillercut-1.2.4/src/fillercut/render/encoder.py +429 -0
  93. fillercut-1.2.4/src/fillercut/render/render.py +220 -0
  94. fillercut-1.2.4/src/fillercut/report/__init__.py +1 -0
  95. fillercut-1.2.4/src/fillercut/report/html_report.py +409 -0
  96. fillercut-1.2.4/src/fillercut/report/json_report.py +379 -0
  97. fillercut-1.2.4/src/fillercut/report/review_server.py +197 -0
  98. fillercut-1.2.4/src/fillercut/surec.py +91 -0
  99. fillercut-1.2.4/src/fillercut/transcribe/__init__.py +1 -0
  100. fillercut-1.2.4/src/fillercut/transcribe/base.py +48 -0
  101. fillercut-1.2.4/src/fillercut/transcribe/fw_backend.py +176 -0
  102. fillercut-1.2.4/src/fillercut/transcribe/reanchor.py +145 -0
  103. fillercut-1.2.4/src/fillercut/transcribe/wcpp_backend.py +290 -0
  104. fillercut-1.2.4/src/fillercut/web/__init__.py +7 -0
  105. fillercut-1.2.4/src/fillercut/web/app.py +252 -0
  106. fillercut-1.2.4/src/fillercut/web/fs.py +535 -0
  107. fillercut-1.2.4/src/fillercut/web/geri_bildirim.py +140 -0
  108. fillercut-1.2.4/src/fillercut/web/jobs.py +730 -0
  109. fillercut-1.2.4/src/fillercut/web/kurulum.py +276 -0
  110. fillercut-1.2.4/src/fillercut/web/native.py +483 -0
  111. fillercut-1.2.4/src/fillercut/web/review.py +629 -0
  112. fillercut-1.2.4/src/fillercut/web/static/app.js +1582 -0
  113. fillercut-1.2.4/src/fillercut/web/static/index.html +294 -0
  114. fillercut-1.2.4/src/fillercut/web/static/style.css +830 -0
  115. fillercut-1.2.4/src/fillercut/web/waveform.py +86 -0
  116. fillercut-1.2.4/tests/__init__.py +0 -0
  117. fillercut-1.2.4/tests/conftest.py +6 -0
  118. fillercut-1.2.4/tests/data/korpus_gt.json +53 -0
  119. fillercut-1.2.4/tests/data/transcript_sample.json +24 -0
  120. fillercut-1.2.4/tests/data/wcpp_output_sample.json +60 -0
  121. fillercut-1.2.4/tests/data/wcpp_reference_tr.json +155 -0
  122. fillercut-1.2.4/tests/make_fixture.py +61 -0
  123. fillercut-1.2.4/tests/test_assets.py +161 -0
  124. fillercut-1.2.4/tests/test_cli.py +797 -0
  125. fillercut-1.2.4/tests/test_cli_setup.py +287 -0
  126. fillercut-1.2.4/tests/test_config.py +638 -0
  127. fillercut-1.2.4/tests/test_cutplan.py +248 -0
  128. fillercut-1.2.4/tests/test_detect_silence.py +49 -0
  129. fillercut-1.2.4/tests/test_encoder.py +606 -0
  130. fillercut-1.2.4/tests/test_export_fcp7.py +329 -0
  131. fillercut-1.2.4/tests/test_export_medya.py +204 -0
  132. fillercut-1.2.4/tests/test_export_srt.py +458 -0
  133. fillercut-1.2.4/tests/test_extractor.py +184 -0
  134. fillercut-1.2.4/tests/test_fillers.py +163 -0
  135. fillercut-1.2.4/tests/test_gunluk.py +306 -0
  136. fillercut-1.2.4/tests/test_html_report.py +234 -0
  137. fillercut-1.2.4/tests/test_integration.py +137 -0
  138. fillercut-1.2.4/tests/test_json_report.py +559 -0
  139. fillercut-1.2.4/tests/test_konsol_kodlama.py +255 -0
  140. fillercut-1.2.4/tests/test_korpus_gt.py +129 -0
  141. fillercut-1.2.4/tests/test_kurucu.py +350 -0
  142. fillercut-1.2.4/tests/test_kurulum_indir.py +413 -0
  143. fillercut-1.2.4/tests/test_kurulum_yollar.py +191 -0
  144. fillercut-1.2.4/tests/test_models.py +148 -0
  145. fillercut-1.2.4/tests/test_paketleme.py +323 -0
  146. fillercut-1.2.4/tests/test_paketleme_pypi.py +90 -0
  147. fillercut-1.2.4/tests/test_pipeline.py +1336 -0
  148. fillercut-1.2.4/tests/test_probe.py +180 -0
  149. fillercut-1.2.4/tests/test_reanchor.py +254 -0
  150. fillercut-1.2.4/tests/test_release.py +235 -0
  151. fillercut-1.2.4/tests/test_render.py +422 -0
  152. fillercut-1.2.4/tests/test_review_edits.py +276 -0
  153. fillercut-1.2.4/tests/test_review_server.py +140 -0
  154. fillercut-1.2.4/tests/test_silence.py +223 -0
  155. fillercut-1.2.4/tests/test_surec.py +215 -0
  156. fillercut-1.2.4/tests/test_transcribe.py +295 -0
  157. fillercut-1.2.4/tests/test_ui_yasam_dongusu.py +402 -0
  158. fillercut-1.2.4/tests/test_version.py +50 -0
  159. fillercut-1.2.4/tests/test_wcpp.py +745 -0
  160. fillercut-1.2.4/tests/test_web_app.py +275 -0
  161. fillercut-1.2.4/tests/test_web_fs.py +192 -0
  162. fillercut-1.2.4/tests/test_web_geri_bildirim.py +194 -0
  163. fillercut-1.2.4/tests/test_web_hapis.py +264 -0
  164. fillercut-1.2.4/tests/test_web_istatistik.py +313 -0
  165. fillercut-1.2.4/tests/test_web_jobs.py +504 -0
  166. fillercut-1.2.4/tests/test_web_kurulum.py +338 -0
  167. fillercut-1.2.4/tests/test_web_media.py +241 -0
  168. fillercut-1.2.4/tests/test_web_native.py +495 -0
  169. fillercut-1.2.4/tests/test_web_review.py +857 -0
  170. fillercut-1.2.4/tests/test_web_secim.py +221 -0
  171. fillercut-1.2.4/tests/test_web_yildiz.py +211 -0
@@ -0,0 +1,270 @@
1
+ name: Release (Windows)
2
+
3
+ # v1.2 Faz 5 — dağıtım epic'inin kapanışı.
4
+ #
5
+ # Bu workflow `vulkan-build.yml`in YERİNE geçti (o dosya silindi). Sebep bir
6
+ # kronik yara: eski akışta tag push'unda Release'i ELLE açmak gerekiyordu;
7
+ # açılmazsa workflow Release'i whisper.cpp notlarıyla kendisi açıyor ve
8
+ # uygulamanın başlığını/notlarını eziyordu. Artık Release'i workflow açıyor
9
+ # ve notlar TEK KAYNAKTAN — CHANGELOG.md'den — üretiliyor. Manuel adım YOK.
10
+ #
11
+ # İki workflow aynı tag'e koşarsa Release için YARIŞIRLAR; bu yüzden tek
12
+ # dosya ve tek job. Job bölmemenin ikinci sebebi: artefakt round-trip'i
13
+ # (upload/download-artifact) tamamen gereksizleşiyor, iki çıktı da aynı
14
+ # çalışma dizininde duruyor.
15
+ #
16
+ # Action sürümleri her action'ın KENDİ `action.yml`'sindeki `runs.using`
17
+ # alanından doğrulandı (hepsi node24, 2026-09-02):
18
+ # actions/checkout@v7 · actions/setup-python@v7 · actions/upload-artifact@v7
19
+ # Kayan pin (@main/@master) YOK — kilidi tests/test_release.py'de.
20
+
21
+ on:
22
+ workflow_dispatch:
23
+ inputs:
24
+ whispercpp_ref:
25
+ description: "whisper.cpp tag/ref (sabit: v1.9.1; bilinçli değiştirilmedikçe dokunma)"
26
+ required: true
27
+ default: "v1.9.1"
28
+ push:
29
+ tags:
30
+ - "v*" # v1.2.0 / v1.2.0-rc.1 → build + Release
31
+
32
+ # Release açmak ve asset yüklemek için (gh release create/upload).
33
+ # Manuel dispatch'te release adımı koşmaz; izin zararsız.
34
+ permissions:
35
+ contents: write
36
+
37
+ env:
38
+ PACKAGE_NAME: fillercut-whisper-cli-vulkan-win-x64
39
+ # Runner en-US'tur: boruya yazan Python'un yerel kodlaması cp1252 olur ve
40
+ # Türkçe mesajlar UnicodeEncodeError verir (v1.2.0-rc.1 koşusu, adım 12 —
41
+ # indirme BAŞARILIYDI, çöküş başarı mesajındaydı). UTF-8 modu bunu uçtan
42
+ # uca kapatır; script'lerin kendi savunma satırı ikinci katmandır.
43
+ PYTHONUTF8: "1"
44
+ WHISPERCPP_REF: ${{ inputs.whispercpp_ref || 'v1.9.1' }}
45
+ # Inno Setup derleyicisi runner'a KURULUR ve hash'i doğrulanır — WebView2
46
+ # bootstrapper'ıyla aynı desen (packaging/webview2.json). Sürüm PIN'li:
47
+ # aynı .iss farklı ISCC sürümünde farklı kurucu üretebilir.
48
+ INNO_URL: "https://github.com/jrsoftware/issrc/releases/download/is-6_7_3/innosetup-6.7.3.exe"
49
+ INNO_SHA256: "9c73c3bae7ed48d44112a0f48e66742c00090bdb5bef71d9d3c056c66e97b732"
50
+
51
+ jobs:
52
+ release:
53
+ runs-on: windows-latest
54
+ steps:
55
+ - name: Checkout Filler-Cut
56
+ uses: actions/checkout@v7
57
+
58
+ - name: Checkout whisper.cpp (sabit tag)
59
+ uses: actions/checkout@v7
60
+ with:
61
+ repository: ggml-org/whisper.cpp
62
+ ref: ${{ env.WHISPERCPP_REF }}
63
+ path: whisper.cpp
64
+
65
+ # ─── 1) whisper-cli Vulkan derlemesi ────────────────────────────────
66
+ # whisper.cpp resmi release'lerinde Windows Vulkan paketi YOK (upstream
67
+ # ggml-org/whisper.cpp#3673) — sadece CPU, BLAS, CUDA var. Bu adımlar o
68
+ # boşluğu doldurur: sabit tag'den kaynak derleme, vendor-agnostic Vulkan
69
+ # backend (tek binary ile NVIDIA/AMD/Intel).
70
+ - name: Vulkan SDK kur (LunarG)
71
+ shell: pwsh
72
+ run: |
73
+ winget install --id KhronosGroup.VulkanSDK --silent `
74
+ --accept-source-agreements --accept-package-agreements
75
+ $sdk = Get-ChildItem "C:\VulkanSDK" -Directory |
76
+ Sort-Object Name -Descending | Select-Object -First 1
77
+ if (-not $sdk) { throw "Vulkan SDK kurulamadı (C:\VulkanSDK boş)" }
78
+ echo "VULKAN_SDK=$($sdk.FullName)" >> $env:GITHUB_ENV
79
+ echo "VULKAN_SDK=$($sdk.FullName)"
80
+
81
+ - name: Configure (CMake, Vulkan ON)
82
+ shell: pwsh
83
+ run: |
84
+ # GGML_NATIVE=OFF: dağıtım binary'si runner CPU'suna göre optimize
85
+ # edilmesin, her x64 CPU'da çalışsın (upstream release deseni).
86
+ # BUILD_SHARED_LIBS=ON: ggml DLL'leri ayrı üretilsin (zip'e girecek).
87
+ cmake -S whisper.cpp -B whisper.cpp/build `
88
+ -DGGML_VULKAN=ON `
89
+ -DGGML_NATIVE=OFF `
90
+ -DBUILD_SHARED_LIBS=ON `
91
+ -DCMAKE_BUILD_TYPE=Release
92
+
93
+ - name: Build (whisper-cli)
94
+ shell: pwsh
95
+ run: cmake --build whisper.cpp/build --config Release --target whisper-cli -j
96
+
97
+ - name: Smoke test 1 — binary çalışıyor mu
98
+ shell: pwsh
99
+ run: |
100
+ # Runner'da GPU yok; --version backend init etmeden çıkar (v1.8.7+).
101
+ & whisper.cpp\build\bin\Release\whisper-cli.exe --version
102
+ if ($LASTEXITCODE -ne 0) { throw "whisper-cli --version patladı" }
103
+
104
+ - name: Smoke test 2 — uçtan uca transkripsiyon (CPU fallback)
105
+ shell: pwsh
106
+ run: |
107
+ # tiny.en (~78 MB) + repo içindeki jfk.wav. Runner'da Vulkan sürücüsü
108
+ # yok → ggml CPU backend'e düşer; amaç binary'nin bozuk olmadığını
109
+ # kanıtlamak, hız ölçmek değil (hız ölçümü KNOWN_ISSUES.md KI-1'de).
110
+ curl -L -o ggml-tiny.en.bin `
111
+ https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-tiny.en.bin
112
+ & whisper.cpp\build\bin\Release\whisper-cli.exe `
113
+ -m ggml-tiny.en.bin -f whisper.cpp\samples\jfk.wav -nt
114
+ if ($LASTEXITCODE -ne 0) { throw "smoke transkripsiyon patladı" }
115
+
116
+ - name: Paketle (exe + ggml DLL'leri + LICENSE)
117
+ shell: pwsh
118
+ run: |
119
+ $bin = "whisper.cpp\build\bin\Release"
120
+ $stage = "stage\$env:PACKAGE_NAME"
121
+ New-Item -ItemType Directory -Force $stage | Out-Null
122
+ Copy-Item "$bin\whisper-cli.exe" $stage
123
+ # whisper.dll, ggml.dll, ggml-base.dll, ggml-cpu.dll, ggml-vulkan.dll
124
+ Copy-Item "$bin\*.dll" $stage
125
+ # MIT bile olsa binary dağıtımında lisans metni taşınmalı.
126
+ Copy-Item whisper.cpp\LICENSE $stage
127
+ Get-ChildItem $stage | Format-Table Name, Length
128
+ Compress-Archive -Path "$stage\*" -DestinationPath "$env:PACKAGE_NAME.zip"
129
+
130
+ # ─── 2) Uygulama exe'leri + kurucu ──────────────────────────────────
131
+ - name: Python kur
132
+ uses: actions/setup-python@v7
133
+ with:
134
+ python-version: "3.12"
135
+
136
+ - name: Bağımlılıklar
137
+ shell: pwsh
138
+ run: |
139
+ python -m venv .venv
140
+ .venv\Scripts\python.exe -m pip install --upgrade pip
141
+ # `native` extra'si ZORUNLUDUR (KI-12): pywebview kurulu degilse
142
+ # PyInstaller onu bundle'a koyamaz, exe calisma aninda
143
+ # "pywebview kurulu degil" deyip tarayici fallback'ine duser ve
144
+ # native pencere HIC acilmaz. Spec'teki webview hidden import'lari
145
+ # eksik pakette yalnizca WARNING uretir — build yesil kalir.
146
+ # v1.2.0-v1.2.2 kuruculari tam olarak bu yuzden tarayici aciyordu.
147
+ .venv\Scripts\python.exe -m pip install -e ".[dev,native]"
148
+ # build_exe.ps1 / build_setup.ps1 .venv\Scripts\python.exe bekler.
149
+
150
+ - name: Inno Setup kur (pin'li + hash doğrulamalı)
151
+ shell: pwsh
152
+ run: |
153
+ $ErrorActionPreference = 'Stop'
154
+ $exe = "$env:RUNNER_TEMP\innosetup.exe"
155
+ Invoke-WebRequest -Uri $env:INNO_URL -OutFile $exe
156
+ $hash = (Get-FileHash $exe -Algorithm SHA256).Hash.ToLower()
157
+ if ($hash -ne $env:INNO_SHA256) {
158
+ throw "Inno Setup SHA-256 uyuşmuyor: beklenen $env:INNO_SHA256, gelen $hash"
159
+ }
160
+ # Inno'nun kendi kurucusu da Inno ile üretilmiştir; standart sessiz
161
+ # bayrakları alır. /DIR ile konum sabitlenir ki ISCC yolu tahmin
162
+ # edilmesin — build_setup.ps1 FILLERCUT_ISCC'yi okur.
163
+ $dir = "$env:RUNNER_TEMP\InnoSetup6"
164
+ $kur = Start-Process $exe -PassThru -Wait -ArgumentList `
165
+ "/VERYSILENT","/SUPPRESSMSGBOXES","/NORESTART","/SP-","/DIR=$dir"
166
+ if ($kur.ExitCode -ne 0) { throw "Inno Setup kurulumu başarısız (kod $($kur.ExitCode))" }
167
+ $iscc = Join-Path $dir 'ISCC.exe'
168
+ if (-not (Test-Path $iscc)) { throw "ISCC.exe bulunamadı: $iscc" }
169
+ echo "FILLERCUT_ISCC=$iscc" >> $env:GITHUB_ENV
170
+ # ISCC argümansız çağrılınca kullanımı STDERR'e yazar ve sıfırdan
171
+ # farklı kodla çıkar; `Stop` altında bu terminating hata olurdu
172
+ # (aynı sınıf tuzak PyInstaller'da da yaşandı). Sürüm doğrulaması
173
+ # bu yüzden `Continue` altında yapılır ve kod OKUNMAZ.
174
+ $eskiEAP = $ErrorActionPreference
175
+ $ErrorActionPreference = 'Continue'
176
+ & $iscc 2>&1 | Select-Object -First 2
177
+ $ErrorActionPreference = $eskiEAP
178
+
179
+ - name: Sürümü etiketten türet
180
+ shell: pwsh
181
+ run: |
182
+ # Tag koşusunda sürüm ETİKETTEN gelir (v1.2.0 → 1.2.0,
183
+ # v1.2.0-rc.1 → 1.2.0-rc.1). Dispatch'te tag yok; paket sürümü
184
+ # kullanılır ve release adımı zaten koşmaz.
185
+ $ref = "${{ github.ref }}"
186
+ if ($ref.StartsWith('refs/tags/')) {
187
+ $surum = "${{ github.ref_name }}" -replace '^v',''
188
+ } else {
189
+ $surum = (.venv\Scripts\python.exe -c "from fillercut import __version__; print(__version__)").Trim()
190
+ }
191
+ echo "SURUM=$surum" >> $env:GITHUB_ENV
192
+ echo "Sürüm: $surum"
193
+
194
+ - name: exe + kurucu build
195
+ shell: pwsh
196
+ run: .\scripts\build_setup.ps1 -Surum $env:SURUM
197
+
198
+ # ─── 3) Artefaktlar ─────────────────────────────────────────────────
199
+ # Her koşuda üretilir (dispatch'te manuel doğrulama için) ama 30 günde
200
+ # silinir + indirmek GitHub hesabı ister — kalıcı dağıtım Release'tir.
201
+ - name: Artifact — whisper-cli zip
202
+ uses: actions/upload-artifact@v7
203
+ with:
204
+ name: ${{ env.PACKAGE_NAME }}
205
+ path: ${{ env.PACKAGE_NAME }}.zip
206
+ retention-days: 30
207
+
208
+ - name: Artifact — kurucu
209
+ uses: actions/upload-artifact@v7
210
+ with:
211
+ name: Filler-Cut-Setup
212
+ path: dist_setup/Filler-Cut-Setup-*.exe
213
+ retention-days: 30
214
+
215
+ # ─── 4) Release (yalnız tag push'u) ─────────────────────────────────
216
+ - name: Release oluştur / güncelle
217
+ if: startsWith(github.ref, 'refs/tags/')
218
+ shell: pwsh
219
+ env:
220
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
221
+ ETIKET: ${{ github.ref_name }}
222
+ REPO: ${{ github.repository }}
223
+ run: |
224
+ $ErrorActionPreference = 'Stop'
225
+ $kurucu = (Get-ChildItem dist_setup -Filter 'Filler-Cut-Setup-*.exe' |
226
+ Select-Object -First 1).FullName
227
+ $zip = "$PWD\$env:PACKAGE_NAME.zip"
228
+ foreach ($a in @($kurucu, $zip)) {
229
+ if (-not (Test-Path $a)) { throw "asset yok: $a" }
230
+ }
231
+
232
+ # Notlar ve başlık CHANGELOG'dan — workflow'a elle YAZILMAZ.
233
+ # rc etiketleri taban sürüme çözülür (v1.2.0-rc.1 → [1.2.0]).
234
+ $notlar = "$env:RUNNER_TEMP\notes.md"
235
+ .venv\Scripts\python.exe scripts\release_notlari.py $env:ETIKET --out $notlar
236
+ $baslik = (.venv\Scripts\python.exe scripts\release_notlari.py $env:ETIKET --baslik).Trim()
237
+
238
+ # Ön-sürüm: etikette '-' varsa (v1.2.0-rc.1). "Latest" olmamalı,
239
+ # yoksa kullanıcı indirme sayfasında rc'yi kararlı sürüm sanar.
240
+ $onSurum = $env:ETIKET -match '-'
241
+
242
+ $ErrorActionPreference = 'Continue'
243
+ gh release view $env:ETIKET --repo $env:REPO 2>&1 | Out-Null
244
+ $varMi = ($LASTEXITCODE -eq 0)
245
+ $ErrorActionPreference = 'Stop'
246
+
247
+ if ($varMi) {
248
+ # İDEMPOTENT: Release zaten varsa BAŞLIK ve NOTLAR KORUNUR —
249
+ # yalnız asset'ler güncellenir. Aynı tag'de ikinci koşu (ya da
250
+ # elle düzenlenmiş notlar) ezilmez. Bu, Faz 5'in çözdüğü kronik
251
+ # yaranın tam tersi davranıştır.
252
+ Write-Host "Release var — notlar korunuyor, asset'ler güncelleniyor"
253
+ gh release upload $env:ETIKET $kurucu $zip --repo $env:REPO --clobber
254
+ if ($LASTEXITCODE -ne 0) { throw "asset yükleme başarısız" }
255
+ } else {
256
+ Write-Host "Release yok — CHANGELOG notlarıyla açılıyor"
257
+ # `$args` OTOMATIK degiskendir (Object[]); ustune yazmak calisir
258
+ # ama okuyan yanilir ve splatting'de siniri belirsizlestirir.
259
+ $ghArgs = @(
260
+ $env:ETIKET, $kurucu, $zip,
261
+ '--repo', $env:REPO,
262
+ '--title', $baslik,
263
+ '--notes-file', $notlar,
264
+ '--verify-tag'
265
+ )
266
+ if ($onSurum) { $ghArgs += @('--prerelease', '--latest=false') }
267
+ gh release create @ghArgs
268
+ if ($LASTEXITCODE -ne 0) { throw "release oluşturma başarısız" }
269
+ }
270
+ gh release view $env:ETIKET --repo $env:REPO --json name,isPrerelease,assets
@@ -0,0 +1,44 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ *.egg-info/
4
+ .pytest_cache/
5
+ .mypy_cache/
6
+ .ruff_cache/
7
+ dist/
8
+ build/
9
+ .venv/
10
+ # Üretilen analiz/çıktı dosyaları repo'ya girmez
11
+ *.wav
12
+ *_temiz.mp4
13
+ rapor.json
14
+ # Kişisel not dosyaları
15
+ Venv komutu.txt
16
+ Venv komutu ve test komutları.txt
17
+ deneme.mkv
18
+ *_transkript.json
19
+ *_temiz.json
20
+ *_review.html
21
+
22
+ #diğer dosyalar
23
+ dtw_lv3.json
24
+ dtw_turbo.json
25
+ kiyas_ki1.py
26
+
27
+ # Kişisel config (yerel binary/model yolları) — repo'ya girmez
28
+ filler-cut.toml
29
+
30
+ # Spike ara dosyaları (experiments/filler_leak) — WAV, ham ASR çıktısı, cache
31
+ experiments/filler_leak/_cache/
32
+
33
+ # Faz 3 paketleme spike ara dosyalari (WAV)
34
+ experiments/paketleme_spike/_cache/
35
+
36
+ # PyInstaller ara/cikti dizinleri
37
+ dist_onefile/
38
+ build_onefile/
39
+
40
+ # Inno Setup kurucusu ciktisi
41
+ dist_setup/
42
+
43
+ # PyPI build ciktisi (python -m build --outdir dist_pypi)
44
+ dist_pypi/