30
MUHAFIZ GIT HOOK'LARI İLE KOD KALİTESİNİ KORUMAK VE OSMAN YÜKSEL NİSAN'13 - Özgür YAZILIM VE LİNUX günlerİ

Muhafiz

Embed Size (px)

DESCRIPTION

Özgür Yazılım ve Linux Günleri 2013'deki sunum

Citation preview

Page 1: Muhafiz

MUHAFIZ

GIT HOOK'LARI İLE KOD KALİTESİNİ KORUMAKVE

OSMAN YÜKSEL

NİSAN'13 - Özgür YAZILIM VE LİNUX günlerİ

Page 2: Muhafiz

NASIL KURULUR?NASIL KURULUR?

RUNNER'LARRUNNER'LAR

Neden?Neden?

GIT HOOK'LARIGIT HOOK'LARI

MUHAFIZMUHAFIZ

““YAZARIM LAN BEN BUNU!”YAZARIM LAN BEN BUNU!”

AÇIK KAYNAK VE TOPLULUĞUN GÜCÜAÇIK KAYNAK VE TOPLULUĞUN GÜCÜ

AlternatİF YÖNTEMLERAlternatİF YÖNTEMLER

SORULARSORULAR

Page 3: Muhafiz

NEDEN?

Daha önce çalıştığımız çoğu yerde kod standartları belirlendiDaha önce çalıştığımız çoğu yerde kod standartları belirlendi

Page 4: Muhafiz

NEDEN?

Daha önce çalıştığımız çoğu yerde kod standartları belirlendiDaha önce çalıştığımız çoğu yerde kod standartları belirlendi

Ama hiçbir yerde uygulanmadıAma hiçbir yerde uygulanmadı

Page 5: Muhafiz

NEDEN?

Daha önce çalıştığımız çoğu yerde kod standartları belirlendiDaha önce çalıştığımız çoğu yerde kod standartları belirlendi

Ama hiçbir yerde uygulanmadıAma hiçbir yerde uygulanmadı

Production ortamında syntax errorProduction ortamında syntax errorvar_dump($badwords);var_dump($badwords);

console.log yüzünden “patlayan” ödeme sayfasıconsole.log yüzünden “patlayan” ödeme sayfasıVirgül yüzünden parse edilemeyen JSONVirgül yüzünden parse edilemeyen JSON

Page 6: Muhafiz

NEDEN?

Daha önce çalıştığımız çoğu yerde kod standartları belirlendiDaha önce çalıştığımız çoğu yerde kod standartları belirlendi

Ama hiçbir yerde uygulanmadıAma hiçbir yerde uygulanmadı

Production ortamında syntax errorProduction ortamında syntax errorvar_dump($badwords);var_dump($badwords);

console.log yüzünden “patlayan” ödeme sayfasıconsole.log yüzünden “patlayan” ödeme sayfasıVirgül yüzünden parse edilemeyen JSONVirgül yüzünden parse edilemeyen JSON

““Bunlar Sonsuzdöngü'de olmayacak”Bunlar Sonsuzdöngü'de olmayacak”

Page 7: Muhafiz

NEDEN?

Daha önce çalıştığımız çoğu yerde kod standartları belirlendiDaha önce çalıştığımız çoğu yerde kod standartları belirlendi

Ama hiçbir yerde uygulanmadıAma hiçbir yerde uygulanmadı

Production ortamında syntax errorProduction ortamında syntax errorvar_dump($badwords);var_dump($badwords);

console.log yüzünden “patlayan” ödeme sayfasıconsole.log yüzünden “patlayan” ödeme sayfasıVirgül yüzünden parse edilemeyen JSONVirgül yüzünden parse edilemeyen JSON

““Bunlar Sonsuzdöngü'de olmayacak”Bunlar Sonsuzdöngü'de olmayacak”

Ama bunun için code review'da süre harcamamalı!Ama bunun için code review'da süre harcamamalı!

Page 8: Muhafiz

GİT HOOK'LARI

Git, çoğu işlemin öncesinde ve sonrasında Git, çoğu işlemin öncesinde ve sonrasında “araya işlem sokmanıza” izin veriyor“araya işlem sokmanıza” izin veriyor

pre-commitpre-commitpre-receivepre-receivepost-updatepost-updatepre-apply-patchpre-apply-patch........

Page 9: Muhafiz

ALTERNATİF YÖNTEMLER ARAŞTIRDIK

https://github.com/jish/pre-commit'ihttps://github.com/jish/pre-commit'i bulduk bulduk

Page 10: Muhafiz

ALTERNATİF YÖNTEMLER ARAŞTIRDIK

https://github.com/jish/pre-commit'ihttps://github.com/jish/pre-commit'i bulduk bulduk

İlk başta her şey çok güzel gidiyordu :)İlk başta her şey çok güzel gidiyordu :)

Page 11: Muhafiz

ALTERNATİF YÖNTEMLER ARAŞTIRDIK

https://github.com/jish/pre-commit'ihttps://github.com/jish/pre-commit'i bulduk bulduk

İlk başta her şey çok güzel gidiyordu :)İlk başta her şey çok güzel gidiyordu :)

Ama bazı sorunlar vardıAma bazı sorunlar vardı

Page 12: Muhafiz

ALTERNATİF YÖNTEMLER ARAŞTIRDIK

https://github.com/jish/pre-commit'ihttps://github.com/jish/pre-commit'i bulduk bulduk

İlk başta her şey çok güzel gidiyordu :)İlk başta her şey çok güzel gidiyordu :)

Ama bazı sorunlar vardıAma bazı sorunlar vardı

Çalışmıyordu :(Çalışmıyordu :(

Page 13: Muhafiz

ALTERNATİF YÖNTEMLER ARAŞTIRDIK

https://github.com/jish/pre-commit'ihttps://github.com/jish/pre-commit'i bulduk bulduk

İlk başta her şey çok güzel gidiyordu :)İlk başta her şey çok güzel gidiyordu :)

Ama bazı sorunlar vardıAma bazı sorunlar vardı

Çalışmıyordu :(Çalışmıyordu :(

Page 14: Muhafiz

ALTERNATİF YÖNTEMLER ARAŞTIRDIK

https://github.com/jish/pre-commit'ihttps://github.com/jish/pre-commit'i bulduk bulduk

İlk başta her şey çok güzel gidiyordu :)İlk başta her şey çok güzel gidiyordu :)

Ama bazı sorunlar vardıAma bazı sorunlar vardı

Çalışmıyordu :(Çalışmıyordu :(Ruby ile geliştirilmişti, biz çok Ruby bilmiyordukRuby ile geliştirilmişti, biz çok Ruby bilmiyordukGenelde Ruby ile geliştirilen projeler için “Runner”lar vardıGenelde Ruby ile geliştirilen projeler için “Runner”lar vardıSunucu tarafında çalışmıyordu :(Sunucu tarafında çalışmıyordu :(

Page 15: Muhafiz

“YAZARIM LAN BEN BUNU!”

Bildiğimiz bir dil ile geliştirilmeliydi (PHP?)Bildiğimiz bir dil ile geliştirilmeliydi (PHP?)Sonsuzdöngü'de belirlediğimiz standartları desteklemeliydiSonsuzdöngü'de belirlediğimiz standartları desteklemeliydiSunucu tarafında da çalışmalıydıSunucu tarafında da çalışmalıydıAçık kaynak olmalıydı!!1Açık kaynak olmalıydı!!1

Page 16: Muhafiz

“YAZARIM LAN BEN BUNU!”

Oturduk yazdık :/Oturduk yazdık :/

Bildiğimiz bir dil ile geliştirilmeliydi (PHP?)Bildiğimiz bir dil ile geliştirilmeliydi (PHP?)Sonsuzdöngü'de belirlediğimiz standartları desteklemeliydiSonsuzdöngü'de belirlediğimiz standartları desteklemeliydiSunucu tarafında da çalışmalıydıSunucu tarafında da çalışmalıydıAçık kaynak olmalıydı!!1Açık kaynak olmalıydı!!1

Page 17: Muhafiz

“YAZARIM LAN BEN BUNU!”

Oturduk yazdık :/Oturduk yazdık :/

Bildiğimiz bir dil ile geliştirilmeliydi (PHP?)Bildiğimiz bir dil ile geliştirilmeliydi (PHP?)Sonsuzdöngü'de belirlediğimiz standartları desteklemeliydiSonsuzdöngü'de belirlediğimiz standartları desteklemeliydiSunucu tarafında da çalışmalıydıSunucu tarafında da çalışmalıydıAçık kaynak olmalıydı!!1Açık kaynak olmalıydı!!1

Page 18: Muhafiz

MUHAFIZ

http://sonsuzdongu.github.com/muhafizhttp://sonsuzdongu.github.com/muhafiz

Page 19: Muhafiz

NASIL KURULUR?

$ git clone git://github.com/sonsuzdongu/muhafiz.git ~/muhafiz$ git clone git://github.com/sonsuzdongu/muhafiz.git ~/muhafiz$ cp ~/muhafiz/git-hooks/* /your/project/.git/hooks$ cp ~/muhafiz/git-hooks/* /your/project/.git/hooks

Page 20: Muhafiz

NASIL KURULUR?

$ git clone git://github.com/sonsuzdongu/muhafiz.git ~/muhafiz$ git clone git://github.com/sonsuzdongu/muhafiz.git ~/muhafiz$ cp ~/muhafiz/git-hooks/* /your/project/.git/hooks$ cp ~/muhafiz/git-hooks/* /your/project/.git/hooks

$ git config muhafiz.bootstrap-file ~/muhafiz/src/bootstrap.php$ git config muhafiz.bootstrap-file ~/muhafiz/src/bootstrap.php

Page 21: Muhafiz

NASIL KURULUR?

$ git clone git://github.com/sonsuzdongu/muhafiz.git ~/muhafiz$ git clone git://github.com/sonsuzdongu/muhafiz.git ~/muhafiz$ cp ~/muhafiz/git-hooks/* /your/project/.git/hooks$ cp ~/muhafiz/git-hooks/* /your/project/.git/hooks

$ git config muhafiz.bootstrap-file ~/muhafiz/src/bootstrap.php$ git config muhafiz.bootstrap-file ~/muhafiz/src/bootstrap.php

$ git config muhafiz.active-runners 'phpcs, jshint, consolefoo'$ git config muhafiz.active-runners 'phpcs, jshint, consolefoo'

Page 22: Muhafiz

RUNNER'LARDosya adında veya içeriğinde işlem yapan PHP sınıflarıDosya adında veya içeriğinde işlem yapan PHP sınıfları

Page 23: Muhafiz

RUNNER'LAR

Page 24: Muhafiz

RUNNER'LARDosya adında veya içeriğinde işlem yapan PHP sınıflarıDosya adında veya içeriğinde işlem yapan PHP sınıfları

bom: ByteOrderMarkbom: ByteOrderMarkconsolefoo: console.log(), console.debug()consolefoo: console.log(), console.debug()forbiddenfile: İzin verilmeyen dosyalar. foo.~ gibiforbiddenfile: İzin verilmeyen dosyalar. foo.~ gibijshint: JavaScript checkjshint: JavaScript checklineend: Unix/Windows Satır sonulineend: Unix/Windows Satır sonuphpcsfixer: php-cs-fixerphpcsfixer: php-cs-fixerphpcs: PHP Code Snifferphpcs: PHP Code Snifferphp: Php Syntax Checkphp: Php Syntax Checkvardump: var_dump(), print_r()vardump: var_dump(), print_r()

Page 25: Muhafiz

RUNNER'LARDosya adında veya içeriğinde işlem yapan PHP sınıflarıDosya adında veya içeriğinde işlem yapan PHP sınıfları

bom: ByteOrderMarkbom: ByteOrderMarkconsolefoo: console.log(), console.debug()consolefoo: console.log(), console.debug()forbiddenfile: İzin verilmeyen dosyalar. foo.~ gibiforbiddenfile: İzin verilmeyen dosyalar. foo.~ gibijshint: JavaScript checkjshint: JavaScript checklineend: Unix/Windows Satır sonulineend: Unix/Windows Satır sonuphpcsfixer: php-cs-fixerphpcsfixer: php-cs-fixerphpcs: PHP Code Snifferphpcs: PHP Code Snifferphp: Php Syntax Checkphp: Php Syntax Checkvardump: var_dump(), print_r()vardump: var_dump(), print_r()

Nasıl çalışıyor bir görelim?Nasıl çalışıyor bir görelim?

Page 26: Muhafiz

AÇIK KAYNAK VE TOPLULUĞUN GÜCÜ

Volkan Altan Yeni Runner'lar

Page 27: Muhafiz

AÇIK KAYNAK VE TOPLULUĞUN GÜCÜ

Volkan Altan Yeni Runner'lar

Sercan VirlanBugfix

Page 28: Muhafiz

AÇIK KAYNAK VE TOPLULUĞUN GÜCÜ

Volkan Altan Yeni Runner'lar

Adil IlhanYeni Runner'lar

Sercan VirlanBugfix

Page 29: Muhafiz

AÇIK KAYNAK VE TOPLULUĞUN GÜCÜ

Volkan Altan Yeni Runner'lar

Sercan VirlanBugfix

Eser ÖzvatafSVN Desteği

Adil IlhanYeni Runner'lar

Page 30: Muhafiz

Sorular ?

Teşekkürler

http://github.com/yuxel

http://twitter.com/yuxel

http://yuxel.net