[buildout]
extends =
   ../../component/python3/buildout.cfg
   ../../component/python-2.7/buildout.cfg
   ../../component/nodejs/buildout.cfg
   ../../component/caddy/buildout.cfg
   ../../component/git/buildout.cfg
   ../../component/bash/buildout.cfg
   ../../component/coreutils/buildout.cfg
   ../../stack/slapos.cfg
   ../../stack/monitor/buildout.cfg
   ./gowork.cfg
   ./buildout.hash.cfg
# this gowork.cfg includes the one from caddy, because they share the only gowork
# workspace (not intentionnaly, as far as I see there's only one gowork per SR)
# it is included after caddy, otherwise only caddy is installed. The problem of this
# approach is that caddy's version will be the one pinned here, so we have to update
# here as well.

parts =
  theia-wrapper
  slapos-cookbook
  instance


[nodejs]
<= nodejs-10.6.0

[python3]
<= python3.6.6


[yarn]
# this could become a component, but it needs to be invoked from nodejs explicitly,
# otherwise it uses system's nodejs
# XXX why don't we build a wrapper ?
version = 1.11.0
recipe = slapos.recipe.build:download-unpacked
url = https://github.com/yarnpkg/yarn/releases/download/v${:version}/yarn-v${:version}.tar.gz
md5sum = d4f05075f534dd9a0a8c18c650b55f0d


[python-language-server]
version = 0.19.0
recipe = plone.recipe.command
command =
  bash -c "${python3:executable} -m venv ${:location} && \
    . ${:location}/bin/activate && \
    pip install -r ${python-language-server-requirements.txt:output}"
location = ${buildout:parts-directory}/${:_buildout_section_name_}
stop-on-error = true

[python-language-server-requirements.txt]
recipe = slapos.recipe.template
url = ${:_profile_base_location_}/${:filename}
output = ${buildout:parts-directory}/${:_buildout_section_name_}
mode = 0644


[theia]
recipe = plone.recipe.command
command = ${bash:location}/bin/bash -c "
  export PATH=${nodejs:location}/bin/:${python2.7:location}/bin/:$PATH &&
  mkdir -p ${:location} && \
  cd ${:location} && \
  cp ${package.json:rendered} . &&
  cp ${yarn.lock:output} . &&
  ${yarn:location}/bin/yarn && \
  ${yarn:location}/bin/yarn theia build"
location = ${buildout:parts-directory}/${:_buildout_section_name_}
stop-on-error = true

[yarn.lock]
recipe = slapos.recipe.template
url = ${:_profile_base_location_}/${:filename}
output = ${buildout:parts-directory}/${:_buildout_section_name_}
mode = 0644

[package.json]
recipe = slapos.recipe.template:jinja2
# this comes from https://github.com/theia-ide/theia-apps/blob/598d4dc9d4f9e0514869273c069f734a41f20207/theia-full-docker/next.package.json
# but "@theia/php": "next" was removed, because we don't have php/composer component so installation failed
template =
  inline:
  {
    "private": true,
    "dependencies": {
      "typescript": "latest",
      "@theia/callhierarchy": "next",
      "@theia/core": "next",
      "@theia/cpp": "next",
      "@theia/docker": "next",
      "@theia/editor": "next",
      "@theia/editorconfig": "next",
      "@theia/extension-manager": "next",
      "@theia/file-search": "next",
      "@theia/filesystem": "next",
      "@theia/git": "next",
      "@theia/go": "next",
      "@theia/java": "next",
      "@theia/json": "next",
      "@theia/keymaps": "next",
      "@theia/languages": "next",
      "@theia/markers": "next",
      "@theia/merge-conflicts": "next",
      "@theia/messages": "next",
      "@theia/metrics": "next",
      "@theia/mini-browser": "next",
      "@theia/monaco": "next",
      "@theia/navigator": "next",
      "@theia/outline-view": "next",
      "@theia/output": "next",
      "@theia/plantuml": "next",
      "@theia/preferences": "next",
      "@theia/preview": "next",
      "@theia/process": "next",
      "@theia/python": "next",
      "@theia/ruby": "next",
      "@theia/rust": "next",
      "@theia/search-in-workspace": "next",
      "@theia/task": "next",
      "@theia/terminal": "next",
      "@theia/textmate-grammars": "next",
      "@theia/tslint": "next",
      "@theia/typescript": "next",
      "@theia/userstorage": "next",
      "@theia/variable-resolver": "next",
      "@theia/workspace": "next",
      "theia-yang-extension": "next"
    },
    "devDependencies": {
      "@theia/cli": "next"
    }
  }
rendered = ${buildout:directory}/${:_buildout_section_name_}
mode = 0644


[gowork]
# Install go-language-server in workspace
# Note that this is the same workspace as caddy.
# install list comes from https://github.com/theia-ide/go-language-server/blob/d259749c8f263c4d845055833b03b1d2dbefa5b3/README.md#prerequisites
install +=
  github.com/ramya-rao-a/go-outline
  github.com/acroca/go-symbols
  github.com/nsf/gocode
  github.com/rogpeppe/godef
  golang.org/x/tools/cmd/godoc
  github.com/zmb3/gogetdoc
  golang.org/x/lint/golint
  github.com/fatih/gomodifytags
  github.com/uudashr/gopkgs/cmd/gopkgs
  golang.org/x/tools/cmd/gorename
  sourcegraph.com/sqs/goreturns
  github.com/cweill/gotests/...
  golang.org/x/tools/cmd/guru
  github.com/josharian/impl
  github.com/haya14busa/goplay/cmd/goplay
  github.com/davidrjenni/reftools/cmd/fillstruct


[theia-wrapper]
recipe = slapos.recipe.template:jinja2
rendered = ${buildout:bin-directory}/${:_buildout_section_name_}
mode = 0777
template =
  inline:
  #!/bin/bash
  export PATH=${nodejs:location}/bin/:${python-language-server:location}/bin/:${bash:location}/bin/:${git:location}/bin/:$PATH
  . ${gowork:env.sh}
  export SHELL=bash
  cd ${theia:location}
  exec ${yarn:location}/bin/yarn theia start $@


[instance]
recipe = slapos.recipe.template
url = ${:_profile_base_location_}/${:filename}
mode = 0644
output = ${buildout:directory}/instance.cfg

[versions]
slapos.recipe.template = 4.3