README.md in gitlab-grack-2.0.0.pre vs README.md in gitlab-grack-2.0.0.rc1
- old
+ new
@@ -1,95 +1,292 @@
-Grack - Ruby/Rack Git Smart-HTTP Server Handler
-===============================================
+# GitLab Development Kit
-[![Build Status](https://travis-ci.org/gitlabhq/grack.png)](https://travis-ci.org/gitlabhq/grack)
-[![Code Climate](https://codeclimate.com/github/gitlabhq/grack.png)](https://codeclimate.com/github/gitlabhq/grack)
+The GDK runs a GitLab development environment isolated in a directory.
+This environemnt contains GitLab CE, CI and Runner.
+This project uses Foreman to run dedicated Postgres and Redis processes for
+GitLab development. All data is stored inside the gitlab-development-kit
+directory. All connections to supporting services go through Unix domain
+sockets to avoid port conflicts.
-This project aims to replace the builtin git-http-backend CGI handler
-distributed with C Git with a Rack application. This reason for doing this
-is to allow far more webservers to be able to handle Git smart http requests.
+## Design goals
-The default git-http-backend only runs as a CGI script, and specifically is
-only targeted for Apache 2.x usage (it requires PATH_INFO to be set and
-specifically formatted). So, instead of trying to get it to work with
-other CGI capable webservers (Lighttpd, etc), we can get it running on nearly
-every major and minor webserver out there by making it Rack capable. Rack
-applications can run with the following handlers:
+- Get the user started, do not try to take care of everything
+- Run everything as your 'desktop' user on your development machine
+- GitLab Development Kit itself does not run `sudo` commands
+- It is OK to leave some things to the user (e.g. installing Ruby)
-* CGI
-* FCGI
-* Mongrel (and EventedMongrel and SwiftipliedMongrel)
-* WEBrick
-* SCGI
-* LiteSpeed
-* Thin
+## Installation
-These web servers include Rack handlers in their distributions:
+The preferred way to use GitLab Development Kit is to install Ruby and dependencies on your 'native' OS.
+We strongly recommend the native install since it is much faster that a virtualized one.
+If you want to use [Vagrant](https://www.vagrantup.com/) instead please see [the instructions for our (experimental) Vagrantfile](#vagrant).
+**DO NOT** run the installation as a root user
-* Ebb
-* Fuzed
-* Phusion Passenger (which is mod_rack for Apache and for nginx)
-* Unicorn
-* Puma
+### Install dependencies
-With [Warbler](http://caldersphere.rubyforge.org/warbler/classes/Warbler.html),
-and JRuby, we can also generate a WAR file that can be deployed in any Java
-web application server (Tomcat, Glassfish, Websphere, JBoss, etc).
+#### Prerequisites for all platforms
-Since the git-http-backend is really just a simple wrapper for the upload-pack
-and receive-pack processes with the '--stateless-rpc' option, it does not
-actually re-implement very much.
+If you do not have the dependencies below you will experience strange errors during installation.
-Dependencies
-========================
-* Ruby - http://www.ruby-lang.org
-* Rack - http://rack.rubyforge.org
-* A Rack-compatible web server
-* Git >= 1.7 (currently the 'pu' branch)
-* Mocha (only for running the tests)
+1. Ruby 2.1.5 with your method of choice (RVM, ruby-build, rbenv, chruby, etc.)
+1. Bundler `gem install bundler`
-Quick Start
-========================
- $ gem install rack
- $ (edit config.ru to set git project path)
- $ rackup --host 127.0.0.1 -p 8080 config.ru
- $ git clone http://127.0.0.1:8080/schacon/grit.git
+#### OS X 10.9
-Contributing
-========================
-If you would like to contribute to the Grack project, I prefer to get
-pull-requests via GitHub. You should include tests for whatever functionality
-you add. Just fork this project, push your changes to your fork and click
-the 'pull request' button. To run the tests, you first need to install the
-'mocha' mocking library and initialize the submodule.
+```
+brew tap homebrew/dupes
+brew install redis postgresql phantomjs libiconv icu4c pkg-config cmake nodejs
+bundle config build.nokogiri --with-iconv-dir=/usr/local/opt/libiconv
+```
- $ sudo gem install mocha
- $ git submodule init
- $ git submodule update
+#### Ubuntu
-Then you should be able to run the tests with a 'rake' command. You can also
-run coverage tests with 'rake rcov' if you have rcov installed.
+```
+sudo apt-get install postgresql libpq-dev phantomjs redis-server libicu-dev cmake g++ nodejs libkrb5-dev
+```
-License
-========================
- (The MIT License)
+#### Arch Linux
- Copyright (c) 2009 Scott Chacon <schacon@gmail.com>
+```
+sudo pacman -S postgresql phantomjs redis postgresql-libs icu nodejs
+```
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- 'Software'), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
+#### Debian
- The above copyright notice and this permission notice shall be
- included in all copies or substantial portions of the Software.
+Please contribute this by sending a merge request.
- THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#### RedHat
+
+Please contribute this by sending a merge request.
+
+### Clone GitLab Development Kit repository
+
+```
+git clone https://gitlab.com/gitlab-org/gitlab-development-kit.git
+cd gitlab-development-kit
+```
+
+### Install the repositories and gems
+
+The Makefile will clone the repositories, install the Gem bundles and set up
+basic configuration files.
+
+```
+# Clone the official repositories of gitlab and gitlab-shell
+make
+```
+
+Alternatively, you can clone straight from your forked repositories or GitLab EE.
+
+```
+# Clone your own forked repositories
+make gitlab_repo=git@gitlab.com:example/gitlab-ce.git gitlab_shell_repo=git@gitlab.com:example/gitlab-shell.git
+```
+
+### Post-installation
+
+Start Redis and PostgreSQL by running the command below.
+
+ bundle exec foreman start
+
+Seed the main GitLab database:
+
+ cd gitlab && bundle exec rake db:create dev:setup
+
+Finally, start the main GitLab rails application:
+
+ bundle exec foreman start
+
+Now you can go to http://localhost:3000 in your browser.
+The development login credentials are `root` and `5iveL!fe`
+
+If you want to work on GitLab CI, first seed the GitLab CI database:
+
+ cd gitlab-ci && bundle exec rake db:create db:setup
+
+To start the GitLab CI rails application:
+
+ bundle exec foreman start
+
+Setup the GitLab Runner:
+
+ cd gitlab-runner
+ CI_SERVER_URL=http://localhost:9000 bundle exec ./bin/setup
+
+Start the GitLab Runner:
+
+ bundle exec ./bin/runner
+
+To enable the OpenLDAP server, see the OpenLDAP instructions in this readme.
+
+END Post-installation
+
+Please do not delete the 'END Post-installation' line above. It is used to
+print the post-installation message from the Makefile.
+
+### Vagrant
+
+[Vagrant](http://www.vagrantup.com) is a tool for setting up identical development
+environments including all dependencies. Vagrant will default to using
+[VirtualBox](http://www.virtualbox.org), but it has many plugins for different
+environments.
+
+Vagrant allows you to develop GitLab without affecting your host machine.
+But we recommend developing GitLab on metal if you can.
+Vagrant can be very slow since the NFS server is on the host OS.
+And GitLab (testing) accesses a lot of files.
+You can improve the speed by running NFS on the guest OS.
+In this case you should take care to not lose the files when you shut down the VM.
+
+Once you have Vagrant installed, simply type `vagrant up` in this directory. Vagrant
+will download an OS image, bring it up, and install all the prerequisites. You then
+type `vagrant ssh` to ssh into the box. This directory will be available as a shared
+folder in `/vagrant/` and you can continue at *Install the repositories and gems*
+below.
+
+Typically you keep editing on the host machine but run `make`, `bundle exec` etc.
+inside the `vagrant ssh` session.
+
+Note: On some setups the shared folder will have the wrong user. This is detected
+by the Vagrantfile and you should `sudo su - build` to switch to the correct user
+in that case.
+
+## Development
+
+When doing development, you will need one shell session (terminal window)
+running Postgres and Redis, and one or more other sessions to work on GitLab
+itself.
+
+### Example
+
+First start Postgres and Redis.
+
+```
+# terminal window 1
+# current directory: gitlab-development-kit
+bundle exec foreman start
+```
+
+Next, start a Rails development server.
+
+```
+# terminal window 2
+# current directory: gitlab-development-kit/gitlab
+bundle exec foreman start
+```
+
+Now you can go to http://localhost:3000 in your browser.
+The development login credentials are `root` and `5iveL!fe`
+
+### Running the tests
+
+In order to run the test you can use the following commands:
+- `rake spinach` to run the spinach suite
+- `rake spec` to run the rspec suite
+- `rake jasmine:ci` to run the jasmine test suite
+- `rake gitlab:test` to run all the tests
+
+Note: You can't run `rspec .` since this will try to run all the `_spec.rb`
+files it can find, also the ones in `/tmp`
+
+To run a single test file you can use:
+
+- `bundle exec rspec spec/controllers/commit_controller_spec.rb` for a rspec test
+- `bundle exec spinach features/project/issues/milestones.feature` for a spinach test
+
+## Update gitlab and gitlab-shell repositories
+
+When working on a new feature, always check that your `gitlab` repository is up
+to date with the upstream master branch.
+
+In order to fetch the latest code, first make sure that `foreman` for
+postgres is runnning (needed for db migration) and then run:
+
+```
+make update
+```
+
+This will update both `gitlab`, `gitlab-ci` and `gitlab-shell` and run any possible migrations.
+You can also update them separately by running `make gitlab-update` `make gitlab-ci-update` and
+`make gitlab-shell-update` respectively.
+
+## OpenLDAP
+
+To run the OpenLDAP installation included in the GitLab development kit do the following:
+
+```
+vim Procfile # remove the comment on the OpenLDAP line
+cd gitlab-openldap
+make # will setup the databases
+```
+
+in the gitlab repository edit config/gitlab.yml;
+
+```yaml
+ldap:
+ enabled: true
+ servers:
+ main:
+ label: LDAP
+ host: 127.0.0.1
+ port: 3890
+ uid: 'uid'
+ method: 'plain' # "tls" or "ssl" or "plain"
+ base: 'dc=example,dc=com'
+ user_filter: ''
+ group_base: 'ou=groups,dc=example,dc=com'
+ admin_group: ''
+ # Alternative server, multiple LDAP servers only work with GitLab-EE
+ # alt:
+ # label: LDAP-alt
+ # host: 127.0.0.1
+ # port: 3890
+ # uid: 'uid'
+ # method: 'plain' # "tls" or "ssl" or "plain"
+ # base: 'dc=example-alt,dc=com'
+ # user_filter: ''
+ # group_base: 'ou=groups,dc=example-alt,dc=com'
+ # admin_group: ''
+```
+
+The second database is optional, and will only work with Gitlab-EE.
+
+## Troubleshooting
+
+### Rails cannot connect to Postgres
+
+- Check if foreman is running in the gitlab-development-kit directory.
+- Check for custom Postgres connection settings defined via the environment; we
+ assume none such variables are set. Look for them with `set | grep '^PG'`.
+
+### 'LoadError: dlopen' when starting Ruby apps
+
+This can happen when you try to load a Ruby gem with native extensions that
+were linked against a system library that is no longer there. A typical culprit
+is Homebrew on OS X, which encourages frequent updates (`brew update && brew
+upgrade`) which may break binary compatibility.
+
+```
+bundle exec rake db:create gitlab:setup
+rake aborted!
+LoadError: dlopen(/Users/janedoe/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/extensions/x86_64-darwin-13/2.1.0-static/charlock_holmes-0.6.9.4/charlock_holmes/charlock_holmes.bundle, 9): Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.52.1.dylib
+ Referenced from: /Users/janedoe/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/extensions/x86_64-darwin-13/2.1.0-static/charlock_holmes-0.6.9.4/charlock_holmes/charlock_holmes.bundle
+ Reason: image not found - /Users/janedoe/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/extensions/x86_64-darwin-13/2.1.0-static/charlock_holmes-0.6.9.4/charlock_holmes/charlock_holmes.bundle
+/Users/janedoe/gitlab-development-kit/gitlab/config/application.rb:6:in `<top (required)>'
+/Users/janedoe/gitlab-development-kit/gitlab/Rakefile:5:in `require'
+/Users/janedoe/gitlab-development-kit/gitlab/Rakefile:5:in `<top (required)>'
+(See full trace by running task with --trace)
+```
+
+In the above example, you see that the charlock_holmes gem fails to load
+`libicui18n.52.1.dylib`. You can try fixing this by re-installing
+charlock_holmes:
+
+```
+# in /Users/janedoe/gitlab-development-kit
+gem uninstall charlock_holmes
+bundle install # should reinstall charlock_holmes
+```
+
+### Other problems
+
+Please open an issue on the [GDK issue tracker](https://gitlab.com/gitlab-org/gitlab-development-kit/issues).