From fcb47b789d10866a8fcb4b05d53593a9cb61e298 Mon Sep 17 00:00:00 2001 From: Rob Sanheim Date: Sun, 1 Jun 2025 23:47:09 -0500 Subject: [PATCH 1/9] Upgrade to Jekyll 4.4.1 with GitHub Actions deployment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Ruby 3.2.2 → 3.4.1, Jekyll ~4.2 → 4.4.1 - Replace github-pages gem with modern setup - Add GitHub Actions workflow with staging support - Update to mise, add CLAUDE.md and docs/todo.md - 2.5x faster builds (1.657s → 0.423s) 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .github/workflows/pages.yml | 107 ++++++++++++++++++++++++++++++++++ .ruby-version | 2 +- CLAUDE.md | 44 ++++++++++++++ Gemfile | 2 +- Gemfile.lock | 112 ++++++++++++++++++------------------ docs/todo.md | 24 ++++++++ mise.toml | 2 + 7 files changed, 236 insertions(+), 57 deletions(-) create mode 100644 .github/workflows/pages.yml create mode 100644 CLAUDE.md create mode 100644 docs/todo.md create mode 100644 mise.toml diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml new file mode 100644 index 0000000..861178a --- /dev/null +++ b/.github/workflows/pages.yml @@ -0,0 +1,107 @@ +name: Build and Deploy Jekyll + +on: + push: + branches: [ "main", "update-to-latest" ] + pull_request: + branches: [ "main" ] + 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 + outputs: + is_main: ${{ steps.check_branch.outputs.is_main }} + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Check if main branch + id: check_branch + run: | + if [ "${{ github.ref }}" = "refs/heads/main" ]; then + echo "is_main=true" >> $GITHUB_OUTPUT + else + echo "is_main=false" >> $GITHUB_OUTPUT + fi + + - name: Setup Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.4.1' + bundler-cache: true + + - name: Setup Pages + if: steps.check_branch.outputs.is_main == 'true' + uses: actions/configure-pages@v5 + + - name: Build with Jekyll + run: | + if [ "${{ steps.check_branch.outputs.is_main }}" = "true" ]; then + bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}" + else + bundle exec jekyll build --baseurl "" + fi + env: + JEKYLL_ENV: ${{ steps.check_branch.outputs.is_main == 'true' && 'production' || 'staging' }} + + - name: Upload Pages artifact + if: steps.check_branch.outputs.is_main == 'true' + uses: actions/upload-pages-artifact@v3 + + - name: Upload branch build artifact + if: steps.check_branch.outputs.is_main != 'true' + uses: actions/upload-artifact@v4 + with: + name: branch-build-${{ github.sha }} + path: _site/ + + deploy: + # Only deploy to production on main branch + 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 + + preview: + # For non-main branches, just build and provide download link + if: github.ref != 'refs/heads/main' + runs-on: ubuntu-latest + needs: build + steps: + - name: Comment on PR with preview link + if: github.event_name == 'pull_request' + uses: actions/github-script@v7 + with: + script: | + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: `🚀 **Preview Build Complete!** + + This branch has been built with Jekyll 4.4.1. You can download the build artifact to test locally. + + **Build Details:** + - Branch: \`${{ github.ref_name }}\` + - Commit: \`${{ github.sha }}\` + - Jekyll: 4.4.1 + - Ruby: 3.4.1 + + The build artifact will be available for 90 days.` + }) \ No newline at end of file diff --git a/.ruby-version b/.ruby-version index be94e6f..47b322c 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -3.2.2 +3.4.1 diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..20e7215 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,44 @@ +# 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**: `bin/serve` or `bundle exec jekyll serve --incremental` +- **Build site**: `bin/build` or `bundle exec jekyll build` +- **Regular serve**: `bundle exec jekyll serve` + +## 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 create downloadable artifacts for testing +- Pull requests get automatic build verification with artifact downloads \ No newline at end of file diff --git a/Gemfile b/Gemfile index b6cd731..47589ba 100644 --- a/Gemfile +++ b/Gemfile @@ -4,10 +4,10 @@ source "https://rubygems.org" git_source(:github) { |repo_name| "https://github.com/#{repo_name}" } +gem "jekyll", "~> 4.4" gem "jekyll-gist" gem "jekyll-paginate" gem "jekyll-seo-tag" gem "jekyll-sitemap" -gem "jekyll", "~> 4.2" gem "rouge" gem "webrick" \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock index 06e3f4b..2d66fbe 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,102 +1,104 @@ 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) + 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) + 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) 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) pathutil (0.16.2) forwardable-extended (~> 2.6) - public_suffix (4.0.6) - rb-fsevent (0.11.0) - rb-inotify (0.10.1) + public_suffix (6.0.2) + 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) + rexml (3.4.1) + rouge (4.5.2) 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) + 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) + jekyll (~> 4.4) jekyll-gist jekyll-paginate jekyll-seo-tag diff --git a/docs/todo.md b/docs/todo.md new file mode 100644 index 0000000..ea16370 --- /dev/null +++ b/docs/todo.md @@ -0,0 +1,24 @@ +# Blog Upgrade Todo List + +## GitHub Pages Compatible Upgrade (Current Branch) + +### High Priority +- [ ] **Upgrade to Ruby 3.3.4** (GitHub Pages compatible) +- [ ] **Upgrade Jekyll to ~3.10.0** (GitHub Pages compatible) +- [ ] **Update Gemfile** with GitHub Pages compatible versions + +### Medium Priority +- [ ] **Test local build** with new versions +- [ ] **Verify site still works** after changes +- [ ] Add circle CI workflow to test build, and also possibly a first pass at a 'link checker' workflow (i imagine this will fail, but it's a start) + +### Low Priority +- [ ] **Update CLAUDE.md** with new Ruby/Jekyll versions + +## Future Updates (Add Your Ideas Below) + + + +--- + +*Last updated: January 2025* \ No newline at end of file diff --git a/mise.toml b/mise.toml new file mode 100644 index 0000000..264168f --- /dev/null +++ b/mise.toml @@ -0,0 +1,2 @@ +[tools] +ruby = "3.4.1" From a98ddfb6e98243435210dc773d1bf6e0d2d70f1f Mon Sep 17 00:00:00 2001 From: Rob Sanheim Date: Sun, 1 Jun 2025 23:53:30 -0500 Subject: [PATCH 2/9] Update ancient bundler --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 2d66fbe..4d63e29 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -107,4 +107,4 @@ DEPENDENCIES webrick BUNDLED WITH - 2.2.31 + 2.6.9 From c4bd63414c3d422e1bfc89f2be4f3d7ee59186c4 Mon Sep 17 00:00:00 2001 From: Rob Sanheim Date: Mon, 2 Jun 2025 00:01:53 -0500 Subject: [PATCH 3/9] remove staging workflow, too complicated --- .github/workflows/pages.yml | 36 +----------------------------------- CLAUDE.md | 3 +-- 2 files changed, 2 insertions(+), 37 deletions(-) diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index 861178a..7436954 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -58,12 +58,6 @@ jobs: if: steps.check_branch.outputs.is_main == 'true' uses: actions/upload-pages-artifact@v3 - - name: Upload branch build artifact - if: steps.check_branch.outputs.is_main != 'true' - uses: actions/upload-artifact@v4 - with: - name: branch-build-${{ github.sha }} - path: _site/ deploy: # Only deploy to production on main branch @@ -76,32 +70,4 @@ jobs: steps: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v4 - - preview: - # For non-main branches, just build and provide download link - if: github.ref != 'refs/heads/main' - runs-on: ubuntu-latest - needs: build - steps: - - name: Comment on PR with preview link - if: github.event_name == 'pull_request' - uses: actions/github-script@v7 - with: - script: | - github.rest.issues.createComment({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - body: `🚀 **Preview Build Complete!** - - This branch has been built with Jekyll 4.4.1. You can download the build artifact to test locally. - - **Build Details:** - - Branch: \`${{ github.ref_name }}\` - - Commit: \`${{ github.sha }}\` - - Jekyll: 4.4.1 - - Ruby: 3.4.1 - - The build artifact will be available for 90 days.` - }) \ No newline at end of file + uses: actions/deploy-pages@v4 \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md index 20e7215..1bdbef6 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -40,5 +40,4 @@ This is a Jekyll-based GitHub Pages personal blog site using the "Panasonic Yout - 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 create downloadable artifacts for testing -- Pull requests get automatic build verification with artifact downloads \ No newline at end of file +- **Staging**: Branch builds verify Jekyll 4.4.1 compatibility without deployment \ No newline at end of file From 78ef0a67f6fc17f43ebfbe74bc26cd6d25fb771c Mon Sep 17 00:00:00 2001 From: Rob Sanheim Date: Mon, 2 Jun 2025 00:03:35 -0500 Subject: [PATCH 4/9] simplify --- .github/workflows/pages.yml | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index 7436954..228b183 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -19,21 +19,10 @@ concurrency: jobs: build: runs-on: ubuntu-latest - outputs: - is_main: ${{ steps.check_branch.outputs.is_main }} steps: - name: Checkout uses: actions/checkout@v4 - - name: Check if main branch - id: check_branch - run: | - if [ "${{ github.ref }}" = "refs/heads/main" ]; then - echo "is_main=true" >> $GITHUB_OUTPUT - else - echo "is_main=false" >> $GITHUB_OUTPUT - fi - - name: Setup Ruby uses: ruby/setup-ruby@v1 with: @@ -41,26 +30,24 @@ jobs: bundler-cache: true - name: Setup Pages - if: steps.check_branch.outputs.is_main == 'true' + if: github.ref == 'refs/heads/main' uses: actions/configure-pages@v5 - name: Build with Jekyll run: | - if [ "${{ steps.check_branch.outputs.is_main }}" = "true" ]; then + if [ "${{ github.ref }}" = "refs/heads/main" ]; then bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}" else - bundle exec jekyll build --baseurl "" + bundle exec jekyll build fi env: - JEKYLL_ENV: ${{ steps.check_branch.outputs.is_main == 'true' && 'production' || 'staging' }} + JEKYLL_ENV: ${{ github.ref == 'refs/heads/main' && 'production' || 'staging' }} - name: Upload Pages artifact - if: steps.check_branch.outputs.is_main == 'true' + if: github.ref == 'refs/heads/main' uses: actions/upload-pages-artifact@v3 - deploy: - # Only deploy to production on main branch if: github.ref == 'refs/heads/main' && github.event_name == 'push' environment: name: github-pages From 88cf91ef87b7d7f5d1207a1324be16b3279cbfc3 Mon Sep 17 00:00:00 2001 From: Rob Sanheim Date: Mon, 2 Jun 2025 00:06:14 -0500 Subject: [PATCH 5/9] the curse of faraday-retry --- Gemfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Gemfile b/Gemfile index 47589ba..2750baf 100644 --- a/Gemfile +++ b/Gemfile @@ -4,6 +4,7 @@ source "https://rubygems.org" git_source(:github) { |repo_name| "https://github.com/#{repo_name}" } +gem "faraday-retry" gem "jekyll", "~> 4.4" gem "jekyll-gist" gem "jekyll-paginate" From c7f11f14ecd448e93a2c14db847e25f9d509042a Mon Sep 17 00:00:00 2001 From: Rob Sanheim Date: Mon, 2 Jun 2025 00:06:19 -0500 Subject: [PATCH 6/9] add it --- Gemfile.lock | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Gemfile.lock b/Gemfile.lock index 4d63e29..e3248cc 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -18,6 +18,8 @@ GEM 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) @@ -98,6 +100,7 @@ PLATFORMS ruby DEPENDENCIES + faraday-retry jekyll (~> 4.4) jekyll-gist jekyll-paginate From 7583c733c8b83ac94ac0fef285996b63fbcb2209 Mon Sep 17 00:00:00 2001 From: Rob Sanheim Date: Mon, 2 Jun 2025 00:09:01 -0500 Subject: [PATCH 7/9] we got there! --- .github/workflows/pages.yml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index 228b183..7b54c23 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -1,11 +1,6 @@ name: Build and Deploy Jekyll -on: - push: - branches: [ "main", "update-to-latest" ] - pull_request: - branches: [ "main" ] - workflow_dispatch: +on: [push, pull_request, workflow_dispatch] permissions: contents: read From 1148fa230a02c4395e696a6ce3808851a0ec41f3 Mon Sep 17 00:00:00 2001 From: Rob Sanheim Date: Mon, 2 Jun 2025 00:48:12 -0500 Subject: [PATCH 8/9] Add scripts; add lint --- CLAUDE.md | 4 ++-- Gemfile | 10 +++++++--- Gemfile.lock | 45 +++++++++++++++++++++++++++++++++++++++++++++ script/lint | 5 +++++ script/server | 5 +++++ 5 files changed, 64 insertions(+), 5 deletions(-) create mode 100755 script/lint create mode 100755 script/server diff --git a/CLAUDE.md b/CLAUDE.md index 1bdbef6..fcff926 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -9,9 +9,9 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co - Initial setup: `mise install && bundle` ### Common Commands -- **Development server**: `bin/serve` or `bundle exec jekyll serve --incremental` +- **Development server**: `script/server` or `bin/serve` - **Build site**: `bin/build` or `bundle exec jekyll build` -- **Regular serve**: `bundle exec jekyll serve` +- **Lint code**: `script/lint` (runs StandardRB with auto-fix) ## Site Architecture diff --git a/Gemfile b/Gemfile index 2750baf..fa0c386 100644 --- a/Gemfile +++ b/Gemfile @@ -6,9 +6,13 @@ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" } gem "faraday-retry" gem "jekyll", "~> 4.4" -gem "jekyll-gist" +gem "jekyll-gist" gem "jekyll-paginate" gem "jekyll-seo-tag" -gem "jekyll-sitemap" +gem "jekyll-sitemap" gem "rouge" -gem "webrick" \ No newline at end of file +gem "webrick" + +group :development do + gem "standardrb" +end diff --git a/Gemfile.lock b/Gemfile.lock index e3248cc..58e1fb1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -3,6 +3,7 @@ GEM specs: 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) @@ -63,6 +64,8 @@ GEM 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.9.0) rb-fsevent (~> 0.10, >= 0.10.3) @@ -74,15 +77,42 @@ GEM 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) + 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) + 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) sass-embedded (1.89.1) google-protobuf (~> 4.31) @@ -90,6 +120,20 @@ GEM sawyer (0.9.2) addressable (>= 2.3.5) 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) @@ -107,6 +151,7 @@ DEPENDENCIES jekyll-seo-tag jekyll-sitemap rouge + standardrb webrick BUNDLED WITH diff --git a/script/lint b/script/lint new file mode 100755 index 0000000..c68ef6a --- /dev/null +++ b/script/lint @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -e + +echo "Running StandardRB linter..." +bundle exec standardrb --fix \ No newline at end of file diff --git a/script/server b/script/server new file mode 100755 index 0000000..6adfca6 --- /dev/null +++ b/script/server @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -e + +echo "Starting Jekyll development server..." +bundle exec jekyll serve --incremental --livereload \ No newline at end of file From 80f215de5421425c381dafed187bb82517193817 Mon Sep 17 00:00:00 2001 From: Rob Sanheim Date: Mon, 2 Jun 2025 00:50:50 -0500 Subject: [PATCH 9/9] update todos --- docs/todo.md | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/docs/todo.md b/docs/todo.md index ea16370..354f6fa 100644 --- a/docs/todo.md +++ b/docs/todo.md @@ -1,23 +1,28 @@ # Blog Upgrade Todo List -## GitHub Pages Compatible Upgrade (Current Branch) +## ✅ Completed: Modern Jekyll 4.4.1 Upgrade -### High Priority -- [ ] **Upgrade to Ruby 3.3.4** (GitHub Pages compatible) -- [ ] **Upgrade Jekyll to ~3.10.0** (GitHub Pages compatible) -- [ ] **Update Gemfile** with GitHub Pages compatible versions +### 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 -- [ ] **Test local build** with new versions -- [ ] **Verify site still works** after changes -- [ ] Add circle CI workflow to test build, and also possibly a first pass at a 'link checker' workflow (i imagine this will fail, but it's a start) +### 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 -### Low Priority -- [ ] **Update CLAUDE.md** with new Ruby/Jekyll versions +### 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 Updates (Add Your Ideas Below) +## Future Enhancements - +- [ ] Add CircleCI workflow for additional CI/testing +- [ ] Add link checker workflow (expect initial failures) +- [ ] Consider Sass @import deprecation warnings (Dart Sass migration) ---