Ini adalah postingan pertama saya semenjak blog ini pindah rumah (lagi!). Kali ini saya menggunakan Jekyll kembali dan menggunakan server gratisan dari OVH (NICE! 😊).
Berhubung kita kembali menggunakan static site generator, membuat pos masih serba manual. Kalau nggak copy+paste, ya, create new file. Ini membuat proses menulis menjadi membosankan dan tulisan mudah menjadi tidak konsisten. Oleh sebab itu, sebuah automation diperlukan!
Automation kali ini adalah sebuah script yang melakukan beberapa hal berikut ini:
- memunculkan prompt di command line untuk mengisi
Post title:, - membuat sebuah GitHub issue di repository ini https://github.com/firewalker06/didik-id-comments,
- ngomong-ngomong soal komentar, kini blog ini bisa memunculkan komentar dari GitHub issue. Please, try it out! (Terinspirasi dari: https://dc25.github.io/myBlog/2017/06/24/using-github-comments-in-a-jekyll-blog.html)
- membuat sebuah post di direktori
_postsdenganfront-matterberikut:title: slug: date_published: date_updated: github_comments_issueid:
Berikut ini adalah isinya:
#!/usr/bin/env ruby
require "tty-prompt"
require "net/http"
require "json"
require "fileutils"
require "yaml"
require "time"
require "dotenv/load" # <-- loads .env automatically
# -------------------------
# LOAD REPO FROM _config.yml
# -------------------------
config = YAML.load_file("_config.yml")
REPO = config["github_comments_repository"]
unless REPO
puts "❌ Missing `github_comments_repository:` in _config.yml"
exit 1
end
JEKYLL_POST_DIR = "_posts"
# -------------------------
# PROMPTS
# -------------------------
prompt = TTY::Prompt.new
title = prompt.ask("Post title:", required: true)
# Prefer .env → fallback to prompt
github_token = ENV["GITHUB_TOKEN"]
github_token ||= prompt.mask("GitHub Token:", required: true)
slug = title.downcase.strip.gsub(" ", "-").gsub(/[^a-z0-9\-]/, "")
date = Time.now
post_filename = "#{JEKYLL_POST_DIR}/#{date.strftime('%Y-%m-%d')}-#{slug}.md"
date_and_slug = "#{date.strftime('%Y/%m/%d')}/#{slug}"
# -------------------------
# CREATE GITHUB ISSUE
# -------------------------
issue_data = {
title: "Comments for: #{title}",
body: "This issue is created to hold comments for : https://didik.id/#{date_and_slug}.",
}.to_json
uri = URI("https://api.github.com/repos/#{REPO}/issues")
req = Net::HTTP::Post.new(uri)
req["Authorization"] = "token #{github_token}"
req["User-Agent"] = "jekyll-post-script"
req["Content-Type"] = "application/json"
req.body = issue_data
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
unless res.is_a?(Net::HTTPSuccess)
puts "❌ GitHub Issue failed: #{res.code} - #{res.body}"
exit 1
end
issue_id = JSON.parse(res.body)["number"]
puts "✅ Created GitHub Issue ##{issue_id}"
# -------------------------
# CREATE JEKYLL POST
# -------------------------
FileUtils.mkdir_p(JEKYLL_POST_DIR)
front_matter = <<~YAML
---
title: "#{title}"
slug: "#{slug}"
date_published: #{date.iso8601}
date_updated: #{date.iso8601}
github_comments_issueid: #{issue_id}
---
YAML
File.write(post_filename, front_matter)
puts "✅ Created Jekyll post #{post_filename}"
puts "✅ Injected issue ID #{issue_id}"
Kesan-kesan
Sungguh tak terbayangkan dalam benak saya bahwa semua script ini bisa saya coba dan selesaikan dalam waktu kurang dari 2 jam saja. Sebelum ada AI, saya mesti menghabiskan 2-3 jam hanya untuk browsing dokumentasi setiap library yang saya pakai di atas. This is fun!