diff --git a/.gitea/deploy.yml b/.gitea/deploy.yml new file mode 100644 index 0000000..86959a6 --- /dev/null +++ b/.gitea/deploy.yml @@ -0,0 +1,240 @@ +name: Deploy + +on: + push: + branches: + - develop + - main + +jobs: + deploy-staging: + if: gitea.ref == 'refs/heads/develop' + runs-on: private-server + env: + BASE_DIRS: "src public api partials tools data debug modules" + CONFIG_BASE_DIR: "config" + CONFIG_ENV_DIR: "config/staging" + DEPLOY_ENV: "staging" + LOCAL_ROOT: "/deploy/nexus" + SITE_DOMAIN_DIR: "${{ vars.SITE_DOMAIN_DIR }}" + TARGET_PATH: "/deploy/webserver/${{ vars.SITE_DOMAIN_DIR }}/staging/" + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Debug workspace + run: | + echo "Workspace:" && pwd + ls -la + + - name: Deploy staging + shell: bash + run: | + set -euo pipefail + + if [ -z "${SITE_DOMAIN_DIR}" ]; then + echo "❌ SITE_DOMAIN_DIR ist leer." + echo " Bitte in Gitea als Repository Variable setzen." + exit 1 + fi + + echo "Deploy Domain: ${SITE_DOMAIN_DIR}" + echo "Target path: ${TARGET_PATH}" + + echo "=== DEBUG: who/where ===" + hostname || true + id || true + echo "GITEA_REPOSITORY=${GITEA_REPOSITORY:-}" + echo "GITEA_REF=${GITEA_REF:-}" + + echo "=== DEBUG: mount + path visibility ===" + ls -la /deploy || true + ls -la /deploy/webserver || true + df -h /deploy/webserver || true + mount | grep -E "/deploy/webserver" || true + + echo "=== DEBUG: write test (pre-sync) ===" + mkdir -p "${TARGET_PATH}" + date > "${TARGET_PATH}/__ci_write_test.txt" || true + ls -la "${TARGET_PATH}" || true + cat "${TARGET_PATH}/__ci_write_test.txt" || true + + echo "πŸ“ PrΓΌfe lokale Basisverzeichnisse..." + MISSING=0 + + for d in $BASE_DIRS; do + if [ ! -d "$d" ]; then + echo "❌ Verzeichnis '$d/' fehlt im Repo!" + MISSING=1 + fi + done + + if [ ! -d "$CONFIG_BASE_DIR" ]; then + echo "❌ Basis-Konfig-Verzeichnis '$CONFIG_BASE_DIR/' fehlt!" + MISSING=1 + fi + + if [ ! -d "$CONFIG_ENV_DIR" ]; then + echo "❌ Env-Konfiguration '$CONFIG_ENV_DIR/' fehlt!" + MISSING=1 + fi + + if [ "$MISSING" -ne 0 ]; then + echo "β›” Abbruch wegen fehlender Verzeichnisse." + exit 1 + fi + + echo "🧱 Stelle sicher, dass Zielpfad existiert..." + mkdir -p "${TARGET_PATH}" + + echo "πŸš€ Deploy ${DEPLOY_ENV} β†’ ${TARGET_PATH}" + + for d in $BASE_DIRS; do + echo "πŸ” Sync ${d}/ β†’ ${TARGET_PATH}${d}/" + mkdir -p "${TARGET_PATH}${d}/" + rsync -a --delete --exclude=".gitkeep" "${d}/" "${TARGET_PATH}${d}/" + done + + echo "🧩 Baue gemischtes Config-Verzeichnis (config/*.php + ${CONFIG_ENV_DIR})..." + rm -rf .ci_config_deploy + mkdir -p .ci_config_deploy + + if [ -d "${CONFIG_BASE_DIR}" ]; then + for f in ${CONFIG_BASE_DIR}/*.php; do + if [ -f "$f" ]; then + echo "βž• Basis-Config-Datei: $f" + cp "$f" .ci_config_deploy/ + fi + done + fi + + if [ -d "${CONFIG_ENV_DIR}" ]; then + echo "βž• Env-Config aus ${CONFIG_ENV_DIR}/" + cp -R "${CONFIG_ENV_DIR}/." .ci_config_deploy/ + fi + + echo "πŸ” Sync .ci_config_deploy/ β†’ ${TARGET_PATH}${CONFIG_BASE_DIR}/" + mkdir -p "${TARGET_PATH}${CONFIG_BASE_DIR}/" + rsync -a --delete --exclude=".gitkeep" ".ci_config_deploy/" "${TARGET_PATH}${CONFIG_BASE_DIR}/" + + echo "=== DEBUG: post-sync spot checks ===" + ls -la "${TARGET_PATH}" | head -n 200 || true + find "${TARGET_PATH}" -maxdepth 2 -type f | head -n 200 || true + + echo "βœ… Deploy ${DEPLOY_ENV} abgeschlossen." + + deploy-production: + if: gitea.ref == 'refs/heads/main' + runs-on: private-server + env: + BASE_DIRS: "src public api partials tools data debug modules" + CONFIG_BASE_DIR: "config" + CONFIG_ENV_DIR: "config/prod" + DEPLOY_ENV: "production" + LOCAL_ROOT: "/deploy/nexus" + SITE_DOMAIN_DIR: "${{ vars.SITE_DOMAIN_DIR }}" + TARGET_PATH: "/deploy/webserver/${{ vars.SITE_DOMAIN_DIR }}/live/" + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Debug workspace + run: | + echo "Workspace:" && pwd + ls -la + + - name: Deploy production + shell: bash + run: | + set -euo pipefail + + if [ -z "${SITE_DOMAIN_DIR}" ]; then + echo "❌ SITE_DOMAIN_DIR ist leer." + echo " Bitte in Gitea als Repository Variable setzen." + exit 1 + fi + + echo "Deploy Domain: ${SITE_DOMAIN_DIR}" + echo "Target path: ${TARGET_PATH}" + + echo "=== DEBUG: who/where ===" + hostname || true + id || true + echo "GITEA_REPOSITORY=${GITEA_REPOSITORY:-}" + echo "GITEA_REF=${GITEA_REF:-}" + + echo "=== DEBUG: mount + path visibility ===" + ls -la /deploy || true + ls -la /deploy/webserver || true + df -h /deploy/webserver || true + mount | grep -E "/deploy/webserver" || true + + echo "=== DEBUG: write test (pre-sync) ===" + mkdir -p "${TARGET_PATH}" + date > "${TARGET_PATH}/__ci_write_test.txt" || true + ls -la "${TARGET_PATH}" || true + cat "${TARGET_PATH}/__ci_write_test.txt" || true + + echo "πŸ“ PrΓΌfe lokale Basisverzeichnisse..." + MISSING=0 + + for d in $BASE_DIRS; do + if [ ! -d "$d" ]; then + echo "❌ Verzeichnis '$d/' fehlt im Repo!" + MISSING=1 + fi + done + + if [ ! -d "$CONFIG_BASE_DIR" ]; then + echo "❌ Basis-Konfig-Verzeichnis '$CONFIG_BASE_DIR/' fehlt!" + MISSING=1 + fi + + if [ ! -d "$CONFIG_ENV_DIR" ]; then + echo "❌ Env-Konfiguration '$CONFIG_ENV_DIR/' fehlt!" + MISSING=1 + fi + + if [ "$MISSING" -ne 0 ]; then + echo "β›” Abbruch wegen fehlender Verzeichnisse." + exit 1 + fi + + echo "🧱 Stelle sicher, dass Zielpfad existiert..." + mkdir -p "${TARGET_PATH}" + + echo "πŸš€ Deploy ${DEPLOY_ENV} β†’ ${TARGET_PATH}" + + for d in $BASE_DIRS; do + echo "πŸ” Sync ${d}/ β†’ ${TARGET_PATH}${d}/" + mkdir -p "${TARGET_PATH}${d}/" + rsync -a --delete --exclude=".gitkeep" "${d}/" "${TARGET_PATH}${d}/" + done + + echo "🧩 Baue gemischtes Config-Verzeichnis (config/*.php + ${CONFIG_ENV_DIR})..." + rm -rf .ci_config_deploy + mkdir -p .ci_config_deploy + + if [ -d "${CONFIG_BASE_DIR}" ]; then + for f in ${CONFIG_BASE_DIR}/*.php; do + if [ -f "$f" ]; then + echo "βž• Basis-Config-Datei: $f" + cp "$f" .ci_config_deploy/ + fi + done + fi + + if [ -d "${CONFIG_ENV_DIR}" ]; then + echo "βž• Env-Config aus ${CONFIG_ENV_DIR}/" + cp -R "${CONFIG_ENV_DIR}/." .ci_config_deploy/ + fi + + echo "πŸ” Sync .ci_config_deploy/ β†’ ${TARGET_PATH}${CONFIG_BASE_DIR}/" + mkdir -p "${TARGET_PATH}${CONFIG_BASE_DIR}/" + rsync -a --delete --exclude=".gitkeep" ".ci_config_deploy/" "${TARGET_PATH}${CONFIG_BASE_DIR}/" + + echo "=== DEBUG: post-sync spot checks ===" + ls -la "${TARGET_PATH}" | head -n 200 || true + find "${TARGET_PATH}" -maxdepth 2 -type f | head -n 200 || true + + echo "βœ… Deploy ${DEPLOY_ENV} abgeschlossen."