README.rst 2.72 KB
Newer Older
Simon Chabot's avatar
Simon Chabot committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
Automatically assign reviews
============================

This project aims to automatically assign unassigned pending
merge-requests on a gitlab/heptapod instance.

Each member of a project can be randomly assigned to a pending
merge-requests.

Assignbot assigns reviews to users, based on their preferences. Their
preferences are store in a simple yaml file. The history of the
assignment is stored in a CSV file, in a S3 storage.

The preferences file
--------------------

The users define their “review preferences” in a preferences file,
formatted in yaml.

The “preferences file” is a yaml file constructed as follow :

::

   username_1:
       max_auto_review_per_week: XXX
       max_auto_review_per_day: YYY
   username_2:
       max_auto_review_per_week: ZZZ
       max_auto_review_per_day: WWW

where ``username_1`` is the username of a gitlab user, and
``max_auto_review_per_week`` (``max_auto_review_per_day``) is the maximum
of automatically assigned review per week (per day).

The S3 storage
--------------

Assignbot uses a CSV file to keep track of users assignments. This CSV
file is stored in an S3 storage. When you execute the bot, you must
provide the following environment variables:

-  AWS_ACCESS_KEY_ID: your S3 key ID
-  AWS_SECRET_ACCESS_KEY: your S3 secret access key
-  S3_ENDPOINT_URL: your S3 endpoint url
-  S3_BUCKET_NAME: the S3 bucket to be used

Executing the bot
-----------------

Once assignbot installed, you can run it as follow :

.. code:: bash


   $ GITLAB_URL="https://your.forge.org" \
     GITLAB_TOKEN="XXX-an-api-token" \
     S3_ENDPOINT_URL="https://your.s3.storage.fr" \
     S3_BUCKET_NAME="you_bucket_name" \
     AWS_SECRET_ACCESS_KEY="your_secret_access_key" \
     AWS_ACCESS_KEY_ID="your_access_key_id" \
     python3 -m assignbot ./users_preferences.yml

and the bot should start assigning merge requests to the users.

Use case example
----------------

To use this bot, you can add a new repository on your forge with the following
``.gitlab-ci.yml`` :

Arthur Lutz's avatar
Arthur Lutz committed
71
.. code:: yaml
Simon Chabot's avatar
Simon Chabot committed
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93

   assign:
     stage: assign
     only:
       - schedules
     variables:
         # there is a gitlab bug in the validation of AWS variables. We work
         # around it while waiting for the correction.
         # see: https://gitlab.com/gitlab-org/gitlab/-/issues/215927
         AWS_ACCESS_KEY_ID: "$_AWS_ACCESS_KEY_ID"
         AWS_SECRET_ACCESS_KEY: "$_AWS_SECRET_ACCESS_KEY"
     script:
       - pip install assignbot
       - python -m assignbot ./users_preferences.yml


This job assumes that you have defined the appropriate environment variables,
and that you have a ``users_preferences.yml`` file at the root of this
repository.

Then, you can create a new “schedule job” in gitlab, to call this job
periodically.