From 107c96fe504bc2b0966dd4a8319056ab392fbec1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20B=C3=A4lter?= Date: Wed, 25 Mar 2026 13:33:08 +0100 Subject: [PATCH 1/2] Add output_dir parameter to upload method Allow callers to pass a pre-rendered output directory to skip the render step. This enables workflows like pagefind indexing that need to render once, modify the output, then upload without a redundant second render. --- lib/website/deployer.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/website/deployer.rb b/lib/website/deployer.rb index 5ba0744..1838571 100644 --- a/lib/website/deployer.rb +++ b/lib/website/deployer.rb @@ -72,8 +72,8 @@ def content_type(f) CACHE_CONTROL = "public, max-age=60, s-maxage=60, stale-while-revalidate=60,"\ " stale-if-error=60" - def upload(domain, force_deploy: false) - output_dir = render + def upload(domain, force_deploy: false, output_dir: nil) + output_dir ||= render s3 = Aws::S3::Resource.new bucket = s3.bucket(domain) objects = bucket.objects From 5be3d4f73c46d90acc3cf998e085830c4e3f61fd Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 8 Jun 2026 19:40:39 +0000 Subject: [PATCH 2/2] Validate output_dir and clarify missing index.html error Addresses review feedback: validate a caller-provided output_dir up front with a clear ArgumentError instead of a low-level Errno::ENOENT from Dir.chdir, and replace the misleading "Render failed!" message with one that names the directory missing index.html (render may have been skipped). --- lib/website/deployer.rb | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/website/deployer.rb b/lib/website/deployer.rb index 1838571..aec203e 100644 --- a/lib/website/deployer.rb +++ b/lib/website/deployer.rb @@ -73,7 +73,13 @@ def content_type(f) " stale-if-error=60" def upload(domain, force_deploy: false, output_dir: nil) - output_dir ||= render + if output_dir + unless Dir.exist?(output_dir) + raise ArgumentError, "output_dir #{output_dir.inspect} does not exist" + end + else + output_dir = render + end s3 = Aws::S3::Resource.new bucket = s3.bucket(domain) objects = bucket.objects @@ -84,7 +90,7 @@ def upload(domain, force_deploy: false, output_dir: nil) files = Dir["**/*"].select { |f| File.file? f } unless files.any? { |f| f =~ /index\.html$/ } puts "at=debug no index found, files=#{files}" - raise "Render failed!" + raise "No index.html found in #{output_dir}" end changed = [] objects.each do |obj|