From 4a50ac79fe2bb356758ec7b86a407c010507f86f Mon Sep 17 00:00:00 2001 From: Tim MacDonald Date: Wed, 10 Jul 2024 00:56:14 +1000 Subject: [PATCH] Proof of concept: Bust cloudflare cache (#333) * Bust cloudflare cache * wip --- .gitignore | 1 + app/Console/Kernel.php | 3 ++- build/docs.sh | 44 ++++++++++++++++++++++++++++++------------ config/services.php | 4 ++++ 4 files changed, 39 insertions(+), 13 deletions(-) diff --git a/.gitignore b/.gitignore index 52894f46..5aa43500 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ /public/sitemap*.xml /storage/*.key /vendor +/modified .DS_Store .env .phpunit.result.cache diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index cf806273..f9caa485 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -4,6 +4,7 @@ use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; +use Illuminate\Support\Facades\Config; class Kernel extends ConsoleKernel { @@ -26,7 +27,7 @@ protected function schedule(Schedule $schedule) { $schedule->command('sitemap:generate')->daily(); $schedule->exec('bash /home/forge/laravel.com/build/api.sh')->daily(); - $schedule->exec('bash /home/forge/laravel.com/build/docs.sh')->everyFiveMinutes(); + $schedule->exec('bash /home/forge/laravel.com/build/docs.sh', Config::get(['services.cloudflare.zone', 'services.cloudflare.token']))->everyFiveMinutes(); } /** diff --git a/build/docs.sh b/build/docs.sh index 57bae455..2261f698 100644 --- a/build/docs.sh +++ b/build/docs.sh @@ -1,14 +1,34 @@ #!/bin/bash + +set -e + base=${base:-/home/forge/laravel.com} -docs=${base}/resources/docs - -# cd ${docs}/5.5 && git pull origin 5.5 -# cd ${docs}/5.8 && git pull origin 5.8 -# cd ${docs}/6.0 && git pull origin 6.0 -# cd ${docs}/6.x && git pull origin 6.x -# cd ${docs}/7.x && git pull origin 7.x -cd ${docs}/8.x && git pull origin 8.x -cd ${docs}/9.x && git pull origin 9.x -cd ${docs}/10.x && git pull origin 10.x -cd ${docs}/11.x && git pull origin 11.x -cd ${docs}/master && git pull origin master +versions=('8.x' '9.x' '10.x' '11.x' 'master') + +for version in "${versions[@]}" +do + cd "${base}/resources/docs/${version}" + previousHash=$(git rev-parse "${version}") + git fetch origin "${version}" + + if [[ "${previousHash}" == $(git rev-parse "origin/${version}") ]]; then + continue + fi + + git pull origin "${version}" + git diff --name-only $previousHash HEAD | while read markdownFile; do + echo "https://laravel.com/docs/${version}/$(basename $markdownFile '.md')" >> "${base}/modified" + done +done + +if [ ! -f "${base}/modified" ]; then + exit 0 +fi + +files=$(jq --raw-input --slurp 'split("\n") | map(select(. != "")) | unique' "${base}/modified") +curl -X POST --fail \ + "https://api.cloudflare.com/client/v4/zones/${1}/purge_cache" \ + -H 'Content-Type: application/json' \ + -H "Authorization: Bearer ${2}" \ + -d "{ \"files\": ${files} }" +rm "${base}/modified" diff --git a/config/services.php b/config/services.php index 9aef3115..8d03c831 100644 --- a/config/services.php +++ b/config/services.php @@ -34,4 +34,8 @@ 'token' => env('WORKABLE_TOKEN'), ], + 'cloudflare' => [ + 'zone' => env('CLOUDFLARE_ZONE'), + 'token' => env('CLOUDFLARE_TOKEN'), + ], ];