diff --git a/README.md b/README.md index d9c1208..4bc2156 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,8 @@ Ein SFTP-Deployment ist vorbereitet. 1. Vorlage kopieren: `cp .deploy.env.example .deploy.env` 2. In `.deploy.env` Host, Benutzer, Port und Zielpfad eintragen -3. Deployment starten: `./scripts/deploy-sftp.sh` +3. Upload-Liste bei Bedarf in `scripts/deploy-include.txt` anpassen +4. Deployment starten: `./scripts/deploy-sftp.sh` Beispiel fuer die Konfiguration: @@ -37,4 +38,6 @@ DEPLOY_TARGET_DIR=/pfad/zum/webspace Das Skript uebertraegt die statischen Projektdateien und Verzeichnisse `css`, `img` und `vendor` per OpenSSH-SFTP auf den Webspace. +Vor dem Verbindungsaufbau prueft das Skript, ob alle in `scripts/deploy-include.txt` aufgefuehrten Dateien und Verzeichnisse lokal vorhanden sind. Die Upload-Liste kann damit zentral gepflegt werden. + Wichtig: Das Deployment aktualisiert vorhandene Dateien, entfernt aber keine Dateien auf dem Server, die lokal bereits geloescht wurden. \ No newline at end of file diff --git a/scripts/deploy-include.txt b/scripts/deploy-include.txt new file mode 100644 index 0000000..5b5779f --- /dev/null +++ b/scripts/deploy-include.txt @@ -0,0 +1,8 @@ +index.html +datenschutz.html +impressum.html +robots.txt +sitemap.xml +css +img +vendor \ No newline at end of file diff --git a/scripts/deploy-sftp.sh b/scripts/deploy-sftp.sh index 0878fe0..5650c15 100755 --- a/scripts/deploy-sftp.sh +++ b/scripts/deploy-sftp.sh @@ -4,6 +4,7 @@ set -euo pipefail repo_root="$(cd "$(dirname "$0")/.." && pwd)" config_file="$repo_root/.deploy.env" +include_file="${DEPLOY_INCLUDE_FILE:-$repo_root/scripts/deploy-include.txt}" if [[ ! -f "$config_file" ]]; then echo "Fehlende Konfiguration: $config_file" >&2 @@ -16,6 +17,11 @@ if ! command -v sftp >/dev/null 2>&1; then exit 1 fi +if [[ ! -f "$include_file" ]]; then + echo "Fehlende Deploy-Liste: $include_file" >&2 + exit 1 +fi + set -a source "$config_file" set +a @@ -26,24 +32,47 @@ set +a deploy_port="${DEPLOY_PORT:-22}" batch_file="$(mktemp)" +deploy_items=() cleanup() { rm -f "$batch_file" } trap cleanup EXIT +while IFS= read -r raw_item || [[ -n "$raw_item" ]]; do + item="${raw_item%%#*}" + item="${item%${item##*[![:space:]]}}" + item="${item#${item%%[![:space:]]*}}" + + if [[ -z "$item" ]]; then + continue + fi + + if [[ ! -e "$repo_root/$item" ]]; then + echo "Fehlender Deploy-Eintrag: $item" >&2 + exit 1 + fi + + deploy_items+=("$item") +done < "$include_file" + +if [[ ${#deploy_items[@]} -eq 0 ]]; then + echo "Keine Deploy-Eintraege in $include_file gefunden." >&2 + exit 1 +fi + cat > "$batch_file" <> "$batch_file" + else + printf 'put %s\n' "$item" >> "$batch_file" + fi +done + cd "$repo_root" sftp -P "$deploy_port" "$DEPLOY_USER@$DEPLOY_HOST" < "$batch_file"