No description
Find a file
2026-05-22 17:47:22 +00:00
scripts Actualizar scripts/server-deploy.sh 2026-05-22 17:47:22 +00:00
action.yml FEATURE: Support manual dispatch deploy flow 2026-04-20 14:20:09 -06:00
README.md FEATURE: Support manual dispatch deploy flow 2026-04-20 14:20:09 -06:00

actions-magento-deploy

Composite action para ejecutar despliegues remotos de Magento por SSH desde Forgejo Actions.

Proposito

Este repositorio agrupa la parte repetida del deploy para que los repos consumidores mantengan workflows mas cortos y faciles de entender. La idea es que cada repo solo se encargue de:

  • definir triggers;
  • mapear vars y secrets;
  • fijar la version de la action por commit SHA.

Que hace

  • prepara autenticacion SSH segura con known_hosts;
  • genera un .env temporal para el despliegue remoto;
  • genera un archivo temporal de git-credentials para git fetch por HTTPS;
  • copia server-deploy.sh y artefactos temporales al servidor;
  • ejecuta el despliegue remoto;
  • elimina los artefactos temporales del runner y del servidor al finalizar.

Estructura

action.yml
scripts/run-deploy.sh
scripts/server-deploy.sh

Descripcion de cada archivo

  • action.yml Define los inputs de la action y el paso principal que la ejecuta.
  • scripts/run-deploy.sh Corre en el runner y se encarga de preparar SSH, crear archivos temporales, copiarlos al servidor y limpiar al final.
  • scripts/server-deploy.sh Corre en el servidor remoto y ejecuta la parte operativa del deploy de Magento.
  • README.md Explica como funciona la action, que necesita y como se usa desde otros repositorios.

Flujo de alto nivel

  1. El workflow consumidor invoca la action y le pasa vars y secrets.
  2. run-deploy.sh prepara el cliente SSH del runner con known_hosts.
  3. run-deploy.sh genera un .env temporal y un archivo temporal de git-credentials.
  4. La action copia server-deploy.sh y esos artefactos a un directorio efimero del servidor.
  5. server-deploy.sh sincroniza la rama objetivo y ejecuta el deploy de Magento.
  6. La action elimina los archivos temporales locales y remotos al finalizar.

Requisitos en el runner

  • bash
  • git
  • ssh
  • scp
  • mktemp

Requisitos en el servidor remoto

  • git
  • php
  • composer
  • curl
  • flock
  • find
  • bin/magento disponible en app_dir

Inputs principales

Requeridos:

  • branch
  • ssh_host
  • ssh_port
  • ssh_user
  • ssh_key
  • ssh_known_hosts
  • forgejo_username
  • forgejo_token
  • forgejo_repository_url
  • app_dir
  • magento_theme
  • magento_timezone
  • static_deploy_args_backend
  • static_deploy_args_theme

Opcionales:

  • is_manual_dispatch
  • remote_deploy_dir
  • project_name
  • server_name
  • opensearch_host
  • opensearch_port
  • opensearch_service
  • composer_auth
  • mail_enabled
  • mail_host
  • mail_port
  • mail_username
  • mail_password
  • mail_encryption
  • mail_from_address
  • mail_to

Ejemplo de consumo

name: Deploy Staging

on:
  push:
    branches:
      - staging
  workflow_dispatch:

jobs:
  deploy-staging:
    if: github.ref_name == 'staging'
    runs-on: docker
    steps:
      - uses: https://git.kalicr.com/kalicr/actions-magento-deploy@COMMIT_SHA
        with:
          branch: staging
          is_manual_dispatch: ${{ github.event_name == 'workflow_dispatch' }}
          ssh_host: ${{ vars.STG_SSH_HOST }}
          ssh_port: ${{ vars.STG_SSH_PORT }}
          ssh_user: ${{ vars.STG_SSH_USER }}
          ssh_key: ${{ secrets.STG_SSH_KEY }}
          ssh_known_hosts: ${{ secrets.STG_SSH_KNOWN_HOSTS }}
          forgejo_username: ${{ vars.STG_FORGEJO_USERNAME }}
          forgejo_token: ${{ secrets.STG_FORGEJO_TOKEN }}
          forgejo_repository_url: https://git.kalicr.com/${{ github.repository }}.git
          app_dir: ${{ vars.STG_APP_DIR }}
          server_name: staging
          magento_theme: ${{ vars.STG_MAGENTO_THEME }}
          magento_timezone: ${{ vars.STG_MAGENTO_TIMEZONE }}
          static_deploy_args_backend: ${{ vars.STG_STATIC_DEPLOY_ARGS_BACKEND }}
          static_deploy_args_theme: ${{ vars.STG_STATIC_DEPLOY_ARGS_THEME }}
          opensearch_host: ${{ vars.STG_OPENSEARCH_HOST }}
          opensearch_port: ${{ vars.STG_OPENSEARCH_PORT }}
          opensearch_service: ${{ vars.STG_OPENSEARCH_SERVICE }}
          composer_auth: ${{ secrets.STG_COMPOSER_AUTH }}
          mail_enabled: ${{ vars.STG_MAIL_ENABLED }}
          mail_host: ${{ vars.STG_MAIL_HOST }}
          mail_port: ${{ vars.STG_MAIL_PORT }}
          mail_username: ${{ secrets.STG_MAIL_USERNAME }}
          mail_password: ${{ secrets.STG_MAIL_PASSWORD }}
          mail_encryption: ${{ vars.STG_MAIL_ENCRYPTION }}
          mail_from_address: ${{ vars.STG_MAIL_FROM_ADDRESS }}
          mail_to: ${{ vars.STG_MAIL_TO }}

Criterios operativos

  • los secretos deben permanecer en cada repositorio consumidor o en sus entornos protegidos;
  • la action debe referenciarse por commit SHA para evitar cambios inesperados;
  • el servidor remoto debe permitir autenticacion SSH por llave y known_hosts valido;
  • el directorio temporal remoto debe considerarse efimero y nunca persistente.