Archív

Archív pro

Hudson a PHP

26.02.2009 View Comments

Hudson, extensible continuous integration engine

Hudson je obdoba CruiseControl a Xinc, ale oproti těm má jednu zásadní výhodu a to, že jeho vývoj jede poměrně slušným tempem a programátoři v Javě co znám ho používají. Pokud jsme chtěli mít jeden server, kde běží integrace pro Javu a PHP je podle mě v této době nejlepší sáhnout právě po Hudson.

Instalace

01_dashboard-hudson_1235663237019

Build

  • pro build jsem použil Phing, ale stejně můžete použít Ant
<?xml version="1.0" encoding="UTF-8"?>
<project name="start_page" basedir="." default="main">
<!-- $Id: build.xml 102 2009-02-26 14:39:10Z abtris $ -->
<property name="tmp" value="/tmp" />
<property name="wsname" value="source" />
<property name="package"  value="${phing.project.name}" override="true" />
<property name="builddir" value="${tmp}/build/${phing.project.name}" override="true" />
<property name="srcdir"   value="./src/" override="true" />

<!-- Main Target -->
<target name="main" description="main target">

<!-- Create dirs -->
<mkdir dir="${builddir}/reports"/>
<mkdir dir="${builddir}/reports/coverage"/>

<!-- PHP API Documentation -->
<phpdoc title="API Documentation"
destdir="${builddir}/apidocs"
sourcecode="yes"
defaultpackagename="StartPage"
output="HTML:Smarty:PHP">
<fileset dir=".">
<include name="*/*.php" />
</fileset>
</phpdoc>

<!-- PHP CodeSniffer -->
<exec command="phpcs --standard=ZEND --report=checkstyle ${ws}/${wsname}/src/ > ${builddir}/reports/checkstyle.xml" escape="false" />

<!-- PHPUnit -->
<exec command="phpunit --log-xml ${builddir}/reports/phpunit.xml --log-pmd ${builddir}/reports/phpunit.pmd.xml --coverage-clover ${builddir}/reports/coverage/clover.xml --coverage-html ${builddir}/reports/coverage/ tests/AllTests.php"/>

</target>
</project>

Příklad konfigurace

Project name
StartPage
Source Code Management
Subversion

  • Repository URL: https://localhost/svn/start_page/trunk
  • Local module directory (optional): source
  • Use update: true
Build
Execute shell

  • phing -f $WORKSPACE/source/build.xml -Dws=$WORKSPACE -Dtmp=$WORKSPACE
Post-build action
Publish Javadoc
  • Javadoc directory = build/start_page/apidocs/
  • Retain javadoc for each successful build = false
Publish JUnit test result report
Test report XMLs = build/start_page/reports/phpunit.xml
Publish Checkstyle analysis results
Checkstyle results = build/start_page/reports/checkstyle.xml
Publish PMD analysis results
PMD results = build/start_page/reports/phpunit.pmd.xml
Publish Clover Coverage Report
Clover report directory = build/start_page/reports/coverage/

Screenshots

V galerii jsou obrázky z Hudsona, nepřidal jsem obrázky, které vedou na dokumentaci v html formátu na code coverage report v html. Jsou tam jen výstupy, které zobrazuje Hudson nebo pluginy.

Závěr

Moje řešení není dokonalé, ale funkční a doufám, že to pomůže rozmnožit Hudson i mojo Java komunitu. Pokud Hudson pro PHP někdo použív budu rád, když se podělíte o zkušenosti v komentářích.

Categories: continuous integration Tags:

Git-SVN vs Bzr-SVN

23.02.2009 View Comments

Aktualizace (1.7.2009)
Dnes jsem zkoušel novy git 1.6.0.4 (svn 1.5.4) na práci s SVN repozitory. Konečně práce s repozitory funguje bez problémů a když provádím clone netrvá to 25min, ale pár vteřin jako u bzr. Asi to byla nějaká chyba, kterou vývojáři opravili.

Nedávno se tu vedla debata o tom jak nejlépe pracovat s Subversion když jsme offline. Nejlepší řešení je přejít na distribuovaný verzovací systém. Bavíme se o řešení na straně klienta, server bude stále Subversion.

Vytvořil jsem tento skript pomocí kterého si můžu udělat kolik chci revizi do repozitáře, je to primitivní ale pro základní testování to stačilo. Vytvořil jsem repozitory, které má 150 commitů a chci s ním pracovat pomocí git-svn nebo bzr-svn.

#!/bin/bash
# Settings
START=2
COUNT=50
WC=/home/prskavecl/websites/svn_tests/test2/test2

cd $WC
touch $WC/trunk/testfile
svn add $WC/trunk/testfile
# cyklus pro vytvoreni revizi
x=$START;     # inicializuje hodnotu x na 0
while [ "$x" -le $COUNT ]; do
  echo "Aktuální hodnota x: $x"
  # zvýšení hodnoty x o 1
  echo $x >>$WC/trunk/testfile
  x=$(expr $x + 1)
  svn commit --message "Insert value $x"
done
svn up

Testování jsem prováděl na Dellu D830 (2,4 GHz,Intel Core 2 Duo, 2GB RAM) v Ubuntu 8.10.

Verze použitých programů:

  • git 1.5.6.3,
  • svn 1.5.1,
  • bzr 1.6.1 (bzr-svn 0.4.13-2)

Postup testování, šlo mi hlavně porovnat rychlost práce. Proto provedu tyto operace.

  1. checkout
  2. odpojení od centrálního repozitory
  3. změnu v souboru
  4. lokální commit
  5. napojení na centrální repozitory
  6. přenesení změn do centrálního repozitory

bzr-svn

  1. bzr checkout file:///home/svn/repos/test
  2. bzr unbind
  3. nano /trunk/testfile
  4. bzr commit
  5. bzr bind
  6. bzr push file:///home/svn/repos/test

Tento postup lze zkrátit pomocí bzr commit --local potom nemusíme použít bind a unbind.

Celá operace trvala vteřiny, ani jsem nepoznal, že pracuji s jiným SCM než je SVN.

git-svn

  1. git svn clone file:///home/prskavecl/repos/test
  2. není třeba, ale checkout stále jede…po uplynutí 52 min jsem to málem vzdal
  3. nano /trunk/testfile
  4. git commit -a (5s)
  5. není třeba
  6. git svn dcommit (25s)

Více o git a subversion najdete v článku Dana Horáka.

Závěr

Vím, že spousta lidí fandí gitu, ale mě vůbec zatím nepřesvědčil, zatím u mne vede Bazzar. Možná je to problém jen git-svn a ne samotného gitu, ale tento druh spolupráce je hrozně pomalý.

Categories: bazaar, git Tags:

Subversion a spojení dvou repozitory

18.02.2009 View Comments

Pokud se vám někdy stane, že pracujete na projektu a máte vzdálený SVN server dejme tomu např. s 500 revizemi.

Teď ale jedete někam pryč kde nemáte připojení k internetu nebo má server výpadek. Pracovat na projektu musíte, tak např. pomocí TSVN uděláte lokální repozitory a importujete working copy a pracujete dál, uděláte 50 revizí a server zase začne fungovat.

Co teď? Máte podle mne tyto možnosti.

  1. Můžete vzít zase svoji WC a tu naimportovat do původního repozitory
  2. Nebo zahodit staré SVN a udělat dump nového a to naimportovat místo starého.
  3. Nebo mít na serveru obě repozitory.
  4. Spojení obou repozitory

SVN Merge

Já jsem pro spojení obou repozitory, to se dá udělat také různě. Napadají mě dvě možnosti jak to provést.

  1. Vygenerovat diff patche pro jednotlivé revize v nové repozitory a ty aplikovat postupně na WC ze původního repozitory.
  2. Udělat dump repozitory pomocí svnadmin dump a potom použít příkaz svnadmin load  s nastavením --parent-dir a import provést do jiné branche.
  3. Udělat dump pomocí svnadmin dump s parametrem --incremental a se stejným parametrem jej i importovat. Tento postup uvádějí v manuálu, ale nemám ho zatím odzkoušený.
  4. můžete také použít svndumptool a udělat merge na úrovni dump souborů, to mi přijde nejlepší řešení pokud požadujete jednu větev vývoje.

Pokud máte nějaké jiné zkušenosti se spojováním repozitory doufám, že to uvedete v komentářích. Ozvěte se také pokud by byl zájem, můžu uvést nějaký příklad s tím jak se to dělá pomocí příkazového řádku, krok za krokem.

Categories: scm, subversion Tags:

Subversion a directive SVNIndexXSLT

09.02.2009 View Comments

Pokud jste si někdz hráli s nastavením SVN pod Apachem tak jste narazili na directivu SVNIndexXSLT. Pokud se vám nelíbí obvyklý styl jak to zobrazuje SVN. Pokud použijete XSL ze stránek Subversion tools bude výsledek jako je obrázku. Je to lepší ale žádný zázrak.

svn-default-xsl

Pokud chcete aby výsledek byl lepší a nepoužijete ViewVC, kde styly ujdou až tak od verze 1.1 a ještě by je to chtělo taky vylepšit tak doporučuji navštívit ReposStyle, kde autor vytvořil pěkný styl, který se dá hned použít.
svn-reposstyle

Není problém si vytvořit vlastní styl a nebo případně upravit ten co vám vyhovuje. Doporučuji se podívat na https://labs.repos.se/data/style/trunk/ kde je vidět ReposStyle v akci.

Categories: subversion Tags:

Úplná lokalizace WP Theme iNove 1.2.3

03.02.2009 View Comments

Pokud se někomu líbí vzhled, který používám a stáhl jsi ho od autora, zjistil, že není lokalizováno do češtiny všechno co vidí. Protože jsem autor lokalizace tak to musím uvést na pravou míru. Lokalizoval jsem co je v překladovém souboru, ale autor nehodlá jak mi sdělil některé věci lokalizovat, nepřijde mu to důležité. Opravdu nechápu proč, ale je to jeho právo, týká se to hlavně textů v postraní lište.

Pokud to chcete upravit otevřete si soubor sidebar.php a najděte tyto řádky a udělejte tyto změny (originál zaměňte za počeštěnou verzi):

65: $posts_widget_title = 'Recent Posts';
65: $posts_widget_title = 'Poslední příspěvky';

67: $posts_widget_title = 'Random Posts';
67: $posts_widget_title = 'Náhodné příspěvky';

92:<h3>Recent Comments</h3>
92:<h3>Poslední komentáře</h3>

102:<h3>Tag Cloud</h3>
102:<h3>Oblak štítků</h3>

119:<h3>Categories</h3>
119:<h3>Kategorie</h3>

135:<h3>Archives</h3>
135:<h3>Archív</h3>

153:<h3>Meta</h3>
153:<h3>Meta</h3>

Pro ty co umějí aplikovat patch je tu diff ze SVN: sidebar.diff

Ve verzi iNove 1.2.3. je drobný bug (comments.php), díky kterému se nepřeloží některé věci pokud jste přihlášení, opraveno to bude v další verzi.

Nenechte se zmást, že moje verze nevypadá jako vaše po instalaci, udělal jsem další drobné úpravy velikosti písma, změny barvy nadpisů, přidal jsem další položky do sidebar.php.

Categories: wordpress Tags:

Switch to our mobile site