X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=tools%2Ftools.rb;h=804dac753f710fcdfb48875d04c4aa053b05088c;hp=ec0950e5be67e995a8744b05fbf3b1b1c35a3802;hb=a47964940e7918e81acb7f87fd2f1d5d2ff89778;hpb=7d65ab0a09411a21156bb521c85c77e785670463 diff --git a/tools/tools.rb b/tools/tools.rb index ec0950e..804dac7 100644 --- a/tools/tools.rb +++ b/tools/tools.rb @@ -1,57 +1,71 @@ -#!/usr/bin/ruby -# coding: utf-8 -=begin -Copyright 2008 Grégory Burri - -This file is part of Euphorik. - -Euphorik is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -Euphorik is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with Euphorik. If not, see . -=end - -#TODO : -# - mettre à jour les numéros de versions (créer une classe) -# - création de unit tests (voir eunit) et validation avant la mise en prod -# - faire une classe qui vérifie tous les js avec jslint - -# Classe permettant la vérification du code JS pas jslint. -# Passe en revu chaque fichier js de manière récursive à partir d'un dossier de départ.s -class VerifJS - - def initialize(dossier) - @dossier = dossier - end - - def verifier - verifierRecu(@dossier) - end - - def verifierRecu(dossier) - Dir.foreach(dossier){|fichier| - if fichier != '.' and fichier != '..' and File.directory?(fichier) and fichier != 'dirs' - if not verifierRecu(dossier + '/' + fichier) - return false - end - elsif fichier[-3, 3] == '.js' - puts "== Vérification de #{dossier}/#{fichier} ==" - system("java org.mozilla.javascript.tools.shell.Main jslint.js #{dossier}/#{fichier}") - if $?.exitstatus > 0 - return false - end - end - } - return true - end +#!/usr/bin/ruby +# coding: utf-8 +=begin +Copyright 2008 Grégory Burri + +This file is part of Euphorik. + +Euphorik is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Euphorik is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Euphorik. If not, see . +=end + +# TODO : +# - création de unit tests (voir eunit) et validation avant la mise en prod + +# Met à disposition plusieurs outils (classes), tel que : +# - Vérification du code javascript +# - Mise à jour du numéro de version à partir du fichier VERSION +# - Mise en production et en preproduction +# tools.rb peut s'utiliser à la ligne de commande, exemples : +# * Mise en production : +# ./tools.rb prod gburri@euphorik.ch:/var/www/euphorik +# * Mise en préproduction, l'emplacement de production peut être indiqué pour copier la base +# ./tools.rb pre gburri@euphorik.ch:/var/www/euphorik_preprod gburri@euphorik.ch:/var/www/euphorik + +# voir : http://net-ssh.rubyforge.org/ssh/v2/api/index.html +# require 'net/ssh' + +# Classe permettant la vérification du code JS pas jslint. +# Passe en revu chaque fichier js de manière récursive à partir d'un dossier de départ.s +class VerifJS + + def initialize(dossier) + @dossier = dossier + end + + def verifier + verifierRecur(@dossier) + end + + def verifierRecur(dossier) + Dir.foreach(dossier){|fichier| + if fichier != '.' and fichier != '..' and File.directory?(fichier) and fichier != 'dirs' + if not verifierRecur(dossier + '/' + fichier) + return false + end + elsif fichier[-3, 3] == '.js' + puts "== Vérification de #{dossier}/#{fichier} ==" + # TODO : mettre un if pour la version windows si dessous + #system("java org.mozilla.javascript.tools.shell.Main jslint.js #{dossier}/#{fichier}") + system("rhino jslint.js #{dossier}/#{fichier}") + # puts $?.exitstatus + if $?.exitstatus > 0 + return false + end + end + } + return true + end end # Classe de gestion de la version @@ -79,86 +93,144 @@ class Version } } end -end - - - -class MiseEnProd - @@rep_remote = '/var/www/euphorik' - @@host = 'euphorik.ch' - @@opt_rsync = '' - - def initialize - 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 - - -#verifJS = VerifJS.new("../js") -#verifJS.verifier() +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 -#version = Version.new("..") -#version.maj() +cl = Commande.new +cl.traiter()