feat: publish CodexPi contest snapshot
Some checks are pending
Qualité / tests (push) Waiting to run
Some checks are pending
Qualité / tests (push) Waiting to run
This commit is contained in:
46
scripts/export-public-source.sh
Normal file
46
scripts/export-public-source.sh
Normal file
@@ -0,0 +1,46 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
BASE="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
target_input="${1:-}"
|
||||
if [[ -z "$target_input" ]]; then
|
||||
echo "Usage: $0 /chemin/vers/CodexPi-public" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
TARGET="$(realpath -m -- "$target_input")"
|
||||
case "$TARGET" in
|
||||
"$BASE"|"$BASE"/*)
|
||||
echo "Le dossier public doit être créé en dehors du dépôt privé." >&2
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
if [[ -e "$TARGET" ]]; then
|
||||
echo "Refus d’écraser un chemin existant : $TARGET" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
cd "$BASE"
|
||||
"$BASE/scripts/check-secrets.sh" --worktree
|
||||
mkdir -p -- "$TARGET"
|
||||
cleanup() {
|
||||
if [[ "${completed:-0}" != 1 && -d "$TARGET" ]]; then
|
||||
find "$TARGET" -mindepth 1 -delete
|
||||
rmdir "$TARGET" 2>/dev/null || true
|
||||
fi
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
git ls-files --cached --others --exclude-standard -z |
|
||||
while IFS= read -r -d '' path; do
|
||||
[[ -e "$path" || -L "$path" ]] && printf '%s\0' "$path"
|
||||
done |
|
||||
tar --null --files-from=- --create --file=- |
|
||||
tar --extract --file=- --directory="$TARGET"
|
||||
|
||||
git -C "$TARGET" init -b main >/dev/null
|
||||
git -C "$TARGET" config core.hooksPath .githooks
|
||||
"$TARGET/scripts/check-secrets.sh" --worktree
|
||||
completed=1
|
||||
echo "Copie publique prête : $TARGET"
|
||||
echo "Elle possède un nouvel historique Git vide et ne contient ni .env, ni data, ni ancien commit."
|
||||
Reference in New Issue
Block a user