From 3be806d5afb955c2690bfd4e784d2476be0571c9 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Sat, 16 May 2026 12:44:39 -0500 Subject: [PATCH] feat: add deploy-module workflow template for Dolibarr module deployment Symlink-based deployment: clones module repo, pins to stable tag, creates symlink in htdocs/custom/. Uses org-level GA_TOKEN and DEPLOY_SSH_KEY secrets. Authored-by: Moko Consulting Co-Authored-By: Claude Opus 4.6 (1M context) --- templates/workflows/deploy-module.yml | 127 ++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 templates/workflows/deploy-module.yml diff --git a/templates/workflows/deploy-module.yml b/templates/workflows/deploy-module.yml new file mode 100644 index 0000000..de941ea --- /dev/null +++ b/templates/workflows/deploy-module.yml @@ -0,0 +1,127 @@ +name: Deploy Dolibarr Module + +on: + workflow_dispatch: + inputs: + module_repo: + description: 'Module repo name (e.g. MokoCRM, MokoDoliSign)' + required: true + server: + description: 'Target server' + required: true + default: 'dev' + type: choice + options: + - dev + - demo + - both + +env: + GITEA_URL: https://git.mokoconsulting.tech + ORG: MokoConsulting + DEV_HOST: waas.dev.mokoconsulting.tech + DEV_USER: mokoconsulting_dev + DEV_MODS_DIR: /home/mokoconsulting_dev/MokoDoliMods + DEV_CUSTOM_DIR: /home/mokoconsulting_dev/crm.dev.mokoconsulting.tech/htdocs/custom + DEMO_HOST: waas.demo.mokoconsulting.tech + DEMO_USER: mokoconsulting_demo + DEMO_MODS_DIR: /home/mokoconsulting_demo/MokoDoliMods + DEMO_CUSTOM_DIR: /home/mokoconsulting_demo/crm.demo.mokoconsulting.tech/htdocs/custom + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Validate module repo + run: | + REPO="${{ inputs.module_repo }}" + STATUS=$(curl -s -o /dev/null -w "%{http_code}" \ + -H "Authorization: token ${{ secrets.GA_TOKEN }}" \ + "${GITEA_URL}/api/v1/repos/${ORG}/${REPO}") + if [ "$STATUS" != "200" ]; then + echo "ERROR: ${ORG}/${REPO} not found"; exit 1 + fi + echo "REPO=${REPO}" >> $GITHUB_ENV + + # Derive symlink name + LINK_NAME=$(echo "$REPO" | sed 's/MokoDoli//;s/Moko//' | tr '[:upper:]' '[:lower:]') + [ "$REPO" = "MokoCRM" ] && LINK_NAME="mokocrm" + [ "$REPO" = "MokoDoliProjTemplate" ] && LINK_NAME="mokoprojtemplate" + echo "LINK_NAME=${LINK_NAME}" >> $GITHUB_ENV + + - name: Get latest stable tag + run: | + TAGS=$(curl -s \ + -H "Authorization: token ${{ secrets.GA_TOKEN }}" \ + "${GITEA_URL}/api/v1/repos/${ORG}/${{ env.REPO }}/tags?limit=1") + TAG=$(echo "$TAGS" | jq -r '.[0].name // empty') + echo "TAG=${TAG}" >> $GITHUB_ENV + [ -n "$TAG" ] && echo "Deploying: $TAG" || echo "No tags — deploying main" + + - name: Deploy to dev + if: inputs.server == 'dev' || inputs.server == 'both' + uses: appleboy/ssh-action@v1 + with: + host: ${{ env.DEV_HOST }} + username: ${{ env.DEV_USER }} + key: ${{ secrets.DEPLOY_SSH_KEY }} + script: | + REPO="${{ env.REPO }}" + LINK="${{ env.LINK_NAME }}" + TAG="${{ env.TAG }}" + MODS="${{ env.DEV_MODS_DIR }}" + CUSTOM="${{ env.DEV_CUSTOM_DIR }}" + + mkdir -p "$MODS" && cd "$MODS" + if [ -d "$REPO" ]; then + cd "$REPO" && git fetch --tags origin + else + git clone "https://git.mokoconsulting.tech/${{ env.ORG }}/${REPO}.git" + cd "$REPO" + fi + + if [ -n "$TAG" ]; then + git checkout "$TAG" --quiet + else + git checkout main --quiet + git pull --ff-only origin main --quiet + fi + + cd "$CUSTOM" + [ -L "$LINK" ] || [ -d "$LINK" ] && rm -rf "$LINK" + ln -sf "$MODS/$REPO/src" "$LINK" + echo "OK: $LINK → $MODS/$REPO/src (${TAG:-main})" + + - name: Deploy to demo + if: inputs.server == 'demo' || inputs.server == 'both' + uses: appleboy/ssh-action@v1 + with: + host: ${{ env.DEMO_HOST }} + username: ${{ env.DEMO_USER }} + key: ${{ secrets.DEPLOY_SSH_KEY }} + script: | + REPO="${{ env.REPO }}" + LINK="${{ env.LINK_NAME }}" + TAG="${{ env.TAG }}" + MODS="${{ env.DEMO_MODS_DIR }}" + CUSTOM="${{ env.DEMO_CUSTOM_DIR }}" + + mkdir -p "$MODS" && cd "$MODS" + if [ -d "$REPO" ]; then + cd "$REPO" && git fetch --tags origin + else + git clone "https://git.mokoconsulting.tech/${{ env.ORG }}/${REPO}.git" + cd "$REPO" + fi + + if [ -n "$TAG" ]; then + git checkout "$TAG" --quiet + else + git checkout main --quiet + git pull --ff-only origin main --quiet + fi + + cd "$CUSTOM" + [ -L "$LINK" ] || [ -d "$LINK" ] && rm -rf "$LINK" + ln -sf "$MODS/$REPO/src" "$LINK" + echo "OK: $LINK → $MODS/$REPO/src (${TAG:-main})" -- 2.52.0