Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Vérifications d'une pull request vers main (toutes deux obligatoires pour merger) :
# - Build : le site se construit (les fichiers de réglage et le contenu sont valides) ;
# - Source dev : la PR part de la branche dev.
# Le build tourne aussi à chaque push sur dev, pour voir tôt ce qui casse.
name: CI

on:
pull_request:
branches: [main]
push:
branches: [dev]

permissions:
contents: read

jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 22
cache: npm

- name: Install dependencies
run: npm ci

- name: Build
run: npm run build

source:
name: Source dev
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- name: La PR vers main doit partir de dev
env:
HEAD_REF: ${{ github.head_ref }}
run: |
if [ "$HEAD_REF" != "dev" ]; then
echo "::error::Les PR vers main doivent partir de la branche dev (branche actuelle : $HEAD_REF)."
exit 1
fi
echo "PR depuis dev : OK"
41 changes: 18 additions & 23 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
name: Deploy to GitHub Pages
# Mise en production : à chaque merge dans main, construit le site et publie dist/ dans la
# branche gh-pages, servie par GitHub Pages (Settings → Pages : branche gh-pages, dossier /).
# gh-pages est protégée : seule la clé de déploiement GH_PAGES_DEPLOY_KEY peut y écrire.
name: Deploy to gh-pages

on:
push:
branches:
- main
branches: [main]
workflow_dispatch:

permissions:
contents: read
pages: write
id-token: write

concurrency:
group: pages
cancel-in-progress: true
group: deploy-gh-pages
cancel-in-progress: false

jobs:
build:
deploy:
name: Build & deploy
runs-on: ubuntu-latest
steps:
- name: Checkout
Expand All @@ -25,7 +26,7 @@ jobs:
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
node-version: 22
cache: npm

- name: Install dependencies
Expand All @@ -34,18 +35,12 @@ jobs:
- name: Build
run: npm run build

- name: Upload artifact
uses: actions/upload-pages-artifact@v3
- name: Publish dist/ to gh-pages
uses: peaceiris/actions-gh-pages@v4
with:
path: dist

deploy:
needs: build
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
deploy_key: ${{ secrets.GH_PAGES_DEPLOY_KEY }}
publish_branch: gh-pages
publish_dir: ./dist
user_name: github-actions[bot]
user_email: 41898282+github-actions[bot]@users.noreply.github.com
full_commit_message: "deploy: ${{ github.sha }}"
31 changes: 29 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Portfolio · orelink.github.io

Site statique (Astro), une seule page qui défile, pensée autant pour l'ordinateur que
pour le téléphone. Publié sur GitHub Pages à chaque push sur `main`
(`.github/workflows/deploy.yml`).
pour le téléphone. Publié sur GitHub Pages à chaque merge dans `main` (voir
« Branches et mise en ligne »).

```bash
npm install
Expand All @@ -11,6 +11,33 @@ npm run build # génère dist/ (et vérifie tous les réglages)
npm run preview # sert dist/
```

## Branches et mise en ligne

| Branche | Rôle | Qui peut y écrire |
|---|---|---|
| `dev` | développement : on y pousse son travail | tout le monde (push direct) |
| `main` | production : ce qui est en ligne | personne en direct, uniquement par PR depuis `dev` |
| `gh-pages` | le site construit (`dist/`), servi par GitHub Pages | uniquement l'action de déploiement |

Le circuit :

1. Travailler sur `dev`, pousser : la CI construit le site à chaque push.
2. Ouvrir une PR `dev` → `main`. Deux vérifications doivent passer pour pouvoir merger :
**Build** (le site se construit) et **Source dev** (la PR part bien de `dev`).
3. Merger la PR : `.github/workflows/deploy.yml` construit `main` et publie `dist/` dans
`gh-pages`. Le site est en ligne une à deux minutes plus tard.

Les règles sont des *rulesets* GitHub (Settings → Rules → Rulesets) :

- **main** : PR obligatoire, vérifications Build et Source dev obligatoires, ni force push ni
suppression. Personne ne les contourne, administrateur compris.
- **gh-pages** : écriture réservée à la clé de déploiement « gh-pages deploy (GitHub
Actions) » (Settings → Deploy keys), dont la partie privée est le secret
`GH_PAGES_DEPLOY_KEY` de l'action. Ni force push ni suppression.

GitHub Pages sert la branche `gh-pages`, dossier `/` (Settings → Pages). Pour relancer une
mise en ligne sans changement : Actions → Deploy to gh-pages → Run workflow.

## Modifier le site : les fichiers de réglage

Tout ce qui s'affiche vient de ces fichiers. On n'a jamais besoin de toucher au code.
Expand Down
Loading