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})"