Le parcours complet
#!/usr/bin/env bash
# Enregistrez sous quickstart.sh, puis lancez : bash quickstart.sh
# set -e et --fail-with-body arrêtent le script au premier appel qui échoue
set -euo pipefail
LIFTPAD_TOKEN=lp_your_token
API=https://api.liftpad.app/v1
AUTH="Authorization: Bearer $LIFTPAD_TOKEN"
# Les noms de site sont partagés par tout Liftpad : gardez ce nom au hasard ou choisissez le vôtre
SITE=my-site-$RANDOM
# 1. Créer le site
curl -sS --fail-with-body -X POST "$API/sites" -H "$AUTH" -H "content-type: application/json" \
-d "{\"name\":\"$SITE\"}"
# 2. Une page, et le SHA-256 de son contenu (macOS : shasum -a 256)
mkdir -p public
printf '<!doctype html><html lang="en"><title>Hello</title><h1>Hello</h1></html>' > public/index.html
HASH=$(sha256sum public/index.html | cut -d' ' -f1)
# 3. Commencer un déploiement avec chaque chemin et son empreinte
DEPLOY=$(curl -sS --fail-with-body -X POST "$API/sites/$SITE/deploys" -H "$AUTH" -H "content-type: application/json" \
-d "{\"files\":{\"/index.html\":\"$HASH\"},\"title\":\"First deploy\"}" | jq -r .id)
# 4. Envoyer seulement les fichiers listés dans "required" (ici, la seule page)
curl -sS --fail-with-body -X PUT "$API/deploys/$DEPLOY/blobs/$HASH" -H "$AUTH" \
-H "content-type: application/octet-stream" --data-binary @public/index.html
# 5. Terminer : les vérifications tournent et l'aperçu fonctionne
curl -sS --fail-with-body -X POST "$API/deploys/$DEPLOY/finalize" -H "$AUTH"
# 6. Publier (publier un ancien déploiement est un retour arrière)
curl -sS --fail-with-body -X POST "$API/sites/$SITE/publish" -H "$AUTH" -H "content-type: application/json" \
-d "{\"deployId\":\"$DEPLOY\"}"
echo
echo "En ligne dans environ 5 secondes : https://$SITE.liftpad.ca"
Ce que fait chaque étape
createSite: le nom compte 3 à 40 caractères (a-z, 0-9, traits d'union simples). Si vous faites partie de plusieurs équipes, ajoutez"team": "votre-equipe".- L'empreinte est le SHA-256 hexadécimal minuscule du contenu exact du fichier.
createDeployreçoit chaque chemin (commençant par /) et son empreinte. Le champrequiredde la réponse liste les empreintes à envoyer. Les fichiers déjà envoyés par votre équipe ne sont pas redemandés : le deuxième déploiement d'un gros site n'envoie que ce qui a changé.uploadDeployFilereçoit le contenu brut d'un fichier demandé. Liftpad le compare à l'empreinte et refuse s'ils diffèrent.finalizeDeployrépond"state": "ready", l'adresse d'aperçu et un résumé avec la note des vérifications. S'il manque un fichier, la réponse est 409missing_blobsavec les empreintes à envoyer : envoyez-les et finalisez de nouveau.publishDeployle met en ligne en environ 5 secondes. Pour revenir en arrière, publiez un déploiement précédent (listDeploysles montre).
Le site est maintenant à https://$SITE.liftpad.ca, l'adresse affichée par le script. Les noms de site sont uniques dans tout Liftpad : si le nom est pris, l'étape 1 répond 409 exists et le script s'arrête là. Choisissez un autre nom et relancez-le. Connectez votre domaine avec addDomain, ou dans le tableau de bord.
Ensuite
Pour de vrais dossiers, la CLI fait tout cela, en parallèle, avec reprises.