#3946: Gemfile

site/Gemfile

Path: site/Gemfile · Lines: 36 · Type: Ruby Bundler dependency manifest

Purpose: Declares ALL Ruby gem dependencies for building the ProjectForge website. Controls: Jekyll version (4.4.1), 7 Jekyll plugins (feed, paginate, seo-tag, gist, avatar, asciidoc, numbered-headings), Markdown parser (kramdown), timezone data, and WEBrick server. Equivalent to package.json for npm.

Source: GitHub

36 lines · 15 code · 15 comments · 6 blank
CommitMessage
ac75fabf32021-08-10 Jekyll site migration
The build dependency manifest. Running bundle install reads this file and installs exact gem versions into Gemfile.lock. Running bundle exec jekyll serve starts the dev server using these locked versions. The ecosystem: Ruby → Bundler → Jekyll → Liquid → HTML.

The 8 gems that power the site

gem "jekyll", "4.4.1"                          # Static site generator
group :jekyll_plugins do
  gem "jekyll-feed", "~> 0.17.0"              # RSS/Atom feed generation
  gem 'jekyll-paginate', '~> 1.1'             # Page splitting for blog lists
  gem 'jekyll-seo-tag', '~> 2.8.0'            # SEO meta tags (og:, twitter:)
  gem 'jekyll-gist', '~> 1.5.0'               # Embed GitHub Gists in pages
  gem 'jekyll-avatar', '~> 0.8.0'             # GitHub avatar images
  gem 'jekyll-asciidoc', '~> 3.0.1'           # AsciiDoc → HTML conversion ⭐
  gem 'jekyll-numbered-headings', '~> 0.1.1'  # Auto-numbered section headings
  gem 'kramdown-parser-gfm', '~> 1.1.0'       # GitHub-Flavored Markdown parser
end
gem "webrick", "~> 1.9.0"                     # Ruby HTTP server for dev

jekyll-asciidoc is the critical plugin: Without it, all 63 .adoc documentation files (installation.adoc, userguide.adoc, etc.) would not render. This gem bridges Jekyll's Liquid templating with AsciiDoc's markup — it's the reason the ProjectForge docs can use both {% include %} (Liquid) and == Section == (AsciiDoc) in the same file.

Gemfile.lock companion: The Gemfile.lock file (also in site/) records the EXACT versions installed, including transitive dependencies. This ensures reproducible builds across machines. It's the Ruby equivalent of package-lock.json.

Version pinning strategy

OperatorExampleMeaning
Exact"4.4.1"jekyll 4.4.1 exactly — no other version
Pessimistic"~> 0.17.0">= 0.17.0 AND < 0.18.0 — patch updates allowed, minor frozen
Pessimistic"~> 3.0.1">= 3.0.1 AND < 3.1.0 — for jekyll-asciidoc

Jekyll itself is pinned to EXACT version 4.4.1 — major Jekyll upgrades often break themes and plugins. Plugins use pessimistic versioning (~>) to allow security patches without risking breaking changes.

Commented-out alternatives: Lines 15-19 show the standard Jekyll boilerplate for GitHub Pages — uncomment github-pages gem if hosting on GitHub Pages directly. The ProjectForge site uses a custom Jekyll setup (not GitHub Pages' built-in Jekyll), so these are left commented.