class Fbe::FakeOctokit
Fake GitHub client, for tests.
def add_comment(_repo, _issue, _text)
def add_comment(_repo, _issue, _text) { id: 42 } end
def check_runs_for_ref(repo, sha)
def check_runs_for_ref(repo, sha) data = { 'zerocracy/baza' => { total_count: 7, check_runs: [ { id: 28_907_016_501, name: 'make', head_sha: sha, started_at: '2024-08-18T08:04:44Z', completed_at: '2024-08-18T08:20:17Z', app: { slug: 'github-actions' } }, { id: 28_906_596_603, name: 'copyrights', head_sha: sha, started_at: '2024-08-18T08:04:44Z', completed_at: '2024-08-18T08:20:17Z', app: { slug: 'github-actions' } }, { id: 28_906_596_550, name: 'markdown-lint', head_sha: sha, started_at: '2024-08-18T08:04:44Z', completed_at: '2024-08-18T08:20:17Z', app: { slug: 'github-actions' } }, { id: 28_906_596_483, name: 'pdd', head_sha: sha, started_at: '2024-08-18T08:04:44Z', completed_at: '2024-08-18T08:20:17Z', app: { slug: 'github-actions' } }, { id: 28_906_596_433, name: 'rake', head_sha: sha, started_at: '2024-08-18T08:04:44Z', completed_at: '2024-08-18T08:20:17Z', app: { slug: 'github-actions' } }, { id: 28_906_596_405, name: 'shellcheck', head_sha: sha, started_at: '2024-08-18T08:04:44Z', completed_at: '2024-08-18T08:20:17Z', app: { slug: 'github-actions' } }, { id: 28_906_596_379, name: 'yamllint', head_sha: sha, started_at: '2024-08-18T08:04:44Z', completed_at: '2024-08-18T08:20:17Z', app: { slug: 'github-actions' } } ] }, 'zerocracy/judges-action' => { total_count: 7, check_runs: [ { id: 28_907_016_501, name: 'Codacy Static Code Analysis', head_sha: sha, started_at: '2024-08-18T08:04:44Z', completed_at: '2024-08-18T08:20:17Z', app: { slug: 'codacy-production' } }, { id: 28_906_596_603, name: 'copyrights', head_sha: sha, started_at: '2024-08-18T08:04:44Z', completed_at: '2024-08-18T08:20:17Z', app: { slug: 'github-actions' } }, { id: 28_906_596_550, name: 'markdown-lint', head_sha: sha, started_at: '2024-08-18T08:04:44Z', completed_at: '2024-08-18T08:20:17Z', app: { slug: 'github-actions' } }, { id: 28_906_596_483, name: 'pdd', head_sha: sha, started_at: '2024-08-18T08:04:44Z', completed_at: '2024-08-18T08:20:17Z', app: { slug: 'github-actions' } }, { id: 28_906_596_433, name: 'rake', head_sha: sha, started_at: '2024-08-18T08:04:44Z', completed_at: '2024-08-18T08:20:17Z', app: { slug: 'github-actions' } }, { id: 28_906_596_405, name: 'shellcheck', head_sha: sha, started_at: '2024-08-18T08:04:44Z', completed_at: '2024-08-18T08:20:17Z', app: { slug: 'github-actions' } }, { id: 28_906_596_379, name: 'yamllint', head_sha: sha, started_at: '2024-08-18T08:04:44Z', completed_at: '2024-08-18T08:20:17Z', app: { slug: 'github-actions' } } ] } } data.fetch(repo) do { total_count: 0, check_runs: [] } end end
def commit(_repo, sha)
def commit(_repo, sha) { sha:, stats: { total: 123 } } end
def commit_pulls(repo, _sha)
def commit_pulls(repo, _sha) [ pull_request(repo, 42) ] end
def commits_since(repo, _since)
def commits_since(repo, _since) [ commit(repo, 'a1b2c3d4e5f6a1b2c3d4e5f6'), commit(repo, 'a1b2c3d4e5fff1b2c3d4e5f6') ] end
def compare(_repo, _start, _end)
def compare(_repo, _start, _end) { base_commit: { sha: '498464613c0b9', commit: { author: { name: 'Yegor Bugayenko', email: 'yegor256@gmail.com', date: Time.parse('2024-09-04 15:23:25 UTC') }, committer: { name: 'Yegor Bugayenko', email: 'yegor256@gmail.com', date: Time.parse('2024-09-04 15:23:25 UTC') }, message: 'Some text', tree: { sha: '51aee236ba884' }, comment_count: 0, verification: { verified: false, reason: 'unsigned', signature: nil, payload: nil } }, author: { login: 'yegor256', id: 526_301, type: 'User', site_admin: false }, committer: { login: 'yegor256', id: 526_301, type: 'User', site_admin: false }, parents: [{ sha: '9763dab47b50a12f59c3630690ec2c0f6bdda0b3' }] }, merge_base_commit: { sha: '8e4348746638595a7e', commit: { author: { name: 'Yegor Bugayenko', email: 'yegor256@gmail.com', date: Time.parse('2024-08-25 15:57:35 UTC') }, committer: { name: 'Yegor Bugayenko', email: 'yegor256@gmail.com', date: Time.parse('2024-08-25 15:57:35 UTC') }, message: 'Some text', tree: { sha: '7145fc122e70bf51e1d' }, comment_count: 0, verification: { verified: true, reason: 'valid', signature: '', payload: '' } }, author: { login: 'yegor256', id: 526_301, type: 'User', site_admin: false }, committer: { login: 'yegor256', id: 526_301, type: 'User', site_admin: false }, parents: [ { sha: '8c8278efedbd795e70' }, { sha: '7dfd2e0186113f66f' } ] }, status: 'diverged', ahead_by: 1, behind_by: 30, total_commits: 1, commits: [ { sha: 'ee04386901692abb', commit: { author: { name: 'Yegor Bugayenko', email: 'yegor256@gmail.com', date: Time.parse('2024-08-25 15:57:35 UTC') }, committer: { name: 'Yegor Bugayenko', email: 'yegor256@gmail.com', date: Time.parse('2024-08-25 15:57:35 UTC') }, message: 'Some text', tree: { sha: '7a6124a500aed8c92' }, comment_count: 0, verification: { verified: false, reason: 'unsigned', signature: nil, payload: nil } }, author: { login: 'yegor256', id: 526_301, type: 'User', site_admin: false }, committer: { login: 'yegor256', id: 526_301, type: 'User', site_admin: false }, parents: [{ sha: '8e4348746638595a7e' }] } ], files: [ { sha: '9e100c7246c0cc9', filename: 'file.txt', status: 'modified', additions: 1, deletions: 1, changes: 2, patch: '@@ -24,7 +24,7 @@ text ...' }, { sha: 'f97818271059e5455', filename: 'file2.txt', status: 'modified', additions: 1, deletions: 1, changes: 2, patch: '@@ -25,7 +25,7 @@ text ...' }, { sha: '5a957c57d090bfeccb', filename: 'file3.txt', status: 'modified', additions: 1, deletions: 1, changes: 2, patch: '@@ -27,7 +27,7 @@ text ...' } ] } end
def contributors(_repo, _anon = nil, _options = {})
def contributors(_repo, _anon = nil, _options = {}) [ { login: 'yegor256', id: 526_301, type: 'User', contributions: 500 }, { login: 'renovate[bot]', id: 29_139_614, type: 'Bot', contributions: 320 }, { login: 'user1', id: 2_476_362, type: 'User', contributions: 120 }, { login: 'rultor', id: 8_086_956, type: 'Bot', contributions: 87 }, { login: 'user2', id: 5_427_638, type: 'User', contributions: 49 }, { login: 'user3', id: 2_648_875, type: 'User', contributions: 10 }, { login: 'user4', id: 7_125_293, type: 'User', contributions: 1 } ] end
def create_commit_comment(_repo, sha, text)
def create_commit_comment(_repo, sha, text) { commit_id: sha, id: 42, body: text, path: 'something.txt', line: 1, position: 1 } end
def issue(repo, number)
def issue(repo, number) { id: 42, number:, repo: { full_name: repo }, pull_request: { merged_at: nil }, created_at: Time.parse('2024-09-20 19:00:00 UTC') } end
def issue_comment_reactions(_name, _comment)
def issue_comment_reactions(_name, _comment) [ { id: 248_923_574, user: { login: 'user', id: 8_086_956 }, content: 'heart' } ] end
def issue_comments(_name, _number)
def issue_comments(_name, _number) [ { pull_request_review_id: 2_227_372_510, id: 1_709_082_320, path: 'test/baza/test_locks.rb', commit_id: 'a9f5f94cf28f29a64d5dd96d0ee23b4174572847', original_commit_id: 'e8c6f94274d14ed3cb26fe71467a9c3f229df59c', user: { login: 'Reviewer', id: 2_566_462 }, body: 'reviewer comment', created_at: '2024-08-08T09:41:46Z', updated_at: '2024-08-08T09:42:46Z', reactions: { url: 'https://api.github.com/repos/zerocracy/baza/pulls/comments/1709082320/reactions', total_count: 1 }, start_line: 'null', original_start_line: 'null', start_side: 'null', line: 'null', original_line: 62, side: 'RIGHT', original_position: 25, position: 'null', subject_type: 'line' }, { pull_request_review_id: 2_227_372_510, id: 1_709_082_321, path: 'test/baza/test_locks.rb', commit_id: 'a9f5f94cf28f29a64d5dd96d0ee23b4174572847', original_commit_id: 'e8c6f94274d14ed3cb26fe71467a9c3f229df59c', user: { login: 'test', id: 88_084_038 }, body: 'author comment', created_at: '2024-08-08T09:42:46Z', updated_at: '2024-08-08T09:42:46Z', reactions: { url: 'https://api.github.com/repos/zerocracy/baza/pulls/comments/1709082321/reactions', total_count: 1 }, start_line: 'null', original_start_line: 'null', start_side: 'null', line: 'null', original_line: 62, side: 'RIGHT', original_position: 25, in_reply_to_id: 1_709_082_318, position: 'null', subject_type: 'line' } ] end
def issue_timeline(_repo, _issue, _options = {})
def issue_timeline(_repo, _issue, _options = {}) [ { event: 'renamed', actor: { id: 888, login: 'torvalds' }, repository: { id: name_to_number('yegor256/judges'), full_name: 'yegor256/judges' }, rename: { from: 'before', to: 'after' }, created_at: random_time }, { event: 'labeled', actor: { id: 888, login: 'torvalds' }, repository: { id: name_to_number('yegor256/judges'), full_name: 'yegor256/judges' }, label: { name: 'bug' }, created_at: random_time } ] end
def list_issues(repo, _options = {})
def list_issues(repo, _options = {}) [ issue(repo, 42), issue(repo, 43) ] end
def name_to_number(name)
def name_to_number(name) return name unless name.is_a?(String) name.chars.sum(&:ord) end
def pull_request(repo, number)
def pull_request(repo, number) { id: 42, number:, repo: { full_name: repo }, additions: 12, deletions: 5, changed_files: 3 } end
def pull_request_comments(_name, _number)
def pull_request_comments(_name, _number) [ { pull_request_review_id: 2_227_372_510, id: 1_709_082_318, path: 'test/baza/test_locks.rb', commit_id: 'a9f5f94cf28f29a64d5dd96d0ee23b4174572847', original_commit_id: 'e8c6f94274d14ed3cb26fe71467a9c3f229df59c', user: { login: 'Reviewer', id: 2_566_462 }, body: 'Most likely, parentheses were missed here.', created_at: '2024-08-08T09:41:46Z', updated_at: '2024-08-08T09:42:46Z', reactions: { url: 'https://api.github.com/repos/zerocracy/baza/pulls/comments/1709082318/reactions', total_count: 0 }, start_line: 'null', original_start_line: 'null', start_side: 'null', line: 'null', original_line: 62, side: 'RIGHT', original_position: 25, position: 'null', subject_type: 'line' }, { pull_request_review_id: 2_227_372_510, id: 1_709_082_319, path: 'test/baza/test_locks.rb', commit_id: 'a9f5f94cf28f29a64d5dd96d0ee23b4174572847', original_commit_id: 'e8c6f94274d14ed3cb26fe71467a9c3f229df59c', user: { login: 'test', id: 88_084_038 }, body: 'definitely a typo', created_at: '2024-08-08T09:42:46Z', updated_at: '2024-08-08T09:42:46Z', reactions: { url: 'https://api.github.com/repos/zerocracy/baza/pulls/comments/1709082319/reactions', total_count: 0 }, start_line: 'null', original_start_line: 'null', start_side: 'null', line: 'null', original_line: 62, side: 'RIGHT', original_position: 25, in_reply_to_id: 1_709_082_318, position: 'null', subject_type: 'line' } ] end
def pull_request_review_comment_reactions(_name, _comment)
def pull_request_review_comment_reactions(_name, _comment) [ { id: 248_923_574, user: { login: 'user', id: 8_086_956 }, content: 'heart' } ] end
def pull_request_reviews(_repo, _number)
def pull_request_reviews(_repo, _number) [ { id: 22_449_327, user: { login: 'yegor256', id: 526_301, type: 'User' }, body: 'Some text 2', state: 'CHANGES_REQUESTED', author_association: 'CONTRIBUTOR', submitted_at: Time.parse('2024-08-22 10:00:00 UTC'), commit_id: 'b15c2893f1b5453' }, { id: 22_449_326, user: { login: 'yegor256', id: 526_301, type: 'User' }, body: 'Some text 1', state: 'CHANGES_REQUESTED', author_association: 'CONTRIBUTOR', submitted_at: Time.parse('2024-08-21 22:00:00 UTC'), commit_id: 'a15c2893f1b5453' } ] end
def pull_requests(_repo, _options = {})
def pull_requests(_repo, _options = {}) [ { id: 2_072_543_250, number: 100, state: 'closed', locked: false, title: '#90: some title', user: { login: 'yegor256', id: 526_301, type: 'User' }, body: 'Closes #90', created_at: Time.parse('2024-09-15 09:32:49 UTC'), updated_at: Time.parse('2024-09-15 10:06:23 UTC'), closed_at: Time.parse('2024-09-15 10:05:34 UTC'), merged_at: Time.parse('2024-09-15 10:05:34 UTC'), merge_commit_sha: '0527cc188b0495e', draft: false, head: { label: 'yegor256:90', ref: '90', sha: '0527cc188b049', user: { login: 'yegor256', id: 526_301, type: 'User' }, repo: repository('yegor256/repo') }, base: { label: 'zerocracy:master', ref: 'master', sha: '4643eb3c7a0ccb3c', user: { login: 'zerocracy', id: 24_234_201, type: 'Organization' }, repo: repository('zerocracy/repo') } }, { id: 2_072_543_240, number: 95, state: 'open', locked: false, title: '#80: some title', user: { login: 'yegor256', id: 526_301, type: 'User' }, body: 'Closes #80', created_at: Time.parse('2024-09-14 09:32:49 UTC'), updated_at: Time.parse('2024-09-14 10:06:23 UTC'), closed_at: nil, merged_at: nil, merge_commit_sha: '0627cc188b0497e', draft: false, head: { label: 'yegor256:80', ref: '80', sha: '1527cc188b040', user: { login: 'yegor256', id: 526_301, type: 'User' }, repo: repository('yegor256/repo') }, base: { label: 'zerocracy:master', ref: 'master', sha: '5643eb3c7a0ccb3b', user: { login: 'zerocracy', id: 24_234_201, type: 'Organization' }, repo: repository('zerocracy/repo') } } ] end
def random_time
def random_time Time.now - rand(10_000) end
def rate_limit
def rate_limit o = Object.new def o.remaining 100 end o end
def release(_url)
def release(_url) { node_id: 'RE_kwDOL6GCO84J7Cen', tag_name: '0.19.0', target_commitish: 'master', name: 'just a fake name', draft: false, prerelease: false, created_at: random_time, published_at: random_time, assets: [] } end
def releases(_repo, _opts = {})
def releases(_repo, _opts = {}) [ release('https://github...'), release('https://gith') ] end
def repositories(_user = nil)
def repositories(_user = nil) [ repository('yegor256/judges'), repository('yegor256/factbase') ] end
def repository(name)
def repository(name) { id: name_to_number(name), full_name: name.is_a?(Integer) ? 'yegor256/test' : name, default_branch: 'master', private: false, owner: { login: name.to_s.split('/')[0], id: 526_301, site_admin: false }, html_url: "https://github.com/#{name}", description: 'something', fork: false, url: "https://github.com/#{name}", created_at: random_time, updated_at: random_time, pushed_at: random_time, size: name == 'yegor256/empty-repo' ? 0 : 470, stargazers_count: 1, watchers_count: 1, language: 'Ruby', has_issues: true, has_projects: true, has_downloads: true, has_wiki: true, has_pages: false, has_discussions: false, forks_count: 0, archived: name == 'zerocracy/datum', disabled: false, open_issues_count: 6, license: { key: 'mit', name: 'MIT License' }, allow_forking: true, is_template: false, visibility: 'public', forks: 0, open_issues: 6, watchers: 1 } end
def repository_events(repo, _options = {})
def repository_events(repo, _options = {}) [ { id: '123', type: 'PushEvent', repo: { id: name_to_number(repo), name: repo, url: "https://api.github.com/repos/#{repo}" }, payload: { push_id: 42, ref: 'refs/heads/master', size: 1, distinct_size: 0, head: 'b7089c51cc2526a0d2619d35379f921d53c72731', before: '12d3bff1a55bad50ee2e8f29ade7f1c1e07bb025' }, actor: { id: 888, login: 'torvalds', display_login: 'torvalds' }, created_at: random_time, public: true }, { id: '124', type: 'IssuesEvent', repo: { id: name_to_number(repo), name: repo, url: "https://api.github.com/repos/#{repo}" }, payload: { action: 'closed', issue: { number: 42 } }, actor: { id: 888, login: 'torvalds', display_login: 'torvalds' }, created_at: random_time, public: true }, { id: '125', type: 'IssuesEvent', repo: { id: name_to_number(repo), name: repo, url: "https://api.github.com/repos/#{repo}" }, payload: { action: 'opened', issue: { number: 42 } }, actor: { id: 888, login: 'torvalds', display_login: 'torvalds' }, created_at: random_time, public: true }, { id: 42, created_at: Time.now, actor: { id: 42 }, type: 'PullRequestEvent', repo: { id: repo }, payload: { action: 'closed', number: 172, ref_type: 'tag', ref: 'foo', pull_request: { url: 'https://api.github.com/repos/yegor256/judges/pulls/93', id: 1_990_323_142, node_id: 'PR_kwDOL6GCO852oevG', number: 172, state: 'closed', locked: false, title: '#999 new feature', user: { login: 'test', id: 88_084_038, node_id: 'MDQ6VXNlcjE2NDYwMjA=', type: 'User', site_admin: false }, base: { label: 'zerocracy:master', ref: 'master', user: { login: 'zerocracy', id: 24_234_201 }, repo: { id: repo, node_id: 'R_kgDOK2_4Aw', name: 'baza', full_name: 'zerocracy/baza', private: false } }, head: { ref: 'zerocracy/baza', sha: '74d0c234967de0f690805c6943e78db42a294c1a' }, merged_at: Time.now, comments: 2, review_comments: 2, commits: 1, additions: 3, deletions: 3, changed_files: 2 } } }, { id: 43, created_at: Time.now, actor: { id: 42 }, type: 'PullRequestEvent', repo: { id: repo }, payload: { action: 'closed', number: 172, ref_type: 'tag', ref: 'foo', pull_request: { url: 'https://api.github.com/repos/yegor256/judges/pulls/93', id: 1_990_323_142, node_id: 'PR_kwDOL6GCO852oevG', number: 172, state: 'closed', locked: false, title: '#999 new feature', user: { login: 'test', id: 88_084_038, node_id: 'MDQ6VXNlcjE2NDYwMjA=', type: 'User', site_admin: false }, base: { label: 'zerocracy:master', ref: 'master', user: { login: 'zerocracy', id: 24_234_201 }, repo: { id: repo, node_id: 'R_kgDOK2_4Aw', name: 'judges-action', full_name: 'zerocracy/judges-action', private: false } }, head: { ref: 'zerocracy/judges-action', sha: '74d0c234967de0f690805c6943e78db42a294c1a' }, merged_at: Time.now, comments: 2, review_comments: 2, commits: 1, additions: 3, deletions: 3, changed_files: 2 } } } ] end
def repository_workflow_runs(repo, _opts = {})
def repository_workflow_runs(repo, _opts = {}) { total_count: 2, workflow_runs: [ workflow_run(repo, 42), workflow_run(repo, 7) ] } end
def review_comments(_repo, _number)
def review_comments(_repo, _number) [ { pull_request_review_id: 22_687_249, id: 17_361_949, body: 'Some comment 1', user: { login: 'yegor256', id: 526_301, type: 'User' }, created_at: Time.parse('2024-09-05 15:31:06 UTC'), updated_at: Time.parse('2024-09-05 15:33:04 UTC') }, { pull_request_review_id: 22_687_503, id: 17_361_950, body: 'Some comment 2', user: { login: 'yegor256', id: 526_301, type: 'User' }, created_at: Time.parse('2024-09-06 14:20:00 UTC'), updated_at: Time.parse('2024-09-06 14:20:50 UTC') }, { pull_request_review_id: 22_687_255, id: 17_361_970, body: 'Some comment 3', user: { login: 'yegor256', id: 526_301, type: 'User' }, created_at: Time.parse('2024-09-06 20:45:30 UTC'), updated_at: Time.parse('2024-09-06 20:45:30 UTC') } ] end
def search_commits(_query, _options = {})
def search_commits(_query, _options = {}) { total_count: 3, incomplete_results: false, items: [ { commit: { author: { name: 'Yegor', email: 'yegor@gmail.com', date: Time.parse('2024-09-15 12:23:25 UTC') }, committer: { name: 'Yegor', email: 'yegor@gmail.com', date: Time.parse('2024-09-15 12:23:25 UTC') }, message: 'Some text', tree: { sha: '6e04579960bf67610d' }, comment_count: 0 }, author: { login: 'yegor256', id: 526_301, type: 'User', site_admin: false }, committer: { login: 'yegor256', id: 526_301, type: 'User', site_admin: false }, parents: [{ sha: '60cff20bdb66' }], repository: { id: 799_177_290, name: 'judges-action', full_name: 'zerocracy/judges-action', owner: { login: 'zerocracy', id: 24_234_201, type: 'Organization', site_admin: false } } }, { commit: { author: { name: 'Yegor', email: 'yegor2@gmail.com', date: Time.parse('2024-09-14 12:23:25 UTC') }, committer: { name: 'Yegor', email: 'yegor2@gmail.com', date: Time.parse('2024-09-14 12:23:25 UTC') }, message: 'Some text 2', tree: { sha: 'defa18e4e2250987' }, comment_count: 0 }, author: { login: 'yegor257', id: 526_302, type: 'User', site_admin: false }, committer: { login: 'yegor257', id: 526_302, type: 'User', site_admin: false }, parents: [{ sha: 'a04c15bb34fddbba' }], repository: { id: 799_177_290, name: 'judges-action', full_name: 'zerocracy/judges-action', owner: { login: 'zerocracy', id: 24_234_201, type: 'Organization', site_admin: false } } }, { commit: { author: { name: 'Yegor', email: 'yegor3@gmail.com', date: Time.parse('2024-09-13 12:23:25 UTC') }, committer: { name: 'Yegor', email: 'yegor3@gmail.com', date: Time.parse('2024-09-13 12:23:25 UTC') }, message: 'Some text 3', tree: { sha: 'bb7277441139739b902a' }, comment_count: 0 }, author: { login: 'yegor258', id: 526_303, type: 'User', site_admin: false }, committer: { login: 'yegor258', id: 526_303, type: 'User', site_admin: false }, parents: [{ sha: '18db84d469bb727' }], repository: { id: 799_177_290, name: 'judges-action', full_name: 'zerocracy/judges-action', owner: { login: 'zerocracy', id: 24_234_201, type: 'Organization', site_admin: false } } } ] } end
def search_issues(query, _options = {})
def search_issues(query, _options = {}) if query.include?('type:pr') && query.include?('is:unmerged') { total_count: 1, incomplete_results: false, items: [ { id: 42, number: 10, title: 'Awesome PR 10' } ] } elsif query.include?('type:pr') && query.include?('is:merged') { total_count: 1, incomplete_results: false, items: [ { id: 42, number: 10, title: 'Awesome PR 10', created_at: Time.parse('2024-08-21 19:00:00 UTC'), pull_request: { merged_at: Time.parse('2024-08-23 19:00:00 UTC') } } ] } elsif query.include?('type:pr') { total_count: 2, incomplete_results: false, items: [ { id: 42, number: 10, title: 'Awesome PR 10', created_at: Time.parse('2024-08-21 19:00:00 UTC') }, { id: 43, number: 11, title: 'Awesome PR 11', created_at: Time.parse('2024-08-21 20:00:00 UTC') } ] } else { total_count: 1, incomplete_results: false, items: [ { number: 42, labels: [ { name: 'bug' } ], user: { login: 'yegor256', id: 526_301, type: 'User' }, created_at: Time.parse('2024-08-20 19:00:00 UTC') } ] } end end
def tree(_repo, _tree_sha, _options = {})
def tree(_repo, _tree_sha, _options = {}) { sha: '492072971ad3c8644a191f62426bd3', tree: [ { path: '.github', mode: '040000', type: 'tree', sha: '438682e07e45ccbf9ca58f294a' }, { path: '.github/workflows', mode: '040000', type: 'tree', sha: 'dea8a01c236530cc92a63c5774' }, { path: '.github/workflows/actionlint.yml', mode: '100644', type: 'blob', sha: 'ffed2deef2383d6f685489b289', size: 1671 }, { path: '.github/workflows/copyrights.yml', mode: '100644', type: 'blob', sha: 'ab8357cfd94e0628676aff34cd', size: 1293 }, { path: '.github/workflows/zerocracy.yml', mode: '100644', type: 'blob', sha: '5c224c7742e5ebeeb176b90605', size: 2005 }, { path: '.gitignore', mode: '100644', type: 'blob', sha: '9383e7111a173b44baa0692775', size: 27 }, { path: '.rubocop.yml', mode: '100644', type: 'blob', sha: 'cb9b62eb1979589daa18142008', size: 1963 }, { path: 'README.md', mode: '100644', type: 'blob', sha: '8011ad43c37edbaf1969417b94', size: 4877 }, { path: 'Rakefile', mode: '100644', type: 'blob', sha: 'a0ac9bf2643d9f5392e1119301', size: 1805 } ], truncated: false } end
def user(name)
def user(name) login = name login = name == 526_301 ? 'yegor256' : 'torvalds' if login.is_a?(Integer) { id: 444, login:, type: name == 29_139_614 ? 'Bot' : 'User' } end
def workflow_run(repo, id)
def workflow_run(repo, id) [ { id: 10_438_531_072, event: 'pull_request', conclusion: 'success', name: 'make', started_at: '2024-08-18T08:04:44Z', completed_at: '2024-08-18T08:20:17Z' }, { id: 10_438_531_073, event: 'pull_request', conclusion: 'success', name: 'copyrights', started_at: '2024-08-18T08:04:44Z', run_started_at: '2024-08-18T08:04:44Z', completed_at: '2024-08-18T08:20:17Z' }, { id: 10_438_531_074, event: 'pull_request', conclusion: 'success', name: 'markdown-lint', started_at: '2024-08-18T08:04:44Z', run_started_at: '2024-08-18T08:04:44Z', completed_at: '2024-08-18T08:20:17Z' }, { id: 10_438_531_075, event: 'pull_request', conclusion: 'failure', name: 'pdd', started_at: '2024-08-18T08:04:44Z', run_started_at: '2024-08-18T08:04:44Z', completed_at: '2024-08-18T08:20:17Z' }, { id: 10_438_531_076, event: 'pull_request', conclusion: 'success', name: 'rake', started_at: '2024-08-18T08:04:44Z', run_started_at: '2024-08-18T08:04:44Z', completed_at: '2024-08-18T08:20:17Z' }, { id: 10_438_531_077, event: 'commit', conclusion: 'success', name: 'shellcheck', started_at: '2024-08-18T08:04:44Z', run_started_at: '2024-08-18T08:04:44Z', completed_at: '2024-08-18T08:20:17Z' }, { id: 10_438_531_078, event: 'pull_request', conclusion: 'failure', name: 'yamllint', started_at: '2024-08-18T08:04:44Z', run_started_at: '2024-08-18T08:04:44Z', completed_at: '2024-08-18T08:20:17Z' } ].find { |json| json[:id] == id } || { id:, name: 'copyrights', head_branch: 'master', head_sha: '7d34c53e6743944dbf6fc729b1066bcbb3b18443', event: 'push', status: 'completed', conclusion: 'success', workflow_id: id, created_at: random_time, run_started_at: random_time, repository: repository(repo) } end
def workflow_run_job(_repo, job)
def workflow_run_job(_repo, job) [ { id: 28_907_016_501, run_id: 10_438_531_072, name: 'make', started_at: '2024-08-18T08:04:44Z', completed_at: '2024-08-18T08:20:17Z' }, { id: 28_906_596_603, run_id: 10_438_531_073, name: 'copyrights', started_at: '2024-08-18T08:04:44Z', completed_at: '2024-08-18T08:20:17Z' }, { id: 28_906_596_550, run_id: 10_438_531_074, name: 'markdown-lint', started_at: '2024-08-18T08:04:44Z', completed_at: '2024-08-18T08:20:17Z' }, { id: 28_906_596_483, run_id: 10_438_531_075, name: 'pdd', started_at: '2024-08-18T08:04:44Z', completed_at: '2024-08-18T08:20:17Z' }, { id: 28_906_596_433, run_id: 10_438_531_076, name: 'rake', started_at: '2024-08-18T08:04:44Z', completed_at: '2024-08-18T08:20:17Z' }, { id: 28_906_596_405, run_id: 10_438_531_077, name: 'shellcheck', started_at: '2024-08-18T08:04:44Z', completed_at: '2024-08-18T08:20:17Z' }, { id: 28_906_596_379, run_id: 10_438_531_078, name: 'yamllint', started_at: '2024-08-18T08:04:44Z', completed_at: '2024-08-18T08:20:17Z' } ].find { |json| json[:id] == job } || { id: job, run_id: 1234, name: 'run job', started_at: '2024-08-18T08:04:44Z', completed_at: '2024-08-18T08:20:17Z' } end
def workflow_run_usage(_repo, _id)
def workflow_run_usage(_repo, _id) { billable: { UBUNTU: { total_ms: 0, jobs: 1, job_runs: [ { job_id: 1, duration_ms: 0 } ] } }, run_duration_ms: 53_000 } end