{"id":2261,"date":"2012-06-11T18:44:26","date_gmt":"2012-06-11T16:44:26","guid":{"rendered":"http:\/\/blog.unelink.es\/?p=2261"},"modified":"2012-06-11T16:52:18","modified_gmt":"2012-06-11T14:52:18","slug":"implementacion-casera-de-un-hook-post-create-tag-para-git","status":"publish","type":"post","link":"https:\/\/hosting.airetech.es\/blog\/wiki\/implementacion-casera-de-un-hook-post-create-tag-para-git\/","title":{"rendered":"Implementaci\u00f3n casera de un hook post-create-tag para GIT"},"content":{"rendered":"<p>Lamentablemente, GIT no dispone de un hook para dicha tarea, por lo que vamos a ver c\u00f3mo crearlo de forma manual nosotros mismos.<\/p>\n<p>Este script debemos crearlo en el directorio \"hooks\" de nuestro repositorio con el nombre<\/p>\n<pre>\r\npost-created-tag\r\n<\/pre>\n<p>El script hook ser\u00eda el siguiente<\/p>\n<pre>\r\n#!\/bin\/bash\r\n\r\nCURRENT_TAGS_FILE=\"\/home\/user\/git\/mirepo.git\/hooks\/current.tags\"\r\nNEW_TAGS_FILE=\"\/home\/user\/git\/mirepo.git\/hooks\/to.check.tags\"\r\nTAG_MATCH_CODE=\".+\\.protag\"\r\n\r\nrm ${NEW_TAGS_FILE} 2>\/dev\/null\r\ngit tag > ${NEW_TAGS_FILE}\r\n\r\nCREATED_TAG=`diff ${CURRENT_TAGS_FILE} ${NEW_TAGS_FILE} | grep  -E '>.+' | sed 's\/> \/\/'`\r\n\r\nif `echo ${CREATED_TAG} | grep -E \"${TAG_MATCH_CODE}\" 1>\/dev\/null 2>&1`\r\nthen\r\n  echo \"CREATED NEW MATCHED TAG: ${CREATED_TAG}\"\r\nelse\r\n  echo \"ANY MATCHED TAG CREATED\"\r\nfi\r\n\r\ngit tag > ${CURRENT_TAGS_FILE}\r\nrm ${NEW_TAGS_FILE} 2>\/dev\/null\r\n<\/pre>\n<p>Veamos, pues, c\u00f3mo ponemos a funcionar todo esto. Lo primero es ir al directorio de nuestro repositorio y, en el directorio hook, creamos el fichero que contendr\u00e1 los tags actuales, necesario para poder comparar despu\u00e9s sobre el commit<\/p>\n<pre>\r\ncd \/home\/user\/git\/mirepo.git\/hooks\/  \r\ngit tag > current.tags\r\n<\/pre>\n<p>El siguiente paso ser\u00e1 editar el fichero (o crearlo si no existe)<\/p>\n<pre>\r\npost-receive\r\n<\/pre>\n<p>con el contenido<\/p>\n<pre>\r\n#!\/bin\/bash  \r\n# Este script comprueba si se han hecho cambios en un directorio concreto,  \r\n# y en tal caso lanza la comprobacion del tag created  \r\n  \r\nsh \/home\/user\/git\/mirepo.git\/hooks\/post-created-tag  \r\n<\/pre>\n<p>y, por \u00faltimo, damos los permisos necesarios de ejecuci\u00f3n<\/p>\n<pre>\r\nchmod u+x \/home\/user\/git\/mirepo.git\/hooks\/post-created-tag  \r\n<\/pre>\n<p>Como se puede observar, la implementaci\u00f3n que hace el script cuando detecta que se ha creado un tag nuevo est\u00e1 abierta, por lo que ser\u00e1 cosa vuestra.<\/p>\n<p>En las primeras l\u00edneas del script podemos encontrar algunas constantes<\/p>\n<pre>\r\nCURRENT_TAGS_FILE=\"\/home\/user\/git\/mirepo.git\/hooks\/current.tags\"\r\nNEW_TAGS_FILE=\"\/home\/user\/git\/mirepo.git\/hooks\/to.check.tags\"\r\nTAG_MATCH_CODE=\".+\\.protag\"\r\n<\/pre>\n<p>de las que podemos destacar la \u00faltima, la cual nos indica qu\u00e9 match debe hacer el nuevo tag para disparar los procesos que necesitemos. Esto lo he puesto as\u00ed ya que, en mi caso, el script hace un despliege en producci\u00f3n y no quiero que lo haga sobre cualquier tag, si no sobre el tag que contenga al final del nombre la palabra<\/p>\n<pre>\r\n.protag\r\n<\/pre>\n<p>No obstante, si queremos que se ejecute siempre que se cree un nuevo tag, tenga el nombre que tenga, bastar\u00e1 con poner una expresi\u00f3n regular como<\/p>\n<pre>\r\n.+\r\n<\/pre>\n<p>y con esto ya tenemos nuestra propia implementaci\u00f3n del hook de creaci\u00f3n de tag.<\/p>\n","protected":false},"excerpt":{"rendered":"Lamentablemente, GIT no dispone de un hook para dicha tarea, por lo que vamos a ver c\u00f3mo crearlo de forma manual nosotros mismos. Este script debemos crearlo en el directorio \"hooks\" de nuestro repositorio con el nombre post-created-tag El script hook ser\u00eda el siguiente #!\/bin\/bash CURRENT_TAGS_FILE=\"\/home\/user\/git\/mirepo.git\/hooks\/current.tags\" NEW_TAGS_FILE=\"\/home\/user\/git\/mirepo.git\/hooks\/to.check.tags\" TAG_MATCH_CODE=\".+\\.protag\" rm ${NEW_TAGS_FILE} 2>\/dev\/null git tag > ${NEW_TAGS_FILE} CREATED_TAG=`diff ${CURRENT_TAGS_FILE} ${NEW_TAGS_FILE} | grep&nbsp;<a href=\"https:\/\/hosting.airetech.es\/blog\/wiki\/implementacion-casera-de-un-hook-post-create-tag-para-git\/\" class=\"read-more\">Seguir leyendo<\/a>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[10,6],"tags":[156,166,216,165],"class_list":["post-2261","post","type-post","status-publish","format-standard","hentry","category-linux","category-wiki","tag-git","tag-hook","tag-linux","tag-tag","cat-10-id","cat-6-id"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/hosting.airetech.es\/blog\/wp-json\/wp\/v2\/posts\/2261","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hosting.airetech.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hosting.airetech.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hosting.airetech.es\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hosting.airetech.es\/blog\/wp-json\/wp\/v2\/comments?post=2261"}],"version-history":[{"count":5,"href":"https:\/\/hosting.airetech.es\/blog\/wp-json\/wp\/v2\/posts\/2261\/revisions"}],"predecessor-version":[{"id":2280,"href":"https:\/\/hosting.airetech.es\/blog\/wp-json\/wp\/v2\/posts\/2261\/revisions\/2280"}],"wp:attachment":[{"href":"https:\/\/hosting.airetech.es\/blog\/wp-json\/wp\/v2\/media?parent=2261"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hosting.airetech.es\/blog\/wp-json\/wp\/v2\/categories?post=2261"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hosting.airetech.es\/blog\/wp-json\/wp\/v2\/tags?post=2261"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}