+
+# Classe de gestion de la version
+class Version
+ # @param dossier la racine du site (par exemple "/var/www/euphorik"
+ def initialize(dossier)
+ @dossier = dossier
+ File.open(@dossier + '/VERSION') {|file|
+ @version = file.readline()
+ }
+ # les fichiers HTML dans lesquels mettre à jour la version
+ @fichiers = ['/pages/about.html']
+ @balise = /(<span.+?class.*?=.*?"version".*?>).*?(<\/span>)/
+ end
+
+ # met à jour la version dans les fichiers @fichiers
+ def maj
+ @fichiers.each{|fichier|
+ fichier = @dossier + fichier
+ lines = IO.readlines(fichier)
+ File.open(fichier, 'w') {|io|
+ lines.each{|l|
+ io.write(l.sub(@balise){|m| $1 + @version + $2})
+ }
+ }
+ }
+ end
+end
+
+# Permet la mise en production et preproduction
+class MiseEnProd
+ # obsolète !
+ @@rep_remote = '/var/www/euphorik'
+ @@host = 'euphorik.ch'
+ @@opt_rsync = ''
+
+ def initialize(prod_uri, preprod_uri)
+ @prod = prod_uri
+ @preprod = preprod_uri
+ end
+
+ # Effectue la mise en production.
+ def miseEnProd
+ end
+
+ # Effectue la mise en préproduction.
+ def miseEnPreProd
+ end
+
+ def creer_remote_rep(rep)
+ begin
+ `ssh #{@@host} "mkdir #{@@rep_remote}/#{rep}"`
+ rescue
+ end
+ end
+
+ def compiler_partie_serveuse
+ Dir.chdir(@@rep_remote + '/modules')
+ puts `make`
+ if $?.exitstatus != 0
+ puts "Echec de compilation de la partie serveuse"
+ exit 1
+ end
+ Dir.chdir('..')
+ end
+
+ def creer_repertoire_bd
+ # création du repertoire BD
+ creer_remote_rep('BD')
+ creer_remote_rep('BD/backup')
+ `ssh #{@@host} "chmod g+w #{@@rep_remote}/BD"`
+ end
+
+ # css, images, html, etc..
+ def copier_partie_statique
+ print `rsync #{$opt_rsync} index.yaws #{$host}:#{$rep_remote}`
+ print `rsync #{$opt_rsync} favicon.ico #{$host}:#{$rep_remote}`
+ print `rsync #{$opt_rsync} -r css #{$host}:#{$rep_remote}`
+ print `rsync #{$opt_rsync} -r pages #{$host}:#{$rep_remote}`
+ print `rsync #{$opt_rsync} -r --exclude 'autres' img #{$host}:#{$rep_remote}`
+ end
+
+ # minification et package des fichiers js dans euphorik.js
+ def pack_js
+ # copie des js avec minification
+ rep_js = 'js'
+ creer_remote_rep(rep_js)
+ Dir.entries(rep_js).each{|fichier|
+ if fichier[0..0] != '.' and fichier != 'debug.js'
+ puts "Minimisation et copie de #{fichier}"
+ print `tools/jsmin.rb < #{rep_js}/#{fichier} | ssh #{@@host} "cat > #{@@rep_remote}/#{rep_js}/#{fichier}"`
+ end
+ }
+ end
+
+ def copie_modules_serveurs
+ # copie des modules erlang
+ creer_remote_rep('modules')
+ `rsync #{@@opt_rsync} -r --exclude 'euphorik_test.beam' modules/ebin #{@@host}:#{@@rep_remote}/modules`
+ `rsync #{@@opt_rsync} -r modules/include #{@@host}:#{@@rep_remote}/modules`
+ end
+
+ def set_droits_fichiers
+ # attribution des droits
+ `ssh #{$host} "chmod -R g+rx #{$rep_remote}"`
+ end
+
+ def maj
+ # execution du script de mise à jour
+ print `cat tools/mise_en_prod.erl | ssh #{$host} "cat > /tmp/mise_en_prod.erl"`
+ print `ssh #{$host} "chmod u+x /tmp/mise_en_prod.erl; /tmp/mise_en_prod.erl; rm /tmp/mise_en_prod.erl"`
+ end
+end
+
+
+# Traite la ligne de commande lorsque tools.rb est utilisé comme tel
+class Commande
+ def initialize
+ @miseEnProd = MiseEnProd.new(
+ "gburri@euphorik.ch:/var/www/euphorik",
+ "gburri@euphorik.ch:/var/www/euphorik_preprod"
+ )
+ @verifJS = VerifJS.new("../js")
+ @version = Version.new("..")
+ end
+
+ def traiter
+ if ARGV.size == 0
+ afficherUsage
+ return
+ end
+
+ case ARGV[0]
+ when 'prod'
+ @version.maj()
+ @miseEnProd.miseEnProd()
+ when 'pre'
+ @version.maj()
+ @miseEnProd.miseEnPreProd()
+ when 'js'
+ @verifJS.verifier()
+ when 'version'
+ @version.maj()
+ end
+
+=begin
+ Net::SSH.start('euphorik.ch', 'gburri') {|ssh|
+ output = ssh.exec!("hostname")
+ stdout = ""
+ ssh.exec!("ls -l /tmp"){|channel, stream, data|
+ stdout << data if stream == :stdout
+ }
+ puts stdout
+ }
+=end
+ end
+
+ def afficherUsage
+ puts "Usage : tools.rb (prod | pre | js | version)\n" +
+ " prod : Mise en production\n" +
+ " preprod : Mise en préproduction, copie les données en production\n" +
+ " js : vérification des fichiers JavaScript\n" +
+ " version : met à jour la version à partir du fichier VERSION"
+ end
+end
+
+cl = Commande.new
+cl.traiter()