Support for GitLab Chatops using Slash commands
What does this MR do?
This MR adds support for GitLab Chatops by scheduling a CI pipeline for every chat command. This allows one to define commands directly in .gitlab-ci.yml. For example:
---
echo:
  script:
    - 'echo "Your input was: $CHAT_INPUT"'
fortune:
  script:
    - 'fortune -s'
explain:
  script:
    - psql -h /home/yorickpeterse/Projects/gitlab/gdk-ee/postgresql -d gitlabhq_development -q -c "EXPLAIN (ANALYZE, BUFFERS) $CHAT_INPUT;"
fail:
  script:
    - exit 1Using such a configuration file you can run commands by running /root-slash-command-here run explain select count(*) from users where root-slash-command-here is the root command (e.g. /gl-infra or /chatops-test).
Input to the commands is provided using the CHAT_INPUT environment variable. This variable is set to the text that comes after the command name (ignoring leading whitespace). In the above example that would be select count(*) from users.
Output is sent back in one of two ways:
- If it's small enough we just send it as-is (mentioning the user in the process).
- If the output is too large we send back a link to the build. Currently the limit is 3.5 KB as Slack enforces a limit of around 4 KB per message
Output produced also always contains links to the project, pipeline, and the build.
See commit 63b36051 for more details.
Screenshot
TODO
- 
Make sure that the code has some better documentation here and there 
- 
Double check the changes to see if all relevant code has tests 
- 
Make sure guests can't schedule pipelines via chat (IIRC this should already be covered but double checking doesn't hurt) 
Does this MR meet the acceptance criteria?
- 
Changelog entry added, if necessary 
- 
Documentation created/updated 
- 
API support added 
- 
Tests added for this feature/bug 
- Review
- 
Has been reviewed by Backend 
- 
Has been reviewed by Database 
 
- 
- 
Conform by the merge request performance guides 
- 
Conform by the style guides 
- 
Squashed related commits together 
- 
Internationalization required/considered 
- 
If paid feature, have we considered GitLab.com plan and how it works for groups and is there a design for promoting it to users who aren't on the correct plan 
- 
End-to-end tests pass ( package-qamanual pipeline job)
