dsfsdf
This commit is contained in:
127
.gitlab-ci.yml
127
.gitlab-ci.yml
@@ -67,6 +67,65 @@ deploy:staging:
|
|||||||
|
|
||||||
echo "🚀 Deploy ${CI_ENVIRONMENT_NAME} → ${FTP_HOST}:${TARGET_PATH}"
|
echo "🚀 Deploy ${CI_ENVIRONMENT_NAME} → ${FTP_HOST}:${TARGET_PATH}"
|
||||||
|
|
||||||
|
# -------------------------------------------
|
||||||
|
# 🔢 Versionierung: versions.php laden/bauen
|
||||||
|
# -------------------------------------------
|
||||||
|
VERSION_WORK_FILE=".ci_versions_${CI_ENVIRONMENT_NAME}.php"
|
||||||
|
REMOTE_VERSION_PATH="${TARGET_PATH}${CONFIG_BASE_DIR}/versions.php"
|
||||||
|
|
||||||
|
echo "🔍 Versuche, bestehende Versionsdatei vom Server zu laden: ${REMOTE_VERSION_PATH}"
|
||||||
|
|
||||||
|
if lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e "
|
||||||
|
set ftp:ssl-force true;
|
||||||
|
set ftp:passive-mode true;
|
||||||
|
set ftp:ssl-protect-data true;
|
||||||
|
set ssl:verify-certificate no;
|
||||||
|
get ${REMOTE_VERSION_PATH} -o ${VERSION_WORK_FILE};
|
||||||
|
bye
|
||||||
|
"; then
|
||||||
|
echo "✅ Remote versions.php gefunden und lokal gespeichert in ${VERSION_WORK_FILE}"
|
||||||
|
else
|
||||||
|
echo "⚠️ Keine Remote-Versionsdatei gefunden – verwende Repo-Default (wenn vorhanden)."
|
||||||
|
if [ -f \"${CONFIG_ENV_DIR}/versions.php\" ]; then
|
||||||
|
cp \"${CONFIG_ENV_DIR}/versions.php\" \"${VERSION_WORK_FILE}\"
|
||||||
|
echo \"ℹ️ ${CONFIG_ENV_DIR}/versions.php → ${VERSION_WORK_FILE}\"
|
||||||
|
else
|
||||||
|
echo \"⚠️ Keine versions.php im Repo gefunden – starte mit 1.0.0\"
|
||||||
|
cat > \"${VERSION_WORK_FILE}\" <<PHP
|
||||||
|
<?php
|
||||||
|
\$mainversion = 1;
|
||||||
|
\$subversion = 0;
|
||||||
|
\$patchversion = 0;
|
||||||
|
PHP
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Werte aus VERSION_WORK_FILE lesen
|
||||||
|
MAIN=$(grep '\$mainversion' \"${VERSION_WORK_FILE}\" 2>/dev/null | tr -cd '0-9')
|
||||||
|
SUB=$(grep '\$subversion' \"${VERSION_WORK_FILE}\" 2>/dev/null | tr -cd '0-9')
|
||||||
|
PATCH=$(grep '\$patchversion' \"${VERSION_WORK_FILE}\" 2>/dev/null | tr -cd '0-9')
|
||||||
|
|
||||||
|
[ -z \"$MAIN\" ] && MAIN=1
|
||||||
|
[ -z \"$SUB\" ] && SUB=0
|
||||||
|
[ -z \"$PATCH\" ] && PATCH=0
|
||||||
|
|
||||||
|
PATCH=$((PATCH + 1))
|
||||||
|
|
||||||
|
echo \"🆙 Baue neue STAGING-Version: ${MAIN}.${SUB}.${PATCH}\"
|
||||||
|
|
||||||
|
cat > \"${VERSION_WORK_FILE}\" <<PHP
|
||||||
|
<?php
|
||||||
|
\$mainversion = ${MAIN};
|
||||||
|
\$subversion = ${SUB};
|
||||||
|
\$patchversion = ${PATCH};
|
||||||
|
PHP
|
||||||
|
|
||||||
|
# Optional: Textdatei für Ausgabe auf der Webseite
|
||||||
|
echo \"${MAIN}.${SUB}.${PATCH}\" > public/build_version.txt
|
||||||
|
|
||||||
|
# -------------------------------------------
|
||||||
|
# 🔁 Deploy Basisverzeichnisse
|
||||||
|
# -------------------------------------------
|
||||||
for d in $BASE_DIRS; do
|
for d in $BASE_DIRS; do
|
||||||
echo "🔁 Sync ${d}/ → ${TARGET_PATH}${d}/"
|
echo "🔁 Sync ${d}/ → ${TARGET_PATH}${d}/"
|
||||||
lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e "
|
lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e "
|
||||||
@@ -97,6 +156,10 @@ deploy:staging:
|
|||||||
cp -R ${CONFIG_ENV_DIR}/. .ci_config_deploy/
|
cp -R ${CONFIG_ENV_DIR}/. .ci_config_deploy/
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Aktualisierte versions.php in den Config-Deploy-Ordner legen
|
||||||
|
echo "➕ Aktuelle versions.php in .ci_config_deploy/ übernehmen"
|
||||||
|
cp "${VERSION_WORK_FILE}" .ci_config_deploy/versions.php
|
||||||
|
|
||||||
echo "🔁 Sync .ci_config_deploy/ → ${TARGET_PATH}${CONFIG_BASE_DIR}/"
|
echo "🔁 Sync .ci_config_deploy/ → ${TARGET_PATH}${CONFIG_BASE_DIR}/"
|
||||||
lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e "
|
lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e "
|
||||||
set ftp:ssl-force true;
|
set ftp:ssl-force true;
|
||||||
@@ -174,6 +237,65 @@ deploy:production:
|
|||||||
|
|
||||||
echo "🚀 Deploy ${CI_ENVIRONMENT_NAME} → ${FTP_HOST}:${TARGET_PATH}"
|
echo "🚀 Deploy ${CI_ENVIRONMENT_NAME} → ${FTP_HOST}:${TARGET_PATH}"
|
||||||
|
|
||||||
|
# -------------------------------------------
|
||||||
|
# 🔢 Versionierung: versions.php laden/bauen
|
||||||
|
# -------------------------------------------
|
||||||
|
VERSION_WORK_FILE=".ci_versions_${CI_ENVIRONMENT_NAME}.php"
|
||||||
|
REMOTE_VERSION_PATH="${TARGET_PATH}${CONFIG_BASE_DIR}/versions.php"
|
||||||
|
|
||||||
|
echo "🔍 Versuche, bestehende Versionsdatei vom Server zu laden: ${REMOTE_VERSION_PATH}"
|
||||||
|
|
||||||
|
if lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e "
|
||||||
|
set ftp:ssl-force true;
|
||||||
|
set ftp:passive-mode true;
|
||||||
|
set ftp:ssl-protect-data true;
|
||||||
|
set ssl:verify-certificate no;
|
||||||
|
get ${REMOTE_VERSION_PATH} -o ${VERSION_WORK_FILE};
|
||||||
|
bye
|
||||||
|
"; then
|
||||||
|
echo "✅ Remote versions.php gefunden und lokal gespeichert in ${VERSION_WORK_FILE}"
|
||||||
|
else
|
||||||
|
echo "⚠️ Keine Remote-Versionsdatei gefunden – verwende Repo-Default (wenn vorhanden)."
|
||||||
|
if [ -f \"${CONFIG_ENV_DIR}/versions.php\" ]; then
|
||||||
|
cp \"${CONFIG_ENV_DIR}/versions.php\" \"${VERSION_WORK_FILE}\"
|
||||||
|
echo \"ℹ️ ${CONFIG_ENV_DIR}/versions.php → ${VERSION_WORK_FILE}\"
|
||||||
|
else
|
||||||
|
echo \"⚠️ Keine versions.php im Repo gefunden – starte mit 1.0.0\"
|
||||||
|
cat > \"${VERSION_WORK_FILE}\" <<PHP
|
||||||
|
<?php
|
||||||
|
\$mainversion = 1;
|
||||||
|
\$subversion = 0;
|
||||||
|
\$patchversion = 0;
|
||||||
|
PHP
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Werte aus VERSION_WORK_FILE lesen
|
||||||
|
MAIN=$(grep '\$mainversion' \"${VERSION_WORK_FILE}\" 2>/dev/null | tr -cd '0-9')
|
||||||
|
SUB=$(grep '\$subversion' \"${VERSION_WORK_FILE}\" 2>/dev/null | tr -cd '0-9')
|
||||||
|
PATCH=$(grep '\$patchversion' \"${VERSION_WORK_FILE}\" 2>/dev/null | tr -cd '0-9')
|
||||||
|
|
||||||
|
[ -z \"$MAIN\" ] && MAIN=1
|
||||||
|
[ -z \"$SUB\" ] && SUB=0
|
||||||
|
[ -z \"$PATCH\" ] && PATCH=0
|
||||||
|
|
||||||
|
PATCH=$((PATCH + 1))
|
||||||
|
|
||||||
|
echo \"🆙 Baue neue PROD-Version: ${MAIN}.${SUB}.${PATCH}\"
|
||||||
|
|
||||||
|
cat > \"${VERSION_WORK_FILE}\" <<PHP
|
||||||
|
<?php
|
||||||
|
\$mainversion = ${MAIN};
|
||||||
|
\$subversion = ${SUB};
|
||||||
|
\$patchversion = ${PATCH};
|
||||||
|
PHP
|
||||||
|
|
||||||
|
# Optional: Textdatei für Ausgabe auf der Webseite
|
||||||
|
echo \"${MAIN}.${SUB}.${PATCH}\" > public/build_version.txt
|
||||||
|
|
||||||
|
# -------------------------------------------
|
||||||
|
# 🔁 Deploy Basisverzeichnisse
|
||||||
|
# -------------------------------------------
|
||||||
for d in $BASE_DIRS; do
|
for d in $BASE_DIRS; do
|
||||||
echo "🔁 Sync ${d}/ → ${TARGET_PATH}${d}/"
|
echo "🔁 Sync ${d}/ → ${TARGET_PATH}${d}/"
|
||||||
lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e "
|
lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e "
|
||||||
@@ -204,6 +326,10 @@ deploy:production:
|
|||||||
cp -R ${CONFIG_ENV_DIR}/. .ci_config_deploy/
|
cp -R ${CONFIG_ENV_DIR}/. .ci_config_deploy/
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Aktualisierte versions.php in den Config-Deploy-Ordner legen
|
||||||
|
echo "➕ Aktuelle versions.php in .ci_config_deploy/ übernehmen"
|
||||||
|
cp "${VERSION_WORK_FILE}" .ci_config_deploy/versions.php
|
||||||
|
|
||||||
echo "🔁 Sync .ci_config_deploy/ → ${TARGET_PATH}${CONFIG_BASE_DIR}/"
|
echo "🔁 Sync .ci_config_deploy/ → ${TARGET_PATH}${CONFIG_BASE_DIR}/"
|
||||||
lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e "
|
lftp -u "${FTP_USER}","${FTP_PASSWORD}" "${FTP_HOST}" -e "
|
||||||
set ftp:ssl-force true;
|
set ftp:ssl-force true;
|
||||||
@@ -224,4 +350,3 @@ deploy:production:
|
|||||||
only:
|
only:
|
||||||
- main
|
- main
|
||||||
# when: manual
|
# when: manual
|
||||||
|
|
||||||
|
|||||||
@@ -7,12 +7,12 @@
|
|||||||
// -----------------------------------------------------------
|
// -----------------------------------------------------------
|
||||||
// Try to load primary environment bootstrap.
|
// Try to load primary environment bootstrap.
|
||||||
$bootstrapCandidates = [__DIR__ . '/config.php'];
|
$bootstrapCandidates = [__DIR__ . '/config.php'];
|
||||||
|
$bootstrapCandidates = [__DIR__ . '/versions.php'];
|
||||||
|
|
||||||
$envHint = getenv('APP_ENV') ?: (getenv('APP_ENV_FILE') ?: null);
|
$envHint = getenv('APP_ENV') ?: (getenv('APP_ENV_FILE') ?: null);
|
||||||
if ($envHint) {
|
if ($envHint) {
|
||||||
$bootstrapCandidates[] = __DIR__ . '/' . $envHint . '/config.php';
|
$bootstrapCandidates[] = __DIR__ . '/' . $envHint . '/config.php';
|
||||||
}
|
}
|
||||||
$bootstrapCandidates[] = __DIR__ . '/staging/config.php';
|
|
||||||
$bootstrapCandidates[] = __DIR__ . '/prod/config.php';
|
|
||||||
$bootstrapLoaded = false;
|
$bootstrapLoaded = false;
|
||||||
foreach ($bootstrapCandidates as $bootstrap) {
|
foreach ($bootstrapCandidates as $bootstrap) {
|
||||||
if ($bootstrap && is_file($bootstrap)) {
|
if ($bootstrap && is_file($bootstrap)) {
|
||||||
@@ -35,6 +35,50 @@ if (is_file($emailtemplateConfigPath)) {
|
|||||||
$GLOBALS['app_env'] = APP_ENV;
|
$GLOBALS['app_env'] = APP_ENV;
|
||||||
$GLOBALS['app_base_url'] = APP_URL_PRIMARY;
|
$GLOBALS['app_base_url'] = APP_URL_PRIMARY;
|
||||||
$GLOBALS['app_api_base'] = $apiBaseUrl;
|
$GLOBALS['app_api_base'] = $apiBaseUrl;
|
||||||
|
$GLOBALS['app_version'] = "{$mainversion}.{$subversion}.{$patchversion}";
|
||||||
|
|
||||||
|
if (!function_exists('render_app_version_badge')) {
|
||||||
|
function render_app_version_badge(): void
|
||||||
|
{
|
||||||
|
if (php_sapi_name() === 'cli') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static $badgeRendered = false;
|
||||||
|
if ($badgeRendered) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$badgeRendered = true;
|
||||||
|
|
||||||
|
$version = $GLOBALS['app_version'] ?? null;
|
||||||
|
if (!$version) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$versionText = htmlspecialchars((string)$version, ENT_QUOTES, 'UTF-8');
|
||||||
|
|
||||||
|
echo <<<HTML
|
||||||
|
<style>
|
||||||
|
.app-version-badge{position:fixed;right:12px;bottom:12px;z-index:2147483000;font-size:12px;font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:#0f172a;background:rgba(248,250,252,.85);border:1px solid rgba(148,163,184,.6);border-radius:999px;padding:4px 10px;box-shadow:0 8px 20px rgba(15,23,42,.15);backdrop-filter:blur(6px);}
|
||||||
|
@media print {.app-version-badge{display:none}}
|
||||||
|
</style>
|
||||||
|
<script>
|
||||||
|
(function(){
|
||||||
|
var prev=document.querySelector('.app-version-badge');
|
||||||
|
if(prev){prev.remove();}
|
||||||
|
var badge=document.createElement('div');
|
||||||
|
badge.className='app-version-badge';
|
||||||
|
badge.textContent='v {$versionText}';
|
||||||
|
(window.requestAnimationFrame?requestAnimationFrame(function(){document.body?document.body.appendChild(badge):document.addEventListener('DOMContentLoaded',function(){document.body.appendChild(badge);});}):document.addEventListener('DOMContentLoaded',function(){document.body.appendChild(badge);}));
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
HTML;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!defined('APP_VERSION_BADGE_REGISTERED')) {
|
||||||
|
register_shutdown_function('render_app_version_badge');
|
||||||
|
define('APP_VERSION_BADGE_REGISTERED', true);
|
||||||
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------
|
// -----------------------------------------------------------
|
||||||
// set cookie / session parameters
|
// set cookie / session parameters
|
||||||
|
|||||||
4
config/prod/versions.php
Normal file
4
config/prod/versions.php
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<?php
|
||||||
|
$mainversion = 1;
|
||||||
|
$subversion = 0;
|
||||||
|
$patchversion = 1;
|
||||||
4
config/staging/versions.php
Normal file
4
config/staging/versions.php
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<?php
|
||||||
|
$mainversion = 1;
|
||||||
|
$subversion = 0;
|
||||||
|
$patchversion = 1;
|
||||||
Reference in New Issue
Block a user