Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions .github/workflows/pages.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
name: Build and Deploy Jekyll

on: [push, pull_request, workflow_dispatch]

permissions:
contents: read
pages: write
id-token: write

concurrency:
group: "pages-${{ github.ref }}"
cancel-in-progress: false

jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.4.1'
bundler-cache: true

- name: Setup Pages
if: github.ref == 'refs/heads/main'
uses: actions/configure-pages@v5

- name: Build with Jekyll
run: |
if [ "${{ github.ref }}" = "refs/heads/main" ]; then
bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}"
else
bundle exec jekyll build
fi
env:
JEKYLL_ENV: ${{ github.ref == 'refs/heads/main' && 'production' || 'staging' }}

- name: Upload Pages artifact
if: github.ref == 'refs/heads/main'
uses: actions/upload-pages-artifact@v3

deploy:
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
2 changes: 1 addition & 1 deletion .ruby-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
3.2.2
3.4.1
43 changes: 43 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## Development Commands

### Setup
- Requires Ruby 3.4.1
- Initial setup: `mise install && bundle`

### Common Commands
- **Development server**: `script/server` or `bin/serve`
- **Build site**: `bin/build` or `bundle exec jekyll build`
- **Lint code**: `script/lint` (runs StandardRB with auto-fix)

## Site Architecture

This is a Jekyll-based GitHub Pages personal blog site using the "Panasonic Youth" theme.

### Key Structure
- **Posts**: All blog posts are in `_posts/` with date-based naming (YYYY-MM-DD-title.markdown)
- **Layouts**: Located in `_layouts/` with main templates (default.html, post.html, page.html, resume.html)
- **Includes**: Partial templates in `_includes/`
- **Sass**: Stylesheets organized in `_sass/` directory with modular SCSS files
- **Static pages**: Main pages like about.html, archive.md, resume.md in root

### Jekyll Configuration
- Uses Jekyll 4.4.1 with GitHub Actions deployment
- Pagination set to 1 post per page
- Rouge syntax highlighter enabled
- Incremental builds enabled for faster development
- Sass compilation with compressed output

### Content Management
- Blog posts use markdown with YAML front matter
- Site navigation configured in `_config.yml` under `nav` section
- Author information and site metadata in `_config.yml`

### Deployment
- Uses GitHub Actions for automatic deployment
- Workflow defined in `.github/workflows/pages.yml`
- **Production**: Deploys to rsanheim.com on push to `main` branch
- **Staging**: Branch builds verify Jekyll 4.4.1 compatibility without deployment
13 changes: 9 additions & 4 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,15 @@ source "https://rubygems.org"

git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }

gem "jekyll-gist"
gem "faraday-retry"
gem "jekyll", "~> 4.4"
gem "jekyll-gist"
gem "jekyll-paginate"
gem "jekyll-seo-tag"
gem "jekyll-sitemap"
gem "jekyll", "~> 4.2"
gem "jekyll-sitemap"
gem "rouge"
gem "webrick"
gem "webrick"

group :development do
gem "standardrb"
end
162 changes: 106 additions & 56 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -1,108 +1,158 @@
GEM
remote: https://rubygems.org/
specs:
addressable (2.8.0)
public_suffix (>= 2.0.2, < 5.0)
addressable (2.8.7)
public_suffix (>= 2.0.2, < 7.0)
ast (2.4.3)
base64 (0.3.0)
bigdecimal (3.2.1)
colorator (1.1.0)
concurrent-ruby (1.1.9)
concurrent-ruby (1.3.5)
csv (3.3.5)
em-websocket (0.5.3)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0)
eventmachine (1.2.7)
faraday (1.8.0)
faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0)
faraday-excon (~> 1.1)
faraday-httpclient (~> 1.0.1)
faraday-net_http (~> 1.0)
faraday-net_http_persistent (~> 1.1)
faraday-patron (~> 1.0)
faraday-rack (~> 1.0)
multipart-post (>= 1.2, < 3)
ruby2_keywords (>= 0.0.4)
faraday-em_http (1.0.0)
faraday-em_synchrony (1.0.0)
faraday-excon (1.1.0)
faraday-httpclient (1.0.1)
faraday-net_http (1.0.1)
faraday-net_http_persistent (1.2.0)
faraday-patron (1.0.0)
faraday-rack (1.0.0)
ffi (1.15.4)
faraday (2.13.1)
faraday-net_http (>= 2.0, < 3.5)
json
logger
faraday-net_http (3.4.0)
net-http (>= 0.5.0)
faraday-retry (2.3.1)
faraday (~> 2.0)
ffi (1.17.2)
forwardable-extended (2.6.0)
google-protobuf (4.31.1)
bigdecimal
rake (>= 13)
http_parser.rb (0.8.0)
i18n (1.8.11)
i18n (1.14.7)
concurrent-ruby (~> 1.0)
jekyll (4.2.1)
jekyll (4.4.1)
addressable (~> 2.4)
base64 (~> 0.2)
colorator (~> 1.0)
csv (~> 3.0)
em-websocket (~> 0.5)
i18n (~> 1.0)
jekyll-sass-converter (~> 2.0)
jekyll-sass-converter (>= 2.0, < 4.0)
jekyll-watch (~> 2.0)
kramdown (~> 2.3)
json (~> 2.6)
kramdown (~> 2.3, >= 2.3.1)
kramdown-parser-gfm (~> 1.0)
liquid (~> 4.0)
mercenary (~> 0.4.0)
mercenary (~> 0.3, >= 0.3.6)
pathutil (~> 0.9)
rouge (~> 3.0)
rouge (>= 3.0, < 5.0)
safe_yaml (~> 1.0)
terminal-table (~> 2.0)
terminal-table (>= 1.8, < 4.0)
webrick (~> 1.7)
jekyll-gist (1.5.0)
octokit (~> 4.2)
jekyll-paginate (1.1.0)
jekyll-sass-converter (2.1.0)
sassc (> 2.0.1, < 3.0)
jekyll-seo-tag (2.7.1)
jekyll-sass-converter (3.1.0)
sass-embedded (~> 1.75)
jekyll-seo-tag (2.8.0)
jekyll (>= 3.8, < 5.0)
jekyll-sitemap (1.4.0)
jekyll (>= 3.7, < 5.0)
jekyll-watch (2.2.1)
listen (~> 3.0)
kramdown (2.3.1)
rexml
json (2.12.2)
kramdown (2.5.1)
rexml (>= 3.3.9)
kramdown-parser-gfm (1.1.0)
kramdown (~> 2.0)
language_server-protocol (3.17.0.5)
lint_roller (1.1.0)
liquid (4.0.4)
listen (3.7.0)
listen (3.9.0)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
logger (1.7.0)
mercenary (0.4.0)
multipart-post (2.1.1)
octokit (4.21.0)
faraday (>= 0.9)
sawyer (~> 0.8.0, >= 0.5.3)
net-http (0.6.0)
uri
octokit (4.25.1)
faraday (>= 1, < 3)
sawyer (~> 0.9)
parallel (1.27.0)
parser (3.3.8.0)
ast (~> 2.4.1)
racc
pathutil (0.16.2)
forwardable-extended (~> 2.6)
public_suffix (4.0.6)
rb-fsevent (0.11.0)
rb-inotify (0.10.1)
prism (1.4.0)
public_suffix (6.0.2)
racc (1.8.1)
rainbow (3.1.1)
rake (13.3.0)
rb-fsevent (0.11.2)
rb-inotify (0.11.1)
ffi (~> 1.0)
rexml (3.2.5)
rouge (3.26.1)
ruby2_keywords (0.0.5)
regexp_parser (2.10.0)
rexml (3.4.1)
rouge (4.5.2)
rubocop (1.75.8)
json (~> 2.3)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.1.0)
parallel (~> 1.10)
parser (>= 3.3.0.2)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 2.9.3, < 3.0)
rubocop-ast (>= 1.44.0, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 4.0)
rubocop-ast (1.44.1)
parser (>= 3.3.7.2)
prism (~> 1.4)
rubocop-performance (1.25.0)
lint_roller (~> 1.1)
rubocop (>= 1.75.0, < 2.0)
rubocop-ast (>= 1.38.0, < 2.0)
ruby-progressbar (1.13.0)
safe_yaml (1.0.5)
sassc (2.4.0)
ffi (~> 1.9)
sawyer (0.8.2)
sass-embedded (1.89.1)
google-protobuf (~> 4.31)
rake (>= 13)
sawyer (0.9.2)
addressable (>= 2.3.5)
faraday (> 0.8, < 2.0)
terminal-table (2.0.0)
unicode-display_width (~> 1.1, >= 1.1.1)
unicode-display_width (1.8.0)
webrick (1.7.0)
faraday (>= 0.17.3, < 3)
standard (1.50.0)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.0)
rubocop (~> 1.75.5)
standard-custom (~> 1.0.0)
standard-performance (~> 1.8)
standard-custom (1.0.2)
lint_roller (~> 1.0)
rubocop (~> 1.50)
standard-performance (1.8.0)
lint_roller (~> 1.1)
rubocop-performance (~> 1.25.0)
standardrb (1.0.1)
standard
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
unicode-display_width (2.6.0)
uri (1.0.3)
webrick (1.9.1)

PLATFORMS
ruby

DEPENDENCIES
jekyll (~> 4.2)
faraday-retry
jekyll (~> 4.4)
jekyll-gist
jekyll-paginate
jekyll-seo-tag
jekyll-sitemap
rouge
standardrb
webrick

BUNDLED WITH
2.2.31
2.6.9
29 changes: 29 additions & 0 deletions docs/todo.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Blog Upgrade Todo List

## ✅ Completed: Modern Jekyll 4.4.1 Upgrade

### High Priority - COMPLETED
- [x] **Upgrade to Ruby 3.4.1** (latest stable, not GitHub Pages compatible)
- [x] **Upgrade Jekyll to 4.4.1** (latest, with GitHub Actions deployment)
- [x] **Update Gemfile** with modern Jekyll setup (replaced github-pages gem)
- [x] **Add GitHub Actions workflow** for production deployment
- [x] **Add development scripts** (`script/server`, `script/lint` with StandardRB)

### Medium Priority - COMPLETED
- [x] **Test local build** with Jekyll 4.4.1 (2.5x faster: 1.657s → 0.423s)
- [x] **Verify GitHub Actions workflow** builds on all branches
- [x] **Update CLAUDE.md** with new setup documentation

### Decision Made
- [x] **Deployment strategy**: Use GitHub Actions instead of legacy github-pages gem
- [x] **Staging approach**: Build verification on all branches, production deploy on main only

## Future Enhancements

- [ ] Add CircleCI workflow for additional CI/testing
- [ ] Add link checker workflow (expect initial failures)
- [ ] Consider Sass @import deprecation warnings (Dart Sass migration)

---

*Last updated: January 2025*
2 changes: 2 additions & 0 deletions mise.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[tools]
ruby = "3.4.1"
5 changes: 5 additions & 0 deletions script/lint
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/usr/bin/env bash
set -e

echo "Running StandardRB linter..."
bundle exec standardrb --fix
5 changes: 5 additions & 0 deletions script/server
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/usr/bin/env bash
set -e

echo "Starting Jekyll development server..."
bundle exec jekyll serve --incremental --livereload