From 4a1b42d26c5d35565f121d34527fe4cda0b51bdb Mon Sep 17 00:00:00 2001 From: randx Date: Tue, 4 Sep 2012 19:44:17 +0300 Subject: [PATCH 1/3] update install to use recipes Conflicts: doc/installation.md Signed-off-by: Nihad Abbasov --- doc/installation.md | 168 +++++++++++++------------------------------- 1 file changed, 47 insertions(+), 121 deletions(-) diff --git a/doc/installation.md b/doc/installation.md index 1d32e1b7582..2da63ae8ba3 100644 --- a/doc/installation.md +++ b/doc/installation.md @@ -1,4 +1,4 @@ -## Platform requirements: +## Platform requirements: **The project is designed for the Linux operating system.** @@ -22,7 +22,7 @@ You might have some luck using these, but no guarantees: Gitlab does **not** run on Windows and we have no plans of making Gitlab compatible. -## This installation guide created for Debian/Ubuntu and properly tested. +## This installation guide created for Debian/Ubuntu and properly tested. The installation consists of 6 steps: @@ -43,14 +43,20 @@ Also read the [Read this before you submit an issue](https://github.com/gitlabhq > - - - > First 3 steps can be easily skipped with simply install script: -> -> # Install curl and sudo +> +> # Install curl and sudo > apt-get install curl sudo -> +> > # 3 steps in 1 command :) -> curl https://raw.github.com/gitlabhq/gitlabhq/master/doc/debian_ubuntu.sh | sh -> -> Now you can go to step 4" +> curl https://raw.github.com/gitlabhq/gitlab-recipes/master/install/debian_ubuntu.sh | sh +> +> Now you can go to [Step 4](#4-install-gitlab-and-configuration-check-status-configuration) +> +> Or if you are installing on Amazon Web Services using Ubuntu 12.04 you can do all steps (1 to 6) at once with: +> +> curl https://raw.github.com/gitlabhq/gitlab-recipes/master/install/debian_ubuntu_aws.sh | sh +> +> for more detailed instructions read the HOWTO section of [the script](https://github.com/gitlabhq/gitlab-recipes/blob/master/install/debian_ubuntu_aws.sh) > - - - # 1. Install packages @@ -61,15 +67,15 @@ Also read the [Read this before you submit an issue](https://github.com/gitlabhq sudo apt-get upgrade sudo apt-get install -y wget curl gcc checkinstall libxml2-dev libxslt-dev sqlite3 libsqlite3-dev libcurl4-openssl-dev libreadline6-dev libc6-dev libssl-dev libmysql++-dev make build-essential zlib1g-dev libicu-dev redis-server openssh-server git-core python-dev python-pip libyaml-dev postfix - + # If you want to use MySQL: sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev # 2. Install ruby - wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p290.tar.gz - tar xzfv ruby-1.9.2-p290.tar.gz - cd ruby-1.9.2-p290 + wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.gz + tar xfvz ruby-1.9.3-p194.tar.gz + cd ruby-1.9.3-p194 ./configure make sudo make install @@ -77,7 +83,7 @@ Also read the [Read this before you submit an issue](https://github.com/gitlabhq # 3. Install gitolite Create user for git: - + sudo adduser \ --system \ --shell /bin/sh \ @@ -90,7 +96,7 @@ Create user for git: Create user for gitlab: # ubuntu/debian - sudo adduser --disabled-login --gecos 'gitlab system' gitlab + sudo adduser --disabled-login --gecos 'gitlab system' gitlab Add your user to git group: @@ -103,7 +109,7 @@ Generate key: Get gitolite source code: cd /home/git - sudo -H -u git git clone git://github.com/gitlabhq/gitolite /home/git/gitolite + sudo -H -u git git clone git://github.com/gitlabhq/gitolite /home/git/gitolite Setup: @@ -114,20 +120,20 @@ Setup: sudo -u git -H sed -i 's/0077/0007/g' /home/git/share/gitolite/conf/example.gitolite.rc sudo -u git -H sh -c "PATH=/home/git/bin:$PATH; gl-setup -q /home/git/gitlab.pub" - + Permissions: sudo chmod -R g+rwX /home/git/repositories/ sudo chown -R git:git /home/git/repositories/ #### CHECK: Logout & login again to apply git group to your user - + # clone admin repo to add localhost to known_hosts # & be sure your user has access to gitolite - sudo -u gitlab -H git clone git@localhost:gitolite-admin.git /tmp/gitolite-admin + sudo -u gitlab -H git clone git@localhost:gitolite-admin.git /tmp/gitolite-admin # if succeed you can remove it - sudo rm -rf /tmp/gitolite-admin + sudo rm -rf /tmp/gitolite-admin **IMPORTANT! If you cant clone `gitolite-admin` repository - DONT PROCEED INSTALLATION** @@ -139,7 +145,7 @@ Permissions: cd /home/gitlab sudo -H -u gitlab git clone -b stable git://github.com/gitlabhq/gitlabhq.git gitlab cd gitlab - + sudo -u gitlab mkdir tmp # Rename config files @@ -150,22 +156,22 @@ Permissions: # SQLite sudo -u gitlab cp config/database.yml.sqlite config/database.yml - # Or + # Or # Mysql # Install MySQL as directed in Step #1 - + # Login to MySQL - $ mysql -u root -p - + $ mysql -u root -p + # Create the gitlabhq production database mysql> CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`; - + # Create the MySQL User change $password to a real password - mysql> CREATE USER 'gitlab'@'localhost' IDENTIFIED BY '$password'; - + mysql> CREATE USER 'gitlab'@'localhost' IDENTIFIED BY '$password'; + # Grant proper permissions to the MySQL User mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'gitlab'@'localhost'; - + # Exit MySQL Server and copy the example config, make sure to update username/password in config/database.yml sudo -u gitlab cp config/database.yml.example config/database.yml @@ -181,7 +187,7 @@ Permissions: sudo cp ./lib/hooks/post-receive /home/git/share/gitolite/hooks/common/post-receive sudo chown git:git /home/git/share/gitolite/hooks/common/post-receive - + Checking status: sudo -u gitlab bundle exec rake gitlab:app:status RAILS_ENV=production @@ -202,13 +208,13 @@ Checking status: UMASK for .gitolite.rc is 0007? ............YES /home/git/share/gitolite/hooks/common/post-receive exists? ............YES -If you got all YES - congrats! You can go to next step. +If you got all YES - congrats! You can go to next step. # 5. Server up Application can be started with next command: - # For test purposes + # For test purposes sudo -u gitlab bundle exec rails s -e production # As daemon @@ -244,42 +250,15 @@ You can login via web using admin generated with setup: sudo -u gitlab cp config/unicorn.rb.orig config/unicorn.rb sudo -u gitlab bundle exec unicorn_rails -c config/unicorn.rb -E production -D -Edit /etc/nginx/nginx.conf. In the *http* section add: - - upstream gitlab { - server unix:/home/gitlab/gitlab/tmp/sockets/gitlab.socket; - } - - server { - listen YOUR_SERVER_IP:80; # e.g., listen 192.168.1.1:80; - server_name YOUR_SERVER_FQDN; # e.g., server_name source.example.com; - root /home/gitlab/gitlab/public; - - # individual nginx logs for this gitlab vhost - access_log /var/log/nginx/gitlab_access.log; - error_log /var/log/nginx/gitlab_error.log; - - location / { - # serve static files from defined root folder;. - # @gitlab is a named location for the upstream fallback, see below - try_files $uri $uri/index.html $uri.html @gitlab; - } - - # if a file, which is not found in the root folder is requested, - # then the proxy pass the request to the upsteam (gitlab unicorn) - location @gitlab { - proxy_redirect off; - - # you need to change this to "https", if you set "ssl" directive to "on" - proxy_set_header X-FORWARDED_PROTO http; - proxy_set_header Host $http_host; - proxy_set_header X-Real-IP $remote_addr; - - proxy_pass http://gitlab; - } - } - -Change **YOUR_SERVER_IP** and **YOUR_SERVER_FQDN** to the IP address and fully-qualified domain name of the host serving GitLab. +Add GitLab to nginx sites & change with your host specific settings + + sudo wget https://raw.github.com/gitlabhq/gitlab-recipes/master/nginx/gitlab -P /etc/nginx/sites-available/ + sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab + + # Change **YOUR_SERVER_IP** and **YOUR_SERVER_FQDN** + # to the IP address and fully-qualified domain name + # of the host serving GitLab. + sudo vim /etc/nginx/sites-enabled/gitlab Restart nginx: @@ -287,60 +266,7 @@ Restart nginx: Create init script in /etc/init.d/gitlab: - #! /bin/bash - ### BEGIN INIT INFO - # Provides: gitlab - # Required-Start: $local_fs $remote_fs $network $syslog redis-server - # Required-Stop: $local_fs $remote_fs $network $syslog - # Default-Start: 2 3 4 5 - # Default-Stop: 0 1 6 - # Short-Description: GitLab git repository management - # Description: GitLab git repository management - ### END INIT INFO - - DAEMON_OPTS="-c /home/gitlab/gitlab/config/unicorn.rb -E production -D" - NAME=unicorn - DESC="Gitlab service" - PID=/home/gitlab/gitlab/tmp/pids/unicorn.pid - RESQUE_PID=/home/gitlab/gitlab/tmp/pids/resque_worker.pid - - case "$1" in - start) - CD_TO_APP_DIR="cd /home/gitlab/gitlab" - START_DAEMON_PROCESS="bundle exec unicorn_rails $DAEMON_OPTS" - START_RESQUE_PROCESS="./resque.sh" - - echo -n "Starting $DESC: " - if [ `whoami` = root ]; then - sudo -u gitlab sh -l -c "$CD_TO_APP_DIR > /dev/null 2>&1 && $START_DAEMON_PROCESS && $START_RESQUE_PROCESS" - else - $CD_TO_APP_DIR > /dev/null 2>&1 && $START_DAEMON_PROCESS && $START_RESQUE_PROCESS - fi - echo "$NAME." - ;; - stop) - echo -n "Stopping $DESC: " - kill -QUIT `cat $PID` - kill -QUIT `cat $RESQUE_PID` - echo "$NAME." - ;; - restart) - echo -n "Restarting $DESC: " - kill -USR2 `cat $PID` - echo "$NAME." - ;; - reload) - echo -n "Reloading $DESC configuration: " - kill -HUP `cat $PID` - echo "$NAME." - ;; - *) - echo "Usage: $NAME {start|stop|restart|reload}" >&2 - exit 1 - ;; - esac - - exit 0 + sudo wget https://raw.github.com/gitlabhq/gitlab-recipes/master/init.d/gitlab -P /etc/init.d/ Adding permission: -- GitLab From 3237a8a9ef2b2e82c235dbc958d09f76651d1b7c Mon Sep 17 00:00:00 2001 From: Josh Crowder Date: Wed, 26 Sep 2012 20:26:45 +0100 Subject: [PATCH 2/3] Setting up local environment --- config/database.yml.sqlite | 37 ---------------- config/gitlab.yml.example | 87 -------------------------------------- db/schema.rb | 38 ++++++++--------- 3 files changed, 19 insertions(+), 143 deletions(-) delete mode 100644 config/database.yml.sqlite delete mode 100644 config/gitlab.yml.example diff --git a/config/database.yml.sqlite b/config/database.yml.sqlite deleted file mode 100644 index 077a17ba661..00000000000 --- a/config/database.yml.sqlite +++ /dev/null @@ -1,37 +0,0 @@ -# -# PRODUCTION -# -# SQLite version 3.x -# gem install sqlite3 -# -# Ensure the SQLite 3 gem is defined in your Gemfile -# gem 'sqlite3' -production: - adapter: sqlite3 - database: db/production.sqlite3 - pool: 5 - timeout: 5000 - - -# -# Development specific -# -# -# -development: - adapter: sqlite3 - database: db/development.sqlite3 - pool: 5 - timeout: 5000 - -# Warning: The database defined as "test" will be erased and -# re-generated from your development database when you run "rake". -# Do not set this db to the same as development or production. -test: &test - adapter: sqlite3 - database: db/test.sqlite3 - pool: 5 - timeout: 5000 - -cucumber: - <<: *test diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example deleted file mode 100644 index 28323484a37..00000000000 --- a/config/gitlab.yml.example +++ /dev/null @@ -1,87 +0,0 @@ -# # # # # # # # # # # # # # # # # # -# Gitlab application config file # -# # # # # # # # # # # # # # # # # # - -# -# 1. Common settings -# ========================== - -# Web application specific settings -web: - host: localhost - port: 80 - https: false - -# Email used for notification -# about new issues, comments -email: - from: notify@localhost - -# Application specific settings -# Like default project limit for user etc -app: - default_projects_limit: 10 - # backup_path: "/vol/backups" # default: Rails.root + backups/ - # backup_keep_time: 604800 # default: 0 (forever) (in seconds) - # disable_gravatar: true # default: false - Disable user avatars from Gravatar.com - - -# -# 2. Auth settings -# ========================== -ldap: - enabled: false - host: '_your_ldap_server' - base: '_the_base_where_you_search_for_users' - port: 636 - uid: 'sAMAccountName' - method: 'ssl' # plain - bind_dn: '_the_full_dn_of_the_user_you_will_bind_with' - password: '_the_password_of_the_bind_user' - -omniauth: - # Enable ability for users - # to login via twitter, google .. - enabled: false - - # IMPORTANT! - # It allows user to login without having user account - allow_single_sign_on: false - block_auto_created_users: true - - # Auth providers - providers: - # - { name: 'google_oauth2', app_id: 'YOUR APP ID', - # app_secret: 'YOUR APP SECRET', - # args: { access_type: 'offline', approval_prompt: '' } } - # - { name: 'twitter', app_id: 'YOUR APP ID', - # app_secret: 'YOUR APP SECRET'} - # - { name: 'github', app_id: 'YOUR APP ID', - # app_secret: 'YOUR APP SECRET' } - - -# -# 3. Advanced settings: -# ========================== - -# Git Hosting configuration -git_host: - admin_uri: git@localhost:gitolite-admin - base_path: /home/git/repositories/ - hooks_path: /home/git/.gitolite/hooks/ - gitolite_admin_key: gitlab - git_user: git - upload_pack: true - receive_pack: true - # host: localhost - # port: 22 - -# Git settings -# Use default values unless you understand it -git: - path: /usr/bin/git - # Max size of git object like commit, in bytes - # This value can be increased if you have a very large commits - git_max_size: 5242880 # 5.megabytes - # Git timeout to read commit, in seconds - git_timeout: 10 diff --git a/db/schema.rb b/db/schema.rb index 00bb55234af..bb41fcd5b16 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -61,8 +61,8 @@ ActiveRecord::Schema.define(:version => 20120905043334) do t.boolean "closed", :default => false, :null => false t.datetime "created_at", :null => false t.datetime "updated_at", :null => false - t.text "st_commits", :limit => 2147483647 - t.text "st_diffs", :limit => 2147483647 + t.text "st_commits", :limit => 4294967295 + t.text "st_diffs", :limit => 4294967295 t.boolean "merged", :default => false, :null => false t.integer "state", :default => 1, :null => false end @@ -80,12 +80,12 @@ ActiveRecord::Schema.define(:version => 20120905043334) do end create_table "notes", :force => true do |t| - t.text "note" + t.text "note", :limit => 255 t.string "noteable_id" t.string "noteable_type" t.integer "author_id" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false t.integer "project_id" t.string "attachment" t.string "line_code" @@ -146,30 +146,30 @@ ActiveRecord::Schema.define(:version => 20120905043334) do end create_table "users", :force => true do |t| - t.string "email", :default => "", :null => false - t.string "encrypted_password", :limit => 128, :default => "", :null => false + t.string "email", :default => "", :null => false + t.string "encrypted_password", :default => "", :null => false t.string "reset_password_token" t.datetime "reset_password_sent_at" t.datetime "remember_created_at" - t.integer "sign_in_count", :default => 0 + t.integer "sign_in_count", :default => 0 t.datetime "current_sign_in_at" t.datetime "last_sign_in_at" t.string "current_sign_in_ip" t.string "last_sign_in_ip" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false t.string "name" - t.boolean "admin", :default => false, :null => false - t.integer "projects_limit", :default => 10 - t.string "skype", :default => "", :null => false - t.string "linkedin", :default => "", :null => false - t.string "twitter", :default => "", :null => false + t.boolean "admin", :default => false, :null => false + t.integer "projects_limit", :default => 10 + t.string "skype", :default => "", :null => false + t.string "linkedin", :default => "", :null => false + t.string "twitter", :default => "", :null => false t.string "authentication_token" - t.boolean "dark_scheme", :default => false, :null => false - t.integer "theme_id", :default => 1, :null => false + t.boolean "dark_scheme", :default => false, :null => false + t.integer "theme_id", :default => 1, :null => false t.string "bio" - t.boolean "blocked", :default => false, :null => false - t.integer "failed_attempts", :default => 0 + t.boolean "blocked", :default => false, :null => false + t.integer "failed_attempts", :default => 0 t.datetime "locked_at" t.string "extern_uid" t.string "provider" -- GitLab From 47fa101cc70982c2f1d9bbed3cf661a04307a0f8 Mon Sep 17 00:00:00 2001 From: Josh Crowder Date: Thu, 27 Sep 2012 15:05:38 +0100 Subject: [PATCH 3/3] Adding state search to api/issues --- lib/api/issues.rb | 20 +++++++++++++++++--- spec/requests/api/issues_spec.rb | 30 ++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 3 deletions(-) diff --git a/lib/api/issues.rb b/lib/api/issues.rb index 4ee2d11f15f..f5984de9a2c 100644 --- a/lib/api/issues.rb +++ b/lib/api/issues.rb @@ -5,11 +5,18 @@ module Gitlab resource :issues do # Get currently authenticated user's issues - # + # Parameters: + # state [closed|open] - The state of the issue # Example Request: # GET /issues get do - present paginate(current_user.issues), with: Entities::Issue + if params[:state] + state = params[:state] == 'closed' ? true :false + issues = paginate(current_user.issues.where(:closed => state)) + else + issues = current_user.issues + end + present issues, with: Entities::Issue end end @@ -18,10 +25,17 @@ module Gitlab # # Parameters: # id (required) - The ID or code name of a project + # state [closed|open] - The state of the issue # Example Request: # GET /projects/:id/issues get ":id/issues" do - present paginate(user_project.issues), with: Entities::Issue + if params[:state] + state = params[:state] == 'closed' ? true :false + issues = paginate(user_project.issues.where(:closed => state)) + else + issues = user_project.issues + end + present paginate(issues), with: Entities::Issue end # Get a single project issue diff --git a/spec/requests/api/issues_spec.rb b/spec/requests/api/issues_spec.rb index 442e9c730dc..c98b822cbeb 100644 --- a/spec/requests/api/issues_spec.rb +++ b/spec/requests/api/issues_spec.rb @@ -6,6 +6,7 @@ describe Gitlab::API do let(:user) { Factory :user } let!(:project) { Factory :project, owner: user } let!(:issue) { Factory :issue, author: user, assignee: user, project: project } + let!(:issue2) { Factory :closed_issue, author: user, assignee: user, project: project } before { project.add_access(user, :read) } describe "GET /issues" do @@ -23,6 +24,21 @@ describe Gitlab::API do json_response.should be_an Array json_response.first['title'].should == issue.title end + + it "should only return an array of open issues" do + get api("/issues?state=open", user) + response.status.should == 200 + json_response.should be_an Array + json_response.map {|r| r['closed'].should == false } + end + + it "should only return an array of closed issues" do + get api("/issues?state=closed", user) + response.status.should == 200 + json_response.should be_an Array + json_response.map {|r| r['closed'].should == true } + end + end end @@ -33,6 +49,20 @@ describe Gitlab::API do json_response.should be_an Array json_response.first['title'].should == issue.title end + + it "should only return open issues" do + get api("/projects/#{project.code}/issues?state=open", user) + response.status.should == 200 + json_response.should be_an Array + json_response.map {|r| r['closed'].should == false } + end + + it "should only return closed issues" do + get api("/projects/#{project.code}/issues?state=closed", user) + response.status.should == 200 + json_response.should be_an Array + json_response.map {|r| r['closed'].should == true} + end end describe "GET /projects/:id/issues/:issue_id" do -- GitLab