Skip to content

fix: update scoped CSS reference and rename Collector to Triage CLI #98

fix: update scoped CSS reference and rename Collector to Triage CLI

fix: update scoped CSS reference and rename Collector to Triage CLI #98

name: Sync Data Cache
on:
schedule:
- cron: '0 * * * *' # Every hour
push:
branches: [docs-dashboard]
workflow_dispatch:
inputs:
source:
description: 'Data source to sync'
type: choice
options:
- all
- github
- nuget
default: all
repo:
description: 'Repository to sync (blank for all)'
type: choice
options:
- all
- mono/SkiaSharp
- mono/SkiaSharp.Extended
default: all
reset:
description: 'Reset cache (delete all data and start fresh)'
type: boolean
default: false
engagement_count:
description: 'Items per engagement checkpoint'
type: number
default: 100
page_count:
description: 'Pages per items checkpoint (100 items/page)'
type: number
default: 5
concurrency:
group: data-cache-sync
cancel-in-progress: false
env:
DOTNET_VERSION: '10.0.x'
jobs:
# ============================================================
# Sync SkiaSharp (main repo)
# ============================================================
sync-skiasharp:
if: inputs.repo != 'mono/SkiaSharp.Extended'
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout docs-dashboard (for CLI code)
uses: actions/checkout@v4
with:
ref: docs-dashboard
- name: Checkout docs-data-cache
uses: actions/checkout@v4
with:
ref: docs-data-cache
path: .data-cache
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Configure git
working-directory: .data-cache
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
# NuGet (every 6 hours: 0, 6, 12, 18 UTC)
- name: Check if NuGet sync needed
id: nuget-check
run: |
HOUR=$(date -u +%H)
SOURCE="${{ inputs.source || 'all' }}"
if [[ "$SOURCE" == "nuget" ]] || [[ "$SOURCE" == "all" && ("${{ github.event_name }}" != "schedule" || "$HOUR" == "00" || "$HOUR" == "06" || "$HOUR" == "12" || "$HOUR" == "18") ]]; then
echo "run=true" >> $GITHUB_OUTPUT
else
echo "run=false" >> $GITHUB_OUTPUT
echo "Skipping NuGet sync (only runs at 0, 6, 12, 18 UTC)"
fi
- name: Sync NuGet
if: steps.nuget-check.outputs.run == 'true'
run: |
dotnet run --project src/SkiaSharp.Triage.Cli -- sync nuget \
--repo mono/SkiaSharp \
--cache-path .data-cache
- name: Sync Community
if: steps.nuget-check.outputs.run == 'true'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
dotnet run --project src/SkiaSharp.Triage.Cli -- sync community \
--repo mono/SkiaSharp \
--cache-path .data-cache
- name: Push NuGet + Community
if: steps.nuget-check.outputs.run == 'true'
working-directory: .data-cache
run: |
git add -A
if git diff --staged --quiet; then
echo "No NuGet/Community changes to commit"
else
git commit -m "Sync: SkiaSharp NuGet+Community $(date -u +%Y-%m-%dT%H:%M:%SZ)"
for i in 1 2 3 4 5; do
git push && break
echo "Push failed, rebasing (attempt $i)..."
git pull --rebase
sleep $((i * 2))
done
fi
# GitHub items (Layer 1 - checkpoint loop)
- name: Sync GitHub items (checkpoint loop)
if: inputs.source != 'nuget'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
PAGE_COUNT="${{ inputs.page_count || '5' }}"
BATCH=1
RESET_DONE=false
while true; do
echo ""
echo "========================================"
echo " SkiaSharp Items checkpoint $BATCH"
echo "========================================"
# First batch only: use --reset if requested
if [ "${{ inputs.reset }}" == "true" ] && [ "$RESET_DONE" == "false" ]; then
SYNC_FLAG="--reset"
RESET_DONE=true
else
SYNC_FLAG=""
fi
set +e
dotnet run --project src/SkiaSharp.Triage.Cli -- sync github \
--repo mono/SkiaSharp \
--cache-path .data-cache \
--items-only \
--page-count $PAGE_COUNT \
$SYNC_FLAG
EXIT_CODE=$?
set -e
# Always commit changes before checking exit code
cd .data-cache
git add -A
if git diff --staged --quiet; then
echo "No changes"
cd ..
if [ $EXIT_CODE -ne 0 ]; then
[ $EXIT_CODE -eq 2 ] && echo "All items synced!"
[ $EXIT_CODE -eq 1 ] && echo "Rate limit hit - will resume next run"
break
fi
echo "No changes and exit 0 - done!"
break
else
git commit -m "Sync: SkiaSharp items checkpoint $BATCH $(date -u +%H:%M)"
for i in 1 2 3 4 5; do
git push && break
echo "Push failed, rebasing (attempt $i)..."
git pull --rebase
sleep $((i * 2))
done
fi
cd ..
if [ $EXIT_CODE -eq 2 ]; then
echo "All items synced!"
break
fi
if [ $EXIT_CODE -eq 1 ]; then
echo "Rate limit hit - will resume next run"
break
fi
BATCH=$((BATCH + 1))
done
# GitHub engagement (Layer 2 - checkpoint loop)
- name: Sync GitHub engagement (checkpoint loop)
if: inputs.source != 'nuget'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
ENGAGEMENT_COUNT="${{ inputs.engagement_count || '100' }}"
BATCH=1
while true; do
echo ""
echo "========================================"
echo " SkiaSharp Engagement checkpoint $BATCH"
echo "========================================"
set +e
dotnet run --project src/SkiaSharp.Triage.Cli -- sync github \
--repo mono/SkiaSharp \
--cache-path .data-cache \
--engagement-only \
--engagement-count $ENGAGEMENT_COUNT
EXIT_CODE=$?
set -e
# Always commit changes before checking exit code
cd .data-cache
git add -A
if git diff --staged --quiet; then
echo "No changes"
cd ..
if [ $EXIT_CODE -ne 0 ]; then
[ $EXIT_CODE -eq 2 ] && echo "All engagement synced!"
[ $EXIT_CODE -eq 1 ] && echo "Rate limit hit - will resume next run"
break
fi
echo "No changes and exit 0 - done!"
break
else
git commit -m "Sync: SkiaSharp engagement checkpoint $BATCH $(date -u +%H:%M)"
for i in 1 2 3 4 5; do
git push && break
echo "Push failed, rebasing (attempt $i)..."
git pull --rebase
sleep $((i * 2))
done
fi
cd ..
if [ $EXIT_CODE -eq 2 ]; then
echo "All engagement synced!"
break
fi
if [ $EXIT_CODE -eq 1 ]; then
echo "Rate limit hit - will resume next run"
break
fi
BATCH=$((BATCH + 1))
done
# ============================================================
# Sync SkiaSharp.Extended (parallel job)
# ============================================================
sync-extended:
if: inputs.repo != 'mono/SkiaSharp'
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout docs-dashboard
uses: actions/checkout@v4
with:
ref: docs-dashboard
- name: Checkout docs-data-cache
uses: actions/checkout@v4
with:
ref: docs-data-cache
path: .data-cache
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Configure git
working-directory: .data-cache
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
# NuGet (every 6 hours)
- name: Check if NuGet sync needed
id: nuget-check
run: |
HOUR=$(date -u +%H)
SOURCE="${{ inputs.source || 'all' }}"
if [[ "$SOURCE" == "nuget" ]] || [[ "$SOURCE" == "all" && ("${{ github.event_name }}" != "schedule" || "$HOUR" == "00" || "$HOUR" == "06" || "$HOUR" == "12" || "$HOUR" == "18") ]]; then
echo "run=true" >> $GITHUB_OUTPUT
else
echo "run=false" >> $GITHUB_OUTPUT
fi
- name: Sync NuGet
if: steps.nuget-check.outputs.run == 'true'
run: |
dotnet run --project src/SkiaSharp.Triage.Cli -- sync nuget \
--repo mono/SkiaSharp.Extended \
--cache-path .data-cache
- name: Sync Community
if: steps.nuget-check.outputs.run == 'true'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
dotnet run --project src/SkiaSharp.Triage.Cli -- sync community \
--repo mono/SkiaSharp.Extended \
--cache-path .data-cache
- name: Push NuGet + Community
if: steps.nuget-check.outputs.run == 'true'
working-directory: .data-cache
run: |
git add -A
if git diff --staged --quiet; then
echo "No changes"
else
git commit -m "Sync: Extended NuGet+Community $(date -u +%Y-%m-%dT%H:%M:%SZ)"
for i in 1 2 3 4 5; do
git push && break
git pull --rebase
sleep $((i * 2))
done
fi
# GitHub items (checkpoint loop - Extended is small so usually completes in 1 batch)
- name: Sync GitHub items
if: inputs.source != 'nuget'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
PAGE_COUNT="${{ inputs.page_count || '5' }}"
BATCH=1
RESET_DONE=false
while true; do
echo "Extended items checkpoint $BATCH"
# First batch only: use --reset if requested
if [ "${{ inputs.reset }}" == "true" ] && [ "$RESET_DONE" == "false" ]; then
SYNC_FLAG="--reset"
RESET_DONE=true
else
SYNC_FLAG=""
fi
set +e
dotnet run --project src/SkiaSharp.Triage.Cli -- sync github \
--repo mono/SkiaSharp.Extended \
--cache-path .data-cache \
--items-only \
--page-count $PAGE_COUNT \
$SYNC_FLAG
EXIT_CODE=$?
set -e
cd .data-cache
git add -A
if git diff --staged --quiet; then
cd ..
if [ $EXIT_CODE -ne 0 ]; then
[ $EXIT_CODE -eq 2 ] && echo "All done!"
break
fi
break
else
git commit -m "Sync: Extended items $BATCH $(date -u +%H:%M)"
for i in 1 2 3 4 5; do
git push && break
git pull --rebase
sleep $((i * 2))
done
fi
cd ..
if [ $EXIT_CODE -eq 2 ] || [ $EXIT_CODE -eq 1 ]; then
break
fi
BATCH=$((BATCH + 1))
done
# GitHub engagement (checkpoint loop - Extended is small, should finish quickly)
- name: Sync GitHub engagement
if: inputs.source != 'nuget'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
ENGAGEMENT_COUNT="${{ inputs.engagement_count || '100' }}"
BATCH=1
while true; do
echo "Extended engagement checkpoint $BATCH"
set +e
dotnet run --project src/SkiaSharp.Triage.Cli -- sync github \
--repo mono/SkiaSharp.Extended \
--cache-path .data-cache \
--engagement-only \
--engagement-count $ENGAGEMENT_COUNT
EXIT_CODE=$?
set -e
cd .data-cache
git add -A
if git diff --staged --quiet; then
cd ..
if [ $EXIT_CODE -ne 0 ]; then
[ $EXIT_CODE -eq 2 ] && echo "All done!"
break
fi
break
else
git commit -m "Sync: Extended engagement $BATCH $(date -u +%H:%M)"
for i in 1 2 3 4 5; do
git push && break
git pull --rebase
sleep $((i * 2))
done
fi
cd ..
if [ $EXIT_CODE -eq 2 ] || [ $EXIT_CODE -eq 1 ]; then
break
fi
BATCH=$((BATCH + 1))
done