mirror of
https://github.com/A6-9V/MQL5-Google-Onedrive.git
synced 2026-04-11 13:00:56 +00:00
176 lines
6 KiB
YAML
176 lines
6 KiB
YAML
name: Repository Sync with L6-N9
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
sync_direction:
|
|
description: 'Sync direction'
|
|
required: true
|
|
default: 'push'
|
|
type: choice
|
|
options:
|
|
- push
|
|
- pull
|
|
- bidirectional
|
|
push:
|
|
branches:
|
|
- main
|
|
- master
|
|
schedule:
|
|
# Run auto-sync every 6 hours
|
|
- cron: '0 */6 * * *'
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
concurrency:
|
|
group: repo-sync-${{ github.ref }}
|
|
cancel-in-progress: false
|
|
|
|
jobs:
|
|
sync-repositories:
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
# Target repository for sync
|
|
TARGET_REPO: ${{ secrets.L6_N9_REPO || 'A6-9V/L6-N9' }}
|
|
SYNC_BRANCH: ${{ secrets.L6_N9_SYNC_BRANCH || 'main' }}
|
|
steps:
|
|
- name: Checkout source repository
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
token: ${{ secrets.REPO_SYNC_TOKEN || secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Check sync configuration
|
|
id: check_config
|
|
env:
|
|
SYNC_TOKEN: ${{ secrets.REPO_SYNC_TOKEN }}
|
|
REST_API_KEY: ${{ secrets.REST_API_KEY }}
|
|
run: |
|
|
if [[ -z "${SYNC_TOKEN:-}" ]]; then
|
|
echo "SYNC_ENABLED=false" >> "$GITHUB_ENV"
|
|
echo "⚠️ Skipping repository sync: REPO_SYNC_TOKEN not configured."
|
|
exit 0
|
|
fi
|
|
echo "SYNC_ENABLED=true" >> "$GITHUB_ENV"
|
|
|
|
if [[ -z "${REST_API_KEY:-}" ]]; then
|
|
echo "⚠️ Warning: REST_API_KEY not configured. API authentication will be skipped."
|
|
else
|
|
echo "✅ REST API key configured for secure sync."
|
|
fi
|
|
|
|
- name: Setup Git
|
|
if: env.SYNC_ENABLED == 'true'
|
|
run: |
|
|
git config --global user.name "github-actions[bot]"
|
|
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
|
|
|
- name: Clone target repository (L6-N9)
|
|
if: env.SYNC_ENABLED == 'true'
|
|
env:
|
|
SYNC_TOKEN: ${{ secrets.REPO_SYNC_TOKEN }}
|
|
run: |
|
|
git clone https://${SYNC_TOKEN}@github.com/${TARGET_REPO}.git target-repo
|
|
cd target-repo
|
|
git checkout ${SYNC_BRANCH} || git checkout -b ${SYNC_BRANCH}
|
|
|
|
- name: Sync changes to L6-N9
|
|
if: env.SYNC_ENABLED == 'true'
|
|
run: |
|
|
# Determine sync direction
|
|
SYNC_DIRECTION="${{ github.event.inputs.sync_direction || 'push' }}"
|
|
|
|
echo "🔄 Syncing with direction: ${SYNC_DIRECTION}"
|
|
|
|
if [[ "${SYNC_DIRECTION}" == "push" || "${SYNC_DIRECTION}" == "bidirectional" ]]; then
|
|
echo "📤 Pushing changes to L6-N9..."
|
|
|
|
# Copy selected directories to target
|
|
mkdir -p target-repo/mt5
|
|
cp -r mt5/MQL5 target-repo/mt5/ || true
|
|
|
|
mkdir -p target-repo/scripts
|
|
cp -r scripts/* target-repo/scripts/ || true
|
|
|
|
mkdir -p target-repo/config
|
|
cp -r config/* target-repo/config/ || true
|
|
|
|
mkdir -p target-repo/docs
|
|
cp -r docs/* target-repo/docs/ || true
|
|
|
|
# Copy configuration files
|
|
cp README.md target-repo/ || true
|
|
cp requirements.txt target-repo/ || true
|
|
cp .env.example target-repo/ || true
|
|
fi
|
|
|
|
if [[ "${SYNC_DIRECTION}" == "pull" || "${SYNC_DIRECTION}" == "bidirectional" ]]; then
|
|
echo "📥 Pulling changes from L6-N9..."
|
|
# Pull specific updates from L6-N9 if configured
|
|
# This can be customized based on what should be synced back
|
|
fi
|
|
|
|
- name: Notify REST API endpoint
|
|
if: env.SYNC_ENABLED == 'true'
|
|
env:
|
|
REST_API_KEY: ${{ secrets.REST_API_KEY }}
|
|
REST_API_URL: ${{ secrets.REST_API_URL }}
|
|
run: |
|
|
if [[ -n "${REST_API_URL:-}" && -n "${REST_API_KEY:-}" ]]; then
|
|
echo "📡 Notifying REST API endpoint..."
|
|
|
|
PAYLOAD=$(cat <<EOF
|
|
{
|
|
"event": "repo_sync",
|
|
"source": "A6-9V/MQL5-Google-Onedrive",
|
|
"target": "${TARGET_REPO}",
|
|
"timestamp": "$(date -u --iso-8601=seconds)",
|
|
"branch": "${SYNC_BRANCH}",
|
|
"commit": "${{ github.sha }}"
|
|
}
|
|
EOF
|
|
)
|
|
|
|
curl -X POST "${REST_API_URL}" \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer ${REST_API_KEY}" \
|
|
-d "${PAYLOAD}" || echo "⚠️ API notification failed (non-critical)"
|
|
else
|
|
echo "ℹ️ REST API notification skipped (not configured)"
|
|
fi
|
|
|
|
- name: Commit and push to L6-N9
|
|
if: env.SYNC_ENABLED == 'true'
|
|
env:
|
|
SYNC_TOKEN: ${{ secrets.REPO_SYNC_TOKEN }}
|
|
run: |
|
|
cd target-repo
|
|
git add -A
|
|
|
|
if git diff --staged --quiet; then
|
|
echo "✅ No changes to sync"
|
|
else
|
|
git commit -m "Auto-sync from A6-9V/MQL5-Google-Onedrive
|
|
|
|
Synced at: $(date -u --iso-8601=seconds)
|
|
Source commit: ${{ github.sha }}
|
|
Workflow: ${{ github.workflow }}
|
|
Run: ${{ github.run_number }}"
|
|
|
|
git push https://${SYNC_TOKEN}@github.com/${TARGET_REPO} ${SYNC_BRANCH}
|
|
echo "✅ Successfully synced to ${TARGET_REPO}"
|
|
fi
|
|
|
|
- name: Summary
|
|
if: env.SYNC_ENABLED == 'true'
|
|
run: |
|
|
echo "## 🔄 Repository Sync Summary" >> $GITHUB_STEP_SUMMARY
|
|
echo "" >> $GITHUB_STEP_SUMMARY
|
|
echo "- **Source**: A6-9V/MQL5-Google-Onedrive" >> $GITHUB_STEP_SUMMARY
|
|
echo "- **Target**: ${TARGET_REPO}" >> $GITHUB_STEP_SUMMARY
|
|
echo "- **Branch**: ${SYNC_BRANCH}" >> $GITHUB_STEP_SUMMARY
|
|
echo "- **Commit**: ${{ github.sha }}" >> $GITHUB_STEP_SUMMARY
|
|
echo "- **Time**: $(date -u --iso-8601=seconds)" >> $GITHUB_STEP_SUMMARY
|
|
echo "" >> $GITHUB_STEP_SUMMARY
|
|
echo "✅ Sync completed successfully!" >> $GITHUB_STEP_SUMMARY
|