Files
lescarnetsdakkadien.netig.net/scripts/update-content.rb
T
2026-09-30 14:27:05 +02:00

40 lines
1.4 KiB
Ruby
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env ruby
# frozen_string_literal: true
require "time"
require_relative "schema"
ENV["TZ"] = "Europe/Paris"
ROOT = File.expand_path("..", __dir__)
CONTENT = File.join(ROOT, "src", "content")
begin
raise "un seul chemin de fiche est requis" unless ARGV.length == 1
value = ARGV.first
base = value.start_with?("src/content/") ? ROOT : CONTENT
path = File.realpath(File.expand_path(value, base))
relative = path.delete_prefix(CONTENT + "/")
parts = relative.split("/")
valid = path.start_with?(CONTENT + "/") && File.file?(path) && File.extname(path) == ".md" &&
File.basename(path) != "_index.md" && parts.length > 1 && CONTENT_SECTIONS.include?(parts.first)
raise "le chemin doit désigner une fiche d’une section connue" unless valid
text = File.read(path, encoding: "UTF-8")
front = text.match(/\A\+\+\+\r?\n(.*?)\r?\n\+\+\+(?:\r?\n|\z)/m)
raise "front matter TOML délimité par +++ absent" unless front
matches = front[1].to_enum(:scan, UPDATED_RE).map { Regexp.last_match }
raise "la fiche doit contenir exactement une ligne updated" unless matches.length == 1
timestamp = Time.now.iso8601
body = front[1].sub(UPDATED_RE, "updated = #{timestamp}")
File.write(path, text.sub(front[1], body), encoding: "UTF-8")
puts "Fiche mise à jour : #{path.delete_prefix(ROOT + '/')}"
puts "updated = #{timestamp}"
rescue StandardError => e
warn "Erreur : #{e.message}"
exit 1
end