From 1964f77d03eb647dcf46d63dde68d7ae7301604f Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sun, 1 Feb 2026 02:07:09 +0900 Subject: feat(nuldoc): add --profile flag to build command --- services/nuldoc/lib/nuldoc/cli.rb | 6 ++++-- services/nuldoc/lib/nuldoc/commands/build.rb | 9 +++++---- services/nuldoc/lib/nuldoc/pipeline.rb | 16 ++++++++++++++-- 3 files changed, 23 insertions(+), 8 deletions(-) (limited to 'services/nuldoc/lib') diff --git a/services/nuldoc/lib/nuldoc/cli.rb b/services/nuldoc/lib/nuldoc/cli.rb index f3a18da9..0face71c 100644 --- a/services/nuldoc/lib/nuldoc/cli.rb +++ b/services/nuldoc/lib/nuldoc/cli.rb @@ -5,9 +5,11 @@ module Nuldoc class BuildCommand < Dry::CLI::Command desc 'Build the site' - def call(**) + option :profile, type: :boolean, default: false, desc: 'Profile each build step' + + def call(**options) config = ConfigLoader.load_config(ConfigLoader.default_config_path) - Commands::Build.run(config) + Commands::Build.run(config, profile: options[:profile]) end end diff --git a/services/nuldoc/lib/nuldoc/commands/build.rb b/services/nuldoc/lib/nuldoc/commands/build.rb index 330d3245..bec741d9 100644 --- a/services/nuldoc/lib/nuldoc/commands/build.rb +++ b/services/nuldoc/lib/nuldoc/commands/build.rb @@ -1,12 +1,13 @@ module Nuldoc module Commands class Build - def self.run(config) - new(config).run + def self.run(config, profile: false) + new(config, profile: profile).run end - def initialize(config) + def initialize(config, profile: false) @config = config + @profile = profile end def run @@ -35,7 +36,7 @@ module Nuldoc pipeline.step(:copy_blog_assets) { copy_blog_asset_files } pipeline.step(:copy_slides_assets) { copy_slides_asset_files } - pipeline.execute + pipeline.execute(profile: @profile) end private diff --git a/services/nuldoc/lib/nuldoc/pipeline.rb b/services/nuldoc/lib/nuldoc/pipeline.rb index 7a30049a..802bba75 100644 --- a/services/nuldoc/lib/nuldoc/pipeline.rb +++ b/services/nuldoc/lib/nuldoc/pipeline.rb @@ -14,10 +14,22 @@ module Nuldoc @steps[name] = Step.new(name: name, deps: deps, block: block) end - def execute + def execute(profile: false) results = {} + total_start = Process.clock_gettime(Process::CLOCK_MONOTONIC) if profile tsort_each do |name| - results[name] = @steps[name].block.call(results) + if profile + start = Process.clock_gettime(Process::CLOCK_MONOTONIC) + results[name] = @steps[name].block.call(results) + elapsed = Process.clock_gettime(Process::CLOCK_MONOTONIC) - start + warn format('[profile] %-30s %8.3f ms', name: name, ms: elapsed * 1000) + else + results[name] = @steps[name].block.call(results) + end + end + if profile + total_elapsed = Process.clock_gettime(Process::CLOCK_MONOTONIC) - total_start + warn format('[profile] %-30s %8.3f ms', name: 'TOTAL', ms: total_elapsed * 1000) end results end -- cgit v1.3-1-g0d28