{"id":2974,"date":"2021-06-06T16:50:58","date_gmt":"2021-06-06T14:50:58","guid":{"rendered":"https:\/\/davidperezgar.com\/?p=2974"},"modified":"2021-11-06T17:18:02","modified_gmt":"2021-11-06T16:18:02","slug":"publica-plugin-wordpress-desde-github","status":"publish","type":"post","link":"https:\/\/davidperezgar.com\/es\/publica-plugin-wordpress-desde-github\/","title":{"rendered":"Publica\/actualiza un plugin WordPress SVN directamente desde GitHub"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Esto lo aprend\u00ed recientemente gracias a los directos de <a href=\"https:\/\/www.twitch.tv\/videos\/986101570?t=00h24m01s\" target=\"_blank\" rel=\"noopener\">Fran Torres<\/a> explicando de c\u00f3mo publicar directamente en WordPress SVN.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-wordpress-tv wp-block-embed-wordpress-tv wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"VideoPress Video Player\" aria-label=\"VideoPress Video Player\" width=\"500\" height=\"281\" src=\"https:\/\/video.wordpress.com\/embed\/DPpjABXM?hd=1&amp;cover=1\" frameborder=\"0\" allowfullscreen allow=\"clipboard-write; presentation\"><\/iframe><script src='https:\/\/v0.wordpress.com\/js\/next\/videopress-iframe.js?m=1790791280'><\/script>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"que-es-svn\">\u00bfQu\u00e9 es SVN?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">SVN es la abreviatura de Subversion, y es el control de versiones de los repositorios de WordPress como el propio core, y tambi\u00e9n los plugins. Una vez que hemos enviado el <a href=\"https:\/\/es.wordpress.org\/plugins\/developers\/add\/\" target=\"_blank\" rel=\"noopener\">plugin de WordPress<\/a> y pasado su proceso de revisi\u00f3n, podemos publicar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sin conocerlo mucho y lo que he trabajado, es muy tedioso, ya que cada vez que borras un directorio, puedes acabar rompiendo el control de versiones de proyecto. Yo nunca me he terminado de aclarar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En cambio, con GitHub trabajar es una maravilla, ya que gracias a las ramas, podemos desglosar nuestro desarrollo de forma muy f\u00e1cil.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bien, para conectar GitHub con el repositorio de SVN, podemos utilizar las GitHub Actions.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"github-actions\">GitHub Actions<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Las GitHub Actions <a href=\"https:\/\/github.com\/features\/actions\" target=\"_blank\" rel=\"noopener\">como en su p\u00e1gina explican<\/a>, est\u00e1n pensadas para automatizar procesos dentro de la salida a producci\u00f3n de un c\u00f3digo de software.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Los flujos de trabajo o workflow se pueden ejecutar en cualquier evento de GitHub. En este  caso utilizaremos <strong>el evento de creaci\u00f3n de una etiqueta.<\/strong> Y cada vez que publicamos una nueva release en GitHub, crea dicha etiqueta y ejecuta el c\u00f3digo que env\u00eda los archivos a SVN.<\/p>\n\n\n\n<p class=\"has-green-background-color has-text-color has-background wp-block-paragraph\" style=\"color:#ffffff\"><strong>Nuestro flujo de trabajo ser\u00e1 la creaci\u00f3n de una release cada vez que queramos publicar en WordPress. <\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"configuracion-github-actions-para-publicar-en-wordpress\">Configuraci\u00f3n GitHub Actions para publicar en WordPress<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para nuestro flujo de trabajo utilizaremos la acci\u00f3n desarrollada por 10up, una agencia dedicada a WordPress, y que ha liberado para que podamos usarla.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"724\" height=\"401\" src=\"\/wp-content\/uploads\/2026\/10\/github-actions-wordpress-svn.png\" alt=\"github actions wordpress svn\" class=\"wp-image-5464\" title=\"\" srcset=\"https:\/\/davidperezgar.com\/wp-content\/uploads\/github-actions-wordpress-svn.png 724w, https:\/\/davidperezgar.com\/wp-content\/uploads\/github-actions-wordpress-svn-362x200.png 362w, https:\/\/davidperezgar.com\/wp-content\/uploads\/github-actions-wordpress-svn-596x330.png 596w\" sizes=\"auto, (max-width: 724px) 100vw, 724px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">La acci\u00f3n puedes verla en su <a href=\"https:\/\/github.com\/marketplace\/actions\/wordpress-plugin-svn-deploy\" target=\"_blank\" rel=\"noopener\">p\u00e1gina de acci\u00f3n GitHub<\/a>, donde viene toda la documentaci\u00f3n para ponerla en marcha. A continuaci\u00f3n, os ense\u00f1ar\u00e9 mi configuraci\u00f3n ideal.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En el origen del repositorio en la rama principal, creamos un archivo YML con la siguiente ruta:<\/p>\n\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\"><code class=\"\">.github\/workflows\/deploy.yml<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Y con el siguiente contenido:<\/p>\n\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\"><code class=\"\">name: Deploy to WordPress.org\non:\n  push:\n    tags:\n    - \"*\"\njobs:\n  tag:\n    name: New tag\n    runs-on: ubuntu-latest\n    steps:\n    - uses: actions\/checkout@master\n    - name: WordPress Plugin Deploy\n      uses: 10up\/action-wordpress-plugin-deploy@stable\n      env:\n        SVN_PASSWORD: ${{ secrets.SVN_PASSWORD }}\n        SVN_USERNAME: ${{ secrets.SVN_USERNAME }}<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Ten en cuenta que este c\u00f3digo asume que el SLUG de tu plugin es el mismo que el repositorio de GitHub. Que por otro lado, creo que es lo m\u00e1s adecuado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Deberemos ir al men\u00fa del repositorio para configurar nuestro usuario y contrase\u00f1a de SVN. Esto es en: Settings &gt; Secrets y a\u00f1adir SVN_USERNAME y su valor, y SVN_PASSWORD y tambi\u00e9n su valor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Y luego para que podamos subir todos los archivos relacionados con el directorio de WordPress, deberemos crear una carpeta:<\/p>\n\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\"><code class=\"\">\/.wordpress-org<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Con los archivos que queremos compartir, la im\u00e1genes del plugin y sus recursos como capturas de pantalla. Esto es:<\/p>\n\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\"><code class=\"\">banner-1544x500.png\nbanner-772x250.png\nicon-128x128.png\nicon-256x256.png\nscreenshot-1.png\nscreenshot-2.png<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">En los iconos se puede utilizar tambi\u00e9n el formato SVG o JPG.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pues ya tendr\u00edamos todo configurado. Ahora cada vez que <strong>creamos una release<\/strong>, se ejecutar\u00e1 nuestra acci\u00f3n y publicar\u00e1 en WordPress.org. En la pesta\u00f1a de Actions, puedes ver el log de cada ejecuci\u00f3n. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1160\" height=\"775\" src=\"\/wp-content\/uploads\/2026\/10\/github-actions-ejemplos.png\" alt=\"github actions ejemplos\" class=\"wp-image-5465\" title=\"\" srcset=\"https:\/\/davidperezgar.com\/wp-content\/uploads\/github-actions-ejemplos.png 1160w, https:\/\/davidperezgar.com\/wp-content\/uploads\/github-actions-ejemplos-596x398.png 596w, https:\/\/davidperezgar.com\/wp-content\/uploads\/github-actions-ejemplos-768x513.png 768w, https:\/\/davidperezgar.com\/wp-content\/uploads\/github-actions-ejemplos-1082x723.png 1082w\" sizes=\"auto, (max-width: 1160px) 100vw, 1160px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Como puedes ver, en la primera ejecuci\u00f3n obtuve un error, y la forma que hice para solventarlo fue eliminar la release y tambi\u00e9n el tag, para volver a crear el flujo de trabajo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Recursos:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Plugin con la acci\u00f3n publicada: <a href=\"https:\/\/github.com\/closemarketing\/woocommerce-es\" target=\"_blank\" rel=\"noopener\">WooCommerce ES<\/a>.<\/li><li><a href=\"\/\/github.com\/marketplace\/actions\/wordpress-plugin-svn-deploy\">Acci\u00f3n 10up para publicar en WordPress SVN<\/a>.<\/li><li><a href=\"https:\/\/developer.wordpress.org\/plugins\/wordpress-org\/plugin-assets\/\" target=\"_blank\" rel=\"noopener\">Recursos de im\u00e1genes del repositorio de WordPress.<\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Esto lo aprend\u00ed recientemente gracias a los directos de Fran Torres explicando de c\u00f3mo publicar directamente en WordPress SVN. \u00bfQu\u00e9 es SVN? SVN es la abreviatura de Subversion, y es el control de versiones de los repositorios de WordPress como el propio core, y tambi\u00e9n los plugins. Una vez que hemos enviado el plugin de [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":5466,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":14,"footnotes":""},"categories":[168],"tags":[551,552],"class_list":["post-2974","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desarrollo-web","tag-github","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/posts\/2974","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/comments?post=2974"}],"version-history":[{"count":1,"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/posts\/2974\/revisions"}],"predecessor-version":[{"id":5891,"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/posts\/2974\/revisions\/5891"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/media\/5466"}],"wp:attachment":[{"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/media?parent=2974"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/categories?post=2974"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/tags?post=2974"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}