# GitLab software-release
[buildout]
extends =
    ../../stack/slapos.cfg
    ../../component/ruby/buildout.cfg
    ../../component/golang/buildout.cfg
    ../../component/postgresql/buildout.cfg
    ../../component/redis/buildout.cfg
    ../../component/cmake/buildout.cfg
    ../../component/icu/buildout.cfg
    ../../component/pkgconfig/buildout.cfg
    ../../component/nodejs/buildout.cfg
    ../../component/openssl/buildout.cfg
    ../../component/nginx/buildout.cfg

#   for instance
    ../../component/bash/buildout.cfg
    ../../component/curl/buildout.cfg
    ../../component/gzip/buildout.cfg
    ../../component/dcron/buildout.cfg
    ../../component/logrotate/buildout.cfg

parts =
    ruby2.1
    golang15
    git
    postgresql92
    redis28
    cmake
    icu
    pkgconfig
    nginx-output

    python-4gitlab
    gitlab-shell/vendor
    gitlab/vendor/bundle
    gitlab-workhorse

#   for instance
    instance.cfg

    slapos-cookbook
    eggs

    bash
    curl
    watcher-sigkill
    gzip
    dcron-output
    logrotate


############################
#   Software compilation   #
############################

# python with eggs, that will be used in gitlab
[python-4gitlab]
# NOTE cannot use zc.recipe.egg - github-markup invoks `python2 -S` and
# interpreter generated by zc.recipe.egg cannot handle that.
recipe  = z3c.recipe.scripts
# NOTE github-markup invokes it as `python2`, that's why we are naming it this way
# https://github.com/github/markup/blob/5393ae93/lib/github/markups.rb#L36
interpreter = python2
eggs    =
    docutils

# rubygemsrecipe with fixed url and this way pinned rubygems version
[rubygemsrecipe]
recipe  = rubygemsrecipe
url     = https://rubygems.org/rubygems/rubygems-2.5.1.zip


# bundler, that we'll use to
# - install gems for gitlab
# - run gitlab services / jobs  (via `bundle exec ...`)
[bundler-4gitlab]
<= rubygemsrecipe
ruby-location = ${ruby2.1:location}
ruby-executable = ${:ruby-location}/bin/ruby
gems    = bundler==1.11.2

# bin installed here
bundle  = ${buildout:bin-directory}/bundle

# install together with dependencies of gitlab, which we cannot specify using
#   --with-... gem option
# ( reason: rubygemsrecipe hardcodes PATH inside generated bin/* and it is
#   impossible to adjust it later )
#
# bundle exec <smth>                ; <smth> starts with `#!/usr/bin/env ruby` as rubygems
# Rugged needs: cmake, pkgconfig
# execjs needs: nodejs
# rails needs db client program on path: psql
# gitlab wants to check redis version via running: redis-cli
# gitlab (via github-markup) wants to convert rst -> html via running: python2 (with docutils egg)
# (python-4gitlab puts interpreter into ${buildout:bin-directory})
environment =
  PATH    = ${:ruby-location}/bin:${cmake:location}/bin:${pkgconfig:location}/bin:${nodejs:location}/bin:${postgresql92:location}/bin:${redis28:location}/bin:${buildout:bin-directory}:%(PATH)s


# gitlab, gitlab-shell & gitlab-workhorse checked out as git repositories
# pinned to exact commit
[git-repository]
recipe  = slapos.recipe.build:gitclone
git-executable = ${git:location}/bin/git

[gitlab-repository]
<= git-repository
#repository = https://gitlab.com/gitlab-org/gitlab-ce.git
repository = https://lab.nexedi.com/kirr/gitlab-ce.git
# 8.4.X + NXD patches:
revision = v8.4.4-12-gfe43272fa4896bc7c846d40d844a42902eb9197f
location = ${buildout:parts-directory}/gitlab

[gitlab-shell-repository]
<= git-repository
repository = https://gitlab.com/gitlab-org/gitlab-shell.git
# gitlab 8.4 wants gitlab-shell 2.6.10
# 2.6.10
revision = v2.6.10-0-g82b3a4e8f70692ec679d880628fdb0f5844d42b9
location = ${buildout:parts-directory}/gitlab-shell

[gitlab-workhorse-repository]
<= git-repository
#repository = https://gitlab.com/gitlab-org/gitlab-workhorse.git
repository = https://lab.nexedi.com/kirr/gitlab-workhorse.git
# 0.6.X + NXD patches for blob download speedup
# (https://gitlab.com/gitlab-org/gitlab-workhorse/merge_requests/17)
revision = 0.6.1-2-ga23a5e18486b0de6e3435711dc555c8bfe08fde2
location = ${buildout:parts-directory}/gitlab-workhorse



# build needed-by-gitlab gems via bundler
[gitlab/vendor/bundle]
recipe  = slapos.recipe.cmmi
path    = ${gitlab-repository:location}
bundle  = ${bundler-4gitlab:bundle}

configure-command = cd ${:path} &&
    ${:bundle} config --local build.charlock_holmes --with-icu-dir=${icu:location}  &&
    ${:bundle} config --local build.pg  --with-pg-config=${postgresql92:location}/bin/pg_config

make-binary =
make-targets= cd ${:path} &&
    ${:bundle} install --deployment  --without development test  mysql kerberos


# build needed-by-gitlab-shell gems via bundler
# ( there is not vendor/ dir in gitlab-shell, so to avoid having buildout error
#   on mkdir vendor/bundle, this part name is just /vendor )
[gitlab-shell/vendor]
recipe  = slapos.recipe.cmmi
path    = ${gitlab-shell-repository:location}
bundle  = ${bundler-4gitlab:bundle}

configure-command = true
make-binary =
make-targets= cd ${:path} &&
    ${:bundle} install --deployment  --without development test


# build gitlab-workhorse
[gitlab-workhorse]
recipe  = slapos.recipe.cmmi
path    = ${gitlab-workhorse-repository:location}

configure-command = :
make-targets= ${:_buildout_section_name_}

environment =
  PATH=${golang15:location}/bin:%(PATH)s


###############################
#   Trampoline for instance   #
###############################

# eggs for instance.cfg
[eggs]
recipe  = zc.recipe.egg
eggs    =
    plone.recipe.command
    cns.recipe.symlink


[instance.cfg]
recipe  = slapos.recipe.template
url     = ${:_profile_base_location_}/instance.cfg.in
output  = ${buildout:directory}/instance.cfg
md5sum  = b40cd8824b978da867404d8955b06c18

[watcher-sigkill]
recipe  = slapos.recipe.template:jinja2
template= ${:_profile_base_location_}/${:_buildout_section_name_}.in
rendered= ${buildout:bin-directory}/${:_buildout_section_name_}
mode    = 0755
md5sum  = 2986dcb006dc9e8508ff81f646656131
context =
    section bash    bash


# macro: download a file named as section name
#
#   [filename]
#   <= download-file
#   md5sum = ...
[download-file]
recipe  = slapos.recipe.build:download
url     = ${:_profile_base_location_}/${:_buildout_section_name_}
destination = ${buildout:directory}/${:_buildout_section_name_}

# like download-file, but download from template/<filename>
[download-template]
<= download-file
url     = ${:_profile_base_location_}/template/${:_buildout_section_name_}


[config.ru.in]
<= download-template
md5sum  = bb12852c28079f40a0751f7f3559e2a6

[database.yml.in]
<= download-template
md5sum  = ee656cfd96e1c82df167f68bb5773291

[gitconfig.in]
<= download-template
md5sum  = f4cb11e8bca379e016b062d0db859b74

[gitlab-parameters.cfg]
<= download-file
md5sum  = bc98ec10209bc53f6a49888b1a2b9382

[gitlab-shell-config.yml.in]
<= download-template
md5sum  = ea351e16b47f0008f61211eb2d7685e2

[gitlab-unicorn-startup.in]
<= download-file
md5sum  = 2716afaa9445c0c429c6b211356ebe8f

[gitlab.yml.in]
<= download-template
md5sum  = cc32f5053dd2a2461aa5952a5b925310

[instance-gitlab.cfg.in]
<= download-file
md5sum  = dfd2b14f846eda999fe9d12108d513b4

[macrolib.cfg.in]
<= download-file
md5sum  = a56a44e96f65f5ed20211bb6a54279f4

[nginx-gitlab-http.conf.in]
<= download-template
md5sum  = 590da2b00cd198c7bc261c3d893bc199

[nginx.conf.in]
<= download-template
md5sum  = f1a6e2bce3f28a2243fed49d1e1601df

[rack_attack.rb.in]
<= download-template
md5sum  = 16503c029159ea6db7d0fb5ab67093a3

[resque.yml.in]
<= download-template
md5sum  = 7d9cba658f9315cd058dfc74db943a66

[smtp_settings.rb.in]
<= download-template
md5sum  = c7c09c241b5fa8163e4995260be52604

[unicorn.rb.in]
<= download-template
md5sum  = 9bdca16362fe19c727bca38383e57068


[versions]
cns.recipe.symlink = 0.2.3
docutils = 0.12
plone.recipe.command = 1.1
rubygemsrecipe  = 0.2.2
slapos.recipe.template = 2.9
z3c.recipe.scripts = 1.0.1