Commit 2cd737d3 authored by Lukáš Gorazd Hrodek's avatar Lukáš Gorazd Hrodek
Browse files

feat: Add beautiful interactive CLI with live progress, colors, and professional UI

- Added interactive menu using Ink UI framework with @inkjs/ui components
- Implemented live progress tracking with progress bars and percentages
- Added color-coded outputs (cyan for progress, green for success, red for errors)
- Created gradient welcome screen with BigText animation
- Reorganized festival-16 files from nested web structure
- Added deployment and export automation scripts
- Integrated chalk, ink-gradient, and ink-big-text for enhanced visuals
- Maintained command-line compatibility alongside interactive UI
parent 56aaddb3
Loading
Loading
Loading
Loading

.env.example

0 → 100644
+28 −0
Original line number Diff line number Diff line
# Festival Archive Deployment Configuration

# Server Configuration
WEB_HOST=festival.fi.muni.cz
WEB_USER=gitlabworker
WEB_ROOT=/var/www/html/festival.fi.muni.cz
ARCHIVE_PATH=/var/www/html/festival.fi.muni.cz/archiv

# SSH Private Key (for GitLab CI/CD)
# This is the SSH private key used to connect to the server
# In GitLab CI/CD, set this as a protected variable named SSH_PRIVATE_KEY
SSH_PRIVATE_KEY=-----BEGIN OPENSSH PRIVATE KEY-----
# ... paste your SSH private key here ...
# Make sure to keep the BEGIN and END lines
-----END OPENSSH PRIVATE KEY-----

# SSH Known Hosts (optional)
# Add your server's SSH fingerprint here
# Example: festival.fi.muni.cz ssh-rsa AAAAB3NzaC1yc2E...
SSH_KNOWN_HOSTS=

# Deployment Options (optional)
# Set to 'true' to enable dry-run mode (no actual changes)
DRY_RUN=false

# Backup Configuration (optional)
BACKUP_DIR=./backup
BACKUP_RETENTION_DAYS=30
+15 −0
Original line number Diff line number Diff line
Thumbs.db
.DS_Store
*.backup
settings.json

# Environment variables (contains secrets)
.env

# Deployment artifacts
temp-archive-deploy/
web-archive/
archiv/
archive-content.tar.gz
backup/

# Node modules
node_modules/
package-lock.json

.gitlab-ci.yml

0 → 100644
+98 −0
Original line number Diff line number Diff line
image: node:20

before_script:
  - npm install

workflow:
  rules:
    - if: $CI_COMMIT_BRANCH == 'main'

stages:
  - deploy
  - backup

variables:
  WEB_HOST: "festival.fi.muni.cz"
  WEB_USER: "gitlabworker"
  WEB_ROOT: "/var/www/html/festival.fi.muni.cz"
  ARCHIVE_PATH: "/var/www/html/festival.fi.muni.cz/archiv"

# Deploy archive to remote server
deploy_archive:
  stage: deploy
  resource_group: archive_production
  tags:
    - shared-fi
  before_script:
    - apt-get update -qq
    - apt-get install -y openssh-client tar
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
    - mkdir -p ~/.ssh && chmod 700 ~/.ssh
    - echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
    - chmod 644 ~/.ssh/known_hosts
    - npm install
  script:
    - echo "Exporting archive..."
    - node scripts/export.js

    - echo "Creating tar archive..."
    - tar -czf archive-content.tar.gz -C web-archive .

    - echo "Uploading to server..."
    - scp archive-content.tar.gz ${WEB_USER}@${WEB_HOST}:/tmp/

    - echo "Deploying on server..."
    - |
      ssh -o StrictHostKeyChecking=no ${WEB_USER}@${WEB_HOST} "set -euo pipefail;
        mkdir -p ${ARCHIVE_PATH};
        mkdir -p /tmp/archive-extract;
        cd /tmp/archive-extract;
        tar -xzf /tmp/archive-content.tar.gz;
        find ${ARCHIVE_PATH} -mindepth 1 -maxdepth 1 -type d -exec rm -rf {} + || true;
        cp -r . ${ARCHIVE_PATH}/;
        cd /;
        rm -rf /tmp/archive-extract /tmp/archive-content.tar.gz;
        chown -R www-data:www-data ${ARCHIVE_PATH} || true;
        find ${ARCHIVE_PATH} -type d -exec chmod 755 {} + || true;
        find ${ARCHIVE_PATH} -type f -exec chmod 644 {} + || true;
      "

    - echo "Archive deployed successfully!"
  only:
    - main
  interruptible: true

# Manual backup of archive
backup_archive:
  stage: backup
  when: manual
  tags:
    - shared-fi
  before_script:
    - apt-get update -qq
    - apt-get install -y openssh-client tar
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
    - mkdir -p ~/.ssh && chmod 700 ~/.ssh
    - echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
    - chmod 644 ~/.ssh/known_hosts
  script:
    - echo "Creating backup on server..."
    - BACKUP_NAME="archive-backup-$(date +%Y%m%d-%H%M%S).tar.gz"
    - |
      ssh -o StrictHostKeyChecking=no ${WEB_USER}@${WEB_HOST} "set -euo pipefail;
        mkdir -p \$HOME/backups;
        cd ${ARCHIVE_PATH} && tar -czf \$HOME/backups/${BACKUP_NAME} . || true;
      "
    
    - echo "Downloading backup..."
    - mkdir -p backup/
    - scp -o StrictHostKeyChecking=no ${WEB_USER}@${WEB_HOST}:~/backups/${BACKUP_NAME} backup/ || true
  artifacts:
    paths:
      - backup/
    expire_in: 30 days
  only:
    - main
  interruptible: true

README-DEPLOY.md

0 → 100644
+174 −0
Original line number Diff line number Diff line
# Festival Archive Deployment

Node.js skript pro deployment archivu festivalu - kopíruje složky `festival-XX` a přejmenuje je na `XX`.

## 📋 Požadavky

- Node.js 14 nebo novější
- SSH přístup na cílový server (pro vzdálený deployment)
- `tar` příkaz dostupný v systému

## 🚀 Použití

### Instalace

```bash
npm install
```

### Vzdálený deployment (na server)

```bash
npm run deploy
# nebo
node deploy-archive.js
```

Tento příkaz:
1. Zkopíruje všechny složky `festival-01`, `festival-02`, atd.
2. Přejmenuje je na `01`, `02`, atd.
3. Vytvoří tar archiv
4. Nahraje na server přes SSH
5. Rozbalí a nastaví správná oprávnění

### Lokální deployment (test)

```bash
npm run deploy:local
# nebo
node deploy-archive.js --local
```

Tento příkaz provede stejnou operaci, ale namísto nahrání na server vytvoří lokální složku `archiv/` s přejmenovanými složkami.

### Vytvoření zálohy

```bash
npm run backup
# nebo
node deploy-archive.js --backup
```

Stáhne aktuální stav archivu ze serveru jako zálohu.

## ⚙️ Konfigurace

Skript používá následující proměnné prostředí (nebo výchozí hodnoty):

```bash
WEB_HOST=festival.fi.muni.cz
WEB_USER=gitlabworker
WEB_ROOT=/var/www/html/festival.fi.muni.cz
ARCHIVE_PATH=/var/www/html/festival.fi.muni.cz/archiv
```

### Nastavení proměnných prostředí

**Linux/Mac:**
```bash
export WEB_HOST=your-server.com
export WEB_USER=your-user
npm run deploy
```

**Windows PowerShell:**
```powershell
$env:WEB_HOST="your-server.com"
$env:WEB_USER="your-user"
npm run deploy
```

**Windows CMD:**
```cmd
set WEB_HOST=your-server.com
set WEB_USER=your-user
npm run deploy
```

## 🔐 SSH nastavení

Pro vzdálený deployment musíte mít:

1. SSH klíč nakonfigurovaný pro přístup na server
2. Server přidaný do `known_hosts`

```bash
# Test SSH připojení
ssh gitlabworker@festival.fi.muni.cz

# Přidání serveru do known_hosts (pokud ještě není)
ssh-keyscan festival.fi.muni.cz >> ~/.ssh/known_hosts
```

## 📁 Struktura

Skript očekává strukturu:

```
archive/
├── festival-01/
├── festival-02/
├── festival-03/
└── ...
```

A vytvoří na serveru (nebo lokálně v režimu `--local`):

```
archiv/
├── 01/
├── 02/
├── 03/
└── ...
```

## 🛠️ Příklady

### Lokální test před deploymentem

```bash
# 1. Zkuste lokální deployment
npm run deploy:local

# 2. Zkontrolujte složku archiv/
ls -la archiv/

# 3. Pokud vypadá dobře, deployněte na server
npm run deploy
```

### Vytvoření zálohy před deploymentem

```bash
# 1. Nejdříve záloha
npm run backup

# 2. Poté deployment
npm run deploy
```

## 🐛 Troubleshooting

### "tar: command not found" na Windows

Nainstalujte Git for Windows (obsahuje tar) nebo použijte WSL.

### SSH permission denied

Zkontrolujte SSH klíče:
```bash
ssh -v gitlabworker@festival.fi.muni.cz
```

### Práva na serveru

Skript automaticky nastaví:
- Vlastník: `www-data:www-data`
- Složky: `755`
- Soubory: `644`

## 📝 Poznámky

- Skript automaticky vyčistí dočasné soubory při ukončení
- V případě chyby se temp složka automaticky smaže
- Lokální režim `--local` je bezpečný pro testování

README.md

0 → 100644
+290 −0
Original line number Diff line number Diff line
# Archiv webových stránek Filmového festivalu FFMUNI

Tento repozitář obsahuje kompletní archiv všech historických webových stránek **Filmového festivalu Filozofické fakulty Masarykovy univerzity** (FFMUNI). Festival je každoročně pořádán studenty filozofické fakulty v Brně a má bohatou historii sahající přes dvě desetiletí.

## 📚 O archivu

Archiv obsahuje všechny ročníky festivalu od prvního až po současnost:

- **festival-01****festival-23** - Kompletní webové stránky jednotlivých ročníků
- Každý ročník obsahuje originální design, fotogalerie, program, informace o projekcích a výsledky
- Zachována původní struktura a vzhled webů z jednotlivých let

### 🎬 Historie festivalu

Filmový festival FFMUNI je největší studentský filmový festival v České republice. Každý rok přináší nejlepší studentské filmy z celého světa, workshopy, přednášky a setkání s filmařskou komunitou. 

Tento archiv slouží jako digitální památník všech ročníků festivalu a umožňuje návštěvníkům procházet historii a vývoj festivalu v průběhu let.

## 🌐 Živý web

Aktuální archiv je dostupný online na: **https://festival.fi.muni.cz/archiv/**

Jednotlivé ročníky jsou přístupné pod číselným označením (např. `/archiv/01/`, `/archiv/02/`, atd.)

---

## 🛠️ Deployment nástroj

Pro správu a nasazování archivu je k dispozici moderní CLI nástroj s interaktivním rozhraním.

## 🚀 Rychlý start

### Instalace závislostí

```bash
npm install
```

### Spuštění interaktivního CLI

```bash
npm start
```

Nebo přímo pomocí argumentů:

```bash
npm run export          # Pouze export do web-archive/
npm run deploy          # Export a deploy na server
npm run deploy:local    # Export a lokální deploy do archiv/
npm run backup          # Stažení zálohy ze serveru
npm run cleanup         # Vyčistit web-archive složku
```

## 📋 Funkce

### 🎨 Interaktivní CLI

- **Animované rozhraní** - pomocí Ink (React pro terminál)
- **Průvodce setupem** - kontrola .env souboru a SSH klíče
- **Přehledné výstupy** - s emoji a barevným textem
- **Automatická inicializace** - vytvoří .env pokud neexistuje

### ⚡ Argumenty CLI (bez interakce)

Pro automatizaci nebo CI/CD můžete použít přímé příkazy:

```bash
node scripts/cli.js export          # Export
node scripts/cli.js deploy          # Deploy
node scripts/cli.js deploy-local    # Lokální deploy
node scripts/cli.js backup          # Záloha
node scripts/cli.js cleanup         # Cleanup
```

### 📦 Rozdělené skripty

#### 1. Export (`scripts/export.js`)

```bash
node scripts/export.js              # Export do web-archive/
node scripts/export.js --cleanup    # Smazat web-archive/
node scripts/export.js --json       # JSON output
```

Co dělá:
- Najde všechny `festival-XX` složky
- Zkopíruje je do `web-archive/` a přejmenuje na `XX`
- Vytvoří přehlednou strukturu pro deployment

#### 2. Deploy (`scripts/deploy.js`)

```bash
node scripts/deploy.js              # Deploy na server
node scripts/deploy.js --local      # Lokální deploy
node scripts/deploy.js --backup     # Záloha ze serveru
```

Co dělá:
- Vezme `web-archive/` složku
- Vytvoří tar archiv
- Nahraje na server přes SSH
- Rozbalí a nastaví oprávnění

#### 3. CLI (`scripts/cli.js`)

Hlavní vstupní bod - kombinuje export a deploy s interaktivním rozhraním.

## ⚙️ Konfigurace

### První spuštění

1. Spusťte `npm start`
2. CLI vás provede setupem:
   - Vytvoří `.env` soubor
   - Požádá o SSH klíč
   - Nastaví konfiguraci

### Manuální konfigurace

Vytvořte `.env` soubor (nebo zkopírujte `.env.example`):

```bash
WEB_HOST=festival.fi.muni.cz
WEB_USER=gitlabworker
WEB_ROOT=/var/www/html/festival.fi.muni.cz
ARCHIVE_PATH=/var/www/html/festival.fi.muni.cz/archiv
SSH_PRIVATE_KEY=-----BEGIN OPENSSH PRIVATE KEY-----
...
-----END OPENSSH PRIVATE KEY-----
```

## 📁 Struktura složek

```
archive/
├── festival-01/          # Zdrojové složky
├── festival-02/
├── ...
├── web-archive/          # Export (přejmenované na 01, 02, ...)
│   ├── 01/
│   ├── 02/
│   └── ...
├── archiv/               # Lokální deploy (--local)
├── backup/               # Stažené zálohy
├── scripts/              # Deployment skripty
│   ├── cli.js           # Hlavní CLI
│   ├── export.js        # Export logika
│   └── deploy.js        # Deploy logika
├── .env                  # Konfigurace (gitignored)
└── .env.example          # Šablona konfigurace
```

## 🔐 SSH Setup

### Lokální použití

```bash
# Test SSH připojení
ssh gitlabworker@festival.fi.muni.cz

# Přidat server do known_hosts
ssh-keyscan festival.fi.muni.cz >> ~/.ssh/known_hosts
```

### GitLab CI/CD

V GitLab projektu (Settings → CI/CD → Variables):

- `SSH_PRIVATE_KEY` - váš SSH privátní klíč
- `SSH_KNOWN_HOSTS` - výstup z `ssh-keyscan festival.fi.muni.cz`

## 🎯 Příklady použití

### Scenario 1: První deployment

```bash
npm start
# Vyberte: "Export and Deploy to server"
# CLI vás provede setupem
```

### Scenario 2: Rychlý export (test)

```bash
npm run export
# Zkontrolujte web-archive/ složku
# Uvidíte animované rozhraní s progress barem
```

### Scenario 3: Lokální testování

```bash
npm run deploy:local
# Výsledek v archiv/ složce
```

### Scenario 4: Production deployment

```bash
npm run deploy
# Automaticky exportuje a nahraje na server
```

### Scenario 5: Záloha před deploymentem

```bash
npm run backup
npm run deploy
```

### Scenario 6: CI/CD (bez interakce)

```bash
node scripts/cli.js export
node scripts/cli.js deploy
```

## 🎨 Vzhled CLI

Všechny skripty mají krásné, animované rozhraní:

**Export:**
```
📦 Festival Archive Export

✓ Found 23 festival directories
✓ Export directory created
⠋ Copying and renaming: festival-15 → 15
```

**Deploy:**
```
🚀 Server Deployment

✓ Export directory verified
⠋ Uploading to server...
```

**Výsledek:**
```
🎉 Export completed successfully!
Exported to: C:\path\to\web-archive
Directories: 01, 02, 03, 04, 05, ...
```

## 🔄 GitLab CI/CD Pipeline

Pipeline automaticky:

1. **Deploy stage** (při push do `main`):
   - Nainstaluje dependencies
   - Spustí `export.js` pro vytvoření web-archive
   - Vytvoří tar archiv
   - Nahraje na server
   - Nasadí s správnými oprávněními

2. **Backup stage** (manuální):
   - Vytvoří zálohu na serveru
   - Stáhne jako artifact (30 dní)

## 🐛 Troubleshooting

### "SSH key not found"

CLI se automaticky zeptá na klíč při prvním spuštění.

### "Export directory not found"

Spusťte nejprve export: `npm run export`

### Windows: "tar: command not found"

Nainstalujte Git for Windows (obsahuje tar).

## 📝 Poznámky k archivu

- Každý ročník je v původní podobě, jak byl publikován
- Složky jsou v production verzi přejmenovány na číselná označení (01-23)
- Všechny assety, obrázky a videa jsou zachovány
- Design a funkčnost odpovídají původnímu stavu

## 🤝 Přispění

Pokud najdete chybu nebo máte návrh na vylepšení archivu nebo deployment nástroje, neváhejte vytvořit issue nebo pull request.

---

Made with ❤️ for **Filmový festival FFMUNI**  
📧 Kontakt: https://festival.fi.muni.cz
Loading