DOI: 10.5281/zenodo.7740521
title: A Dataset of Bot and Human Activities in GitHub

description: <strong>A Dataset of Bot and Human Activities in GitHub</strong> This repository provides a dataset of GitHub contributor activities and accompanies a paper accepted at MSR 2023 in the <strong>Data and Tool Showcase Track</strong>. The paper is entitled <strong>A Dataset of Bot and Human Activities in GitHub</strong> and is co-authored by Natarajan Chidambaram, Alexandre Decan and Tom Mens (Software Engineering Lab, University of Mons, Belgium). The dataset contains 834K high-level activities made by 385 bots and 616 human contributors on GitHub between 25 November 2022 and 9 March 2023. The activities were generated from 1M+ low-level events obtained from the GitHub's Event API and cover 24 distinct activity types. This dataset facilitates the characterisation of bot and human behaviour in GitHub repositories, by enabling the analysis of activity sequences and activity patterns of bot and human contributors. This dataset could lead to better bot identification tools and empirical studies on how bots play a role in collaborative software development. <strong>Files description</strong> The following files are provided as part of the archive: bot_activities.json - A JSON file containing 649,755 activities made by 385 bot contributors; human_activities.json - A JSON file containing 184,056 activities made by 616 human contributors (anonymized); JsonSchema.json - A JSON schema that validates the above datasets. <strong>Example</strong> Below is an example of a <em>Closing pull request</em> activity: <pre><code>{ "date": "2022-11-25T18:49:09+00:00", "activity": "Closing pull request", "contributor": "typescript-bot", "repository": "DefinitelyTyped/DefinitelyTyped", "comment": { "length": 249, "GH_node": "IC_kwDOAFz6BM5PJG7l" }, "pull_request": { "id": 62328, "title": "[qunit] Add `test.each()`", "created_at": "2022-09-19T17:34:28+00:00", "status": "closed", "closed_at": "2022-11-25T18:49:08+00:00", "merged": false, "GH_node": "PR_kwDOAFz6BM4_N5ib" }, "conversation": { "comments": 19 }, "payload": { "pr_commits": 1, "pr_changed_files": 5 } } </code></pre> <strong>List of activity types</strong> In total, we have identified 24 different high-level activity types from 15 different low-level event types. They are <em>Creating repository</em>, <em>Creating branch</em>, <em>Creating tag</em>, <em>Deleting tag</em>, <em>Deleting repository</em>, <em>Publishing a release</em>, <em>Making repository public</em>, <em>Adding collaborator to repository</em>, <em>Forking repository</em>, <em>Starring repository</em>, <em>Editing wiki page</em>, <em>Opening issue</em>, <em>Closing issue</em>, <em>Reopening issue</em>, <em>Transferring issue</em>, <em>Commenting issue</em>, <em>Opening pull request</em>, <em>Closing pull request</em>, <em>Reopening pull request</em>, <em>Commenting pull request</em>, <em>Commenting pull request changes</em>, <em>Reviewing code</em>, <em>Commenting commits</em>, <em>Pushing commits</em>. <strong>List of fields</strong> Not only does the dataset contain a list of activities made by bot and human contributors, but it also contains some details about these activities. For example, <em>commenting issue</em> activities provide details about the author of the comment, the repository and issue in which the comment was created, and so on. For all activity types, we provide the <strong>date</strong> of the activity, the <strong>contributor</strong> that made the activity, and the <strong>repository</strong> in which the activity took place. Depending on the activity type, additional fields are provided. In this section, we describe for each activity type the different fields that are provided in the JSON file. It is worth to mention that we also provide the corresponding JSON schema alongside with the datasets. <strong><em>Properties</em></strong> <strong>date</strong> Date on which the activity is performed Type: <code>string</code> e.g., "2022-11-25T09:55:19+00:00" String format must be a "date-time" <strong>activity</strong> The activity performed by the contributor Type: <code>string</code> e.g., "Commenting pull request" <strong>contributor</strong> The login name of the contributor who performed this activity Type: <code>string</code> e.g., "analysis-bot", "anonymised" in the case of a human contributor <strong>repository</strong> The repository in which the activity is performed Type: <code>string</code> e.g., "apache/spark", "anonymised" in the case of a human contributor <strong>issue</strong> Issue information - provided for <em>Opening issue</em>, <em>Closing issue, Reopening issue</em>, <em>Transferring issue</em> and <em>Commenting issue</em> Type: <code>object</code> <strong><em>Properties</em></strong> <strong>id</strong> Issue number Type: <code>integer</code> e.g., 35471 <strong>title</strong> Issue title Type: <code>string</code> e.g., "error building handtracking gpu example with bazel", "anonymised" in the case of a human contributor <strong>created_at</strong> The date on which this issue is created Type: <code>string</code> e.g., "2022-11-10T13:07:23+00:00" String format must be a "date-time" <strong>status</strong> Current state of the issue Type: <code>string</code> "open" or "closed" <strong>closed_at</strong> The date on which this issue is closed. "null" will be provided if the issue is open Types: <code>string</code>, <code>null</code> e.g., "2022-11-25T10:42:39+00:00" String format must be a "date-time" <strong>resolved</strong> The issue is resolved or not_planned/still open Type: <code>boolean</code> true or false <strong>GH_node</strong> The GitHub node of this issue Type: <code>string</code> e.g., "IC_kwDOC27xRM5PHTBU", "anonymised" in the case of a human contributor <strong>pull_request</strong> Pull request information - provided for <em>Opening pull request</em>, <em>Closing pull request</em>, <em>Reopening pull request</em>, <em>Commenting pull request changes</em> and <em>Reviewing code</em> Type: <code>object</code> <strong><em>Properties</em></strong> <strong>id</strong> Pull request number Type: <code>integer</code> e.g., 35471 <strong>title</strong> Pull request title Type: <code>string</code> e.g., "error building handtracking gpu example with bazel", "anonymised" in the case of a human contributor <strong>created_at</strong> The date on which this pull request is created Type: <code>string</code> e.g., "2022-11-10T13:07:23+00:00" String format must be a "date-time" <strong>status</strong> Current state of the pull request Type: <code>string</code> "open" or "closed" <strong>closed_at</strong> The date on which this pull request is closed. "null" will be provided if the pull request is open Types: <code>string</code>, <code>null</code> e.g., "2022-11-25T10:42:39+00:00" String format must be a "date-time" <strong>merged</strong> The PR is merged or rejected/still open Type: <code>boolean</code> true or false <strong>GH_node</strong> The GitHub node of this pull request Type: <code>string</code> e.g., "PR_kwDOC7Q2kM5Dsu3-", "anonymised" in the case of a human contributor <strong>review</strong> Pull request review information - provided for <em>Reviewing code</em> Type: <code>object</code> <strong><em>Properties</em></strong> <strong>status</strong> Status of the review Type: <code>string</code> "changes_requested" or "approved" or "dismissed" <strong>GH_node</strong> The GitHub node of this review Type: <code>string</code> e.g., "PRR_kwDOEBHXU85HLfIn", "anonymised" in the case of a human contributor <strong>conversation</strong> Comments information in issue or pull request - Provided for <em>Opening issue</em>, <em>Closing issue</em>, <em>Reopening issue</em>, <em>Transferring issue</em>, <em>Commenting issue</em>, <em>Opening pull request</em>, <em>Closing pull request</em>, <em>Reopening pull request</em> and <em>Commenting pull request</em> Type: <code>object</code> <strong><em>Properties</em></strong> <strong>comments</strong> Number of comments present in the corresponding issue or pull request Type: <code>integer</code> e.g., 5 <strong>comment</strong> Comment information - Provided for all the activities for which the field issue or pull_request is reported and additionally for commit comment Type: <code>object</code> <strong><em>Properties</em></strong> <strong>length</strong> Length of the comment text or description text (if comment is not expected) Type: <code>integer</code> e.g., 25 <strong>GH_node</strong> The GitHub node of this comment or description. "null" will be provided if there is no comment expected Types: <code>string</code>, <code>null</code> e.g., "IC_kwDOEj6V8c5PHT78", "anonymised" in the case of a human contributor <strong>gitref</strong> Tag information - provided for <em>Creating branch</em>, <em>Creating tag</em>, <em>Deleting branch</em>, <em>Deleting tag</em>, <em>Editing wiki page</em> and <em>Publishing a release</em> Type: <code>object</code> <strong><em>Properties</em></strong> <strong>type</strong> Type of the gitref Type: <code>string</code> "tag" or "branch" or "commit" <strong>name</strong> Name of the gitref Type: <code>string</code> e.g., "cherry-pick-11-to-release-4.10" <strong>description_length</strong> Length of the description text provided while creating the gitref. "null" be provided if the type is "branch" or "commit" as they do not have any description Type: <code>integer</code>, <code>null</code> e.g., 23 <strong>release</strong> Release information - provided for <em>Publishing a release</em> Type: <code>object</code> <strong><em>Properties</em></strong> <strong>name</strong> The name of the release that is created. "null" will be provided if the name is not provided Type: <code>string</code>, <code>null</code> e.g., "v0.65.9" <strong>description_length</strong> Length of the description of the release that is created Type: <code>integer</code> e.g., 888 <strong>created_at</strong> The date at which the release is created (activity date is the release published date) Type: <code>string</code> e.g., "2022-11-25T11:34:48+00:00" String format must be a "date-time" <strong>prerelease</strong> If the release that is created is a prerelease or not Type: <code>boolean</code> true or false <strong>new_tag</strong> If a new tag is created for this release or another tag is re-used Type: <code>boolean</code> true or false <strong>GH_node</strong> The corresponding release node ID Type: <code>string</code> e.g., "RE_kwDOCm6M2s4FBGxT", "anonymised" in the case of a human contributor <strong>page</strong> Page information - provided for <em>Editing wiki page</em> Type: <code>object</code> <strong><em>Properties</em></strong> <strong>name</strong> Name of the page Type: <code>string</code> e.g., "Workflow-status" <strong>title</strong> Title of the page Type: <code>string</code> e.g., "Workflow status" <strong>new</strong> If the page is created new or existing page is edited Type: <code>boolean</code> true or false <strong>payload</strong> Other additional details - Provided for <em>Opening pull request</em>, <em>Closing pull request</em>, <em>Reopening pull request</em> and <em>pushing commits</em> Type: <code>object</code> <strong><em>Properties</em></strong> <strong>pr_commits</strong> The number of commits in this pull request Type: <code>integer</code> e.g., 3 <strong>pr_changed_files</strong> The number of files that are changed in this pull request Type: <code>integer</code> e.g., 2 <strong>pushed_commits</strong> The number of commits present in this push Type: <code>integer</code> e.g., 4 <strong>distinct_pushed_commits</strong> The distinct number of commits present in this push Type: <code>integer</code> e.g., 1 <strong>github_push_id</strong> The corresponding GitHub push ID Type: <code>integer</code> e.g., 11790446870, "anonymised" in the case of a human contributor <strong>Mapping between activities and events</strong> For many activity types, the corresponding activity can be observed by the occurrence of a single event type. For example, the activity types <em>Forking repository</em> and <em>Starring repository</em> would require the occurrence of a single event type for each as given below. Activity type Event type Payload <em>Forking repository</em> <code>ForkEvent</code> - <em>Starring repository</em> <code>WatchEvent</code> action = "started" However, in some cases, the same event type yields different activity types depending on the value present in the payload. For example, three different activity types can be generated from the same low-level event type <code>CreateEvent</code>, depending on the value of its ref_type (either "repository", "branch", or "tag") present in the payload. Activity type Event type Payload <em>Creating repository</em> <code>CreateEvent</code> ref_type = "repository" <em>Creating branch</em> <code>CreateEvent</code> ref_type = "branch" <em>Creating tag</em> <code>CreateEvent</code> ref_type = "tag" In some cases, there is no one-to-one mapping between events and activities. This is because some actions on GitHub may generate more than a single event and lead to a sequence of one mandatory event and a second optional event (marked with <em>?</em>). For example, for the activity type <em>Publishing a release</em>, event type <code>ReleaseEvent</code> is mandatory with payload's action value = "published", while event type <code>CreateEvent</code> is optional as it is required only when a new tag is created along with the published release. Activity type Event type Payload <em>Publishing a release</em> <code>ReleaseEvent</code> action = "published" <em>?</em> <code>CreateEvent</code> ref_type = "tag" All the identified activities along with their events type(s) and payload information is given in the following table. Activity type Event type Payload <em>Creating repository</em> <code>CreateEvent</code> ref_type = "repository" <em>Creating branch</em> <code>CreateEvent</code> ref_type = "branch" <em>Creating tag</em> <code>CreateEvent</code> ref_type = "tag" <em>Deleting tag</em> <code>DeleteEvent</code> ref_type = "tag" <em>Deleting repository</em> <code>DeleteEvent</code> ref_type = "branch" <em>Publishing a release</em> <code>ReleaseEvent</code> action = "published" <em>?</em> <code>CreateEvent</code> ref_type = "tag"