From: Greg Burri Date: Fri, 3 Apr 2009 11:34:27 +0000 (+0000) Subject: MOD tools.rb tagged as old X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=commitdiff_plain;h=5817e1d48314a933ee497cce7281320dc1a4cc26;hp=4696f876c2a6e33619bf688138262fe9d85540f0 MOD tools.rb tagged as old --- diff --git a/tools/tools.old.rb b/tools/tools.old.rb new file mode 100644 index 0000000..5d9f40b --- /dev/null +++ b/tools/tools.old.rb @@ -0,0 +1,291 @@ +#!/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| + cheminComplet = "#{dossier}/#{fichier}" + if fichier[0,1] != '.' and File.directory?(cheminComplet) and fichier != 'libs' + if not verifierRecur(cheminComplet) + return false + end + elsif fichier[-3, 3] == '.js' + puts "== Vérification de #{cheminComplet} ==" + # TODO : mettre un if pour la version windows si dessous + #system("java org.mozilla.javascript.tools.shell.Main jslint.js #{cheminComplet}") + system("rhino ./tools/jslint.js #{cheminComplet}") + # puts $?.exitstatus + if $?.exitstatus > 0 + return false + end + end + } + return true + end +end + +# 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 = /().*?(<\/a>)/ + 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 + @version + $3}) + } + } + } + end +end + +# Permet la mise en production et preproduction +class MiseEnProd + # obsolète ! + @@rep_remote = '/var/www/euphorik' + @@host = 'euphorik.ch' + + def initialize(racine) + Dir.chdir(racine) + end + + # L'emplacement ou sont copié les fichiers + # A définir avant la mise en prod + def uri=(uri) + plop = uri.split(':') + @uri = plop[0] + @rep = plop[1] + end + + # Effectue la mise en production. + def miseEnProd + copierFichiers() + maj('yaws') + end + + # Effectue la mise en préproduction. + def miseEnPreProd + copierFichiers() + lancerYaws() + maj('yaws_dev') + end + + def copierFichiers + compiler_partie_serveuse() + creer_repertoire_bd() + copier_partie_statique() + pack_js() + copie_modules_serveurs() + set_droits_fichiers() + end + + def lancerYaws + creer_rep("tools") + system("rsync tools/yaws.conf #{@uri}:#{@rep}/tools") + system("rsync tools/start_yaws.sh #{@uri}:#{@rep}/tools") + system("ssh #{@uri} \"cd #{@rep}/tools; screen -d -m -S yaws_dev ./start_yaws.sh\"") + end + + def exec(commande) + system("ssh #{@uri} \"cd #{@rep} && #{commande}\"") + end + + def creer_rep(rep) + begin + exec("test -d #{rep} || mkdir #{rep}") + rescue + end + end + + def compiler_partie_serveuse + log "compilation des modules serveur" + Dir.chdir('modules') + system("make") + if $?.exitstatus != 0 + puts "Echec de compilation de la partie serveuse" + exit 1 + end + Dir.chdir('..') + end + + def creer_repertoire_bd + log "création du répertoire de la base de données" + # création du repertoire BD + creer_rep('var') + creer_rep('var/images') + creer_rep('var/BD/backups') + exec("chmod -R g+w var") + end + + # css, images, html, etc.. + def copier_partie_statique + log "copie de la partie statique" + uri = "#{@uri}:#{@rep}" + system("awk '$0 !~ /prod=\"delete\"/' index.yaws | ssh #{@uri} \" cat > #{@rep}/index.yaws\"") + system("rsync favicon.ico #{uri}") + system("rsync --delete -r styles #{uri}") + system("rsync --delete -r pages #{uri}") + system("rsync --delete -r --exclude 'autres' img #{uri}") + end + + # minification et package des fichiers js dans euphorik.js + def pack_js + log "minification, assemblage et copie du javascript" + rep_js = 'js' + creer_rep(rep_js) + # jquery.js et euphorik.js doivent se trouve en premier + fichiers = ['js/libs/jquery.js', 'js/euphorik.js'].concat(get_fichiers_js(rep_js)) + commande_cat = "cat " + fichiers.each{|f| + commande_cat += f + " " + } + #copie des js concaténés avec minification + system("#{commande_cat} | tools/jsmin.rb | ssh #{@uri} \"cd #{@rep} && cat > #{rep_js}/euphorik.js\"") + end + + #renvoie une liste des fichiers js + def get_fichiers_js(rep) + fichiers = [] + Dir.entries(rep).each{|fichier| + if fichier[0..0] != '.' and fichier != 'euphorik.js' and fichier != 'jquery.js' + fichier = rep + "/" + fichier + if File.directory?(fichier) + fichiers.concat(get_fichiers_js(fichier)) + else + fichiers << fichier + end + end + } + return fichiers + end + + def copie_modules_serveurs + log "copie des modules du serveur" + # copie des modules erlang + creer_rep('modules') + system("rsync -r --exclude 'euphorik_test.beam' modules/ebin #{@uri}:#{@rep}/modules") + system("rsync -r modules/include #{@uri}:#{@rep}/modules") + end + + def set_droits_fichiers + log "attribution des droits sur les fichiers" + # attribution des droits + exec("chmod -R g+rx .") + end + + # noeud : le nom du noeud sur lequel le script de mise en prod est exécuté + # Execute le script 'mise_en_prod.erl' sur le serveur afin de : + # - Recharger les modules + # - Mettre à jour la base de données + def maj(noeud) + log "rechargement des modules serveur et mise à jour de la base de données" + # execution du script de mise à jour + system("cat tools/mise_en_prod.erl | ssh #{@uri} \"cat > /tmp/mise_en_prod.erl\"") + system("ssh #{@uri} \"chmod u+x /tmp/mise_en_prod.erl; /tmp/mise_en_prod.erl #{noeud}; rm /tmp/mise_en_prod.erl\"") + end + + def log(message) + puts "----- #{message} -----" + end +end + + +# Traite la ligne de commande lorsque tools.rb est utilisé comme tel +class Commande + def initialize + Dir.chdir("..") + @miseEnProd = MiseEnProd.new(".") + @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.uri = "gburri@euphorik.ch:/var/www/euphorik" + @miseEnProd.miseEnProd() + when 'pre' + @version.maj() + @miseEnProd.uri = "gburri@euphorik.ch:/var/www/euphorik_preprod" + @miseEnProd.miseEnPreProd() + when 'js' + @verifJS.verifier() + when 'version' + @version.maj() + end + end + + def afficherUsage + puts "Usage : tools.rb (prod | pre | js | version)\n" + + " prod : Mise en production\n" + + " pre : 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() diff --git a/tools/tools.rb b/tools/tools.rb deleted file mode 100644 index 5d9f40b..0000000 --- a/tools/tools.rb +++ /dev/null @@ -1,291 +0,0 @@ -#!/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| - cheminComplet = "#{dossier}/#{fichier}" - if fichier[0,1] != '.' and File.directory?(cheminComplet) and fichier != 'libs' - if not verifierRecur(cheminComplet) - return false - end - elsif fichier[-3, 3] == '.js' - puts "== Vérification de #{cheminComplet} ==" - # TODO : mettre un if pour la version windows si dessous - #system("java org.mozilla.javascript.tools.shell.Main jslint.js #{cheminComplet}") - system("rhino ./tools/jslint.js #{cheminComplet}") - # puts $?.exitstatus - if $?.exitstatus > 0 - return false - end - end - } - return true - end -end - -# 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 = /().*?(<\/a>)/ - 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 + @version + $3}) - } - } - } - end -end - -# Permet la mise en production et preproduction -class MiseEnProd - # obsolète ! - @@rep_remote = '/var/www/euphorik' - @@host = 'euphorik.ch' - - def initialize(racine) - Dir.chdir(racine) - end - - # L'emplacement ou sont copié les fichiers - # A définir avant la mise en prod - def uri=(uri) - plop = uri.split(':') - @uri = plop[0] - @rep = plop[1] - end - - # Effectue la mise en production. - def miseEnProd - copierFichiers() - maj('yaws') - end - - # Effectue la mise en préproduction. - def miseEnPreProd - copierFichiers() - lancerYaws() - maj('yaws_dev') - end - - def copierFichiers - compiler_partie_serveuse() - creer_repertoire_bd() - copier_partie_statique() - pack_js() - copie_modules_serveurs() - set_droits_fichiers() - end - - def lancerYaws - creer_rep("tools") - system("rsync tools/yaws.conf #{@uri}:#{@rep}/tools") - system("rsync tools/start_yaws.sh #{@uri}:#{@rep}/tools") - system("ssh #{@uri} \"cd #{@rep}/tools; screen -d -m -S yaws_dev ./start_yaws.sh\"") - end - - def exec(commande) - system("ssh #{@uri} \"cd #{@rep} && #{commande}\"") - end - - def creer_rep(rep) - begin - exec("test -d #{rep} || mkdir #{rep}") - rescue - end - end - - def compiler_partie_serveuse - log "compilation des modules serveur" - Dir.chdir('modules') - system("make") - if $?.exitstatus != 0 - puts "Echec de compilation de la partie serveuse" - exit 1 - end - Dir.chdir('..') - end - - def creer_repertoire_bd - log "création du répertoire de la base de données" - # création du repertoire BD - creer_rep('var') - creer_rep('var/images') - creer_rep('var/BD/backups') - exec("chmod -R g+w var") - end - - # css, images, html, etc.. - def copier_partie_statique - log "copie de la partie statique" - uri = "#{@uri}:#{@rep}" - system("awk '$0 !~ /prod=\"delete\"/' index.yaws | ssh #{@uri} \" cat > #{@rep}/index.yaws\"") - system("rsync favicon.ico #{uri}") - system("rsync --delete -r styles #{uri}") - system("rsync --delete -r pages #{uri}") - system("rsync --delete -r --exclude 'autres' img #{uri}") - end - - # minification et package des fichiers js dans euphorik.js - def pack_js - log "minification, assemblage et copie du javascript" - rep_js = 'js' - creer_rep(rep_js) - # jquery.js et euphorik.js doivent se trouve en premier - fichiers = ['js/libs/jquery.js', 'js/euphorik.js'].concat(get_fichiers_js(rep_js)) - commande_cat = "cat " - fichiers.each{|f| - commande_cat += f + " " - } - #copie des js concaténés avec minification - system("#{commande_cat} | tools/jsmin.rb | ssh #{@uri} \"cd #{@rep} && cat > #{rep_js}/euphorik.js\"") - end - - #renvoie une liste des fichiers js - def get_fichiers_js(rep) - fichiers = [] - Dir.entries(rep).each{|fichier| - if fichier[0..0] != '.' and fichier != 'euphorik.js' and fichier != 'jquery.js' - fichier = rep + "/" + fichier - if File.directory?(fichier) - fichiers.concat(get_fichiers_js(fichier)) - else - fichiers << fichier - end - end - } - return fichiers - end - - def copie_modules_serveurs - log "copie des modules du serveur" - # copie des modules erlang - creer_rep('modules') - system("rsync -r --exclude 'euphorik_test.beam' modules/ebin #{@uri}:#{@rep}/modules") - system("rsync -r modules/include #{@uri}:#{@rep}/modules") - end - - def set_droits_fichiers - log "attribution des droits sur les fichiers" - # attribution des droits - exec("chmod -R g+rx .") - end - - # noeud : le nom du noeud sur lequel le script de mise en prod est exécuté - # Execute le script 'mise_en_prod.erl' sur le serveur afin de : - # - Recharger les modules - # - Mettre à jour la base de données - def maj(noeud) - log "rechargement des modules serveur et mise à jour de la base de données" - # execution du script de mise à jour - system("cat tools/mise_en_prod.erl | ssh #{@uri} \"cat > /tmp/mise_en_prod.erl\"") - system("ssh #{@uri} \"chmod u+x /tmp/mise_en_prod.erl; /tmp/mise_en_prod.erl #{noeud}; rm /tmp/mise_en_prod.erl\"") - end - - def log(message) - puts "----- #{message} -----" - end -end - - -# Traite la ligne de commande lorsque tools.rb est utilisé comme tel -class Commande - def initialize - Dir.chdir("..") - @miseEnProd = MiseEnProd.new(".") - @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.uri = "gburri@euphorik.ch:/var/www/euphorik" - @miseEnProd.miseEnProd() - when 'pre' - @version.maj() - @miseEnProd.uri = "gburri@euphorik.ch:/var/www/euphorik_preprod" - @miseEnProd.miseEnPreProd() - when 'js' - @verifJS.verifier() - when 'version' - @version.maj() - end - end - - def afficherUsage - puts "Usage : tools.rb (prod | pre | js | version)\n" + - " prod : Mise en production\n" + - " pre : 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()