Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7daa90dd89 | ||
|
|
23d72f5287 | ||
|
|
88886a9916 |
+12
-12
@@ -391,7 +391,7 @@ jobs:
|
||||
mkdir -p ~/.ssh
|
||||
echo "${{ secrets.ALPHA_SSH_KEY }}" > ~/.ssh/id_ed25519
|
||||
chmod 600 ~/.ssh/id_ed25519
|
||||
ssh-keyscan -H alpha.mintel.me >> ~/.ssh/known_hosts 2>/dev/null
|
||||
ssh-keyscan -H infra.mintel.me >> ~/.ssh/known_hosts 2>/dev/null
|
||||
|
||||
if [[ "$TARGET" == "production" ]]; then
|
||||
SITE_DIR="/home/deploy/sites/e-tib.com"
|
||||
@@ -403,25 +403,25 @@ jobs:
|
||||
SITE_DIR="/home/deploy/sites/branch.e-tib.com/$SLUG"
|
||||
fi
|
||||
|
||||
ssh root@alpha.mintel.me "mkdir -p $SITE_DIR"
|
||||
scp .env.deploy root@alpha.mintel.me:$SITE_DIR/$ENV_FILE
|
||||
scp docker-compose.yml root@alpha.mintel.me:$SITE_DIR/docker-compose.yml
|
||||
ssh root@infra.mintel.me "mkdir -p $SITE_DIR"
|
||||
scp .env.deploy root@infra.mintel.me:$SITE_DIR/$ENV_FILE
|
||||
scp docker-compose.yml root@infra.mintel.me:$SITE_DIR/docker-compose.yml
|
||||
|
||||
ssh root@alpha.mintel.me "docker system prune -f"
|
||||
ssh root@infra.mintel.me "docker system prune -f"
|
||||
|
||||
# ── Deterministic cleanup: stop the EXACT compose project we're about to redeploy ──
|
||||
ssh root@alpha.mintel.me "cd $SITE_DIR && docker compose -p '${PROJECT_NAME}' --env-file '$ENV_FILE' down --remove-orphans 2>/dev/null || true"
|
||||
ssh root@infra.mintel.me "cd $SITE_DIR && docker compose -p '${PROJECT_NAME}' --env-file '$ENV_FILE' down --remove-orphans 2>/dev/null || true"
|
||||
|
||||
# ── Safety net: kill ANY container whose Traefik host rule matches our target domain ──
|
||||
# This catches ghost containers from prior deployments that used a different project name
|
||||
# (e.g. 'e-tibcom' vs 'etib-production' due to Docker Compose defaulting to dir name)
|
||||
ssh root@alpha.mintel.me "docker ps -q --filter label=traefik.http.routers.${PROJECT_NAME}.rule 2>/dev/null | xargs -r docker rm -f 2>/dev/null || true"
|
||||
ssh root@alpha.mintel.me "docker ps --format '{{.Names}}' | grep -E '^e-tibcom-' | xargs -r docker rm -f 2>/dev/null || true"
|
||||
ssh root@infra.mintel.me "docker ps -q --filter label=traefik.http.routers.${PROJECT_NAME}.rule 2>/dev/null | xargs -r docker rm -f 2>/dev/null || true"
|
||||
ssh root@infra.mintel.me "docker ps --format '{{.Names}}' | grep -E '^e-tibcom-' | xargs -r docker rm -f 2>/dev/null || true"
|
||||
|
||||
ssh root@alpha.mintel.me "cd $SITE_DIR && echo '${{ secrets.REGISTRY_PASS }}' | docker login registry.infra.mintel.me -u '${{ secrets.REGISTRY_USER }}' --password-stdin"
|
||||
ssh root@alpha.mintel.me "cd $SITE_DIR && docker compose -p '${PROJECT_NAME}' --env-file '$ENV_FILE' pull"
|
||||
ssh root@alpha.mintel.me "cd $SITE_DIR && docker compose -p '${PROJECT_NAME}' --env-file '$ENV_FILE' up -d --remove-orphans"
|
||||
ssh root@alpha.mintel.me "docker system prune -f --filter 'until=24h'"
|
||||
ssh root@infra.mintel.me "cd $SITE_DIR && echo '${{ secrets.REGISTRY_PASS }}' | docker login registry.infra.mintel.me -u '${{ secrets.REGISTRY_USER }}' --password-stdin"
|
||||
ssh root@infra.mintel.me "cd $SITE_DIR && docker compose -p '${PROJECT_NAME}' --env-file '$ENV_FILE' pull"
|
||||
ssh root@infra.mintel.me "cd $SITE_DIR && docker compose -p '${PROJECT_NAME}' --env-file '$ENV_FILE' up -d --remove-orphans"
|
||||
ssh root@infra.mintel.me "docker system prune -f --filter 'until=24h'"
|
||||
|
||||
# ──────────────────────────────────────────────────────────────────────────────
|
||||
# JOB 5: Post-Deploy Verification
|
||||
|
||||
@@ -21,8 +21,8 @@ layout: "fullBleed"
|
||||
showJobs={false}
|
||||
fairs={[
|
||||
{ name: 'Werkstatt Kabel 2026', date: '24. - 25. November 2026', type: 'Fachtagung', location: 'Wiesbaden', url: 'https://werkstatt-kabel.essociation.de/' },
|
||||
{ name: 'Intersolar München', date: '8. - 10. Juni 2027', type: 'Messe', location: 'München', url: 'https://www.intersolar.de/' },
|
||||
{ name: 'Windenergietage Potsdam', date: '09. - 11. November 2027', type: 'Fachkongress', location: 'Potsdam', url: 'https://www.windenergietage.de/' }
|
||||
{ name: 'Intersolar', date: '8. - 10. Juni 2027', type: 'Messe', location: 'München', url: 'https://www.intersolar.de/' },
|
||||
{ name: 'Windenergietage', date: '09. - 11. November 2027', type: 'Fachkongress', location: 'Potsdam', url: 'https://www.windenergietage.de/' }
|
||||
]}
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -21,8 +21,8 @@ layout: "fullBleed"
|
||||
showJobs={false}
|
||||
fairs={[
|
||||
{ name: 'Werkstatt Kabel 2026', date: 'November 24–25, 2026', type: 'Symposium', location: 'Wiesbaden', url: 'https://werkstatt-kabel.essociation.de/' },
|
||||
{ name: 'Intersolar Munich', date: 'June 8–10, 2027', type: 'Fair', location: 'Munich', url: 'https://www.intersolar.de/' },
|
||||
{ name: 'Wind Energy Days Potsdam', date: 'November 9–11, 2027', type: 'Specialist Congress', location: 'Potsdam', url: 'https://www.windenergietage.de/' }
|
||||
{ name: 'Intersolar', date: 'June 8–10, 2027', type: 'Fair', location: 'Munich', url: 'https://www.intersolar.de/' },
|
||||
{ name: 'Wind Energy Days', date: 'November 9–11, 2027', type: 'Specialist Congress', location: 'Potsdam', url: 'https://www.windenergietage.de/' }
|
||||
]}
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -13,7 +13,7 @@ fi
|
||||
# ── Configuration ──────────────────────────────────────────────────────────
|
||||
SOURCE_ENV="${1:-}" # local | testing | staging | prod
|
||||
TARGET_ENV="${2:-}" # testing | staging | prod
|
||||
SSH_HOST="root@alpha.mintel.me"
|
||||
SSH_HOST="root@infra.mintel.me"
|
||||
LOCAL_MEDIA_DIR="./public/media"
|
||||
|
||||
DRY_RUN=""
|
||||
|
||||
@@ -10,7 +10,7 @@ describe('Messen Content and Translations', () => {
|
||||
const content = fs.readFileSync(deMessenPath, 'utf8');
|
||||
|
||||
// 1. Intersolar München
|
||||
expect(content).toContain("name: 'Intersolar München'");
|
||||
expect(content).toContain("name: 'Intersolar'");
|
||||
expect(content).toContain("date: '8. - 10. Juni 2027'");
|
||||
expect(content).toContain("type: 'Messe'");
|
||||
expect(content).toContain("location: 'München'");
|
||||
@@ -24,7 +24,7 @@ describe('Messen Content and Translations', () => {
|
||||
|
||||
// 3. Windenergietage Potsdam (replaces Linstow 2026)
|
||||
expect(content).not.toContain("Linstow");
|
||||
expect(content).toContain("name: 'Windenergietage Potsdam'");
|
||||
expect(content).toContain("name: 'Windenergietage'");
|
||||
expect(content).toContain("date: '09. - 11. November 2027'");
|
||||
expect(content).toContain("type: 'Fachkongress'");
|
||||
expect(content).toContain("location: 'Potsdam'");
|
||||
@@ -34,7 +34,7 @@ describe('Messen Content and Translations', () => {
|
||||
const content = fs.readFileSync(enMessenPath, 'utf8');
|
||||
|
||||
// 1. Intersolar Munich
|
||||
expect(content).toContain("name: 'Intersolar Munich'");
|
||||
expect(content).toContain("name: 'Intersolar'");
|
||||
expect(content).toContain("date: 'June 8–10, 2027'");
|
||||
expect(content).toContain("type: 'Fair'");
|
||||
expect(content).toContain("location: 'Munich'");
|
||||
@@ -49,7 +49,7 @@ describe('Messen Content and Translations', () => {
|
||||
|
||||
// 3. Wind Energy Days Potsdam (replaces Linstow 2026)
|
||||
expect(content).not.toContain("Linstow");
|
||||
expect(content).toContain("name: 'Wind Energy Days Potsdam'");
|
||||
expect(content).toContain("name: 'Wind Energy Days'");
|
||||
expect(content).toContain("date: 'November 9–11, 2027'");
|
||||
expect(content).toContain("type: 'Specialist Congress'");
|
||||
expect(content).toContain("location: 'Potsdam'");
|
||||
|
||||
Reference in New Issue
Block a user