- 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:
@@ -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
|
||||||
@@ -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
|
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -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">
|
||||||
|
|||||||
+13
-1
@@ -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,7 +90,16 @@ 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">
|
||||||
|
{m.photo ? (
|
||||||
|
<Image
|
||||||
|
src={m.photo}
|
||||||
|
alt={m.name}
|
||||||
|
width={80}
|
||||||
|
height={80}
|
||||||
|
className="w-full h-full object-cover"
|
||||||
|
/>
|
||||||
|
) : (
|
||||||
<Image
|
<Image
|
||||||
src="/image/Studio/Logo Flat.png"
|
src="/image/Studio/Logo Flat.png"
|
||||||
alt=""
|
alt=""
|
||||||
@@ -96,6 +107,7 @@ export default function StudioPage() {
|
|||||||
height={28}
|
height={28}
|
||||||
className="opacity-40"
|
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}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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 |
Reference in New Issue
Block a user