No description
- Shell 100%
| scripts | ||
| action.yml | ||
| README.md | ||
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
varsysecrets; - fijar la version de la action por commit SHA.
Que hace
- prepara autenticacion SSH segura con
known_hosts; - genera un
.envtemporal para el despliegue remoto; - genera un archivo temporal de
git-credentialsparagit fetchpor HTTPS; - copia
server-deploy.shy 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.ymlDefine los inputs de la action y el paso principal que la ejecuta.scripts/run-deploy.shCorre en el runner y se encarga de preparar SSH, crear archivos temporales, copiarlos al servidor y limpiar al final.scripts/server-deploy.shCorre en el servidor remoto y ejecuta la parte operativa del deploy de Magento.README.mdExplica como funciona la action, que necesita y como se usa desde otros repositorios.
Flujo de alto nivel
- El workflow consumidor invoca la action y le pasa
varsysecrets. run-deploy.shprepara el cliente SSH del runner conknown_hosts.run-deploy.shgenera un.envtemporal y un archivo temporal degit-credentials.- La action copia
server-deploy.shy esos artefactos a un directorio efimero del servidor. server-deploy.shsincroniza la rama objetivo y ejecuta el deploy de Magento.- La action elimina los archivos temporales locales y remotos al finalizar.
Requisitos en el runner
bashgitsshscpmktemp
Requisitos en el servidor remoto
gitphpcomposercurlflockfindbin/magentodisponible enapp_dir
Inputs principales
Requeridos:
branchssh_hostssh_portssh_userssh_keyssh_known_hostsforgejo_usernameforgejo_tokenforgejo_repository_urlapp_dirmagento_thememagento_timezonestatic_deploy_args_backendstatic_deploy_args_theme
Opcionales:
is_manual_dispatchremote_deploy_dirproject_nameserver_nameopensearch_hostopensearch_portopensearch_servicecomposer_authmail_enabledmail_hostmail_portmail_usernamemail_passwordmail_encryptionmail_from_addressmail_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_hostsvalido; - el directorio temporal remoto debe considerarse efimero y nunca persistente.