Renomme le jeu en Emberwild + déploiement Gitea Actions
Deploy / deploy (push) Successful in 1m3s

- Jeu « Project One » → « Emberwild » (slug `emberwild`) dans lib/games.ts
  et toutes les références (accueil, devblog, README)
- Photo d'équipe (CEO/dev) câblée sur /image/teams/CEO_Dev.jpg
- CI/CD porté de GitHub Actions vers Gitea Actions
  (.gitea/workflows/deploy.yml) : build + déploiement auto au push sur master
- deploy.sh : déploiement manuel de secours

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-01 20:48:41 +02:00
parent 0cd61f2a12
commit 1d2c48cb93
11 changed files with 129 additions and 51 deletions
+37
View File
@@ -0,0 +1,37 @@
name: Deploy
# Déclenché à chaque push sur master → build + déploiement automatique.
on:
push:
branches: [master]
workflow_dispatch:
concurrency:
group: deploy-${{ github.ref }}
cancel-in-progress: false
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install dependencies
run: npm ci
- name: Build
run: npm run build
- name: Deploy to /var/www/highland + restart PM2
run: |
set -e
mkdir -p /var/www/highland
rsync -a --delete \
--exclude='.git' \
--exclude='.env' \
--exclude='.env.local' \
./ /var/www/highland/
cd /var/www/highland
pm2 restart highland --update-env || pm2 start npm --name highland -- start
pm2 save
-30
View File
@@ -1,30 +0,0 @@
name: Deploy to VPS
on:
push:
branches: [master]
workflow_dispatch:
concurrency:
group: deploy-${{ github.ref }}
cancel-in-progress: false
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Deploy via SSH
uses: appleboy/ssh-action@v1.2.0
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
port: ${{ secrets.SSH_PORT }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
set -e
cd /var/www/highland
git pull origin master
npm ci
npm run build
pm2 restart highland --update-env
pm2 save
+3
View File
@@ -37,6 +37,9 @@ yarn-error.log*
# vercel # vercel
.vercel .vercel
# deploy
.deploy-tmp.tar.gz
# typescript # typescript
*.tsbuildinfo *.tsbuildinfo
next-env.d.ts next-env.d.ts
+14 -4
View File
@@ -62,7 +62,7 @@ date: "2026-06-01"
excerpt: "One-line summary for listings and SEO." excerpt: "One-line summary for listings and SEO."
author: "Highland Games Studio" author: "Highland Games Studio"
tags: ["devlog"] tags: ["devlog"]
game: "project-one" game: "emberwild"
--- ---
Your MDX content here. Your MDX content here.
@@ -70,9 +70,19 @@ Your MDX content here.
## Deployment ## Deployment
Pushes to `master` deploy to the VPS via the GitHub Actions workflow Pushes to `master` deploy to the Hetzner server via the Gitea Actions workflow
(`.github/workflows/deploy.yml`), which SSHes in, pulls, builds, and restarts the (`.gitea/workflows/deploy.yml`), which SSHes in, pulls, builds, and restarts the
PM2 process. Requires the `SSH_*` repository secrets. PM2 process (`highland`, in `/var/www/highland`).
Requires these **repo secrets** (Gitea → repo → Settings → Actions → Secrets):
`SSH_HOST`, `SSH_USER`, `SSH_PORT`, `SSH_PRIVATE_KEY`.
Server-side prerequisites (one-time):
- A registered Gitea `act_runner` with the `ubuntu-latest` label.
- `/var/www/highland` is a clone of this repo whose `origin` can pull the **private**
Gitea repo non-interactively (deploy key or token in the remote URL).
- Node + `pm2` installed, with the app running as the `highland` process.
## Known TODOs ## Known TODOs
+6 -5
View File
@@ -22,17 +22,18 @@ Dernière mise à jour : 2026-06-22
vérifier le domaine, et renseigner `RESEND_API_KEY` / `CONTACT_TO_EMAIL` vérifier le domaine, et renseigner `RESEND_API_KEY` / `CONTACT_TO_EMAIL`
/ `CONTACT_FROM_EMAIL` (en local dans `.env.local` + en prod sur le VPS) / `CONTACT_FROM_EMAIL` (en local dans `.env.local` + en prod sur le VPS)
- [ ] **Déploiement à valider en réel** - [ ] **Déploiement à valider en réel** (Gitea Actions → Hetzner)
- [x] Trigger workflow corrigé (`main` `master`) - [x] Workflow porté sur Gitea (`.gitea/workflows/deploy.yml`, trigger `master`)
- [ ] Vérifier que les secrets `SSH_*` sont bien configurés sur GitHub - [ ] Configurer les secrets `SSH_*` dans Gitea (repo → Settings → Actions → Secrets)
- [ ] Tester un push qui déclenche bien le deploy sur le VPS - [ ] Vérifier que `/var/www/highland` peut `git pull` le repo Gitea privé (deploy key/token)
- [ ] Tester un push qui déclenche bien le deploy sur le Hetzner
--- ---
## 🟠 P1 — Important (contenu avant lancement public) ## 🟠 P1 — Important (contenu avant lancement public)
- [ ] **Remplacer tout le contenu placeholder** - [ ] **Remplacer tout le contenu placeholder**
- [ ] Vrai nom du jeu (au lieu de « Project One ») → `lib/games.ts` - [x] Vrai nom du jeu **Emberwild** (`lib/games.ts`, slug `emberwild`)
- [ ] Vrais noms / bios de l'équipe (au lieu de « Founder One / Two ») → `app/studio/page.tsx` - [ ] Vrais noms / bios de l'équipe (au lieu de « Founder One / Two ») → `app/studio/page.tsx`
- [ ] Vrais liens réseaux sociaux (actuellement tous en `href="#"`) → `app/components/SocialLinks.tsx` - [ ] Vrais liens réseaux sociaux (actuellement tous en `href="#"`) → `app/components/SocialLinks.tsx`
- [ ] Vraies images de jeu / screenshots (le logo sert de placeholder partout) - [ ] Vraies images de jeu / screenshots (le logo sert de placeholder partout)
+1 -1
View File
@@ -175,7 +175,7 @@ export default function Home() {
transition={{ duration: 0.9, delay: 0.1 }} transition={{ duration: 0.9, delay: 0.1 }}
> >
<Link <Link
href="/games/project-one" href="/games/emberwild"
className="group relative aspect-[16/9] bg-surface border border-border overflow-hidden block hover:border-accent transition-colors duration-500" className="group relative aspect-[16/9] bg-surface border border-border overflow-hidden block hover:border-accent transition-colors duration-500"
> >
<div className="absolute inset-0 flex items-center justify-center"> <div className="absolute inset-0 flex items-center justify-center">
+20 -8
View File
@@ -12,11 +12,13 @@ const team = [
name: "Founder One", name: "Founder One",
role: "Co-founder · Programming · Design", role: "Co-founder · Programming · Design",
bio: "Builds the systems, gameplay loops and tools that bring our worlds to life.", bio: "Builds the systems, gameplay loops and tools that bring our worlds to life.",
photo: "/image/teams/CEO_Dev.jpg",
}, },
{ {
name: "Founder Two", name: "Founder Two",
role: "Co-founder · Art · Design", role: "Co-founder · Art · Design",
bio: "Shapes the visual identity, environments and feel of every Highland Games world.", bio: "Shapes the visual identity, environments and feel of every Highland Games world.",
photo: null,
}, },
]; ];
@@ -88,14 +90,24 @@ export default function StudioPage() {
<div className="grid sm:grid-cols-2 gap-8"> <div className="grid sm:grid-cols-2 gap-8">
{team.map((m) => ( {team.map((m) => (
<div key={m.name} className="border border-border p-8 bg-surface"> <div key={m.name} className="border border-border p-8 bg-surface">
<div className="w-20 h-20 bg-surface-elevated border border-border flex items-center justify-center mb-6"> <div className="w-20 h-20 bg-surface-elevated border border-border flex items-center justify-center mb-6 overflow-hidden">
<Image {m.photo ? (
src="/image/Studio/Logo Flat.png" <Image
alt="" src={m.photo}
width={40} alt={m.name}
height={28} width={80}
className="opacity-40" height={80}
/> className="w-full h-full object-cover"
/>
) : (
<Image
src="/image/Studio/Logo Flat.png"
alt=""
width={40}
height={28}
className="opacity-40"
/>
)}
</div> </div>
<h3 className="font-display text-2xl tracking-wider mb-1"> <h3 className="font-display text-2xl tracking-wider mb-1">
{m.name} {m.name}
+1 -1
View File
@@ -4,7 +4,7 @@ date: "2026-05-09"
author: "Highland Games Studio" author: "Highland Games Studio"
excerpt: "We're two friends building a survival game and a studio at the same time. Here's where we're starting." excerpt: "We're two friends building a survival game and a studio at the same time. Here's where we're starting."
tags: ["studio", "intro"] tags: ["studio", "intro"]
game: "project-one" game: "emberwild"
--- ---
# Welcome to the Highland # Welcome to the Highland
+45
View File
@@ -0,0 +1,45 @@
#!/usr/bin/env bash
# Déploiement du site Highland Games Studio / Emberwild sur le serveur Hetzner.
#
# Usage (depuis la racine du projet, dans Git Bash) :
# ./deploy.sh
#
# Ce que ça fait : archive le code (sans node_modules/.next/.git), l'envoie sur
# le serveur, installe les dépendances, build en prod et redémarre PM2.
set -euo pipefail
# --- Config serveur ---
SERVER="root@167.233.134.148"
KEY="$HOME/.ssh/id_rsa"
REMOTE_DIR="/var/www/highland"
APP_NAME="highland"
# Archive créée HORS du projet (sinon tar voit le dossier changer pendant la lecture).
TAR="${TMPDIR:-/tmp}/highland-deploy-$$.tar.gz"
cd "$(dirname "$0")"
echo "==> 1/3 Archive du projet..."
tar --exclude='./node_modules' --exclude='./.next' --exclude='./.git' \
--exclude='./tsconfig.tsbuildinfo' \
-czf "$TAR" .
echo "==> 2/3 Envoi vers le serveur ($SERVER)..."
scp -i "$KEY" -o BatchMode=yes "$TAR" "$SERVER:/tmp/site.tar.gz"
echo "==> 3/3 Extraction + build + redémarrage..."
ssh -i "$KEY" -o BatchMode=yes "$SERVER" \
"REMOTE_DIR='$REMOTE_DIR' APP_NAME='$APP_NAME' bash -s" <<'REMOTE'
set -e
mkdir -p "$REMOTE_DIR"
tar -xzf /tmp/site.tar.gz -C "$REMOTE_DIR"
cd "$REMOTE_DIR"
npm ci
npm run build
pm2 restart "$APP_NAME" --update-env || pm2 start npm --name "$APP_NAME" -- start
pm2 save
rm -f /tmp/site.tar.gz
REMOTE
rm -f "$TAR"
echo ""
echo "==> ✅ Déployé ! → https://highlandgamesstudio.com"
+2 -2
View File
@@ -11,8 +11,8 @@ export type Game = {
export const games: Game[] = [ export const games: Game[] = [
{ {
slug: "project-one", slug: "emberwild",
title: "Project One", title: "Emberwild",
status: "in-development", status: "in-development",
tagline: "A survival adventure across shifting horizons.", tagline: "A survival adventure across shifting horizons.",
description: description:
Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB