├── .codecov.yml ├── .d-compiler ├── .github ├── FUNDING.yml └── workflows │ └── ci.yml ├── .gitignore ├── LICENSE ├── Procfile ├── README.md ├── data ├── hooks │ ├── buildkite │ │ ├── build_scheduled_build-release.json │ │ ├── build_scheduled_dmd.json │ │ └── ping.json │ ├── github │ │ ├── dlang-tour_core_label_583.json │ │ ├── dlang_dmd_open_6359.json │ │ ├── dlang_dmd_status_6324.json │ │ ├── dlang_dub_merged_12345.json │ │ ├── dlang_phobos_edit_5519.json │ │ ├── dlang_phobos_label_4921.json │ │ ├── dlang_phobos_merged_4963.json │ │ ├── dlang_phobos_review_5114.json │ │ ├── dlang_phobos_synchronize_4921.json │ │ ├── dlang_phobos_synchronize_5519.json │ │ ├── dlang_phobos_unlabel_4921.json │ │ ├── notdlang_bar_merged_12347.json │ │ ├── notdlang_foo_open_12346.json │ │ └── vibe-d_vibe-core_label_22.json │ └── trello │ │ └── active_issue_16794.json └── payloads │ ├── bugzilla_buglist.cgi?bug_id=16794&ctype=csv&columnlist=short_desc,bug_status,resolution,bug_severity,priority,keywords │ ├── bugzilla_buglist.cgi?bug_id=17564&ctype=csv&columnlist=short_desc,bug_status,resolution,bug_severity,priority,keywords │ ├── bugzilla_buglist.cgi?bug_id=8573&ctype=csv&columnlist=short_desc,bug_status,resolution,bug_severity,priority,keywords │ ├── bugzilla_jsonrpc.cgi_Bug.comments_16794 │ ├── bugzilla_jsonrpc.cgi_Bug.comments_17564 │ ├── bugzilla_jsonrpc.cgi_Bug.comments_8573 │ ├── bugzilla_jsonrpc.cgi_Bug.comments_8573,8574 │ ├── bugzilla_jsonrpc.cgi_Bug.update_17564 │ ├── bugzilla_jsonrpc.cgi_Bug.update_8573 │ ├── bugzilla_jsonrpc.cgi_Bug.update_8574 │ ├── github_orgs_dlang_public_members?per_page=100 │ ├── github_repos_dlang-tour_core_commits_4941624d1af77e84565ec86979c21c1d582b1c06_status │ ├── github_repos_dlang-tour_core_issues_583_events │ ├── github_repos_dlang-tour_core_issues_583_labels │ ├── github_repos_dlang-tour_core_pulls_583_commits │ ├── github_repos_dlang-tour_core_pulls_583_reviews │ ├── github_repos_dlang_dmd_commits_782fd3fdd4a9c23e1307b4b963b443ed60517dfe_status │ ├── github_repos_dlang_dmd_commits_d6fc98058b637f9a558206847e6d7057ab9fb3de_status │ ├── github_repos_dlang_dmd_issues?state=open&labels=auto-merge │ ├── github_repos_dlang_dmd_issues?state=open&labels=auto-merge-squash │ ├── github_repos_dlang_dmd_issues_6325_labels │ ├── github_repos_dlang_dmd_issues_6327_events │ ├── github_repos_dlang_dmd_issues_6327_labels │ ├── github_repos_dlang_dmd_issues_6328_events │ ├── github_repos_dlang_dmd_issues_6359_comments │ ├── github_repos_dlang_dmd_issues_6359_labels │ ├── github_repos_dlang_dmd_pulls_6327 │ ├── github_repos_dlang_dmd_pulls_6327_commits │ ├── github_repos_dlang_dmd_pulls_6327_reviews │ ├── github_repos_dlang_dmd_pulls_6328 │ ├── github_repos_dlang_dmd_pulls_6328_commits │ ├── github_repos_dlang_dmd_pulls_6328_reviews │ ├── github_repos_dlang_dmd_pulls_6359_commits │ ├── github_repos_dlang_dub_issues_12345_comments │ ├── github_repos_dlang_dub_pulls_12345_commits │ ├── github_repos_dlang_phobos_commits_0fb66f092b897b55318509c6582008b3f912311a_status │ ├── github_repos_dlang_phobos_commits_5b8b90e1824cb90635719f6d3b1f6c195a95a47e_status │ ├── github_repos_dlang_phobos_commits_a04acd6a2813fb344d3e47369cf7fd64523ece44_status │ ├── github_repos_dlang_phobos_commits_b7bf452ca52c2a529e79a830eee97310233e3a9c_status │ ├── github_repos_dlang_phobos_commits_c4224ad203f5497569452ff05284124eb7030602_status │ ├── github_repos_dlang_phobos_commits_d2c7d3761b73405ee39da3fd7fe5030dee35a39e_status │ ├── github_repos_dlang_phobos_issues?state=open&sort=updated&direction=asc │ ├── github_repos_dlang_phobos_issues_2526_comments │ ├── github_repos_dlang_phobos_issues_3534_comments │ ├── github_repos_dlang_phobos_issues_3620_comments │ ├── github_repos_dlang_phobos_issues_4551_comments │ ├── github_repos_dlang_phobos_issues_4921_comments │ ├── github_repos_dlang_phobos_issues_4921_events │ ├── github_repos_dlang_phobos_issues_4921_labels │ ├── github_repos_dlang_phobos_issues_4963_comments │ ├── github_repos_dlang_phobos_issues_5114_events │ ├── github_repos_dlang_phobos_issues_5114_labels │ ├── github_repos_dlang_phobos_issues_5519_comments │ ├── github_repos_dlang_phobos_issues_5519_events │ ├── github_repos_dlang_phobos_issues_5519_labels │ ├── github_repos_dlang_phobos_pulls_2526 │ ├── github_repos_dlang_phobos_pulls_2526_comments │ ├── github_repos_dlang_phobos_pulls_3534 │ ├── github_repos_dlang_phobos_pulls_3534_comments │ ├── github_repos_dlang_phobos_pulls_3620 │ ├── github_repos_dlang_phobos_pulls_3620_comments │ ├── github_repos_dlang_phobos_pulls_4551 │ ├── github_repos_dlang_phobos_pulls_4551_comments │ ├── github_repos_dlang_phobos_pulls_4921_commits │ ├── github_repos_dlang_phobos_pulls_4921_reviews │ ├── github_repos_dlang_phobos_pulls_4963_commits │ ├── github_repos_dlang_phobos_pulls_5114_commits │ ├── github_repos_dlang_phobos_pulls_5114_reviews │ ├── github_repos_dlang_phobos_pulls_5519_commits │ ├── github_repos_dlang_tools_issues?state=open&sort=updated&direction=asc │ ├── github_repos_notdlang_bar_issues_12347_comments │ ├── github_repos_notdlang_bar_pulls_12347_commits │ ├── github_repos_notdlang_foo_issues_12346_comments │ ├── github_repos_notdlang_foo_issues_12346_labels │ ├── github_repos_notdlang_foo_pulls_12346_commits │ ├── github_repos_vibe-d_vibe-core_commits_04b3575c14dc7ad9971e19f153f3e3d712c1bdde_status │ ├── github_repos_vibe-d_vibe-core_issues_22_events │ ├── github_repos_vibe-d_vibe-core_issues_22_labels │ ├── github_repos_vibe-d_vibe-core_pulls_22_commits │ ├── github_repos_vibe-d_vibe-core_pulls_22_reviews │ ├── github_users_9il │ ├── github_users_MartinNowak │ ├── github_users_PetarKirov │ ├── github_users_ZombineDev │ ├── github_users_wilzbach │ ├── graphql │ └── buildkite_organization │ ├── hcloud_images?sort=created:desc&type=snapshot │ ├── hcloud_servers │ ├── hcloud_servers_post │ ├── trello_1_board_55586bf9fd02d8c66074321a_lists?key=01234&token=abcde │ ├── trello_1_cards_583f517a333add7c28e0cec7?key=01234&token=abcde │ ├── trello_1_cards_583f517a333add7c28e0cec7_actions?filter=commentCard&key=01234&token=abcde │ ├── trello_1_cards_583f517a333add7c28e0cec7_idList?value=55586d9b810fb97f9459df7d&key=01234&token=abcde │ ├── trello_1_cards_583f517a333add7c28e0cec7_pos?value=bottom&key=01234&token=abcde │ ├── trello_1_search?query=name │ ├── trello_1_search?query=name:%22Issue%2016794%22&key=01234&token=abcde │ ├── trello_1_search?query=name:%22Issue%2017564%22&key=01234&token=abcde │ ├── trello_1_search?query=name:%22Issue%208573%22&key=01234&token=abcde │ └── trello_1_search?query=name:%22Issue%208574%22&key=01234&token=abcde ├── dub.sdl ├── dub.selections.json ├── public ├── css │ └── style.min.css └── img │ ├── dlang_bot.png │ ├── dlang_bot_bugzilla_comment.png │ ├── dlang_bot_github_comment.png │ ├── dlang_bot_trello_comment.png │ └── dlang_rocket.png ├── source └── dlangbot │ ├── app.d │ ├── bugzilla.d │ ├── buildkite.d │ ├── cron.d │ ├── database.d │ ├── github.d │ ├── github_api.d │ ├── hcloud_api.d │ ├── trello.d │ ├── twitter.d │ ├── utils.d │ └── warnings.d ├── test ├── bugzilla.d ├── buildkite.d ├── comments.d ├── cronjob.d ├── database.d ├── github.d ├── labels.d ├── review.d ├── status.d ├── trello.d ├── twitter.d └── utils.d └── views ├── contributor_stats.dt ├── contributor_stats_cycle.dt └── index.dt /.codecov.yml: -------------------------------------------------------------------------------- 1 | # Documentation: https://github.com/codecov/support/wiki/codecov.yml 2 | 3 | codecov: 4 | # CodeCov should only wait for CI's that run coverage tests 5 | # DAutoTester and auto-tester are not in the default list 6 | ci: 7 | - !travis 8 | bot: dlang-bot 9 | 10 | coverage: 11 | precision: 3 12 | round: down 13 | range: 80...100 14 | 15 | # Learn more at https://docs.codecov.io/docs/commit-status 16 | status: 17 | project: off 18 | patch: 19 | default: 20 | informational: true 21 | changes: off 22 | 23 | comment: false 24 | -------------------------------------------------------------------------------- /.d-compiler: -------------------------------------------------------------------------------- 1 | dmd-2.100.2 2 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # https://help.github.com/en/articles/displaying-a-sponsor-button-in-your-repository 2 | 3 | open_collective: dlang 4 | custom: https://dlang.org/foundation/donate.html 5 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | on: [ push, pull_request ] 3 | 4 | jobs: 5 | main: 6 | name: Run 7 | strategy: 8 | fail-fast: false 9 | matrix: 10 | os: [ ubuntu-20.04 ] 11 | dc: [ dmd-2.100.2, ldc-1.30.0 ] 12 | 13 | runs-on: ${{ matrix.os }} 14 | steps: 15 | - name: Prepare compiler 16 | uses: dlang-community/setup-dlang@v1 17 | with: 18 | compiler: ${{ matrix.dc }} 19 | 20 | - uses: actions/checkout@v2 21 | 22 | - name: Test 23 | if: matrix.dc != 'ldc-latest' 24 | run: | 25 | # Tests are neither random- nor parallelizable atm., so use a --single serial thread. 26 | dub test --compiler=$DC -- --single --trace --debug 27 | 28 | - name: Test with coverage 29 | if: matrix.dc == 'ldc-latest' 30 | env: 31 | COVERAGE: true 32 | run: | 33 | # Mirrot the previous `run` step but with `--build=unittest-cov` 34 | dub test --compiler=$DC --build=unittest-cov -- --single --trace --debug 35 | 36 | - name: Upload code coverage 37 | if: matrix.dc == 'ldc-latest' 38 | uses: codecov/codecov-action@v1 39 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | dlang-bot 2 | __test__unittest__ 3 | dlang-bot-test-unittest 4 | ut.d # unit-threaded 5 | 6 | # database 7 | /var 8 | 9 | /cache 10 | 11 | # Created by https://www.gitignore.io/api/d 12 | 13 | ### D ### 14 | # Compiled Object files 15 | *.o 16 | *.obj 17 | 18 | # Compiled Dynamic libraries 19 | *.so 20 | *.dylib 21 | *.dll 22 | 23 | # Compiled Static libraries 24 | *.a 25 | *.lib 26 | 27 | # Executables 28 | *.exe 29 | 30 | # DUB 31 | .dub 32 | docs.json 33 | __dummy.html 34 | docs/ 35 | 36 | # Code coverage 37 | *.lst 38 | 39 | # End of https://www.gitignore.io/api/d 40 | 41 | # Config environment file 42 | /.env 43 | 44 | # Auto-generated unittest file 45 | /ut.d 46 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Martin Nowak 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | default_process_types: 2 | web: ./dlang-bot --port $PORT --vv 3 | -------------------------------------------------------------------------------- /data/hooks/buildkite/build_scheduled_build-release.json: -------------------------------------------------------------------------------- 1 | { 2 | "event": "build.scheduled", 3 | "build": { 4 | "id": "8f8da395-54fa-4591-bf7c-218bfc0e4585", 5 | "url": "https://api.buildkite.com/v2/organizations/dlang/pipelines/build-release/builds/52", 6 | "web_url": "https://buildkite.com/dlang/build-release/builds/52", 7 | "number": 52, 8 | "state": "scheduled", 9 | "blocked": false, 10 | "message": "test", 11 | "commit": "HEAD", 12 | "branch": "release_builder", 13 | "tag": null, 14 | "source": "ui", 15 | "creator": { 16 | "id": "a76003da-124b-4e63-90d3-8dc70e708845", 17 | "name": "Martin Nowak", 18 | "email": "code@dawg.eu", 19 | "avatar_url": "https://www.gravatar.com/avatar/d919a6f84bb1b92ff78e2da0810a844d", 20 | "created_at": "2018-04-24 16:57:54 UTC" 21 | }, 22 | "created_at": "2018-11-01 15:03:16 UTC", 23 | "scheduled_at": "2018-11-01 15:03:16 UTC", 24 | "started_at": null, 25 | "finished_at": null, 26 | "meta_data": { 27 | }, 28 | "pull_request": null 29 | }, 30 | "pipeline": { 31 | "id": "c25fe05b-39b1-47f5-95d5-92fdda76a0a6", 32 | "url": "https://api.buildkite.com/v2/organizations/dlang/pipelines/build-release", 33 | "web_url": "https://buildkite.com/dlang/build-release", 34 | "name": "build-release", 35 | "description": "Build a nightly release or a feature preview", 36 | "slug": "build-release", 37 | "repository": "https://github.com/MartinNowak/ci.git", 38 | "branch_configuration": null, 39 | "default_branch": "release_builder", 40 | "skip_queued_branch_builds": false, 41 | "skip_queued_branch_builds_filter": null, 42 | "cancel_running_branch_builds": false, 43 | "cancel_running_branch_builds_filter": null, 44 | "provider": { 45 | "id": "github", 46 | "settings": { 47 | "trigger_mode": "none", 48 | "build_pull_requests": true, 49 | "pull_request_branch_filter_enabled": false, 50 | "skip_pull_request_builds_for_existing_commits": true, 51 | "build_pull_request_forks": false, 52 | "prefix_pull_request_fork_branch_names": true, 53 | "build_tags": false, 54 | "publish_commit_status": true, 55 | "publish_commit_status_per_step": false, 56 | "separate_pull_request_statuses": false, 57 | "publish_blocked_as_pending": false, 58 | "repository": "MartinNowak/ci", 59 | "pull_request_branch_filter_configuration": "" 60 | }, 61 | "webhook_url": "https://webhook.buildkite.com/deliver/24ac1cc4000e9ce5eef1d6a4b42c8a15050ff76080b51da621" 62 | }, 63 | "builds_url": "https://api.buildkite.com/v2/organizations/dlang/pipelines/build-release/builds", 64 | "badge_url": "https://badge.buildkite.com/27449ac26b44387fe48d54a99df69947aaf94d5863aab641a3.svg", 65 | "created_at": "2018-10-08 16:19:59 UTC", 66 | "env": { 67 | "BRANCH": "master" 68 | }, 69 | "scheduled_builds_count": 1, 70 | "running_builds_count": 0, 71 | "scheduled_jobs_count": 1, 72 | "running_jobs_count": 0, 73 | "waiting_jobs_count": 0, 74 | "steps": [ 75 | { 76 | "type": "script", 77 | "name": ":pipeline:", 78 | "command": "buildkite-agent pipeline upload ./buildkite/build_release_pipeline.yml", 79 | "artifact_paths": "", 80 | "branch_configuration": "", 81 | "env": { 82 | }, 83 | "timeout_in_minutes": null, 84 | "agent_query_rules": [ 85 | "queue=release-builder" 86 | ], 87 | "concurrency": null, 88 | "parallelism": null 89 | } 90 | ] 91 | }, 92 | "sender": { 93 | "id": "a76003da-124b-4e63-90d3-8dc70e708845", 94 | "name": "Martin Nowak" 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /data/hooks/buildkite/build_scheduled_dmd.json: -------------------------------------------------------------------------------- 1 | { 2 | "event": "build.scheduled", 3 | "build": { 4 | "id": "c3dbb63d-26d7-4804-a10d-a4eef33b3f02", 5 | "url": "https://api.buildkite.com/v2/organizations/dlang/pipelines/dmd/builds/2297", 6 | "web_url": "https://buildkite.com/dlang/dmd/builds/2297", 7 | "number": 2297, 8 | "state": "scheduled", 9 | "blocked": false, 10 | "message": "Refactor aliasthis checks into functions", 11 | "commit": "25df6fc9205dd3493fa953b1850f76e30514f3e9", 12 | "branch": "RazvanN7:Refactor_aliasthis", 13 | "tag": null, 14 | "source": "webhook", 15 | "creator": { 16 | "id": "cdc22883-ff52-464b-b4d5-45ca090a246f", 17 | "name": "Razvan Nitu", 18 | "email": "razvan.nitu1305@gmail.com", 19 | "avatar_url": "https://www.gravatar.com/avatar/c80b862237d13cb0cf02640cc8fdc87f", 20 | "created_at": "2018-07-11 09:56:25 UTC" 21 | }, 22 | "created_at": "2018-11-02 10:22:21 UTC", 23 | "scheduled_at": "2018-11-02 10:22:21 UTC", 24 | "started_at": null, 25 | "finished_at": null, 26 | "meta_data": { 27 | }, 28 | "pull_request": { 29 | "id": "8902", 30 | "base": "master", 31 | "repository": "git://github.com/RazvanN7/dmd.git" 32 | } 33 | }, 34 | "pipeline": { 35 | "id": "beafcb1e-38bd-4988-b80b-da327e525b02", 36 | "url": "https://api.buildkite.com/v2/organizations/dlang/pipelines/dmd", 37 | "web_url": "https://buildkite.com/dlang/dmd", 38 | "name": "dmd", 39 | "description": "", 40 | "slug": "dmd", 41 | "repository": "https://github.com/dlang/dmd.git", 42 | "branch_configuration": null, 43 | "default_branch": "master", 44 | "skip_queued_branch_builds": true, 45 | "skip_queued_branch_builds_filter": "!master !stable", 46 | "cancel_running_branch_builds": true, 47 | "cancel_running_branch_builds_filter": "!master !stable", 48 | "provider": { 49 | "id": "github", 50 | "settings": { 51 | "trigger_mode": "code", 52 | "build_pull_requests": true, 53 | "pull_request_branch_filter_enabled": false, 54 | "skip_pull_request_builds_for_existing_commits": true, 55 | "build_pull_request_forks": true, 56 | "prefix_pull_request_fork_branch_names": true, 57 | "build_tags": false, 58 | "publish_commit_status": true, 59 | "publish_commit_status_per_step": false, 60 | "publish_blocked_as_pending": false, 61 | "repository": "dlang/dmd", 62 | "pull_request_branch_filter_configuration": "" 63 | }, 64 | "webhook_url": "https://webhook.buildkite.com/deliver/d3b3b8dba42c4a3dbe7c6c98867b8501f6bd30404604a4b034" 65 | }, 66 | "builds_url": "https://api.buildkite.com/v2/organizations/dlang/pipelines/dmd/builds", 67 | "badge_url": "https://badge.buildkite.com/01239dde8424d69809d08769015bbdb9b90d05082e534d2f82.svg", 68 | "created_at": "2018-07-11 09:40:38 UTC", 69 | "env": { 70 | "CODECOV_TOKEN": "bb98e9c9-5a86-4d53-b8dd-69d98efa3c13" 71 | }, 72 | "scheduled_builds_count": 1, 73 | "running_builds_count": 0, 74 | "scheduled_jobs_count": 1, 75 | "running_jobs_count": 0, 76 | "waiting_jobs_count": 0, 77 | "steps": [ 78 | { 79 | "type": "script", 80 | "name": ":pipeline:", 81 | "command": "wget https://github.com/dlang/ci/raw/master/buildkite.sh\r\n\r\nbash buildkite.sh | buildkite-agent pipeline upload", 82 | "artifact_paths": "", 83 | "branch_configuration": "", 84 | "env": { 85 | }, 86 | "timeout_in_minutes": null, 87 | "agent_query_rules": [ 88 | 89 | ], 90 | "concurrency": null, 91 | "parallelism": null 92 | } 93 | ] 94 | }, 95 | "sender": { 96 | "id": "cdc22883-ff52-464b-b4d5-45ca090a246f", 97 | "name": "Razvan Nitu" 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /data/hooks/buildkite/ping.json: -------------------------------------------------------------------------------- 1 | { 2 | "event": "ping", 3 | "service": { 4 | "id": "49801950-1df0-474f-bb56-ad6a930c5cb9", 5 | "provider": "webhook", 6 | "settings": { 7 | "url": "https://server.com/webhook" 8 | } 9 | }, 10 | "organization": { 11 | "...": "..." 12 | }, 13 | "sender": { 14 | "id": "8a7693f8-dbae-4783-9137-84090fce9045", 15 | "name": "Some Person" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /data/hooks/trello/active_issue_16794.json: -------------------------------------------------------------------------------- 1 | { 2 | "model": { 3 | "id": "583f517a333add7c28e0cec7", 4 | "name": "Active", 5 | "desc": "", 6 | "descData": null, 7 | "closed": false, 8 | "idOrganization": "4f15dd34dc12a90c6f171ad4", 9 | "pinned": false, 10 | "url": "https://trello.com/b/XoFjxiqG/active", 11 | "shortUrl": "https://trello.com/b/XoFjxiqG", 12 | "prefs": { 13 | "permissionLevel": "public", 14 | "voting": "disabled", 15 | "comments": "public", 16 | "invitations": "members", 17 | "selfJoin": true, 18 | "cardCovers": true, 19 | "cardAging": "regular", 20 | "calendarFeedEnabled": false, 21 | "background": "green", 22 | "backgroundImage": null, 23 | "backgroundImageScaled": null, 24 | "backgroundTile": false, 25 | "backgroundBrightness": "dark", 26 | "backgroundColor": "#519839", 27 | "canBePublic": true, 28 | "canBeOrg": true, 29 | "canBePrivate": true, 30 | "canInvite": true 31 | }, 32 | "labelNames": { 33 | "green": "", 34 | "yellow": "", 35 | "orange": "", 36 | "red": "", 37 | "purple": "", 38 | "blue": "", 39 | "sky": "", 40 | "lime": "", 41 | "pink": "", 42 | "black": "" 43 | } 44 | }, 45 | "action": { 46 | "id": "585ecea7029d95c196f2bce1", 47 | "idMemberCreator": "4f163af63529cf014d0b3c8a", 48 | "data": { 49 | "board": { 50 | "shortLink": "XoFjxiqG", 51 | "name": "Active", 52 | "id": "55586bf9fd02d8c66074321a" 53 | }, 54 | "list": { 55 | "name": "WIP", 56 | "id": "55586d963eab57c21df17371" 57 | }, 58 | "card": { 59 | "shortLink": "H1IPmxHc", 60 | "idShort": 279, 61 | "name": "Test Card Bugzilla 16794", 62 | "id": "583f517a333add7c28e0cec7" 63 | } 64 | }, 65 | "type": "createCard", 66 | "date": "2016-12-24T19:38:15.469Z", 67 | "memberCreator": { 68 | "id": "4f163af63529cf014d0b3c8a", 69 | "avatarHash": "", 70 | "fullName": "Martin Nowak", 71 | "initials": "MN", 72 | "username": "dawg" 73 | } 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /data/payloads/bugzilla_buglist.cgi?bug_id=16794&ctype=csv&columnlist=short_desc,bug_status,resolution,bug_severity,priority,keywords: -------------------------------------------------------------------------------- 1 | bug_id,"short_desc","bug_status","resolution","bug_severity","priority","keywords" 2 | 16794,"dmd not working on Ubuntu 16.10 because of default PIE linking","RESOLVED","FIXED","critical","P1", 3 | -------------------------------------------------------------------------------- /data/payloads/bugzilla_buglist.cgi?bug_id=17564&ctype=csv&columnlist=short_desc,bug_status,resolution,bug_severity,priority,keywords: -------------------------------------------------------------------------------- 1 | bug_id,"short_desc","bug_status","resolution","bug_severity","priority","keywords" 2 | 17564,"std.experimental.allocator.theAllocator is null within shared static this","NEW","---","normal","P1", 3 | -------------------------------------------------------------------------------- /data/payloads/bugzilla_buglist.cgi?bug_id=8573&ctype=csv&columnlist=short_desc,bug_status,resolution,bug_severity,priority,keywords: -------------------------------------------------------------------------------- 1 | bug_id,"short_desc","bug_status","resolution","bug_severity","priority","keywords" 2 | 8573,"A simpler Phobos function that returns the index of the mix or max item","NEW","---","enhancement","P2", 3 | -------------------------------------------------------------------------------- /data/payloads/bugzilla_jsonrpc.cgi_Bug.comments_16794: -------------------------------------------------------------------------------- 1 | { 2 | "error" : null, 3 | "result" : { 4 | "bugs" : { 5 | "16794" : { 6 | "comments" : [] 7 | } 8 | }, 9 | "comments" : {} 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /data/payloads/bugzilla_jsonrpc.cgi_Bug.comments_17564: -------------------------------------------------------------------------------- 1 | { 2 | "error" : null, 3 | "result" : { 4 | "bugs" : { 5 | "17564" : { 6 | "comments" : [] 7 | } 8 | }, 9 | "comments" : {} 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /data/payloads/bugzilla_jsonrpc.cgi_Bug.comments_8573: -------------------------------------------------------------------------------- 1 | { 2 | "error" : null, 3 | "result" : { 4 | "bugs" : { 5 | "8573" : { 6 | "comments" : [] 7 | } 8 | }, 9 | "comments" : {} 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /data/payloads/bugzilla_jsonrpc.cgi_Bug.comments_8573,8574: -------------------------------------------------------------------------------- 1 | { 2 | "error" : null, 3 | "result" : { 4 | "bugs" : { 5 | "8573" : { 6 | "comments" : [] 7 | }, 8 | "8574" : { 9 | "comments" : [] 10 | } 11 | }, 12 | "comments" : {} 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /data/payloads/bugzilla_jsonrpc.cgi_Bug.update_17564: -------------------------------------------------------------------------------- 1 | { 2 | "error" : null, 3 | "result" : null 4 | } 5 | -------------------------------------------------------------------------------- /data/payloads/bugzilla_jsonrpc.cgi_Bug.update_8573: -------------------------------------------------------------------------------- 1 | { 2 | "error" : null, 3 | "result" : null 4 | } 5 | -------------------------------------------------------------------------------- /data/payloads/bugzilla_jsonrpc.cgi_Bug.update_8574: -------------------------------------------------------------------------------- 1 | { 2 | "error" : null, 3 | "result" : null 4 | } 5 | -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang-tour_core_commits_4941624d1af77e84565ec86979c21c1d582b1c06_status: -------------------------------------------------------------------------------- 1 | { 2 | "state": "failure", 3 | "statuses": [ 4 | { 5 | "url": "https://api.github.com/repos/dlang-tour/core/statuses/4941624d1af77e84565ec86979c21c1d582b1c06", 6 | "id": 1387272824, 7 | "state": "success", 8 | "description": "The Travis CI build passed", 9 | "target_url": "https://travis-ci.org/dlang-tour/core/builds/254930692?utm_source=github_status&utm_medium=notification", 10 | "context": "continuous-integration/travis-ci/pr", 11 | "created_at": "2017-07-18T16:46:42Z", 12 | "updated_at": "2017-07-18T16:46:42Z" 13 | }, 14 | { 15 | "url": "https://api.github.com/repos/dlang-tour/core/statuses/4941624d1af77e84565ec86979c21c1d582b1c06", 16 | "id": 1387274982, 17 | "state": "success", 18 | "description": "46.14% (+0.079%) compared to 73a4467", 19 | "target_url": "https://codecov.io/gh/dlang-tour/core/compare/73a4467b97e27f39e2da12e6e7f6915c08f02b79...4941624d1af77e84565ec86979c21c1d582b1c06", 20 | "context": "codecov/project", 21 | "created_at": "2017-07-18T16:47:20Z", 22 | "updated_at": "2017-07-18T16:47:20Z" 23 | }, 24 | { 25 | "url": "https://api.github.com/repos/dlang-tour/core/statuses/4941624d1af77e84565ec86979c21c1d582b1c06", 26 | "id": 1387274995, 27 | "state": "failure", 28 | "description": "0% of diff hit (target 46.061%)", 29 | "target_url": "https://codecov.io/gh/dlang-tour/core/compare/73a4467b97e27f39e2da12e6e7f6915c08f02b79...4941624d1af77e84565ec86979c21c1d582b1c06", 30 | "context": "codecov/patch", 31 | "created_at": "2017-07-18T16:47:20Z", 32 | "updated_at": "2017-07-18T16:47:20Z" 33 | } 34 | ], 35 | "sha": "4941624d1af77e84565ec86979c21c1d582b1c06", 36 | "total_count": 3, 37 | "repository": { 38 | "id": 49131290, 39 | "name": "core", 40 | "full_name": "dlang-tour/core", 41 | "owner": { 42 | "login": "dlang-tour", 43 | "id": 21092294, 44 | "avatar_url": "https://avatars0.githubusercontent.com/u/21092294?v=4", 45 | "gravatar_id": "", 46 | "url": "https://api.github.com/users/dlang-tour", 47 | "html_url": "https://github.com/dlang-tour", 48 | "followers_url": "https://api.github.com/users/dlang-tour/followers", 49 | "following_url": "https://api.github.com/users/dlang-tour/following{/other_user}", 50 | "gists_url": "https://api.github.com/users/dlang-tour/gists{/gist_id}", 51 | "starred_url": "https://api.github.com/users/dlang-tour/starred{/owner}{/repo}", 52 | "subscriptions_url": "https://api.github.com/users/dlang-tour/subscriptions", 53 | "organizations_url": "https://api.github.com/users/dlang-tour/orgs", 54 | "repos_url": "https://api.github.com/users/dlang-tour/repos", 55 | "events_url": "https://api.github.com/users/dlang-tour/events{/privacy}", 56 | "received_events_url": "https://api.github.com/users/dlang-tour/received_events", 57 | "type": "Organization", 58 | "site_admin": false 59 | }, 60 | "private": false, 61 | "html_url": "https://github.com/dlang-tour/core", 62 | "description": "D Language online tour (https://tour.dlang.org/) and online editor (https://run.dlang.io/)", 63 | "fork": false, 64 | "url": "https://api.github.com/repos/dlang-tour/core", 65 | "forks_url": "https://api.github.com/repos/dlang-tour/core/forks", 66 | "keys_url": "https://api.github.com/repos/dlang-tour/core/keys{/key_id}", 67 | "collaborators_url": "https://api.github.com/repos/dlang-tour/core/collaborators{/collaborator}", 68 | "teams_url": "https://api.github.com/repos/dlang-tour/core/teams", 69 | "hooks_url": "https://api.github.com/repos/dlang-tour/core/hooks", 70 | "issue_events_url": "https://api.github.com/repos/dlang-tour/core/issues/events{/number}", 71 | "events_url": "https://api.github.com/repos/dlang-tour/core/events", 72 | "assignees_url": "https://api.github.com/repos/dlang-tour/core/assignees{/user}", 73 | "branches_url": "https://api.github.com/repos/dlang-tour/core/branches{/branch}", 74 | "tags_url": "https://api.github.com/repos/dlang-tour/core/tags", 75 | "blobs_url": "https://api.github.com/repos/dlang-tour/core/git/blobs{/sha}", 76 | "git_tags_url": "https://api.github.com/repos/dlang-tour/core/git/tags{/sha}", 77 | "git_refs_url": "https://api.github.com/repos/dlang-tour/core/git/refs{/sha}", 78 | "trees_url": "https://api.github.com/repos/dlang-tour/core/git/trees{/sha}", 79 | "statuses_url": "https://api.github.com/repos/dlang-tour/core/statuses/{sha}", 80 | "languages_url": "https://api.github.com/repos/dlang-tour/core/languages", 81 | "stargazers_url": "https://api.github.com/repos/dlang-tour/core/stargazers", 82 | "contributors_url": "https://api.github.com/repos/dlang-tour/core/contributors", 83 | "subscribers_url": "https://api.github.com/repos/dlang-tour/core/subscribers", 84 | "subscription_url": "https://api.github.com/repos/dlang-tour/core/subscription", 85 | "commits_url": "https://api.github.com/repos/dlang-tour/core/commits{/sha}", 86 | "git_commits_url": "https://api.github.com/repos/dlang-tour/core/git/commits{/sha}", 87 | "comments_url": "https://api.github.com/repos/dlang-tour/core/comments{/number}", 88 | "issue_comment_url": "https://api.github.com/repos/dlang-tour/core/issues/comments{/number}", 89 | "contents_url": "https://api.github.com/repos/dlang-tour/core/contents/{+path}", 90 | "compare_url": "https://api.github.com/repos/dlang-tour/core/compare/{base}...{head}", 91 | "merges_url": "https://api.github.com/repos/dlang-tour/core/merges", 92 | "archive_url": "https://api.github.com/repos/dlang-tour/core/{archive_format}{/ref}", 93 | "downloads_url": "https://api.github.com/repos/dlang-tour/core/downloads", 94 | "issues_url": "https://api.github.com/repos/dlang-tour/core/issues{/number}", 95 | "pulls_url": "https://api.github.com/repos/dlang-tour/core/pulls{/number}", 96 | "milestones_url": "https://api.github.com/repos/dlang-tour/core/milestones{/number}", 97 | "notifications_url": "https://api.github.com/repos/dlang-tour/core/notifications{?since,all,participating}", 98 | "labels_url": "https://api.github.com/repos/dlang-tour/core/labels{/name}", 99 | "releases_url": "https://api.github.com/repos/dlang-tour/core/releases{/id}", 100 | "deployments_url": "https://api.github.com/repos/dlang-tour/core/deployments" 101 | }, 102 | "commit_url": "https://api.github.com/repos/dlang-tour/core/commits/4941624d1af77e84565ec86979c21c1d582b1c06", 103 | "url": "https://api.github.com/repos/dlang-tour/core/commits/4941624d1af77e84565ec86979c21c1d582b1c06/status" 104 | } 105 | -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang-tour_core_issues_583_labels: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": 640185010, 4 | "url": "https://api.github.com/repos/dlang-tour/core/labels/auto-merge", 5 | "name": "auto-merge", 6 | "color": "d3d3d3", 7 | "default": false 8 | }, 9 | { 10 | "id": 386942228, 11 | "url": "https://api.github.com/repos/dlang-tour/core/labels/Backend", 12 | "name": "Backend", 13 | "color": "006b75", 14 | "default": false 15 | } 16 | ] 17 | -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang-tour_core_pulls_583_commits: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "sha": "4941624d1af77e84565ec86979c21c1d582b1c06", 4 | "commit": { 5 | "author": { 6 | "name": "Sebastian Wilzbach", 7 | "email": "seb@wilzba.ch", 8 | "date": "2017-07-18T16:28:38Z" 9 | }, 10 | "committer": { 11 | "name": "Sebastian Wilzbach", 12 | "email": "seb@wilzba.ch", 13 | "date": "2017-07-18T16:28:38Z" 14 | }, 15 | "message": "Run docker update async + remove previous versions", 16 | "tree": { 17 | "sha": "51dc1192f774ed252cc392264f28f9c1932d8da1", 18 | "url": "https://api.github.com/repos/dlang-tour/core/git/trees/51dc1192f774ed252cc392264f28f9c1932d8da1" 19 | }, 20 | "url": "https://api.github.com/repos/dlang-tour/core/git/commits/4941624d1af77e84565ec86979c21c1d582b1c06", 21 | "comment_count": 0 22 | }, 23 | "url": "https://api.github.com/repos/dlang-tour/core/commits/4941624d1af77e84565ec86979c21c1d582b1c06", 24 | "html_url": "https://github.com/dlang-tour/core/commit/4941624d1af77e84565ec86979c21c1d582b1c06", 25 | "comments_url": "https://api.github.com/repos/dlang-tour/core/commits/4941624d1af77e84565ec86979c21c1d582b1c06/comments", 26 | "author": { 27 | "login": "wilzbach", 28 | "id": 4370550, 29 | "avatar_url": "https://avatars3.githubusercontent.com/u/4370550?v=4", 30 | "gravatar_id": "", 31 | "url": "https://api.github.com/users/wilzbach", 32 | "html_url": "https://github.com/wilzbach", 33 | "followers_url": "https://api.github.com/users/wilzbach/followers", 34 | "following_url": "https://api.github.com/users/wilzbach/following{/other_user}", 35 | "gists_url": "https://api.github.com/users/wilzbach/gists{/gist_id}", 36 | "starred_url": "https://api.github.com/users/wilzbach/starred{/owner}{/repo}", 37 | "subscriptions_url": "https://api.github.com/users/wilzbach/subscriptions", 38 | "organizations_url": "https://api.github.com/users/wilzbach/orgs", 39 | "repos_url": "https://api.github.com/users/wilzbach/repos", 40 | "events_url": "https://api.github.com/users/wilzbach/events{/privacy}", 41 | "received_events_url": "https://api.github.com/users/wilzbach/received_events", 42 | "type": "User", 43 | "site_admin": false 44 | }, 45 | "committer": { 46 | "login": "wilzbach", 47 | "id": 4370550, 48 | "avatar_url": "https://avatars3.githubusercontent.com/u/4370550?v=4", 49 | "gravatar_id": "", 50 | "url": "https://api.github.com/users/wilzbach", 51 | "html_url": "https://github.com/wilzbach", 52 | "followers_url": "https://api.github.com/users/wilzbach/followers", 53 | "following_url": "https://api.github.com/users/wilzbach/following{/other_user}", 54 | "gists_url": "https://api.github.com/users/wilzbach/gists{/gist_id}", 55 | "starred_url": "https://api.github.com/users/wilzbach/starred{/owner}{/repo}", 56 | "subscriptions_url": "https://api.github.com/users/wilzbach/subscriptions", 57 | "organizations_url": "https://api.github.com/users/wilzbach/orgs", 58 | "repos_url": "https://api.github.com/users/wilzbach/repos", 59 | "events_url": "https://api.github.com/users/wilzbach/events{/privacy}", 60 | "received_events_url": "https://api.github.com/users/wilzbach/received_events", 61 | "type": "User", 62 | "site_admin": false 63 | }, 64 | "parents": [ 65 | { 66 | "sha": "f011912ed26c4cc9913d23bbc52854403a1fd836", 67 | "url": "https://api.github.com/repos/dlang-tour/core/commits/f011912ed26c4cc9913d23bbc52854403a1fd836", 68 | "html_url": "https://github.com/dlang-tour/core/commit/f011912ed26c4cc9913d23bbc52854403a1fd836" 69 | } 70 | ] 71 | } 72 | ] 73 | -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang-tour_core_pulls_583_reviews: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang_dmd_commits_d6fc98058b637f9a558206847e6d7057ab9fb3de_status: -------------------------------------------------------------------------------- 1 | { 2 | "state": "failure", 3 | "statuses": [ 4 | { 5 | "url": "https://api.github.com/repos/dlang/dmd/statuses/d6fc98058b637f9a558206847e6d7057ab9fb3de", 6 | "id": 916884078, 7 | "state": "failure", 8 | "description": "Build finished. ", 9 | "target_url": "https://ci.dawg.eu/job/dmd_trigger/406/", 10 | "context": "Project Tester", 11 | "created_at": "2016-12-17T12:53:20Z", 12 | "updated_at": "2016-12-17T12:53:20Z" 13 | }, 14 | { 15 | "url": "https://api.github.com/repos/dlang/dmd/statuses/d6fc98058b637f9a558206847e6d7057ab9fb3de", 16 | "id": 916884200, 17 | "state": "failure", 18 | "description": "Build failed", 19 | "target_url": "http://dtest.thecybershadow.net/results/b122a97f578369aa95c26d7f7a8dcc74e95f115c/d6fc98058b637f9a558206847e6d7057ab9fb3de/", 20 | "context": "CyberShadow/DAutoTest", 21 | "created_at": "2016-12-17T12:53:44Z", 22 | "updated_at": "2016-12-17T12:53:44Z" 23 | }, 24 | { 25 | "url": "https://api.github.com/repos/dlang/dmd/statuses/d6fc98058b637f9a558206847e6d7057ab9fb3de", 26 | "id": 916884248, 27 | "state": "failure", 28 | "description": "Your tests failed on CircleCI", 29 | "target_url": "https://circleci.com/gh/dlang/dmd/1886?utm_campaign=vcs-integration-link&utm_medium=referral&utm_source=github-build-link", 30 | "context": "ci/circleci", 31 | "created_at": "2016-12-17T12:53:50Z", 32 | "updated_at": "2016-12-17T12:53:50Z" 33 | }, 34 | { 35 | "url": "https://api.github.com/repos/dlang/dmd/statuses/d6fc98058b637f9a558206847e6d7057ab9fb3de", 36 | "id": 916891980, 37 | "state": "failure", 38 | "description": "The Travis CI build failed", 39 | "target_url": "https://travis-ci.org/dlang/dmd/builds/184762316", 40 | "context": "continuous-integration/travis-ci/pr", 41 | "created_at": "2016-12-17T13:14:25Z", 42 | "updated_at": "2016-12-17T13:14:25Z" 43 | } 44 | ], 45 | "sha": "d6fc98058b637f9a558206847e6d7057ab9fb3de", 46 | "total_count": 4, 47 | "repository": { 48 | "id": 1257070, 49 | "name": "dmd", 50 | "full_name": "dlang/dmd", 51 | "owner": { 52 | "login": "dlang", 53 | "id": 565913, 54 | "avatar_url": "https://avatars3.githubusercontent.com/u/565913?v=4", 55 | "gravatar_id": "", 56 | "url": "https://api.github.com/users/dlang", 57 | "html_url": "https://github.com/dlang", 58 | "followers_url": "https://api.github.com/users/dlang/followers", 59 | "following_url": "https://api.github.com/users/dlang/following{/other_user}", 60 | "gists_url": "https://api.github.com/users/dlang/gists{/gist_id}", 61 | "starred_url": "https://api.github.com/users/dlang/starred{/owner}{/repo}", 62 | "subscriptions_url": "https://api.github.com/users/dlang/subscriptions", 63 | "organizations_url": "https://api.github.com/users/dlang/orgs", 64 | "repos_url": "https://api.github.com/users/dlang/repos", 65 | "events_url": "https://api.github.com/users/dlang/events{/privacy}", 66 | "received_events_url": "https://api.github.com/users/dlang/received_events", 67 | "type": "Organization", 68 | "site_admin": false 69 | }, 70 | "private": false, 71 | "html_url": "https://github.com/dlang/dmd", 72 | "description": "dmd D Programming Language compiler", 73 | "fork": false, 74 | "url": "https://api.github.com/repos/dlang/dmd", 75 | "forks_url": "https://api.github.com/repos/dlang/dmd/forks", 76 | "keys_url": "https://api.github.com/repos/dlang/dmd/keys{/key_id}", 77 | "collaborators_url": "https://api.github.com/repos/dlang/dmd/collaborators{/collaborator}", 78 | "teams_url": "https://api.github.com/repos/dlang/dmd/teams", 79 | "hooks_url": "https://api.github.com/repos/dlang/dmd/hooks", 80 | "issue_events_url": "https://api.github.com/repos/dlang/dmd/issues/events{/number}", 81 | "events_url": "https://api.github.com/repos/dlang/dmd/events", 82 | "assignees_url": "https://api.github.com/repos/dlang/dmd/assignees{/user}", 83 | "branches_url": "https://api.github.com/repos/dlang/dmd/branches{/branch}", 84 | "tags_url": "https://api.github.com/repos/dlang/dmd/tags", 85 | "blobs_url": "https://api.github.com/repos/dlang/dmd/git/blobs{/sha}", 86 | "git_tags_url": "https://api.github.com/repos/dlang/dmd/git/tags{/sha}", 87 | "git_refs_url": "https://api.github.com/repos/dlang/dmd/git/refs{/sha}", 88 | "trees_url": "https://api.github.com/repos/dlang/dmd/git/trees{/sha}", 89 | "statuses_url": "https://api.github.com/repos/dlang/dmd/statuses/{sha}", 90 | "languages_url": "https://api.github.com/repos/dlang/dmd/languages", 91 | "stargazers_url": "https://api.github.com/repos/dlang/dmd/stargazers", 92 | "contributors_url": "https://api.github.com/repos/dlang/dmd/contributors", 93 | "subscribers_url": "https://api.github.com/repos/dlang/dmd/subscribers", 94 | "subscription_url": "https://api.github.com/repos/dlang/dmd/subscription", 95 | "commits_url": "https://api.github.com/repos/dlang/dmd/commits{/sha}", 96 | "git_commits_url": "https://api.github.com/repos/dlang/dmd/git/commits{/sha}", 97 | "comments_url": "https://api.github.com/repos/dlang/dmd/comments{/number}", 98 | "issue_comment_url": "https://api.github.com/repos/dlang/dmd/issues/comments{/number}", 99 | "contents_url": "https://api.github.com/repos/dlang/dmd/contents/{+path}", 100 | "compare_url": "https://api.github.com/repos/dlang/dmd/compare/{base}...{head}", 101 | "merges_url": "https://api.github.com/repos/dlang/dmd/merges", 102 | "archive_url": "https://api.github.com/repos/dlang/dmd/{archive_format}{/ref}", 103 | "downloads_url": "https://api.github.com/repos/dlang/dmd/downloads", 104 | "issues_url": "https://api.github.com/repos/dlang/dmd/issues{/number}", 105 | "pulls_url": "https://api.github.com/repos/dlang/dmd/pulls{/number}", 106 | "milestones_url": "https://api.github.com/repos/dlang/dmd/milestones{/number}", 107 | "notifications_url": "https://api.github.com/repos/dlang/dmd/notifications{?since,all,participating}", 108 | "labels_url": "https://api.github.com/repos/dlang/dmd/labels{/name}", 109 | "releases_url": "https://api.github.com/repos/dlang/dmd/releases{/id}", 110 | "deployments_url": "https://api.github.com/repos/dlang/dmd/deployments" 111 | }, 112 | "commit_url": "https://api.github.com/repos/dlang/dmd/commits/d6fc98058b637f9a558206847e6d7057ab9fb3de", 113 | "url": "https://api.github.com/repos/dlang/dmd/commits/d6fc98058b637f9a558206847e6d7057ab9fb3de/status" 114 | } 115 | -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang_dmd_issues?state=open&labels=auto-merge: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "url": "https://api.github.com/repos/dlang/dmd/issues/6327", 4 | "repository_url": "https://api.github.com/repos/dlang/dmd", 5 | "labels_url": "https://api.github.com/repos/dlang/dmd/issues/6327/labels{/name}", 6 | "comments_url": "https://api.github.com/repos/dlang/dmd/issues/6327/comments", 7 | "events_url": "https://api.github.com/repos/dlang/dmd/issues/6327/events", 8 | "html_url": "https://github.com/dlang/dmd/pull/6327", 9 | "id": 196285279, 10 | "number": 6327, 11 | "title": "Fix issue 16977 - bad debug info for function default arguments", 12 | "user": { 13 | "login": "WalterBright", 14 | "id": 568298, 15 | "avatar_url": "https://avatars.githubusercontent.com/u/568298?v=3", 16 | "gravatar_id": "", 17 | "url": "https://api.github.com/users/WalterBright", 18 | "html_url": "https://github.com/WalterBright", 19 | "followers_url": "https://api.github.com/users/WalterBright/followers", 20 | "following_url": "https://api.github.com/users/WalterBright/following{/other_user}", 21 | "gists_url": "https://api.github.com/users/WalterBright/gists{/gist_id}", 22 | "starred_url": "https://api.github.com/users/WalterBright/starred{/owner}{/repo}", 23 | "subscriptions_url": "https://api.github.com/users/WalterBright/subscriptions", 24 | "organizations_url": "https://api.github.com/users/WalterBright/orgs", 25 | "repos_url": "https://api.github.com/users/WalterBright/repos", 26 | "events_url": "https://api.github.com/users/WalterBright/events{/privacy}", 27 | "received_events_url": "https://api.github.com/users/WalterBright/received_events", 28 | "type": "User", 29 | "site_admin": false 30 | }, 31 | "labels": [ 32 | { 33 | "id": 263298662, 34 | "url": "https://api.github.com/repos/dlang/dmd/labels/Trivial", 35 | "name": "Trivial", 36 | "color": "bfd4f2", 37 | "default": false 38 | }, 39 | { 40 | "id": 263298662, 41 | "url": "https://api.github.com/repos/dlang/dmd/labels/auto-merge", 42 | "name": "auto-merge", 43 | "color": "bfd4f2", 44 | "default": false 45 | } 46 | 47 | ], 48 | "state": "open", 49 | "locked": false, 50 | "assignee": null, 51 | "assignees": [ 52 | 53 | ], 54 | "milestone": null, 55 | "comments": 0, 56 | "created_at": "2016-12-18T16:43:27Z", 57 | "updated_at": "2016-12-18T16:43:27Z", 58 | "closed_at": null, 59 | "pull_request": { 60 | "url": "https://api.github.com/repos/dlang/dmd/pulls/6327", 61 | "html_url": "https://github.com/dlang/dmd/pull/6327", 62 | "diff_url": "https://github.com/dlang/dmd/pull/6327.diff", 63 | "patch_url": "https://github.com/dlang/dmd/pull/6327.patch" 64 | }, 65 | "body": "" 66 | } 67 | ] 68 | -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang_dmd_issues?state=open&labels=auto-merge-squash: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "url": "https://api.github.com/repos/dlang/dmd/issues/6328", 4 | "repository_url": "https://api.github.com/repos/dlang/dmd", 5 | "labels_url": "https://api.github.com/repos/dlang/dmd/issues/6328/labels{/name}", 6 | "comments_url": "https://api.github.com/repos/dlang/dmd/issues/6328/comments", 7 | "events_url": "https://api.github.com/repos/dlang/dmd/issues/6328/events", 8 | "html_url": "https://github.com/dlang/dmd/pull/6328", 9 | "id": 196285279, 10 | "number": 6328, 11 | "title": "taking address of local means it cannot be 'scope' later", 12 | "user": { 13 | "login": "WalterBright", 14 | "id": 568298, 15 | "avatar_url": "https://avatars.githubusercontent.com/u/568298?v=3", 16 | "gravatar_id": "", 17 | "url": "https://api.github.com/users/WalterBright", 18 | "html_url": "https://github.com/WalterBright", 19 | "followers_url": "https://api.github.com/users/WalterBright/followers", 20 | "following_url": "https://api.github.com/users/WalterBright/following{/other_user}", 21 | "gists_url": "https://api.github.com/users/WalterBright/gists{/gist_id}", 22 | "starred_url": "https://api.github.com/users/WalterBright/starred{/owner}{/repo}", 23 | "subscriptions_url": "https://api.github.com/users/WalterBright/subscriptions", 24 | "organizations_url": "https://api.github.com/users/WalterBright/orgs", 25 | "repos_url": "https://api.github.com/users/WalterBright/repos", 26 | "events_url": "https://api.github.com/users/WalterBright/events{/privacy}", 27 | "received_events_url": "https://api.github.com/users/WalterBright/received_events", 28 | "type": "User", 29 | "site_admin": false 30 | }, 31 | "labels": [ 32 | { 33 | "id": 263298662, 34 | "url": "https://api.github.com/repos/dlang/dmd/labels/Trivial", 35 | "name": "Trivial", 36 | "color": "bfd4f2", 37 | "default": false 38 | }, 39 | { 40 | "id": 263298662, 41 | "url": "https://api.github.com/repos/dlang/dmd/labels/auto-merge", 42 | "name": "auto-merge-squash", 43 | "color": "bfd4f2", 44 | "default": false 45 | } 46 | 47 | ], 48 | "state": "open", 49 | "locked": false, 50 | "assignee": null, 51 | "assignees": [ 52 | 53 | ], 54 | "milestone": null, 55 | "comments": 0, 56 | "created_at": "2016-12-18T16:43:27Z", 57 | "updated_at": "2016-12-18T16:43:27Z", 58 | "closed_at": null, 59 | "pull_request": { 60 | "url": "https://api.github.com/repos/dlang/dmd/pulls/6328", 61 | "html_url": "https://github.com/dlang/dmd/pull/6328", 62 | "diff_url": "https://github.com/dlang/dmd/pull/6328.diff", 63 | "patch_url": "https://github.com/dlang/dmd/pull/6328.patch" 64 | }, 65 | "body": "" 66 | } 67 | ] 68 | -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang_dmd_issues_6325_labels: -------------------------------------------------------------------------------- 1 | [ 2 | 3 | ] 4 | -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang_dmd_issues_6327_events: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": 898966016, 4 | "url": "https://api.github.com/repos/dlang/dmd/issues/events/898966016", 5 | "actor": { 6 | "login": "WalterBright", 7 | "id": 568298, 8 | "avatar_url": "https://avatars.githubusercontent.com/u/568298?v=3", 9 | "gravatar_id": "", 10 | "url": "https://api.github.com/users/WalterBright", 11 | "html_url": "https://github.com/WalterBright", 12 | "followers_url": "https://api.github.com/users/WalterBright/followers", 13 | "following_url": "https://api.github.com/users/WalterBright/following{/other_user}", 14 | "gists_url": "https://api.github.com/users/WalterBright/gists{/gist_id}", 15 | "starred_url": "https://api.github.com/users/WalterBright/starred{/owner}{/repo}", 16 | "subscriptions_url": "https://api.github.com/users/WalterBright/subscriptions", 17 | "organizations_url": "https://api.github.com/users/WalterBright/orgs", 18 | "repos_url": "https://api.github.com/users/WalterBright/repos", 19 | "events_url": "https://api.github.com/users/WalterBright/events{/privacy}", 20 | "received_events_url": "https://api.github.com/users/WalterBright/received_events", 21 | "type": "User", 22 | "site_admin": false 23 | }, 24 | "event": "referenced", 25 | "commit_id": "d2b804b4fbff6187d31a5c854b096d21ab09edc9", 26 | "commit_url": "https://api.github.com/repos/dlang/dmd/commits/d2b804b4fbff6187d31a5c854b096d21ab09edc9", 27 | "created_at": "2016-12-19T17:39:57Z" 28 | }, 29 | { 30 | "id": 898966017, 31 | "url": "https://api.github.com/repos/dlang/dmd/issues/events/898966017", 32 | "actor": { 33 | "login": "WalterBright", 34 | "id": 568298, 35 | "avatar_url": "https://avatars.githubusercontent.com/u/568298?v=3", 36 | "gravatar_id": "", 37 | "url": "https://api.github.com/users/WalterBright", 38 | "html_url": "https://github.com/WalterBright", 39 | "followers_url": "https://api.github.com/users/WalterBright/followers", 40 | "following_url": "https://api.github.com/users/WalterBright/following{/other_user}", 41 | "gists_url": "https://api.github.com/users/WalterBright/gists{/gist_id}", 42 | "starred_url": "https://api.github.com/users/WalterBright/starred{/owner}{/repo}", 43 | "subscriptions_url": "https://api.github.com/users/WalterBright/subscriptions", 44 | "organizations_url": "https://api.github.com/users/WalterBright/orgs", 45 | "repos_url": "https://api.github.com/users/WalterBright/repos", 46 | "events_url": "https://api.github.com/users/WalterBright/events{/privacy}", 47 | "received_events_url": "https://api.github.com/users/WalterBright/received_events", 48 | "type": "User", 49 | "site_admin": false 50 | }, 51 | "event": "merged", 52 | "commit_id": "d2b804b4fbff6187d31a5c854b096d21ab09edc9", 53 | "commit_url": "https://api.github.com/repos/dlang/dmd/commits/d2b804b4fbff6187d31a5c854b096d21ab09edc9", 54 | "created_at": "2016-12-19T17:39:58Z" 55 | }, 56 | { 57 | "id": 898966018, 58 | "url": "https://api.github.com/repos/dlang/dmd/issues/events/898966018", 59 | "actor": { 60 | "login": "WalterBright", 61 | "id": 568298, 62 | "avatar_url": "https://avatars.githubusercontent.com/u/568298?v=3", 63 | "gravatar_id": "", 64 | "url": "https://api.github.com/users/WalterBright", 65 | "html_url": "https://github.com/WalterBright", 66 | "followers_url": "https://api.github.com/users/WalterBright/followers", 67 | "following_url": "https://api.github.com/users/WalterBright/following{/other_user}", 68 | "gists_url": "https://api.github.com/users/WalterBright/gists{/gist_id}", 69 | "starred_url": "https://api.github.com/users/WalterBright/starred{/owner}{/repo}", 70 | "subscriptions_url": "https://api.github.com/users/WalterBright/subscriptions", 71 | "organizations_url": "https://api.github.com/users/WalterBright/orgs", 72 | "repos_url": "https://api.github.com/users/WalterBright/repos", 73 | "events_url": "https://api.github.com/users/WalterBright/events{/privacy}", 74 | "received_events_url": "https://api.github.com/users/WalterBright/received_events", 75 | "type": "User", 76 | "site_admin": false 77 | }, 78 | "event": "closed", 79 | "commit_id": null, 80 | "commit_url": null, 81 | "created_at": "2016-12-19T17:39:58Z" 82 | } 83 | ] -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang_dmd_issues_6327_labels: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": 119492872, 4 | "url": "https://api.github.com/repos/dlang/phobos/labels/auto-merge", 5 | "name": "blocked", 6 | "color": "e11d21", 7 | "default": false 8 | } 9 | ] 10 | -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang_dmd_issues_6359_comments: -------------------------------------------------------------------------------- 1 | [ 2 | ] 3 | -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang_dmd_issues_6359_labels: -------------------------------------------------------------------------------- 1 | [ 2 | 3 | ] 4 | -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang_dmd_pulls_6327_reviews: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang_dmd_pulls_6328_commits: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "sha": "d6fc98058b637f9a558206847e6d7057ab9fb3de", 4 | "commit": { 5 | "author": { 6 | "name": "Walter Bright", 7 | "email": "walter@walterbright.com", 8 | "date": "2016-12-17T12:51:55Z" 9 | }, 10 | "committer": { 11 | "name": "Walter Bright", 12 | "email": "walter@walterbright.com", 13 | "date": "2016-12-17T12:51:55Z" 14 | }, 15 | "message": "FAKE COMMIT DO NOT TRUST", 16 | "tree": { 17 | "sha": "c858c3e56176141265dd77964480c324020668ff", 18 | "url": "https://api.github.com/repos/dlang/dmd/git/trees/c858c3e56176141265dd77964480c324020668ff" 19 | }, 20 | "url": "https://api.github.com/repos/dlang/dmd/git/commits/d6fc98058b637f9a558206847e6d7057ab9fb3de", 21 | "comment_count": 0 22 | }, 23 | "url": "https://api.github.com/repos/dlang/dmd/commits/d6fc98058b637f9a558206847e6d7057ab9fb3de", 24 | "html_url": "https://github.com/dlang/dmd/commit/d6fc98058b637f9a558206847e6d7057ab9fb3de", 25 | "comments_url": "https://api.github.com/repos/dlang/dmd/commits/d6fc98058b637f9a558206847e6d7057ab9fb3de/comments", 26 | "author": { 27 | "login": "WalterBright", 28 | "id": 568298, 29 | "avatar_url": "https://avatars.githubusercontent.com/u/568298?v=3", 30 | "gravatar_id": "", 31 | "url": "https://api.github.com/users/WalterBright", 32 | "html_url": "https://github.com/WalterBright", 33 | "followers_url": "https://api.github.com/users/WalterBright/followers", 34 | "following_url": "https://api.github.com/users/WalterBright/following{/other_user}", 35 | "gists_url": "https://api.github.com/users/WalterBright/gists{/gist_id}", 36 | "starred_url": "https://api.github.com/users/WalterBright/starred{/owner}{/repo}", 37 | "subscriptions_url": "https://api.github.com/users/WalterBright/subscriptions", 38 | "organizations_url": "https://api.github.com/users/WalterBright/orgs", 39 | "repos_url": "https://api.github.com/users/WalterBright/repos", 40 | "events_url": "https://api.github.com/users/WalterBright/events{/privacy}", 41 | "received_events_url": "https://api.github.com/users/WalterBright/received_events", 42 | "type": "User", 43 | "site_admin": false 44 | }, 45 | "committer": { 46 | "login": "WalterBright", 47 | "id": 568298, 48 | "avatar_url": "https://avatars.githubusercontent.com/u/568298?v=3", 49 | "gravatar_id": "", 50 | "url": "https://api.github.com/users/WalterBright", 51 | "html_url": "https://github.com/WalterBright", 52 | "followers_url": "https://api.github.com/users/WalterBright/followers", 53 | "following_url": "https://api.github.com/users/WalterBright/following{/other_user}", 54 | "gists_url": "https://api.github.com/users/WalterBright/gists{/gist_id}", 55 | "starred_url": "https://api.github.com/users/WalterBright/starred{/owner}{/repo}", 56 | "subscriptions_url": "https://api.github.com/users/WalterBright/subscriptions", 57 | "organizations_url": "https://api.github.com/users/WalterBright/orgs", 58 | "repos_url": "https://api.github.com/users/WalterBright/repos", 59 | "events_url": "https://api.github.com/users/WalterBright/events{/privacy}", 60 | "received_events_url": "https://api.github.com/users/WalterBright/received_events", 61 | "type": "User", 62 | "site_admin": false 63 | }, 64 | "parents": [ 65 | { 66 | "sha": "fbbfce8f6e0afb716ec96ba3dc2e82b3536cbaac", 67 | "url": "https://api.github.com/repos/dlang/dmd/commits/fbbfce8f6e0afb716ec96ba3dc2e82b3536cbaac", 68 | "html_url": "https://github.com/dlang/dmd/commit/fbbfce8f6e0afb716ec96ba3dc2e82b3536cbaac" 69 | } 70 | ] 71 | }, 72 | { 73 | "sha": "d6fc98058b637f9a558206847e6d7057ab9fb3de", 74 | "commit": { 75 | "author": { 76 | "name": "Walter Bright", 77 | "email": "walter@walterbright.com", 78 | "date": "2016-12-17T12:51:55Z" 79 | }, 80 | "committer": { 81 | "name": "Walter Bright", 82 | "email": "walter@walterbright.com", 83 | "date": "2016-12-17T12:51:55Z" 84 | }, 85 | "message": "taking address of local means it cannot be 'scope' later", 86 | "tree": { 87 | "sha": "c858c3e56176141265dd77964480c324020668ff", 88 | "url": "https://api.github.com/repos/dlang/dmd/git/trees/c858c3e56176141265dd77964480c324020668ff" 89 | }, 90 | "url": "https://api.github.com/repos/dlang/dmd/git/commits/d6fc98058b637f9a558206847e6d7057ab9fb3de", 91 | "comment_count": 0 92 | }, 93 | "url": "https://api.github.com/repos/dlang/dmd/commits/d6fc98058b637f9a558206847e6d7057ab9fb3de", 94 | "html_url": "https://github.com/dlang/dmd/commit/d6fc98058b637f9a558206847e6d7057ab9fb3de", 95 | "comments_url": "https://api.github.com/repos/dlang/dmd/commits/d6fc98058b637f9a558206847e6d7057ab9fb3de/comments", 96 | "author": { 97 | "login": "WalterBright", 98 | "id": 568298, 99 | "avatar_url": "https://avatars.githubusercontent.com/u/568298?v=3", 100 | "gravatar_id": "", 101 | "url": "https://api.github.com/users/WalterBright", 102 | "html_url": "https://github.com/WalterBright", 103 | "followers_url": "https://api.github.com/users/WalterBright/followers", 104 | "following_url": "https://api.github.com/users/WalterBright/following{/other_user}", 105 | "gists_url": "https://api.github.com/users/WalterBright/gists{/gist_id}", 106 | "starred_url": "https://api.github.com/users/WalterBright/starred{/owner}{/repo}", 107 | "subscriptions_url": "https://api.github.com/users/WalterBright/subscriptions", 108 | "organizations_url": "https://api.github.com/users/WalterBright/orgs", 109 | "repos_url": "https://api.github.com/users/WalterBright/repos", 110 | "events_url": "https://api.github.com/users/WalterBright/events{/privacy}", 111 | "received_events_url": "https://api.github.com/users/WalterBright/received_events", 112 | "type": "User", 113 | "site_admin": false 114 | }, 115 | "committer": { 116 | "login": "WalterBright", 117 | "id": 568298, 118 | "avatar_url": "https://avatars.githubusercontent.com/u/568298?v=3", 119 | "gravatar_id": "", 120 | "url": "https://api.github.com/users/WalterBright", 121 | "html_url": "https://github.com/WalterBright", 122 | "followers_url": "https://api.github.com/users/WalterBright/followers", 123 | "following_url": "https://api.github.com/users/WalterBright/following{/other_user}", 124 | "gists_url": "https://api.github.com/users/WalterBright/gists{/gist_id}", 125 | "starred_url": "https://api.github.com/users/WalterBright/starred{/owner}{/repo}", 126 | "subscriptions_url": "https://api.github.com/users/WalterBright/subscriptions", 127 | "organizations_url": "https://api.github.com/users/WalterBright/orgs", 128 | "repos_url": "https://api.github.com/users/WalterBright/repos", 129 | "events_url": "https://api.github.com/users/WalterBright/events{/privacy}", 130 | "received_events_url": "https://api.github.com/users/WalterBright/received_events", 131 | "type": "User", 132 | "site_admin": false 133 | }, 134 | "parents": [ 135 | { 136 | "sha": "fbbfce8f6e0afb716ec96ba3dc2e82b3536cbaac", 137 | "url": "https://api.github.com/repos/dlang/dmd/commits/fbbfce8f6e0afb716ec96ba3dc2e82b3536cbaac", 138 | "html_url": "https://github.com/dlang/dmd/commit/fbbfce8f6e0afb716ec96ba3dc2e82b3536cbaac" 139 | } 140 | ] 141 | } 142 | ] 143 | -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang_dmd_pulls_6328_reviews: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang_dmd_pulls_6359_commits: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "sha": "9fbce55814bdc8f78d6fead3243db657eafc4ec7", 4 | "commit": { 5 | "author": { 6 | "name": "Martin Nowak", 7 | "email": "code@dawg.eu", 8 | "date": "2016-12-24T17:58:32Z" 9 | }, 10 | "committer": { 11 | "name": "Martin Nowak", 12 | "email": "code@dawg.eu", 13 | "date": "2016-12-24T17:58:32Z" 14 | }, 15 | "message": "fix Bugzilla Issue 16794 - dmd not working on Ubuntu 16.10\n\n- enable PIC by default on amd64 linux (no significant overhead, full\n PIC/PIE support)\n- also see https://github.com/dlang/installer/pull/207", 16 | "tree": { 17 | "sha": "7fe104c3fc612cb2b527eab295f858d2e14796a3", 18 | "url": "https://api.github.com/repos/dlang/dmd/git/trees/7fe104c3fc612cb2b527eab295f858d2e14796a3" 19 | }, 20 | "url": "https://api.github.com/repos/dlang/dmd/git/commits/9fbce55814bdc8f78d6fead3243db657eafc4ec7", 21 | "comment_count": 0 22 | }, 23 | "url": "https://api.github.com/repos/dlang/dmd/commits/9fbce55814bdc8f78d6fead3243db657eafc4ec7", 24 | "html_url": "https://github.com/dlang/dmd/commit/9fbce55814bdc8f78d6fead3243db657eafc4ec7", 25 | "comments_url": "https://api.github.com/repos/dlang/dmd/commits/9fbce55814bdc8f78d6fead3243db657eafc4ec7/comments", 26 | "author": { 27 | "login": "MartinNowak", 28 | "id": 288976, 29 | "avatar_url": "https://avatars.githubusercontent.com/u/288976?v=3", 30 | "gravatar_id": "", 31 | "url": "https://api.github.com/users/MartinNowak", 32 | "html_url": "https://github.com/MartinNowak", 33 | "followers_url": "https://api.github.com/users/MartinNowak/followers", 34 | "following_url": "https://api.github.com/users/MartinNowak/following{/other_user}", 35 | "gists_url": "https://api.github.com/users/MartinNowak/gists{/gist_id}", 36 | "starred_url": "https://api.github.com/users/MartinNowak/starred{/owner}{/repo}", 37 | "subscriptions_url": "https://api.github.com/users/MartinNowak/subscriptions", 38 | "organizations_url": "https://api.github.com/users/MartinNowak/orgs", 39 | "repos_url": "https://api.github.com/users/MartinNowak/repos", 40 | "events_url": "https://api.github.com/users/MartinNowak/events{/privacy}", 41 | "received_events_url": "https://api.github.com/users/MartinNowak/received_events", 42 | "type": "User", 43 | "site_admin": false 44 | }, 45 | "committer": { 46 | "login": "MartinNowak", 47 | "id": 288976, 48 | "avatar_url": "https://avatars.githubusercontent.com/u/288976?v=3", 49 | "gravatar_id": "", 50 | "url": "https://api.github.com/users/MartinNowak", 51 | "html_url": "https://github.com/MartinNowak", 52 | "followers_url": "https://api.github.com/users/MartinNowak/followers", 53 | "following_url": "https://api.github.com/users/MartinNowak/following{/other_user}", 54 | "gists_url": "https://api.github.com/users/MartinNowak/gists{/gist_id}", 55 | "starred_url": "https://api.github.com/users/MartinNowak/starred{/owner}{/repo}", 56 | "subscriptions_url": "https://api.github.com/users/MartinNowak/subscriptions", 57 | "organizations_url": "https://api.github.com/users/MartinNowak/orgs", 58 | "repos_url": "https://api.github.com/users/MartinNowak/repos", 59 | "events_url": "https://api.github.com/users/MartinNowak/events{/privacy}", 60 | "received_events_url": "https://api.github.com/users/MartinNowak/received_events", 61 | "type": "User", 62 | "site_admin": false 63 | }, 64 | "parents": [ 65 | { 66 | "sha": "907e2eff63da664406b2250566738be5aafaf043", 67 | "url": "https://api.github.com/repos/dlang/dmd/commits/907e2eff63da664406b2250566738be5aafaf043", 68 | "html_url": "https://github.com/dlang/dmd/commit/907e2eff63da664406b2250566738be5aafaf043" 69 | } 70 | ] 71 | } 72 | ] -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang_dub_pulls_12345_commits: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "sha": "e064d5664f92c4b2f0866c08f6d0290ba66825ed", 4 | "commit": { 5 | "author": { 6 | "name": "Andrei Alexandrescu", 7 | "email": "andrei@erdani.com", 8 | "date": "2016-12-16T21:54:13Z" 9 | }, 10 | "committer": { 11 | "name": "Andrei Alexandrescu", 12 | "email": "andrei@erdani.com", 13 | "date": "2016-12-17T16:50:16Z" 14 | }, 15 | "message": "[DEMO][DONOTPULL] Converted imports to selective imports in std.array", 16 | "tree": { 17 | "sha": "b3106d04851a8f349b6cfdcfd7c9db663edbbfcb", 18 | "url": "https://api.github.com/repos/dlang/dub/git/trees/b3106d04851a8f349b6cfdcfd7c9db663edbbfcb" 19 | }, 20 | "url": "https://api.github.com/repos/dlang/dub/git/commits/e064d5664f92c4b2f0866c08f6d0290ba66825ed", 21 | "comment_count": 0 22 | }, 23 | "url": "https://api.github.com/repos/dlang/dub/commits/e064d5664f92c4b2f0866c08f6d0290ba66825ed", 24 | "html_url": "https://github.com/dlang/dub/commit/e064d5664f92c4b2f0866c08f6d0290ba66825ed", 25 | "comments_url": "https://api.github.com/repos/dlang/dub/commits/e064d5664f92c4b2f0866c08f6d0290ba66825ed/comments", 26 | "author": { 27 | "login": "andralex", 28 | "id": 566679, 29 | "avatar_url": "https://avatars.githubusercontent.com/u/566679?v=3", 30 | "gravatar_id": "", 31 | "url": "https://api.github.com/users/andralex", 32 | "html_url": "https://github.com/andralex", 33 | "followers_url": "https://api.github.com/users/andralex/followers", 34 | "following_url": "https://api.github.com/users/andralex/following{/other_user}", 35 | "gists_url": "https://api.github.com/users/andralex/gists{/gist_id}", 36 | "starred_url": "https://api.github.com/users/andralex/starred{/owner}{/repo}", 37 | "subscriptions_url": "https://api.github.com/users/andralex/subscriptions", 38 | "organizations_url": "https://api.github.com/users/andralex/orgs", 39 | "repos_url": "https://api.github.com/users/andralex/repos", 40 | "events_url": "https://api.github.com/users/andralex/events{/privacy}", 41 | "received_events_url": "https://api.github.com/users/andralex/received_events", 42 | "type": "User", 43 | "site_admin": false 44 | }, 45 | "committer": { 46 | "login": "andralex", 47 | "id": 566679, 48 | "avatar_url": "https://avatars.githubusercontent.com/u/566679?v=3", 49 | "gravatar_id": "", 50 | "url": "https://api.github.com/users/andralex", 51 | "html_url": "https://github.com/andralex", 52 | "followers_url": "https://api.github.com/users/andralex/followers", 53 | "following_url": "https://api.github.com/users/andralex/following{/other_user}", 54 | "gists_url": "https://api.github.com/users/andralex/gists{/gist_id}", 55 | "starred_url": "https://api.github.com/users/andralex/starred{/owner}{/repo}", 56 | "subscriptions_url": "https://api.github.com/users/andralex/subscriptions", 57 | "organizations_url": "https://api.github.com/users/andralex/orgs", 58 | "repos_url": "https://api.github.com/users/andralex/repos", 59 | "events_url": "https://api.github.com/users/andralex/events{/privacy}", 60 | "received_events_url": "https://api.github.com/users/andralex/received_events", 61 | "type": "User", 62 | "site_admin": false 63 | }, 64 | "parents": [ 65 | { 66 | "sha": "19445fc71e8aabdbd42f0ad8a571a57601a5ff39", 67 | "url": "https://api.github.com/repos/dlang/dub/commits/19445fc71e8aabdbd42f0ad8a571a57601a5ff39", 68 | "html_url": "https://github.com/dlang/dub/commit/19445fc71e8aabdbd42f0ad8a571a57601a5ff39" 69 | } 70 | ] 71 | } 72 | ] 73 | -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang_phobos_commits_5b8b90e1824cb90635719f6d3b1f6c195a95a47e_status: -------------------------------------------------------------------------------- 1 | { 2 | "state": "failure", 3 | "statuses": [ 4 | { 5 | "url": "https://api.github.com/repos/dlang/phobos/statuses/5b8b90e1824cb90635719f6d3b1f6c195a95a47e", 6 | "id": 375428776, 7 | "state": "pending", 8 | "description": "Pass: 7, In Progress: 1, Pending: 2", 9 | "target_url": "https://auto-tester.puremagic.com/pull-history.ghtml?projectid=1&repoid=3&pullid=3620", 10 | "context": "auto-tester", 11 | "created_at": "2015-11-28T14:08:20Z", 12 | "updated_at": "2015-11-28T14:08:20Z" 13 | }, 14 | { 15 | "url": "https://api.github.com/repos/dlang/phobos/statuses/5b8b90e1824cb90635719f6d3b1f6c195a95a47e", 16 | "id": 501347549, 17 | "state": "pending", 18 | "description": "Building documentation", 19 | "target_url": "http://dtest.thecybershadow.net/results/e625a94a01da76d252929b31ad8afc8a829d3a43/5b8b90e1824cb90635719f6d3b1f6c195a95a47e/", 20 | "context": "CyberShadow/DAutoTest", 21 | "created_at": "2016-03-26T23:31:10Z", 22 | "updated_at": "2016-03-26T23:31:10Z" 23 | }, 24 | { 25 | "url": "https://api.github.com/repos/dlang/phobos/statuses/5b8b90e1824cb90635719f6d3b1f6c195a95a47e", 26 | "id": 1437337456, 27 | "state": "error", 28 | "description": "This commit cannot be built", 29 | "target_url": "https://ci.dlang.io/job/dlang-org/job/phobos/job/PR-3620/5/display/redirect", 30 | "context": "continuous-integration/jenkins/pr-merge", 31 | "created_at": "2017-08-06T05:30:37Z", 32 | "updated_at": "2017-08-06T05:30:37Z" 33 | } 34 | ], 35 | "sha": "5b8b90e1824cb90635719f6d3b1f6c195a95a47e", 36 | "total_count": 3, 37 | "repository": { 38 | "id": 1257084, 39 | "name": "phobos", 40 | "full_name": "dlang/phobos", 41 | "owner": { 42 | "login": "dlang", 43 | "id": 565913, 44 | "avatar_url": "https://avatars3.githubusercontent.com/u/565913?v=4", 45 | "gravatar_id": "", 46 | "url": "https://api.github.com/users/dlang", 47 | "html_url": "https://github.com/dlang", 48 | "followers_url": "https://api.github.com/users/dlang/followers", 49 | "following_url": "https://api.github.com/users/dlang/following{/other_user}", 50 | "gists_url": "https://api.github.com/users/dlang/gists{/gist_id}", 51 | "starred_url": "https://api.github.com/users/dlang/starred{/owner}{/repo}", 52 | "subscriptions_url": "https://api.github.com/users/dlang/subscriptions", 53 | "organizations_url": "https://api.github.com/users/dlang/orgs", 54 | "repos_url": "https://api.github.com/users/dlang/repos", 55 | "events_url": "https://api.github.com/users/dlang/events{/privacy}", 56 | "received_events_url": "https://api.github.com/users/dlang/received_events", 57 | "type": "Organization", 58 | "site_admin": false 59 | }, 60 | "private": false, 61 | "html_url": "https://github.com/dlang/phobos", 62 | "description": "The standard library of the D programming language", 63 | "fork": false, 64 | "url": "https://api.github.com/repos/dlang/phobos", 65 | "forks_url": "https://api.github.com/repos/dlang/phobos/forks", 66 | "keys_url": "https://api.github.com/repos/dlang/phobos/keys{/key_id}", 67 | "collaborators_url": "https://api.github.com/repos/dlang/phobos/collaborators{/collaborator}", 68 | "teams_url": "https://api.github.com/repos/dlang/phobos/teams", 69 | "hooks_url": "https://api.github.com/repos/dlang/phobos/hooks", 70 | "issue_events_url": "https://api.github.com/repos/dlang/phobos/issues/events{/number}", 71 | "events_url": "https://api.github.com/repos/dlang/phobos/events", 72 | "assignees_url": "https://api.github.com/repos/dlang/phobos/assignees{/user}", 73 | "branches_url": "https://api.github.com/repos/dlang/phobos/branches{/branch}", 74 | "tags_url": "https://api.github.com/repos/dlang/phobos/tags", 75 | "blobs_url": "https://api.github.com/repos/dlang/phobos/git/blobs{/sha}", 76 | "git_tags_url": "https://api.github.com/repos/dlang/phobos/git/tags{/sha}", 77 | "git_refs_url": "https://api.github.com/repos/dlang/phobos/git/refs{/sha}", 78 | "trees_url": "https://api.github.com/repos/dlang/phobos/git/trees{/sha}", 79 | "statuses_url": "https://api.github.com/repos/dlang/phobos/statuses/{sha}", 80 | "languages_url": "https://api.github.com/repos/dlang/phobos/languages", 81 | "stargazers_url": "https://api.github.com/repos/dlang/phobos/stargazers", 82 | "contributors_url": "https://api.github.com/repos/dlang/phobos/contributors", 83 | "subscribers_url": "https://api.github.com/repos/dlang/phobos/subscribers", 84 | "subscription_url": "https://api.github.com/repos/dlang/phobos/subscription", 85 | "commits_url": "https://api.github.com/repos/dlang/phobos/commits{/sha}", 86 | "git_commits_url": "https://api.github.com/repos/dlang/phobos/git/commits{/sha}", 87 | "comments_url": "https://api.github.com/repos/dlang/phobos/comments{/number}", 88 | "issue_comment_url": "https://api.github.com/repos/dlang/phobos/issues/comments{/number}", 89 | "contents_url": "https://api.github.com/repos/dlang/phobos/contents/{+path}", 90 | "compare_url": "https://api.github.com/repos/dlang/phobos/compare/{base}...{head}", 91 | "merges_url": "https://api.github.com/repos/dlang/phobos/merges", 92 | "archive_url": "https://api.github.com/repos/dlang/phobos/{archive_format}{/ref}", 93 | "downloads_url": "https://api.github.com/repos/dlang/phobos/downloads", 94 | "issues_url": "https://api.github.com/repos/dlang/phobos/issues{/number}", 95 | "pulls_url": "https://api.github.com/repos/dlang/phobos/pulls{/number}", 96 | "milestones_url": "https://api.github.com/repos/dlang/phobos/milestones{/number}", 97 | "notifications_url": "https://api.github.com/repos/dlang/phobos/notifications{?since,all,participating}", 98 | "labels_url": "https://api.github.com/repos/dlang/phobos/labels{/name}", 99 | "releases_url": "https://api.github.com/repos/dlang/phobos/releases{/id}", 100 | "deployments_url": "https://api.github.com/repos/dlang/phobos/deployments" 101 | }, 102 | "commit_url": "https://api.github.com/repos/dlang/phobos/commits/5b8b90e1824cb90635719f6d3b1f6c195a95a47e", 103 | "url": "https://api.github.com/repos/dlang/phobos/commits/5b8b90e1824cb90635719f6d3b1f6c195a95a47e/status" 104 | } 105 | -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang_phobos_commits_a04acd6a2813fb344d3e47369cf7fd64523ece44_status: -------------------------------------------------------------------------------- 1 | { 2 | "state": "failure", 3 | "statuses": [ 4 | { 5 | "url": "https://api.github.com/repos/dlang/phobos/statuses/a04acd6a2813fb344d3e47369cf7fd64523ece44", 6 | "id": 124525297, 7 | "state": "pending", 8 | "description": "Pass: 8, In Progress: 1, Pending: 1", 9 | "target_url": "https://auto-tester.puremagic.com/pull-history.ghtml?projectid=1&repoid=3&pullid=2526", 10 | "context": "default", 11 | "created_at": "2014-11-05T01:07:42Z", 12 | "updated_at": "2014-11-05T01:07:42Z" 13 | }, 14 | { 15 | "url": "https://api.github.com/repos/dlang/phobos/statuses/a04acd6a2813fb344d3e47369cf7fd64523ece44", 16 | "id": 273239622, 17 | "state": "pending", 18 | "description": "Pass: 3, In Progress: 1, Pending: 6", 19 | "target_url": "https://auto-tester.puremagic.com/pull-history.ghtml?projectid=1&repoid=3&pullid=2526", 20 | "context": "auto-tester", 21 | "created_at": "2015-07-28T22:34:14Z", 22 | "updated_at": "2015-07-28T22:34:14Z" 23 | }, 24 | { 25 | "url": "https://api.github.com/repos/dlang/phobos/statuses/a04acd6a2813fb344d3e47369cf7fd64523ece44", 26 | "id": 466682029, 27 | "state": "pending", 28 | "description": "Building documentation", 29 | "target_url": "http://dtest.thecybershadow.net/results/debc1228130b04de02579766e48d46df3726e67b/a04acd6a2813fb344d3e47369cf7fd64523ece44/", 30 | "context": "CyberShadow/DAutoTest", 31 | "created_at": "2016-02-27T00:06:47Z", 32 | "updated_at": "2016-02-27T00:06:47Z" 33 | }, 34 | { 35 | "url": "https://api.github.com/repos/dlang/phobos/statuses/a04acd6a2813fb344d3e47369cf7fd64523ece44", 36 | "id": 1169527599, 37 | "state": "error", 38 | "description": "This commit cannot be built", 39 | "target_url": "https://ci.dlang.io/job/dlang-org/job/phobos/job/PR-2526/14/display/redirect", 40 | "context": "continuous-integration/jenkins/pr-merge", 41 | "created_at": "2017-04-21T14:13:38Z", 42 | "updated_at": "2017-04-21T14:13:38Z" 43 | } 44 | ], 45 | "sha": "a04acd6a2813fb344d3e47369cf7fd64523ece44", 46 | "total_count": 4, 47 | "repository": { 48 | "id": 1257084, 49 | "name": "phobos", 50 | "full_name": "dlang/phobos", 51 | "owner": { 52 | "login": "dlang", 53 | "id": 565913, 54 | "avatar_url": "https://avatars3.githubusercontent.com/u/565913?v=4", 55 | "gravatar_id": "", 56 | "url": "https://api.github.com/users/dlang", 57 | "html_url": "https://github.com/dlang", 58 | "followers_url": "https://api.github.com/users/dlang/followers", 59 | "following_url": "https://api.github.com/users/dlang/following{/other_user}", 60 | "gists_url": "https://api.github.com/users/dlang/gists{/gist_id}", 61 | "starred_url": "https://api.github.com/users/dlang/starred{/owner}{/repo}", 62 | "subscriptions_url": "https://api.github.com/users/dlang/subscriptions", 63 | "organizations_url": "https://api.github.com/users/dlang/orgs", 64 | "repos_url": "https://api.github.com/users/dlang/repos", 65 | "events_url": "https://api.github.com/users/dlang/events{/privacy}", 66 | "received_events_url": "https://api.github.com/users/dlang/received_events", 67 | "type": "Organization", 68 | "site_admin": false 69 | }, 70 | "private": false, 71 | "html_url": "https://github.com/dlang/phobos", 72 | "description": "The standard library of the D programming language", 73 | "fork": false, 74 | "url": "https://api.github.com/repos/dlang/phobos", 75 | "forks_url": "https://api.github.com/repos/dlang/phobos/forks", 76 | "keys_url": "https://api.github.com/repos/dlang/phobos/keys{/key_id}", 77 | "collaborators_url": "https://api.github.com/repos/dlang/phobos/collaborators{/collaborator}", 78 | "teams_url": "https://api.github.com/repos/dlang/phobos/teams", 79 | "hooks_url": "https://api.github.com/repos/dlang/phobos/hooks", 80 | "issue_events_url": "https://api.github.com/repos/dlang/phobos/issues/events{/number}", 81 | "events_url": "https://api.github.com/repos/dlang/phobos/events", 82 | "assignees_url": "https://api.github.com/repos/dlang/phobos/assignees{/user}", 83 | "branches_url": "https://api.github.com/repos/dlang/phobos/branches{/branch}", 84 | "tags_url": "https://api.github.com/repos/dlang/phobos/tags", 85 | "blobs_url": "https://api.github.com/repos/dlang/phobos/git/blobs{/sha}", 86 | "git_tags_url": "https://api.github.com/repos/dlang/phobos/git/tags{/sha}", 87 | "git_refs_url": "https://api.github.com/repos/dlang/phobos/git/refs{/sha}", 88 | "trees_url": "https://api.github.com/repos/dlang/phobos/git/trees{/sha}", 89 | "statuses_url": "https://api.github.com/repos/dlang/phobos/statuses/{sha}", 90 | "languages_url": "https://api.github.com/repos/dlang/phobos/languages", 91 | "stargazers_url": "https://api.github.com/repos/dlang/phobos/stargazers", 92 | "contributors_url": "https://api.github.com/repos/dlang/phobos/contributors", 93 | "subscribers_url": "https://api.github.com/repos/dlang/phobos/subscribers", 94 | "subscription_url": "https://api.github.com/repos/dlang/phobos/subscription", 95 | "commits_url": "https://api.github.com/repos/dlang/phobos/commits{/sha}", 96 | "git_commits_url": "https://api.github.com/repos/dlang/phobos/git/commits{/sha}", 97 | "comments_url": "https://api.github.com/repos/dlang/phobos/comments{/number}", 98 | "issue_comment_url": "https://api.github.com/repos/dlang/phobos/issues/comments{/number}", 99 | "contents_url": "https://api.github.com/repos/dlang/phobos/contents/{+path}", 100 | "compare_url": "https://api.github.com/repos/dlang/phobos/compare/{base}...{head}", 101 | "merges_url": "https://api.github.com/repos/dlang/phobos/merges", 102 | "archive_url": "https://api.github.com/repos/dlang/phobos/{archive_format}{/ref}", 103 | "downloads_url": "https://api.github.com/repos/dlang/phobos/downloads", 104 | "issues_url": "https://api.github.com/repos/dlang/phobos/issues{/number}", 105 | "pulls_url": "https://api.github.com/repos/dlang/phobos/pulls{/number}", 106 | "milestones_url": "https://api.github.com/repos/dlang/phobos/milestones{/number}", 107 | "notifications_url": "https://api.github.com/repos/dlang/phobos/notifications{?since,all,participating}", 108 | "labels_url": "https://api.github.com/repos/dlang/phobos/labels{/name}", 109 | "releases_url": "https://api.github.com/repos/dlang/phobos/releases{/id}", 110 | "deployments_url": "https://api.github.com/repos/dlang/phobos/deployments" 111 | }, 112 | "commit_url": "https://api.github.com/repos/dlang/phobos/commits/a04acd6a2813fb344d3e47369cf7fd64523ece44", 113 | "url": "https://api.github.com/repos/dlang/phobos/commits/a04acd6a2813fb344d3e47369cf7fd64523ece44/status" 114 | } 115 | -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang_phobos_commits_b7bf452ca52c2a529e79a830eee97310233e3a9c_status: -------------------------------------------------------------------------------- 1 | { 2 | "state": "failure", 3 | "statuses": [ 4 | { 5 | "url": "https://api.github.com/repos/dlang/phobos/statuses/b7bf452ca52c2a529e79a830eee97310233e3a9c", 6 | "id": 484411227, 7 | "state": "error", 8 | "description": "Merge failed", 9 | "target_url": "http://dtest.thecybershadow.net/results/a50cf0a25a2d7f98236612575424d2817254bf15/b7bf452ca52c2a529e79a830eee97310233e3a9c/", 10 | "context": "CyberShadow/DAutoTest", 11 | "created_at": "2016-03-12T18:48:01Z", 12 | "updated_at": "2016-03-12T18:48:01Z" 13 | }, 14 | { 15 | "url": "https://api.github.com/repos/dlang/phobos/statuses/b7bf452ca52c2a529e79a830eee97310233e3a9c", 16 | "id": 728186443, 17 | "state": "failure", 18 | "description": "Fail: 7, Pending: 3", 19 | "target_url": "https://auto-tester.puremagic.com/pull-history.ghtml?projectid=1&repoid=3&pullid=3534", 20 | "context": "auto-tester", 21 | "created_at": "2016-08-31T11:01:45Z", 22 | "updated_at": "2016-08-31T11:01:45Z" 23 | }, 24 | { 25 | "url": "https://api.github.com/repos/dlang/phobos/statuses/b7bf452ca52c2a529e79a830eee97310233e3a9c", 26 | "id": 1169409310, 27 | "state": "error", 28 | "description": "This commit cannot be built", 29 | "target_url": "https://ci.dlang.io/job/dlang-org/job/phobos/job/PR-3534/4/display/redirect", 30 | "context": "continuous-integration/jenkins/pr-merge", 31 | "created_at": "2017-04-21T13:29:52Z", 32 | "updated_at": "2017-04-21T13:29:52Z" 33 | } 34 | ], 35 | "sha": "b7bf452ca52c2a529e79a830eee97310233e3a9c", 36 | "total_count": 3, 37 | "repository": { 38 | "id": 1257084, 39 | "name": "phobos", 40 | "full_name": "dlang/phobos", 41 | "owner": { 42 | "login": "dlang", 43 | "id": 565913, 44 | "avatar_url": "https://avatars3.githubusercontent.com/u/565913?v=4", 45 | "gravatar_id": "", 46 | "url": "https://api.github.com/users/dlang", 47 | "html_url": "https://github.com/dlang", 48 | "followers_url": "https://api.github.com/users/dlang/followers", 49 | "following_url": "https://api.github.com/users/dlang/following{/other_user}", 50 | "gists_url": "https://api.github.com/users/dlang/gists{/gist_id}", 51 | "starred_url": "https://api.github.com/users/dlang/starred{/owner}{/repo}", 52 | "subscriptions_url": "https://api.github.com/users/dlang/subscriptions", 53 | "organizations_url": "https://api.github.com/users/dlang/orgs", 54 | "repos_url": "https://api.github.com/users/dlang/repos", 55 | "events_url": "https://api.github.com/users/dlang/events{/privacy}", 56 | "received_events_url": "https://api.github.com/users/dlang/received_events", 57 | "type": "Organization", 58 | "site_admin": false 59 | }, 60 | "private": false, 61 | "html_url": "https://github.com/dlang/phobos", 62 | "description": "The standard library of the D programming language", 63 | "fork": false, 64 | "url": "https://api.github.com/repos/dlang/phobos", 65 | "forks_url": "https://api.github.com/repos/dlang/phobos/forks", 66 | "keys_url": "https://api.github.com/repos/dlang/phobos/keys{/key_id}", 67 | "collaborators_url": "https://api.github.com/repos/dlang/phobos/collaborators{/collaborator}", 68 | "teams_url": "https://api.github.com/repos/dlang/phobos/teams", 69 | "hooks_url": "https://api.github.com/repos/dlang/phobos/hooks", 70 | "issue_events_url": "https://api.github.com/repos/dlang/phobos/issues/events{/number}", 71 | "events_url": "https://api.github.com/repos/dlang/phobos/events", 72 | "assignees_url": "https://api.github.com/repos/dlang/phobos/assignees{/user}", 73 | "branches_url": "https://api.github.com/repos/dlang/phobos/branches{/branch}", 74 | "tags_url": "https://api.github.com/repos/dlang/phobos/tags", 75 | "blobs_url": "https://api.github.com/repos/dlang/phobos/git/blobs{/sha}", 76 | "git_tags_url": "https://api.github.com/repos/dlang/phobos/git/tags{/sha}", 77 | "git_refs_url": "https://api.github.com/repos/dlang/phobos/git/refs{/sha}", 78 | "trees_url": "https://api.github.com/repos/dlang/phobos/git/trees{/sha}", 79 | "statuses_url": "https://api.github.com/repos/dlang/phobos/statuses/{sha}", 80 | "languages_url": "https://api.github.com/repos/dlang/phobos/languages", 81 | "stargazers_url": "https://api.github.com/repos/dlang/phobos/stargazers", 82 | "contributors_url": "https://api.github.com/repos/dlang/phobos/contributors", 83 | "subscribers_url": "https://api.github.com/repos/dlang/phobos/subscribers", 84 | "subscription_url": "https://api.github.com/repos/dlang/phobos/subscription", 85 | "commits_url": "https://api.github.com/repos/dlang/phobos/commits{/sha}", 86 | "git_commits_url": "https://api.github.com/repos/dlang/phobos/git/commits{/sha}", 87 | "comments_url": "https://api.github.com/repos/dlang/phobos/comments{/number}", 88 | "issue_comment_url": "https://api.github.com/repos/dlang/phobos/issues/comments{/number}", 89 | "contents_url": "https://api.github.com/repos/dlang/phobos/contents/{+path}", 90 | "compare_url": "https://api.github.com/repos/dlang/phobos/compare/{base}...{head}", 91 | "merges_url": "https://api.github.com/repos/dlang/phobos/merges", 92 | "archive_url": "https://api.github.com/repos/dlang/phobos/{archive_format}{/ref}", 93 | "downloads_url": "https://api.github.com/repos/dlang/phobos/downloads", 94 | "issues_url": "https://api.github.com/repos/dlang/phobos/issues{/number}", 95 | "pulls_url": "https://api.github.com/repos/dlang/phobos/pulls{/number}", 96 | "milestones_url": "https://api.github.com/repos/dlang/phobos/milestones{/number}", 97 | "notifications_url": "https://api.github.com/repos/dlang/phobos/notifications{?since,all,participating}", 98 | "labels_url": "https://api.github.com/repos/dlang/phobos/labels{/name}", 99 | "releases_url": "https://api.github.com/repos/dlang/phobos/releases{/id}", 100 | "deployments_url": "https://api.github.com/repos/dlang/phobos/deployments" 101 | }, 102 | "commit_url": "https://api.github.com/repos/dlang/phobos/commits/b7bf452ca52c2a529e79a830eee97310233e3a9c", 103 | "url": "https://api.github.com/repos/dlang/phobos/commits/b7bf452ca52c2a529e79a830eee97310233e3a9c/status" 104 | } 105 | -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang_phobos_commits_c4224ad203f5497569452ff05284124eb7030602_status: -------------------------------------------------------------------------------- 1 | { 2 | "state": "failure", 3 | "statuses": [ 4 | { 5 | "url": "https://api.github.com/repos/dlang/phobos/statuses/c4224ad203f5497569452ff05284124eb7030602", 6 | "id": 634076202, 7 | "state": "success", 8 | "description": "The Travis CI build passed", 9 | "target_url": "https://travis-ci.org/dlang/phobos/builds/142033548", 10 | "context": "continuous-integration/travis-ci/pr", 11 | "created_at": "2016-07-03T17:26:31Z", 12 | "updated_at": "2016-07-03T17:26:31Z" 13 | }, 14 | { 15 | "url": "https://api.github.com/repos/dlang/phobos/statuses/c4224ad203f5497569452ff05284124eb7030602", 16 | "id": 1091428402, 17 | "state": "failure", 18 | "description": "Fail: 1, Pending: 9", 19 | "target_url": "https://auto-tester.puremagic.com/pull-history.ghtml?projectid=1&repoid=3&pullid=4551", 20 | "context": "auto-tester", 21 | "created_at": "2017-03-19T12:38:56Z", 22 | "updated_at": "2017-03-19T12:38:56Z" 23 | }, 24 | { 25 | "url": "https://api.github.com/repos/dlang/phobos/statuses/c4224ad203f5497569452ff05284124eb7030602", 26 | "id": 1169406386, 27 | "state": "error", 28 | "description": "This commit cannot be built", 29 | "target_url": "https://ci.dlang.io/job/dlang-org/job/phobos/job/PR-4551/5/display/redirect", 30 | "context": "continuous-integration/jenkins/pr-merge", 31 | "created_at": "2017-04-21T13:28:53Z", 32 | "updated_at": "2017-04-21T13:28:53Z" 33 | }, 34 | { 35 | "url": "https://api.github.com/repos/dlang/phobos/statuses/c4224ad203f5497569452ff05284124eb7030602", 36 | "id": 1339826394, 37 | "state": "error", 38 | "description": "Merge failed", 39 | "target_url": "http://dtest.dlang.io/results/63c920e1eb1f1f184784f838badb8b48990afb0f/c4224ad203f5497569452ff05284124eb7030602/", 40 | "context": "CyberShadow/DAutoTest", 41 | "created_at": "2017-06-29T09:41:21Z", 42 | "updated_at": "2017-06-29T09:41:21Z" 43 | } 44 | ], 45 | "sha": "c4224ad203f5497569452ff05284124eb7030602", 46 | "total_count": 4, 47 | "repository": { 48 | "id": 1257084, 49 | "name": "phobos", 50 | "full_name": "dlang/phobos", 51 | "owner": { 52 | "login": "dlang", 53 | "id": 565913, 54 | "avatar_url": "https://avatars3.githubusercontent.com/u/565913?v=4", 55 | "gravatar_id": "", 56 | "url": "https://api.github.com/users/dlang", 57 | "html_url": "https://github.com/dlang", 58 | "followers_url": "https://api.github.com/users/dlang/followers", 59 | "following_url": "https://api.github.com/users/dlang/following{/other_user}", 60 | "gists_url": "https://api.github.com/users/dlang/gists{/gist_id}", 61 | "starred_url": "https://api.github.com/users/dlang/starred{/owner}{/repo}", 62 | "subscriptions_url": "https://api.github.com/users/dlang/subscriptions", 63 | "organizations_url": "https://api.github.com/users/dlang/orgs", 64 | "repos_url": "https://api.github.com/users/dlang/repos", 65 | "events_url": "https://api.github.com/users/dlang/events{/privacy}", 66 | "received_events_url": "https://api.github.com/users/dlang/received_events", 67 | "type": "Organization", 68 | "site_admin": false 69 | }, 70 | "private": false, 71 | "html_url": "https://github.com/dlang/phobos", 72 | "description": "The standard library of the D programming language", 73 | "fork": false, 74 | "url": "https://api.github.com/repos/dlang/phobos", 75 | "forks_url": "https://api.github.com/repos/dlang/phobos/forks", 76 | "keys_url": "https://api.github.com/repos/dlang/phobos/keys{/key_id}", 77 | "collaborators_url": "https://api.github.com/repos/dlang/phobos/collaborators{/collaborator}", 78 | "teams_url": "https://api.github.com/repos/dlang/phobos/teams", 79 | "hooks_url": "https://api.github.com/repos/dlang/phobos/hooks", 80 | "issue_events_url": "https://api.github.com/repos/dlang/phobos/issues/events{/number}", 81 | "events_url": "https://api.github.com/repos/dlang/phobos/events", 82 | "assignees_url": "https://api.github.com/repos/dlang/phobos/assignees{/user}", 83 | "branches_url": "https://api.github.com/repos/dlang/phobos/branches{/branch}", 84 | "tags_url": "https://api.github.com/repos/dlang/phobos/tags", 85 | "blobs_url": "https://api.github.com/repos/dlang/phobos/git/blobs{/sha}", 86 | "git_tags_url": "https://api.github.com/repos/dlang/phobos/git/tags{/sha}", 87 | "git_refs_url": "https://api.github.com/repos/dlang/phobos/git/refs{/sha}", 88 | "trees_url": "https://api.github.com/repos/dlang/phobos/git/trees{/sha}", 89 | "statuses_url": "https://api.github.com/repos/dlang/phobos/statuses/{sha}", 90 | "languages_url": "https://api.github.com/repos/dlang/phobos/languages", 91 | "stargazers_url": "https://api.github.com/repos/dlang/phobos/stargazers", 92 | "contributors_url": "https://api.github.com/repos/dlang/phobos/contributors", 93 | "subscribers_url": "https://api.github.com/repos/dlang/phobos/subscribers", 94 | "subscription_url": "https://api.github.com/repos/dlang/phobos/subscription", 95 | "commits_url": "https://api.github.com/repos/dlang/phobos/commits{/sha}", 96 | "git_commits_url": "https://api.github.com/repos/dlang/phobos/git/commits{/sha}", 97 | "comments_url": "https://api.github.com/repos/dlang/phobos/comments{/number}", 98 | "issue_comment_url": "https://api.github.com/repos/dlang/phobos/issues/comments{/number}", 99 | "contents_url": "https://api.github.com/repos/dlang/phobos/contents/{+path}", 100 | "compare_url": "https://api.github.com/repos/dlang/phobos/compare/{base}...{head}", 101 | "merges_url": "https://api.github.com/repos/dlang/phobos/merges", 102 | "archive_url": "https://api.github.com/repos/dlang/phobos/{archive_format}{/ref}", 103 | "downloads_url": "https://api.github.com/repos/dlang/phobos/downloads", 104 | "issues_url": "https://api.github.com/repos/dlang/phobos/issues{/number}", 105 | "pulls_url": "https://api.github.com/repos/dlang/phobos/pulls{/number}", 106 | "milestones_url": "https://api.github.com/repos/dlang/phobos/milestones{/number}", 107 | "notifications_url": "https://api.github.com/repos/dlang/phobos/notifications{?since,all,participating}", 108 | "labels_url": "https://api.github.com/repos/dlang/phobos/labels{/name}", 109 | "releases_url": "https://api.github.com/repos/dlang/phobos/releases{/id}", 110 | "deployments_url": "https://api.github.com/repos/dlang/phobos/deployments" 111 | }, 112 | "commit_url": "https://api.github.com/repos/dlang/phobos/commits/c4224ad203f5497569452ff05284124eb7030602", 113 | "url": "https://api.github.com/repos/dlang/phobos/commits/c4224ad203f5497569452ff05284124eb7030602/status" 114 | } 115 | -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang_phobos_commits_d2c7d3761b73405ee39da3fd7fe5030dee35a39e_status: -------------------------------------------------------------------------------- 1 | { 2 | "state": "success", 3 | "statuses": [ 4 | { 5 | "url": "https://api.github.com/repos/dlang/phobos/statuses/d2c7d3761b73405ee39da3fd7fe5030dee35a39e", 6 | "id": 915017858, 7 | "state": "success", 8 | "description": "Your tests passed on CircleCI!", 9 | "target_url": "https://circleci.com/gh/dlang/phobos/1010?utm_campaign=vcs-integration-link&utm_medium=referral&utm_source=github-build-link", 10 | "context": "ci/circleci", 11 | "created_at": "2016-12-16T09:25:11Z", 12 | "updated_at": "2016-12-16T09:25:11Z" 13 | }, 14 | { 15 | "url": "https://api.github.com/repos/dlang/phobos/statuses/d2c7d3761b73405ee39da3fd7fe5030dee35a39e", 16 | "id": 915018626, 17 | "state": "success", 18 | "description": "100% of diff hit (target 89.397%)", 19 | "target_url": "https://codecov.io/gh/dlang/phobos/compare/72af0090db27e438cfbcd3d1b9a0343a71079d42...d2c7d3761b73405ee39da3fd7fe5030dee35a39e", 20 | "context": "codecov/patch", 21 | "created_at": "2016-12-16T09:25:42Z", 22 | "updated_at": "2016-12-16T09:25:42Z" 23 | }, 24 | { 25 | "url": "https://api.github.com/repos/dlang/phobos/statuses/d2c7d3761b73405ee39da3fd7fe5030dee35a39e", 26 | "id": 915018658, 27 | "state": "success", 28 | "description": "89.411% (+0.013%) compared to 72af009", 29 | "target_url": "https://codecov.io/gh/dlang/phobos/compare/72af0090db27e438cfbcd3d1b9a0343a71079d42...d2c7d3761b73405ee39da3fd7fe5030dee35a39e", 30 | "context": "codecov/project", 31 | "created_at": "2016-12-16T09:25:43Z", 32 | "updated_at": "2016-12-16T09:25:43Z" 33 | }, 34 | { 35 | "url": "https://api.github.com/repos/dlang/phobos/statuses/d2c7d3761b73405ee39da3fd7fe5030dee35a39e", 36 | "id": 915530379, 37 | "state": "success", 38 | "description": "Documentation OK (no changes)", 39 | "target_url": "http://dtest.thecybershadow.net/results/9273e954e7891fbece18eb27cefd375fd0694b8a/d2c7d3761b73405ee39da3fd7fe5030dee35a39e/", 40 | "context": "CyberShadow/DAutoTest", 41 | "created_at": "2016-12-16T14:59:13Z", 42 | "updated_at": "2016-12-16T14:59:13Z" 43 | }, 44 | { 45 | "url": "https://api.github.com/repos/dlang/phobos/statuses/d2c7d3761b73405ee39da3fd7fe5030dee35a39e", 46 | "id": 915565419, 47 | "state": "success", 48 | "description": "Pass: 10", 49 | "target_url": "https://auto-tester.puremagic.com/pull-history.ghtml?projectid=1&repoid=3&pullid=4921", 50 | "context": "auto-tester", 51 | "created_at": "2016-12-16T15:16:46Z", 52 | "updated_at": "2016-12-16T15:16:46Z" 53 | } 54 | ], 55 | "sha": "d2c7d3761b73405ee39da3fd7fe5030dee35a39e", 56 | "total_count": 5, 57 | "repository": { 58 | "id": 1257084, 59 | "name": "phobos", 60 | "full_name": "dlang/phobos", 61 | "owner": { 62 | "login": "dlang", 63 | "id": 565913, 64 | "avatar_url": "https://avatars3.githubusercontent.com/u/565913?v=4", 65 | "gravatar_id": "", 66 | "url": "https://api.github.com/users/dlang", 67 | "html_url": "https://github.com/dlang", 68 | "followers_url": "https://api.github.com/users/dlang/followers", 69 | "following_url": "https://api.github.com/users/dlang/following{/other_user}", 70 | "gists_url": "https://api.github.com/users/dlang/gists{/gist_id}", 71 | "starred_url": "https://api.github.com/users/dlang/starred{/owner}{/repo}", 72 | "subscriptions_url": "https://api.github.com/users/dlang/subscriptions", 73 | "organizations_url": "https://api.github.com/users/dlang/orgs", 74 | "repos_url": "https://api.github.com/users/dlang/repos", 75 | "events_url": "https://api.github.com/users/dlang/events{/privacy}", 76 | "received_events_url": "https://api.github.com/users/dlang/received_events", 77 | "type": "Organization", 78 | "site_admin": false 79 | }, 80 | "private": false, 81 | "html_url": "https://github.com/dlang/phobos", 82 | "description": "The standard library of the D programming language", 83 | "fork": false, 84 | "url": "https://api.github.com/repos/dlang/phobos", 85 | "forks_url": "https://api.github.com/repos/dlang/phobos/forks", 86 | "keys_url": "https://api.github.com/repos/dlang/phobos/keys{/key_id}", 87 | "collaborators_url": "https://api.github.com/repos/dlang/phobos/collaborators{/collaborator}", 88 | "teams_url": "https://api.github.com/repos/dlang/phobos/teams", 89 | "hooks_url": "https://api.github.com/repos/dlang/phobos/hooks", 90 | "issue_events_url": "https://api.github.com/repos/dlang/phobos/issues/events{/number}", 91 | "events_url": "https://api.github.com/repos/dlang/phobos/events", 92 | "assignees_url": "https://api.github.com/repos/dlang/phobos/assignees{/user}", 93 | "branches_url": "https://api.github.com/repos/dlang/phobos/branches{/branch}", 94 | "tags_url": "https://api.github.com/repos/dlang/phobos/tags", 95 | "blobs_url": "https://api.github.com/repos/dlang/phobos/git/blobs{/sha}", 96 | "git_tags_url": "https://api.github.com/repos/dlang/phobos/git/tags{/sha}", 97 | "git_refs_url": "https://api.github.com/repos/dlang/phobos/git/refs{/sha}", 98 | "trees_url": "https://api.github.com/repos/dlang/phobos/git/trees{/sha}", 99 | "statuses_url": "https://api.github.com/repos/dlang/phobos/statuses/{sha}", 100 | "languages_url": "https://api.github.com/repos/dlang/phobos/languages", 101 | "stargazers_url": "https://api.github.com/repos/dlang/phobos/stargazers", 102 | "contributors_url": "https://api.github.com/repos/dlang/phobos/contributors", 103 | "subscribers_url": "https://api.github.com/repos/dlang/phobos/subscribers", 104 | "subscription_url": "https://api.github.com/repos/dlang/phobos/subscription", 105 | "commits_url": "https://api.github.com/repos/dlang/phobos/commits{/sha}", 106 | "git_commits_url": "https://api.github.com/repos/dlang/phobos/git/commits{/sha}", 107 | "comments_url": "https://api.github.com/repos/dlang/phobos/comments{/number}", 108 | "issue_comment_url": "https://api.github.com/repos/dlang/phobos/issues/comments{/number}", 109 | "contents_url": "https://api.github.com/repos/dlang/phobos/contents/{+path}", 110 | "compare_url": "https://api.github.com/repos/dlang/phobos/compare/{base}...{head}", 111 | "merges_url": "https://api.github.com/repos/dlang/phobos/merges", 112 | "archive_url": "https://api.github.com/repos/dlang/phobos/{archive_format}{/ref}", 113 | "downloads_url": "https://api.github.com/repos/dlang/phobos/downloads", 114 | "issues_url": "https://api.github.com/repos/dlang/phobos/issues{/number}", 115 | "pulls_url": "https://api.github.com/repos/dlang/phobos/pulls{/number}", 116 | "milestones_url": "https://api.github.com/repos/dlang/phobos/milestones{/number}", 117 | "notifications_url": "https://api.github.com/repos/dlang/phobos/notifications{?since,all,participating}", 118 | "labels_url": "https://api.github.com/repos/dlang/phobos/labels{/name}", 119 | "releases_url": "https://api.github.com/repos/dlang/phobos/releases{/id}", 120 | "deployments_url": "https://api.github.com/repos/dlang/phobos/deployments" 121 | }, 122 | "commit_url": "https://api.github.com/repos/dlang/phobos/commits/d2c7d3761b73405ee39da3fd7fe5030dee35a39e", 123 | "url": "https://api.github.com/repos/dlang/phobos/commits/d2c7d3761b73405ee39da3fd7fe5030dee35a39e/status" 124 | } 125 | -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang_phobos_issues_4551_comments: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "url": "https://api.github.com/repos/dlang/phobos/issues/comments/230164534", 4 | "html_url": "https://github.com/dlang/phobos/pull/4551#issuecomment-230164534", 5 | "issue_url": "https://api.github.com/repos/dlang/phobos/issues/4551", 6 | "id": 230164534, 7 | "user": { 8 | "login": "dlang-bot", 9 | "id": 15698993, 10 | "avatar_url": "https://avatars0.githubusercontent.com/u/15698993?v=3", 11 | "gravatar_id": "", 12 | "url": "https://api.github.com/users/dlang-bot", 13 | "html_url": "https://github.com/dlang-bot", 14 | "followers_url": "https://api.github.com/users/dlang-bot/followers", 15 | "following_url": "https://api.github.com/users/dlang-bot/following{/other_user}", 16 | "gists_url": "https://api.github.com/users/dlang-bot/gists{/gist_id}", 17 | "starred_url": "https://api.github.com/users/dlang-bot/starred{/owner}{/repo}", 18 | "subscriptions_url": "https://api.github.com/users/dlang-bot/subscriptions", 19 | "organizations_url": "https://api.github.com/users/dlang-bot/orgs", 20 | "repos_url": "https://api.github.com/users/dlang-bot/repos", 21 | "events_url": "https://api.github.com/users/dlang-bot/events{/privacy}", 22 | "received_events_url": "https://api.github.com/users/dlang-bot/received_events", 23 | "type": "User", 24 | "site_admin": false 25 | }, 26 | "created_at": "2016-07-03T17:23:31Z", 27 | "updated_at": "2016-07-03T17:23:31Z", 28 | "body": "| Fix | Bugzilla | Description |\n| --- | --- | --- |\n| ✗ | [16230](https://issues.dlang.org/show_bug.cgi?id=16230) | core.atomic.atomicLoad removes shared from aggregate types too eagerly |\n" 29 | } 30 | ] 31 | -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang_phobos_issues_4921_labels: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": 119492872, 4 | "url": "https://api.github.com/repos/dlang/phobos/labels/blocked", 5 | "name": "blocked", 6 | "color": "e11d21", 7 | "default": false 8 | } 9 | ] 10 | -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang_phobos_issues_5114_labels: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": 502721264, 4 | "url": "https://api.github.com/repos/dlang/phobos/labels/auto-merge", 5 | "name": "auto-merge", 6 | "color": "d3d3d3", 7 | "default": false 8 | }, 9 | { 10 | "id": 416188102, 11 | "url": "https://api.github.com/repos/dlang/phobos/labels/Bug%20Fix", 12 | "name": "Bug Fix", 13 | "color": "0052cc", 14 | "default": false 15 | } 16 | ] 17 | -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang_phobos_issues_5519_labels: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": 502721264, 4 | "url": "https://api.github.com/repos/dlang/phobos/labels/auto-merge", 5 | "name": "auto-merge", 6 | "color": "d3d3d3", 7 | "default": false 8 | }, 9 | { 10 | "id": 416188102, 11 | "url": "https://api.github.com/repos/dlang/phobos/labels/Bug%20Fix", 12 | "name": "Bug Fix", 13 | "color": "0052cc", 14 | "default": false 15 | } 16 | ] 17 | -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang_phobos_pulls_2526_comments: -------------------------------------------------------------------------------- 1 | [ 2 | 3 | ] 4 | -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang_phobos_pulls_3620_comments: -------------------------------------------------------------------------------- 1 | [ 2 | 3 | ] 4 | -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang_phobos_pulls_4921_reviews: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang_phobos_pulls_4963_commits: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "sha": "e064d5664f92c4b2f0866c08f6d0290ba66825ed", 4 | "commit": { 5 | "author": { 6 | "name": "Andrei Alexandrescu", 7 | "email": "andrei@erdani.com", 8 | "date": "2016-12-16T21:54:13Z" 9 | }, 10 | "committer": { 11 | "name": "Andrei Alexandrescu", 12 | "email": "andrei@erdani.com", 13 | "date": "2016-12-17T16:50:16Z" 14 | }, 15 | "message": "[DEMO][DONOTPULL] Converted imports to selective imports in std.array", 16 | "tree": { 17 | "sha": "b3106d04851a8f349b6cfdcfd7c9db663edbbfcb", 18 | "url": "https://api.github.com/repos/dlang/phobos/git/trees/b3106d04851a8f349b6cfdcfd7c9db663edbbfcb" 19 | }, 20 | "url": "https://api.github.com/repos/dlang/phobos/git/commits/e064d5664f92c4b2f0866c08f6d0290ba66825ed", 21 | "comment_count": 0 22 | }, 23 | "url": "https://api.github.com/repos/dlang/phobos/commits/e064d5664f92c4b2f0866c08f6d0290ba66825ed", 24 | "html_url": "https://github.com/dlang/phobos/commit/e064d5664f92c4b2f0866c08f6d0290ba66825ed", 25 | "comments_url": "https://api.github.com/repos/dlang/phobos/commits/e064d5664f92c4b2f0866c08f6d0290ba66825ed/comments", 26 | "author": { 27 | "login": "andralex", 28 | "id": 566679, 29 | "avatar_url": "https://avatars.githubusercontent.com/u/566679?v=3", 30 | "gravatar_id": "", 31 | "url": "https://api.github.com/users/andralex", 32 | "html_url": "https://github.com/andralex", 33 | "followers_url": "https://api.github.com/users/andralex/followers", 34 | "following_url": "https://api.github.com/users/andralex/following{/other_user}", 35 | "gists_url": "https://api.github.com/users/andralex/gists{/gist_id}", 36 | "starred_url": "https://api.github.com/users/andralex/starred{/owner}{/repo}", 37 | "subscriptions_url": "https://api.github.com/users/andralex/subscriptions", 38 | "organizations_url": "https://api.github.com/users/andralex/orgs", 39 | "repos_url": "https://api.github.com/users/andralex/repos", 40 | "events_url": "https://api.github.com/users/andralex/events{/privacy}", 41 | "received_events_url": "https://api.github.com/users/andralex/received_events", 42 | "type": "User", 43 | "site_admin": false 44 | }, 45 | "committer": { 46 | "login": "andralex", 47 | "id": 566679, 48 | "avatar_url": "https://avatars.githubusercontent.com/u/566679?v=3", 49 | "gravatar_id": "", 50 | "url": "https://api.github.com/users/andralex", 51 | "html_url": "https://github.com/andralex", 52 | "followers_url": "https://api.github.com/users/andralex/followers", 53 | "following_url": "https://api.github.com/users/andralex/following{/other_user}", 54 | "gists_url": "https://api.github.com/users/andralex/gists{/gist_id}", 55 | "starred_url": "https://api.github.com/users/andralex/starred{/owner}{/repo}", 56 | "subscriptions_url": "https://api.github.com/users/andralex/subscriptions", 57 | "organizations_url": "https://api.github.com/users/andralex/orgs", 58 | "repos_url": "https://api.github.com/users/andralex/repos", 59 | "events_url": "https://api.github.com/users/andralex/events{/privacy}", 60 | "received_events_url": "https://api.github.com/users/andralex/received_events", 61 | "type": "User", 62 | "site_admin": false 63 | }, 64 | "parents": [ 65 | { 66 | "sha": "19445fc71e8aabdbd42f0ad8a571a57601a5ff39", 67 | "url": "https://api.github.com/repos/dlang/phobos/commits/19445fc71e8aabdbd42f0ad8a571a57601a5ff39", 68 | "html_url": "https://github.com/dlang/phobos/commit/19445fc71e8aabdbd42f0ad8a571a57601a5ff39" 69 | } 70 | ] 71 | } 72 | ] 73 | -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang_phobos_pulls_5114_commits: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "sha": "0fb66f092b897b55318509c6582008b3f912311a", 4 | "commit": { 5 | "author": { 6 | "name": "Sophie Kirschner", 7 | "email": "pineapplemachine@gmail.com", 8 | "date": "2017-02-10T16:20:45Z" 9 | }, 10 | "committer": { 11 | "name": "ZombineDev", 12 | "email": "petar.p.kirov@gmail.com", 13 | "date": "2017-06-27T14:16:55Z" 14 | }, 15 | "message": "Fix issue 17562 - tan returning -nan for inputs where abs(x) >= 2^63\n\nThe fptan instruction pushes a 1.0 onto the FPU register stack after a\nsuccessful operation, but when abs(input) >= 2^63 the C2 flag is set to\nindicate that the input was out of bounds, and it doesn't push the 1.0.\n\nPrior to this PR, the top value of the FPU stack was popped irrespective\nof whether C2 was set, which in the case of an out-of-bounds input\ncaused the input to be removed from the stack and ultimately resulted in\nan incorrect return value of -nan. This PR changes this behavior, only\npopping after fptan when C2 was not set.\n\nSee: http://x86.renejeschke.de/html/file_module_x86_id_109.html\n\n* Added unit tests for handling out-of-range inputs of fptan", 16 | "tree": { 17 | "sha": "c9eed9526fc5e0ecf8cd1630a334f3f3b0a95c9d", 18 | "url": "https://api.github.com/repos/dlang/phobos/git/trees/c9eed9526fc5e0ecf8cd1630a334f3f3b0a95c9d" 19 | }, 20 | "url": "https://api.github.com/repos/dlang/phobos/git/commits/0fb66f092b897b55318509c6582008b3f912311a", 21 | "comment_count": 0 22 | }, 23 | "url": "https://api.github.com/repos/dlang/phobos/commits/0fb66f092b897b55318509c6582008b3f912311a", 24 | "html_url": "https://github.com/dlang/phobos/commit/0fb66f092b897b55318509c6582008b3f912311a", 25 | "comments_url": "https://api.github.com/repos/dlang/phobos/commits/0fb66f092b897b55318509c6582008b3f912311a/comments", 26 | "author": { 27 | "login": "pineapplemachine", 28 | "id": 7266412, 29 | "avatar_url": "https://avatars1.githubusercontent.com/u/7266412?v=3", 30 | "gravatar_id": "", 31 | "url": "https://api.github.com/users/pineapplemachine", 32 | "html_url": "https://github.com/pineapplemachine", 33 | "followers_url": "https://api.github.com/users/pineapplemachine/followers", 34 | "following_url": "https://api.github.com/users/pineapplemachine/following{/other_user}", 35 | "gists_url": "https://api.github.com/users/pineapplemachine/gists{/gist_id}", 36 | "starred_url": "https://api.github.com/users/pineapplemachine/starred{/owner}{/repo}", 37 | "subscriptions_url": "https://api.github.com/users/pineapplemachine/subscriptions", 38 | "organizations_url": "https://api.github.com/users/pineapplemachine/orgs", 39 | "repos_url": "https://api.github.com/users/pineapplemachine/repos", 40 | "events_url": "https://api.github.com/users/pineapplemachine/events{/privacy}", 41 | "received_events_url": "https://api.github.com/users/pineapplemachine/received_events", 42 | "type": "User", 43 | "site_admin": false 44 | }, 45 | "committer": { 46 | "login": "ZombineDev", 47 | "id": 3475150, 48 | "avatar_url": "https://avatars1.githubusercontent.com/u/3475150?v=3", 49 | "gravatar_id": "", 50 | "url": "https://api.github.com/users/ZombineDev", 51 | "html_url": "https://github.com/ZombineDev", 52 | "followers_url": "https://api.github.com/users/ZombineDev/followers", 53 | "following_url": "https://api.github.com/users/ZombineDev/following{/other_user}", 54 | "gists_url": "https://api.github.com/users/ZombineDev/gists{/gist_id}", 55 | "starred_url": "https://api.github.com/users/ZombineDev/starred{/owner}{/repo}", 56 | "subscriptions_url": "https://api.github.com/users/ZombineDev/subscriptions", 57 | "organizations_url": "https://api.github.com/users/ZombineDev/orgs", 58 | "repos_url": "https://api.github.com/users/ZombineDev/repos", 59 | "events_url": "https://api.github.com/users/ZombineDev/events{/privacy}", 60 | "received_events_url": "https://api.github.com/users/ZombineDev/received_events", 61 | "type": "User", 62 | "site_admin": false 63 | }, 64 | "parents": [ 65 | { 66 | "sha": "b5d6ac136e36a739f6f285b1d722b8f91d23d45f", 67 | "url": "https://api.github.com/repos/dlang/phobos/commits/b5d6ac136e36a739f6f285b1d722b8f91d23d45f", 68 | "html_url": "https://github.com/dlang/phobos/commit/b5d6ac136e36a739f6f285b1d722b8f91d23d45f" 69 | } 70 | ] 71 | } 72 | ] 73 | -------------------------------------------------------------------------------- /data/payloads/github_repos_dlang_phobos_pulls_5114_reviews: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": 46675433, 4 | "node_id": "MDE3OlB1bGxSZXF1ZXN0UmV2aWV3NDY2NzU0MzM=", 5 | "user": { 6 | "login": "wilzbach", 7 | "id": 4370550, 8 | "node_id": "MDQ6VXNlcjQzNzA1NTA=", 9 | "avatar_url": "https://avatars.githubusercontent.com/u/4370550?u=c7c1638b475727c0d05cc0d1cbf0d2aa86605702&v=4", 10 | "gravatar_id": "", 11 | "url": "https://api.github.com/users/wilzbach", 12 | "html_url": "https://github.com/wilzbach", 13 | "followers_url": "https://api.github.com/users/wilzbach/followers", 14 | "following_url": "https://api.github.com/users/wilzbach/following{/other_user}", 15 | "gists_url": "https://api.github.com/users/wilzbach/gists{/gist_id}", 16 | "starred_url": "https://api.github.com/users/wilzbach/starred{/owner}{/repo}", 17 | "subscriptions_url": "https://api.github.com/users/wilzbach/subscriptions", 18 | "organizations_url": "https://api.github.com/users/wilzbach/orgs", 19 | "repos_url": "https://api.github.com/users/wilzbach/repos", 20 | "events_url": "https://api.github.com/users/wilzbach/events{/privacy}", 21 | "received_events_url": "https://api.github.com/users/wilzbach/received_events", 22 | "type": "User", 23 | "site_admin": false 24 | }, 25 | "body": "", 26 | "state": "APPROVED", 27 | "html_url": "https://github.com/dlang/phobos/pull/5114#pullrequestreview-46675433", 28 | "pull_request_url": "https://api.github.com/repos/dlang/phobos/pulls/5114", 29 | "author_association": "MEMBER", 30 | "_links": { 31 | "html": { 32 | "href": "https://github.com/dlang/phobos/pull/5114#pullrequestreview-46675433" 33 | }, 34 | "pull_request": { 35 | "href": "https://api.github.com/repos/dlang/phobos/pulls/5114" 36 | } 37 | }, 38 | "submitted_at": "2017-06-27T20:46:54Z", 39 | "commit_id": "0fb66f092b897b55318509c6582008b3f912311a" 40 | }, 41 | { 42 | "id": 46683807, 43 | "node_id": "MDE3OlB1bGxSZXF1ZXN0UmV2aWV3NDY2ODM4MDc=", 44 | "user": { 45 | "login": "PetarKirov", 46 | "id": 3475150, 47 | "node_id": "MDQ6VXNlcjM0NzUxNTA=", 48 | "avatar_url": "https://avatars.githubusercontent.com/u/3475150?u=630b3ada8bfe28813c136b42f914186425474513&v=4", 49 | "gravatar_id": "", 50 | "url": "https://api.github.com/users/PetarKirov", 51 | "html_url": "https://github.com/PetarKirov", 52 | "followers_url": "https://api.github.com/users/PetarKirov/followers", 53 | "following_url": "https://api.github.com/users/PetarKirov/following{/other_user}", 54 | "gists_url": "https://api.github.com/users/PetarKirov/gists{/gist_id}", 55 | "starred_url": "https://api.github.com/users/PetarKirov/starred{/owner}{/repo}", 56 | "subscriptions_url": "https://api.github.com/users/PetarKirov/subscriptions", 57 | "organizations_url": "https://api.github.com/users/PetarKirov/orgs", 58 | "repos_url": "https://api.github.com/users/PetarKirov/repos", 59 | "events_url": "https://api.github.com/users/PetarKirov/events{/privacy}", 60 | "received_events_url": "https://api.github.com/users/PetarKirov/received_events", 61 | "type": "User", 62 | "site_admin": false 63 | }, 64 | "body": "", 65 | "state": "APPROVED", 66 | "html_url": "https://github.com/dlang/phobos/pull/5114#pullrequestreview-46683807", 67 | "pull_request_url": "https://api.github.com/repos/dlang/phobos/pulls/5114", 68 | "author_association": "MEMBER", 69 | "_links": { 70 | "html": { 71 | "href": "https://github.com/dlang/phobos/pull/5114#pullrequestreview-46683807" 72 | }, 73 | "pull_request": { 74 | "href": "https://api.github.com/repos/dlang/phobos/pulls/5114" 75 | } 76 | }, 77 | "submitted_at": "2017-06-27T21:19:02Z", 78 | "commit_id": "0fb66f092b897b55318509c6582008b3f912311a" 79 | } 80 | ] 81 | -------------------------------------------------------------------------------- /data/payloads/github_repos_notdlang_bar_pulls_12347_commits: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "sha": "e064d5664f92c4b2f0866c08f6d0290ba66825ed", 4 | "commit": { 5 | "author": { 6 | "name": "Andrei Alexandrescu", 7 | "email": "andrei@erdani.com", 8 | "date": "2016-12-16T21:54:13Z" 9 | }, 10 | "committer": { 11 | "name": "Andrei Alexandrescu", 12 | "email": "andrei@erdani.com", 13 | "date": "2016-12-17T16:50:16Z" 14 | }, 15 | "message": "[DEMO][DONOTPULL] Converted imports to selective imports in std.array", 16 | "tree": { 17 | "sha": "b3106d04851a8f349b6cfdcfd7c9db663edbbfcb", 18 | "url": "https://api.github.com/repos/notdlang/bar/git/trees/b3106d04851a8f349b6cfdcfd7c9db663edbbfcb" 19 | }, 20 | "url": "https://api.github.com/repos/notdlang/bar/git/commits/e064d5664f92c4b2f0866c08f6d0290ba66825ed", 21 | "comment_count": 0 22 | }, 23 | "url": "https://api.github.com/repos/notdlang/bar/commits/e064d5664f92c4b2f0866c08f6d0290ba66825ed", 24 | "html_url": "https://github.com/notdlang/bar/commit/e064d5664f92c4b2f0866c08f6d0290ba66825ed", 25 | "comments_url": "https://api.github.com/repos/notdlang/bar/commits/e064d5664f92c4b2f0866c08f6d0290ba66825ed/comments", 26 | "author": { 27 | "login": "andralex", 28 | "id": 566679, 29 | "avatar_url": "https://avatars.githubusercontent.com/u/566679?v=3", 30 | "gravatar_id": "", 31 | "url": "https://api.github.com/users/andralex", 32 | "html_url": "https://github.com/andralex", 33 | "followers_url": "https://api.github.com/users/andralex/followers", 34 | "following_url": "https://api.github.com/users/andralex/following{/other_user}", 35 | "gists_url": "https://api.github.com/users/andralex/gists{/gist_id}", 36 | "starred_url": "https://api.github.com/users/andralex/starred{/owner}{/repo}", 37 | "subscriptions_url": "https://api.github.com/users/andralex/subscriptions", 38 | "organizations_url": "https://api.github.com/users/andralex/orgs", 39 | "repos_url": "https://api.github.com/users/andralex/repos", 40 | "events_url": "https://api.github.com/users/andralex/events{/privacy}", 41 | "received_events_url": "https://api.github.com/users/andralex/received_events", 42 | "type": "User", 43 | "site_admin": false 44 | }, 45 | "committer": { 46 | "login": "andralex", 47 | "id": 566679, 48 | "avatar_url": "https://avatars.githubusercontent.com/u/566679?v=3", 49 | "gravatar_id": "", 50 | "url": "https://api.github.com/users/andralex", 51 | "html_url": "https://github.com/andralex", 52 | "followers_url": "https://api.github.com/users/andralex/followers", 53 | "following_url": "https://api.github.com/users/andralex/following{/other_user}", 54 | "gists_url": "https://api.github.com/users/andralex/gists{/gist_id}", 55 | "starred_url": "https://api.github.com/users/andralex/starred{/owner}{/repo}", 56 | "subscriptions_url": "https://api.github.com/users/andralex/subscriptions", 57 | "organizations_url": "https://api.github.com/users/andralex/orgs", 58 | "repos_url": "https://api.github.com/users/andralex/repos", 59 | "events_url": "https://api.github.com/users/andralex/events{/privacy}", 60 | "received_events_url": "https://api.github.com/users/andralex/received_events", 61 | "type": "User", 62 | "site_admin": false 63 | }, 64 | "parents": [ 65 | { 66 | "sha": "19445fc71e8aabdbd42f0ad8a571a57601a5ff39", 67 | "url": "https://api.github.com/repos/notdlang/bar/commits/19445fc71e8aabdbd42f0ad8a571a57601a5ff39", 68 | "html_url": "https://github.com/notdlang/bar/commit/19445fc71e8aabdbd42f0ad8a571a57601a5ff39" 69 | } 70 | ] 71 | } 72 | ] 73 | -------------------------------------------------------------------------------- /data/payloads/github_repos_notdlang_foo_issues_12346_comments: -------------------------------------------------------------------------------- 1 | [ 2 | ] 3 | -------------------------------------------------------------------------------- /data/payloads/github_repos_notdlang_foo_issues_12346_labels: -------------------------------------------------------------------------------- 1 | [ 2 | 3 | ] 4 | -------------------------------------------------------------------------------- /data/payloads/github_repos_notdlang_foo_pulls_12346_commits: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "sha": "9fbce55814bdc8f78d6fead3243db657eafc4ec7", 4 | "commit": { 5 | "author": { 6 | "name": "Martin Nowak", 7 | "email": "code@dawg.eu", 8 | "date": "2016-12-24T17:58:32Z" 9 | }, 10 | "committer": { 11 | "name": "Martin Nowak", 12 | "email": "code@dawg.eu", 13 | "date": "2016-12-24T17:58:32Z" 14 | }, 15 | "message": "fix Issue 16794 - foo not working on Ubuntu 16.10\n\n- enable PIC by default on amd64 linux (no significant overhead, full\n PIC/PIE support)\n- also see https://github.com/notdlang/installer/pull/207", 16 | "tree": { 17 | "sha": "7fe104c3fc612cb2b527eab295f858d2e14796a3", 18 | "url": "https://api.github.com/repos/notdlang/foo/git/trees/7fe104c3fc612cb2b527eab295f858d2e14796a3" 19 | }, 20 | "url": "https://api.github.com/repos/notdlang/foo/git/commits/9fbce55814bdc8f78d6fead3243db657eafc4ec7", 21 | "comment_count": 0 22 | }, 23 | "url": "https://api.github.com/repos/notdlang/foo/commits/9fbce55814bdc8f78d6fead3243db657eafc4ec7", 24 | "html_url": "https://github.com/notdlang/foo/commit/9fbce55814bdc8f78d6fead3243db657eafc4ec7", 25 | "comments_url": "https://api.github.com/repos/notdlang/foo/commits/9fbce55814bdc8f78d6fead3243db657eafc4ec7/comments", 26 | "author": { 27 | "login": "MartinNowak", 28 | "id": 288976, 29 | "avatar_url": "https://avatars.githubusercontent.com/u/288976?v=3", 30 | "gravatar_id": "", 31 | "url": "https://api.github.com/users/MartinNowak", 32 | "html_url": "https://github.com/MartinNowak", 33 | "followers_url": "https://api.github.com/users/MartinNowak/followers", 34 | "following_url": "https://api.github.com/users/MartinNowak/following{/other_user}", 35 | "gists_url": "https://api.github.com/users/MartinNowak/gists{/gist_id}", 36 | "starred_url": "https://api.github.com/users/MartinNowak/starred{/owner}{/repo}", 37 | "subscriptions_url": "https://api.github.com/users/MartinNowak/subscriptions", 38 | "organizations_url": "https://api.github.com/users/MartinNowak/orgs", 39 | "repos_url": "https://api.github.com/users/MartinNowak/repos", 40 | "events_url": "https://api.github.com/users/MartinNowak/events{/privacy}", 41 | "received_events_url": "https://api.github.com/users/MartinNowak/received_events", 42 | "type": "User", 43 | "site_admin": false 44 | }, 45 | "committer": { 46 | "login": "MartinNowak", 47 | "id": 288976, 48 | "avatar_url": "https://avatars.githubusercontent.com/u/288976?v=3", 49 | "gravatar_id": "", 50 | "url": "https://api.github.com/users/MartinNowak", 51 | "html_url": "https://github.com/MartinNowak", 52 | "followers_url": "https://api.github.com/users/MartinNowak/followers", 53 | "following_url": "https://api.github.com/users/MartinNowak/following{/other_user}", 54 | "gists_url": "https://api.github.com/users/MartinNowak/gists{/gist_id}", 55 | "starred_url": "https://api.github.com/users/MartinNowak/starred{/owner}{/repo}", 56 | "subscriptions_url": "https://api.github.com/users/MartinNowak/subscriptions", 57 | "organizations_url": "https://api.github.com/users/MartinNowak/orgs", 58 | "repos_url": "https://api.github.com/users/MartinNowak/repos", 59 | "events_url": "https://api.github.com/users/MartinNowak/events{/privacy}", 60 | "received_events_url": "https://api.github.com/users/MartinNowak/received_events", 61 | "type": "User", 62 | "site_admin": false 63 | }, 64 | "parents": [ 65 | { 66 | "sha": "907e2eff63da664406b2250566738be5aafaf043", 67 | "url": "https://api.github.com/repos/notdlang/foo/commits/907e2eff63da664406b2250566738be5aafaf043", 68 | "html_url": "https://github.com/notdlang/foo/commit/907e2eff63da664406b2250566738be5aafaf043" 69 | } 70 | ] 71 | } 72 | ] -------------------------------------------------------------------------------- /data/payloads/github_repos_vibe-d_vibe-core_commits_04b3575c14dc7ad9971e19f153f3e3d712c1bdde_status: -------------------------------------------------------------------------------- 1 | { 2 | "state": "success", 3 | "statuses": [ 4 | { 5 | "url": "https://api.github.com/repos/vibe-d/vibe-core/statuses/04b3575c14dc7ad9971e19f153f3e3d712c1bdde", 6 | "id": 1347064349, 7 | "state": "success", 8 | "description": "The Travis CI build passed", 9 | "target_url": "https://travis-ci.org/vibe-d/vibe-core/builds/249443702?utm_source=github_status&utm_medium=notification", 10 | "context": "continuous-integration/travis-ci/pr", 11 | "created_at": "2017-07-03T00:08:40Z", 12 | "updated_at": "2017-07-03T00:08:40Z" 13 | }, 14 | { 15 | "url": "https://api.github.com/repos/vibe-d/vibe-core/statuses/04b3575c14dc7ad9971e19f153f3e3d712c1bdde", 16 | "id": 1347080400, 17 | "state": "success", 18 | "description": "AppVeyor build succeeded", 19 | "target_url": "https://ci.appveyor.com/project/s-ludwig/vibe-core/build/1.0.71", 20 | "context": "continuous-integration/appveyor/pr", 21 | "created_at": "2017-07-03T00:32:18Z", 22 | "updated_at": "2017-07-03T00:32:18Z" 23 | }, 24 | { 25 | "url": "https://api.github.com/repos/vibe-d/vibe-core/statuses/04b3575c14dc7ad9971e19f153f3e3d712c1bdde", 26 | "id": 1347080785, 27 | "state": "success", 28 | "description": "Coverage not affected when comparing 346ce03...04b3575", 29 | "target_url": "https://codecov.io/gh/vibe-d/vibe-core/compare/346ce03cbd1a192d7a5fad3466966f5a340f33bd...04b3575c14dc7ad9971e19f153f3e3d712c1bdde", 30 | "context": "codecov/patch", 31 | "created_at": "2017-07-03T00:32:54Z", 32 | "updated_at": "2017-07-03T00:32:54Z" 33 | }, 34 | { 35 | "url": "https://api.github.com/repos/vibe-d/vibe-core/statuses/04b3575c14dc7ad9971e19f153f3e3d712c1bdde", 36 | "id": 1347080790, 37 | "state": "success", 38 | "description": "56.168% (+0.027%) compared to 346ce03", 39 | "target_url": "https://codecov.io/gh/vibe-d/vibe-core/compare/346ce03cbd1a192d7a5fad3466966f5a340f33bd...04b3575c14dc7ad9971e19f153f3e3d712c1bdde", 40 | "context": "codecov/project", 41 | "created_at": "2017-07-03T00:32:54Z", 42 | "updated_at": "2017-07-03T00:32:54Z" 43 | } 44 | ], 45 | "sha": "04b3575c14dc7ad9971e19f153f3e3d712c1bdde", 46 | "total_count": 4, 47 | "repository": { 48 | "id": 52903464, 49 | "name": "vibe-core", 50 | "full_name": "vibe-d/vibe-core", 51 | "owner": { 52 | "login": "vibe-d", 53 | "id": 17060480, 54 | "avatar_url": "https://avatars0.githubusercontent.com/u/17060480?v=4", 55 | "gravatar_id": "", 56 | "url": "https://api.github.com/users/vibe-d", 57 | "html_url": "https://github.com/vibe-d", 58 | "followers_url": "https://api.github.com/users/vibe-d/followers", 59 | "following_url": "https://api.github.com/users/vibe-d/following{/other_user}", 60 | "gists_url": "https://api.github.com/users/vibe-d/gists{/gist_id}", 61 | "starred_url": "https://api.github.com/users/vibe-d/starred{/owner}{/repo}", 62 | "subscriptions_url": "https://api.github.com/users/vibe-d/subscriptions", 63 | "organizations_url": "https://api.github.com/users/vibe-d/orgs", 64 | "repos_url": "https://api.github.com/users/vibe-d/repos", 65 | "events_url": "https://api.github.com/users/vibe-d/events{/privacy}", 66 | "received_events_url": "https://api.github.com/users/vibe-d/received_events", 67 | "type": "Organization", 68 | "site_admin": false 69 | }, 70 | "private": false, 71 | "html_url": "https://github.com/vibe-d/vibe-core", 72 | "description": "Repository for the next generation of vibe.d's core package.", 73 | "fork": false, 74 | "url": "https://api.github.com/repos/vibe-d/vibe-core", 75 | "forks_url": "https://api.github.com/repos/vibe-d/vibe-core/forks", 76 | "keys_url": "https://api.github.com/repos/vibe-d/vibe-core/keys{/key_id}", 77 | "collaborators_url": "https://api.github.com/repos/vibe-d/vibe-core/collaborators{/collaborator}", 78 | "teams_url": "https://api.github.com/repos/vibe-d/vibe-core/teams", 79 | "hooks_url": "https://api.github.com/repos/vibe-d/vibe-core/hooks", 80 | "issue_events_url": "https://api.github.com/repos/vibe-d/vibe-core/issues/events{/number}", 81 | "events_url": "https://api.github.com/repos/vibe-d/vibe-core/events", 82 | "assignees_url": "https://api.github.com/repos/vibe-d/vibe-core/assignees{/user}", 83 | "branches_url": "https://api.github.com/repos/vibe-d/vibe-core/branches{/branch}", 84 | "tags_url": "https://api.github.com/repos/vibe-d/vibe-core/tags", 85 | "blobs_url": "https://api.github.com/repos/vibe-d/vibe-core/git/blobs{/sha}", 86 | "git_tags_url": "https://api.github.com/repos/vibe-d/vibe-core/git/tags{/sha}", 87 | "git_refs_url": "https://api.github.com/repos/vibe-d/vibe-core/git/refs{/sha}", 88 | "trees_url": "https://api.github.com/repos/vibe-d/vibe-core/git/trees{/sha}", 89 | "statuses_url": "https://api.github.com/repos/vibe-d/vibe-core/statuses/{sha}", 90 | "languages_url": "https://api.github.com/repos/vibe-d/vibe-core/languages", 91 | "stargazers_url": "https://api.github.com/repos/vibe-d/vibe-core/stargazers", 92 | "contributors_url": "https://api.github.com/repos/vibe-d/vibe-core/contributors", 93 | "subscribers_url": "https://api.github.com/repos/vibe-d/vibe-core/subscribers", 94 | "subscription_url": "https://api.github.com/repos/vibe-d/vibe-core/subscription", 95 | "commits_url": "https://api.github.com/repos/vibe-d/vibe-core/commits{/sha}", 96 | "git_commits_url": "https://api.github.com/repos/vibe-d/vibe-core/git/commits{/sha}", 97 | "comments_url": "https://api.github.com/repos/vibe-d/vibe-core/comments{/number}", 98 | "issue_comment_url": "https://api.github.com/repos/vibe-d/vibe-core/issues/comments{/number}", 99 | "contents_url": "https://api.github.com/repos/vibe-d/vibe-core/contents/{+path}", 100 | "compare_url": "https://api.github.com/repos/vibe-d/vibe-core/compare/{base}...{head}", 101 | "merges_url": "https://api.github.com/repos/vibe-d/vibe-core/merges", 102 | "archive_url": "https://api.github.com/repos/vibe-d/vibe-core/{archive_format}{/ref}", 103 | "downloads_url": "https://api.github.com/repos/vibe-d/vibe-core/downloads", 104 | "issues_url": "https://api.github.com/repos/vibe-d/vibe-core/issues{/number}", 105 | "pulls_url": "https://api.github.com/repos/vibe-d/vibe-core/pulls{/number}", 106 | "milestones_url": "https://api.github.com/repos/vibe-d/vibe-core/milestones{/number}", 107 | "notifications_url": "https://api.github.com/repos/vibe-d/vibe-core/notifications{?since,all,participating}", 108 | "labels_url": "https://api.github.com/repos/vibe-d/vibe-core/labels{/name}", 109 | "releases_url": "https://api.github.com/repos/vibe-d/vibe-core/releases{/id}", 110 | "deployments_url": "https://api.github.com/repos/vibe-d/vibe-core/deployments" 111 | }, 112 | "commit_url": "https://api.github.com/repos/vibe-d/vibe-core/commits/04b3575c14dc7ad9971e19f153f3e3d712c1bdde", 113 | "url": "https://api.github.com/repos/vibe-d/vibe-core/commits/04b3575c14dc7ad9971e19f153f3e3d712c1bdde/status" 114 | } 115 | -------------------------------------------------------------------------------- /data/payloads/github_repos_vibe-d_vibe-core_issues_22_labels: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": 640518144, 4 | "url": "https://api.github.com/repos/vibe-d/vibe-core/labels/auto-merge", 5 | "name": "auto-merge", 6 | "color": "d3d3d3", 7 | "default": false 8 | } 9 | ] 10 | -------------------------------------------------------------------------------- /data/payloads/github_repos_vibe-d_vibe-core_pulls_22_commits: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "sha": "04b3575c14dc7ad9971e19f153f3e3d712c1bdde", 4 | "commit": { 5 | "author": { 6 | "name": "Sebastian Wilzbach", 7 | "email": "seb@wilzba.ch", 8 | "date": "2017-07-02T22:39:41Z" 9 | }, 10 | "committer": { 11 | "name": "Sebastian Wilzbach", 12 | "email": "seb@wilzba.ch", 13 | "date": "2017-07-02T22:39:41Z" 14 | }, 15 | "message": "Remove deprecated stdc import", 16 | "tree": { 17 | "sha": "4b2016240e1eba7ea5f9fd9bacf3e1b3d55401b1", 18 | "url": "https://api.github.com/repos/vibe-d/vibe-core/git/trees/4b2016240e1eba7ea5f9fd9bacf3e1b3d55401b1" 19 | }, 20 | "url": "https://api.github.com/repos/vibe-d/vibe-core/git/commits/04b3575c14dc7ad9971e19f153f3e3d712c1bdde", 21 | "comment_count": 0 22 | }, 23 | "url": "https://api.github.com/repos/vibe-d/vibe-core/commits/04b3575c14dc7ad9971e19f153f3e3d712c1bdde", 24 | "html_url": "https://github.com/vibe-d/vibe-core/commit/04b3575c14dc7ad9971e19f153f3e3d712c1bdde", 25 | "comments_url": "https://api.github.com/repos/vibe-d/vibe-core/commits/04b3575c14dc7ad9971e19f153f3e3d712c1bdde/comments", 26 | "author": { 27 | "login": "wilzbach", 28 | "id": 4370550, 29 | "avatar_url": "https://avatars0.githubusercontent.com/u/4370550?v=3", 30 | "gravatar_id": "", 31 | "url": "https://api.github.com/users/wilzbach", 32 | "html_url": "https://github.com/wilzbach", 33 | "followers_url": "https://api.github.com/users/wilzbach/followers", 34 | "following_url": "https://api.github.com/users/wilzbach/following{/other_user}", 35 | "gists_url": "https://api.github.com/users/wilzbach/gists{/gist_id}", 36 | "starred_url": "https://api.github.com/users/wilzbach/starred{/owner}{/repo}", 37 | "subscriptions_url": "https://api.github.com/users/wilzbach/subscriptions", 38 | "organizations_url": "https://api.github.com/users/wilzbach/orgs", 39 | "repos_url": "https://api.github.com/users/wilzbach/repos", 40 | "events_url": "https://api.github.com/users/wilzbach/events{/privacy}", 41 | "received_events_url": "https://api.github.com/users/wilzbach/received_events", 42 | "type": "User", 43 | "site_admin": false 44 | }, 45 | "committer": { 46 | "login": "wilzbach", 47 | "id": 4370550, 48 | "avatar_url": "https://avatars0.githubusercontent.com/u/4370550?v=3", 49 | "gravatar_id": "", 50 | "url": "https://api.github.com/users/wilzbach", 51 | "html_url": "https://github.com/wilzbach", 52 | "followers_url": "https://api.github.com/users/wilzbach/followers", 53 | "following_url": "https://api.github.com/users/wilzbach/following{/other_user}", 54 | "gists_url": "https://api.github.com/users/wilzbach/gists{/gist_id}", 55 | "starred_url": "https://api.github.com/users/wilzbach/starred{/owner}{/repo}", 56 | "subscriptions_url": "https://api.github.com/users/wilzbach/subscriptions", 57 | "organizations_url": "https://api.github.com/users/wilzbach/orgs", 58 | "repos_url": "https://api.github.com/users/wilzbach/repos", 59 | "events_url": "https://api.github.com/users/wilzbach/events{/privacy}", 60 | "received_events_url": "https://api.github.com/users/wilzbach/received_events", 61 | "type": "User", 62 | "site_admin": false 63 | }, 64 | "parents": [ 65 | { 66 | "sha": "346ce03cbd1a192d7a5fad3466966f5a340f33bd", 67 | "url": "https://api.github.com/repos/vibe-d/vibe-core/commits/346ce03cbd1a192d7a5fad3466966f5a340f33bd", 68 | "html_url": "https://github.com/vibe-d/vibe-core/commit/346ce03cbd1a192d7a5fad3466966f5a340f33bd" 69 | } 70 | ] 71 | } 72 | ] 73 | -------------------------------------------------------------------------------- /data/payloads/github_repos_vibe-d_vibe-core_pulls_22_reviews: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /data/payloads/github_users_9il: -------------------------------------------------------------------------------- 1 | { 2 | "login": "9il", 3 | "id": 845083, 4 | "avatar_url": "https://avatars.githubusercontent.com/u/845083?v=3", 5 | "gravatar_id": "", 6 | "url": "https://api.github.com/users/9il", 7 | "html_url": "https://github.com/9il", 8 | "followers_url": "https://api.github.com/users/9il/followers", 9 | "following_url": "https://api.github.com/users/9il/following{/other_user}", 10 | "gists_url": "https://api.github.com/users/9il/gists{/gist_id}", 11 | "starred_url": "https://api.github.com/users/9il/starred{/owner}{/repo}", 12 | "subscriptions_url": "https://api.github.com/users/9il/subscriptions", 13 | "organizations_url": "https://api.github.com/users/9il/orgs", 14 | "repos_url": "https://api.github.com/users/9il/repos", 15 | "events_url": "https://api.github.com/users/9il/events{/privacy}", 16 | "received_events_url": "https://api.github.com/users/9il/received_events", 17 | "type": "User", 18 | "site_admin": false, 19 | "name": "Ilya Yaroshenko", 20 | "company": null, 21 | "blog": null, 22 | "location": "Moscow", 23 | "email": "testmail@example.com", 24 | "hireable": true, 25 | "bio": "IT Consultant", 26 | "public_repos": 45, 27 | "public_gists": 26, 28 | "followers": 28, 29 | "following": 8, 30 | "created_at": "2011-06-12T11:45:45Z", 31 | "updated_at": "2016-12-08T13:18:42Z" 32 | } 33 | -------------------------------------------------------------------------------- /data/payloads/github_users_MartinNowak: -------------------------------------------------------------------------------- 1 | { 2 | "login": "MartinNowak", 3 | "id": 288976, 4 | "avatar_url": "https://avatars.githubusercontent.com/u/288976?v=3", 5 | "gravatar_id": "", 6 | "url": "https://api.github.com/users/MartinNowak", 7 | "html_url": "https://github.com/MartinNowak", 8 | "followers_url": "https://api.github.com/users/MartinNowak/followers", 9 | "following_url": "https://api.github.com/users/MartinNowak/following{/other_user}", 10 | "gists_url": "https://api.github.com/users/MartinNowak/gists{/gist_id}", 11 | "starred_url": "https://api.github.com/users/MartinNowak/starred{/owner}{/repo}", 12 | "subscriptions_url": "https://api.github.com/users/MartinNowak/subscriptions", 13 | "organizations_url": "https://api.github.com/users/MartinNowak/orgs", 14 | "repos_url": "https://api.github.com/users/MartinNowak/repos", 15 | "events_url": "https://api.github.com/users/MartinNowak/events{/privacy}", 16 | "received_events_url": "https://api.github.com/users/MartinNowak/received_events", 17 | "type": "User", 18 | "site_admin": false, 19 | "name": "Martin Nowak", 20 | "company": null, 21 | "blog": null, 22 | "location": "Berlin, Germany", 23 | "email": "somemail@example.org", 24 | "hireable": true, 25 | "bio": null, 26 | "public_repos": 169, 27 | "public_gists": 44, 28 | "followers": 48, 29 | "following": 0, 30 | "created_at": "2010-05-27T19:08:27Z", 31 | "updated_at": "2016-12-10T15:45:36Z" 32 | } -------------------------------------------------------------------------------- /data/payloads/github_users_PetarKirov: -------------------------------------------------------------------------------- 1 | { 2 | "login": "PetarKirov", 3 | "id": 3475150, 4 | "node_id": "MDQ6VXNlcjM0NzUxNTA=", 5 | "avatar_url": "https://avatars.githubusercontent.com/u/3475150?v=4", 6 | "gravatar_id": "", 7 | "url": "https://api.github.com/users/PetarKirov", 8 | "html_url": "https://github.com/PetarKirov", 9 | "followers_url": "https://api.github.com/users/PetarKirov/followers", 10 | "following_url": "https://api.github.com/users/PetarKirov/following{/other_user}", 11 | "gists_url": "https://api.github.com/users/PetarKirov/gists{/gist_id}", 12 | "starred_url": "https://api.github.com/users/PetarKirov/starred{/owner}{/repo}", 13 | "subscriptions_url": "https://api.github.com/users/PetarKirov/subscriptions", 14 | "organizations_url": "https://api.github.com/users/PetarKirov/orgs", 15 | "repos_url": "https://api.github.com/users/PetarKirov/repos", 16 | "events_url": "https://api.github.com/users/PetarKirov/events{/privacy}", 17 | "received_events_url": "https://api.github.com/users/PetarKirov/received_events", 18 | "type": "User", 19 | "site_admin": false, 20 | "name": "Petar Kirov", 21 | "company": null, 22 | "blog": "https://jarvis.network", 23 | "location": null, 24 | "email": null, 25 | "hireable": null, 26 | "bio": "CTO @jarvis-network | @dlang Contributor", 27 | "twitter_username": null, 28 | "public_repos": 130, 29 | "public_gists": 52, 30 | "followers": 37, 31 | "following": 12, 32 | "created_at": "2013-02-04T20:17:53Z", 33 | "updated_at": "2021-05-27T14:02:05Z" 34 | } 35 | -------------------------------------------------------------------------------- /data/payloads/github_users_ZombineDev: -------------------------------------------------------------------------------- 1 | { 2 | "login": "ZombineDev", 3 | "id": 3475150, 4 | "avatar_url": "https://avatars1.githubusercontent.com/u/3475150?v=3", 5 | "gravatar_id": "", 6 | "url": "https://api.github.com/users/ZombineDev", 7 | "html_url": "https://github.com/ZombineDev", 8 | "followers_url": "https://api.github.com/users/ZombineDev/followers", 9 | "following_url": "https://api.github.com/users/ZombineDev/following{/other_user}", 10 | "gists_url": "https://api.github.com/users/ZombineDev/gists{/gist_id}", 11 | "starred_url": "https://api.github.com/users/ZombineDev/starred{/owner}{/repo}", 12 | "subscriptions_url": "https://api.github.com/users/ZombineDev/subscriptions", 13 | "organizations_url": "https://api.github.com/users/ZombineDev/orgs", 14 | "repos_url": "https://api.github.com/users/ZombineDev/repos", 15 | "events_url": "https://api.github.com/users/ZombineDev/events{/privacy}", 16 | "received_events_url": "https://api.github.com/users/ZombineDev/received_events", 17 | "type": "User", 18 | "site_admin": false, 19 | "name": null, 20 | "company": null, 21 | "blog": "", 22 | "location": null, 23 | "email": null, 24 | "hireable": null, 25 | "bio": null, 26 | "public_repos": 81, 27 | "public_gists": 9, 28 | "followers": 7, 29 | "following": 8, 30 | "created_at": "2013-02-04T20:17:53Z", 31 | "updated_at": "2017-06-27T16:13:43Z" 32 | } 33 | -------------------------------------------------------------------------------- /data/payloads/github_users_wilzbach: -------------------------------------------------------------------------------- 1 | { 2 | "login": "wilzbach", 3 | "id": 4370550, 4 | "avatar_url": "https://avatars0.githubusercontent.com/u/4370550?v=3", 5 | "gravatar_id": "", 6 | "url": "https://api.github.com/users/wilzbach", 7 | "html_url": "https://github.com/wilzbach", 8 | "followers_url": "https://api.github.com/users/wilzbach/followers", 9 | "following_url": "https://api.github.com/users/wilzbach/following{/other_user}", 10 | "gists_url": "https://api.github.com/users/wilzbach/gists{/gist_id}", 11 | "starred_url": "https://api.github.com/users/wilzbach/starred{/owner}{/repo}", 12 | "subscriptions_url": "https://api.github.com/users/wilzbach/subscriptions", 13 | "organizations_url": "https://api.github.com/users/wilzbach/orgs", 14 | "repos_url": "https://api.github.com/users/wilzbach/repos", 15 | "events_url": "https://api.github.com/users/wilzbach/events{/privacy}", 16 | "received_events_url": "https://api.github.com/users/wilzbach/received_events", 17 | "type": "User", 18 | "site_admin": false, 19 | "name": "Sebastian Wilzbach", 20 | "company": "Bio + CS ⇝ ❤", 21 | "blog": "https://seb.wilzba.ch", 22 | "location": "Munich, Germany", 23 | "email": null, 24 | "hireable": true, 25 | "bio": "@dlang is a horrible language, but by far the least horrible out there! ", 26 | "public_repos": 189, 27 | "public_gists": 27, 28 | "followers": 84, 29 | "following": 26, 30 | "created_at": "2013-05-08T00:25:33Z", 31 | "updated_at": "2017-06-14T04:17:44Z" 32 | } 33 | -------------------------------------------------------------------------------- /data/payloads/hcloud_images?sort=created:desc&type=snapshot: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "id": 1461991, 5 | "type": "snapshot", 6 | "status": "available", 7 | "name": null, 8 | "description": "ci-agent", 9 | "image_size": 1.13463800878906, 10 | "disk_size": 20, 11 | "created": "2018-11-03T01:28:33+00:00", 12 | "created_from": { 13 | "id": 1323136, 14 | "name": "gen-ci-agent-image" 15 | }, 16 | "bound_to": null, 17 | "os_flavor": "ubuntu", 18 | "os_version": null, 19 | "rapid_deploy": false, 20 | "protection": { 21 | "delete": false 22 | }, 23 | "deprecated": null, 24 | "labels": {} 25 | }, 26 | { 27 | "id": 1456126, 28 | "type": "snapshot", 29 | "status": "available", 30 | "name": null, 31 | "description": "ci-agent", 32 | "image_size": 1.13260383300781, 33 | "disk_size": 20, 34 | "created": "2018-11-02T17:58:56+00:00", 35 | "created_from": { 36 | "id": 1322106, 37 | "name": "gen-ci-agent-image" 38 | }, 39 | "bound_to": null, 40 | "os_flavor": "ubuntu", 41 | "os_version": null, 42 | "rapid_deploy": false, 43 | "protection": { 44 | "delete": false 45 | }, 46 | "deprecated": null, 47 | "labels": {} 48 | } 49 | ], 50 | "meta": { 51 | "pagination": { 52 | "page": 1, 53 | "per_page": 25, 54 | "previous_page": null, 55 | "next_page": null, 56 | "last_page": 1, 57 | "total_entries": 1 58 | } 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /data/payloads/hcloud_servers: -------------------------------------------------------------------------------- 1 | { 2 | "servers": [ 3 | { 4 | "id": 1321993, 5 | "name": "ci-agent-88e9e60d-bfb0-4567-921e-c955eac25653", 6 | "status": "running", 7 | "created": "2018-11-02T17:19:52+00:00", 8 | "public_net": { 9 | "ipv4": { 10 | "ip": "95.216.192.167", 11 | "blocked": false, 12 | "dns_ptr": "static.167.192.216.95.clients.your-server.de" 13 | }, 14 | "ipv6": { 15 | "ip": "2a01:4f9:c010:3085::/64", 16 | "blocked": false, 17 | "dns_ptr": [] 18 | }, 19 | "floating_ips": [] 20 | }, 21 | "server_type": { 22 | "id": 9, 23 | "name": "cx51", 24 | "description": "CX51", 25 | "cores": 8, 26 | "memory": 32.0, 27 | "disk": 240, 28 | "prices": [ 29 | { 30 | "location": "fsn1", 31 | "price_hourly": { 32 | "net": "0.0500000000", 33 | "gross": "0.0595000000000000" 34 | }, 35 | "price_monthly": { 36 | "net": "29.9000000000", 37 | "gross": "35.5810000000000000" 38 | } 39 | }, 40 | { 41 | "location": "nbg1", 42 | "price_hourly": { 43 | "net": "0.0500000000", 44 | "gross": "0.0595000000000000" 45 | }, 46 | "price_monthly": { 47 | "net": "29.9000000000", 48 | "gross": "35.5810000000000000" 49 | } 50 | }, 51 | { 52 | "location": "hel1", 53 | "price_hourly": { 54 | "net": "0.0500000000", 55 | "gross": "0.0595000000000000" 56 | }, 57 | "price_monthly": { 58 | "net": "29.9000000000", 59 | "gross": "35.5810000000000000" 60 | } 61 | } 62 | ], 63 | "storage_type": "local", 64 | "cpu_type": "shared" 65 | }, 66 | "datacenter": { 67 | "id": 3, 68 | "name": "hel1-dc2", 69 | "description": "Helsinki 1 DC 2", 70 | "location": { 71 | "id": 3, 72 | "name": "hel1", 73 | "description": "Helsinki DC Park 1", 74 | "country": "FI", 75 | "city": "Helsinki", 76 | "latitude": 60.169855, 77 | "longitude": 24.938379 78 | }, 79 | "server_types": { 80 | "supported": [ 81 | 1, 82 | 2, 83 | 3, 84 | 4, 85 | 5, 86 | 6, 87 | 7, 88 | 8, 89 | 9, 90 | 10, 91 | 11, 92 | 12, 93 | 13, 94 | 14, 95 | 15 96 | ], 97 | "available": [ 98 | 1, 99 | 2, 100 | 3, 101 | 4, 102 | 5, 103 | 6, 104 | 7, 105 | 8, 106 | 9, 107 | 10, 108 | 11, 109 | 12, 110 | 13, 111 | 14, 112 | 15 113 | ] 114 | } 115 | }, 116 | "image": { 117 | "id": 1382776, 118 | "type": "snapshot", 119 | "status": "available", 120 | "name": null, 121 | "description": "buildkite-agent-image", 122 | "image_size": 1.14233689941406, 123 | "disk_size": 20, 124 | "created": "2018-10-26T23:02:35+00:00", 125 | "created_from": { 126 | "id": 1291529, 127 | "name": "gen-buildkite-agent-image" 128 | }, 129 | "bound_to": null, 130 | "os_flavor": "ubuntu", 131 | "os_version": null, 132 | "rapid_deploy": false, 133 | "protection": { 134 | "delete": false 135 | }, 136 | "deprecated": null, 137 | "labels": {} 138 | }, 139 | "iso": null, 140 | "rescue_enabled": false, 141 | "locked": false, 142 | "backup_window": null, 143 | "outgoing_traffic": 0, 144 | "ingoing_traffic": 0, 145 | "included_traffic": 21990232555520, 146 | "protection": { 147 | "delete": false, 148 | "rebuild": false 149 | }, 150 | "labels": {}, 151 | "volumes": [] 152 | } 153 | ], 154 | "meta": { 155 | "pagination": { 156 | "page": 1, 157 | "per_page": 25, 158 | "previous_page": null, 159 | "next_page": null, 160 | "last_page": 1, 161 | "total_entries": 1 162 | } 163 | } 164 | } 165 | -------------------------------------------------------------------------------- /data/payloads/hcloud_servers_post: -------------------------------------------------------------------------------- 1 | { 2 | "action": { 3 | "id": 7520113, 4 | "command": "create_server", 5 | "finished": null, 6 | "progress": 0, 7 | "started": "2018-11-04T14:27:32+00:00", 8 | "resources": [ 9 | { 10 | "type": "server", 11 | "id": 1327609 12 | } 13 | ], 14 | "error": null, 15 | "status": "running" 16 | }, 17 | "root_password": "GtcME1gnfIyRot7PPNTw", 18 | "server": { 19 | "outgoing_traffic": 0, 20 | "id": 1327609, 21 | "rescue_enabled": false, 22 | "image": { 23 | "protection": { 24 | "delete": false 25 | }, 26 | "image_size": 1.13463800878906, 27 | "id": 1461991, 28 | "created_from": { 29 | "id": 1323136, 30 | "name": "gen-ci-agent-image" 31 | }, 32 | "disk_size": 20, 33 | "deprecated": null, 34 | "bound_to": null, 35 | "name": null, 36 | "labels": {}, 37 | "os_version": null, 38 | "type": "snapshot", 39 | "description": "ci-agent", 40 | "created": "2018-11-03T01:28:33+00:00", 41 | "os_flavor": "ubuntu", 42 | "rapid_deploy": false, 43 | "status": "available" 44 | }, 45 | "locked": false, 46 | "datacenter": { 47 | "description": "Helsinki 1 DC 2", 48 | "location": { 49 | "country": "FI", 50 | "id": 3, 51 | "name": "hel1", 52 | "city": "Helsinki", 53 | "longitude": 24.938379, 54 | "description": "Helsinki DC Park 1", 55 | "latitude": 60.169855 56 | }, 57 | "server_types": { 58 | "supported": [ 59 | 1, 60 | 2, 61 | 3, 62 | 4, 63 | 5, 64 | 6, 65 | 7, 66 | 8, 67 | 9, 68 | 10, 69 | 11, 70 | 12, 71 | 13, 72 | 14, 73 | 15 74 | ], 75 | "available": [ 76 | 1, 77 | 2, 78 | 3, 79 | 4, 80 | 5, 81 | 6, 82 | 7, 83 | 8, 84 | 9, 85 | 10, 86 | 11, 87 | 12, 88 | 13, 89 | 14, 90 | 15 91 | ] 92 | }, 93 | "id": 3, 94 | "name": "hel1-dc2" 95 | }, 96 | "iso": null, 97 | "included_traffic": 21990232555520, 98 | "name": "ci-agent-d9f239eb-1434-4a5c-9568-4897b36ff061", 99 | "server_type": { 100 | "prices": [ 101 | { 102 | "location": "fsn1", 103 | "price_hourly": { 104 | "gross": "0.0047600000000000", 105 | "net": "0.0040000000" 106 | }, 107 | "price_monthly": { 108 | "gross": "2.9631000000000000", 109 | "net": "2.4900000000" 110 | } 111 | }, 112 | { 113 | "location": "nbg1", 114 | "price_hourly": { 115 | "gross": "0.0047600000000000", 116 | "net": "0.0040000000" 117 | }, 118 | "price_monthly": { 119 | "gross": "2.9631000000000000", 120 | "net": "2.4900000000" 121 | } 122 | }, 123 | { 124 | "location": "hel1", 125 | "price_hourly": { 126 | "gross": "0.0047600000000000", 127 | "net": "0.0040000000" 128 | }, 129 | "price_monthly": { 130 | "gross": "2.9631000000000000", 131 | "net": "2.4900000000" 132 | } 133 | } 134 | ], 135 | "id": 1, 136 | "memory": 2, 137 | "name": "cx51", 138 | "cpu_type": "shared", 139 | "description": "CX51", 140 | "storage_type": "local", 141 | "disk": 20, 142 | "cores": 1 143 | }, 144 | "labels": {}, 145 | "volumes": [], 146 | "ingoing_traffic": 0, 147 | "public_net": { 148 | "ipv6": { 149 | "blocked": false, 150 | "ip": "2a01:4f9:c010:292b::/64", 151 | "dns_ptr": [] 152 | }, 153 | "ipv4": { 154 | "blocked": false, 155 | "ip": "95.216.192.196", 156 | "dns_ptr": "static.196.192.216.95.clients.your-server.de" 157 | }, 158 | "floating_ips": [] 159 | }, 160 | "backup_window": null, 161 | "created": "2018-11-04T14:27:32+00:00", 162 | "protection": { 163 | "rebuild": false, 164 | "delete": false 165 | }, 166 | "status": "initializing" 167 | } 168 | } 169 | -------------------------------------------------------------------------------- /data/payloads/trello_1_board_55586bf9fd02d8c66074321a_lists?key=01234&token=abcde: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "55586d948525e4cf11164123", 4 | "name": "Heap", 5 | "closed": false, 6 | "idBoard": "55586bf9fd02d8c66074321a", 7 | "pos": 65535, 8 | "subscribed": false 9 | }, 10 | { 11 | "id": "55586d963eab57c21df17371", 12 | "name": "WIP", 13 | "closed": false, 14 | "idBoard": "55586bf9fd02d8c66074321a", 15 | "pos": 131071, 16 | "subscribed": false 17 | }, 18 | { 19 | "id": "55586d9b810fb97f9459df7d", 20 | "name": "Testing/Review", 21 | "closed": false, 22 | "idBoard": "55586bf9fd02d8c66074321a", 23 | "pos": 196607, 24 | "subscribed": false 25 | }, 26 | { 27 | "id": "584ba21acdb114193c6988d9", 28 | "name": "Done 16", 29 | "closed": false, 30 | "idBoard": "55586bf9fd02d8c66074321a", 31 | "pos": 196655, 32 | "subscribed": false 33 | }, 34 | { 35 | "id": "5823afe683466179fea4da24", 36 | "name": "Done 15", 37 | "closed": false, 38 | "idBoard": "55586bf9fd02d8c66074321a", 39 | "pos": 196703, 40 | "subscribed": false 41 | }, 42 | { 43 | "id": "57e3bae92417c5b943d4c9ef", 44 | "name": "Done 14", 45 | "closed": false, 46 | "idBoard": "55586bf9fd02d8c66074321a", 47 | "pos": 196735, 48 | "subscribed": false 49 | }, 50 | { 51 | "id": "55adf4ead12dedeff98dc140", 52 | "name": "Frozen", 53 | "closed": false, 54 | "idBoard": "55586bf9fd02d8c66074321a", 55 | "pos": 278527, 56 | "subscribed": false 57 | } 58 | ] 59 | -------------------------------------------------------------------------------- /data/payloads/trello_1_cards_583f517a333add7c28e0cec7?key=01234&token=abcde: -------------------------------------------------------------------------------- 1 | { 2 | "id": "583f517a333add7c28e0cec7", 3 | "badges": { 4 | "votes": 0, 5 | "viewingMemberVoted": false, 6 | "subscribed": false, 7 | "fogbugz": "", 8 | "checkItems": 0, 9 | "checkItemsChecked": 0, 10 | "comments": 1, 11 | "attachments": 0, 12 | "description": false, 13 | "due": null, 14 | "dueComplete": false 15 | }, 16 | "checkItemStates": [], 17 | "closed": false, 18 | "dateLastActivity": "2016-12-24T18:47:22.650Z", 19 | "desc": "", 20 | "descData": null, 21 | "due": null, 22 | "dueComplete": false, 23 | "email": null, 24 | "idBoard": "55586bf9fd02d8c66074321a", 25 | "idChecklists": [], 26 | "idLabels": [ 27 | "559e5b4419ad3a5dc2c17ece", 28 | "57e7a35684e677fd368a013b" 29 | ], 30 | "idList": "55586d963eab57c21df17371", 31 | "idMembers": [], 32 | "idShort": 269, 33 | "idAttachmentCover": null, 34 | "manualCoverAttachment": false, 35 | "labels": [ 36 | { 37 | "id": "559e5b4419ad3a5dc2c17ece", 38 | "idBoard": "55586bf9fd02d8c66074321a", 39 | "name": "dmd", 40 | "color": "lime", 41 | "uses": 69 42 | }, 43 | { 44 | "id": "57e7a35684e677fd368a013b", 45 | "idBoard": "55586bf9fd02d8c66074321a", 46 | "name": "2.072", 47 | "color": "pink", 48 | "uses": 18 49 | } 50 | ], 51 | "name": "Issue 16794 - .deb not working on Ubuntu 16.10 because of default PIE linking", 52 | "pos": 1513471, 53 | "shortUrl": "https://trello.com/c/E1LU0SAe", 54 | "url": "https://trello.com/c/E1LU0SAe/269-issue-16794-deb-not-working-on-ubuntu-16-10-because-of-default-pie-linking" 55 | } 56 | -------------------------------------------------------------------------------- /data/payloads/trello_1_cards_583f517a333add7c28e0cec7_actions?filter=commentCard&key=01234&token=abcde: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "583f517b91413ef81f1f9d34", 4 | "idMemberCreator": "56eee6e5e6b4acfe9db19a2f", 5 | "data": { 6 | "list": { 7 | "name": "Heap", 8 | "id": "55586d948525e4cf11164123" 9 | }, 10 | "board": { 11 | "shortLink": "XoFjxiqG", 12 | "name": "Active", 13 | "id": "55586bf9fd02d8c66074321a" 14 | }, 15 | "card": { 16 | "shortLink": "E1LU0SAe", 17 | "idShort": 269, 18 | "name": "Issue 16794", 19 | "id": "583f517a333add7c28e0cec7" 20 | }, 21 | "text": "- [Issue 16794 - dmd not working on Ubuntu 16.10 because of default PIE linking](https://issues.dlang.org/show_bug.cgi?id=16794)\n", 22 | "textData": { 23 | "emoji": {} 24 | }, 25 | "dateLastEdited": "2016-12-24T18:47:22.654Z" 26 | }, 27 | "type": "commentCard", 28 | "date": "2016-11-30T22:23:55.976Z", 29 | "memberCreator": { 30 | "id": "56eee6e5e6b4acfe9db19a2f", 31 | "avatarHash": null, 32 | "fullName": "dlang-bot", 33 | "initials": "D", 34 | "username": "dlangbot" 35 | } 36 | } 37 | ] 38 | -------------------------------------------------------------------------------- /data/payloads/trello_1_cards_583f517a333add7c28e0cec7_idList?value=55586d9b810fb97f9459df7d&key=01234&token=abcde: -------------------------------------------------------------------------------- 1 | { 2 | "id": "583f517a333add7c28e0cec7", 3 | "badges": { 4 | "votes": 0, 5 | "viewingMemberVoted": false, 6 | "subscribed": false, 7 | "fogbugz": "", 8 | "checkItems": 0, 9 | "checkItemsChecked": 0, 10 | "comments": 1, 11 | "attachments": 0, 12 | "description": false, 13 | "due": null, 14 | "dueComplete": false 15 | }, 16 | "checkItemStates": [], 17 | "closed": false, 18 | "dateLastActivity": "2016-12-24T20:04:39.793Z", 19 | "desc": "", 20 | "descData": null, 21 | "due": null, 22 | "dueComplete": false, 23 | "email": null, 24 | "idBoard": "55586bf9fd02d8c66074321a", 25 | "idChecklists": [], 26 | "idLabels": [ 27 | "559e5b4419ad3a5dc2c17ece", 28 | "57e7a35684e677fd368a013b" 29 | ], 30 | "idList": "55586d9b810fb97f9459df7d", 31 | "idMembers": [], 32 | "idShort": 269, 33 | "idAttachmentCover": null, 34 | "manualCoverAttachment": false, 35 | "labels": [ 36 | { 37 | "id": "559e5b4419ad3a5dc2c17ece", 38 | "idBoard": "55586bf9fd02d8c66074321a", 39 | "name": "dmd", 40 | "color": "lime", 41 | "uses": 69 42 | }, 43 | { 44 | "id": "57e7a35684e677fd368a013b", 45 | "idBoard": "55586bf9fd02d8c66074321a", 46 | "name": "2.072", 47 | "color": "pink", 48 | "uses": 18 49 | } 50 | ], 51 | "name": "Issue 16794 - .deb not working on Ubuntu 16.10 because of default PIE linking", 52 | "pos": 1513471, 53 | "shortUrl": "https://trello.com/c/E1LU0SAe", 54 | "url": "https://trello.com/c/E1LU0SAe/269-issue-16794-deb-not-working-on-ubuntu-16-10-because-of-default-pie-linking" 55 | } 56 | -------------------------------------------------------------------------------- /data/payloads/trello_1_cards_583f517a333add7c28e0cec7_pos?value=bottom&key=01234&token=abcde: -------------------------------------------------------------------------------- 1 | { 2 | "id": "583f517a333add7c28e0cec7", 3 | "badges": { 4 | "votes": 0, 5 | "viewingMemberVoted": false, 6 | "subscribed": false, 7 | "fogbugz": "", 8 | "checkItems": 0, 9 | "checkItemsChecked": 0, 10 | "comments": 1, 11 | "attachments": 0, 12 | "description": false, 13 | "due": null, 14 | "dueComplete": false 15 | }, 16 | "checkItemStates": [], 17 | "closed": false, 18 | "dateLastActivity": "2016-12-24T20:05:53.515Z", 19 | "desc": "", 20 | "descData": null, 21 | "due": null, 22 | "dueComplete": false, 23 | "email": null, 24 | "idBoard": "55586bf9fd02d8c66074321a", 25 | "idChecklists": [], 26 | "idLabels": [ 27 | "559e5b4419ad3a5dc2c17ece", 28 | "57e7a35684e677fd368a013b" 29 | ], 30 | "idList": "55586d9b810fb97f9459df7d", 31 | "idMembers": [], 32 | "idShort": 269, 33 | "idAttachmentCover": null, 34 | "manualCoverAttachment": false, 35 | "labels": [ 36 | { 37 | "id": "559e5b4419ad3a5dc2c17ece", 38 | "idBoard": "55586bf9fd02d8c66074321a", 39 | "name": "dmd", 40 | "color": "lime", 41 | "uses": 69 42 | }, 43 | { 44 | "id": "57e7a35684e677fd368a013b", 45 | "idBoard": "55586bf9fd02d8c66074321a", 46 | "name": "2.072", 47 | "color": "pink", 48 | "uses": 18 49 | } 50 | ], 51 | "name": "Issue 16794 - .deb not working on Ubuntu 16.10 because of default PIE linking", 52 | "pos": 1267711, 53 | "shortUrl": "https://trello.com/c/E1LU0SAe", 54 | "url": "https://trello.com/c/E1LU0SAe/269-issue-16794-deb-not-working-on-ubuntu-16-10-because-of-default-pie-linking" 55 | } 56 | -------------------------------------------------------------------------------- /data/payloads/trello_1_search?query=name: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dlang/dlang-bot/878e7f0f6bff860083d499716fcc465b3e4fed00/data/payloads/trello_1_search?query=name -------------------------------------------------------------------------------- /data/payloads/trello_1_search?query=name:%22Issue%2016794%22&key=01234&token=abcde: -------------------------------------------------------------------------------- 1 | { 2 | "options": { 3 | "terms": [ 4 | { 5 | "fields": [ 6 | "name" 7 | ], 8 | "text": "Issue 16794", 9 | "phrase": true, 10 | "partial": false 11 | } 12 | ], 13 | "modifiers": [], 14 | "modelTypes": [ 15 | "actions", 16 | "cards", 17 | "boards", 18 | "organizations", 19 | "members" 20 | ], 21 | "partial": false 22 | }, 23 | "boards": [], 24 | "cards": [ 25 | { 26 | "id": "583f517a333add7c28e0cec7", 27 | "badges": { 28 | "votes": 0, 29 | "viewingMemberVoted": false, 30 | "subscribed": false, 31 | "fogbugz": "", 32 | "checkItems": 0, 33 | "checkItemsChecked": 0, 34 | "comments": 1, 35 | "attachments": 0, 36 | "description": false, 37 | "due": null, 38 | "dueComplete": false 39 | }, 40 | "checkItemStates": [], 41 | "closed": false, 42 | "dueComplete": false, 43 | "dateLastActivity": "2016-12-24T18:04:33.298Z", 44 | "desc": "", 45 | "descData": null, 46 | "due": null, 47 | "email": null, 48 | "idBoard": "55586bf9fd02d8c66074321a", 49 | "idChecklists": [], 50 | "idList": "55586d9b810fb97f9459df7d", 51 | "idMembers": [], 52 | "idMembersVoted": [], 53 | "idShort": 269, 54 | "idAttachmentCover": null, 55 | "manualCoverAttachment": false, 56 | "labels": [ 57 | { 58 | "id": "559e5b4419ad3a5dc2c17ece", 59 | "idBoard": "55586bf9fd02d8c66074321a", 60 | "name": "dmd", 61 | "color": "lime", 62 | "uses": 69 63 | }, 64 | { 65 | "id": "57e7a35684e677fd368a013b", 66 | "idBoard": "55586bf9fd02d8c66074321a", 67 | "name": "2.072", 68 | "color": "pink", 69 | "uses": 18 70 | } 71 | ], 72 | "idLabels": [ 73 | "559e5b4419ad3a5dc2c17ece", 74 | "57e7a35684e677fd368a013b" 75 | ], 76 | "name": "Issue 16794 - .deb not working on Ubuntu 16.10 because of default PIE linking", 77 | "pos": 1267711, 78 | "shortLink": "E1LU0SAe", 79 | "shortUrl": "https://trello.com/c/E1LU0SAe", 80 | "subscribed": false, 81 | "url": "https://trello.com/c/E1LU0SAe/269-issue-16794-deb-not-working-on-ubuntu-16-10-because-of-default-pie-linking" 82 | } 83 | ], 84 | "organizations": [], 85 | "members": [] 86 | } 87 | -------------------------------------------------------------------------------- /data/payloads/trello_1_search?query=name:%22Issue%2017564%22&key=01234&token=abcde: -------------------------------------------------------------------------------- 1 | { 2 | "options": { 3 | "terms": [ 4 | { 5 | "fields": [ 6 | "name" 7 | ], 8 | "text": "Issue 17654", 9 | "phrase": true, 10 | "partial": false 11 | } 12 | ], 13 | "modifiers": [], 14 | "modelTypes": [ 15 | "actions", 16 | "cards", 17 | "boards", 18 | "organizations", 19 | "members" 20 | ], 21 | "partial": false 22 | }, 23 | "boards": [], 24 | "cards": [], 25 | "organizations": [], 26 | "members": [] 27 | } 28 | 29 | -------------------------------------------------------------------------------- /data/payloads/trello_1_search?query=name:%22Issue%208573%22&key=01234&token=abcde: -------------------------------------------------------------------------------- 1 | { 2 | "options": { 3 | "terms": [ 4 | { 5 | "fields": [ 6 | "name" 7 | ], 8 | "text": "Issue 8573", 9 | "phrase": true, 10 | "partial": false 11 | } 12 | ], 13 | "modifiers": [], 14 | "modelTypes": [ 15 | "actions", 16 | "cards", 17 | "boards", 18 | "organizations", 19 | "members" 20 | ], 21 | "partial": false 22 | }, 23 | "boards": [], 24 | "cards": [], 25 | "organizations": [], 26 | "members": [] 27 | } 28 | 29 | -------------------------------------------------------------------------------- /data/payloads/trello_1_search?query=name:%22Issue%208574%22&key=01234&token=abcde: -------------------------------------------------------------------------------- 1 | { 2 | "options": { 3 | "terms": [ 4 | { 5 | "fields": [ 6 | "name" 7 | ], 8 | "text": "Issue 8574", 9 | "phrase": true, 10 | "partial": false 11 | } 12 | ], 13 | "modifiers": [], 14 | "modelTypes": [ 15 | "actions", 16 | "cards", 17 | "boards", 18 | "organizations", 19 | "members" 20 | ], 21 | "partial": false 22 | }, 23 | "boards": [], 24 | "cards": [], 25 | "organizations": [], 26 | "members": [] 27 | } 28 | 29 | -------------------------------------------------------------------------------- /dub.sdl: -------------------------------------------------------------------------------- 1 | name "dlang-bot" 2 | description "dlang-bot for automated bugzilla, github, and trello references" 3 | copyright "Copyright © 2015, Martin Nowak" 4 | authors "Martin Nowak" 5 | dependency "vibe-d" version="~>0.9.0" 6 | dependency "ae:sqlite" version="==0.0.3228" 7 | dependency "vibe-d:tls" version="*" 8 | dependency "ae" version="==0.0.3228" 9 | targetType "executable" 10 | 11 | configuration "executable" { 12 | } 13 | 14 | configuration "unittest" { 15 | dependency "unit-threaded" version="~>1.0" 16 | mainSourceFile "ut.d" 17 | preBuildCommands "dub run unit-threaded -c gen_ut_main -- -f ut.d" 18 | sourcePaths "source" "test" 19 | importPaths "source" "test" 20 | } 21 | -------------------------------------------------------------------------------- /dub.selections.json: -------------------------------------------------------------------------------- 1 | { 2 | "fileVersion": 1, 3 | "versions": { 4 | "ae": "0.0.3228", 5 | "botan": "1.12.19", 6 | "botan-math": "1.0.3", 7 | "diet-ng": "1.7.5", 8 | "eventcore": "0.9.14", 9 | "libasync": "0.8.6", 10 | "memutils": "1.0.4", 11 | "mir-linux-kernel": "1.0.1", 12 | "openssl": "1.1.6+1.0.1g", 13 | "stdx-allocator": "2.77.5", 14 | "taggedalgebraic": "0.11.22", 15 | "unit-threaded": "1.0.15", 16 | "vibe-core": "1.18.0", 17 | "vibe-d": "0.9.3" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /public/css/style.min.css: -------------------------------------------------------------------------------- 1 | /*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}.container{position:relative;width:100%;max-width:960px;margin:0 auto;padding:0 20px;box-sizing:border-box}.column,.columns{width:100%;float:left;box-sizing:border-box}@media(min-width:400px){.container{width:85%;padding:0}}@media(min-width:550px){.container{width:80%}.column,.columns{margin-left:4%}.column:first-child,.columns:first-child{margin-left:0}.one.column,.one.columns{width:4.66666666667%}.two.columns{width:13.3333333333%}.three.columns{width:22%}.four.columns{width:30.6666666667%}.five.columns{width:39.3333333333%}.six.columns{width:48%}.seven.columns{width:56.6666666667%}.eight.columns{width:65.3333333333%}.nine.columns{width:74.0}.ten.columns{width:82.6666666667%}.eleven.columns{width:91.3333333333%}.twelve.columns{width:100%;margin-left:0}.one-third.column{width:30.6666666667%}.two-thirds.column{width:65.3333333333%}.one-half.column{width:48%}.offset-by-one.column,.offset-by-one.columns{margin-left:8.66666666667%}.offset-by-two.column,.offset-by-two.columns{margin-left:17.3333333333%}.offset-by-three.column,.offset-by-three.columns{margin-left:26%}.offset-by-four.column,.offset-by-four.columns{margin-left:34.6666666667%}.offset-by-five.column,.offset-by-five.columns{margin-left:43.3333333333%}.offset-by-six.column,.offset-by-six.columns{margin-left:52%}.offset-by-seven.column,.offset-by-seven.columns{margin-left:60.6666666667%}.offset-by-eight.column,.offset-by-eight.columns{margin-left:69.3333333333%}.offset-by-nine.column,.offset-by-nine.columns{margin-left:78.0}.offset-by-ten.column,.offset-by-ten.columns{margin-left:86.6666666667%}.offset-by-eleven.column,.offset-by-eleven.columns{margin-left:95.3333333333%}.offset-by-one-third.column,.offset-by-one-third.columns{margin-left:34.6666666667%}.offset-by-two-thirds.column,.offset-by-two-thirds.columns{margin-left:69.3333333333%}.offset-by-one-half.column,.offset-by-one-half.columns{margin-left:52%}}html{font-size:62.5%}body{font-size:1.5em;line-height:1.6;font-weight:400;font-family:"Raleway","HelveticaNeue","Helvetica Neue",Helvetica,Arial,sans-serif;color:#222}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:2rem;font-weight:300}h1{font-size:4.0rem;line-height:1.2;letter-spacing:-.1rem}h2{font-size:3.6rem;line-height:1.25;letter-spacing:-.1rem}h3{font-size:3.0rem;line-height:1.3;letter-spacing:-.1rem}h4{font-size:2.4rem;line-height:1.35;letter-spacing:-.08rem}h5{font-size:1.8rem;line-height:1.5;letter-spacing:-.05rem}h6{font-size:1.5rem;line-height:1.6;letter-spacing:0}@media(min-width:550px){h1{font-size:5.0rem}h2{font-size:4.2rem}h3{font-size:3.6rem}h4{font-size:3.0rem}h5{font-size:2.4rem}h6{font-size:1.5rem}}p{margin-top:0}a{color:#1eaedb}a:hover{color:#0fa0ce}.button,button,input[type="submit"],input[type="reset"],input[type="button"]{display:inline-block;height:38px;padding:0 30px;color:#555;text-align:center;font-size:11px;font-weight:600;line-height:38px;letter-spacing:.1rem;text-transform:uppercase;text-decoration:none;white-space:nowrap;background-color:transparent;border-radius:4px;border:1px solid #bbb;cursor:pointer;box-sizing:border-box}.button:hover,button:hover,input[type="submit"]:hover,input[type="reset"]:hover,input[type="button"]:hover,.button:focus,button:focus,input[type="submit"]:focus,input[type="reset"]:focus,input[type="button"]:focus{color:#333;border-color:#888;outline:0}.button.button-primary,button.button-primary,input[type="submit"].button-primary,input[type="reset"].button-primary,input[type="button"].button-primary{color:#FFF;background-color:#33c3f0;border-color:#33c3f0}.button.button-primary:hover,button.button-primary:hover,input[type="submit"].button-primary:hover,input[type="reset"].button-primary:hover,input[type="button"].button-primary:hover,.button.button-primary:focus,button.button-primary:focus,input[type="submit"].button-primary:focus,input[type="reset"].button-primary:focus,input[type="button"].button-primary:focus{color:#FFF;background-color:#1eaedb;border-color:#1eaedb}input[type="email"],input[type="number"],input[type="search"],input[type="text"],input[type="tel"],input[type="url"],input[type="password"],textarea,select{height:38px;padding:6px 10px;background-color:#fff;border:1px solid #d1d1d1;border-radius:4px;box-shadow:none;box-sizing:border-box}input[type="email"],input[type="number"],input[type="search"],input[type="text"],input[type="tel"],input[type="url"],input[type="password"],textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none}textarea{min-height:65px;padding-top:6px;padding-bottom:6px}input[type="email"]:focus,input[type="number"]:focus,input[type="search"]:focus,input[type="text"]:focus,input[type="tel"]:focus,input[type="url"]:focus,input[type="password"]:focus,textarea:focus,select:focus{border:1px solid #33c3f0;outline:0}label,legend{display:block;margin-bottom:.5rem;font-weight:600}fieldset{padding:0;border-width:0}input[type="checkbox"],input[type="radio"]{display:inline}label>.label-body{display:inline-block;margin-left:.5rem;font-weight:normal}ul{list-style:circle inside}ol{list-style:decimal inside}ol,ul{padding-left:0;margin-top:0}ul ul,ul ol,ol ol,ol ul{margin:1.5rem 0 1.5rem 3rem;font-size:90%}li{margin-bottom:1rem}code{padding:.2rem .5rem;margin:0 .2rem;font-size:90%;white-space:nowrap;background:#f1f1f1;border:1px solid #e1e1e1;border-radius:4px}pre>code{display:block;padding:1rem 1.5rem;white-space:pre}th,td{padding:12px 15px;text-align:left;border-bottom:1px solid #e1e1e1}th:first-child,td:first-child{padding-left:0}th:last-child,td:last-child{padding-right:0}button,.button{margin-bottom:1rem}input,textarea,select,fieldset{margin-bottom:1.5rem}pre,blockquote,dl,figure,table,p,ul,ol,form{margin-bottom:2.5rem}.u-full-width{width:100%;box-sizing:border-box}.u-max-full-width{max-width:100%;box-sizing:border-box}.u-pull-right{float:right}.u-pull-left{float:left}hr{margin-top:3rem;margin-bottom:3.5rem;border-width:0;border-top:1px solid #e1e1e1}.container:after,.row:after,.u-cf{content:"";display:table;clear:both} -------------------------------------------------------------------------------- /public/img/dlang_bot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dlang/dlang-bot/878e7f0f6bff860083d499716fcc465b3e4fed00/public/img/dlang_bot.png -------------------------------------------------------------------------------- /public/img/dlang_bot_bugzilla_comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dlang/dlang-bot/878e7f0f6bff860083d499716fcc465b3e4fed00/public/img/dlang_bot_bugzilla_comment.png -------------------------------------------------------------------------------- /public/img/dlang_bot_github_comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dlang/dlang-bot/878e7f0f6bff860083d499716fcc465b3e4fed00/public/img/dlang_bot_github_comment.png -------------------------------------------------------------------------------- /public/img/dlang_bot_trello_comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dlang/dlang-bot/878e7f0f6bff860083d499716fcc465b3e4fed00/public/img/dlang_bot_trello_comment.png -------------------------------------------------------------------------------- /public/img/dlang_rocket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dlang/dlang-bot/878e7f0f6bff860083d499716fcc465b3e4fed00/public/img/dlang_rocket.png -------------------------------------------------------------------------------- /source/dlangbot/database.d: -------------------------------------------------------------------------------- 1 | /** 2 | Implements a database to store the total number 3 | of bugs fixed by a github account and their 4 | associated severity. 5 | */ 6 | module dlangbot.database; 7 | 8 | import ae.sys.database : Database; 9 | 10 | private Database db; 11 | private string[] severities = ["enhancement", "trivial", "minor", 12 | "normal", "major", "critical", "blocker", "regression"]; 13 | enum BugzillaFixedIssues_schema = q"SQL 14 | CREATE TABLE [BugzillaFixedIssues] ( 15 | [IssueNumber] INTEGER PRIMARY KEY NOT NULL, 16 | [Severity] TEXT NOT NULL, 17 | [GithubId] INTEGER NOT NULL, 18 | [Time] INTEGER NOT NULL 19 | ); 20 | CREATE TABLE [GithubNickname] ( 21 | [GithubId] INTEGER PRIMARY KEY NOT NULL, 22 | [Name] TEXT NOT NULL 23 | ); 24 | SQL"; 25 | 26 | /** 27 | Checks whether a database file already exists. 28 | If that is the case, it returns the database, 29 | otherwise it creates it. 30 | */ 31 | private Database initDatabase(string databasePath) 32 | { 33 | import std.file : exists; 34 | import ae.sys.file : ensurePathExists; 35 | 36 | version(unittest) 37 | { 38 | if (databasePath == ":memory:") 39 | return Database(databasePath, [BugzillaFixedIssues_schema,]); 40 | } 41 | 42 | if (databasePath.exists) 43 | return Database(databasePath, [BugzillaFixedIssues_schema,]); 44 | 45 | ensurePathExists(databasePath); 46 | return Database(databasePath, [BugzillaFixedIssues_schema,]); 47 | } 48 | 49 | Database getDatabase() 50 | { 51 | return db; 52 | } 53 | 54 | /** 55 | Inserts a new entry in the database for a fixed issue 56 | */ 57 | void updateBugzillaFixedIssuesTable(string userName, ulong userId, int issueNumber, string severity) 58 | { 59 | 60 | // Github usernames may change, therefore make sure that the most 61 | // recent nickname is inserted into the database. This will make 62 | // it easier to print the leaderboard. 63 | db.stmt!" 64 | INSERT OR REPLACE INTO [GithubNickname] ([GithubId], [Name]) VALUES (?, ?)" 65 | .exec(userId, userName); 66 | 67 | // Insert actual event - if an issue is reopened, the original author loses 68 | // the points. This should, normally, not happen, since the policy is to open 69 | // a new bug report in case an issue was partially fixed. 70 | db.stmt!" 71 | INSERT OR REPLACE INTO [BugzillaFixedIssues] ([IssueNumber], [Severity], [GithubId], [Time]) 72 | VALUES (?, ?, ?, strftime('%s','now'))" 73 | .exec(issueNumber, severity, userId); 74 | } 75 | 76 | /** 77 | Returns a string table that contains the contributor name 78 | and its total points. The records are sorted by total points. 79 | A sample of how the string matrix will look like: 80 | [["John", "23"], ["Gigi", "12"], ["Mimi", "5"]]. 81 | 82 | `startDate` and `endData` designate a time range 83 | to select events from. Their format is: "YYYY-MM-DD HH:MM:SS.XXXXXX" 84 | */ 85 | string[][] getContributorsStats(string startDate, string endDate) 86 | { 87 | import std.conv : to; 88 | import std.algorithm.comparison : among; 89 | 90 | string[][] ret; 91 | 92 | enum query = " 93 | SELECT [GithubId], SUM(Points) AS [TotalPoints] 94 | FROM 95 | (SELECT [GithubId], CASE [Severity] 96 | WHEN \"enhancement\" THEN 10 97 | WHEN \"trivial\" THEN 10 98 | WHEN \"minor\" THEN 15 99 | WHEN \"normal\" THEN 20 100 | WHEN \"major\" THEN 50 101 | WHEN \"critical\" THEN 75 102 | WHEN \"blocker\" THEN 75 103 | WHEN \"regression\" THEN 100 104 | END AS [Points] 105 | FROM [BugzillaFixedIssues] 106 | WHERE datetime([Time], 'unixepoch') BETWEEN ? AND ? 107 | ) 108 | GROUP BY [GithubId] 109 | ORDER BY [TotalPoints] DESC;"; 110 | 111 | // first, sum the points of each individual github id 112 | foreach(int gid, int points; db.stmt!query.iterate(startDate, endDate)) 113 | { 114 | // then, get the human readable name of each github account 115 | // and construct the string table. 116 | string username; 117 | foreach(string name; db.stmt!" 118 | SELECT [Name] FROM [GithubNickname] 119 | WHERE [GithubId]=?".iterate(gid)) 120 | username = name; 121 | 122 | if (username.among("ibuclaw", "WalterBright", "RazvanN7", "CyberShadow", 123 | "kinke", "andralex", "maxhaton", "atilaneves", "mdparker", 124 | "Geod24", "dkorpel")) 125 | username = username ~ "*"; 126 | ret ~= [username, to!string(points)]; 127 | } 128 | 129 | return ret; 130 | } 131 | 132 | static this() 133 | { 134 | version(unittest) 135 | { 136 | enum databasePath = ":memory:"; 137 | } 138 | else 139 | { 140 | enum databasePath = "var/db.s3db"; 141 | } 142 | db = initDatabase(databasePath); 143 | } 144 | -------------------------------------------------------------------------------- /source/dlangbot/hcloud_api.d: -------------------------------------------------------------------------------- 1 | module dlangbot.hcloud_api; 2 | 3 | import std.algorithm; 4 | import std.array : array, empty, front; 5 | import std.datetime.systime; 6 | import std.string : format; 7 | import std.typecons : Nullable; 8 | 9 | import vibe.core.log : logError, logInfo; 10 | import vibe.data.json : byName, Name = name, deserializeJson, serializeToJson, Json; 11 | import vibe.http.common : enforceHTTP, HTTPMethod, HTTPStatus; 12 | import vibe.stream.operations : readAllUTF8; 13 | 14 | import dlangbot.utils : request, expectOK; 15 | 16 | shared string hcloudAPIURL = "https://api.hetzner.cloud/v1"; 17 | shared string hcloudAuth; 18 | 19 | //============================================================================== 20 | // Hetzner Cloud (KVM) servers 21 | //============================================================================== 22 | 23 | struct Server 24 | { 25 | ulong id; 26 | string name; 27 | enum Status { running, initializing, starting, stopping, off, deleting, migrating, rebuilding, unknown } 28 | @byName Status status; 29 | SysTime created; 30 | 31 | void decommission() 32 | { 33 | logInfo("decommission hcloud server %s", name); 34 | hcloudDELETE("/servers/%s".format(id)); 35 | } 36 | 37 | @property bool healthy() const 38 | { 39 | import std.range : only; 40 | 41 | with (Status) 42 | return only(running, initializing, starting, migrating).canFind(status); 43 | } 44 | } 45 | 46 | struct Image 47 | { 48 | enum Type { system, snapshot, backup } 49 | ulong id; 50 | string description; 51 | } 52 | 53 | Server[] servers() 54 | { 55 | return hcloudGET("/servers") 56 | .readJson["servers"] 57 | .deserializeJson!(typeof(return)); 58 | } 59 | 60 | Server createServer(string name, string serverType, Image image) 61 | { 62 | import std.conv : to; 63 | 64 | logInfo("provision hcloud %s server %s with image %s", serverType, name, image.description); 65 | 66 | return hcloudPOST("/servers", 67 | [ 68 | "name": name, 69 | "server_type": serverType, 70 | "image": image.id.to!string, 71 | ]) 72 | .readJson["server"] 73 | .deserializeJson!(typeof(return)); 74 | } 75 | 76 | Image[] images() 77 | { 78 | return hcloudGET("/images?sort=created:desc") 79 | .readJson 80 | .deserializeJson!(typeof(return)); 81 | } 82 | 83 | Image[] images(Image.Type type) 84 | { 85 | import std.conv : to; 86 | import vibe.textfilter.urlencode : urlEncode; 87 | 88 | return hcloudGET("/images?sort=created:desc&type="~type.to!string.urlEncode) 89 | .readJson["images"] 90 | .deserializeJson!(typeof(return)); 91 | } 92 | 93 | private: 94 | 95 | auto hcloudGET(string path) 96 | { 97 | return request(hcloudAPIURL ~ path, (scope req) { 98 | req.headers["Authorization"] = hcloudAuth; 99 | }).expectOK; 100 | } 101 | 102 | auto hcloudPOST(T...)(string path, T arg) 103 | if (T.length <= 1) 104 | { 105 | return request(hcloudAPIURL ~ path, (scope req) { 106 | req.headers["Authorization"] = hcloudAuth; 107 | req.method = HTTPMethod.POST; 108 | req.writeJsonBody(arg); 109 | }).expectOK; 110 | } 111 | 112 | void hcloudDELETE(string path) 113 | { 114 | request(hcloudAPIURL ~ path, (scope req) { 115 | req.headers["Authorization"] = hcloudAuth; 116 | req.method = HTTPMethod.DELETE; 117 | }).expectOK.dropBody; 118 | } 119 | -------------------------------------------------------------------------------- /source/dlangbot/twitter.d: -------------------------------------------------------------------------------- 1 | module dlangbot.twitter; 2 | 3 | import vibe.core.log; 4 | import vibe.http.common : HTTPMethod; 5 | 6 | string twitterURL = "https://api.twitter.com/1.1"; 7 | bool twitterEnabled; 8 | 9 | // send a tweet 10 | void tweet(string message) 11 | { 12 | OAuth.Parameters parameters; 13 | parameters["status"] = message; 14 | logInfo("Sending tweet: %s", message); 15 | scope res = twitterRequest("/statuses/update.json", parameters); 16 | //logInfo("Tweet sent: %d, %s", res.statusCode, res.statusPhrase); 17 | } 18 | 19 | // send a signed request with the Twitter API 20 | auto twitterRequest(string path, OAuth.Parameters parameters, HTTPMethod method = HTTPMethod.POST) 21 | { 22 | import vibe.http.client : requestHTTP; 23 | import vibe.stream.operations : readAllUTF8; 24 | import std.conv : to; 25 | 26 | string url = twitterURL ~ path; 27 | string queryString = oAuth.queryString(parameters); 28 | logDebug("Sending request to TwitterAPI: %s", queryString); 29 | 30 | scope res = requestHTTP(url ~ "?" ~ queryString, (scope req) { 31 | req.method = method; 32 | req.headers["Authorization"] = oAuth.requestHeader(url, method.to!string, parameters); 33 | }); 34 | logInfo("%s %s, %s - %s\n", method, url, res.statusPhrase, res.bodyReader.readAllUTF8); 35 | return res; 36 | } 37 | 38 | OAuth oAuth; 39 | 40 | // See: https://developer.twitter.com/en/docs/basics/authentication/guides/creating-a-signature 41 | struct OAuth 42 | { 43 | import vibe.utils.dictionarylist : DictionaryList; 44 | alias Parameters = DictionaryList!(string, true, 8); 45 | 46 | @("multi-value-sortedness-of-parameters") 47 | unittest 48 | { 49 | import std.array : array; 50 | import std.algorithm.sorting : sort; 51 | import std.algorithm.iteration : map; 52 | import std.typecons : tuple; 53 | 54 | Parameters params; 55 | params["foo"] = "bar"; 56 | params.addField("foo", "1bar"); 57 | params.addField("foo", "bar2"); 58 | assert(params.byKeyValue.array.sort.release == [ 59 | tuple("foo", "1bar"), 60 | tuple("foo", "bar"), 61 | tuple("foo", "bar2") 62 | ]); 63 | } 64 | 65 | struct Config 66 | { 67 | string consumerKey; 68 | string consumerKeySecret; 69 | string accessToken; 70 | string accessTokenSecret; 71 | } 72 | Config config; 73 | 74 | auto prepare(string url, string method, Parameters parameters) 75 | { 76 | import std.conv : to; 77 | import std.datetime.systime : Clock; 78 | Parameters oauthParams; 79 | oauthParams["oauth_consumer_key"] = config.consumerKey; 80 | oauthParams["oauth_token"] = config.accessToken; 81 | oauthParams["oauth_timestamp"] = Clock.currTime.toUnixTime.to!string; 82 | oauthParams["oauth_nonce"] = Clock.currTime.toUnixTime.to!string; 83 | oauthParams["oauth_version"] = "1.0"; 84 | oauthParams["oauth_signature_method"] = "HMAC-SHA1"; 85 | oauthParams["oauth_signature"] = sign(method, url, parameters, oauthParams); 86 | return oauthParams; 87 | } 88 | 89 | // https://developer.twitter.com/en/docs/basics/authentication/guides/creating-a-signature 90 | string sign(string method, string requestUrl, Parameters[] parameters...) 91 | { 92 | import std.array : array; 93 | import std.algorithm.iteration : joiner, map; 94 | import std.algorithm.sorting : sort; 95 | import std.base64 : Base64; 96 | import std.conv : text; 97 | import std.digest.hmac : hmac; 98 | import std.digest.sha : SHA1; 99 | import std.range : chain; 100 | import std.string : representation; 101 | 102 | auto query = parameters.map!(a => a.byKeyValue.array) 103 | .joiner 104 | .array 105 | .sort 106 | .map!(a => chain(a.key.asEncoded, "=", a.value.asEncoded)) 107 | .joiner("&"); 108 | 109 | auto url = text(method.asEncoded, "&", requestUrl.asEncoded, "&", query.asEncoded); 110 | auto key = text(config.consumerKeySecret.asEncoded, "&", config.accessTokenSecret.asEncoded); 111 | auto digest = hmac!SHA1(url.representation, key.representation); 112 | return Base64.encode(digest); 113 | } 114 | 115 | @("oauth-signature-check") 116 | unittest 117 | { 118 | // Example from https://dev.twitter.com/oauth/overview/creating-signatures 119 | OAuth session; 120 | session.config.consumerKeySecret = "kAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw"; 121 | session.config.accessTokenSecret = "LswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE"; 122 | 123 | Parameters pathParams, queryParams, oauthConfig; 124 | pathParams["include_entities"] = "true"; 125 | queryParams["status"] = "Hello Ladies + Gentlemen, a signed OAuth request!"; 126 | 127 | oauthConfig["oauth_consumer_key"] = "xvz1evFS4wEEPTGEFPHBog"; 128 | oauthConfig["oauth_nonce"] = "kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg"; 129 | oauthConfig["oauth_signature_method"] = "HMAC-SHA1"; 130 | oauthConfig["oauth_timestamp"] = "1318622958"; 131 | oauthConfig["oauth_token"] = "370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb"; 132 | oauthConfig["oauth_version"] = "1.0"; 133 | 134 | auto signature = session.sign("POST", "https://api.twitter.com/1/statuses/update.json", pathParams, queryParams, oauthConfig); 135 | assert(signature == "tnnArxj06cWHq44gCs1OSKk/jLY="); 136 | } 137 | 138 | // Converts OAuth parameters into a string suitable for the "Authorization" header. 139 | string makeHeader(Parameters oauthParams) 140 | { 141 | import std.algorithm.iteration : joiner, map; 142 | import std.conv : text; 143 | import std.range : chain; 144 | 145 | auto r = oauthParams.byKeyValue 146 | .map!(a => chain(a.key, `="`, a.value.asEncoded, `"`)) 147 | .joiner(","); 148 | return "OAuth ".text(r); 149 | } 150 | 151 | auto requestHeader(string requestUrl, string method, Parameters parameters) 152 | { 153 | return makeHeader(prepare(requestUrl, method, parameters)); 154 | } 155 | 156 | string queryString(Parameters params) 157 | { 158 | import std.array : join; 159 | import std.algorithm.iteration : map; 160 | return params.byKeyValue.map!(p => encode(p.key) ~ "=" ~ encode(p.value)).join("&"); 161 | } 162 | } 163 | 164 | // https://developer.twitter.com/en/docs/basics/authentication/guides/percent-encoding-parameters.html 165 | static string encode(S)(S s) 166 | { 167 | import std.conv : to; 168 | return asEncoded(s).to!string; 169 | } 170 | 171 | static auto asEncoded(S)(S s) 172 | { 173 | import std.ascii : isAlphaNum; 174 | import std.algorithm.comparison : among; 175 | import std.format : format; 176 | import std.algorithm.iteration : joiner, map; 177 | import std.range : choose, only; 178 | import std.utf : byCodeUnit; 179 | 180 | return s.byCodeUnit 181 | .map!(c => choose(c.isAlphaNum || c.among('-', '.', '_', '~'), c.only, format("%%%2X", c))) 182 | .joiner; 183 | } 184 | 185 | @("check-percentage-uri-encoding") 186 | unittest 187 | { 188 | assert(encode("Ladies + Gentlemen") == "Ladies%20%2B%20Gentlemen"); 189 | assert(encode("An encoded string!") == "An%20encoded%20string%21"); 190 | assert(encode("Dogs, Cats & Mice") == "Dogs%2C%20Cats%20%26%20Mice"); 191 | assert(encode("☃") == "%E2%98%83"); 192 | } 193 | -------------------------------------------------------------------------------- /source/dlangbot/utils.d: -------------------------------------------------------------------------------- 1 | module dlangbot.utils; 2 | 3 | import core.time : seconds; 4 | 5 | import dlangbot.app : runAsync; 6 | 7 | import vibe.http.client : HTTPClientRequest, HTTPClientResponse, HTTPClientSettings; 8 | import vibe.http.common : HTTPStatus; 9 | 10 | import std.datetime : Duration; 11 | import std.format : format; 12 | 13 | version (unittest) int _expectedStatusCode; 14 | 15 | bool expectedStatusCode(int statusCode) nothrow @safe @nogc 16 | { 17 | version (unittest) 18 | { 19 | if (_expectedStatusCode == statusCode) 20 | { 21 | _expectedStatusCode = 0; 22 | return true; 23 | } 24 | } 25 | return false; 26 | } 27 | 28 | private HTTPClientSettings httpClientSettings; 29 | static this() 30 | { 31 | httpClientSettings = new HTTPClientSettings; 32 | httpClientSettings.connectTimeout = 10.seconds; 33 | httpClientSettings.readTimeout = 10.seconds; 34 | } 35 | 36 | HTTPClientResponse expectOK(HTTPClientResponse res) 37 | { 38 | if (res.statusCode / 100 != 2) 39 | { 40 | res.dropBody(); 41 | throw new Exception("HTTP request failed with status %d".format(res.statusCode)); 42 | } 43 | return res; 44 | } 45 | 46 | HTTPClientResponse request( 47 | string url, 48 | scope void delegate(scope HTTPClientRequest) requester = cast(void delegate(scope HTTPClientRequest req))null 49 | ) @safe 50 | { 51 | import vibe.core.log : logWarn; 52 | import vibe.http.client : requestHTTP; 53 | import vibe.http.common : HTTPMethod; 54 | 55 | HTTPMethod method; 56 | auto res = requestHTTP( 57 | url, 58 | (scope req) { 59 | if (requester !is null) 60 | requester(req); 61 | method = req.method; 62 | }, 63 | httpClientSettings); 64 | if (res.statusCode / 100 != 2 && !expectedStatusCode(res.statusCode)) 65 | logWarn("%s %s failed; %s %s.", method, url, res.statusPhrase, res.statusCode); 66 | return res; 67 | } 68 | 69 | void request( 70 | string url, 71 | scope void delegate(scope HTTPClientRequest) requester, 72 | scope void delegate(scope HTTPClientResponse) responder 73 | ) @safe 74 | { 75 | import vibe.core.log : logWarn; 76 | import vibe.http.client : requestHTTP; 77 | import vibe.http.common : HTTPMethod; 78 | 79 | HTTPMethod method; 80 | requestHTTP( 81 | url, 82 | (scope req) { 83 | requester(req); 84 | method = req.method; 85 | }, 86 | (scope res) { 87 | if (res.statusCode / 100 != 2 && !expectedStatusCode(res.statusCode)) 88 | logWarn("%s %s failed; %s %s.", method, url, res.statusPhrase, res.statusCode); 89 | responder(res); 90 | }, 91 | httpClientSettings 92 | ); 93 | 94 | } 95 | 96 | auto runTaskHelper(Fun, Args...)(Fun fun, auto ref Args args) 97 | { 98 | import std.functional : toDelegate; 99 | import vibe.core.core : runTask; 100 | 101 | if (runAsync) 102 | runTask(fun.toDelegate, args); 103 | else 104 | return fun(args); 105 | } 106 | 107 | /** 108 | Thottles subsequent calls to one per `throttleTime`. 109 | 110 | ----- 111 | call(); // direct execution 112 | call(); // will be executed in `throttleTime` (all further request will be ignored) 113 | call(); // ignored 114 | 115 | call(); // direct execution 116 | ... 117 | ----- 118 | 119 | */ 120 | struct Throttler(Fun) 121 | { 122 | import std.typecons : Tuple; 123 | import vibe.core.core : setTimer, Timer; 124 | import std.datetime : Clock, SysTime; 125 | 126 | private: 127 | import std.traits : Parameters; 128 | 129 | alias Args = Parameters!Fun; 130 | static struct ThrottleEntry 131 | { 132 | SysTime startedTime; 133 | Timer timer; 134 | } 135 | 136 | ThrottleEntry[Tuple!Args] timersPerArgs; 137 | 138 | Fun fun; 139 | Duration throttleTime; 140 | 141 | public: 142 | this(Fun fun, Duration throttleTime) 143 | { 144 | this.fun = fun; 145 | this.throttleTime = throttleTime; 146 | } 147 | 148 | void reset() 149 | { 150 | foreach (entry; timersPerArgs) 151 | if (entry.timer) 152 | entry.timer.stop; 153 | 154 | // can't use clear due to 2.070 support 155 | timersPerArgs = null; 156 | } 157 | 158 | void opCall(Args args) 159 | { 160 | auto key = Tuple!Args(args); 161 | auto entry = key in timersPerArgs; 162 | 163 | // the first access fires directly 164 | if (entry is null) 165 | { 166 | ThrottleEntry ep = { 167 | startedTime: Clock.currTime, 168 | }; 169 | timersPerArgs[key] = ep; 170 | return runTaskHelper(fun, args); 171 | } 172 | else 173 | { 174 | // stop if there's a pending timer -> ignore request 175 | if (entry.timer && entry.timer.pending) 176 | return; 177 | 178 | // depending on the time stamp of the last run, 179 | // run directly or start a timer 180 | if (entry.startedTime + throttleTime <= Clock.currTime) 181 | runTaskHelper(fun, args); 182 | else 183 | entry.timer = setTimer(throttleTime, { fun(args); }); 184 | 185 | entry.startedTime = Clock.currTime; 186 | } 187 | } 188 | } 189 | 190 | unittest 191 | { 192 | int[string] cDict; 193 | void count(string key) 194 | { 195 | cDict[key]++; 196 | } 197 | 198 | import core.thread : Thread; 199 | import std.datetime : msecs; 200 | import vibe.core.core : setTimer; 201 | 202 | auto throttleTime = 1.msecs; 203 | auto throttler = Throttler!(typeof(&count))(&count, throttleTime); 204 | 205 | // now no timers are running -> immediate call 206 | throttler("A"); 207 | throttler("B"); 208 | 209 | // there was a call before -> timer set 210 | throttler("A"); 211 | throttler("B"); 212 | 213 | // now timers are running -> ignored 214 | throttler("A"); 215 | throttler("B"); 216 | 217 | // we got throttled and need to wait 218 | assert(cDict == ["A": 1, "B": 1]); 219 | setTimer(throttleTime * 2, () { 220 | assert(cDict == ["A": 2, "B": 2]); 221 | 222 | // now no timers are running -> immediate call 223 | throttler("A"); 224 | throttler("B"); 225 | assert(cDict == ["A": 3, "B": 3]); 226 | 227 | // now timers are running -> delayed 228 | throttler("A"); 229 | throttler("B"); 230 | assert(cDict == ["A": 3, "B": 3]); 231 | }); 232 | } 233 | -------------------------------------------------------------------------------- /source/dlangbot/warnings.d: -------------------------------------------------------------------------------- 1 | module dlangbot.warnings; 2 | 3 | import dlangbot.bugzilla : Issue, IssueRef; 4 | import dlangbot.github : PullRequest; 5 | 6 | import std.algorithm; 7 | 8 | struct UserMessage 9 | { 10 | enum Type { Error, Warning, Info } 11 | Type type; 12 | 13 | string text; 14 | } 15 | 16 | 17 | // check diff length 18 | void checkDiff(in ref PullRequest pr, ref UserMessage[] msgs) 19 | { 20 | } 21 | 22 | 23 | /** 24 | Check bugzilla priority 25 | - enhancement -> changelog entry 26 | - regression/major -> stable 27 | */ 28 | void checkBugzilla(in ref PullRequest pr, ref UserMessage[] msgs, 29 | in Issue[] bugzillaIssues, in IssueRef[] refs) 30 | { 31 | // check for stable 32 | if (pr.base.ref_ != "stable") 33 | { 34 | if (bugzillaIssues.any!(i => i.status.among("NEW", "ASSIGNED", "REOPENED") && 35 | (i.severity.among("critical", "blocker", "regression") || 36 | i.keywords.splitter(", ").canFind("ice")) && 37 | refs.canFind!(r => r.id == i.id && r.fixed))) 38 | { 39 | msgs ~= UserMessage(UserMessage.Type.Warning, 40 | "Regression or critical bug fixes should always target the `stable` branch." ~ 41 | " Learn more about [rebasing to `stable`](https://wiki.dlang.org/Starting_as_a_Contributor#Stable_Branch) or" ~ 42 | " the [D release process](https://github.com/dlang/DIPs/blob/master/DIPs/archive/DIP75.md#branching-strategy)." ~ 43 | "\n\nTo target `stable` perform these two steps:\n\n" ~ 44 | "1) Rebase your branch to `upstream/stable`:\n\n" ~ 45 | "```sh 46 | git rebase --onto upstream/stable upstream/master 47 | ```\n\n" ~ 48 | "2) [Change the base branch of your PR to `stable`](https://blog.github.com/2016-08-15-change-the-base-branch-of-a-pull-request)" 49 | ); 50 | } 51 | } 52 | } 53 | 54 | 55 | UserMessage[] checkForWarnings(in PullRequest pr, in Issue[] bugzillaIssues, in IssueRef[] refs) 56 | { 57 | UserMessage[] msgs; 58 | pr.checkDiff(msgs); 59 | pr.checkBugzilla(msgs, bugzillaIssues, refs); 60 | return msgs; 61 | } 62 | 63 | void printMessages(W)(W app, in UserMessage[] msgs) 64 | { 65 | foreach (msg; msgs) 66 | { 67 | app ~= "- "; 68 | app ~= msg.text; 69 | app ~= "\n"; 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /test/database.d: -------------------------------------------------------------------------------- 1 | import dlangbot.database; 2 | 3 | @("database") 4 | unittest 5 | { 6 | auto db = getDatabase(); 7 | 8 | auto user1 = "user1"; 9 | auto user1_id = 1; 10 | auto user1_alias = "user1_alias"; 11 | 12 | auto user2 = "user2"; 13 | auto user2_id = 2; 14 | 15 | // simple insert 16 | updateBugzillaFixedIssuesTable(user1, user1_id, 1, "critical"); 17 | foreach (int iss, string sev; db.stmt!"SELECT [IssueNumber], [Severity] FROM [BugzillaFixedIssues] 18 | WHERE [GithubId]=?".iterate(user1_id)) 19 | { 20 | assert(iss == 1); 21 | assert(sev == "critical"); 22 | } 23 | 24 | // override issue 25 | updateBugzillaFixedIssuesTable(user1, user1_id, 1, "blocker"); 26 | foreach (int iss, string sev; db.stmt!"SELECT [IssueNumber], [Severity] FROM [BugzillaFixedIssues] 27 | WHERE [GithubId]=?".iterate(user1_id)) 28 | { 29 | assert(iss == 1); 30 | assert(sev == "blocker"); 31 | } 32 | 33 | // same user, different issue 34 | string[int] issues; 35 | updateBugzillaFixedIssuesTable(user1, user1_id, 2, "trivial"); 36 | foreach (int iss, string sev; db.stmt!"SELECT [IssueNumber], [Severity] FROM [BugzillaFixedIssues] 37 | WHERE [GithubId]=?".iterate(user1_id)) 38 | { 39 | issues[iss] = sev; 40 | } 41 | assert(issues[1] == "blocker"); 42 | assert(issues[2] == "trivial"); 43 | issues.clear; 44 | 45 | // same user, different name 46 | updateBugzillaFixedIssuesTable(user1_alias, user1_id, 3, "major"); 47 | foreach (int iss, string sev; db.stmt!"SELECT [IssueNumber], [Severity] FROM [BugzillaFixedIssues] 48 | WHERE [GithubId]=?".iterate(user1_id)) 49 | { 50 | issues[iss] = sev; 51 | } 52 | assert(issues[1] == "blocker"); 53 | assert(issues[2] == "trivial"); 54 | assert(issues[3] == "major"); 55 | issues.clear; 56 | 57 | foreach (string name; db.stmt!"SELECT [Name] FROM [GithubNickname] WHERE [GithubId]=?".iterate(user1_id)) 58 | { 59 | assert(name == user1_alias); 60 | } 61 | 62 | // different user, new issue 63 | int[int] issueAuthors; 64 | updateBugzillaFixedIssuesTable(user2, user2_id, 4, "regression"); 65 | foreach (int iss, string sev, int user; db.stmt!"SELECT [IssueNumber], [Severity], [GithubId] 66 | FROM [BugzillaFixedIssues]".iterate()) 67 | { 68 | issues[iss] = sev; 69 | issueAuthors[iss] = user; 70 | } 71 | assert(issues[1] == "blocker"); 72 | assert(issues[2] == "trivial"); 73 | assert(issues[3] == "major"); 74 | assert(issues[4] == "regression"); 75 | 76 | assert(issueAuthors[1] == user1_id); 77 | assert(issueAuthors[2] == user1_id); 78 | assert(issueAuthors[3] == user1_id); 79 | assert(issueAuthors[4] == user2_id); 80 | issues.clear; 81 | issueAuthors.clear; 82 | 83 | auto totalPoints = getContributorsStats("2021-01-01 00:00:00.000000", "2099-01-01 00:00:00.0000"); 84 | assert(totalPoints[0] == [user1_alias, "135"]); 85 | assert(totalPoints[1] == [user2, "100"]); 86 | } 87 | -------------------------------------------------------------------------------- /test/github.d: -------------------------------------------------------------------------------- 1 | import utils; 2 | 3 | import dlangbot.github_api; 4 | 5 | @("github-cache") 6 | unittest 7 | { 8 | setAPIExpectations( 9 | "/github/test", 10 | (scope HTTPServerRequest req, scope HTTPServerResponse res){ 11 | res.headers["ETag"] = "pretty"; 12 | res.headers["Last-Modified"] = "Fri, 13 Feb 2009 23:31:30 +0000"; 13 | res.writeJsonBody("hello".Json); 14 | }, 15 | "/github/test", 16 | (scope HTTPServerRequest req, scope HTTPServerResponse res){ 17 | assert(req.headers["If-None-Match"] == "pretty"); 18 | assert(req.headers["If-Modified-Since"] == "Fri, 13 Feb 2009 23:31:30 +0000"); 19 | res.statusCode = 304; 20 | }, 21 | ); 22 | 23 | assert(ghGetRequest(githubAPIURL ~ "/test").body == "hello"); 24 | assert(ghGetRequest(githubAPIURL ~ "/test").body == "hello"); 25 | } 26 | 27 | @("github-multipage") 28 | unittest 29 | { 30 | setAPIExpectations( 31 | "/github/multipage-test", 32 | (scope HTTPServerRequest req, scope HTTPServerResponse res){ 33 | res.headers["Link"] = 34 | `<` ~ githubAPIURL ~ `/multipage-test?page=2>; rel="next", ` ~ 35 | `<` ~ githubAPIURL ~ `/multipage-test?page=3>; rel="last"`; 36 | res.writeJsonBody("D".Json); 37 | }, 38 | "/github/multipage-test?page=2", 39 | (scope HTTPServerRequest req, scope HTTPServerResponse res){ 40 | res.headers["Link"] = 41 | `<` ~ githubAPIURL ~ `/multipage-test?page=1>; rel="prev", ` ~ 42 | `<` ~ githubAPIURL ~ `/multipage-test?page=3>; rel="next", ` ~ 43 | `<` ~ githubAPIURL ~ `/multipage-test?page=3>; rel="last", ` ~ 44 | `<` ~ githubAPIURL ~ `/multipage-test?page=1>; rel="first"`; 45 | res.writeJsonBody("is".Json); 46 | }, 47 | "/github/multipage-test?page=3", 48 | (scope HTTPServerRequest req, scope HTTPServerResponse res){ 49 | res.headers["Link"] = 50 | `<` ~ githubAPIURL ~ `/multipage-test?page=2>; rel="prev", ` ~ 51 | `<` ~ githubAPIURL ~ `/multipage-test?page=1>; rel="first"`; 52 | res.writeJsonBody("awesome".Json); 53 | }, 54 | ); 55 | 56 | auto pages = ghGetAllPages(githubAPIURL ~ "/multipage-test"); 57 | string result; 58 | foreach (page; pages) 59 | result ~= page.get!string; 60 | assert(result == "D" ~ "is" ~ "awesome"); 61 | } 62 | -------------------------------------------------------------------------------- /test/review.d: -------------------------------------------------------------------------------- 1 | import utils; 2 | 3 | @("check-auto-merge-on-approval-positive") 4 | unittest 5 | { 6 | setAPIExpectations( 7 | "/github/repos/dlang/phobos/issues/5114/labels", 8 | "/github/repos/dlang/phobos/commits/0fb66f092b897b55318509c6582008b3f912311a/status", 9 | "/github/repos/dlang/phobos/pulls/5114/commits", 10 | "/github/repos/dlang/phobos/issues/5114/events", 11 | "/github/users/ZombineDev", 12 | "/github/repos/dlang/phobos/pulls/5114/reviews", 13 | "/github/users/wilzbach", 14 | "/github/users/PetarKirov", 15 | "/github/repos/dlang/phobos/pulls/5114/merge", (scope HTTPServerRequest req, scope HTTPServerResponse res) { 16 | assert(req.json["sha"] == "0fb66f092b897b55318509c6582008b3f912311a"); 17 | assert(req.json["merge_method"] == "rebase"); 18 | assert(req.json["commit_message"] == "Fix tan returning -nan for inputs where abs(x) >= 2^63\n\n"~ 19 | "Signed-off-by: Sebastian Wilzbach \n" ~ 20 | "Signed-off-by: Petar Kirov \n" ~ 21 | "Merged-on-behalf-of: ZombineDev "); 22 | } 23 | ); 24 | 25 | postGitHubHook("dlang_phobos_review_5114.json", "pull_request_review"); 26 | } 27 | 28 | // review approved --> look if merge possible --> no auto-merge 29 | @("check-auto-merge-on-approval-negative") 30 | unittest 31 | { 32 | setAPIExpectations( 33 | "/github/repos/dlang/phobos/issues/5114/labels", (ref Json j) { 34 | j[0]["name"] = "foo-bar"; 35 | j = j[0 .. 1]; 36 | } 37 | ); 38 | 39 | postGitHubHook("dlang_phobos_review_5114.json", "pull_request_review"); 40 | } 41 | -------------------------------------------------------------------------------- /test/status.d: -------------------------------------------------------------------------------- 1 | import utils; 2 | 3 | @("pending-ignored") 4 | unittest 5 | { 6 | setAPIExpectations(); 7 | 8 | postGitHubHook("dlang_dmd_status_6324.json", "status"); 9 | } 10 | 11 | @("failed-ignored") 12 | unittest 13 | { 14 | setAPIExpectations(); 15 | 16 | postGitHubHook("dlang_dmd_status_6324.json", "status", 17 | (ref Json j, scope HTTPClientRequest req){ 18 | j["state"] = "failed"; 19 | } 20 | ); 21 | } 22 | 23 | @("trigger-merge-check-on-success") 24 | unittest 25 | { 26 | prThrottler.reset; 27 | 28 | // success status triggers merge check for all open auto-merge PRs 29 | setAPIExpectations( 30 | "/github/repos/dlang/dmd/issues?state=open&labels=auto-merge", (ref Json j) { 31 | j = Json.emptyArray; 32 | }, 33 | "/github/repos/dlang/dmd/issues?state=open&labels=auto-merge-squash", (ref Json j) { 34 | j = Json.emptyArray; 35 | } 36 | ); 37 | 38 | postGitHubHook("dlang_dmd_status_6324.json", "status", 39 | (ref Json j, scope HTTPClientRequest req){ 40 | j["state"] = "success"; 41 | } 42 | ); 43 | 44 | // not triggered again within throttle time 45 | setAPIExpectations(); 46 | 47 | postGitHubHook("dlang_dmd_status_6324.json", "status", 48 | (ref Json j, scope HTTPClientRequest req){ 49 | j["state"] = "success"; 50 | } 51 | ); 52 | } 53 | 54 | @("trigger-merge-check-and-merge-on-success") 55 | unittest 56 | { 57 | prThrottler.reset; 58 | 59 | setAPIExpectations( 60 | "/github/repos/dlang/dmd/issues?state=open&labels=auto-merge", 61 | // PR 6327 has the label "auto-merge" 62 | "/github/repos/dlang/dmd/issues?state=open&labels=auto-merge-squash", (ref Json j) { 63 | j = Json.emptyArray; 64 | }, 65 | "/github/repos/dlang/dmd/pulls/6327", 66 | "/github/repos/dlang/dmd/commits/782fd3fdd4a9c23e1307b4b963b443ed60517dfe/status", 67 | "/github/repos/dlang/dmd/pulls/6327/commits", 68 | "/github/repos/dlang/dmd/issues/6327/events", 69 | "/github/repos/dlang/dmd/pulls/6327/reviews", 70 | "/github/repos/dlang/dmd/pulls/6327/merge", 71 | (scope HTTPServerRequest req, scope HTTPServerResponse res){ 72 | assert(req.json["sha"] == "782fd3fdd4a9c23e1307b4b963b443ed60517dfe"); 73 | assert(req.json["merge_method"] == "merge"); 74 | assert(req.json["commit_message"] == "Fix issue 16977 - bad debug info for function default arguments\n\n"~ 75 | "Merged-on-behalf-of: unknown"); 76 | } 77 | ); 78 | 79 | postGitHubHook("dlang_dmd_status_6324.json", "status", 80 | (ref Json j, scope HTTPClientRequest req){ 81 | j["state"] = "success"; 82 | } 83 | ); 84 | } 85 | 86 | @("trigger-merge-check-and-squash-on-success") 87 | unittest 88 | { 89 | prThrottler.reset; 90 | 91 | setAPIExpectations( 92 | "/github/repos/dlang/dmd/issues?state=open&labels=auto-merge", (ref Json j) { 93 | j = Json.emptyArray; 94 | }, 95 | "/github/repos/dlang/dmd/issues?state=open&labels=auto-merge-squash", 96 | // PR 6328 has the label "auto-merge-squash" 97 | "/github/repos/dlang/dmd/pulls/6328", 98 | "/github/repos/dlang/dmd/commits/d6fc98058b637f9a558206847e6d7057ab9fb3de/status", (ref Json j) { 99 | j["state"] = "success"; // fake 100 | }, 101 | "/github/repos/dlang/dmd/pulls/6328/commits", 102 | "/github/repos/dlang/dmd/issues/6328/events", 103 | "/github/users/MartinNowak", 104 | "/github/repos/dlang/dmd/pulls/6328/reviews", 105 | "/github/repos/dlang/dmd/pulls/6328/merge", 106 | (scope HTTPServerRequest req, scope HTTPServerResponse res){ 107 | assert(req.json["sha"] == "d6fc98058b637f9a558206847e6d7057ab9fb3de"); 108 | assert(req.json["merge_method"] == "squash"); 109 | assert(req.json["commit_message"] == "taking address of local means it cannot be 'scope' later\n\n"~ 110 | "Merged-on-behalf-of: Martin Nowak "); 111 | } 112 | ); 113 | 114 | postGitHubHook("dlang_dmd_status_6324.json", "status", 115 | (ref Json j, scope HTTPClientRequest req){ 116 | j["state"] = "success"; 117 | } 118 | ); 119 | } 120 | 121 | @("trigger-merge-check-and-merge-and-squash-on-success") 122 | unittest 123 | { 124 | prThrottler.reset; 125 | 126 | setAPIExpectations( 127 | "/github/repos/dlang/dmd/issues?state=open&labels=auto-merge", 128 | // 6327 has "auto-merge" 129 | "/github/repos/dlang/dmd/issues?state=open&labels=auto-merge-squash", 130 | // 6328 has "auto-merge-squash" 131 | "/github/repos/dlang/dmd/pulls/6327", 132 | "/github/repos/dlang/dmd/commits/782fd3fdd4a9c23e1307b4b963b443ed60517dfe/status", 133 | "/github/repos/dlang/dmd/pulls/6327/commits", 134 | "/github/repos/dlang/dmd/issues/6327/events", 135 | "/github/repos/dlang/dmd/pulls/6327/reviews", 136 | "/github/repos/dlang/dmd/pulls/6327/merge", 137 | (scope HTTPServerRequest req, scope HTTPServerResponse res){ 138 | assert(req.json["sha"] == "782fd3fdd4a9c23e1307b4b963b443ed60517dfe"); 139 | assert(req.json["merge_method"] == "merge"); 140 | assert(req.json["commit_message"] == "Fix issue 16977 - bad debug info for function default arguments\n\n"~ 141 | "Merged-on-behalf-of: unknown"); 142 | }, 143 | "/github/repos/dlang/dmd/pulls/6328", 144 | "/github/repos/dlang/dmd/commits/d6fc98058b637f9a558206847e6d7057ab9fb3de/status", (ref Json j) { 145 | j["state"] = "success"; // fake 146 | }, 147 | "/github/repos/dlang/dmd/pulls/6328/commits", 148 | "/github/repos/dlang/dmd/issues/6328/events", 149 | "/github/users/MartinNowak", 150 | "/github/repos/dlang/dmd/pulls/6328/reviews", 151 | "/github/repos/dlang/dmd/pulls/6328/merge", 152 | (scope HTTPServerRequest req, scope HTTPServerResponse res){ 153 | assert(req.json["sha"] == "d6fc98058b637f9a558206847e6d7057ab9fb3de"); 154 | assert(req.json["merge_method"] == "squash"); 155 | assert(req.json["commit_message"] == "taking address of local means it cannot be 'scope' later\n\n"~ 156 | "Merged-on-behalf-of: Martin Nowak "); 157 | } 158 | ); 159 | 160 | postGitHubHook("dlang_dmd_status_6324.json", "status", 161 | (ref Json j, scope HTTPClientRequest req){ 162 | j["state"] = "success"; 163 | } 164 | ); 165 | } 166 | -------------------------------------------------------------------------------- /test/trello.d: -------------------------------------------------------------------------------- 1 | import utils; 2 | 3 | import std.stdio, std.format : format; 4 | 5 | // no existing dlang bot comment -> create comment 6 | unittest 7 | { 8 | setAPIExpectations( 9 | "/bugzilla/buglist.cgi?bug_id=16794&ctype=csv&columnlist=short_desc,bug_status,resolution,bug_severity,priority,keywords", 10 | "/trello/1/cards/583f517a333add7c28e0cec7/actions?filter=commentCard&"~trelloAuth, 11 | (ref Json j) { j = Json.emptyArray; }, 12 | "/trello/1/cards/583f517a333add7c28e0cec7/actions/comments?"~trelloAuth, 13 | (scope HTTPServerRequest req, scope HTTPServerResponse res){ 14 | assert(req.method == HTTPMethod.POST); 15 | assert(req.json["text"] == 16 | `- [Issue 16794 - dmd not working on Ubuntu 16.10 because of default PIE linking](https://issues.dlang.org/show_bug.cgi?id=16794) 17 | `); 18 | } 19 | ); 20 | 21 | postTrelloHook("active_issue_16794.json"); 22 | } 23 | 24 | // update existing dlang bot comment 25 | unittest 26 | { 27 | setAPIExpectations( 28 | "/bugzilla/buglist.cgi?bug_id=16794&ctype=csv&columnlist=short_desc,bug_status,resolution,bug_severity,priority,keywords", 29 | "/trello/1/cards/583f517a333add7c28e0cec7/actions?filter=commentCard&"~trelloAuth, 30 | (ref Json j) { j[0]["data"]["text"] = "- [Issue 16794 - bla bla](https://issues.dlang.org/show_bug.cgi?id=16794)\n"; }, 31 | "/trello/1/cards/583f517a333add7c28e0cec7/actions/583f517b91413ef81f1f9d34/comments?"~trelloAuth, 32 | (scope HTTPServerRequest req, scope HTTPServerResponse res){ 33 | assert(req.method == HTTPMethod.PUT); 34 | assert(req.json["text"] == 35 | `- [Issue 16794 - dmd not working on Ubuntu 16.10 because of default PIE linking](https://issues.dlang.org/show_bug.cgi?id=16794) 36 | `); 37 | } 38 | ); 39 | 40 | postTrelloHook("active_issue_16794.json"); 41 | } 42 | 43 | // no existing dlang bot comment -> create comment 44 | unittest 45 | { 46 | setAPIExpectations( 47 | "/github/repos/dlang/dmd/pulls/6359/commits", 48 | "/github/repos/dlang/dmd/issues/6359/comments", 49 | "/bugzilla/buglist.cgi?bug_id=16794&ctype=csv&columnlist=short_desc,bug_status,resolution,bug_severity,priority,keywords", 50 | "/github/orgs/dlang/public_members?per_page=100", 51 | "/github/repos/dlang/dmd/issues/6359/comments", 52 | "/github/repos/dlang/dmd/issues/6359/labels", (ref Json j){ 53 | j = Json.emptyArray; 54 | }, 55 | // action: add bug fix label 56 | "/github/repos/dlang/dmd/issues/6359/labels", 57 | (scope HTTPServerRequest req, scope HTTPServerResponse res){ 58 | assert(req.method == HTTPMethod.POST); 59 | assert(req.json[0].get!string == "Bug Fix"); 60 | }, 61 | "/trello/1/search?query=name:%22Issue%2016794%22&"~trelloAuth, 62 | "/trello/1/cards/583f517a333add7c28e0cec7/actions?filter=commentCard&"~trelloAuth, 63 | "/trello/1/cards/583f517a333add7c28e0cec7/actions/583f517b91413ef81f1f9d34/comments?"~trelloAuth, 64 | (scope HTTPServerRequest req, scope HTTPServerResponse res){ 65 | assert(req.method == HTTPMethod.PUT); 66 | assert(req.json["text"] == 67 | `- [Issue 16794 - dmd not working on Ubuntu 16.10 because of default PIE linking](https://issues.dlang.org/show_bug.cgi?id=16794) 68 | - https://github.com/dlang/dmd/pull/6359 69 | `); 70 | }, 71 | "/trello/1/cards/583f517a333add7c28e0cec7?"~trelloAuth, 72 | "/trello/1/board/55586bf9fd02d8c66074321a/lists?"~trelloAuth, 73 | "/trello/1/cards/583f517a333add7c28e0cec7/idList?value=55586d9b810fb97f9459df7d&"~trelloAuth, 74 | "/trello/1/cards/583f517a333add7c28e0cec7/pos?value=bottom&"~trelloAuth, 75 | "/bugzilla/jsonrpc.cgi", 76 | ); 77 | 78 | postGitHubHook("dlang_dmd_open_6359.json"); 79 | } 80 | 81 | // no existing dlang bot comment -> create comment 82 | unittest 83 | { 84 | setAPIExpectations( 85 | "/github/repos/dlang/dmd/pulls/6359/commits", 86 | "/github/repos/dlang/dmd/issues/6359/comments", 87 | "/bugzilla/buglist.cgi?bug_id=16794&ctype=csv&columnlist=short_desc,bug_status,resolution,bug_severity,priority,keywords", 88 | "/github/orgs/dlang/public_members?per_page=100", 89 | "/github/repos/dlang/dmd/issues/6359/comments", 90 | "/github/repos/dlang/dmd/issues/6359/labels", (ref Json j){ 91 | j = Json.emptyArray; 92 | }, 93 | // action: add bug fix label 94 | "/github/repos/dlang/dmd/issues/6359/labels", 95 | (scope HTTPServerRequest req, scope HTTPServerResponse res){ 96 | assert(req.method == HTTPMethod.POST); 97 | assert(req.json[0].get!string == "Bug Fix"); 98 | }, 99 | "/trello/1/search?query=name:%22Issue%2016794%22&"~trelloAuth, 100 | "/trello/1/cards/583f517a333add7c28e0cec7/actions?filter=commentCard&"~trelloAuth, 101 | (ref Json j) { j = Json.emptyArray; }, 102 | "/trello/1/cards/583f517a333add7c28e0cec7/actions/comments?"~trelloAuth, 103 | (scope HTTPServerRequest req, scope HTTPServerResponse res){ 104 | assert(req.method == HTTPMethod.POST); 105 | assert(req.json["text"] == "- https://github.com/dlang/dmd/pull/6359\n"); 106 | }, 107 | "/trello/1/cards/583f517a333add7c28e0cec7?"~trelloAuth, 108 | (ref Json j) { j["idList"] = "55586d9b810fb97f9459df7d"; }, 109 | "/trello/1/board/55586bf9fd02d8c66074321a/lists?"~trelloAuth, 110 | "/bugzilla/jsonrpc.cgi", 111 | ); 112 | 113 | postGitHubHook("dlang_dmd_open_6359.json"); 114 | } 115 | -------------------------------------------------------------------------------- /test/twitter.d: -------------------------------------------------------------------------------- 1 | import utils; 2 | import std.uri : encodeComponent; 3 | 4 | @("tweet-on-a-merged-pr") 5 | unittest 6 | { 7 | twitterEnabled = true; 8 | scope(exit) twitterEnabled = false; 9 | 10 | string message = `dlang/phobos: PR #4963 "[DEMO for DIP1005] Converted imports to selective imports in std.array" by andralex has been merged https://github.com/dlang/phobos/pull/4963`.encodeComponent; 11 | setAPIExpectations( 12 | "/github/repos/dlang/phobos/pulls/4963/commits", 13 | "/github/repos/dlang/phobos/issues/4963/comments", 14 | "/twitter/statuses/update.json?status=" ~ message, (scope HTTPServerRequest req, scope HTTPServerResponse res) { 15 | auto auth = req.headers["Authorization"]; 16 | assert(auth.startsWith("OAuth ")); 17 | } 18 | ); 19 | 20 | postGitHubHook("dlang_phobos_merged_4963.json"); 21 | } 22 | -------------------------------------------------------------------------------- /views/contributor_stats.dt: -------------------------------------------------------------------------------- 1 | doctype html 2 | head 3 | title Top Contributors on fixing D bugs 4 | body(style="text-align: center; position: absolute; left: 0; top: 0; height: 100%; width: 100%; background-color: #984ea3; color: white") 5 | h2(style="margin-top: 6rem") Overall Top Contributors 6 | 7 | img(id="rocket", src="img/dlang_rocket.png", style="position: absolute; right: 2rem; top: 8rem; z-index: -1; opacity: 0.75") 8 | table(style="margin-left: auto; margin-right: auto") 9 | - foreach (entry; entries) 10 | tr 11 | - foreach(value; entry) 12 | td= value 13 | 14 | p For more information on how the rewarding system works visit 15 | a(href="https://dlang.org/blog/2021/09/16/bugzilla-reward-system") this blog post 16 | | . 17 | 18 | p For more information on D visit 19 | a(href="https://dlang.org/") dlang.org 20 | | . 21 | 22 | p Foundation members are not eligible for prizes. They are marked with an asterisk (*). 23 | -------------------------------------------------------------------------------- /views/contributor_stats_cycle.dt: -------------------------------------------------------------------------------- 1 | doctype html 2 | head 3 | title Top Contributors on fixing D bugs April 1st, 2023 - July 1st, 2023 4 | body(style="text-align: center; position: absolute; left: 0; top: 0; height: 100%; width: 100%; background-color: #984ea3; color: white") 5 | h2(style="margin-top: 6rem") Top Contributors April 1st, 2023 - July 1st, 2023 6 | 7 | img(id="rocket", src="img/dlang_rocket.png", style="position: absolute; right: 2rem; top: 8rem; z-index: -1; opacity: 0.75") 8 | table(style="margin-left: auto; margin-right: auto") 9 | - foreach (entry; entries) 10 | tr 11 | - foreach(value; entry) 12 | td= value 13 | 14 | p For more information on how the rewarding system works visit 15 | a(href="https://dlang.org/blog/2021/09/16/bugzilla-reward-system") this blog post 16 | | . 17 | 18 | p For more information on D visit 19 | a(href="https://dlang.org/") dlang.org 20 | | . 21 | 22 | p Foundation members are not eligible for prizes. They are marked with an asterisk (*). 23 | -------------------------------------------------------------------------------- /views/index.dt: -------------------------------------------------------------------------------- 1 | doctype html 2 | head 3 | title Dlang-Bot 4 | link(rel="stylesheet", href="css/style.min.css") 5 | :css 6 | img#logo { 7 | display: inline-block; 8 | max-height: 50%; 9 | } 10 | li { 11 | font-size: 18px; 12 | } 13 | body(style="text-align: center; position: absolute; left: 0; top: 0; height: 100%; width: 100%") 14 | h2(style="margin-top: 6rem") Dlang-Bot 15 | img(id="logo", src="img/dlang_bot.png") 16 | 17 | h3 Official links 18 | ul 19 | li 20 | a(href="https://dlang.org") Dlang.org 21 | li 22 | a(href="https://github.com/dlang") Dlang on GitHub 23 | 24 | h3 The DLang-Bot 25 | ul 26 | li 27 | a(href="https://github.com/dlang-bot?tab=activity") Activity on GitHub 28 | li 29 | a(href="https://github.com/dlang-bots/dlang-bot") GitHub repository 30 | 31 | h3 Internal resources 32 | ul 33 | li 34 | a(href="https://trello.com/b/XoFjxiqG/active") Dlang's Trello board 35 | li 36 | a(href="https://trello.com/b/jGdlx9vZ/backlog") Dlang's Trello backlog 37 | 38 | h3 Services 39 | ul 40 | li 41 | a(href="https://ci.dawg.eu/") Dlang DUB Project tester 42 | li 43 | a(href="https://travis-ci.org/dlang") Dlang on Travis-CI 44 | li 45 | a(href="https://codecov.io/gh/dlang") Dlang on Codecov 46 | li 47 | a(href="https://auto-tester.puremagic.com") Dlang Auto-Tester 48 | li 49 | a(href="https://circleci.com/gh/dlang") Dlang on CircleCi 50 | 51 | h3 Bug Fixing Standings 52 | ul 53 | li 54 | a(href="https://bot.dlang.io/contributor_stats") Overall hierarchy 55 | li 56 | a(href="https://bot.dlang.io/contributor_stats_cycle") Current rewarding cycle hierarchy 57 | --------------------------------------------------------------------------------