mirror of
https://github.com/infinition/Bjorn.git
synced 2026-02-04 19:31:02 +00:00
test2
This commit is contained in:
251
.github/workflows/reusable-wiki-sync.yml
vendored
Normal file
251
.github/workflows/reusable-wiki-sync.yml
vendored
Normal file
@@ -0,0 +1,251 @@
|
||||
name: Central Wiki Sync Logic
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
source_repo:
|
||||
required: false
|
||||
type: string
|
||||
default: "infinition/AcidWiki"
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
pages: write
|
||||
id-token: write
|
||||
|
||||
jobs:
|
||||
core-sync:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Caller Repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Ensure Wiki Directory Exists
|
||||
run: mkdir -p wiki/docs wiki/themes wiki/assets .well-known
|
||||
|
||||
# 1. Onboarding Automatique
|
||||
- name: Create Default Config if Missing
|
||||
run: |
|
||||
if [ ! -f "acidwiki.json" ]; then
|
||||
echo "⚠️ acidwiki.json not found. Creating default configuration..."
|
||||
cat <<EOF > acidwiki.json
|
||||
{
|
||||
"debug": false,
|
||||
"social": {
|
||||
"discord": null,
|
||||
"reddit": null
|
||||
},
|
||||
"buymeacoffee": "https://buymeacoffee.com/infinition"
|
||||
}
|
||||
EOF
|
||||
else
|
||||
echo "✅ acidwiki.json found. Keeping existing configuration."
|
||||
fi
|
||||
|
||||
- name: Sync Core Files from Source
|
||||
env:
|
||||
SOURCE_REPO: ${{ inputs.source_repo }}
|
||||
run: |
|
||||
# A. CLONE DU MASTER
|
||||
echo "⬇️ Cloning engine from $SOURCE_REPO..."
|
||||
git clone --depth 1 --branch main https://github.com/$SOURCE_REPO.git temp_source
|
||||
|
||||
# B. PROTECTION DES ASSETS LOCAUX
|
||||
|
||||
# 1. Protection du Logo
|
||||
if [ -f "wiki/assets/logo.png" ]; then
|
||||
echo "🛡️ Custom logo detected. Protecting local version..."
|
||||
rm -f temp_source/wiki/assets/logo.png
|
||||
fi
|
||||
|
||||
# 2. Protection des Thèmes
|
||||
if [ -d "wiki/themes" ]; then
|
||||
for local_theme in wiki/themes/*.css; do
|
||||
if [ -f "$local_theme" ]; then
|
||||
theme_name=$(basename "$local_theme")
|
||||
if [ -f "temp_source/wiki/themes/$theme_name" ]; then
|
||||
echo "🛡️ Custom theme detected ($theme_name). Keeping local version."
|
||||
rm "temp_source/wiki/themes/$theme_name"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
# 3. Protection Security (Racine & .well-known)
|
||||
if [ -f "security.txt" ]; then
|
||||
echo "🛡️ Custom security.txt detected (root). Keeping local version."
|
||||
rm -f temp_source/security.txt
|
||||
fi
|
||||
if [ -f ".well-known/security.txt" ]; then
|
||||
echo "🛡️ Custom .well-known/security.txt detected. Keeping local version."
|
||||
rm -f temp_source/.well-known/security.txt
|
||||
fi
|
||||
|
||||
# C. COPIE DES FICHIERS (CHEMINS CORRIGÉS)
|
||||
|
||||
# Moteur & Système (Tout est à la racine de la source)
|
||||
cp -fv temp_source/index.html .
|
||||
cp -fv temp_source/manifest.json .
|
||||
cp -fv temp_source/sw.js .
|
||||
cp -fv temp_source/robots.txt . || true
|
||||
cp -fv temp_source/.nojekyll . || true
|
||||
|
||||
# Fichiers Security (S'ils n'ont pas été supprimés par la protection)
|
||||
if [ -f "temp_source/security.txt" ]; then cp -fv temp_source/security.txt .; fi
|
||||
|
||||
# Copie récursive de .well-known s'il existe dans la source
|
||||
if [ -d "temp_source/.well-known" ]; then
|
||||
# On copie le contenu sans écraser ce qui est protégé
|
||||
cp -rn temp_source/.well-known/* .well-known/ || true
|
||||
fi
|
||||
|
||||
# Config Template
|
||||
cp -rv temp_source/wiki/config.js wiki/
|
||||
|
||||
# Thèmes (Safe Copy - vérifie s'il reste des fichiers)
|
||||
if [ -d "temp_source/wiki/themes" ] && [ "$(ls -A temp_source/wiki/themes)" ]; then
|
||||
echo "📦 Copying new themes..."
|
||||
cp -r temp_source/wiki/themes/* wiki/themes/
|
||||
else
|
||||
echo "✅ No new themes to copy."
|
||||
fi
|
||||
|
||||
# Assets (Safe Copy - vérifie s'il reste des fichiers)
|
||||
if [ -d "temp_source/wiki/assets" ] && [ "$(ls -A temp_source/wiki/assets)" ]; then
|
||||
echo "📦 Copying new assets..."
|
||||
cp -r temp_source/wiki/assets/* wiki/assets/
|
||||
else
|
||||
echo "✅ No new assets to copy."
|
||||
fi
|
||||
|
||||
# Nettoyage
|
||||
rm -rf temp_source
|
||||
|
||||
- name: Dynamic Config Injection
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
REPO_FULL: ${{ github.repository }}
|
||||
run: |
|
||||
CONFIG_FILE="wiki/config.js"
|
||||
JSON_FILE="acidwiki.json"
|
||||
MANIFEST_FILE="manifest.json"
|
||||
|
||||
# --- 1. DÉTECTION ---
|
||||
REPO_NAME=$(echo "$REPO_FULL" | awk -F '/' '{print $2}')
|
||||
YEAR=$(date +'%Y')
|
||||
|
||||
TAG_REL=$(gh api repos/$REPO_FULL/releases/latest --jq .tag_name 2>/dev/null || echo "")
|
||||
TAG_LIST=$(gh api repos/$REPO_FULL/tags --jq '.[0].name' 2>/dev/null || echo "")
|
||||
|
||||
LATEST_TAG=""
|
||||
if [[ -n "$TAG_REL" && "$TAG_REL" != *\{* ]]; then
|
||||
LATEST_TAG="$TAG_REL"
|
||||
elif [[ -n "$TAG_LIST" && "$TAG_LIST" != *\{* ]]; then
|
||||
LATEST_TAG="$TAG_LIST"
|
||||
fi
|
||||
|
||||
echo "Repo: $REPO_NAME | Version finale: '$LATEST_TAG'"
|
||||
|
||||
# --- 2. LECTURE JSON ---
|
||||
DISCORD=""
|
||||
REDDIT=""
|
||||
COFFEE="https://buymeacoffee.com/infinition"
|
||||
DEBUG_MODE="false"
|
||||
|
||||
if [ -f "$JSON_FILE" ]; then
|
||||
echo "Loading acidwiki.json..."
|
||||
DISCORD=$(jq -r '.social.discord // empty' $JSON_FILE)
|
||||
REDDIT=$(jq -r '.social.reddit // empty' $JSON_FILE)
|
||||
JSON_COFFEE=$(jq -r '.buymeacoffee // empty' $JSON_FILE)
|
||||
if [ -n "$JSON_COFFEE" ]; then COFFEE=$JSON_COFFEE; fi
|
||||
DEBUG_VAL=$(jq -r '.debug' $JSON_FILE)
|
||||
if [ "$DEBUG_VAL" == "true" ]; then DEBUG_MODE="true"; fi
|
||||
fi
|
||||
|
||||
# --- 3. INJECTION CONFIG JS ---
|
||||
|
||||
# Identité
|
||||
sed -i "s|projectName: \".*\"|projectName: \"${REPO_NAME^^}\"|g" $CONFIG_FILE
|
||||
sed -i "s|projectSubtitle: \".*\"|projectSubtitle: \"${REPO_NAME^^} WIKI\"|g" $CONFIG_FILE
|
||||
sed -i "s|description: \".*\"|description: \"Official Documentation and Wiki for ${REPO_NAME}\"|g" $CONFIG_FILE
|
||||
sed -i "s|repo: \".*\"|repo: \"$REPO_FULL\"|g" $CONFIG_FILE
|
||||
|
||||
# Footer & Logo
|
||||
sed -i "s|footerText: \".*\"|footerText: \"© $YEAR ${REPO_NAME^^} WIKI - All rights reserved\"|g" $CONFIG_FILE
|
||||
sed -i "s|logoPath: \".*\"|logoPath: \"wiki/assets/logo.png\"|g" $CONFIG_FILE
|
||||
sed -i "s|manifestPath: \".*\"|manifestPath: \"manifest.json\"|g" $CONFIG_FILE
|
||||
sed -i "s|debug: false|debug: $DEBUG_MODE|g" $CONFIG_FILE
|
||||
|
||||
# Github & Social
|
||||
sed -i "s|github: \".*\"|github: \"https://github.com/$REPO_FULL\"|g" $CONFIG_FILE
|
||||
sed -i "s|githubLabel: \".*\"|githubLabel: \"${REPO_NAME^^}\"|g" $CONFIG_FILE
|
||||
sed -i "s|buyMeACoffee: \".*\"|buyMeACoffee: \"$COFFEE\"|g" $CONFIG_FILE
|
||||
|
||||
if [ -n "$DISCORD" ]; then sed -i "s|discord: .*|discord: \"$DISCORD\",|g" $CONFIG_FILE
|
||||
else sed -i "s|discord: .*|discord: null,|g" $CONFIG_FILE; fi
|
||||
|
||||
if [ -n "$REDDIT" ]; then sed -i "s|reddit: .*|reddit: \"$REDDIT\",|g" $CONFIG_FILE
|
||||
else sed -i "s|reddit: .*|reddit: null,|g" $CONFIG_FILE; fi
|
||||
|
||||
# Menus & Versioning
|
||||
sed -i "s|top: \[.*|top: [],|g" $CONFIG_FILE
|
||||
sed -i "s|bottom: \[.*|bottom: []|g" $CONFIG_FILE
|
||||
sed -i "s|type: \"github\"|type: \"local\"|g" $CONFIG_FILE
|
||||
|
||||
if [ -n "$LATEST_TAG" ]; then
|
||||
sed -i "s|manualVersion: \".*\"|manualVersion: \"$LATEST_TAG\"|g" $CONFIG_FILE
|
||||
else
|
||||
sed -i "s|manualVersion: \".*\"|manualVersion: \"\"|g" $CONFIG_FILE
|
||||
fi
|
||||
sed -i "s|manualDate: \".*\"|manualDate: \"$(date +'%Y-%m-%d')\"|g" $CONFIG_FILE
|
||||
|
||||
# --- 4. INJECTION MANIFEST PWA ---
|
||||
echo "Injecting Manifest Data..."
|
||||
if [ -f "$MANIFEST_FILE" ]; then
|
||||
jq --arg name "${REPO_NAME^^} WIKI" \
|
||||
--arg short "$REPO_NAME" \
|
||||
--arg desc "Official Documentation and Wiki for $REPO_NAME" \
|
||||
--arg icon "wiki/assets/logo.png" \
|
||||
'.name = $name | .short_name = $short | .description = $desc | .icons[].src = $icon | .shortcuts[].icons[].src = $icon' \
|
||||
$MANIFEST_FILE > manifest.tmp && mv manifest.tmp $MANIFEST_FILE
|
||||
fi
|
||||
|
||||
# --- 5. INJECTION SECURITY.TXT (DYNAMIQUE) ---
|
||||
# Calcule la date d'expiration (+1 an)
|
||||
EXP_DATE=$(date -d "+1 year" -u +"%Y-%m-%dT%H:%M:%S.000Z")
|
||||
|
||||
update_security_file() {
|
||||
local file=$1
|
||||
if [ -f "$file" ]; then
|
||||
echo "Updating $file..."
|
||||
# Remplace l'ancien repo (source) par le nouveau (ex: infinition/AcidWiki -> infinition/Bjorn)
|
||||
sed -i "s|infinition/AcidWiki|$REPO_FULL|g" "$file"
|
||||
# Met à jour la date d'expiration
|
||||
sed -i "s|Expires: .*|Expires: $EXP_DATE|g" "$file"
|
||||
fi
|
||||
}
|
||||
|
||||
update_security_file "security.txt"
|
||||
update_security_file ".well-known/security.txt"
|
||||
|
||||
- name: Commit and Push Changes
|
||||
run: |
|
||||
git config --local user.email "action@github.com"
|
||||
git config --local user.name "GitHub Action"
|
||||
|
||||
# Ajout de tous les fichiers (Système, Contenu, Sécurité)
|
||||
git add index.html wiki/ acidwiki.json manifest.json sw.js robots.txt .nojekyll security.txt .well-known/
|
||||
|
||||
git diff --quiet && git diff --staged --quiet || (git commit -m "chore: update wiki config [skip ci]" && git push)
|
||||
|
||||
- name: Auto-Configure GitHub Pages
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
REPO: ${{ github.repository }}
|
||||
run: |
|
||||
gh api "repos/$REPO/pages" -X POST -F "source[branch]=main" -F "source[path]=/" --silent || true
|
||||
OWNER="${REPO%%/*}"
|
||||
REPO_NAME="${REPO#*/}"
|
||||
gh api "repos/$REPO" -X PATCH -F "homepage=https://$OWNER.github.io/$REPO_NAME/" --silent || true
|
||||
28
.github/workflows/wiki-sync.yml
vendored
Normal file
28
.github/workflows/wiki-sync.yml
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
name: Wiki Sync
|
||||
|
||||
on:
|
||||
# 1. Déclenchement manuel quand tu pushes sur ce repo
|
||||
push:
|
||||
branches: [ main ]
|
||||
paths:
|
||||
- 'wiki/**'
|
||||
- 'acidwiki.json'
|
||||
- '.github/workflows/wiki-sync.yml'
|
||||
|
||||
# 2. Bouton manuel dans l'interface Actions
|
||||
workflow_dispatch:
|
||||
|
||||
# 3. AUTOMATIQUE : Tous les jours à 4h00 du matin (UTC)
|
||||
schedule:
|
||||
- cron: '0 4 * * *'
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
pages: write
|
||||
id-token: write
|
||||
|
||||
jobs:
|
||||
deploy-wiki:
|
||||
# Appelle le script stocké sur AcidWiki
|
||||
# "@main" signifie qu'il prendra TOUJOURS la dernière version du workflow maître
|
||||
uses: infinition/AcidWiki/.github/workflows/reusable-wiki-sync.yml@main
|
||||
Reference in New Issue
Block a user