From 9b07a4d5f0a094c6db1fbb2c7348dffaba0e5b6f Mon Sep 17 00:00:00 2001 From: Jean Helou Date: Sat, 28 Feb 2026 20:48:41 +0100 Subject: [PATCH] [JAMES-4175] upgrade jekyll version Updates build documentation Creates dedicated nix devshell for jekyll in the homepage directory --- .../modules/community/pages/contributing.adoc | 4 +- docs/modules/community/pages/website.adoc | 69 ++- docs/modules/community/partials/antora.adoc | 2 +- flake.nix | 2 +- src/homepage/Gemfile.lock | 80 ++-- src/homepage/flake.nix | 42 ++ src/homepage/gemset.nix | 399 ++++++++++++++++++ 7 files changed, 553 insertions(+), 45 deletions(-) create mode 100644 src/homepage/flake.nix create mode 100644 src/homepage/gemset.nix diff --git a/docs/modules/community/pages/contributing.adoc b/docs/modules/community/pages/contributing.adoc index cd123382545..ac506ac11e0 100644 --- a/docs/modules/community/pages/contributing.adoc +++ b/docs/modules/community/pages/contributing.adoc @@ -194,7 +194,9 @@ patch is more likely to be committed quickly. There is work in progress to support a more reproductible dev environment so you don't have to figure out what to install or how. -If you already have the nix package manager installed you should be able to use the following command to enter the predefined build env : +This work is based on nix flakes if you are not familiar with nix or flakes you can find more information in the https://nix.dev/manual/nix/2.28/command-ref/new-cli/nix3-flake.html[official documentation], https://wiki.nixos.org/wiki/Flakes[official wiki] or in https://zero-to-nix.com/concepts/flakes/[dedicated] community https://nix.dev/concepts/flakes[resources]. + +If you already have the nix package manager installed you should be able to use the following command to enter the predefined build env (experimental nix flag `flakes` is required, `nix-command` is recommended as it is used in many examples) with : ``` nix develop --no-update-lock-file diff --git a/docs/modules/community/pages/website.adoc b/docs/modules/community/pages/website.adoc index 4ece0bb671a..6cfdbd50d3f 100644 --- a/docs/modules/community/pages/website.adoc +++ b/docs/modules/community/pages/website.adoc @@ -22,49 +22,92 @@ https://james.staged.apache.org[staging version] of the website. ==== == Building the homepage + You can use jekyll to build the website. Go into `{path}` and run the following command -[,shell] +=== Docker + +[WARNING] +==== +The official docker image `jekyll/jekyll` is unmaintained and is not compatible with jekyll version beyond 4.2.2. +In this documentation we suggest a replacement `jvconseil/jekyll-docker` but note that this is not an official image. +Use at your own risks. +==== + +[source,shell] ---- -$ docker run --rm -v="$PWD:/srv/jekyll:Z" -it jekyll/jekyll:$JEKYLL_VERSION jekyll build +$ docker run --rm -v="$PWD:/srv/jekyll:Z" -it jvconseil/jekyll-docker:4 jekyll build ---- The resulting deployable content will be available in the `{path}/_site/` directory. In order to test the homepage, you can use this command: -[,shell] +[source,shell] ---- -$ docker run --rm -v $PWD/site:/srv/jekyll -p 4000:4000 -it jekyll/jekyll jekyll serve +$ docker run --rm -v $PWD/site:/srv/jekyll -p 4000:4000 -it jvconseil/jekyll-docker:4 jekyll serve ---- The site will be available at http://localhost:4000/ If you need to update the current site, checkout the branch asf-site from Apache git: -[,shell] +[source,shell] ---- $ git clone https://git-wip-us.apache.org/repos/asf/james-site.git $ cd james-site $ git checkout origin/asf-site -b asf-site ---- -And replace in the previous commands `$PWD/site` by -`/content`, for example: +make sure to build the site then copy the output to -[,shell] +[source,shell] ---- -$ docker run -v $PWD:/origin -v $PWD/../james-site/content:/destination james/homepage master -$ docker run -v $PWD/.m2:/root/.m2 -v $PWD/../james-site/content:/origin -v $PWD/site:/destination james/site master +$ docker run --rm -v="$PWD:/srv/jekyll:Z" -it jvconseil/jekyll-docker:4 jekyll build +$ cp ../james-site/content ---- Then just push the new site: -[,shell] +[source,shell] ---- $ cd ../james-site $ git push origin asf-site ---- +=== Experimental nix environment + +From the root of the repository checkout, you can use the flake's devshell + +[source,shell] +---- +$ cd src/homepage +$ nix develop +---- + +Then use jekyll directly + +[source,shell] +---- +$ jekyll serve +# or +$ jekyll build +---- + +==== Gemset update for nix + +Updating the gemset to track the gemfile updates is a bit involved : + +. ensure you are out of all nix devshell (check using `echo $SHLVL` it should be 1) +. create a temporary shell for gem manipulation `nix-shell -p ruby -p bundix` +. update the gemfile then run ++ +[,shell] +---- +BUNDLE_FORCE_RUBY_PLATFORM="true" bundle lock --update +bundix -l +---- +. exit the temporary shell and enter the devShell again `nix develop` + == Maven site The maven site deploy phase uses and requires locally configuring credentials to @@ -100,7 +143,7 @@ The docker file in `src/site-docker` is currently broken: prepare for some tinkering before building using this method. ==== -[,shell] +[source,shell] ---- $ docker build -t james/site src/site-docker $ docker run -v $PWD/.m2:/root/.m2 -v $PWD:/origin -v $PWD/site:/destination james/site master @@ -109,7 +152,7 @@ $ docker run -v $PWD/.m2:/root/.m2 -v $PWD:/origin -v $PWD/site:/destination jam === Nix development shell Enter the xref:contributing.adoc#_experimental_nix_support[james experimental -development shell] +development shell] with `nix develop`. 1. run `mvn clean package site -Djib.skip` 2. Test the built site in your browser from the `{path}/target/site` folder diff --git a/docs/modules/community/partials/antora.adoc b/docs/modules/community/partials/antora.adoc index fedaff768d7..69a03a8b6a4 100644 --- a/docs/modules/community/partials/antora.adoc +++ b/docs/modules/community/partials/antora.adoc @@ -48,7 +48,7 @@ Go to `http://localhost` in your browser. === Build with the nix enviroment Enter the xref:contributing.adoc#_experimental_nix_support[james experimental -development shell] +development shell] with `nix develop` . Build the Antora content locally + diff --git a/flake.nix b/flake.nix index fb7d5625659..a9c9d1c71b9 100644 --- a/flake.nix +++ b/flake.nix @@ -29,11 +29,11 @@ packages = with pkgs; [ antora # build documentation bundler # homepage and blog + bundix cacert # ssl certificate management dive # explore generated docker images git # version control jdk # build and run james - jekyll # homepage and blog maven # build james ]; MAVEN_OPTS = "-Djna.library.path=" + pkgs.lib.makeLibraryPath [pkgs.udev]; diff --git a/src/homepage/Gemfile.lock b/src/homepage/Gemfile.lock index c2acc283954..7511910c039 100644 --- a/src/homepage/Gemfile.lock +++ b/src/homepage/Gemfile.lock @@ -1,72 +1,94 @@ GEM remote: https://rubygems.org/ specs: - addressable (2.8.1) - public_suffix (>= 2.0.2, < 6.0) + addressable (2.8.9) + public_suffix (>= 2.0.2, < 8.0) + base64 (0.3.0) + bigdecimal (4.0.1) colorator (1.1.0) - concurrent-ruby (1.1.10) + concurrent-ruby (1.3.6) + csv (3.3.5) em-websocket (0.5.3) eventmachine (>= 0.12.9) http_parser.rb (~> 0) eventmachine (1.2.7) - ffi (1.15.5) + ffi (1.17.3) + ffi (1.17.3-x86_64-linux-musl) forwardable-extended (2.6.0) - http_parser.rb (0.8.0) - i18n (1.12.0) + google-protobuf (4.34.0) + bigdecimal + rake (~> 13.3) + google-protobuf (4.34.0-x86_64-linux-musl) + bigdecimal + rake (~> 13.3) + http_parser.rb (0.8.1) + i18n (1.14.8) concurrent-ruby (~> 1.0) - jekyll (4.2.2) + 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-feed (0.17.0) jekyll (>= 3.7, < 5.0) - jekyll-sass-converter (2.2.0) - sassc (> 2.0.1, < 3.0) + jekyll-sass-converter (3.1.0) + sass-embedded (~> 1.75) jekyll-seo-tag (2.8.0) jekyll (>= 3.8, < 5.0) jekyll-watch (2.2.1) listen (~> 3.0) - kramdown (2.4.0) - rexml + json (2.18.1) + kramdown (2.5.2) + rexml (>= 3.4.4) kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) - liquid (4.0.3) - listen (3.7.1) + liquid (4.0.4) + listen (3.10.0) + logger rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) + logger (1.7.0) mercenary (0.4.0) - minima (2.5.1) + minima (2.5.2) jekyll (>= 3.5, < 5.0) jekyll-feed (~> 0.9) jekyll-seo-tag (~> 2.1) pathutil (0.16.2) forwardable-extended (~> 2.6) - public_suffix (5.0.0) + public_suffix (7.0.2) + rake (13.3.1) rb-fsevent (0.11.2) - rb-inotify (0.10.1) + rb-inotify (0.11.1) ffi (~> 1.0) - rexml (3.2.5) - rouge (3.30.0) + rexml (3.4.4) + rouge (4.7.0) safe_yaml (1.0.5) - sassc (2.4.0) - ffi (~> 1.9) - terminal-table (2.0.0) - unicode-display_width (~> 1.1, >= 1.1.1) - unicode-display_width (1.8.0) + sass-embedded (1.97.3) + google-protobuf (~> 4.31) + rake (>= 13) + sass-embedded (1.97.3-x86_64-linux-musl) + google-protobuf (~> 4.31) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) + unicode-display_width (2.6.0) webrick (1.9.2) PLATFORMS + ruby x86_64-linux-musl DEPENDENCIES @@ -75,7 +97,7 @@ DEPENDENCIES webrick RUBY VERSION - ruby 3.1.1p18 + ruby 3.3.10p183 BUNDLED WITH 2.3.25 diff --git a/src/homepage/flake.nix b/src/homepage/flake.nix new file mode 100644 index 00000000000..6a0f73e6a2a --- /dev/null +++ b/src/homepage/flake.nix @@ -0,0 +1,42 @@ +{ + description = "james homepage build env"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11"; + }; + + outputs = + { self, nixpkgs }@inputs: + let + forAllSystems = nixpkgs.lib.genAttrs nixpkgs.lib.platforms.all; + in + { + devShell = forAllSystems ( + system: + let + pkgs = import nixpkgs { inherit system; }; + env = pkgs.bundlerEnv { + name = "james homepagebuild env"; + gemdir = ./.; + groups = [ + "default" + "development" + "test" + ]; + + meta = with pkgs.lib; { + description = "james homepagebuild env"; + platforms = platforms.unix; + }; + }; + in + pkgs.mkShell { + buildInputs = [ + env + env.wrappedRuby + pkgs.bundix + ]; + } + ); + }; +} \ No newline at end of file diff --git a/src/homepage/gemset.nix b/src/homepage/gemset.nix new file mode 100644 index 00000000000..8dd38589521 --- /dev/null +++ b/src/homepage/gemset.nix @@ -0,0 +1,399 @@ +{ + addressable = { + dependencies = ["public_suffix"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "11ali533wx91fh93xlk88gjqq8w0p7kxw09nlh41hwc9wv5ly5fc"; + type = "gem"; + }; + version = "2.8.9"; + }; + base64 = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0yx9yn47a8lkfcjmigk79fykxvr80r4m1i35q82sxzynpbm7lcr7"; + type = "gem"; + }; + version = "0.3.0"; + }; + bigdecimal = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "19y406nx17arzsbc515mjmr6k5p59afprspa1k423yd9cp8d61wb"; + type = "gem"; + }; + version = "4.0.1"; + }; + colorator = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0f7wvpam948cglrciyqd798gdc6z3cfijciavd0dfixgaypmvy72"; + type = "gem"; + }; + version = "1.1.0"; + }; + concurrent-ruby = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1aymcakhzl83k77g2f2krz07bg1cbafbcd2ghvwr4lky3rz86mkb"; + type = "gem"; + }; + version = "1.3.6"; + }; + csv = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0gz7r2kazwwwyrwi95hbnhy54kwkfac5swh2gy5p5vw36fn38lbf"; + type = "gem"; + }; + version = "3.3.5"; + }; + em-websocket = { + dependencies = ["eventmachine" "http_parser.rb"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1a66b0kjk6jx7pai9gc7i27zd0a128gy73nmas98gjz6wjyr4spm"; + type = "gem"; + }; + version = "0.5.3"; + }; + eventmachine = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0wh9aqb0skz80fhfn66lbpr4f86ya2z5rx6gm5xlfhd05bj1ch4r"; + type = "gem"; + }; + version = "1.2.7"; + }; + ffi = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0k1xaqw2jk13q3ss7cnyvkp8fzp75dk4kazysrxgfd1rpgvkk7qf"; + type = "gem"; + }; + version = "1.17.3"; + }; + forwardable-extended = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15zcqfxfvsnprwm8agia85x64vjzr2w0xn9vxfnxzgcv8s699v0v"; + type = "gem"; + }; + version = "2.6.0"; + }; + google-protobuf = { + dependencies = ["bigdecimal" "rake"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0cg5kc8ihi3y33510p5jcbpknnv42lxray3scs07r072zcqfmymz"; + type = "gem"; + }; + version = "4.34.0"; + }; + "http_parser.rb" = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0yh924g697spcv4hfigyxgidhyy6a7b9007rnac57airbcadzs4s"; + type = "gem"; + }; + version = "0.8.1"; + }; + i18n = { + dependencies = ["concurrent-ruby"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1994i044vdmzzkyr76g8rpl1fq1532wf0sb21xg5r1ilj5iphmr8"; + type = "gem"; + }; + version = "1.14.8"; + }; + jekyll = { + dependencies = ["addressable" "base64" "colorator" "csv" "em-websocket" "i18n" "jekyll-sass-converter" "jekyll-watch" "json" "kramdown" "kramdown-parser-gfm" "liquid" "mercenary" "pathutil" "rouge" "safe_yaml" "terminal-table" "webrick"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1h8qpki1zcw4srnzmbba2gwajycm50w53kxq8l6vicm5azc484ac"; + type = "gem"; + }; + version = "4.4.1"; + }; + jekyll-feed = { + dependencies = ["jekyll"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1hzwmjrxi57x68i7jx5rxi8qlcbqcbg3di55wywrp53pr0bap6k8"; + type = "gem"; + }; + version = "0.17.0"; + }; + jekyll-sass-converter = { + dependencies = ["sass-embedded"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0hr4hsir8lm8aw3yj9zi7hx2xs4k00xn9inh24642d6iy625v4l3"; + type = "gem"; + }; + version = "3.1.0"; + }; + jekyll-seo-tag = { + dependencies = ["jekyll"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0638mqhqynghnlnaz0xi1kvnv53wkggaq94flfzlxwandn8x2biz"; + type = "gem"; + }; + version = "2.8.0"; + }; + jekyll-watch = { + dependencies = ["listen"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1qd7hy1kl87fl7l0frw5qbn22x7ayfzlv9a5ca1m59g0ym1ysi5w"; + type = "gem"; + }; + version = "2.2.1"; + }; + json = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "11prr7nrxh1y4rfsqa51gy4ixx63r18cz9mdnmk0938va1ajf4gy"; + type = "gem"; + }; + version = "2.18.1"; + }; + kramdown = { + dependencies = ["rexml"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1yh2gwpwhh0p4vc0aabzn0hb55av0wkcq3gh3w8zkdk69hh4598v"; + type = "gem"; + }; + version = "2.5.2"; + }; + kramdown-parser-gfm = { + dependencies = ["kramdown"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0a8pb3v951f4x7h968rqfsa19c8arz21zw1vaj42jza22rap8fgv"; + type = "gem"; + }; + version = "1.1.0"; + }; + liquid = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1czxv2i1gv3k7hxnrgfjb0z8khz74l4pmfwd70c7kr25l2qypksg"; + type = "gem"; + }; + version = "4.0.4"; + }; + listen = { + dependencies = ["logger" "rb-fsevent" "rb-inotify"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1ln9c0vx165hkfbn2817qw4m6i77xcxh6q0r5v6fqfhlcbdq5qf6"; + type = "gem"; + }; + version = "3.10.0"; + }; + logger = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "00q2zznygpbls8asz5knjvvj2brr3ghmqxgr83xnrdj4rk3xwvhr"; + type = "gem"; + }; + version = "1.7.0"; + }; + mercenary = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0f2i827w4lmsizrxixsrv2ssa3gk1b7lmqh8brk8ijmdb551wnmj"; + type = "gem"; + }; + version = "0.4.0"; + }; + minima = { + dependencies = ["jekyll" "jekyll-feed" "jekyll-seo-tag"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0nm4ib1pz431ydrd2q0hzw10aykmsf74644992mz1864gcxlwhww"; + type = "gem"; + }; + version = "2.5.2"; + }; + pathutil = { + dependencies = ["forwardable-extended"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "12fm93ljw9fbxmv2krki5k5wkvr7560qy8p4spvb9jiiaqv78fz4"; + type = "gem"; + }; + version = "0.16.2"; + }; + public_suffix = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0mx84s7gn3xabb320hw8060v7amg6gmcyyhfzp0kawafiq60j54i"; + type = "gem"; + }; + version = "7.0.2"; + }; + rake = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "175iisqb211n0qbfyqd8jz2g01q6xj038zjf4q0nm8k6kz88k7lc"; + type = "gem"; + }; + version = "13.3.1"; + }; + rb-fsevent = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1zmf31rnpm8553lqwibvv3kkx0v7majm1f341xbxc0bk5sbhp423"; + type = "gem"; + }; + version = "0.11.2"; + }; + rb-inotify = { + dependencies = ["ffi"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0vmy8xgahixcz6hzwy4zdcyn2y6d6ri8dqv5xccgzc1r292019x0"; + type = "gem"; + }; + version = "0.11.1"; + }; + rexml = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0hninnbvqd2pn40h863lbrn9p11gvdxp928izkag5ysx8b1s5q0r"; + type = "gem"; + }; + version = "3.4.4"; + }; + rouge = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0fd77qcz603mli4lyi97cjzkv02hsfk60m495qv5qcn02mkqk9fv"; + type = "gem"; + }; + version = "4.7.0"; + }; + safe_yaml = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0j7qv63p0vqcd838i2iy2f76c3dgwzkiz1d1xkg7n0pbnxj2vb56"; + type = "gem"; + }; + version = "1.0.5"; + }; + sass-embedded = { + dependencies = ["google-protobuf" "rake"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "19ppjqgp43spmg8s457jgpsys98ii48frx0911xzmb73kak6s4y4"; + type = "gem"; + }; + version = "1.97.3"; + }; + terminal-table = { + dependencies = ["unicode-display_width"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "14dfmfjppmng5hwj7c5ka6qdapawm3h6k9lhn8zj001ybypvclgr"; + type = "gem"; + }; + version = "3.0.2"; + }; + unicode-display_width = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0nkz7fadlrdbkf37m0x7sw8bnz8r355q3vwcfb9f9md6pds9h9qj"; + type = "gem"; + }; + version = "2.6.0"; + }; + webrick = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "0ca1hr2rxrfw7s613rp4r4bxb454i3ylzniv9b9gxpklqigs3d5y"; + type = "gem"; + }; + version = "1.9.2"; + }; +}