CARVIEW |
Select Language
HTTP/2 302
server: nginx
date: Wed, 13 Aug 2025 08:03:04 GMT
content-type: text/plain; charset=utf-8
content-length: 0
x-archive-redirect-reason: found capture at 20090104095724
location: https://web.archive.org/web/20090104095724/https://github.com/pjhyett/github-gem-builder/tree
server-timing: captures_list;dur=0.825265, exclusion.robots;dur=0.025816, exclusion.robots.policy;dur=0.011789, esindex;dur=0.013547, cdx.remote;dur=1733.790487, LoadShardBlock;dur=438.106770, PetaboxLoader3.datanode;dur=161.722405, PetaboxLoader3.resolve;dur=206.671618
x-app-server: wwwb-app217
x-ts: 302
x-tr: 2211
server-timing: TR;dur=0,Tw;dur=72,Tc;dur=0
set-cookie: wb-p-SERVER=wwwb-app217; path=/
x-location: All
x-rl: 0
x-na: 0
x-page-cache: MISS
server-timing: MISS
x-nid: DigitalOcean
referrer-policy: no-referrer-when-downgrade
permissions-policy: interest-cohort=()
HTTP/2 301
server: nginx
date: Wed, 13 Aug 2025 08:03:06 GMT
content-type: text/html; charset=utf-8
content-length: 122
x-archive-orig-server: nginx/0.6.26
x-archive-orig-date: Sun, 04 Jan 2009 09:57:23 GMT
x-archive-orig-connection: close
x-archive-orig-set-cookie: _github_ses=BAh7ByIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsABjoKQHVzZWR7ADoOcmV0dXJuX3RvIhsvaW5ib3gvbmV3L2FkYW13aWdnaW5z--31c669091de8a526a09d33df14d8bfdff475cb1e; path=/; expires=Wed, 01 Jan 2020 08:00:00 GMT; HttpOnly
x-archive-orig-status: 301 Moved Permanently
location: https://web.archive.org/web/20090104095724/https://github.com/pjhyett/github-gem-builder/tree/master
x-archive-orig-x-runtime: 754ms
x-archive-orig-cache-control: no-cache
x-archive-orig-content-length: 122
cache-control: max-age=1800
memento-datetime: Sun, 04 Jan 2009 09:57:24 GMT
link: ; rel="original", ; rel="timemap"; type="application/link-format", ; rel="timegate", ; rel="first memento"; datetime="Wed, 29 Oct 2008 21:45:52 GMT", ; rel="prev memento"; datetime="Mon, 17 Nov 2008 11:39:27 GMT", ; rel="memento"; datetime="Sun, 04 Jan 2009 09:57:24 GMT", ; rel="next memento"; datetime="Wed, 19 Aug 2009 08:18:50 GMT", ; rel="last memento"; datetime="Wed, 19 Aug 2009 08:18:50 GMT"
content-security-policy: default-src 'self' 'unsafe-eval' 'unsafe-inline' data: blob: archive.org web.archive.org web-static.archive.org wayback-api.archive.org athena.archive.org analytics.archive.org pragma.archivelab.org wwwb-events.archive.org
x-archive-src: 52_7_20090104074205_crawl107-c/52_7_20090104095546_crawl103.arc.gz
server-timing: captures_list;dur=0.434907, exclusion.robots;dur=0.019355, exclusion.robots.policy;dur=0.009123, esindex;dur=0.009628, cdx.remote;dur=765.941191, LoadShardBlock;dur=123.414811, PetaboxLoader3.datanode;dur=103.757294, PetaboxLoader3.resolve;dur=92.881665, load_resource;dur=90.954490
x-app-server: wwwb-app217
x-ts: 301
x-tr: 1009
server-timing: TR;dur=0,Tw;dur=79,Tc;dur=0
x-location: All
x-rl: 0
x-na: 0
x-page-cache: MISS
server-timing: MISS
x-nid: DigitalOcean
referrer-policy: no-referrer-when-downgrade
permissions-policy: interest-cohort=()
HTTP/2 200
server: nginx
date: Wed, 13 Aug 2025 08:03:07 GMT
content-type: text/html; charset=utf-8
x-archive-orig-server: nginx/0.6.26
x-archive-orig-date: Sun, 04 Jan 2009 09:57:23 GMT
x-archive-orig-connection: close
x-archive-orig-set-cookie: _github_ses=BAh7BzoOcmV0dXJuX3RvIhsvaW5ib3gvbmV3L2FkYW13aWdnaW5zIgpmbGFzaElDOidBY3Rpb25Db250cm9sbGVyOjpGbGFzaDo6Rmxhc2hIYXNoewAGOgpAdXNlZHsA--016ce8dd7f03ab8050b4a0a5fe3be555c9408186; path=/; expires=Wed, 01 Jan 2020 08:00:00 GMT; HttpOnly
x-archive-orig-status: 200 OK
x-archive-orig-x-runtime: 435ms
x-archive-orig-etag: "bd8a73708f9c81b69ae9e9780571137d"
x-archive-orig-cache-control: private, max-age=0, must-revalidate
x-archive-orig-content-length: 17065
x-archive-guessed-content-type: text/html
x-archive-guessed-charset: utf-8
memento-datetime: Sun, 04 Jan 2009 09:57:24 GMT
link: ; rel="original", ; rel="timemap"; type="application/link-format", ; rel="timegate", ; rel="first memento"; datetime="Tue, 28 Oct 2008 13:16:10 GMT", ; rel="prev memento"; datetime="Thu, 13 Nov 2008 02:07:36 GMT", ; rel="memento"; datetime="Sun, 04 Jan 2009 09:57:24 GMT", ; rel="next memento"; datetime="Tue, 06 Jan 2009 04:33:33 GMT", ; rel="last memento"; datetime="Wed, 19 Aug 2009 08:18:50 GMT"
content-security-policy: default-src 'self' 'unsafe-eval' 'unsafe-inline' data: blob: archive.org web.archive.org web-static.archive.org wayback-api.archive.org athena.archive.org analytics.archive.org pragma.archivelab.org wwwb-events.archive.org
x-archive-src: 52_7_20090104074205_crawl107-c/52_7_20090104095546_crawl103.arc.gz
server-timing: captures_list;dur=0.553327, exclusion.robots;dur=0.022955, exclusion.robots.policy;dur=0.010364, esindex;dur=0.010205, cdx.remote;dur=449.191192, LoadShardBlock;dur=279.581519, PetaboxLoader3.datanode;dur=159.289561, PetaboxLoader3.resolve;dur=160.307543, load_resource;dur=60.574356
x-app-server: wwwb-app217
x-ts: 200
x-tr: 853
server-timing: TR;dur=0,Tw;dur=282,Tc;dur=0
x-location: All
x-rl: 0
x-na: 0
x-page-cache: MISS
server-timing: MISS
x-nid: DigitalOcean
referrer-policy: no-referrer-when-downgrade
permissions-policy: interest-cohort=()
content-encoding: gzip
pjhyett's github-gem-builder at master — GitHub
We got nominated! Help us out and vote for GitHub as Best Bootstrapped Startup of 2008. (You can vote once a day.) [ hide ]
This repository is private.
All pages are served over SSL and all pushing and pulling is done over SSH.
No one may fork, clone, or view it unless they are added as a member.
Every repository with this icon (
) is private.
Every repository with this icon (

This repository is public.
Anyone may fork, clone, or view it.
Every repository with this icon (
) is public.
Every repository with this icon (

Description: | The scripts used to build RubyGems on GitHub |
Clone URL: |
git://github.com/pjhyett/github-gem-builder.git
Give this clone URL to anyone.
git clone git://github.com/pjhyett/github-gem-builder.git
|
name | age | message | |
---|---|---|---|
![]() |
README | Fri Oct 24 16:14:00 -0700 2008 | Initial commit of gem builder [pjhyett] |
![]() |
gem_builder.rb | Fri Oct 24 16:14:00 -0700 2008 | Initial commit of gem builder [pjhyett] |
![]() |
gem_eval.rb | Fri Oct 31 23:38:55 -0700 2008 | removed access to tmpdir var [coderrr] |
![]() |
gem_eval_test.rb | Sun Nov 02 16:34:32 -0800 2008 | fix test startup [coderrr] |
![]() |
git_mock | Fri Oct 31 23:33:06 -0700 2008 | moved all system commands outside of fork so se... [coderrr] |
![]() |
lazy_dir.rb | Sun Nov 02 16:25:30 -0800 2008 | made base glob dir more specific [coderrr] |
![]() |
lazy_dir_test.rb | Sun Nov 02 16:25:30 -0800 2008 | made base glob dir more specific [coderrr] |
![]() |
security.rb | Fri Oct 31 23:33:06 -0700 2008 | moved all system commands outside of fork so se... [coderrr] |
![]() |
security_test.rb | Fri Oct 31 05:30:23 -0700 2008 | remove debug comments [coderrr] |
README
GitHub's Gem Evaler ------------------- Help make GitHub's gem build process more secure and robust! There are two components associated with this: * gem_builder.rb - Script that builds the gem * gem_eval.rb - Sandboxed Sinatra app that evals ruby gemspecs gem_builder.rb works as follows: 1) process() is called with a repository object and the path to the gemspec 2) If the spec is not in YAML, a request is made to the gem evaler (see below how it works) 3) A Gem::Specification object is created from the YAML gemspec and renamed with the user's login 4) The gem is built from the Gem::Specification using a monkey-patched version of RubyGems, so instead of grabbing the files from the filesystem, they're grabbed from the git repo gem_eval.rb works as follows: 1) Receives a request with the repo location and the ruby gemspec 2) Makes a shallow clone of the repo and chdir's to that repo 3) Evals the spec in a separate thread with a higher $SAFE level 4) Converts spec to YAML Goals ----- * Lower the $SAFE level to allow methods like Dir.glob, but without compromising security. * Never get another email from someone wondering why their gem didn't build
This feature is coming soon. Sit tight!