From a66015ad99ae3e85252633f429f58574b1659f49 Mon Sep 17 00:00:00 2001
From: maozhaofu
Date: Wed, 9 Apr 2025 11:40:50 +0800
Subject: [PATCH] =?UTF-8?q?=E5=8E=9F=E5=A7=8B=E6=A8=A1=E6=9D=BF=E4=BB=8Egi?=
=?UTF-8?q?tea-1.23.7=E6=8F=90=E5=8F=96=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
admin/actions.tmpl | 10 +
admin/applications/list.tmpl | 8 +
admin/applications/oauth2_edit.tmpl | 6 +
admin/auth/edit.tmpl | 460 +
admin/auth/list.tmpl | 38 +
admin/auth/new.tmpl | 122 +
admin/auth/source/ldap.tmpl | 141 +
admin/auth/source/oauth.tmpl | 109 +
admin/auth/source/smtp.tmpl | 59 +
admin/auth/source/sspi.tmpl | 43 +
admin/config.tmpl | 351 +
admin/config_settings.tmpl | 42 +
admin/cron.tmpl | 39 +
admin/dashboard.tmpl | 86 +
admin/emails/list.tmpl | 101 +
admin/hook_new.tmpl | 13 +
admin/hooks.tmpl | 9 +
admin/layout_footer.tmpl | 11 +
admin/layout_head.tmpl | 13 +
admin/navbar.tmpl | 116 +
admin/notice.tmpl | 68 +
admin/org/list.tmpl | 76 +
admin/packages/list.tmpl | 96 +
admin/queue.tmpl | 36 +
admin/queue_manage.tmpl | 61 +
admin/repo/list.tmpl | 110 +
admin/repo/unadopted.tmpl | 75 +
admin/runners/edit.tmpl | 5 +
admin/self_check.tmpl | 60 +
admin/stacktrace-row.tmpl | 66 +
admin/stacktrace.tmpl | 48 +
admin/stats.tmpl | 17 +
admin/system_status.tmpl | 62 +
admin/user/edit.tmpl | 231 +
admin/user/list.tmpl | 119 +
admin/user/new.tmpl | 90 +
admin/user/view.tmpl | 48 +
admin/user/view_details.tmpl | 74 +
admin/user/view_emails.tmpl | 19 +
api/packages/pypi/simple.tmpl | 16 +
base/alert.tmpl | 20 +
base/alert_details.tmpl | 11 +
base/disable_form_autofill.tmpl | 31 +
base/footer.tmpl | 20 +
base/footer_content.tmpl | 32 +
base/head.tmpl | 49 +
base/head_navbar.tmpl | 214 +
base/head_opengraph.tmpl | 47 +
base/head_script.tmpl | 50 +
base/head_style.tmpl | 2 +
base/markup_codepreview.tmpl | 25 +
base/modal_actions_confirm.tmpl | 27 +
base/paginate.tmpl | 34 +
custom/body_inner_post.tmpl | 0
custom/body_inner_pre.tmpl | 0
custom/body_outer_post.tmpl | 0
custom/body_outer_pre.tmpl | 0
custom/extra_links.tmpl | 0
custom/extra_links_footer.tmpl | 0
custom/extra_tabs.tmpl | 0
custom/footer.tmpl | 0
custom/header.tmpl | 0
devtest/devtest-footer.tmpl | 3 +
devtest/devtest-header.tmpl | 2 +
devtest/devtest-list.tmpl | 13 +
devtest/fetch-action.tmpl | 45 +
devtest/flex-list.tmpl | 114 +
devtest/fomantic-dropdown.tmpl | 130 +
devtest/fomantic-modal.tmpl | 95 +
devtest/gitea-ui.tmpl | 194 +
devtest/global-button.tmpl | 16 +
devtest/label.tmpl | 26 +
devtest/repo-action-view.tmpl | 30 +
devtest/tmplerr-sub.tmpl | 3 +
devtest/tmplerr.tmpl | 12 +
devtest/toast.tmpl | 11 +
explore/code.tmpl | 8 +
explore/navbar.tmpl | 22 +
explore/repo_list.tmpl | 71 +
explore/repos.tmpl | 10 +
explore/search.tmpl | 23 +
explore/user_list.tmpl | 33 +
explore/users.tmpl | 10 +
home.tmpl | 51 +
install.tmpl | 355 +
mail/auth/activate.tmpl | 17 +
mail/auth/activate_email.tmpl | 17 +
mail/auth/register_notify.tmpl | 18 +
mail/auth/reset_passwd.tmpl | 17 +
mail/issue/assigned.tmpl | 29 +
mail/issue/default.tmpl | 91 +
mail/notify/collaborator.tmpl | 21 +
mail/notify/repo_transfer.tmpl | 19 +
mail/release.tmpl | 61 +
mail/team_invite.tmpl | 15 +
org/create.tmpl | 57 +
org/follow_unfollow.tmpl | 7 +
org/header.tmpl | 32 +
org/home.tmpl | 68 +
org/member/members.tmpl | 90 +
org/menu.tmpl | 55 +
org/projects/list.tmpl | 24 +
org/projects/new.tmpl | 9 +
org/projects/view.tmpl | 15 +
org/settings/actions.tmpl | 11 +
org/settings/applications.tmpl | 9 +
org/settings/applications_oauth2_edit.tmpl | 5 +
org/settings/blocked_users.tmpl | 5 +
org/settings/delete.tmpl | 35 +
org/settings/hook_new.tmpl | 7 +
org/settings/hooks.tmpl | 5 +
org/settings/labels.tmpl | 13 +
org/settings/layout_footer.tmpl | 11 +
org/settings/layout_head.tmpl | 14 +
org/settings/navbar.tmpl | 48 +
org/settings/options.tmpl | 103 +
org/settings/packages.tmpl | 6 +
org/settings/packages_cleanup_rules_edit.tmpl | 5 +
.../packages_cleanup_rules_preview.tmpl | 5 +
org/settings/runners_edit.tmpl | 5 +
org/team/invite.tmpl | 23 +
org/team/members.tmpl | 88 +
org/team/navbar.tmpl | 4 +
org/team/new.tmpl | 161 +
org/team/repositories.tmpl | 61 +
org/team/sidebar.tmpl | 94 +
org/team/teams.tmpl | 56 +
package/content/alpine.tmpl | 52 +
package/content/arch.tmpl | 41 +
package/content/cargo.tmpl | 63 +
package/content/chef.tmpl | 48 +
package/content/composer.tmpl | 50 +
package/content/composer_dependencies.tmpl | 19 +
package/content/conan.tmpl | 34 +
package/content/conda.tmpl | 30 +
package/content/container.tmpl | 93 +
package/content/cran.tmpl | 59 +
package/content/debian.tmpl | 65 +
package/content/generic.tmpl | 18 +
package/content/go.tmpl | 14 +
package/content/helm.tmpl | 57 +
package/content/maven.tmpl | 75 +
package/content/npm.tmpl | 65 +
package/content/npm_dependencies.tmpl | 19 +
package/content/nuget.tmpl | 51 +
package/content/pub.tmpl | 19 +
package/content/pypi.tmpl | 31 +
package/content/rpm.tmpl | 56 +
package/content/rubygems.tmpl | 40 +
package/content/rubygems_dependencies.tmpl | 19 +
package/content/swift.tmpl | 40 +
package/content/vagrant.tmpl | 18 +
package/metadata/alpine.tmpl | 5 +
package/metadata/arch.tmpl | 4 +
package/metadata/cargo.tmpl | 7 +
package/metadata/chef.tmpl | 5 +
package/metadata/composer.tmpl | 5 +
package/metadata/conan.tmpl | 6 +
package/metadata/conda.tmpl | 6 +
package/metadata/container.tmpl | 9 +
package/metadata/cran.tmpl | 5 +
package/metadata/debian.tmpl | 4 +
package/metadata/generic.tmpl | 0
package/metadata/helm.tmpl | 4 +
package/metadata/maven.tmpl | 8 +
package/metadata/npm.tmpl | 8 +
package/metadata/nuget.tmpl | 5 +
package/metadata/pub.tmpl | 5 +
package/metadata/pypi.tmpl | 5 +
package/metadata/rpm.tmpl | 4 +
package/metadata/rubygems.tmpl | 5 +
package/metadata/swift.tmpl | 4 +
package/metadata/vagrant.tmpl | 5 +
package/settings.tmpl | 77 +
package/shared/cargo.tmpl | 24 +
package/shared/cleanup_rules/edit.tmpl | 73 +
package/shared/cleanup_rules/list.tmpl | 56 +
package/shared/cleanup_rules/preview.tmpl | 34 +
package/shared/list.tmpl | 57 +
package/shared/versionlist.tmpl | 37 +
package/view.tmpl | 114 +
post-install.tmpl | 24 +
projects/list.tmpl | 96 +
projects/new.tmpl | 75 +
projects/view.tmpl | 192 +
repo/actions/list.tmpl | 92 +
repo/actions/no_workflows.tmpl | 8 +
repo/actions/runs_list.tmpl | 43 +
repo/actions/status.tmpl | 23 +
repo/actions/view.tmpl | 34 +
repo/actions/workflow_dispatch.tmpl | 78 +
repo/activity.tmpl | 17 +
repo/blame.tmpl | 92 +
repo/branch/list.tmpl | 260 +
repo/branch_dropdown.tmpl | 63 +
repo/cite/cite_buttons.tmpl | 11 +
repo/cite/cite_modal.tmpl | 20 +
repo/clone_buttons.tmpl | 13 +
repo/clone_panel.tmpl | 45 +
repo/code/recently_pushed_new_branches.tmpl | 12 +
repo/code/upstream_diverging_info.tmpl | 23 +
repo/code_frequency.tmpl | 9 +
repo/commit_load_branches_and_tags.tmpl | 20 +
repo/commit_page.tmpl | 288 +
repo/commit_status.tmpl | 16 +
repo/commit_statuses.tmpl | 14 +
repo/commits.tmpl | 39 +
repo/commits_list.tmpl | 98 +
repo/commits_list_small.tmpl | 55 +
repo/commits_search_dropdown.tmpl | 8 +
repo/commits_table.tmpl | 36 +
repo/contributors.tmpl | 15 +
repo/create.tmpl | 220 +
repo/create_helper.tmpl | 3 +
repo/diff/blob_excerpt.tmpl | 82 +
repo/diff/box.tmpl | 265 +
repo/diff/comment_form.tmpl | 49 +
repo/diff/comment_form_datahandler.tmpl | 7 +
repo/diff/comments.tmpl | 75 +
repo/diff/compare.tmpl | 230 +
repo/diff/conversation.tmpl | 72 +
repo/diff/conversation_outdated.tmpl | 3 +
repo/diff/csv_diff.tmpl | 58 +
repo/diff/escape_title.tmpl | 2 +
repo/diff/image_diff.tmpl | 83 +
repo/diff/new_comment.tmpl | 5 +
repo/diff/new_review.tmpl | 56 +
repo/diff/options_dropdown.tmpl | 33 +
repo/diff/section_code.tmpl | 1 +
repo/diff/section_split.tmpl | 157 +
repo/diff/section_unified.tmpl | 73 +
repo/diff/stats.tmpl | 5 +
repo/diff/whitespace_dropdown.tmpl | 30 +
repo/editor/cherry_pick.tmpl | 30 +
repo/editor/commit_form.tmpl | 74 +
repo/editor/delete.tmpl | 13 +
repo/editor/diff_preview.tmpl | 17 +
repo/editor/edit.tmpl | 60 +
repo/editor/patch.tmpl | 40 +
repo/editor/upload.tmpl | 33 +
repo/empty.tmpl | 76 +
repo/file_info.tmpl | 48 +
repo/find/files.tmpl | 21 +
repo/forks.tmpl | 20 +
repo/graph.tmpl | 62 +
repo/graph/commits.tmpl | 77 +
repo/graph/div.tmpl | 7 +
repo/graph/svgcontainer.tmpl | 24 +
repo/header.tmpl | 236 +
repo/home.tmpl | 145 +
repo/home_sidebar_bottom.tmpl | 61 +
repo/home_sidebar_top.tmpl | 75 +
repo/icon.tmpl | 10 +
repo/issue/branch_selector_field.tmpl | 62 +
repo/issue/card.tmpl | 78 +
repo/issue/choose.tmpl | 59 +
repo/issue/comment_tab.tmpl | 22 +
repo/issue/fields/checkboxes.tmpl | 14 +
repo/issue/fields/dropdown.tmpl | 17 +
repo/issue/fields/header.tmpl | 6 +
repo/issue/fields/input.tmpl | 4 +
repo/issue/fields/markdown.tmpl | 3 +
repo/issue/fields/textarea.tmpl | 25 +
repo/issue/filter_actions.tmpl | 128 +
repo/issue/filter_item_label.tmpl | 48 +
repo/issue/filter_item_user_assign.tmpl | 31 +
repo/issue/filter_item_user_fetch.tmpl | 23 +
repo/issue/filter_list.tmpl | 137 +
repo/issue/filters.tmpl | 26 +
repo/issue/label_precolors.tmpl | 22 +
repo/issue/labels.tmpl | 18 +
repo/issue/labels/label_archived.tmpl | 5 +
repo/issue/labels/label_edit_modal.tmpl | 63 +
repo/issue/labels/label_list.tmpl | 92 +
repo/issue/labels/label_load_template.tmpl | 21 +
repo/issue/list.tmpl | 56 +
repo/issue/milestone/filter_list.tmpl | 16 +
repo/issue/milestone_issues.tmpl | 65 +
repo/issue/milestone_new.tmpl | 64 +
repo/issue/milestones.tmpl | 108 +
repo/issue/navbar.tmpl | 4 +
repo/issue/new.tmpl | 8 +
repo/issue/new_form.tmpl | 73 +
repo/issue/openclose.tmpl | 23 +
repo/issue/search.tmpl | 18 +
repo/issue/sidebar/allow_maintainer_edit.tmpl | 13 +
repo/issue/sidebar/assignee_list.tmpl | 38 +
repo/issue/sidebar/due_date.tmpl | 29 +
repo/issue/sidebar/issue_dependencies.tmpl | 149 +
repo/issue/sidebar/issue_management.tmpl | 118 +
repo/issue/sidebar/label_list.tmpl | 56 +
repo/issue/sidebar/label_list_item.tmpl | 11 +
repo/issue/sidebar/milestone_list.tmpl | 54 +
repo/issue/sidebar/participant_list.tmpl | 11 +
repo/issue/sidebar/project_list.tmpl | 51 +
repo/issue/sidebar/reference_link.tmpl | 8 +
repo/issue/sidebar/reviewer_list.tmpl | 132 +
repo/issue/sidebar/stopwatch_timetracker.tmpl | 93 +
repo/issue/sidebar/watch_notification.tmpl | 9 +
repo/issue/sidebar/wip_switch.tmpl | 7 +
repo/issue/view.tmpl | 12 +
repo/issue/view_content.tmpl | 184 +
repo/issue/view_content/add_reaction.tmpl | 10 +
repo/issue/view_content/attachments.tmpl | 42 +
repo/issue/view_content/comments.tmpl | 710 +
.../view_content/comments_authorlink.tmpl | 11 +
.../view_content/comments_delete_time.tmpl | 14 +
repo/issue/view_content/context_menu.tmpl | 44 +
repo/issue/view_content/conversation.tmpl | 143 +
repo/issue/view_content/pull.tmpl | 398 +
.../view_content/pull_merge_instruction.tmpl | 55 +
repo/issue/view_content/reactions.tmpl | 17 +
.../view_content/reference_issue_dialog.tmpl | 28 +
repo/issue/view_content/show_role.tmpl | 10 +
repo/issue/view_content/sidebar.tmpl | 26 +
.../view_content/update_branch_by_merge.tmpl | 37 +
repo/issue/view_content/watching.tmpl | 12 +
repo/issue/view_title.tmpl | 139 +
repo/latest_commit.tmpl | 31 +
repo/migrate/codebase.tmpl | 116 +
repo/migrate/codecommit.tmpl | 117 +
repo/migrate/git.tmpl | 90 +
repo/migrate/gitbucket.tmpl | 132 +
repo/migrate/gitea.tmpl | 128 +
repo/migrate/github.tmpl | 130 +
repo/migrate/gitlab.tmpl | 127 +
repo/migrate/gogs.tmpl | 130 +
repo/migrate/helper.tmpl | 0
repo/migrate/migrate.tmpl | 32 +
repo/migrate/migrating.tmpl | 101 +
repo/migrate/onedev.tmpl | 116 +
repo/migrate/options.tmpl | 26 +
repo/navbar.tmpl | 18 +
repo/packages.tmpl | 8 +
repo/projects/list.tmpl | 8 +
repo/projects/new.tmpl | 8 +
repo/projects/view.tmpl | 16 +
repo/pulls/commits.tmpl | 10 +
repo/pulls/files.tmpl | 10 +
repo/pulls/fork.tmpl | 88 +
repo/pulls/status.tmpl | 59 +
repo/pulls/tab_menu.tmpl | 28 +
repo/pulse.tmpl | 231 +
repo/recent_commits.tmpl | 9 +
repo/release/label.tmpl | 14 +
repo/release/list.tmpl | 121 +
repo/release/new.tmpl | 149 +
repo/release_tag_header.tmpl | 29 +
repo/search.tmpl | 8 +
repo/search_name.tmpl | 1 +
repo/settings/actions.tmpl | 11 +
repo/settings/branches.tmpl | 79 +
repo/settings/collaboration.tmpl | 117 +
repo/settings/deploy_keys.tmpl | 86 +
repo/settings/githook_edit.tmpl | 27 +
repo/settings/githooks.tmpl | 23 +
repo/settings/layout_footer.tmpl | 11 +
repo/settings/layout_head.tmpl | 14 +
repo/settings/lfs.tmpl | 53 +
repo/settings/lfs_file.tmpl | 53 +
repo/settings/lfs_file_find.tmpl | 46 +
repo/settings/lfs_locks.tmpl | 56 +
repo/settings/lfs_pointers.tmpl | 56 +
repo/settings/navbar.tmpl | 53 +
repo/settings/options.tmpl | 1112 +
repo/settings/protected_branch.tmpl | 341 +
repo/settings/push_mirror_sync_modal.tmpl | 32 +
repo/settings/runner_edit.tmpl | 5 +
repo/settings/secrets.tmpl | 5 +
repo/settings/tags.tmpl | 126 +
repo/settings/webhook/base.tmpl | 5 +
repo/settings/webhook/base_list.tmpl | 26 +
repo/settings/webhook/delete_modal.tmpl | 10 +
repo/settings/webhook/dingtalk.tmpl | 11 +
repo/settings/webhook/discord.tmpl | 19 +
repo/settings/webhook/feishu.tmpl | 12 +
repo/settings/webhook/gitea.tmpl | 40 +
repo/settings/webhook/gogs.tmpl | 28 +
repo/settings/webhook/history.tmpl | 92 +
repo/settings/webhook/link_menu.tmpl | 50 +
repo/settings/webhook/list.tmpl | 4 +
repo/settings/webhook/matrix.tmpl | 27 +
repo/settings/webhook/msteams.tmpl | 11 +
repo/settings/webhook/new.tmpl | 7 +
repo/settings/webhook/packagist.tmpl | 19 +
repo/settings/webhook/settings.tmpl | 299 +
repo/settings/webhook/slack.tmpl | 28 +
repo/settings/webhook/telegram.tmpl | 19 +
repo/settings/webhook/wechatwork.tmpl | 11 +
repo/shabox_badge.tmpl | 15 +
repo/star_unstar.tmpl | 13 +
repo/sub_menu.tmpl | 19 +
repo/tag/list.tmpl | 88 +
repo/tag/name.tmpl | 3 +
repo/unicode_escape_prompt.tmpl | 22 +
repo/upload.tmpl | 15 +
repo/user_cards.tmpl | 39 +
repo/view_file.tmpl | 143 +
repo/view_list.tmpl | 57 +
repo/watch_unwatch.tmpl | 13 +
repo/watchers.tmpl | 8 +
repo/wiki/new.tmpl | 45 +
repo/wiki/pages.tmpl | 31 +
repo/wiki/revision.tmpl | 37 +
repo/wiki/start.tmpl | 15 +
repo/wiki/view.tmpl | 112 +
shared/actions/runner_badge.tmpl | 25 +
shared/actions/runner_edit.tmpl | 96 +
shared/actions/runner_list.tmpl | 99 +
shared/combomarkdowneditor.tmpl | 96 +
shared/fileisempty.tmpl | 3 +
shared/filetoolarge.tmpl | 4 +
shared/issueicon.tmpl | 26 +
shared/issuelist.tmpl | 163 +
shared/misc/tabtitle.tmpl | 1 +
shared/repo_search.tmpl | 64 +
shared/search/button.tmpl | 3 +
shared/search/code/results.tmpl | 36 +
shared/search/code/search.tmpl | 23 +
shared/search/combo.tmpl | 8 +
shared/search/combo_fuzzy.tmpl | 10 +
shared/search/fuzzy.tmpl | 10 +
shared/search/input.tmpl | 4 +
shared/searchbottom.tmpl | 14 +
shared/searchfile.tmpl | 14 +
shared/secrets/add_list.tmpl | 81 +
shared/user/authorlink.tmpl | 1 +
shared/user/avatarlink.tmpl | 1 +
shared/user/block_user_dialog.tmpl | 23 +
shared/user/blocked_users.tmpl | 83 +
shared/user/name.tmpl | 1 +
shared/user/namelink.tmpl | 1 +
shared/user/org_profile_avatar.tmpl | 16 +
shared/user/profile_big_avatar.tmpl | 135 +
shared/variables/variable_list.tmpl | 92 +
shared/webhook/icon.tmpl | 27 +
status/404.tmpl | 16 +
status/500.tmpl | 69 +
swagger/ui.tmpl | 12 +
swagger/v1_json.tmpl | 26721 ++++++++++++++++
user/auth/activate.tmpl | 40 +
user/auth/activate_prompt.tmpl | 15 +
user/auth/captcha.tmpl | 29 +
user/auth/change_passwd.tmpl | 7 +
user/auth/change_passwd_inner.tmpl | 22 +
user/auth/finalize_openid.tmpl | 47 +
user/auth/forgot_passwd.tmpl | 39 +
user/auth/grant.tmpl | 36 +
user/auth/grant_error.tmpl | 16 +
user/auth/link_account.tmpl | 36 +
user/auth/oauth_container.tmpl | 24 +
user/auth/oidc_wellknown.tmpl | 49 +
user/auth/prohibit_login.tmpl | 16 +
user/auth/reset_passwd.tmpl | 65 +
user/auth/signin.tmpl | 10 +
user/auth/signin_inner.tmpl | 78 +
user/auth/signin_openid.tmpl | 51 +
user/auth/signup.tmpl | 9 +
user/auth/signup_inner.tmpl | 70 +
user/auth/signup_openid_connect.tmpl | 36 +
user/auth/signup_openid_navbar.tmpl | 12 +
user/auth/signup_openid_register.tmpl | 37 +
user/auth/twofa.tmpl | 26 +
user/auth/twofa_scratch.tmpl | 25 +
user/auth/webauthn.tmpl | 25 +
user/auth/webauthn_error.tmpl | 13 +
user/code.tmpl | 24 +
user/dashboard/dashboard.tmpl | 13 +
user/dashboard/feeds.tmpl | 130 +
user/dashboard/issues.tmpl | 108 +
user/dashboard/milestones.tmpl | 157 +
user/dashboard/navbar.tmpl | 107 +
user/dashboard/repolist.tmpl | 59 +
user/heatmap.tmpl | 10 +
user/notification/notification.tmpl | 3 +
user/notification/notification_div.tmpl | 125 +
.../notification_subscriptions.tmpl | 79 +
user/overview/header.tmpl | 50 +
user/overview/package_versions.tmpl | 24 +
user/overview/packages.tmpl | 24 +
user/profile.tmpl | 39 +
user/settings/account.tmpl | 183 +
user/settings/actions.tmpl | 12 +
user/settings/appearance.tmpl | 157 +
user/settings/applications.tmpl | 115 +
user/settings/applications_oauth2.tmpl | 6 +
user/settings/applications_oauth2_edit.tmpl | 6 +
.../applications_oauth2_edit_form.tmpl | 60 +
user/settings/applications_oauth2_list.tmpl | 80 +
user/settings/blocked_users.tmpl | 5 +
user/settings/grants_oauth2.tmpl | 40 +
user/settings/hook_new.tmpl | 7 +
user/settings/hooks.tmpl | 5 +
user/settings/keys.tmpl | 11 +
user/settings/keys_gpg.tmpl | 123 +
user/settings/keys_principal.tmpl | 69 +
user/settings/keys_ssh.tmpl | 111 +
user/settings/layout_footer.tmpl | 11 +
user/settings/layout_head.tmpl | 13 +
user/settings/navbar.tmpl | 64 +
user/settings/organization.tmpl | 55 +
user/settings/packages.tmpl | 24 +
.../settings/packages_cleanup_rules_edit.tmpl | 5 +
.../packages_cleanup_rules_preview.tmpl | 5 +
user/settings/profile.tmpl | 143 +
user/settings/repos.tmpl | 130 +
user/settings/runner_edit.tmpl | 5 +
user/settings/security/accountlinks.tmpl | 62 +
user/settings/security/openid.tmpl | 63 +
user/settings/security/security.tmpl | 17 +
user/settings/security/twofa.tmpl | 37 +
user/settings/security/twofa_enroll.tmpl | 25 +
user/settings/security/webauthn.tmpl | 43 +
webhook/new.tmpl | 25 +
514 files changed, 53823 insertions(+)
create mode 100644 admin/actions.tmpl
create mode 100644 admin/applications/list.tmpl
create mode 100644 admin/applications/oauth2_edit.tmpl
create mode 100644 admin/auth/edit.tmpl
create mode 100644 admin/auth/list.tmpl
create mode 100644 admin/auth/new.tmpl
create mode 100644 admin/auth/source/ldap.tmpl
create mode 100644 admin/auth/source/oauth.tmpl
create mode 100644 admin/auth/source/smtp.tmpl
create mode 100644 admin/auth/source/sspi.tmpl
create mode 100644 admin/config.tmpl
create mode 100644 admin/config_settings.tmpl
create mode 100644 admin/cron.tmpl
create mode 100644 admin/dashboard.tmpl
create mode 100644 admin/emails/list.tmpl
create mode 100644 admin/hook_new.tmpl
create mode 100644 admin/hooks.tmpl
create mode 100644 admin/layout_footer.tmpl
create mode 100644 admin/layout_head.tmpl
create mode 100644 admin/navbar.tmpl
create mode 100644 admin/notice.tmpl
create mode 100644 admin/org/list.tmpl
create mode 100644 admin/packages/list.tmpl
create mode 100644 admin/queue.tmpl
create mode 100644 admin/queue_manage.tmpl
create mode 100644 admin/repo/list.tmpl
create mode 100644 admin/repo/unadopted.tmpl
create mode 100644 admin/runners/edit.tmpl
create mode 100644 admin/self_check.tmpl
create mode 100644 admin/stacktrace-row.tmpl
create mode 100644 admin/stacktrace.tmpl
create mode 100644 admin/stats.tmpl
create mode 100644 admin/system_status.tmpl
create mode 100644 admin/user/edit.tmpl
create mode 100644 admin/user/list.tmpl
create mode 100644 admin/user/new.tmpl
create mode 100644 admin/user/view.tmpl
create mode 100644 admin/user/view_details.tmpl
create mode 100644 admin/user/view_emails.tmpl
create mode 100644 api/packages/pypi/simple.tmpl
create mode 100644 base/alert.tmpl
create mode 100644 base/alert_details.tmpl
create mode 100644 base/disable_form_autofill.tmpl
create mode 100644 base/footer.tmpl
create mode 100644 base/footer_content.tmpl
create mode 100644 base/head.tmpl
create mode 100644 base/head_navbar.tmpl
create mode 100644 base/head_opengraph.tmpl
create mode 100644 base/head_script.tmpl
create mode 100644 base/head_style.tmpl
create mode 100644 base/markup_codepreview.tmpl
create mode 100644 base/modal_actions_confirm.tmpl
create mode 100644 base/paginate.tmpl
create mode 100644 custom/body_inner_post.tmpl
create mode 100644 custom/body_inner_pre.tmpl
create mode 100644 custom/body_outer_post.tmpl
create mode 100644 custom/body_outer_pre.tmpl
create mode 100644 custom/extra_links.tmpl
create mode 100644 custom/extra_links_footer.tmpl
create mode 100644 custom/extra_tabs.tmpl
create mode 100644 custom/footer.tmpl
create mode 100644 custom/header.tmpl
create mode 100644 devtest/devtest-footer.tmpl
create mode 100644 devtest/devtest-header.tmpl
create mode 100644 devtest/devtest-list.tmpl
create mode 100644 devtest/fetch-action.tmpl
create mode 100644 devtest/flex-list.tmpl
create mode 100644 devtest/fomantic-dropdown.tmpl
create mode 100644 devtest/fomantic-modal.tmpl
create mode 100644 devtest/gitea-ui.tmpl
create mode 100644 devtest/global-button.tmpl
create mode 100644 devtest/label.tmpl
create mode 100644 devtest/repo-action-view.tmpl
create mode 100644 devtest/tmplerr-sub.tmpl
create mode 100644 devtest/tmplerr.tmpl
create mode 100644 devtest/toast.tmpl
create mode 100644 explore/code.tmpl
create mode 100644 explore/navbar.tmpl
create mode 100644 explore/repo_list.tmpl
create mode 100644 explore/repos.tmpl
create mode 100644 explore/search.tmpl
create mode 100644 explore/user_list.tmpl
create mode 100644 explore/users.tmpl
create mode 100644 home.tmpl
create mode 100644 install.tmpl
create mode 100644 mail/auth/activate.tmpl
create mode 100644 mail/auth/activate_email.tmpl
create mode 100644 mail/auth/register_notify.tmpl
create mode 100644 mail/auth/reset_passwd.tmpl
create mode 100644 mail/issue/assigned.tmpl
create mode 100644 mail/issue/default.tmpl
create mode 100644 mail/notify/collaborator.tmpl
create mode 100644 mail/notify/repo_transfer.tmpl
create mode 100644 mail/release.tmpl
create mode 100644 mail/team_invite.tmpl
create mode 100644 org/create.tmpl
create mode 100644 org/follow_unfollow.tmpl
create mode 100644 org/header.tmpl
create mode 100644 org/home.tmpl
create mode 100644 org/member/members.tmpl
create mode 100644 org/menu.tmpl
create mode 100644 org/projects/list.tmpl
create mode 100644 org/projects/new.tmpl
create mode 100644 org/projects/view.tmpl
create mode 100644 org/settings/actions.tmpl
create mode 100644 org/settings/applications.tmpl
create mode 100644 org/settings/applications_oauth2_edit.tmpl
create mode 100644 org/settings/blocked_users.tmpl
create mode 100644 org/settings/delete.tmpl
create mode 100644 org/settings/hook_new.tmpl
create mode 100644 org/settings/hooks.tmpl
create mode 100644 org/settings/labels.tmpl
create mode 100644 org/settings/layout_footer.tmpl
create mode 100644 org/settings/layout_head.tmpl
create mode 100644 org/settings/navbar.tmpl
create mode 100644 org/settings/options.tmpl
create mode 100644 org/settings/packages.tmpl
create mode 100644 org/settings/packages_cleanup_rules_edit.tmpl
create mode 100644 org/settings/packages_cleanup_rules_preview.tmpl
create mode 100644 org/settings/runners_edit.tmpl
create mode 100644 org/team/invite.tmpl
create mode 100644 org/team/members.tmpl
create mode 100644 org/team/navbar.tmpl
create mode 100644 org/team/new.tmpl
create mode 100644 org/team/repositories.tmpl
create mode 100644 org/team/sidebar.tmpl
create mode 100644 org/team/teams.tmpl
create mode 100644 package/content/alpine.tmpl
create mode 100644 package/content/arch.tmpl
create mode 100644 package/content/cargo.tmpl
create mode 100644 package/content/chef.tmpl
create mode 100644 package/content/composer.tmpl
create mode 100644 package/content/composer_dependencies.tmpl
create mode 100644 package/content/conan.tmpl
create mode 100644 package/content/conda.tmpl
create mode 100644 package/content/container.tmpl
create mode 100644 package/content/cran.tmpl
create mode 100644 package/content/debian.tmpl
create mode 100644 package/content/generic.tmpl
create mode 100644 package/content/go.tmpl
create mode 100644 package/content/helm.tmpl
create mode 100644 package/content/maven.tmpl
create mode 100644 package/content/npm.tmpl
create mode 100644 package/content/npm_dependencies.tmpl
create mode 100644 package/content/nuget.tmpl
create mode 100644 package/content/pub.tmpl
create mode 100644 package/content/pypi.tmpl
create mode 100644 package/content/rpm.tmpl
create mode 100644 package/content/rubygems.tmpl
create mode 100644 package/content/rubygems_dependencies.tmpl
create mode 100644 package/content/swift.tmpl
create mode 100644 package/content/vagrant.tmpl
create mode 100644 package/metadata/alpine.tmpl
create mode 100644 package/metadata/arch.tmpl
create mode 100644 package/metadata/cargo.tmpl
create mode 100644 package/metadata/chef.tmpl
create mode 100644 package/metadata/composer.tmpl
create mode 100644 package/metadata/conan.tmpl
create mode 100644 package/metadata/conda.tmpl
create mode 100644 package/metadata/container.tmpl
create mode 100644 package/metadata/cran.tmpl
create mode 100644 package/metadata/debian.tmpl
create mode 100644 package/metadata/generic.tmpl
create mode 100644 package/metadata/helm.tmpl
create mode 100644 package/metadata/maven.tmpl
create mode 100644 package/metadata/npm.tmpl
create mode 100644 package/metadata/nuget.tmpl
create mode 100644 package/metadata/pub.tmpl
create mode 100644 package/metadata/pypi.tmpl
create mode 100644 package/metadata/rpm.tmpl
create mode 100644 package/metadata/rubygems.tmpl
create mode 100644 package/metadata/swift.tmpl
create mode 100644 package/metadata/vagrant.tmpl
create mode 100644 package/settings.tmpl
create mode 100644 package/shared/cargo.tmpl
create mode 100644 package/shared/cleanup_rules/edit.tmpl
create mode 100644 package/shared/cleanup_rules/list.tmpl
create mode 100644 package/shared/cleanup_rules/preview.tmpl
create mode 100644 package/shared/list.tmpl
create mode 100644 package/shared/versionlist.tmpl
create mode 100644 package/view.tmpl
create mode 100644 post-install.tmpl
create mode 100644 projects/list.tmpl
create mode 100644 projects/new.tmpl
create mode 100644 projects/view.tmpl
create mode 100644 repo/actions/list.tmpl
create mode 100644 repo/actions/no_workflows.tmpl
create mode 100644 repo/actions/runs_list.tmpl
create mode 100644 repo/actions/status.tmpl
create mode 100644 repo/actions/view.tmpl
create mode 100644 repo/actions/workflow_dispatch.tmpl
create mode 100644 repo/activity.tmpl
create mode 100644 repo/blame.tmpl
create mode 100644 repo/branch/list.tmpl
create mode 100644 repo/branch_dropdown.tmpl
create mode 100644 repo/cite/cite_buttons.tmpl
create mode 100644 repo/cite/cite_modal.tmpl
create mode 100644 repo/clone_buttons.tmpl
create mode 100644 repo/clone_panel.tmpl
create mode 100644 repo/code/recently_pushed_new_branches.tmpl
create mode 100644 repo/code/upstream_diverging_info.tmpl
create mode 100644 repo/code_frequency.tmpl
create mode 100644 repo/commit_load_branches_and_tags.tmpl
create mode 100644 repo/commit_page.tmpl
create mode 100644 repo/commit_status.tmpl
create mode 100644 repo/commit_statuses.tmpl
create mode 100644 repo/commits.tmpl
create mode 100644 repo/commits_list.tmpl
create mode 100644 repo/commits_list_small.tmpl
create mode 100644 repo/commits_search_dropdown.tmpl
create mode 100644 repo/commits_table.tmpl
create mode 100644 repo/contributors.tmpl
create mode 100644 repo/create.tmpl
create mode 100644 repo/create_helper.tmpl
create mode 100644 repo/diff/blob_excerpt.tmpl
create mode 100644 repo/diff/box.tmpl
create mode 100644 repo/diff/comment_form.tmpl
create mode 100644 repo/diff/comment_form_datahandler.tmpl
create mode 100644 repo/diff/comments.tmpl
create mode 100644 repo/diff/compare.tmpl
create mode 100644 repo/diff/conversation.tmpl
create mode 100644 repo/diff/conversation_outdated.tmpl
create mode 100644 repo/diff/csv_diff.tmpl
create mode 100644 repo/diff/escape_title.tmpl
create mode 100644 repo/diff/image_diff.tmpl
create mode 100644 repo/diff/new_comment.tmpl
create mode 100644 repo/diff/new_review.tmpl
create mode 100644 repo/diff/options_dropdown.tmpl
create mode 100644 repo/diff/section_code.tmpl
create mode 100644 repo/diff/section_split.tmpl
create mode 100644 repo/diff/section_unified.tmpl
create mode 100644 repo/diff/stats.tmpl
create mode 100644 repo/diff/whitespace_dropdown.tmpl
create mode 100644 repo/editor/cherry_pick.tmpl
create mode 100644 repo/editor/commit_form.tmpl
create mode 100644 repo/editor/delete.tmpl
create mode 100644 repo/editor/diff_preview.tmpl
create mode 100644 repo/editor/edit.tmpl
create mode 100644 repo/editor/patch.tmpl
create mode 100644 repo/editor/upload.tmpl
create mode 100644 repo/empty.tmpl
create mode 100644 repo/file_info.tmpl
create mode 100644 repo/find/files.tmpl
create mode 100644 repo/forks.tmpl
create mode 100644 repo/graph.tmpl
create mode 100644 repo/graph/commits.tmpl
create mode 100644 repo/graph/div.tmpl
create mode 100644 repo/graph/svgcontainer.tmpl
create mode 100644 repo/header.tmpl
create mode 100644 repo/home.tmpl
create mode 100644 repo/home_sidebar_bottom.tmpl
create mode 100644 repo/home_sidebar_top.tmpl
create mode 100644 repo/icon.tmpl
create mode 100644 repo/issue/branch_selector_field.tmpl
create mode 100644 repo/issue/card.tmpl
create mode 100644 repo/issue/choose.tmpl
create mode 100644 repo/issue/comment_tab.tmpl
create mode 100644 repo/issue/fields/checkboxes.tmpl
create mode 100644 repo/issue/fields/dropdown.tmpl
create mode 100644 repo/issue/fields/header.tmpl
create mode 100644 repo/issue/fields/input.tmpl
create mode 100644 repo/issue/fields/markdown.tmpl
create mode 100644 repo/issue/fields/textarea.tmpl
create mode 100644 repo/issue/filter_actions.tmpl
create mode 100644 repo/issue/filter_item_label.tmpl
create mode 100644 repo/issue/filter_item_user_assign.tmpl
create mode 100644 repo/issue/filter_item_user_fetch.tmpl
create mode 100644 repo/issue/filter_list.tmpl
create mode 100644 repo/issue/filters.tmpl
create mode 100644 repo/issue/label_precolors.tmpl
create mode 100644 repo/issue/labels.tmpl
create mode 100644 repo/issue/labels/label_archived.tmpl
create mode 100644 repo/issue/labels/label_edit_modal.tmpl
create mode 100644 repo/issue/labels/label_list.tmpl
create mode 100644 repo/issue/labels/label_load_template.tmpl
create mode 100644 repo/issue/list.tmpl
create mode 100644 repo/issue/milestone/filter_list.tmpl
create mode 100644 repo/issue/milestone_issues.tmpl
create mode 100644 repo/issue/milestone_new.tmpl
create mode 100644 repo/issue/milestones.tmpl
create mode 100644 repo/issue/navbar.tmpl
create mode 100644 repo/issue/new.tmpl
create mode 100644 repo/issue/new_form.tmpl
create mode 100644 repo/issue/openclose.tmpl
create mode 100644 repo/issue/search.tmpl
create mode 100644 repo/issue/sidebar/allow_maintainer_edit.tmpl
create mode 100644 repo/issue/sidebar/assignee_list.tmpl
create mode 100644 repo/issue/sidebar/due_date.tmpl
create mode 100644 repo/issue/sidebar/issue_dependencies.tmpl
create mode 100644 repo/issue/sidebar/issue_management.tmpl
create mode 100644 repo/issue/sidebar/label_list.tmpl
create mode 100644 repo/issue/sidebar/label_list_item.tmpl
create mode 100644 repo/issue/sidebar/milestone_list.tmpl
create mode 100644 repo/issue/sidebar/participant_list.tmpl
create mode 100644 repo/issue/sidebar/project_list.tmpl
create mode 100644 repo/issue/sidebar/reference_link.tmpl
create mode 100644 repo/issue/sidebar/reviewer_list.tmpl
create mode 100644 repo/issue/sidebar/stopwatch_timetracker.tmpl
create mode 100644 repo/issue/sidebar/watch_notification.tmpl
create mode 100644 repo/issue/sidebar/wip_switch.tmpl
create mode 100644 repo/issue/view.tmpl
create mode 100644 repo/issue/view_content.tmpl
create mode 100644 repo/issue/view_content/add_reaction.tmpl
create mode 100644 repo/issue/view_content/attachments.tmpl
create mode 100644 repo/issue/view_content/comments.tmpl
create mode 100644 repo/issue/view_content/comments_authorlink.tmpl
create mode 100644 repo/issue/view_content/comments_delete_time.tmpl
create mode 100644 repo/issue/view_content/context_menu.tmpl
create mode 100644 repo/issue/view_content/conversation.tmpl
create mode 100644 repo/issue/view_content/pull.tmpl
create mode 100644 repo/issue/view_content/pull_merge_instruction.tmpl
create mode 100644 repo/issue/view_content/reactions.tmpl
create mode 100644 repo/issue/view_content/reference_issue_dialog.tmpl
create mode 100644 repo/issue/view_content/show_role.tmpl
create mode 100644 repo/issue/view_content/sidebar.tmpl
create mode 100644 repo/issue/view_content/update_branch_by_merge.tmpl
create mode 100644 repo/issue/view_content/watching.tmpl
create mode 100644 repo/issue/view_title.tmpl
create mode 100644 repo/latest_commit.tmpl
create mode 100644 repo/migrate/codebase.tmpl
create mode 100644 repo/migrate/codecommit.tmpl
create mode 100644 repo/migrate/git.tmpl
create mode 100644 repo/migrate/gitbucket.tmpl
create mode 100644 repo/migrate/gitea.tmpl
create mode 100644 repo/migrate/github.tmpl
create mode 100644 repo/migrate/gitlab.tmpl
create mode 100644 repo/migrate/gogs.tmpl
create mode 100644 repo/migrate/helper.tmpl
create mode 100644 repo/migrate/migrate.tmpl
create mode 100644 repo/migrate/migrating.tmpl
create mode 100644 repo/migrate/onedev.tmpl
create mode 100644 repo/migrate/options.tmpl
create mode 100644 repo/navbar.tmpl
create mode 100644 repo/packages.tmpl
create mode 100644 repo/projects/list.tmpl
create mode 100644 repo/projects/new.tmpl
create mode 100644 repo/projects/view.tmpl
create mode 100644 repo/pulls/commits.tmpl
create mode 100644 repo/pulls/files.tmpl
create mode 100644 repo/pulls/fork.tmpl
create mode 100644 repo/pulls/status.tmpl
create mode 100644 repo/pulls/tab_menu.tmpl
create mode 100644 repo/pulse.tmpl
create mode 100644 repo/recent_commits.tmpl
create mode 100644 repo/release/label.tmpl
create mode 100644 repo/release/list.tmpl
create mode 100644 repo/release/new.tmpl
create mode 100644 repo/release_tag_header.tmpl
create mode 100644 repo/search.tmpl
create mode 100644 repo/search_name.tmpl
create mode 100644 repo/settings/actions.tmpl
create mode 100644 repo/settings/branches.tmpl
create mode 100644 repo/settings/collaboration.tmpl
create mode 100644 repo/settings/deploy_keys.tmpl
create mode 100644 repo/settings/githook_edit.tmpl
create mode 100644 repo/settings/githooks.tmpl
create mode 100644 repo/settings/layout_footer.tmpl
create mode 100644 repo/settings/layout_head.tmpl
create mode 100644 repo/settings/lfs.tmpl
create mode 100644 repo/settings/lfs_file.tmpl
create mode 100644 repo/settings/lfs_file_find.tmpl
create mode 100644 repo/settings/lfs_locks.tmpl
create mode 100644 repo/settings/lfs_pointers.tmpl
create mode 100644 repo/settings/navbar.tmpl
create mode 100644 repo/settings/options.tmpl
create mode 100644 repo/settings/protected_branch.tmpl
create mode 100644 repo/settings/push_mirror_sync_modal.tmpl
create mode 100644 repo/settings/runner_edit.tmpl
create mode 100644 repo/settings/secrets.tmpl
create mode 100644 repo/settings/tags.tmpl
create mode 100644 repo/settings/webhook/base.tmpl
create mode 100644 repo/settings/webhook/base_list.tmpl
create mode 100644 repo/settings/webhook/delete_modal.tmpl
create mode 100644 repo/settings/webhook/dingtalk.tmpl
create mode 100644 repo/settings/webhook/discord.tmpl
create mode 100644 repo/settings/webhook/feishu.tmpl
create mode 100644 repo/settings/webhook/gitea.tmpl
create mode 100644 repo/settings/webhook/gogs.tmpl
create mode 100644 repo/settings/webhook/history.tmpl
create mode 100644 repo/settings/webhook/link_menu.tmpl
create mode 100644 repo/settings/webhook/list.tmpl
create mode 100644 repo/settings/webhook/matrix.tmpl
create mode 100644 repo/settings/webhook/msteams.tmpl
create mode 100644 repo/settings/webhook/new.tmpl
create mode 100644 repo/settings/webhook/packagist.tmpl
create mode 100644 repo/settings/webhook/settings.tmpl
create mode 100644 repo/settings/webhook/slack.tmpl
create mode 100644 repo/settings/webhook/telegram.tmpl
create mode 100644 repo/settings/webhook/wechatwork.tmpl
create mode 100644 repo/shabox_badge.tmpl
create mode 100644 repo/star_unstar.tmpl
create mode 100644 repo/sub_menu.tmpl
create mode 100644 repo/tag/list.tmpl
create mode 100644 repo/tag/name.tmpl
create mode 100644 repo/unicode_escape_prompt.tmpl
create mode 100644 repo/upload.tmpl
create mode 100644 repo/user_cards.tmpl
create mode 100644 repo/view_file.tmpl
create mode 100644 repo/view_list.tmpl
create mode 100644 repo/watch_unwatch.tmpl
create mode 100644 repo/watchers.tmpl
create mode 100644 repo/wiki/new.tmpl
create mode 100644 repo/wiki/pages.tmpl
create mode 100644 repo/wiki/revision.tmpl
create mode 100644 repo/wiki/start.tmpl
create mode 100644 repo/wiki/view.tmpl
create mode 100644 shared/actions/runner_badge.tmpl
create mode 100644 shared/actions/runner_edit.tmpl
create mode 100644 shared/actions/runner_list.tmpl
create mode 100644 shared/combomarkdowneditor.tmpl
create mode 100644 shared/fileisempty.tmpl
create mode 100644 shared/filetoolarge.tmpl
create mode 100644 shared/issueicon.tmpl
create mode 100644 shared/issuelist.tmpl
create mode 100644 shared/misc/tabtitle.tmpl
create mode 100644 shared/repo_search.tmpl
create mode 100644 shared/search/button.tmpl
create mode 100644 shared/search/code/results.tmpl
create mode 100644 shared/search/code/search.tmpl
create mode 100644 shared/search/combo.tmpl
create mode 100644 shared/search/combo_fuzzy.tmpl
create mode 100644 shared/search/fuzzy.tmpl
create mode 100644 shared/search/input.tmpl
create mode 100644 shared/searchbottom.tmpl
create mode 100644 shared/searchfile.tmpl
create mode 100644 shared/secrets/add_list.tmpl
create mode 100644 shared/user/authorlink.tmpl
create mode 100644 shared/user/avatarlink.tmpl
create mode 100644 shared/user/block_user_dialog.tmpl
create mode 100644 shared/user/blocked_users.tmpl
create mode 100644 shared/user/name.tmpl
create mode 100644 shared/user/namelink.tmpl
create mode 100644 shared/user/org_profile_avatar.tmpl
create mode 100644 shared/user/profile_big_avatar.tmpl
create mode 100644 shared/variables/variable_list.tmpl
create mode 100644 shared/webhook/icon.tmpl
create mode 100644 status/404.tmpl
create mode 100644 status/500.tmpl
create mode 100644 swagger/ui.tmpl
create mode 100644 swagger/v1_json.tmpl
create mode 100644 user/auth/activate.tmpl
create mode 100644 user/auth/activate_prompt.tmpl
create mode 100644 user/auth/captcha.tmpl
create mode 100644 user/auth/change_passwd.tmpl
create mode 100644 user/auth/change_passwd_inner.tmpl
create mode 100644 user/auth/finalize_openid.tmpl
create mode 100644 user/auth/forgot_passwd.tmpl
create mode 100644 user/auth/grant.tmpl
create mode 100644 user/auth/grant_error.tmpl
create mode 100644 user/auth/link_account.tmpl
create mode 100644 user/auth/oauth_container.tmpl
create mode 100644 user/auth/oidc_wellknown.tmpl
create mode 100644 user/auth/prohibit_login.tmpl
create mode 100644 user/auth/reset_passwd.tmpl
create mode 100644 user/auth/signin.tmpl
create mode 100644 user/auth/signin_inner.tmpl
create mode 100644 user/auth/signin_openid.tmpl
create mode 100644 user/auth/signup.tmpl
create mode 100644 user/auth/signup_inner.tmpl
create mode 100644 user/auth/signup_openid_connect.tmpl
create mode 100644 user/auth/signup_openid_navbar.tmpl
create mode 100644 user/auth/signup_openid_register.tmpl
create mode 100644 user/auth/twofa.tmpl
create mode 100644 user/auth/twofa_scratch.tmpl
create mode 100644 user/auth/webauthn.tmpl
create mode 100644 user/auth/webauthn_error.tmpl
create mode 100644 user/code.tmpl
create mode 100644 user/dashboard/dashboard.tmpl
create mode 100644 user/dashboard/feeds.tmpl
create mode 100644 user/dashboard/issues.tmpl
create mode 100644 user/dashboard/milestones.tmpl
create mode 100644 user/dashboard/navbar.tmpl
create mode 100644 user/dashboard/repolist.tmpl
create mode 100644 user/heatmap.tmpl
create mode 100644 user/notification/notification.tmpl
create mode 100644 user/notification/notification_div.tmpl
create mode 100644 user/notification/notification_subscriptions.tmpl
create mode 100644 user/overview/header.tmpl
create mode 100644 user/overview/package_versions.tmpl
create mode 100644 user/overview/packages.tmpl
create mode 100644 user/profile.tmpl
create mode 100644 user/settings/account.tmpl
create mode 100644 user/settings/actions.tmpl
create mode 100644 user/settings/appearance.tmpl
create mode 100644 user/settings/applications.tmpl
create mode 100644 user/settings/applications_oauth2.tmpl
create mode 100644 user/settings/applications_oauth2_edit.tmpl
create mode 100644 user/settings/applications_oauth2_edit_form.tmpl
create mode 100644 user/settings/applications_oauth2_list.tmpl
create mode 100644 user/settings/blocked_users.tmpl
create mode 100644 user/settings/grants_oauth2.tmpl
create mode 100644 user/settings/hook_new.tmpl
create mode 100644 user/settings/hooks.tmpl
create mode 100644 user/settings/keys.tmpl
create mode 100644 user/settings/keys_gpg.tmpl
create mode 100644 user/settings/keys_principal.tmpl
create mode 100644 user/settings/keys_ssh.tmpl
create mode 100644 user/settings/layout_footer.tmpl
create mode 100644 user/settings/layout_head.tmpl
create mode 100644 user/settings/navbar.tmpl
create mode 100644 user/settings/organization.tmpl
create mode 100644 user/settings/packages.tmpl
create mode 100644 user/settings/packages_cleanup_rules_edit.tmpl
create mode 100644 user/settings/packages_cleanup_rules_preview.tmpl
create mode 100644 user/settings/profile.tmpl
create mode 100644 user/settings/repos.tmpl
create mode 100644 user/settings/runner_edit.tmpl
create mode 100644 user/settings/security/accountlinks.tmpl
create mode 100644 user/settings/security/openid.tmpl
create mode 100644 user/settings/security/security.tmpl
create mode 100644 user/settings/security/twofa.tmpl
create mode 100644 user/settings/security/twofa_enroll.tmpl
create mode 100644 user/settings/security/webauthn.tmpl
create mode 100644 webhook/new.tmpl
diff --git a/admin/actions.tmpl b/admin/actions.tmpl
new file mode 100644
index 0000000..597863d
--- /dev/null
+++ b/admin/actions.tmpl
@@ -0,0 +1,10 @@
+{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin actions")}}
+
+ {{if eq .PageType "runners"}}
+ {{template "shared/actions/runner_list" .}}
+ {{end}}
+ {{if eq .PageType "variables"}}
+ {{template "shared/variables/variable_list" .}}
+ {{end}}
+
+{{template "admin/layout_footer" .}}
diff --git a/admin/applications/list.tmpl b/admin/applications/list.tmpl
new file mode 100644
index 0000000..cbb66b1
--- /dev/null
+++ b/admin/applications/list.tmpl
@@ -0,0 +1,8 @@
+{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin config")}}
+
+
+ {{template "user/settings/applications_oauth2_list" .}}
+
+{{template "admin/layout_footer" .}}
diff --git a/admin/applications/oauth2_edit.tmpl b/admin/applications/oauth2_edit.tmpl
new file mode 100644
index 0000000..668bfe0
--- /dev/null
+++ b/admin/applications/oauth2_edit.tmpl
@@ -0,0 +1,6 @@
+{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin config")}}
+
+
+ {{template "user/settings/applications_oauth2_edit_form" .}}
+
+{{template "admin/layout_footer" .}}
diff --git a/admin/auth/edit.tmpl b/admin/auth/edit.tmpl
new file mode 100644
index 0000000..660f0d0
--- /dev/null
+++ b/admin/auth/edit.tmpl
@@ -0,0 +1,460 @@
+{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin edit authentication")}}
+
+
+
+
+
+
+
GMail Settings:
+
Host: smtp.gmail.com, Port: 587, Enable TLS Encryption: true
+
+
{{ctx.Locale.Tr "admin.auths.tips.oauth2.general"}}:
+
{{ctx.Locale.Tr "admin.auths.tips.oauth2.general.tip"}}
+
+
+
+
+
+
+
{{ctx.Locale.Tr "admin.auths.delete_auth_desc"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+
+{{template "admin/layout_footer" .}}
diff --git a/admin/auth/list.tmpl b/admin/auth/list.tmpl
new file mode 100644
index 0000000..7931014
--- /dev/null
+++ b/admin/auth/list.tmpl
@@ -0,0 +1,38 @@
+{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin authentication")}}
+
+
+
+
+
+
+ ID
+ {{ctx.Locale.Tr "admin.auths.name"}}
+ {{ctx.Locale.Tr "admin.auths.type"}}
+ {{ctx.Locale.Tr "admin.auths.enabled"}}
+ {{ctx.Locale.Tr "admin.auths.updated"}}
+ {{ctx.Locale.Tr "admin.users.created"}}
+ {{ctx.Locale.Tr "admin.users.edit"}}
+
+
+
+ {{range .Sources}}
+
+ {{.ID}}
+ {{.Name}}
+ {{.TypeName}}
+ {{svg (Iif .IsActive "octicon-check" "octicon-x")}}
+ {{DateUtils.AbsoluteShort .UpdatedUnix}}
+ {{DateUtils.AbsoluteShort .CreatedUnix}}
+ {{svg "octicon-pencil"}}
+
+ {{end}}
+
+
+
+
+{{template "admin/layout_footer" .}}
diff --git a/admin/auth/new.tmpl b/admin/auth/new.tmpl
new file mode 100644
index 0000000..be4995c
--- /dev/null
+++ b/admin/auth/new.tmpl
@@ -0,0 +1,122 @@
+{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin new authentication")}}
+
+
+
+
+ {{template "base/disable_form_autofill"}}
+ {{.CsrfTokenHtml}}
+
+
+
{{ctx.Locale.Tr "admin.auths.auth_type"}}
+
+
+
{{.CurrentTypeName}}
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+ {{ctx.Locale.Tr "admin.auths.auth_name"}}
+
+
+
+
+ {{template "admin/auth/source/ldap" .}}
+
+
+ {{template "admin/auth/source/smtp" .}}
+
+
+
+ {{ctx.Locale.Tr "admin.auths.pam_service_name"}}
+
+ {{ctx.Locale.Tr "admin.auths.pam_email_domain"}}
+
+
+
+
+
{{ctx.Locale.Tr "admin.auths.skip_local_two_fa"}}
+
+
{{ctx.Locale.Tr "admin.auths.skip_local_two_fa_helper"}}
+
+
+
+
+ {{template "admin/auth/source/oauth" .}}
+
+
+ {{template "admin/auth/source/sspi" .}}
+
+
+
+ {{ctx.Locale.Tr "admin.auths.attributes_in_bind"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.auths.syncenabled"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.auths.activated"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.auths.new"}}
+
+
+
+
+
+
+
GMail Settings:
+
Host: smtp.gmail.com, Port: 587, Enable TLS Encryption: true
+
+
{{ctx.Locale.Tr "admin.auths.tips.oauth2.general"}}:
+
{{ctx.Locale.Tr "admin.auths.tips.oauth2.general.tip"}}
+
+
+
+
Bitbucket
+ {{ctx.Locale.Tr "admin.auths.tip.bitbucket" "https://bitbucket.org/account/user/{your-username}/oauth-consumers/new"}}
+ Dropbox
+ {{ctx.Locale.Tr "admin.auths.tip.dropbox" "https://www.dropbox.com/developers/apps"}}
+ Facebook
+ {{ctx.Locale.Tr "admin.auths.tip.facebook" "https://developers.facebook.com/apps"}}
+ GitHub
+ {{ctx.Locale.Tr "admin.auths.tip.github" "https://github.com/settings/applications/new"}}
+ GitLab
+ {{ctx.Locale.Tr "admin.auths.tip.gitlab_new" "https://gitlab.com/-/profile/applications"}}
+ Google
+ {{ctx.Locale.Tr "admin.auths.tip.google_plus" "https://console.developers.google.com/"}}
+ OpenID Connect
+ {{ctx.Locale.Tr "admin.auths.tip.openid_connect"}}
+ Twitter
+ {{ctx.Locale.Tr "admin.auths.tip.twitter" "https://dev.twitter.com/apps"}}
+ Discord
+ {{ctx.Locale.Tr "admin.auths.tip.discord" "https://discordapp.com/developers/applications/me"}}
+ Gitea
+ {{ctx.Locale.Tr "admin.auths.tip.gitea" "https://docs.gitea.com/development/oauth2-provider"}}
+ Nextcloud
+ {{ctx.Locale.Tr "admin.auths.tip.nextcloud"}}
+ Yandex
+ {{ctx.Locale.Tr "admin.auths.tip.yandex" "https://oauth.yandex.com/client/new"}}
+ Mastodon
+ {{ctx.Locale.Tr "admin.auths.tip.mastodon"}}
+
+
+
+{{template "admin/layout_footer" .}}
diff --git a/admin/auth/source/ldap.tmpl b/admin/auth/source/ldap.tmpl
new file mode 100644
index 0000000..9754aed
--- /dev/null
+++ b/admin/auth/source/ldap.tmpl
@@ -0,0 +1,141 @@
+
+
+
{{ctx.Locale.Tr "admin.auths.security_protocol"}}
+
+
+
{{.CurrentSecurityProtocol}}
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+ {{ctx.Locale.Tr "admin.auths.host"}}
+
+
+
+ {{ctx.Locale.Tr "admin.auths.port"}}
+
+
+
+
+ {{ctx.Locale.Tr "admin.auths.skip_tls_verify"}}
+
+
+
+
+ {{ctx.Locale.Tr "admin.auths.bind_dn"}}
+
+
+
+ {{ctx.Locale.Tr "admin.auths.bind_password"}}
+
+
+
+ {{ctx.Locale.Tr "admin.auths.user_base"}}
+
+
+
+ {{ctx.Locale.Tr "admin.auths.user_dn"}}
+
+
+
+ {{ctx.Locale.Tr "admin.auths.filter"}}
+
+
+
+ {{ctx.Locale.Tr "admin.auths.admin_filter"}}
+
+
+
+
{{ctx.Locale.Tr "admin.auths.restricted_filter"}}
+
+
{{ctx.Locale.Tr "admin.auths.restricted_filter_helper"}}
+
+
+ {{ctx.Locale.Tr "admin.auths.attribute_username"}}
+
+
+
+ {{ctx.Locale.Tr "admin.auths.attribute_name"}}
+
+
+
+ {{ctx.Locale.Tr "admin.auths.attribute_surname"}}
+
+
+
+ {{ctx.Locale.Tr "admin.auths.attribute_mail"}}
+
+
+
+ {{ctx.Locale.Tr "admin.auths.attribute_ssh_public_key"}}
+
+
+
+ {{ctx.Locale.Tr "admin.auths.attribute_avatar"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.auths.enable_ldap_groups"}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.auths.use_paged_search"}}
+
+
+
+
+ {{ctx.Locale.Tr "admin.auths.search_page_size"}}
+
+
+
+
+
{{ctx.Locale.Tr "admin.auths.skip_local_two_fa"}}
+
+
{{ctx.Locale.Tr "admin.auths.skip_local_two_fa_helper"}}
+
+
+
+
+ {{ctx.Locale.Tr "admin.auths.allow_deactivate_all"}}
+
+
+
+
diff --git a/admin/auth/source/oauth.tmpl b/admin/auth/source/oauth.tmpl
new file mode 100644
index 0000000..f02c5bd
--- /dev/null
+++ b/admin/auth/source/oauth.tmpl
@@ -0,0 +1,109 @@
+
+
+
{{ctx.Locale.Tr "admin.auths.oauth2_provider"}}
+
+
+
{{.oauth2_provider}}
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+ {{ctx.Locale.Tr "admin.auths.oauth2_clientID"}}
+
+
+
+ {{ctx.Locale.Tr "admin.auths.oauth2_clientSecret"}}
+
+
+
+ {{ctx.Locale.Tr "admin.auths.oauth2_icon_url"}}
+
+
+
+ {{ctx.Locale.Tr "admin.auths.openIdConnectAutoDiscoveryURL"}}
+
+
+
+
+
{{ctx.Locale.Tr "admin.auths.skip_local_two_fa"}}
+
+
{{ctx.Locale.Tr "admin.auths.skip_local_two_fa_helper"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.auths.oauth2_use_custom_url"}}
+
+
+
+
+ {{ctx.Locale.Tr "admin.auths.oauth2_authURL"}}
+
+
+
+ {{ctx.Locale.Tr "admin.auths.oauth2_tokenURL"}}
+
+
+
+ {{ctx.Locale.Tr "admin.auths.oauth2_profileURL"}}
+
+
+
+ {{ctx.Locale.Tr "admin.auths.oauth2_emailURL"}}
+
+
+
+ {{ctx.Locale.Tr "admin.auths.oauth2_tenant"}}
+
+
+
+ {{range .OAuth2Providers}}{{if .CustomURLSettings}}
+
+
+
+
+
+
+ {{end}}{{end}}
+
+
+ {{ctx.Locale.Tr "admin.auths.oauth2_scopes"}}
+
+
+
+
{{ctx.Locale.Tr "admin.auths.oauth2_required_claim_name"}}
+
+
{{ctx.Locale.Tr "admin.auths.oauth2_required_claim_name_helper"}}
+
+
+
{{ctx.Locale.Tr "admin.auths.oauth2_required_claim_value"}}
+
+
{{ctx.Locale.Tr "admin.auths.oauth2_required_claim_value_helper"}}
+
+
+ {{ctx.Locale.Tr "admin.auths.oauth2_group_claim_name"}}
+
+
+
+ {{ctx.Locale.Tr "admin.auths.oauth2_admin_group"}}
+
+
+
+ {{ctx.Locale.Tr "admin.auths.oauth2_restricted_group"}}
+
+
+
+ {{ctx.Locale.Tr "admin.auths.oauth2_map_group_to_team"}}
+ {{.oauth2_group_team_map}}
+
+
+ {{ctx.Locale.Tr "admin.auths.oauth2_map_group_to_team_removal"}}
+
+
+
diff --git a/admin/auth/source/smtp.tmpl b/admin/auth/source/smtp.tmpl
new file mode 100644
index 0000000..31195ac
--- /dev/null
+++ b/admin/auth/source/smtp.tmpl
@@ -0,0 +1,59 @@
+
+
+
{{ctx.Locale.Tr "admin.auths.smtp_auth"}}
+
+
+
{{.smtp_auth}}
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+ {{ctx.Locale.Tr "admin.auths.smtphost"}}
+
+
+
+ {{ctx.Locale.Tr "admin.auths.smtpport"}}
+
+
+
+
+
{{ctx.Locale.Tr "admin.auths.force_smtps"}}
+
+
{{ctx.Locale.Tr "admin.auths.force_smtps_helper"}}
+
+
+
+
+ {{ctx.Locale.Tr "admin.auths.skip_tls_verify"}}
+
+
+
+
+
{{ctx.Locale.Tr "admin.auths.helo_hostname"}}
+
+
{{ctx.Locale.Tr "admin.auths.helo_hostname_helper"}}
+
+
+
+ {{ctx.Locale.Tr "admin.auths.disable_helo"}}
+
+
+
+
+
{{ctx.Locale.Tr "admin.auths.allowed_domains"}}
+
+
{{ctx.Locale.Tr "admin.auths.allowed_domains_helper"}}
+
+
+
+
{{ctx.Locale.Tr "admin.auths.skip_local_two_fa"}}
+
+
{{ctx.Locale.Tr "admin.auths.skip_local_two_fa_helper"}}
+
+
+
diff --git a/admin/auth/source/sspi.tmpl b/admin/auth/source/sspi.tmpl
new file mode 100644
index 0000000..6a3f00f
--- /dev/null
+++ b/admin/auth/source/sspi.tmpl
@@ -0,0 +1,43 @@
+
+
+
+
{{ctx.Locale.Tr "admin.auths.sspi_auto_create_users"}}
+
+
{{ctx.Locale.Tr "admin.auths.sspi_auto_create_users_helper"}}
+
+
+
+
+
{{ctx.Locale.Tr "admin.auths.sspi_auto_activate_users"}}
+
+
{{ctx.Locale.Tr "admin.auths.sspi_auto_activate_users_helper"}}
+
+
+
+
+
{{ctx.Locale.Tr "admin.auths.sspi_strip_domain_names"}}
+
+
{{ctx.Locale.Tr "admin.auths.sspi_strip_domain_names_helper"}}
+
+
+
+
{{ctx.Locale.Tr "admin.auths.sspi_separator_replacement"}}
+
+
{{ctx.Locale.Tr "admin.auths.sspi_separator_replacement_helper"}}
+
+
+
{{ctx.Locale.Tr "admin.auths.sspi_default_language"}}
+
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
{{range .AllLangs}}{{if eq $.SSPIDefaultLanguage .Lang}}{{.Name}}{{end}}{{end}}
+
+
+
{{ctx.Locale.Tr "admin.auths.sspi_default_language_helper"}}
+
+
diff --git a/admin/config.tmpl b/admin/config.tmpl
new file mode 100644
index 0000000..88dadeb
--- /dev/null
+++ b/admin/config.tmpl
@@ -0,0 +1,351 @@
+{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin config")}}
+
+
+
+
+ {{ctx.Locale.Tr "admin.config.app_name"}}
+ {{AppName}}
+ {{ctx.Locale.Tr "admin.config.app_ver"}}
+ {{AppVer}}{{.AppBuiltWith}}
+ {{ctx.Locale.Tr "admin.config.custom_conf"}}
+ {{.CustomConf}}
+ {{ctx.Locale.Tr "admin.config.app_url"}}
+ {{.AppUrl}}
+ {{ctx.Locale.Tr "admin.config.domain"}}
+ {{.Domain}}
+ {{ctx.Locale.Tr "admin.config.offline_mode"}}
+ {{svg (Iif .OfflineMode "octicon-check" "octicon-x")}}
+ {{ctx.Locale.Tr "admin.config.disable_router_log"}}
+ {{svg (Iif .DisableRouterLog "octicon-check" "octicon-x")}}
+
+
+
+ {{ctx.Locale.Tr "admin.config.run_user"}}
+ {{.RunUser}}
+ {{ctx.Locale.Tr "admin.config.run_mode"}}
+ {{.RunMode}}
+
+
+
+ {{ctx.Locale.Tr "admin.config.git_version"}}
+ {{.GitVersion}}
+
+
+
+ {{ctx.Locale.Tr "admin.config.app_data_path"}}
+ {{.AppDataPath}}
+ {{ctx.Locale.Tr "admin.config.repo_root_path"}}
+ {{.RepoRootPath}}
+ {{ctx.Locale.Tr "admin.config.custom_file_root_path"}}
+ {{.CustomRootPath}}
+ {{ctx.Locale.Tr "admin.config.log_file_root_path"}}
+ {{.LogRootPath}}
+ {{ctx.Locale.Tr "admin.config.script_type"}}
+ {{.ScriptType}}
+ {{ctx.Locale.Tr "admin.config.reverse_auth_user"}}
+ {{.ReverseProxyAuthUser}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.config.ssh_enabled"}}
+ {{svg (Iif (not .SSH.Disabled) "octicon-check" "octicon-x")}}
+ {{if not .SSH.Disabled}}
+ {{ctx.Locale.Tr "admin.config.ssh_start_builtin_server"}}
+ {{svg (Iif .SSH.StartBuiltinServer "octicon-check" "octicon-x")}}
+ {{ctx.Locale.Tr "admin.config.ssh_domain"}}
+ {{.SSH.Domain}}
+ {{ctx.Locale.Tr "admin.config.ssh_port"}}
+ {{.SSH.Port}}
+ {{ctx.Locale.Tr "admin.config.ssh_listen_port"}}
+ {{.SSH.ListenPort}}
+
+ {{if not .SSH.StartBuiltinServer}}
+ {{ctx.Locale.Tr "admin.config.ssh_root_path"}}
+ {{.SSH.RootPath}}
+ {{ctx.Locale.Tr "admin.config.ssh_key_test_path"}}
+ {{.SSH.KeyTestPath}}
+ {{ctx.Locale.Tr "admin.config.ssh_keygen_path"}}
+ {{.SSH.KeygenPath}}
+ {{ctx.Locale.Tr "admin.config.ssh_minimum_key_size_check"}}
+ {{svg (Iif .SSH.MinimumKeySizeCheck "octicon-check" "octicon-x")}}
+ {{if .SSH.MinimumKeySizeCheck}}
+ {{ctx.Locale.Tr "admin.config.ssh_minimum_key_sizes"}}
+ {{.SSH.MinimumKeySizes}}
+ {{end}}
+ {{end}}
+ {{end}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.config.lfs_enabled"}}
+ {{svg (Iif .LFS.StartServer "octicon-check" "octicon-x")}}
+ {{if .LFS.StartServer}}
+ {{ctx.Locale.Tr "admin.config.lfs_content_path"}}
+ {{JsonUtils.EncodeToString .LFS.Storage.ToShadowCopy}}
+ {{ctx.Locale.Tr "admin.config.lfs_http_auth_expiry"}}
+ {{.LFS.HTTPAuthExpiry}}
+ {{end}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.config.db_type"}}
+ {{.DbCfg.Type}}
+ {{if not (eq .DbCfg.Type "sqlite3")}}
+ {{ctx.Locale.Tr "admin.config.db_host"}}
+ {{if .DbCfg.Host}}{{.DbCfg.Host}}{{else}}-{{end}}
+ {{ctx.Locale.Tr "admin.config.db_name"}}
+ {{if .DbCfg.Name}}{{.DbCfg.Name}}{{else}}-{{end}}
+ {{ctx.Locale.Tr "admin.config.db_user"}}
+ {{if .DbCfg.User}}{{.DbCfg.User}}{{else}}-{{end}}
+ {{end}}
+ {{if eq .DbCfg.Type "postgres"}}
+ {{ctx.Locale.Tr "admin.config.db_schema"}}
+ {{if .DbCfg.Schema}}{{.DbCfg.Schema}}{{else}}-{{end}}
+ {{ctx.Locale.Tr "admin.config.db_ssl_mode"}}
+ {{if .DbCfg.SSLMode}}{{.DbCfg.SSLMode}}{{else}}-{{end}}
+ {{end}}
+ {{if eq .DbCfg.Type "sqlite3"}}
+ {{ctx.Locale.Tr "admin.config.db_path"}}
+ {{if .DbCfg.Path}}{{.DbCfg.Path}}{{else}}-{{end}}
+ {{end}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.config.register_email_confirm"}}
+ {{svg (Iif .Service.RegisterEmailConfirm "octicon-check" "octicon-x")}}
+ {{ctx.Locale.Tr "admin.config.disable_register"}}
+ {{svg (Iif .Service.DisableRegistration "octicon-check" "octicon-x")}}
+ {{ctx.Locale.Tr "admin.config.allow_only_internal_registration"}}
+ {{svg (Iif .Service.AllowOnlyInternalRegistration "octicon-check" "octicon-x")}}
+ {{ctx.Locale.Tr "admin.config.allow_only_external_registration"}}
+ {{svg (Iif .Service.AllowOnlyExternalRegistration "octicon-check" "octicon-x")}}
+ {{ctx.Locale.Tr "admin.config.show_registration_button"}}
+ {{svg (Iif .Service.ShowRegistrationButton "octicon-check" "octicon-x")}}
+ {{ctx.Locale.Tr "admin.config.enable_openid_signup"}}
+ {{svg (Iif .Service.EnableOpenIDSignUp "octicon-check" "octicon-x")}}
+ {{ctx.Locale.Tr "admin.config.enable_openid_signin"}}
+ {{svg (Iif .Service.EnableOpenIDSignIn "octicon-check" "octicon-x")}}
+ {{ctx.Locale.Tr "admin.config.require_sign_in_view"}}
+ {{svg (Iif .Service.RequireSignInViewStrict "octicon-check" "octicon-x")}}
+ {{ctx.Locale.Tr "admin.config.mail_notify"}}
+ {{svg (Iif .Service.EnableNotifyMail "octicon-check" "octicon-x")}}
+ {{ctx.Locale.Tr "admin.config.enable_captcha"}}
+ {{svg (Iif .Service.EnableCaptcha "octicon-check" "octicon-x")}}
+ {{ctx.Locale.Tr "admin.config.default_keep_email_private"}}
+ {{svg (Iif .Service.DefaultKeepEmailPrivate "octicon-check" "octicon-x")}}
+ {{ctx.Locale.Tr "admin.config.default_allow_create_organization"}}
+ {{svg (Iif .Service.DefaultAllowCreateOrganization "octicon-check" "octicon-x")}}
+ {{ctx.Locale.Tr "admin.config.enable_timetracking"}}
+ {{svg (Iif .Service.EnableTimetracking "octicon-check" "octicon-x")}}
+ {{if .Service.EnableTimetracking}}
+ {{ctx.Locale.Tr "admin.config.default_enable_timetracking"}}
+ {{svg (Iif .Service.DefaultEnableTimetracking "octicon-check" "octicon-x")}}
+ {{ctx.Locale.Tr "admin.config.default_allow_only_contributors_to_track_time"}}
+ {{svg (Iif .Service.DefaultAllowOnlyContributorsToTrackTime "octicon-check" "octicon-x")}}
+ {{end}}
+ {{ctx.Locale.Tr "admin.config.default_visibility_organization"}}
+ {{.Service.DefaultOrgVisibility}}
+
+ {{ctx.Locale.Tr "admin.config.no_reply_address"}}
+ {{if .Service.NoReplyAddress}}{{.Service.NoReplyAddress}}{{else}}-{{end}}
+ {{ctx.Locale.Tr "admin.config.default_enable_dependencies"}}
+ {{svg (Iif .Service.DefaultEnableDependencies "octicon-check" "octicon-x")}}
+
+ {{ctx.Locale.Tr "admin.config.active_code_lives"}}
+ {{.Service.ActiveCodeLives}} {{ctx.Locale.Tr "tool.raw_minutes"}}
+ {{ctx.Locale.Tr "admin.config.reset_password_code_lives"}}
+ {{.Service.ResetPwdCodeLives}} {{ctx.Locale.Tr "tool.raw_minutes"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.config.queue_length"}}
+ {{.Webhook.QueueLength}}
+ {{ctx.Locale.Tr "admin.config.deliver_timeout"}}
+ {{.Webhook.DeliverTimeout}} {{ctx.Locale.Tr "tool.raw_seconds"}}
+ {{ctx.Locale.Tr "admin.config.skip_tls_verify"}}
+ {{svg (Iif .Webhook.SkipTLSVerify "octicon-check" "octicon-x")}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.config.mailer_enabled"}}
+ {{svg (Iif .MailerEnabled "octicon-check" "octicon-x")}}
+ {{if .MailerEnabled}}
+ {{ctx.Locale.Tr "admin.config.mailer_name"}}
+ {{.Mailer.Name}}
+ {{if eq .Mailer.Protocol "sendmail"}}
+ {{ctx.Locale.Tr "admin.config.mailer_use_sendmail"}}
+ {{svg "octicon-check"}}
+ {{ctx.Locale.Tr "admin.config.mailer_sendmail_path"}}
+ {{.Mailer.SendmailPath}}
+ {{ctx.Locale.Tr "admin.config.mailer_sendmail_args"}}
+ {{.Mailer.SendmailArgs}}
+ {{ctx.Locale.Tr "admin.config.mailer_sendmail_timeout"}}
+ {{.Mailer.SendmailTimeout}} {{ctx.Locale.Tr "tool.raw_seconds"}}
+ {{else if eq .Mailer.Protocol "dummy"}}
+ {{ctx.Locale.Tr "admin.config.mailer_use_dummy"}}
+ {{svg "octicon-check"}}
+ {{else}}{{/* SMTP family */}}
+ {{ctx.Locale.Tr "admin.config.mailer_protocol"}}
+ {{.Mailer.Protocol}}
+ {{ctx.Locale.Tr "admin.config.mailer_enable_helo"}}
+ {{svg (Iif .Mailer.EnableHelo "octicon-check" "octicon-x")}}
+ {{ctx.Locale.Tr "admin.config.mailer_smtp_addr"}}
+ {{.Mailer.SMTPAddr}}
+ {{ctx.Locale.Tr "admin.config.mailer_smtp_port"}}
+ {{.Mailer.SMTPPort}}
+ {{end}}
+ {{ctx.Locale.Tr "admin.config.mailer_user"}}
+ {{if .Mailer.User}}{{.Mailer.User}}{{else}}(empty){{end}}
+
+ {{ctx.Locale.Tr "admin.config.send_test_mail"}}
+
+
+ {{.CsrfTokenHtml}}
+
+
+
+ {{ctx.Locale.Tr "admin.config.send_test_mail_submit"}}
+
+
+ {{end}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.config.cache_adapter"}}
+ {{.CacheAdapter}}
+ {{if eq .CacheAdapter "memory"}}
+ {{ctx.Locale.Tr "admin.config.cache_interval"}}
+ {{.CacheInterval}} {{ctx.Locale.Tr "tool.raw_seconds"}}
+ {{end}}
+ {{if .CacheConn}}
+ {{ctx.Locale.Tr "admin.config.cache_conn"}}
+ {{.CacheConn}}
+ {{ctx.Locale.Tr "admin.config.cache_item_ttl"}}
+ {{.CacheItemTTL}}
+ {{end}}
+
+ {{ctx.Locale.Tr "admin.config.cache_test"}}
+
+
+ {{.CsrfTokenHtml}}
+ {{ctx.Locale.Tr "test"}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.config.session_provider"}}
+ {{.SessionConfig.Provider}}
+ {{ctx.Locale.Tr "admin.config.provider_config"}}
+ {{if .SessionConfig.ProviderConfig}}{{.SessionConfig.ProviderConfig}}{{else}}-{{end}}
+ {{ctx.Locale.Tr "admin.config.cookie_name"}}
+ {{.SessionConfig.CookieName}}
+ {{ctx.Locale.Tr "admin.config.gc_interval_time"}}
+ {{.SessionConfig.Gclifetime}} {{ctx.Locale.Tr "tool.raw_seconds"}}
+ {{ctx.Locale.Tr "admin.config.session_life_time"}}
+ {{.SessionConfig.Maxlifetime}} {{ctx.Locale.Tr "tool.raw_seconds"}}
+ {{ctx.Locale.Tr "admin.config.https_only"}}
+ {{svg (Iif .SessionConfig.Secure "octicon-check" "octicon-x")}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.config.git_disable_diff_highlight"}}
+ {{svg (Iif .Git.DisableDiffHighlight "octicon-check" "octicon-x")}}
+ {{ctx.Locale.Tr "admin.config.git_max_diff_lines"}}
+ {{.Git.MaxGitDiffLines}}
+ {{ctx.Locale.Tr "admin.config.git_max_diff_line_characters"}}
+ {{.Git.MaxGitDiffLineCharacters}}
+ {{ctx.Locale.Tr "admin.config.git_max_diff_files"}}
+ {{.Git.MaxGitDiffFiles}}
+ {{ctx.Locale.Tr "admin.config.git_gc_args"}}
+ {{.Git.GCArgs}}
+
+
+
+ {{ctx.Locale.Tr "admin.config.git_migrate_timeout"}}
+ {{.Git.Timeout.Migrate}} {{ctx.Locale.Tr "tool.raw_seconds"}}
+ {{ctx.Locale.Tr "admin.config.git_mirror_timeout"}}
+ {{.Git.Timeout.Mirror}} {{ctx.Locale.Tr "tool.raw_seconds"}}
+ {{ctx.Locale.Tr "admin.config.git_clone_timeout"}}
+ {{.Git.Timeout.Clone}} {{ctx.Locale.Tr "tool.raw_seconds"}}
+ {{ctx.Locale.Tr "admin.config.git_pull_timeout"}}
+ {{.Git.Timeout.Pull}} {{ctx.Locale.Tr "tool.raw_seconds"}}
+ {{ctx.Locale.Tr "admin.config.git_gc_timeout"}}
+ {{.Git.Timeout.GC}} {{ctx.Locale.Tr "tool.raw_seconds"}}
+
+
+
+
+
+
+ {{if .Loggers.xorm.IsEnabled}}
+ {{ctx.Locale.Tr "admin.config.xorm_log_sql"}}
+ {{svg (Iif $.LogSQL "octicon-check" "octicon-x")}}
+ {{end}}
+
+ {{if .Loggers.access.IsEnabled}}
+ {{ctx.Locale.Tr "admin.config.access_log_template"}}
+ {{$.AccessLogTemplate}}
+ {{end}}
+
+ {{range $loggerName, $loggerDetail := .Loggers}}
+ {{ctx.Locale.Tr "admin.config.logger_name_fmt" $loggerName}}
+ {{if $loggerDetail.IsEnabled}}
+ {{$loggerDetail.EventWriters | JsonUtils.EncodeToString | JsonUtils.PrettyIndent}}
+ {{else}}
+ {{ctx.Locale.Tr "admin.config.disabled_logger"}}
+ {{end}}
+ {{end}}
+
+
+
+{{template "admin/layout_footer" .}}
diff --git a/admin/config_settings.tmpl b/admin/config_settings.tmpl
new file mode 100644
index 0000000..6b9bb82
--- /dev/null
+++ b/admin/config_settings.tmpl
@@ -0,0 +1,42 @@
+{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin config")}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.config.open_with_editor_app_help"}}
+ {{.DefaultOpenWithEditorAppsString}}
+
+
+
+ {{(.SystemConfig.Repository.OpenWithEditorApps.Value ctx).ToTextareaString}}
+
+
+ {{ctx.Locale.Tr "save"}}
+
+
+
+{{template "admin/layout_footer" .}}
diff --git a/admin/cron.tmpl b/admin/cron.tmpl
new file mode 100644
index 0000000..309cbce
--- /dev/null
+++ b/admin/cron.tmpl
@@ -0,0 +1,39 @@
+{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin monitor")}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.monitor.name"}}
+ {{ctx.Locale.Tr "admin.monitor.schedule"}}
+ {{ctx.Locale.Tr "admin.monitor.next"}}
+ {{ctx.Locale.Tr "admin.monitor.previous"}}
+ {{ctx.Locale.Tr "admin.monitor.execute_times"}}
+ {{ctx.Locale.Tr "admin.monitor.last_execution_result"}}
+
+
+
+ {{range .Entries}}
+
+ {{svg "octicon-triangle-right"}}
+ {{ctx.Locale.Tr (printf "admin.dashboard.%s" .Name)}}
+ {{.Spec}}
+ {{DateUtils.FullTime .Next}}
+ {{if gt .Prev.Year 1}}{{DateUtils.FullTime .Prev}}{{else}}-{{end}}
+ {{.ExecTimes}}
+ {{if eq .Status ""}}—{{else}}{{svg (Iif (eq .Status "finished") "octicon-check" "octicon-x") 16}}{{end}}
+
+ {{end}}
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+
+{{template "admin/layout_footer" .}}
diff --git a/admin/dashboard.tmpl b/admin/dashboard.tmpl
new file mode 100644
index 0000000..af2349d
--- /dev/null
+++ b/admin/dashboard.tmpl
@@ -0,0 +1,86 @@
+{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin dashboard")}}
+
+ {{if .NeedUpdate}}
+
+
{{ctx.Locale.Tr "admin.dashboard.new_version_hint" .RemoteVersion AppVer "https://blog.gitea.com"}}
+
+ {{end}}
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+
+ {{ctx.Locale.Tr "admin.dashboard.delete_inactive_accounts"}}
+ {{svg "octicon-play"}} {{ctx.Locale.Tr "admin.dashboard.operation_run"}}
+
+
+ {{ctx.Locale.Tr "admin.dashboard.delete_repo_archives"}}
+ {{svg "octicon-play"}} {{ctx.Locale.Tr "admin.dashboard.operation_run"}}
+
+
+ {{ctx.Locale.Tr "admin.dashboard.delete_missing_repos"}}
+ {{svg "octicon-play"}} {{ctx.Locale.Tr "admin.dashboard.operation_run"}}
+
+
+ {{ctx.Locale.Tr "admin.dashboard.git_gc_repos"}}
+ {{svg "octicon-play"}} {{ctx.Locale.Tr "admin.dashboard.operation_run"}}
+
+ {{if and (not .SSH.Disabled) (not .SSH.StartBuiltinServer)}}
+
+ {{ctx.Locale.Tr "admin.dashboard.resync_all_sshkeys"}}
+ {{svg "octicon-play"}} {{ctx.Locale.Tr "admin.dashboard.operation_run"}}
+
+
+ {{ctx.Locale.Tr "admin.dashboard.resync_all_sshprincipals"}}
+ {{svg "octicon-play" 16}} {{ctx.Locale.Tr "admin.dashboard.operation_run"}}
+
+ {{end}}
+
+ {{ctx.Locale.Tr "admin.dashboard.resync_all_hooks"}}
+ {{svg "octicon-play"}} {{ctx.Locale.Tr "admin.dashboard.operation_run"}}
+
+
+ {{ctx.Locale.Tr "admin.dashboard.reinit_missing_repos"}}
+ {{svg "octicon-play"}} {{ctx.Locale.Tr "admin.dashboard.operation_run"}}
+
+
+ {{ctx.Locale.Tr "admin.dashboard.sync_external_users"}}
+ {{svg "octicon-play"}} {{ctx.Locale.Tr "admin.dashboard.operation_run"}}
+
+
+ {{ctx.Locale.Tr "admin.dashboard.repo_health_check"}}
+ {{svg "octicon-play"}} {{ctx.Locale.Tr "admin.dashboard.operation_run"}}
+
+
+ {{ctx.Locale.Tr "admin.dashboard.delete_generated_repository_avatars"}}
+ {{svg "octicon-play"}} {{ctx.Locale.Tr "admin.dashboard.operation_run"}}
+
+
+ {{ctx.Locale.Tr "admin.dashboard.sync_repo_branches"}}
+ {{svg "octicon-play"}} {{ctx.Locale.Tr "admin.dashboard.operation_run"}}
+
+
+ {{ctx.Locale.Tr "admin.dashboard.sync_repo_tags"}}
+ {{svg "octicon-play"}} {{ctx.Locale.Tr "admin.dashboard.operation_run"}}
+
+
+
+
+
+
+
+ {{/* TODO: make these stats work in multi-server deployments, likely needs per-server stats in DB */}}
+
+
+
+ {{template "admin/system_status" .}}
+
+
+
+{{template "admin/layout_footer" .}}
diff --git a/admin/emails/list.tmpl b/admin/emails/list.tmpl
new file mode 100644
index 0000000..0dc1fb9
--- /dev/null
+++ b/admin/emails/list.tmpl
@@ -0,0 +1,101 @@
+{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin user")}}
+
+
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.users.name"}}
+ {{SortArrow "username" "reverseusername" $.SortType false}}
+
+ {{ctx.Locale.Tr "admin.users.full_name"}}
+
+ {{ctx.Locale.Tr "email"}}
+ {{SortArrow "email" "reverseemail" $.SortType true}}
+
+ {{ctx.Locale.Tr "admin.emails.primary"}}
+ {{ctx.Locale.Tr "admin.emails.activated"}}
+
+
+
+
+ {{range .Emails}}
+
+ {{.Name}}
+ {{.FullName}}
+ {{.Email}}
+ {{svg (Iif .IsPrimary "octicon-check" "octicon-x")}}
+
+ {{if .CanChange}}
+
+ {{svg (Iif .IsActivated "octicon-check" "octicon-x")}}
+
+ {{else}}
+ {{svg (Iif .IsActivated "octicon-check" "octicon-x")}}
+ {{end}}
+
+
+ {{svg "octicon-trash"}}
+
+
+ {{end}}
+
+
+
+
+ {{template "base/paginate" .}}
+
+
+
+
+ {{ctx.Locale.Tr "admin.emails.change_email_text"}}
+
+ {{$.CsrfTokenHtml}}
+
+
+
+
+
+
+
+
+
+
+
+ {{template "base/modal_actions_confirm" .}}
+
+
+
+
+{{template "admin/layout_footer" .}}
diff --git a/admin/hook_new.tmpl b/admin/hook_new.tmpl
new file mode 100644
index 0000000..37dcc49
--- /dev/null
+++ b/admin/hook_new.tmpl
@@ -0,0 +1,13 @@
+{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin settings new webhook")}}
+
+ {{$CustomHeaderTitle := ctx.Locale.Tr "admin.defaulthooks.update_webhook"}}
+ {{if .PageIsAdminDefaultHooksNew}}
+ {{$CustomHeaderTitle = ctx.Locale.Tr "admin.defaulthooks.add_webhook"}}
+ {{else if .PageIsAdminSystemHooksNew}}
+ {{$CustomHeaderTitle = ctx.Locale.Tr "admin.systemhooks.add_webhook"}}
+ {{else if .Webhook.IsSystemWebhook}}
+ {{$CustomHeaderTitle = ctx.Locale.Tr "admin.systemhooks.update_webhook"}}
+ {{end}}
+ {{template "webhook/new" (dict "ctxData" . "CustomHeaderTitle" $CustomHeaderTitle)}}
+
+{{template "admin/layout_footer" .}}
diff --git a/admin/hooks.tmpl b/admin/hooks.tmpl
new file mode 100644
index 0000000..c77d27d
--- /dev/null
+++ b/admin/hooks.tmpl
@@ -0,0 +1,9 @@
+{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin hooks")}}
+
+
+ {{template "repo/settings/webhook/base_list" .SystemWebhooks}}
+ {{template "repo/settings/webhook/base_list" .DefaultWebhooks}}
+
+ {{template "repo/settings/webhook/delete_modal" .}}
+
+{{template "admin/layout_footer" .}}
diff --git a/admin/layout_footer.tmpl b/admin/layout_footer.tmpl
new file mode 100644
index 0000000..8d6e564
--- /dev/null
+++ b/admin/layout_footer.tmpl
@@ -0,0 +1,11 @@
+{{if false}}{{/* to make html structure "likely" complete to prevent IDE warnings */}}
+
+
+
+ {{/* block: admin-setting-content */}}
+{{end}}
+
+
+
+
+{{template "base/footer" .}}
diff --git a/admin/layout_head.tmpl b/admin/layout_head.tmpl
new file mode 100644
index 0000000..7cc6624
--- /dev/null
+++ b/admin/layout_head.tmpl
@@ -0,0 +1,13 @@
+{{template "base/head" .ctxData}}
+
+
+ {{template "admin/navbar" .ctxData}}
+
+ {{template "base/alert" .ctxData}}
+ {{/* block: admin-setting-content */}}
+
+{{if false}}{{/* to make html structure "likely" complete to prevent IDE warnings */}}
+
+
+
+{{end}}
diff --git a/admin/navbar.tmpl b/admin/navbar.tmpl
new file mode 100644
index 0000000..4116357
--- /dev/null
+++ b/admin/navbar.tmpl
@@ -0,0 +1,116 @@
+
+
+
diff --git a/admin/notice.tmpl b/admin/notice.tmpl
new file mode 100644
index 0000000..fd475d7
--- /dev/null
+++ b/admin/notice.tmpl
@@ -0,0 +1,68 @@
+{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin notice")}}
+
+
+
+ {{template "base/paginate" .}}
+
+
+
+
+{{template "admin/layout_footer" .}}
diff --git a/admin/org/list.tmpl b/admin/org/list.tmpl
new file mode 100644
index 0000000..d5e0993
--- /dev/null
+++ b/admin/org/list.tmpl
@@ -0,0 +1,76 @@
+{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin user")}}
+
+
+
+
+
+
+
+
+
+ ID{{SortArrow "oldest" "newest" $.SortType false}}
+
+ {{ctx.Locale.Tr "admin.orgs.name"}}
+ {{SortArrow "alphabetically" "reversealphabetically" $.SortType true}}
+
+ {{ctx.Locale.Tr "admin.orgs.teams"}}
+ {{ctx.Locale.Tr "admin.orgs.members"}}
+ {{ctx.Locale.Tr "admin.users.repos"}}
+
+ {{ctx.Locale.Tr "admin.users.created"}}
+ {{SortArrow "recentupdate" "leastupdate" $.SortType false}}
+
+
+
+
+
+ {{range .Users}}
+
+ {{.ID}}
+
+ {{if and DefaultShowFullName .FullName}}{{.FullName}} ({{.Name}}){{else}}{{.Name}}{{end}}
+ {{if .Visibility.IsPrivate}}
+ {{svg "octicon-lock"}}
+ {{end}}
+ {{if eq .Type 3}}{{/* Reserved organization */}}
+ {{ctx.Locale.Tr "admin.users.reserved"}}
+ {{end}}
+
+ {{.NumTeams}}
+ {{.NumMembers}}
+ {{.NumRepos}}
+ {{DateUtils.AbsoluteShort .CreatedUnix}}
+ {{svg "octicon-pencil"}}
+
+ {{end}}
+
+
+
+
+ {{template "base/paginate" .}}
+
+{{template "admin/layout_footer" .}}
diff --git a/admin/packages/list.tmpl b/admin/packages/list.tmpl
new file mode 100644
index 0000000..08c1144
--- /dev/null
+++ b/admin/packages/list.tmpl
@@ -0,0 +1,96 @@
+{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin user")}}
+
+
+
+
+
+ {{template "shared/search/input" dict "Value" .Query}}
+
+ {{ctx.Locale.Tr "packages.filter.type"}}
+ {{ctx.Locale.Tr "packages.filter.type.all"}}
+ {{range $type := .AvailableTypes}}
+ {{$type.Name}}
+ {{end}}
+
+ {{template "shared/search/button"}}
+
+
+
+
+
+
+
+ ID
+ {{ctx.Locale.Tr "admin.packages.owner"}}
+ {{ctx.Locale.Tr "admin.packages.type"}}
+
+ {{ctx.Locale.Tr "admin.packages.name"}}
+ {{SortArrow "name_asc" "name_desc" .SortType false}}
+
+
+ {{ctx.Locale.Tr "admin.packages.version"}}
+ {{SortArrow "version_desc" "version_asc" .SortType false}}
+
+ {{ctx.Locale.Tr "admin.packages.creator"}}
+ {{ctx.Locale.Tr "admin.packages.repository"}}
+ {{ctx.Locale.Tr "admin.packages.size"}}
+
+ {{ctx.Locale.Tr "admin.packages.published"}}
+ {{SortArrow "created_asc" "created_desc" .SortType true}}
+
+ {{ctx.Locale.Tr "admin.notices.op"}}
+
+
+
+ {{range .PackageDescriptors}}
+
+ {{.Version.ID}}
+
+ {{.Owner.Name}}
+ {{if .Owner.Visibility.IsPrivate}}
+ {{svg "octicon-lock"}}
+ {{end}}
+
+ {{.Package.Type.Name}}
+ {{.Package.Name}}
+ {{.Version.Version}}
+ {{.Creator.Name}}
+
+ {{if .Repository}}
+ {{.Repository.Name}}
+ {{end}}
+
+ {{FileSize .CalculateBlobSize}}
+ {{DateUtils.AbsoluteShort .Version.CreatedUnix}}
+ {{svg "octicon-trash"}}
+
+ {{end}}
+
+
+
+
+ {{template "base/paginate" .}}
+
+
+
+
+
+ {{ctx.Locale.Tr "packages.settings.delete.notice" (` `|SafeHTML) (` `|SafeHTML)}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+
+{{template "admin/layout_footer" .}}
diff --git a/admin/queue.tmpl b/admin/queue.tmpl
new file mode 100644
index 0000000..1be35cf
--- /dev/null
+++ b/admin/queue.tmpl
@@ -0,0 +1,36 @@
+{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin monitor")}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.monitor.queue.name"}}
+ {{ctx.Locale.Tr "admin.monitor.queue.type"}}
+ {{ctx.Locale.Tr "admin.monitor.queue.exemplar"}}
+ {{ctx.Locale.Tr "admin.monitor.queue.numberworkers"}}
+ {{ctx.Locale.Tr "admin.monitor.queue.activeworkers"}}
+ {{ctx.Locale.Tr "admin.monitor.queue.numberinqueue"}}
+
+
+
+
+ {{range $qid, $q := .Queues}}
+
+ {{$q.GetName}}
+ {{$q.GetType}}
+ {{$q.GetItemTypeName}}
+ {{$q.GetWorkerNumber}}
+ {{$q.GetWorkerActiveNumber}}
+ {{$sum := $q.GetQueueItemNumber}}{{if lt $sum 0}}-{{else}}{{$sum}}{{end}}
+ {{ctx.Locale.Tr "admin.monitor.queue.review_add"}}
+
+ {{end}}
+
+
+
+
+{{template "admin/layout_footer" .}}
+
diff --git a/admin/queue_manage.tmpl b/admin/queue_manage.tmpl
new file mode 100644
index 0000000..dc0196f
--- /dev/null
+++ b/admin/queue_manage.tmpl
@@ -0,0 +1,61 @@
+{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin monitor")}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.monitor.queue.name"}}
+ {{ctx.Locale.Tr "admin.monitor.queue.type"}}
+ {{ctx.Locale.Tr "admin.monitor.queue.exemplar"}}
+ {{ctx.Locale.Tr "admin.monitor.queue.numberworkers"}}
+ {{ctx.Locale.Tr "admin.monitor.queue.activeworkers"}}
+ {{ctx.Locale.Tr "admin.monitor.queue.maxnumberworkers"}}
+ {{ctx.Locale.Tr "admin.monitor.queue.numberinqueue"}}
+
+
+
+
+ {{.Queue.GetName}}
+ {{.Queue.GetType}}
+ {{.Queue.GetItemTypeName}}
+ {{.Queue.GetWorkerNumber}}
+ {{.Queue.GetWorkerActiveNumber}}
+ {{.Queue.GetWorkerMaxNumber}}
+
+ {{$sum := .Queue.GetQueueItemNumber}}
+ {{if lt $sum 0}}
+ -
+ {{else}}
+ {{$sum}}
+
+ {{$.CsrfTokenHtml}}
+ {{ctx.Locale.Tr "admin.monitor.queue.settings.remove_all_items"}}
+
+ {{end}}
+
+
+
+
+
+
+
+
+
{{ctx.Locale.Tr "admin.monitor.queue.settings.desc"}}
+
+ {{$.CsrfTokenHtml}}
+
+
+
+
+{{template "admin/layout_footer" .}}
diff --git a/admin/repo/list.tmpl b/admin/repo/list.tmpl
new file mode 100644
index 0000000..08fd893
--- /dev/null
+++ b/admin/repo/list.tmpl
@@ -0,0 +1,110 @@
+{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin")}}
+
+
+
+ {{template "shared/repo_search" .}}
+
+
+
+
+
+ ID{{SortArrow "oldest" "newest" $.SortType false}}
+ {{ctx.Locale.Tr "admin.repos.owner"}}
+
+ {{ctx.Locale.Tr "admin.repos.name"}}
+ {{SortArrow "alphabetically" "reversealphabetically" $.SortType false}}
+
+ {{ctx.Locale.Tr "repo.watchers"}}
+
+ {{ctx.Locale.Tr "repo.stars"}}
+ {{SortArrow "moststars" "feweststars" $.SortType false}}
+
+
+ {{ctx.Locale.Tr "repo.forks"}}
+ {{SortArrow "mostforks" "fewestforks" $.SortType false}}
+
+ {{ctx.Locale.Tr "admin.repos.issues"}}
+
+ {{ctx.Locale.Tr "admin.repos.size"}}
+ {{SortArrow "gitsize" "reversegitsize" $.SortType false}}
+
+
+ {{ctx.Locale.Tr "admin.repos.lfs_size"}}
+ {{SortArrow "lfssize" "reverselfssize" $.SortType false}}
+
+ {{ctx.Locale.Tr "admin.auths.updated"}}
+ {{ctx.Locale.Tr "admin.users.created"}}
+ {{ctx.Locale.Tr "admin.notices.op"}}
+
+
+
+ {{range .Repos}}
+
+ {{.ID}}
+
+ {{.Owner.Name}}
+ {{if .Owner.Visibility.IsPrivate}}
+ {{svg "octicon-lock"}}
+ {{end}}
+
+
+ {{.Name}}
+ {{if .IsArchived}}
+ {{ctx.Locale.Tr "repo.desc.archived"}}
+ {{end}}
+ {{if .IsPrivate}}
+ {{ctx.Locale.Tr "repo.desc.private"}}
+ {{else}}
+ {{if .Owner.Visibility.IsPrivate}}
+ {{ctx.Locale.Tr "repo.desc.internal"}}
+ {{end}}
+ {{end}}
+ {{if .IsTemplate}}
+ {{ctx.Locale.Tr "repo.desc.template"}}
+ {{end}}
+ {{if eq .ObjectFormatName "sha256"}}
+ {{ctx.Locale.Tr "repo.desc.sha256"}}
+ {{end}}
+ {{if .IsMirror}}
+ {{svg "octicon-mirror"}}
+ {{else if .IsFork}}
+ {{svg "octicon-repo-forked"}}
+ {{end}}
+
+ {{.NumWatches}}
+ {{.NumStars}}
+ {{.NumForks}}
+ {{.NumIssues}}
+ {{FileSize .GitSize}}
+ {{FileSize .LFSSize}}
+ {{DateUtils.AbsoluteShort .UpdatedUnix}}
+ {{DateUtils.AbsoluteShort .CreatedUnix}}
+ {{svg "octicon-trash"}}
+
+ {{end}}
+
+
+
+
+ {{template "base/paginate" .}}
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.delete_desc"}}
+ {{ctx.Locale.Tr "repo.settings.delete_notices_2" (`
`|SafeHTML)}}
+ {{ctx.Locale.Tr "repo.settings.delete_notices_fork_1"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+
+{{template "admin/layout_footer" .}}
diff --git a/admin/repo/unadopted.tmpl b/admin/repo/unadopted.tmpl
new file mode 100644
index 0000000..6f26fa5
--- /dev/null
+++ b/admin/repo/unadopted.tmpl
@@ -0,0 +1,75 @@
+{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin")}}
+
+
+
+
+
+
+
+ {{template "shared/search/button"}}
+
+
+
+ {{if .search}}
+
+ {{if .Dirs}}
+
+ {{range $dirI, $dir := .Dirs}}
+
+
{{svg "octicon-file-directory-fill"}} {{$dir}}
+
+
{{svg "octicon-plus"}} {{ctx.Locale.Tr "repo.adopt_preexisting_label"}}
+
+
+
+
{{ctx.Locale.Tr "repo.adopt_preexisting_content" $dir}}
+
+
+ {{$.CsrfTokenHtml}}
+
+
+
+
+ {{template "base/modal_actions_confirm"}}
+
+
+
{{svg "octicon-x"}} {{ctx.Locale.Tr "repo.delete_preexisting_label"}}
+
+
+
+
{{ctx.Locale.Tr "repo.delete_preexisting_content" $dir}}
+
+
+ {{$.CsrfTokenHtml}}
+
+
+
+
+ {{template "base/modal_actions_confirm"}}
+
+
+
+
+ {{end}}
+
+ {{template "base/paginate" .}}
+ {{else}}
+
+ {{ctx.Locale.Tr "admin.repos.unadopted.no_more"}}
+
+ {{template "base/paginate" .}}
+ {{end}}
+
+ {{end}}
+
+
+{{template "admin/layout_footer" .}}
diff --git a/admin/runners/edit.tmpl b/admin/runners/edit.tmpl
new file mode 100644
index 0000000..1165c84
--- /dev/null
+++ b/admin/runners/edit.tmpl
@@ -0,0 +1,5 @@
+{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin runners")}}
+
+ {{template "shared/actions/runner_edit" .}}
+
+{{template "admin/layout_footer" .}}
diff --git a/admin/self_check.tmpl b/admin/self_check.tmpl
new file mode 100644
index 0000000..a7f43f4
--- /dev/null
+++ b/admin/self_check.tmpl
@@ -0,0 +1,60 @@
+{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin")}}
+
+
+
+
+ {{if .StartupProblems}}
+
+
+
{{ctx.Locale.Tr "admin.self_check.startup_warnings"}}
+
{{range .StartupProblems}}{{.}} {{end}}
+
+
+ {{end}}
+
+
+
+ {{if .DatabaseCheckHasProblems}}
+
+ {{if .DatabaseType.IsMySQL}}
+
{{ctx.Locale.Tr "admin.self_check.database_fix_mysql"}}
+ {{else if .DatabaseType.IsMSSQL}}
+
{{ctx.Locale.Tr "admin.self_check.database_fix_mssql"}}
+ {{end}}
+ {{if .DatabaseCheckCollationMismatch}}
+
{{ctx.Locale.Tr "admin.self_check.database_collation_mismatch" .DatabaseCheckResult.ExpectedCollation}}
+ {{end}}
+ {{if .DatabaseCheckCollationCaseInsensitive}}
+
{{ctx.Locale.Tr "admin.self_check.database_collation_case_insensitive" .DatabaseCheckResult.DatabaseCollation}}
+ {{end}}
+ {{if .DatabaseCheckInconsistentCollationColumns}}
+
+
+ {{ctx.Locale.Tr "admin.self_check.database_inconsistent_collation_columns" .DatabaseCheckResult.DatabaseCollation}}
+
+ {{range .DatabaseCheckInconsistentCollationColumns}}
+ {{.}}
+ {{end}}
+
+
+
+ {{end}}
+
+ {{end}}
+
+ {{if .CacheError}}
+
{{ctx.Locale.Tr "admin.config.cache_test_failed" .CacheError}}
+ {{end}}
+ {{if .CacheSlow}}
+
{{ctx.Locale.Tr "admin.config.cache_test_slow" .CacheSlow}}
+ {{end}}
+
+ {{/* only shown when there is no visible "self-check-problem" */}}
+
+ {{ctx.Locale.Tr "admin.self_check.no_problem_found"}}
+
+
+
+{{template "admin/layout_footer" .}}
diff --git a/admin/stacktrace-row.tmpl b/admin/stacktrace-row.tmpl
new file mode 100644
index 0000000..97c361f
--- /dev/null
+++ b/admin/stacktrace-row.tmpl
@@ -0,0 +1,66 @@
+
+
+
+ {{if eq .Process.Type "request"}}
+ {{svg "octicon-globe" 16}}
+ {{else if eq .Process.Type "system"}}
+ {{svg "octicon-cpu" 16}}
+ {{else if eq .Process.Type "normal"}}
+ {{svg "octicon-terminal" 16}}
+ {{else}}
+ {{svg "octicon-code" 16}}
+ {{end}}
+
+
+
+
{{if ne .Process.Type "none"}}{{DateUtils.TimeSince .Process.Start}}{{end}}
+
+
+
+ {{if .Process.Stacks}}
+
+ {{range .Process.Stacks}}
+
+
+
+
+
+
+ {{range .Labels}}
+
+ {{end}}
+
+
+
+
+ {{range .Entry}}
+
+
{{svg "octicon-dot-fill" 16}}
+
+
+
{{.File}}:{{.Line}}
+
+
+ {{end}}
+
+
+
+ {{end}}
+
+ {{end}}
+
+ {{if .Process.Children}}
+
+ {{range .Process.Children}}
+ {{template "admin/stacktrace-row" dict "Process" . "root" $.root}}
+ {{end}}
+
+ {{end}}
+
+
diff --git a/admin/stacktrace.tmpl b/admin/stacktrace.tmpl
new file mode 100644
index 0000000..ce03d80
--- /dev/null
+++ b/admin/stacktrace.tmpl
@@ -0,0 +1,48 @@
+{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin monitor")}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.monitor.download_diagnosis_report"}}
+ {{ctx.Locale.Tr "tool.raw_seconds"}}
+
+
+
+
+
+
+
+
+ {{if .ProcessStacks}}
+
+
+ {{range .ProcessStacks}}
+ {{template "admin/stacktrace-row" dict "Process" . "root" $}}
+ {{end}}
+
+
+ {{end}}
+
+
+
+
+
+
{{ctx.Locale.Tr "admin.monitor.process.cancel_notices" (` `|SafeHTML)}}
+
{{ctx.Locale.Tr "admin.monitor.process.cancel_desc"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+
+{{template "admin/layout_footer" .}}
diff --git a/admin/stats.tmpl b/admin/stats.tmpl
new file mode 100644
index 0000000..04fa862
--- /dev/null
+++ b/admin/stats.tmpl
@@ -0,0 +1,17 @@
+{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin monitor")}}
+
+
+
+
+ {{range $statsKey := .StatsKeys}}
+
+ {{$statsKey}}
+ {{index $.StatsCounter $statsKey}}
+
+ {{end}}
+
+
+
+{{template "admin/layout_footer" .}}
diff --git a/admin/system_status.tmpl b/admin/system_status.tmpl
new file mode 100644
index 0000000..7b5c9be
--- /dev/null
+++ b/admin/system_status.tmpl
@@ -0,0 +1,62 @@
+
+ {{ctx.Locale.Tr "admin.dashboard.server_uptime"}}
+ {{.SysStatus.StartTime}}
+ {{ctx.Locale.Tr "admin.dashboard.current_goroutine"}}
+ {{.SysStatus.NumGoroutine}}
+
+ {{ctx.Locale.Tr "admin.dashboard.current_memory_usage"}}
+ {{.SysStatus.MemAllocated}}
+ {{ctx.Locale.Tr "admin.dashboard.total_memory_allocated"}}
+ {{.SysStatus.MemTotal}}
+ {{ctx.Locale.Tr "admin.dashboard.memory_obtained"}}
+ {{.SysStatus.MemSys}}
+ {{ctx.Locale.Tr "admin.dashboard.pointer_lookup_times"}}
+ {{.SysStatus.Lookups}}
+ {{ctx.Locale.Tr "admin.dashboard.memory_allocate_times"}}
+ {{.SysStatus.MemMallocs}}
+ {{ctx.Locale.Tr "admin.dashboard.memory_free_times"}}
+ {{.SysStatus.MemFrees}}
+
+ {{ctx.Locale.Tr "admin.dashboard.current_heap_usage"}}
+ {{.SysStatus.HeapAlloc}}
+ {{ctx.Locale.Tr "admin.dashboard.heap_memory_obtained"}}
+ {{.SysStatus.HeapSys}}
+ {{ctx.Locale.Tr "admin.dashboard.heap_memory_idle"}}
+ {{.SysStatus.HeapIdle}}
+ {{ctx.Locale.Tr "admin.dashboard.heap_memory_in_use"}}
+ {{.SysStatus.HeapInuse}}
+ {{ctx.Locale.Tr "admin.dashboard.heap_memory_released"}}
+ {{.SysStatus.HeapReleased}}
+ {{ctx.Locale.Tr "admin.dashboard.heap_objects"}}
+ {{.SysStatus.HeapObjects}}
+
+ {{ctx.Locale.Tr "admin.dashboard.bootstrap_stack_usage"}}
+ {{.SysStatus.StackInuse}}
+ {{ctx.Locale.Tr "admin.dashboard.stack_memory_obtained"}}
+ {{.SysStatus.StackSys}}
+ {{ctx.Locale.Tr "admin.dashboard.mspan_structures_usage"}}
+ {{.SysStatus.MSpanInuse}}
+ {{ctx.Locale.Tr "admin.dashboard.mspan_structures_obtained"}}
+ {{.SysStatus.MSpanSys}}
+ {{ctx.Locale.Tr "admin.dashboard.mcache_structures_usage"}}
+ {{.SysStatus.MCacheInuse}}
+ {{ctx.Locale.Tr "admin.dashboard.mcache_structures_obtained"}}
+ {{.SysStatus.MCacheSys}}
+ {{ctx.Locale.Tr "admin.dashboard.profiling_bucket_hash_table_obtained"}}
+ {{.SysStatus.BuckHashSys}}
+ {{ctx.Locale.Tr "admin.dashboard.gc_metadata_obtained"}}
+ {{.SysStatus.GCSys}}
+ {{ctx.Locale.Tr "admin.dashboard.other_system_allocation_obtained"}}
+ {{.SysStatus.OtherSys}}
+
+ {{ctx.Locale.Tr "admin.dashboard.next_gc_recycle"}}
+ {{.SysStatus.NextGC}}
+ {{ctx.Locale.Tr "admin.dashboard.last_gc_time"}}
+ {{.SysStatus.LastGCTime}}
+ {{ctx.Locale.Tr "admin.dashboard.total_gc_pause"}}
+ {{.SysStatus.PauseTotalNs}}
+ {{ctx.Locale.Tr "admin.dashboard.last_gc_pause"}}
+ {{.SysStatus.PauseNs}}
+ {{ctx.Locale.Tr "admin.dashboard.gc_times"}}
+ {{.SysStatus.NumGC}}
+
diff --git a/admin/user/edit.tmpl b/admin/user/edit.tmpl
new file mode 100644
index 0000000..41b00de
--- /dev/null
+++ b/admin/user/edit.tmpl
@@ -0,0 +1,231 @@
+{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin edit user")}}
+
+
+
+
+ {{template "base/disable_form_autofill"}}
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "username"}}
+
+
+
+
+
{{ctx.Locale.Tr "admin.users.auth_source"}}
+
+
+
{{ctx.Locale.Tr "admin.users.local"}}
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+
+
{{ctx.Locale.Tr "settings.visibility"}}
+
+ {{if .User.Visibility.IsPublic}}
{{end}}
+ {{if .User.Visibility.IsLimited}}
{{end}}
+ {{if .User.Visibility.IsPrivate}}
{{end}}
+
+ {{if .User.Visibility.IsPublic}}{{ctx.Locale.Tr "settings.visibility.public"}}{{end}}
+ {{if .User.Visibility.IsLimited}}{{ctx.Locale.Tr "settings.visibility.limited"}}{{end}}
+ {{if .User.Visibility.IsPrivate}}{{ctx.Locale.Tr "settings.visibility.private"}}{{end}}
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.users.auth_login_name"}}
+
+
+
+ {{ctx.Locale.Tr "settings.full_name"}}
+
+
+
+ {{ctx.Locale.Tr "email"}}
+
+
+
+
{{ctx.Locale.Tr "password"}}
+
+
{{ctx.Locale.Tr "admin.users.password_helper"}}
+
+
+
+
{{ctx.Locale.Tr "settings.language"}}
+
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
{{range .AllLangs}}{{if eq $.User.Language .Lang}}{{.Name}}{{end}}{{end}}
+
+
+
+
+
+ {{ctx.Locale.Tr "settings.website"}}
+
+
+
+ {{ctx.Locale.Tr "settings.location"}}
+
+
+
+
+
+
+
{{ctx.Locale.Tr "admin.users.max_repo_creation"}}
+
+
{{ctx.Locale.Tr "admin.users.max_repo_creation_desc"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.users.is_activated"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.users.prohibit_login"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.users.is_admin"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.users.is_restricted"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.users.allow_git_hook"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.users.allow_import_local"}}
+
+
+
+ {{if not .DisableRegularOrgCreation}}
+
+
+ {{ctx.Locale.Tr "admin.users.allow_create_organization"}}
+
+
+
+ {{end}}
+
+ {{if .TwoFactorEnabled}}
+
+
+
+ {{ctx.Locale.Tr "admin.users.reset_2fa"}}
+
+
+
+ {{end}}
+
+
+
+
+ {{ctx.Locale.Tr "admin.users.update_profile"}}
+ {{ctx.Locale.Tr "admin.users.delete_account"}}
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ctx.Locale.Tr "settings.delete_account_desc"}}
+ {{$.CsrfTokenHtml}}
+
+
+ {{ctx.Locale.Tr "admin.users.purge"}}
+
+
+
{{ctx.Locale.Tr "admin.users.purge_help"}}
+
+
+ {{template "base/modal_actions_confirm" .}}
+
+
+
+{{template "admin/layout_footer" .}}
diff --git a/admin/user/list.tmpl b/admin/user/list.tmpl
new file mode 100644
index 0000000..7e4c885
--- /dev/null
+++ b/admin/user/list.tmpl
@@ -0,0 +1,119 @@
+{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin user")}}
+
+
+
+
+
+ {{template "shared/search/combo" dict "Value" .Keyword "Placeholder" (ctx.Locale.Tr "search.user_kind")}}
+
+
+
+
+
+
+
+
+
+ ID{{SortArrow "oldest" "newest" .SortType false}}
+
+ {{ctx.Locale.Tr "admin.users.name"}}
+ {{SortArrow "alphabetically" "reversealphabetically" $.SortType true}}
+
+ {{ctx.Locale.Tr "email"}}
+ {{ctx.Locale.Tr "admin.users.activated"}}
+ {{ctx.Locale.Tr "admin.users.restricted"}}
+ {{ctx.Locale.Tr "admin.users.2fa"}}
+ {{ctx.Locale.Tr "admin.users.created"}}
+
+ {{ctx.Locale.Tr "admin.users.last_login"}}
+ {{SortArrow "lastlogin" "reverselastlogin" $.SortType false}}
+
+
+
+
+
+ {{range .Users}}
+
+ {{.ID}}
+
+ {{.Name}}
+ {{if .IsAdmin}}
+ {{ctx.Locale.Tr "admin.users.admin"}}
+ {{else if eq 2 .Type}}{{/* Reserved user */}}
+ {{ctx.Locale.Tr "admin.users.reserved"}}
+ {{else if eq 4 .Type}}{{/* Bot "user" */}}
+ {{ctx.Locale.Tr "admin.users.bot"}}
+ {{else if eq 5 .Type}}{{/* Remote user */}}
+ {{ctx.Locale.Tr "admin.users.remote"}}
+ {{end}}
+
+ {{.Email}}
+ {{svg (Iif .IsActive "octicon-check" "octicon-x")}}
+ {{svg (Iif .IsRestricted "octicon-check" "octicon-x")}}
+ {{svg (Iif (index $.UsersTwoFaStatus .ID) "octicon-check" "octicon-x")}}
+ {{DateUtils.AbsoluteShort .CreatedUnix}}
+ {{if .LastLoginUnix}}
+ {{DateUtils.AbsoluteShort .LastLoginUnix}}
+ {{else}}
+ {{ctx.Locale.Tr "admin.users.never_login"}}
+ {{end}}
+
+
+
+
+ {{end}}
+
+
+
+
+ {{template "base/paginate" .}}
+
+{{template "admin/layout_footer" .}}
diff --git a/admin/user/new.tmpl b/admin/user/new.tmpl
new file mode 100644
index 0000000..b04ebc4
--- /dev/null
+++ b/admin/user/new.tmpl
@@ -0,0 +1,90 @@
+{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin new user")}}
+
+
+
+
+ {{template "base/disable_form_autofill"}}
+ {{.CsrfTokenHtml}}
+
+
+
{{ctx.Locale.Tr "admin.users.auth_source"}}
+
+
+
{{ctx.Locale.Tr "admin.users.local"}}
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+
+
{{ctx.Locale.Tr "settings.visibility"}}
+
+
+
+ {{if .DefaultUserVisibilityMode.IsPublic}}{{ctx.Locale.Tr "settings.visibility.public"}}{{end}}
+ {{if .DefaultUserVisibilityMode.IsLimited}}{{ctx.Locale.Tr "settings.visibility.limited"}}{{end}}
+ {{if .DefaultUserVisibilityMode.IsPrivate}}{{ctx.Locale.Tr "settings.visibility.private"}}{{end}}
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.users.auth_login_name"}}
+
+
+
+ {{ctx.Locale.Tr "username"}}
+
+
+
+ {{ctx.Locale.Tr "email"}}
+
+
+
+ {{ctx.Locale.Tr "password"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "auth.allow_password_change"}}
+
+
+
+
+
+ {{if .CanSendEmail}}
+
+
+ {{ctx.Locale.Tr "admin.users.send_register_notify"}}
+
+
+
+ {{end}}
+
+
+ {{ctx.Locale.Tr "admin.users.new_account"}}
+
+
+
+
+{{template "admin/layout_footer" .}}
diff --git a/admin/user/view.tmpl b/admin/user/view.tmpl
new file mode 100644
index 0000000..21943a8
--- /dev/null
+++ b/admin/user/view.tmpl
@@ -0,0 +1,48 @@
+{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin view user")}}
+
+
+
+
+
+
+ {{template "admin/user/view_details" .}}
+
+
+
+
+
+ {{template "admin/user/view_emails" .}}
+
+
+
+
+
+ {{template "explore/repo_list" .}}
+
+
+
+ {{template "explore/user_list" .}}
+
+
+
+{{template "admin/layout_footer" .}}
diff --git a/admin/user/view_details.tmpl b/admin/user/view_details.tmpl
new file mode 100644
index 0000000..be2f32b
--- /dev/null
+++ b/admin/user/view_details.tmpl
@@ -0,0 +1,74 @@
+
+
+
+ {{ctx.AvatarUtils.Avatar .User 48}}
+
+
+
+ {{template "shared/user/name" .User}}
+ {{if .User.IsAdmin}}
+ {{ctx.Locale.Tr "admin.users.admin"}}
+ {{end}}
+
+
+ {{ctx.Locale.Tr "admin.users.auth_source"}}:
+ {{if eq .LoginSource.ID 0}}
+ {{ctx.Locale.Tr "admin.users.local"}}
+ {{else}}
+ {{.LoginSource.Name}}
+ {{end}}
+
+
+ {{ctx.Locale.Tr "admin.users.activated"}}:
+ {{if .User.IsActive}}
+ {{svg "octicon-check"}}
+ {{else}}
+ {{svg "octicon-x"}}
+ {{end}}
+
+
+ {{ctx.Locale.Tr "admin.users.restricted"}}:
+ {{if .User.IsRestricted}}
+ {{svg "octicon-check"}}
+ {{else}}
+ {{svg "octicon-x"}}
+ {{end}}
+
+
+ {{ctx.Locale.Tr "settings.visibility"}}:
+ {{if .User.Visibility.IsPublic}}{{ctx.Locale.Tr "settings.visibility.public"}}{{end}}
+ {{if .User.Visibility.IsLimited}}{{ctx.Locale.Tr "settings.visibility.limited"}}{{end}}
+ {{if .User.Visibility.IsPrivate}}{{ctx.Locale.Tr "settings.visibility.private"}}{{end}}
+
+
+ {{ctx.Locale.Tr "admin.users.2fa"}}:
+ {{if .TwoFactorEnabled}}
+ {{svg "octicon-check"}}
+ {{else}}
+ {{svg "octicon-x"}}
+ {{end}}
+
+ {{if .User.Language}}
+
+
+ {{ctx.Locale.Tr "settings.language"}}:
+ {{range .AllLangs}}{{if eq $.User.Language .Lang}}{{.Name}}{{end}}{{end}}
+
+
+ {{end}}
+ {{if .User.Location}}
+
+ {{svg "octicon-location"}}{{.User.Location}}
+
+ {{end}}
+ {{if .User.Website}}
+
+
+ {{svg "octicon-link"}}
+ {{.User.Website}}
+
+
+ {{end}}
+
+
+
diff --git a/admin/user/view_emails.tmpl b/admin/user/view_emails.tmpl
new file mode 100644
index 0000000..22ce305
--- /dev/null
+++ b/admin/user/view_emails.tmpl
@@ -0,0 +1,19 @@
+
+ {{range .Emails}}
+
+
+
+ {{.Email}}
+ {{if .IsPrimary}}
+
{{ctx.Locale.Tr "settings.primary"}}
+ {{end}}
+ {{if .IsActivated}}
+
{{ctx.Locale.Tr "settings.activated"}}
+ {{else}}
+
{{ctx.Locale.Tr "settings.requires_activation"}}
+ {{end}}
+
+
+
+ {{end}}
+
diff --git a/api/packages/pypi/simple.tmpl b/api/packages/pypi/simple.tmpl
new file mode 100644
index 0000000..85aa730
--- /dev/null
+++ b/api/packages/pypi/simple.tmpl
@@ -0,0 +1,16 @@
+
+
+
+ Links for {{.PackageDescriptor.Package.Name}}
+
+
+ {{- /* PEP 503 – Simple Repository API: https://peps.python.org/pep-0503/ */ -}}
+ Links for {{.PackageDescriptor.Package.Name}}
+ {{range .PackageDescriptors}}
+ {{$pd := .}}
+ {{range .Files}}
+ {{.File.Name}}
+ {{end}}
+ {{end}}
+
+
diff --git a/base/alert.tmpl b/base/alert.tmpl
new file mode 100644
index 0000000..760d3bf
--- /dev/null
+++ b/base/alert.tmpl
@@ -0,0 +1,20 @@
+{{if .Flash.ErrorMsg}}
+
+
{{.Flash.ErrorMsg | SanitizeHTML}}
+
+{{end}}
+{{if .Flash.SuccessMsg}}
+
+
{{.Flash.SuccessMsg | SanitizeHTML}}
+
+{{end}}
+{{if .Flash.InfoMsg}}
+
+
{{.Flash.InfoMsg | SanitizeHTML}}
+
+{{end}}
+{{if .Flash.WarningMsg}}
+
+
{{.Flash.WarningMsg | SanitizeHTML}}
+
+{{end}}
diff --git a/base/alert_details.tmpl b/base/alert_details.tmpl
new file mode 100644
index 0000000..6d4c1fb
--- /dev/null
+++ b/base/alert_details.tmpl
@@ -0,0 +1,11 @@
+{{.Message}}
+{{if .Details}}
+
+ {{.Summary}}
+ {{.Details | SanitizeHTML}}
+
+{{else}}
+
+ {{.Summary}}
+
+{{end}}
diff --git a/base/disable_form_autofill.tmpl b/base/disable_form_autofill.tmpl
new file mode 100644
index 0000000..6f06395
--- /dev/null
+++ b/base/disable_form_autofill.tmpl
@@ -0,0 +1,31 @@
+{{/*
+Why we need to disable form autofill:
+1. Many pages contain different password inputs for different usages, eg: repo setting, autofill will make a mess.
+2. We have `areYouSure` confirm dialog if a user leaves a pages without submit.
+Autofill will make the form changed even if the user didn't input anything. Then the user keeps seeing annoying confirm dialog.
+
+In history, Gitea put ` ` in forms to bypass the autofill,
+but there were still many forms suffered the autofill problem.
+
+Now we improve it.
+
+Solutions which do NOT work:
+1. Adding `autocomplete=off` doesn't help. New Chrome completely ignores it.
+2. Use a JavaScript to run in a few seconds later after the page is loaded to process the autofilled inputs, it doesn't work.
+Because for security reason, the inputs won't be filled before the user makes an interaction in the page.
+So we can not predict the correct time to run the JavaScript code.
+
+Solutions which work:
+1. Some hacky methods like: https://github.com/matteobad/detect-autofill
+2. This solution: use invisible inputs. Be aware of:
+(a) The inputs must be at the beginning of the form, and can not be hidden.
+(b) The input for username must have a valid name.
+(c) There should be no negative word (eg: fake) in the `name` attribute.
+(d) Chrome seems to use a weighted algorithm to choose an input to fill text, so the using "username" as input name is better than using "user".
+We make the names of these dummy inputs begin with an underline to indicate it is for special usage,
+and these dummy form values won't be used by backend code.
+*/}}
+
+
+
+
diff --git a/base/footer.tmpl b/base/footer.tmpl
new file mode 100644
index 0000000..fed426a
--- /dev/null
+++ b/base/footer.tmpl
@@ -0,0 +1,20 @@
+{{if false}}
+ {{/* to make html structure "likely" complete to prevent IDE warnings */}}
+
+
+
+{{end}}
+
+ {{template "custom/body_inner_post" .}}
+
+
+
+ {{template "custom/body_outer_post" .}}
+
+ {{template "base/footer_content" .}}
+
+
+
+ {{template "custom/footer" .}}
+
+
diff --git a/base/footer_content.tmpl b/base/footer_content.tmpl
new file mode 100644
index 0000000..60eb2fe
--- /dev/null
+++ b/base/footer_content.tmpl
@@ -0,0 +1,32 @@
+
diff --git a/base/head.tmpl b/base/head.tmpl
new file mode 100644
index 0000000..174267f
--- /dev/null
+++ b/base/head.tmpl
@@ -0,0 +1,49 @@
+
+
+
+
+ {{if .Title}}{{.Title}} - {{end}}{{if .Repository.Name}}{{.Repository.Name}} - {{end}}{{AppName}}
+ {{if .ManifestData}} {{end}}
+
+
+
+
+{{if .GoGetImport}}
+
+
+{{end}}
+{{if and .EnableFeed .FeedURL}}
+
+
+{{end}}
+
+
+ {{template "base/head_script" .}}
+
+
+
+ {{template "base/head_opengraph" .}}
+ {{template "base/head_style" .}}
+ {{template "custom/header" .}}
+
+
+ {{template "custom/body_outer_pre" .}}
+
+
+ {{ctx.Locale.Tr "enable_javascript"}}
+
+ {{template "custom/body_inner_pre" .}}
+
+ {{if not .PageIsInstall}}
+ {{template "base/head_navbar" .}}
+ {{end}}
+
+{{if false}}
+ {{/* to make html structure "likely" complete to prevent IDE warnings */}}
+
+
+
+{{end}}
diff --git a/base/head_navbar.tmpl b/base/head_navbar.tmpl
new file mode 100644
index 0000000..86d73a2
--- /dev/null
+++ b/base/head_navbar.tmpl
@@ -0,0 +1,214 @@
+{{$notificationUnreadCount := 0}}
+{{if and .IsSigned .NotificationUnreadCount}}
+ {{$notificationUnreadCount = call .NotificationUnreadCount}}
+{{end}}
+
+
+
+
+
+
+
+ {{if and .IsSigned EnableTimetracking .ActiveStopwatch}}
+
+ {{end}}
+
diff --git a/base/head_opengraph.tmpl b/base/head_opengraph.tmpl
new file mode 100644
index 0000000..f1f3899
--- /dev/null
+++ b/base/head_opengraph.tmpl
@@ -0,0 +1,47 @@
+{{- /* og:description - a one to two sentence description of your object, maybe it only needs at most 300 bytes */ -}}
+{{if .PageIsUserProfile}}
+
+
+
+
+ {{if .ContextUser.Description}}
+
+ {{end}}
+{{else if .Repository}}
+ {{if .Issue}}
+
+
+ {{if .Issue.Content}}
+
+ {{end}}
+ {{else if or .PageIsDiff .IsViewFile}}
+
+
+ {{if and .PageIsDiff .Commit}}
+ {{- $commitMessageParts := StringUtils.Cut .Commit.Message "\n" -}}
+ {{- $commitMessageBody := index $commitMessageParts 1 -}}
+ {{- if $commitMessageBody -}}
+
+ {{- end -}}
+ {{end}}
+ {{else}}
+
+
+ {{if .Repository.Description}}
+
+ {{end}}
+ {{end}}
+
+ {{if (.Repository.AvatarLink ctx)}}
+
+ {{else}}
+
+ {{end}}
+{{else}}
+
+
+
+
+
+{{end}}
+
diff --git a/base/head_script.tmpl b/base/head_script.tmpl
new file mode 100644
index 0000000..c0c7235
--- /dev/null
+++ b/base/head_script.tmpl
@@ -0,0 +1,50 @@
+{{/*
+==== DO NOT EDIT ====
+If you are customizing Gitea, please do not change this file.
+If you introduce mistakes in it, Gitea JavaScript code wouldn't run correctly.
+*/}}
+
+
diff --git a/base/head_style.tmpl b/base/head_style.tmpl
new file mode 100644
index 0000000..f97e188
--- /dev/null
+++ b/base/head_style.tmpl
@@ -0,0 +1,2 @@
+
+
diff --git a/base/markup_codepreview.tmpl b/base/markup_codepreview.tmpl
new file mode 100644
index 0000000..a1a4f26
--- /dev/null
+++ b/base/markup_codepreview.tmpl
@@ -0,0 +1,25 @@
+
+
+
+
+ {{- range $idx, $line := .HighlightLines -}}
+
+
+ {{- if $.EscapeStatus.Escaped -}}
+ {{- $lineEscapeStatus := index $.LineEscapeStatus $idx -}}
+ {{if $lineEscapeStatus.Escaped}} {{end}}
+ {{- end}}
+ {{$line.FormattedContent}}
{{/* only div works, span generates incorrect HTML structure */}}
+
+ {{- end -}}
+
+
+
diff --git a/base/modal_actions_confirm.tmpl b/base/modal_actions_confirm.tmpl
new file mode 100644
index 0000000..9f7eb4a
--- /dev/null
+++ b/base/modal_actions_confirm.tmpl
@@ -0,0 +1,27 @@
+{{/*
+Two buttons (negative, positive):
+* ModalButtonTypes: "yes" (default) or "confirm"
+* ModalButtonCancelText
+* ModalButtonOkText
+
+Single danger button (GitHub-like):
+* ModalButtonDangerText "This action will destroy your data"
+
+The ".ok.button" and ".cancel.button" selectors are also used by Fomantic Modal internally
+*/}}
+
+ {{if .ModalButtonDangerText}}
+ {{.ModalButtonDangerText}}
+ {{else}}
+ {{$textNegitive := ctx.Locale.Tr "modal.no"}}
+ {{$textPositive := ctx.Locale.Tr "modal.yes"}}
+ {{if eq .ModalButtonTypes "confirm"}}
+ {{$textNegitive = ctx.Locale.Tr "modal.cancel"}}
+ {{$textPositive = ctx.Locale.Tr "modal.confirm"}}
+ {{end}}
+ {{if .ModalButtonCancelText}}{{$textNegitive = .ModalButtonCancelText}}{{end}}
+ {{if .ModalButtonOkText}}{{$textPositive = .ModalButtonOkText}}{{end}}
+ {{svg "octicon-x"}} {{$textNegitive}}
+ {{svg "octicon-check"}} {{$textPositive}}
+ {{end}}
+
diff --git a/base/paginate.tmpl b/base/paginate.tmpl
new file mode 100644
index 0000000..253892c
--- /dev/null
+++ b/base/paginate.tmpl
@@ -0,0 +1,34 @@
+{{$paginationParams := .Page.GetParams}}
+{{$paginationLink := $.Link}}
+{{if eq $paginationLink AppSubUrl}}{{$paginationLink = print $paginationLink "/"}}{{end}}
+{{with .Page.Paginater}}
+ {{if gt .TotalPages 1}}
+
+
+
+ {{end}}
+{{end}}
diff --git a/custom/body_inner_post.tmpl b/custom/body_inner_post.tmpl
new file mode 100644
index 0000000..e69de29
diff --git a/custom/body_inner_pre.tmpl b/custom/body_inner_pre.tmpl
new file mode 100644
index 0000000..e69de29
diff --git a/custom/body_outer_post.tmpl b/custom/body_outer_post.tmpl
new file mode 100644
index 0000000..e69de29
diff --git a/custom/body_outer_pre.tmpl b/custom/body_outer_pre.tmpl
new file mode 100644
index 0000000..e69de29
diff --git a/custom/extra_links.tmpl b/custom/extra_links.tmpl
new file mode 100644
index 0000000..e69de29
diff --git a/custom/extra_links_footer.tmpl b/custom/extra_links_footer.tmpl
new file mode 100644
index 0000000..e69de29
diff --git a/custom/extra_tabs.tmpl b/custom/extra_tabs.tmpl
new file mode 100644
index 0000000..e69de29
diff --git a/custom/footer.tmpl b/custom/footer.tmpl
new file mode 100644
index 0000000..e69de29
diff --git a/custom/header.tmpl b/custom/header.tmpl
new file mode 100644
index 0000000..e69de29
diff --git a/devtest/devtest-footer.tmpl b/devtest/devtest-footer.tmpl
new file mode 100644
index 0000000..a1b3b86
--- /dev/null
+++ b/devtest/devtest-footer.tmpl
@@ -0,0 +1,3 @@
+{{/* TODO: the devtest.js is isolated from index.js, so no module is shared and many index.js functions do not work in devtest.ts */}}
+
+{{template "base/footer" ctx.RootData}}
diff --git a/devtest/devtest-header.tmpl b/devtest/devtest-header.tmpl
new file mode 100644
index 0000000..ee08545
--- /dev/null
+++ b/devtest/devtest-header.tmpl
@@ -0,0 +1,2 @@
+{{template "base/head" ctx.RootData}}
+
diff --git a/devtest/devtest-list.tmpl b/devtest/devtest-list.tmpl
new file mode 100644
index 0000000..71ee680
--- /dev/null
+++ b/devtest/devtest-list.tmpl
@@ -0,0 +1,13 @@
+{{template "devtest/devtest-header"}}
+
+ {{range .SubNames}}
+ {{.}}
+ {{end}}
+
+
+
+{{template "devtest/devtest-footer"}}
diff --git a/devtest/fetch-action.tmpl b/devtest/fetch-action.tmpl
new file mode 100644
index 0000000..4ee824f
--- /dev/null
+++ b/devtest/fetch-action.tmpl
@@ -0,0 +1,45 @@
+{{template "devtest/devtest-header"}}
+
+ {{template "base/alert" .}}
+
+
link-action
+
+ Use "window.fetch" to send a request to backend, the request is defined in an "A" or "BUTTON" element.
+ It might be renamed to "link-fetch-action" to match the "form-fetch-action".
+
+
+ test action
+ test with confirm
+ test with risky confirm
+ test with confirm header
+
+
+
+
form-fetch-action
+
Use "window.fetch" to send a form request to backend
+
+
+ submit get
+
+
+
+ check
+ submit post
+
+
+ bad action url
+ submit test
+
+
+
+
+
+{{template "devtest/devtest-footer"}}
diff --git a/devtest/flex-list.tmpl b/devtest/flex-list.tmpl
new file mode 100644
index 0000000..11d71d5
--- /dev/null
+++ b/devtest/flex-list.tmpl
@@ -0,0 +1,114 @@
+{{template "devtest/devtest-header"}}
+
+
+
Flex List (standalone)
+
+
+
+
+ {{svg "octicon-info" 32}}
+
+
+
+ Flex Item
+
+ with label
+
+
+
+ consists of leading/main/trailing part
+
+
+ main part contains title and (multiple) body lines
+
+
+
+
+ {{svg "octicon-alert" 14}} CJK文本测试
+
+
+ {{svg "octicon-info" 14}} Button
+
+
+ Button with long text
+
+
+
+
+
+
+ {{svg "octicon-info" 32}}
+
+
+
+ Very loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong title
+
+
+ consists of leading/main/trailing part
+
+
+ Very loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong content
+ Truncate very loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong content
+
+
+
+
+ {{svg "octicon-alert" 12}} CJK文本测试
+
+
+
+
+
+
+ {{svg "octicon-repo" 32}}
+
+
+
+
+ when inside header, the trailing part will wrap below the title
+
+
+
+
+
+
+
+
Flex List (with "ui segment")
+
+
+
Flex List (with "ui segment")
+
+
+
+
If parent provides the padding/margin space:
+
+
+
item 1 (no padding top)
+
item 2 (no padding bottom)
+
+
+
+
+{{template "devtest/devtest-footer"}}
diff --git a/devtest/fomantic-dropdown.tmpl b/devtest/fomantic-dropdown.tmpl
new file mode 100644
index 0000000..d41a161
--- /dev/null
+++ b/devtest/fomantic-dropdown.tmpl
@@ -0,0 +1,130 @@
+{{template "devtest/devtest-header"}}
+
+
+
Dropdown
+
+
+ search-input & flex-item in menu
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+ search ...
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+ {{svg "octicon-x" 14 "remove icon"}}
+
+
+
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+ {{svg "octicon-x" 14 "remove icon"}}
+
empty multiple dropdown
+
+
+
+
+
+
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+ {{svg "octicon-x" 14 "remove icon"}}
+
clearable search dropdown
+
+
+
+
+
Selection
+
+ {{/* the "selection" class is optional, it will be added by JS automatically */}}
+
+ a
+ abcdefuvwxyz
+ loooooooooooooooooooooooooooooooooooooooooooooooooooooooooong
+
+
+ loooooooooooooooooooooooooooooooooooooooooooooooooooooooooong
+ abcdefuvwxyz
+ a
+
+
+
Dropdown Button (demo only without menu)
+
+
+ mini dropdown
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+ tiny dropdown
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+ button dropdown
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+
+ mini compact
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+ tiny compact
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+ button compact
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+
+
Other button align with ...
+
+ ... Dropdown Button
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+{{template "devtest/devtest-footer"}}
diff --git a/devtest/fomantic-modal.tmpl b/devtest/fomantic-modal.tmpl
new file mode 100644
index 0000000..2fbe2bd
--- /dev/null
+++ b/devtest/fomantic-modal.tmpl
@@ -0,0 +1,95 @@
+{{template "devtest/devtest-header"}}
+
+ {{template "base/alert" .}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ very long aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+ {{template "base/modal_actions_confirm"}}
+
+
+
+
+
hello, this is the modal dialog content
+ {{template "base/modal_actions_confirm" (dict "ModalButtonTypes" "confirm")}}
+
+
+
+ {{svg "octicon-x" 16 "inside close"}}
+
+
hello, this is the modal dialog content, this is a dangerous operation
+ {{template "base/modal_actions_confirm" (dict "ModalButtonDangerText" "I know and must do this is dangerous operation")}}
+
+
+
+
+
test-modal-fill-values
+
+
+
+
+
+
+
+
+ link
+ {{template "base/modal_actions_confirm" dict}}
+
+
+
+{{template "devtest/devtest-footer"}}
diff --git a/devtest/gitea-ui.tmpl b/devtest/gitea-ui.tmpl
new file mode 100644
index 0000000..5b40268
--- /dev/null
+++ b/devtest/gitea-ui.tmpl
@@ -0,0 +1,194 @@
+{{template "devtest/devtest-header"}}
+
+
+
+
+
Buttons
+
1 2 3
+
1 2 3
+
1 2 3
+
1 2 3
+
+
+
+
Tooltip
+
text with tooltip
+
text with interactive tooltip
+
+
+
+
Loading
+
loading ...
+
+
loading ...
+
loading ...
+
loading ...
+
loading ...
+
+
+
+
+
+
+
<overflow-menu>
+
+
+
+
+
GiteaAbsoluteDate
+
+
+
+
+
+
relative-time:
+
+
+
+
LocaleNumber
+
{{ctx.Locale.PrettyNumber 1}}
+
{{ctx.Locale.PrettyNumber 12}}
+
{{ctx.Locale.PrettyNumber 123}}
+
{{ctx.Locale.PrettyNumber 1234}}
+
{{ctx.Locale.PrettyNumber 12345}}
+
{{ctx.Locale.PrettyNumber 123456}}
+
{{ctx.Locale.PrettyNumber 1234567}}
+
+
+
+
TimeSince
+
Now: {{DateUtils.TimeSince .TimeNow}}
+
5s past: {{DateUtils.TimeSince .TimePast5s}}
+
5s future: {{DateUtils.TimeSince .TimeFuture5s}}
+
2m past: {{DateUtils.TimeSince .TimePast2m}}
+
2m future: {{DateUtils.TimeSince .TimeFuture2m}}
+
1y past: {{DateUtils.TimeSince .TimePast1y}}
+
1y future: {{DateUtils.TimeSince .TimeFuture1y}}
+
+
+
+
SVG alignment
+
+
Text with SVG
+
{{svg "octicon-alert"}} {{svg "octicon-x"}} text (block)
+
{{svg "octicon-alert"}} {{svg "octicon-x"}} text
(inline)
+
+
{{svg "octicon-alert"}} flex item with very very very very very very very very long content
+
+
+
{{svg "octicon-alert"}} flex every line
+
{{svg "octicon-alert"}} flex every item
+
{{svg "octicon-alert"}} flex item with very very very very very very very very long content
+
+
+
Button with SVG
+
+
{{svg "octicon-alert" 24}} {{svg "octicon-x" 24}} text
+
+
{{svg "octicon-x" 16}} button with very very very very very very very very long text
+
+
+
Input with SVG
+
+
+ {{svg "octicon-search"}}
+
+
+
+
+
+
+
ComboMarkdownEditor
+ {{template "shared/combomarkdowneditor" dict "MarkdownPreviewContext" "/owner/path"}}
+
+
+
Tailwind CSS Demo
+
+ Button
+
+
+{{template "devtest/devtest-footer"}}
diff --git a/devtest/global-button.tmpl b/devtest/global-button.tmpl
new file mode 100644
index 0000000..9df303d
--- /dev/null
+++ b/devtest/global-button.tmpl
@@ -0,0 +1,16 @@
+{{template "devtest/devtest-header"}}
+
+
+
Show/Hide panel
+
+
+
Toggle panel 1
+
Show panel 1
+
+
+
Panel 1 content
+
Hide panel 1
+
+
+
+{{template "devtest/devtest-footer"}}
diff --git a/devtest/label.tmpl b/devtest/label.tmpl
new file mode 100644
index 0000000..6c48f0c
--- /dev/null
+++ b/devtest/label.tmpl
@@ -0,0 +1,26 @@
+{{template "devtest/devtest-header"}}
+
+
+
Label
+
+ simple label
+ red label
+ green label
+
+
+ basic label
+ basic red label
+ basic green label
+
+
+ long content must be in a non-flex "gt-ellipsis" element, otherwise it won't get ellipsis. very looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong label
+
+
+ very looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong label
+
+
+ very looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong label
+
+
+
+{{template "devtest/devtest-footer"}}
diff --git a/devtest/repo-action-view.tmpl b/devtest/repo-action-view.tmpl
new file mode 100644
index 0000000..1fa71c0
--- /dev/null
+++ b/devtest/repo-action-view.tmpl
@@ -0,0 +1,30 @@
+{{template "base/head" .}}
+
+{{template "base/footer" .}}
diff --git a/devtest/tmplerr-sub.tmpl b/devtest/tmplerr-sub.tmpl
new file mode 100644
index 0000000..f7974eb
--- /dev/null
+++ b/devtest/tmplerr-sub.tmpl
@@ -0,0 +1,3 @@
+sub template triggers an executing error
+
+ {{ctx.Locale.NoSuch "asdf"}}
diff --git a/devtest/tmplerr.tmpl b/devtest/tmplerr.tmpl
new file mode 100644
index 0000000..b3a2ffa
--- /dev/null
+++ b/devtest/tmplerr.tmpl
@@ -0,0 +1,12 @@
+{{template "devtest/devtest-header"}}
+
+
+
+ hello hello hello hello hello hello hello hello hello hello
+
+
+ {{template "devtest/tmplerr-sub" .}}
+
+
+
+{{template "devtest/devtest-footer"}}
diff --git a/devtest/toast.tmpl b/devtest/toast.tmpl
new file mode 100644
index 0000000..597b415
--- /dev/null
+++ b/devtest/toast.tmpl
@@ -0,0 +1,11 @@
+{{template "devtest/devtest-header"}}
+
+
Toast
+
+ Show Info Toast
+ Show Warning Toast
+ Show Error Toast
+ Show Error Toast (long)
+
+
+{{template "devtest/devtest-footer"}}
diff --git a/explore/code.tmpl b/explore/code.tmpl
new file mode 100644
index 0000000..039933f
--- /dev/null
+++ b/explore/code.tmpl
@@ -0,0 +1,8 @@
+{{template "base/head" .}}
+
+ {{template "explore/navbar" .}}
+
+ {{template "shared/search/code/search" .}}
+
+
+{{template "base/footer" .}}
diff --git a/explore/navbar.tmpl b/explore/navbar.tmpl
new file mode 100644
index 0000000..6b595af
--- /dev/null
+++ b/explore/navbar.tmpl
@@ -0,0 +1,22 @@
+
diff --git a/explore/repo_list.tmpl b/explore/repo_list.tmpl
new file mode 100644
index 0000000..219b125
--- /dev/null
+++ b/explore/repo_list.tmpl
@@ -0,0 +1,71 @@
+
+ {{range .Repos}}
+
+
+ {{template "repo/icon" .}}
+
+
+
+ {{$description := .DescriptionHTML ctx}}
+ {{if $description}}
+
{{$description}}
+ {{end}}
+ {{if .Topics}}
+
+ {{range .Topics}}
+ {{if ne . ""}}
{{.}} {{end}}
+ {{end}}
+
+ {{end}}
+
{{ctx.Locale.Tr "org.repo_updated"}} {{DateUtils.TimeSince .UpdatedUnix}}
+
+
+ {{else}}
+
+ {{ctx.Locale.Tr "search.no_results"}}
+
+ {{end}}
+
diff --git a/explore/repos.tmpl b/explore/repos.tmpl
new file mode 100644
index 0000000..53742bf
--- /dev/null
+++ b/explore/repos.tmpl
@@ -0,0 +1,10 @@
+{{template "base/head" .}}
+
+ {{template "explore/navbar" .}}
+
+ {{template "shared/repo_search" .}}
+ {{template "explore/repo_list" .}}
+ {{template "base/paginate" .}}
+
+
+{{template "base/footer" .}}
diff --git a/explore/search.tmpl b/explore/search.tmpl
new file mode 100644
index 0000000..1d984a2
--- /dev/null
+++ b/explore/search.tmpl
@@ -0,0 +1,23 @@
+
+
diff --git a/explore/user_list.tmpl b/explore/user_list.tmpl
new file mode 100644
index 0000000..4128a48
--- /dev/null
+++ b/explore/user_list.tmpl
@@ -0,0 +1,33 @@
+
+ {{range .Users}}
+
+
+ {{ctx.AvatarUtils.Avatar . 48}}
+
+
+
+ {{template "shared/user/name" .}}
+ {{if .Visibility.IsPrivate}}
+ {{ctx.Locale.Tr "repo.desc.private"}}
+ {{end}}
+
+
+ {{if .Location}}
+
{{svg "octicon-location"}}{{.Location}}
+ {{end}}
+ {{if and .Email (or (and $.ShowUserEmail $.IsSigned (not .KeepEmailPrivate)) $.PageIsAdminUsers)}}
+
+ {{svg "octicon-mail"}}
+ {{.Email}}
+
+ {{end}}
+
{{svg "octicon-calendar"}}{{ctx.Locale.Tr "user.joined_on" (DateUtils.AbsoluteShort .CreatedUnix)}}
+
+
+
+ {{else}}
+
+ {{ctx.Locale.Tr "search.no_results"}}
+
+ {{end}}
+
diff --git a/explore/users.tmpl b/explore/users.tmpl
new file mode 100644
index 0000000..e904612
--- /dev/null
+++ b/explore/users.tmpl
@@ -0,0 +1,10 @@
+{{template "base/head" .}}
+
+ {{template "explore/navbar" .}}
+
+ {{template "explore/search" .}}
+ {{template "explore/user_list" .}}
+ {{template "base/paginate" .}}
+
+
+{{template "base/footer" .}}
diff --git a/home.tmpl b/home.tmpl
new file mode 100644
index 0000000..116dc48
--- /dev/null
+++ b/home.tmpl
@@ -0,0 +1,51 @@
+{{template "base/head" .}}
+
+
+
+
+
+
+
{{ctx.Locale.Tr "startpage.app_desc"}}
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "startpage.install_desc" "https://docs.gitea.com/installation/install-from-binary" "https://github.com/go-gitea/gitea/tree/master/docker" "https://docs.gitea.com/installation/install-from-package"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "startpage.platform_desc" "https://go.dev/"}}
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "startpage.lightweight_desc"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "startpage.license_desc" "https://code.gitea.io/gitea" "code.gitea.io/gitea" "https://github.com/go-gitea/gitea"}}
+
+
+
+
+{{template "base/footer" .}}
diff --git a/install.tmpl b/install.tmpl
new file mode 100644
index 0000000..6c4cc7d
--- /dev/null
+++ b/install.tmpl
@@ -0,0 +1,355 @@
+{{template "base/head" .}}
+
+
+
+
+
+ {{template "base/alert" .}}
+
+
{{ctx.Locale.Tr "install.docker_helper" "https://docs.gitea.com/installation/install-with-docker"}}
+
+
+
+
+ {{ctx.Locale.Tr "install.require_db_desc"}}
+
+
{{ctx.Locale.Tr "install.db_type"}}
+
+
+
{{.CurDbType}}
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+
+
+
+
+
{{ctx.Locale.Tr "install.ssl_mode"}}
+
+
+
disable
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+ {{ctx.Locale.Tr "install.db_schema"}}
+
+ {{ctx.Locale.Tr "install.db_schema_helper"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "install.path"}}
+
+ {{ctx.Locale.Tr "install.sqlite_helper"}}
+
+
+
+ {{if .Err_DbInstalledBefore}}
+
+
{{ctx.Locale.Tr "install.reinstall_confirm_message"}}
+
+
+ {{ctx.Locale.Tr "install.reinstall_confirm_check_1"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "install.reinstall_confirm_check_2"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "install.reinstall_confirm_check_3"}}
+
+
+
+
+ {{end}}
+
+
+
+
+ {{ctx.Locale.Tr "install.app_name"}}
+
+ {{ctx.Locale.Tr "install.app_name_helper"}}
+
+
+ {{ctx.Locale.Tr "install.repo_path"}}
+
+ {{ctx.Locale.Tr "install.repo_path_helper"}}
+
+
+ {{ctx.Locale.Tr "install.lfs_path"}}
+
+ {{ctx.Locale.Tr "install.lfs_path_helper"}}
+
+
+ {{ctx.Locale.Tr "install.run_user"}}
+
+ {{ctx.Locale.Tr "install.run_user_helper"}}
+
+
+ {{ctx.Locale.Tr "install.domain"}}
+
+ {{ctx.Locale.Tr "install.domain_helper"}}
+
+
+ {{ctx.Locale.Tr "install.ssh_port"}}
+
+ {{ctx.Locale.Tr "install.ssh_port_helper"}}
+
+
+ {{ctx.Locale.Tr "install.http_port"}}
+
+ {{ctx.Locale.Tr "install.http_port_helper"}}
+
+
+ {{ctx.Locale.Tr "install.app_url"}}
+
+ {{ctx.Locale.Tr "install.app_url_helper"}}
+
+
+ {{ctx.Locale.Tr "install.log_root_path"}}
+
+ {{ctx.Locale.Tr "install.log_root_path_helper"}}
+
+
+
+ {{ctx.Locale.Tr "install.enable_update_checker"}}
+
+
+
{{ctx.Locale.Tr "install.enable_update_checker_helper"}}
+
+
+
+
+
+
+
+
+ {{if .EnvConfigKeys}}
+
+
+
+
+ {{ctx.Locale.Tr "install.env_config_keys_prompt"}}
+
+
+ {{range .EnvConfigKeys}}{{.}} {{end}}
+
+
+ {{end}}
+
+
+
+ {{$copyBtn := svg "octicon-copy" 14}}
+ {{$filePath := HTMLFormat `%s %s ` .CustomConfFile .CustomConfFile $copyBtn}}
+ {{ctx.Locale.Tr "install.config_write_file_prompt" $filePath}}
+
+
+ {{ctx.Locale.Tr "install.install_btn_confirm"}}
+
+
+
+
+
+
+
+
+{{template "base/footer" .}}
diff --git a/mail/auth/activate.tmpl b/mail/auth/activate.tmpl
new file mode 100644
index 0000000..b1bb4cb
--- /dev/null
+++ b/mail/auth/activate.tmpl
@@ -0,0 +1,17 @@
+
+
+
+
+
+ {{.locale.Tr "mail.activate_account.title" (.DisplayName|DotEscape)}}
+
+
+{{$activate_url := printf "%suser/activate?code=%s" AppUrl (QueryEscape .Code)}}
+
+ {{.locale.Tr "mail.activate_account.text_1" (.DisplayName|DotEscape) AppName}}
+ {{.locale.Tr "mail.activate_account.text_2" .ActiveCodeLives}}
{{$activate_url}}
+ {{.locale.Tr "mail.link_not_working_do_paste"}}
+
+ © {{AppName}}
+
+
diff --git a/mail/auth/activate_email.tmpl b/mail/auth/activate_email.tmpl
new file mode 100644
index 0000000..3d32f80
--- /dev/null
+++ b/mail/auth/activate_email.tmpl
@@ -0,0 +1,17 @@
+
+
+
+
+
+ {{.locale.Tr "mail.activate_email.title" (.DisplayName|DotEscape)}}
+
+
+{{$activate_url := printf "%suser/activate_email?code=%s&email=%s" AppUrl (QueryEscape .Code) (QueryEscape .Email)}}
+
+ {{.locale.Tr "mail.hi_user_x" (.DisplayName|DotEscape)}}
+ {{.locale.Tr "mail.activate_email.text" .ActiveCodeLives}}
{{$activate_url}}
+ {{.locale.Tr "mail.link_not_working_do_paste"}}
+
+ © {{AppName}}
+
+
diff --git a/mail/auth/register_notify.tmpl b/mail/auth/register_notify.tmpl
new file mode 100644
index 0000000..62dbf7d
--- /dev/null
+++ b/mail/auth/register_notify.tmpl
@@ -0,0 +1,18 @@
+
+
+
+
+
+ {{.locale.Tr "mail.register_notify.title" (.DisplayName|DotEscape) AppName}}
+
+
+{{$set_pwd_url := printf "%[1]suser/forgot_password" AppUrl}}
+
+ {{.locale.Tr "mail.hi_user_x" (.DisplayName|DotEscape)}}
+ {{.locale.Tr "mail.register_notify.text_1" AppName}}
+ {{.locale.Tr "mail.register_notify.text_2" .Username}}
{{AppUrl}}user/login
+ {{.locale.Tr "mail.register_notify.text_3" $set_pwd_url}}
+
+ © {{AppName}}
+
+
diff --git a/mail/auth/reset_passwd.tmpl b/mail/auth/reset_passwd.tmpl
new file mode 100644
index 0000000..55b1ece
--- /dev/null
+++ b/mail/auth/reset_passwd.tmpl
@@ -0,0 +1,17 @@
+
+
+
+
+
+ {{.locale.Tr "mail.reset_password.title" (.DisplayName|DotEscape)}}
+
+
+{{$recover_url := printf "%suser/recover_account?code=%s" AppUrl (QueryEscape .Code)}}
+
+ {{.locale.Tr "mail.hi_user_x" (.DisplayName|DotEscape)}}
+ {{.locale.Tr "mail.reset_password.text" .ResetPwdCodeLives}}
{{$recover_url}}
+ {{.locale.Tr "mail.link_not_working_do_paste"}}
+
+ © {{AppName}}
+
+
diff --git a/mail/issue/assigned.tmpl b/mail/issue/assigned.tmpl
new file mode 100644
index 0000000..5720319
--- /dev/null
+++ b/mail/issue/assigned.tmpl
@@ -0,0 +1,29 @@
+
+
+
+
+
+ {{.Subject}}
+
+
+{{$repo_url := HTMLFormat "%s " .Issue.Repo.HTMLURL .Issue.Repo.FullName}}
+{{$link := HTMLFormat "#%d " .Link .Issue.Index}}
+
+
+ {{if .IsPull}}
+ {{.locale.Tr "mail.issue_assigned.pull" .Doer.Name $link $repo_url}}
+ {{else}}
+ {{.locale.Tr "mail.issue_assigned.issue" .Doer.Name $link $repo_url}}
+ {{end}}
+
+
+
+
diff --git a/mail/issue/default.tmpl b/mail/issue/default.tmpl
new file mode 100644
index 0000000..395b118
--- /dev/null
+++ b/mail/issue/default.tmpl
@@ -0,0 +1,91 @@
+
+
+
+
+ {{.Subject}}
+
+
+
+
+
+
+ {{if .IsMention}}{{.locale.Tr "mail.issue.x_mentioned_you" .Doer.Name}}
{{end}}
+ {{if eq .ActionName "push"}}
+
+ {{if .Comment.IsForcePush}}
+ {{$oldCommitUrl := printf "%s/commit/%s" .Comment.Issue.PullRequest.BaseRepo.HTMLURL .Comment.OldCommit}}
+ {{$oldShortSha := ShortSha .Comment.OldCommit}}
+ {{$oldCommitLink := HTMLFormat "%[2]s " $oldCommitUrl $oldShortSha}}
+
+ {{$newCommitUrl := printf "%s/commit/%s" .Comment.Issue.PullRequest.BaseRepo.HTMLURL .Comment.NewCommit}}
+ {{$newShortSha := ShortSha .Comment.NewCommit}}
+ {{$newCommitLink := HTMLFormat "%[2]s " $newCommitUrl $newShortSha}}
+
+ {{.locale.Tr "mail.issue.action.force_push" .Doer.Name .Comment.Issue.PullRequest.HeadBranch $oldCommitLink $newCommitLink}}
+ {{else}}
+ {{.locale.TrN (len .Comment.Commits) "mail.issue.action.push_1" "mail.issue.action.push_n" .Doer.Name .Comment.Issue.PullRequest.HeadBranch (len .Comment.Commits)}}
+ {{end}}
+
+ {{end}}
+
+ {{if eq .ActionName "close"}}
+ {{.locale.Tr "mail.issue.action.close" .Doer.Name .Issue.Index}}
+ {{else if eq .ActionName "reopen"}}
+ {{.locale.Tr "mail.issue.action.reopen" .Doer.Name .Issue.Index}}
+ {{else if eq .ActionName "merge"}}
+ {{.locale.Tr "mail.issue.action.merge" .Doer.Name .Issue.Index .Issue.PullRequest.BaseBranch}}
+ {{else if eq .ActionName "approve"}}
+ {{.locale.Tr "mail.issue.action.approve" .Doer.Name}}
+ {{else if eq .ActionName "reject"}}
+ {{.locale.Tr "mail.issue.action.reject" .Doer.Name}}
+ {{else if eq .ActionName "review"}}
+ {{.locale.Tr "mail.issue.action.review" .Doer.Name}}
+ {{else if eq .ActionName "review_dismissed"}}
+ {{.locale.Tr "mail.issue.action.review_dismissed" .Doer.Name .Comment.Review.Reviewer.Name}}
+ {{else if eq .ActionName "ready_for_review"}}
+ {{.locale.Tr "mail.issue.action.ready_for_review" .Doer.Name}}
+ {{end}}
+
+ {{- if eq .Body ""}}
+ {{if eq .ActionName "new"}}
+ {{.locale.Tr "mail.issue.action.new" .Doer.Name .Issue.Index}}
+ {{end}}
+ {{else}}
+ {{.Body}}
+ {{end -}}
+ {{- range .ReviewComments}}
+
+ {{$.locale.Tr "mail.issue.in_tree_path" .TreePath}}
+
+
{{.Patch}}
+
{{.RenderedContent}}
+
+ {{end -}}
+ {{if eq .ActionName "push"}}
+
+ {{end}}
+
+
+
+
diff --git a/mail/notify/collaborator.tmpl b/mail/notify/collaborator.tmpl
new file mode 100644
index 0000000..9810c70
--- /dev/null
+++ b/mail/notify/collaborator.tmpl
@@ -0,0 +1,21 @@
+
+
+
+
+
+ {{.Subject}}
+
+
+
+ {{.locale.Tr "mail.repo.collaborator.added.text"}} {{.RepoName}}
+
+
+
diff --git a/mail/notify/repo_transfer.tmpl b/mail/notify/repo_transfer.tmpl
new file mode 100644
index 0000000..8c8b276
--- /dev/null
+++ b/mail/notify/repo_transfer.tmpl
@@ -0,0 +1,19 @@
+
+
+
+
+ {{.Subject}}
+
+
+{{$url := HTMLFormat "%[2]s " .Link .Repo}}
+
+ {{.Subject}}.
+ {{.locale.Tr "mail.repo.transfer.body" $url}}
+
+
+ ---
+
+ {{.locale.Tr "mail.view_it_on" AppName}} .
+
+
+
diff --git a/mail/release.tmpl b/mail/release.tmpl
new file mode 100644
index 0000000..90a3caa
--- /dev/null
+++ b/mail/release.tmpl
@@ -0,0 +1,61 @@
+
+
+
+
+ {{.Subject}}
+
+
+
+
+
+{{$release_url := HTMLFormat "%s " .Release.HTMLURL .Release.TagName}}
+{{$repo_url := HTMLFormat "%s " .Release.Repo.HTMLURL .Release.Repo.FullName}}
+
+
+ {{.locale.Tr "mail.release.new.text" .Release.Publisher.Name $release_url $repo_url}}
+
+ {{.locale.Tr "mail.release.title" .Release.Title}}
+
+ {{.locale.Tr "mail.release.note"}}
+ {{- if eq .Release.RenderedNote ""}}
+ {{else}}
+ {{.Release.RenderedNote}}
+ {{end -}}
+
+
+
+ ---
+
+ {{.locale.Tr "mail.release.downloads"}}
+
+
+
+
+
diff --git a/mail/team_invite.tmpl b/mail/team_invite.tmpl
new file mode 100644
index 0000000..cb0c0c0
--- /dev/null
+++ b/mail/team_invite.tmpl
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+ {{.locale.Tr "mail.team_invite.text_1" (DotEscape .Inviter.DisplayName) (DotEscape .Team.Name) (DotEscape .Organization.DisplayName)}}
+ {{.locale.Tr "mail.team_invite.text_2"}}
{{.InviteURL}}
+ {{.locale.Tr "mail.link_not_working_do_paste"}}
+ {{.locale.Tr "mail.team_invite.text_3" .Invite.Email}}
+
+ © {{AppName}}
+
+
diff --git a/org/create.tmpl b/org/create.tmpl
new file mode 100644
index 0000000..004cd9b
--- /dev/null
+++ b/org/create.tmpl
@@ -0,0 +1,57 @@
+{{template "base/head" .}}
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+ {{template "base/alert" .}}
+
+ {{ctx.Locale.Tr "org.org_name_holder"}}
+
+ {{ctx.Locale.Tr "org.org_name_helper"}}
+
+
+
+
{{ctx.Locale.Tr "org.settings.visibility"}}
+
+
+
+
+
{{ctx.Locale.Tr "org.settings.permission"}}
+
+
+
+ {{ctx.Locale.Tr "org.settings.repoadminchangeteam"}}
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "org.create_org"}}
+
+
+
+
+
+
+
+{{template "base/footer" .}}
diff --git a/org/follow_unfollow.tmpl b/org/follow_unfollow.tmpl
new file mode 100644
index 0000000..ba0bd01
--- /dev/null
+++ b/org/follow_unfollow.tmpl
@@ -0,0 +1,7 @@
+
+ {{if $.IsFollowing}}
+ {{ctx.Locale.Tr "user.unfollow"}}
+ {{else}}
+ {{ctx.Locale.Tr "user.follow"}}
+ {{end}}
+
diff --git a/org/header.tmpl b/org/header.tmpl
new file mode 100644
index 0000000..8051936
--- /dev/null
+++ b/org/header.tmpl
@@ -0,0 +1,32 @@
+
+ {{ctx.AvatarUtils.Avatar .Org 100 "org-avatar"}}
+
+
+ {{if .RenderedDescription}}
{{.RenderedDescription}}
{{end}}
+
+ {{if .Org.Location}}
{{svg "octicon-location"}} {{.Org.Location}}
{{end}}
+ {{if .Org.Website}}
{{svg "octicon-link"}}
{{.Org.Website}} {{end}}
+ {{if .IsSigned}}
+ {{if .Org.Email}}
{{svg "octicon-mail"}}
{{.Org.Email}} {{end}}
+ {{end}}
+
+
+
+
+{{template "org/menu" .}}
diff --git a/org/home.tmpl b/org/home.tmpl
new file mode 100644
index 0000000..4851b69
--- /dev/null
+++ b/org/home.tmpl
@@ -0,0 +1,68 @@
+{{template "base/head" .}}
+
+ {{template "org/header" .}}
+
+
+
+
+ {{if .ProfileReadme}}
+
{{.ProfileReadme}}
+ {{end}}
+ {{template "shared/repo_search" .}}
+ {{template "explore/repo_list" .}}
+ {{template "base/paginate" .}}
+
+
+ {{if .ShowMemberAndTeamTab}}
+
+ {{if .CanCreateOrgRepo}}
+
+
+ {{end}}
+ {{if .NumMembers}}
+
+
+ {{$isMember := .IsOrganizationMember}}
+ {{range .Members}}
+ {{if or $isMember (call $.IsPublicMember .ID)}}
+
{{ctx.AvatarUtils.Avatar . 48}}
+ {{end}}
+ {{end}}
+
+ {{end}}
+ {{if .IsOrganizationMember}}
+
+
+ {{range .Teams}}
+
+ {{end}}
+
+ {{if .IsOrganizationOwner}}
+
+ {{end}}
+ {{end}}
+
+ {{end}}
+
+
+
+{{template "base/footer" .}}
diff --git a/org/member/members.tmpl b/org/member/members.tmpl
new file mode 100644
index 0000000..4388dc9
--- /dev/null
+++ b/org/member/members.tmpl
@@ -0,0 +1,90 @@
+{{template "base/head" .}}
+
+ {{template "org/header" .}}
+
+ {{template "base/alert" .}}
+
+
+ {{range .Members}}
+ {{$isPublic := index $.MembersIsPublicMember .ID}}
+
+
+
+
+ {{template "shared/user/name" .}}
+ {{if not $isPublic}}
+ {{ctx.Locale.Tr "org.members.private"}}
+ {{end}}
+
+ {{if not $.PublicOnly}}
+
+ {{ctx.Locale.Tr "org.members.member_role"}}
+ {{if index $.MembersIsUserOrgOwner .ID}}{{svg "octicon-shield-lock"}} {{ctx.Locale.Tr "org.members.owner"}}{{else}}{{ctx.Locale.Tr "org.members.member"}}{{end}}
+
+ {{if $.IsOrganizationOwner}}
+
+ {{ctx.Locale.Tr "admin.users.2fa"}}
+
+ {{if index $.MembersTwoFaStatus .ID}}
+ {{svg "octicon-check"}}
+ {{else}}
+ {{svg "octicon-x"}}
+ {{end}}
+
+
+ {{end}}
+ {{end}}
+
+
+
+ {{end}}
+
+
+ {{template "base/paginate" .}}
+
+
+
+
+
+
{{ctx.Locale.Tr "org.members.leave.detail" (` `|SafeHTML)}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+
+
+
+
{{ctx.Locale.Tr "org.members.remove.detail" (` `|SafeHTML) (` `|SafeHTML)}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+
+{{template "base/footer" .}}
diff --git a/org/menu.tmpl b/org/menu.tmpl
new file mode 100644
index 0000000..29238f8
--- /dev/null
+++ b/org/menu.tmpl
@@ -0,0 +1,55 @@
+
+
+
diff --git a/org/projects/list.tmpl b/org/projects/list.tmpl
new file mode 100644
index 0000000..80dde1c
--- /dev/null
+++ b/org/projects/list.tmpl
@@ -0,0 +1,24 @@
+{{template "base/head" .}}
+{{if .ContextUser.IsOrganization}}
+
+ {{template "org/header" .}}
+
+ {{template "projects/list" .}}
+
+
+{{else}}
+
+
+
+
+ {{template "shared/user/profile_big_avatar" .}}
+
+
+ {{template "user/overview/header" .}}
+ {{template "projects/list" .}}
+
+
+
+
+{{end}}
+{{template "base/footer" .}}
diff --git a/org/projects/new.tmpl b/org/projects/new.tmpl
new file mode 100644
index 0000000..fc52130
--- /dev/null
+++ b/org/projects/new.tmpl
@@ -0,0 +1,9 @@
+{{template "base/head" .}}
+
+ {{template "shared/user/org_profile_avatar" .}}
+
+ {{template "user/overview/header" .}}
+ {{template "projects/new" .}}
+
+
+{{template "base/footer" .}}
diff --git a/org/projects/view.tmpl b/org/projects/view.tmpl
new file mode 100644
index 0000000..bd74114
--- /dev/null
+++ b/org/projects/view.tmpl
@@ -0,0 +1,15 @@
+{{template "base/head" .}}
+
+ {{if .ContextUser.IsOrganization}}
+ {{template "org/header" .}}
+ {{else}}
+ {{template "shared/user/org_profile_avatar" .}}
+
+ {{template "user/overview/header" .}}
+
+ {{end}}
+
+ {{template "projects/view" .}}
+
+
+{{template "base/footer" .}}
diff --git a/org/settings/actions.tmpl b/org/settings/actions.tmpl
new file mode 100644
index 0000000..abb9c98
--- /dev/null
+++ b/org/settings/actions.tmpl
@@ -0,0 +1,11 @@
+{{template "org/settings/layout_head" (dict "ctxData" . "pageClass" "organization settings actions")}}
+
+ {{if eq .PageType "runners"}}
+ {{template "shared/actions/runner_list" .}}
+ {{else if eq .PageType "secrets"}}
+ {{template "shared/secrets/add_list" .}}
+ {{else if eq .PageType "variables"}}
+ {{template "shared/variables/variable_list" .}}
+ {{end}}
+
+{{template "org/settings/layout_footer" .}}
diff --git a/org/settings/applications.tmpl b/org/settings/applications.tmpl
new file mode 100644
index 0000000..df5f4e9
--- /dev/null
+++ b/org/settings/applications.tmpl
@@ -0,0 +1,9 @@
+{{template "org/settings/layout_head" (dict "ctxData" . "pageClass" "organization settings options")}}
+
+
+
+ {{template "user/settings/applications_oauth2_list" .}}
+
+{{template "org/settings/layout_footer" .}}
diff --git a/org/settings/applications_oauth2_edit.tmpl b/org/settings/applications_oauth2_edit.tmpl
new file mode 100644
index 0000000..987803a
--- /dev/null
+++ b/org/settings/applications_oauth2_edit.tmpl
@@ -0,0 +1,5 @@
+{{template "org/settings/layout_head" (dict "ctxData" . "pageClass" "organization settings options")}}
+
+ {{template "user/settings/applications_oauth2_edit_form" .}}
+
+{{template "org/settings/layout_footer" .}}
diff --git a/org/settings/blocked_users.tmpl b/org/settings/blocked_users.tmpl
new file mode 100644
index 0000000..eab5ec0
--- /dev/null
+++ b/org/settings/blocked_users.tmpl
@@ -0,0 +1,5 @@
+{{template "org/settings/layout_head" (dict "ctxData" . "pageClass" "organization settings blocked_users")}}
+
+ {{template "shared/user/blocked_users" .}}
+
+{{template "org/settings/layout_footer" .}}
diff --git a/org/settings/delete.tmpl b/org/settings/delete.tmpl
new file mode 100644
index 0000000..e1ef471
--- /dev/null
+++ b/org/settings/delete.tmpl
@@ -0,0 +1,35 @@
+{{template "org/settings/layout_head" (dict "ctxData" . "pageClass" "organization settings delete")}}
+
+
+
+
+
+
{{svg "octicon-alert"}} {{ctx.Locale.Tr "org.settings.delete_prompt"}}
+
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "org.org_name_holder"}}
+
+
+
+ {{ctx.Locale.Tr "org.settings.confirm_delete_account"}}
+
+
+
+
+
+
+
+
+
{{ctx.Locale.Tr "org.settings.delete_org_desc"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+
+{{template "org/settings/layout_footer" .}}
diff --git a/org/settings/hook_new.tmpl b/org/settings/hook_new.tmpl
new file mode 100644
index 0000000..f89ee5f
--- /dev/null
+++ b/org/settings/hook_new.tmpl
@@ -0,0 +1,7 @@
+{{template "org/settings/layout_head" (dict "ctxData" . "pageClass" "organization settings new webhook")}}
+
+ {{$CustomHeaderTitle := ctx.Locale.Tr "repo.settings.update_webhook"}}
+ {{if .PageIsSettingsHooksNew}}{{$CustomHeaderTitle = ctx.Locale.Tr "repo.settings.add_webhook"}}{{end}}
+ {{template "webhook/new" (dict "ctxData" . "CustomHeaderTitle" $CustomHeaderTitle)}}
+
+{{template "org/settings/layout_footer" .}}
diff --git a/org/settings/hooks.tmpl b/org/settings/hooks.tmpl
new file mode 100644
index 0000000..9f30796
--- /dev/null
+++ b/org/settings/hooks.tmpl
@@ -0,0 +1,5 @@
+{{template "org/settings/layout_head" (dict "ctxData" . "pageClass" "organization settings webhooks")}}
+
+ {{template "repo/settings/webhook/list" .}}
+
+{{template "org/settings/layout_footer" .}}
diff --git a/org/settings/labels.tmpl b/org/settings/labels.tmpl
new file mode 100644
index 0000000..21d7c0e
--- /dev/null
+++ b/org/settings/labels.tmpl
@@ -0,0 +1,13 @@
+{{template "org/settings/layout_head" (dict "ctxData" . "pageClass" "organization settings labels")}}
+
+
+
+ {{ctx.Locale.Tr "org.settings.labels_desc"}}
+
+
{{ctx.Locale.Tr "repo.issues.new_label"}}
+
+
+ {{template "repo/issue/labels/label_list" .}}
+ {{template "repo/issue/labels/label_edit_modal" .}}
+
+{{template "org/settings/layout_footer" .}}
diff --git a/org/settings/layout_footer.tmpl b/org/settings/layout_footer.tmpl
new file mode 100644
index 0000000..09d88c0
--- /dev/null
+++ b/org/settings/layout_footer.tmpl
@@ -0,0 +1,11 @@
+{{if false}}{{/* to make html structure "likely" complete to prevent IDE warnings */}}
+
+
+
+ {{/* block: org-setting-content */}}
+{{end}}
+
+
+
+
+{{template "base/footer" .}}
diff --git a/org/settings/layout_head.tmpl b/org/settings/layout_head.tmpl
new file mode 100644
index 0000000..31dad2c
--- /dev/null
+++ b/org/settings/layout_head.tmpl
@@ -0,0 +1,14 @@
+{{template "base/head" .ctxData}}
+
+ {{template "org/header" .ctxData}}
+
+ {{template "org/settings/navbar" .ctxData}}
+
+ {{template "base/alert" .ctxData}}
+ {{/* block: org-setting-content */}}
+
+{{if false}}{{/* to make html structure "likely" complete to prevent IDE warnings */}}
+
+
+
+{{end}}
diff --git a/org/settings/navbar.tmpl b/org/settings/navbar.tmpl
new file mode 100644
index 0000000..ce792f6
--- /dev/null
+++ b/org/settings/navbar.tmpl
@@ -0,0 +1,48 @@
+
+
+
diff --git a/org/settings/options.tmpl b/org/settings/options.tmpl
new file mode 100644
index 0000000..3b817d0
--- /dev/null
+++ b/org/settings/options.tmpl
@@ -0,0 +1,103 @@
+{{template "org/settings/layout_head" (dict "ctxData" . "pageClass" "organization settings options")}}
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "org.org_name_holder"}}
+
+ {{ctx.Locale.Tr "org.settings.change_orgname_prompt"}} {{ctx.Locale.Tr "org.settings.change_orgname_redirect_prompt"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "org.org_full_name_holder"}}
+
+
+
+ {{ctx.Locale.Tr "org.settings.email"}}
+
+
+
+ {{/* it is rendered as markdown, but the length is limited, so at the moment we do not use the markdown editor here */}}
+ {{ctx.Locale.Tr "org.org_desc"}}
+ {{.Org.Description}}
+
+
+ {{ctx.Locale.Tr "org.settings.website"}}
+
+
+
+ {{ctx.Locale.Tr "org.settings.location"}}
+
+
+
+
+
+
{{ctx.Locale.Tr "org.settings.visibility"}}
+
+
+
+ {{ctx.Locale.Tr "org.settings.visibility.public"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "org.settings.visibility.limited"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "org.settings.visibility.private"}}
+
+
+
+
+
+
{{ctx.Locale.Tr "org.settings.permission"}}
+
+
+
+ {{ctx.Locale.Tr "org.settings.repoadminchangeteam"}}
+
+
+
+
+ {{if .SignedUser.IsAdmin}}
+
+
+
+
{{ctx.Locale.Tr "admin.users.max_repo_creation"}}
+
+
{{ctx.Locale.Tr "admin.users.max_repo_creation_desc"}}
+
+ {{end}}
+
+
+ {{ctx.Locale.Tr "org.settings.update_settings"}}
+
+
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "settings.choose_new_avatar"}}
+
+
+
+
+ {{ctx.Locale.Tr "settings.update_avatar"}}
+ {{ctx.Locale.Tr "settings.delete_current_avatar"}}
+
+
+
+
+{{template "org/settings/layout_footer" .}}
diff --git a/org/settings/packages.tmpl b/org/settings/packages.tmpl
new file mode 100644
index 0000000..91106c3
--- /dev/null
+++ b/org/settings/packages.tmpl
@@ -0,0 +1,6 @@
+{{template "org/settings/layout_head" (dict "ctxData" . "pageClass" "organization settings packages")}}
+
+ {{template "package/shared/cleanup_rules/list" .}}
+ {{template "package/shared/cargo" .}}
+
+{{template "org/settings/layout_footer" .}}
diff --git a/org/settings/packages_cleanup_rules_edit.tmpl b/org/settings/packages_cleanup_rules_edit.tmpl
new file mode 100644
index 0000000..ff4c2dd
--- /dev/null
+++ b/org/settings/packages_cleanup_rules_edit.tmpl
@@ -0,0 +1,5 @@
+{{template "org/settings/layout_head" (dict "ctxData" . "pageClass" "organization settings packages")}}
+
+ {{template "package/shared/cleanup_rules/edit" .}}
+
+{{template "org/settings/layout_footer" .}}
diff --git a/org/settings/packages_cleanup_rules_preview.tmpl b/org/settings/packages_cleanup_rules_preview.tmpl
new file mode 100644
index 0000000..5a2f061
--- /dev/null
+++ b/org/settings/packages_cleanup_rules_preview.tmpl
@@ -0,0 +1,5 @@
+{{template "org/settings/layout_head" (dict "ctxData" . "pageClass" "organization settings packages")}}
+
+ {{template "package/shared/cleanup_rules/preview" .}}
+
+{{template "org/settings/layout_footer" .}}
diff --git a/org/settings/runners_edit.tmpl b/org/settings/runners_edit.tmpl
new file mode 100644
index 0000000..acd67a4
--- /dev/null
+++ b/org/settings/runners_edit.tmpl
@@ -0,0 +1,5 @@
+{{template "org/settings/layout_head" (dict "ctxData" . "pageClass" "organization settings runners")}}
+
+ {{template "shared/actions/runner_edit" .}}
+
+{{template "org/settings/layout_footer" .}}
diff --git a/org/team/invite.tmpl b/org/team/invite.tmpl
new file mode 100644
index 0000000..1167828
--- /dev/null
+++ b/org/team/invite.tmpl
@@ -0,0 +1,23 @@
+{{template "base/head" .}}
+
+
+ {{template "base/alert" .}}
+
+
+ {{ctx.AvatarUtils.Avatar .Organization 140}}
+
+
+
+
{{ctx.Locale.Tr "org.teams.invite.by" .Inviter.Name}}
+
{{ctx.Locale.Tr "org.teams.invite.description"}}
+
+
+
+
+
+{{template "base/footer" .}}
diff --git a/org/team/members.tmpl b/org/team/members.tmpl
new file mode 100644
index 0000000..5433f01
--- /dev/null
+++ b/org/team/members.tmpl
@@ -0,0 +1,88 @@
+{{template "base/head" .}}
+
+ {{template "org/header" .}}
+
+ {{template "base/alert" .}}
+
+ {{template "org/team/sidebar" .}}
+
+ {{template "org/team/navbar" .}}
+ {{if .IsOrganizationOwner}}
+
+
+ {{.CsrfTokenHtml}}
+
+
+ {{ctx.Locale.Tr "org.teams.add_team_member"}}
+
+
+ {{end}}
+
+
+ {{range .Team.Members}}
+
+
+
+
+ {{template "shared/user/name" .}}
+
+
+
+ {{if and $.IsOrganizationOwner (not (and ($.Team.IsOwnerTeam) (eq (len $.Team.Members) 1)))}}
+
+ {{ctx.Locale.Tr "org.members.remove"}}
+
+ {{end}}
+
+
+ {{else}}
+
+ {{ctx.Locale.Tr "org.teams.members.none"}}
+
+ {{end}}
+
+
+ {{if and .Invites $.IsOrganizationOwner}}
+
+
+
+ {{range .Invites}}
+
+
+ {{.Email}}
+
+
+
+ {{$.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "org.members.remove"}}
+
+
+
+ {{end}}
+
+
+ {{end}}
+
+
+
+
+
+
+
+
{{ctx.Locale.Tr "org.members.remove.detail" (` `|SafeHTML) (` `|SafeHTML)}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+{{template "base/footer" .}}
diff --git a/org/team/navbar.tmpl b/org/team/navbar.tmpl
new file mode 100644
index 0000000..9704f63
--- /dev/null
+++ b/org/team/navbar.tmpl
@@ -0,0 +1,4 @@
+
diff --git a/org/team/new.tmpl b/org/team/new.tmpl
new file mode 100644
index 0000000..410a3c4
--- /dev/null
+++ b/org/team/new.tmpl
@@ -0,0 +1,161 @@
+{{template "base/head" .}}
+
+ {{template "org/header" .}}
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+ {{template "base/alert" .}}
+
+ {{ctx.Locale.Tr "org.team_name"}}
+ {{if eq .Team.LowerName "owners"}}
+
+ {{end}}
+
+ {{ctx.Locale.Tr "org.team_name_helper"}}
+
+
+ {{ctx.Locale.Tr "org.team_desc"}}
+
+ {{ctx.Locale.Tr "org.team_desc_helper"}}
+
+ {{if not (eq .Team.LowerName "owners")}}
+
+
{{ctx.Locale.Tr "org.team_access_desc"}}
+
+
+
+
+ {{ctx.Locale.Tr "org.teams.specific_repositories"}}
+ {{ctx.Locale.Tr "org.teams.specific_repositories_helper"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "org.teams.all_repositories"}}
+ {{ctx.Locale.Tr "org.teams.all_repositories_helper"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "org.teams.can_create_org_repo"}}
+
+ {{ctx.Locale.Tr "org.teams.can_create_org_repo_helper"}}
+
+
+
+
+
{{ctx.Locale.Tr "org.team_permission_desc"}}
+
+
+
+
+ {{ctx.Locale.Tr "org.teams.general_access"}}
+ {{ctx.Locale.Tr "org.teams.general_access_helper"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "org.teams.admin_access"}}
+ {{ctx.Locale.Tr "org.teams.admin_access_helper"}}
+
+
+
+
+
+
+
{{ctx.Locale.Tr "org.team_unit_desc"}}
+
+ {{range $t, $unit := $.Units}}
+ {{if lt $unit.MaxPerm 2}}
+
+
+
+ {{ctx.Locale.Tr $unit.NameKey}}{{if $unit.Type.UnitGlobalDisabled}} {{ctx.Locale.Tr "org.team_unit_disabled"}}{{end}}
+ {{ctx.Locale.Tr $unit.DescKey}}
+
+
+ {{end}}
+ {{end}}
+
+ {{end}}
+
+
+ {{if .PageIsOrgTeamsNew}}
+ {{ctx.Locale.Tr "org.create_team"}}
+ {{else}}
+ {{ctx.Locale.Tr "org.teams.update_settings"}}
+ {{if not (eq .Team.LowerName "owners")}}
+ {{ctx.Locale.Tr "org.teams.delete_team"}}
+ {{end}}
+ {{end}}
+
+
+
+
+
+
+
+
+
+
+
+
{{ctx.Locale.Tr "org.teams.delete_team_desc"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+{{template "base/footer" .}}
diff --git a/org/team/repositories.tmpl b/org/team/repositories.tmpl
new file mode 100644
index 0000000..502cf97
--- /dev/null
+++ b/org/team/repositories.tmpl
@@ -0,0 +1,61 @@
+{{template "base/head" .}}
+
+ {{template "org/header" .}}
+
+ {{template "base/alert" .}}
+
+ {{template "org/team/sidebar" .}}
+
+ {{template "org/team/navbar" .}}
+ {{$canAddRemove := and $.IsOrganizationOwner (not $.Team.IncludesAllRepositories)}}
+ {{if $canAddRemove}}
+
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "add"}}
+
+
+ {{ctx.Locale.Tr "add_all"}}
+ {{ctx.Locale.Tr "remove_all"}}
+
+
+ {{end}}
+
+
+ {{range .Team.Repos}}
+
+
+ {{template "repo/icon" .}}
+
+
+
+ {{if $canAddRemove}}
+
+ {{$.CsrfTokenHtml}}
+ {{ctx.Locale.Tr "remove"}}
+
+ {{end}}
+
+
+ {{else}}
+
+ {{ctx.Locale.Tr "org.teams.repos.none"}}
+
+ {{end}}
+
+
+
+
+
+
+
+{{template "base/footer" .}}
diff --git a/org/team/sidebar.tmpl b/org/team/sidebar.tmpl
new file mode 100644
index 0000000..c4acd8d
--- /dev/null
+++ b/org/team/sidebar.tmpl
@@ -0,0 +1,94 @@
+
+
+
+
+ {{if .Team.Description}}
+ {{.Team.Description}}
+ {{else}}
+ {{ctx.Locale.Tr "org.teams.no_desc"}}
+ {{end}}
+
+ {{if eq .Team.LowerName "owners"}}
+
+ {{ctx.Locale.Tr "org.teams.owners_permission_desc"}}
+
+ {{else}}
+
+
{{ctx.Locale.Tr "org.team_access_desc"}}
+
+ {{if .Team.IncludesAllRepositories}}
+ {{ctx.Locale.Tr "org.teams.all_repositories"}}
+ {{else}}
+ {{ctx.Locale.Tr "org.teams.specific_repositories"}}
+ {{end}}
+ {{if .Team.CanCreateOrgRepo}}
+ {{ctx.Locale.Tr "org.teams.can_create_org_repo"}}
+ {{end}}
+
+ {{if (eq .Team.AccessMode 2)}}
+
{{ctx.Locale.Tr "org.settings.permission"}}
+ {{ctx.Locale.Tr "org.teams.write_permission_desc"}}
+ {{else if (eq .Team.AccessMode 3)}}
+
{{ctx.Locale.Tr "org.settings.permission"}}
+ {{ctx.Locale.Tr "org.teams.admin_permission_desc"}}
+ {{else}}
+
+
+
+ {{ctx.Locale.Tr "units.unit"}}
+ {{ctx.Locale.Tr "org.team_permission_desc"}}
+
+
+
+ {{range $t, $unit := $.Units}}
+ {{if (not $unit.Type.UnitGlobalDisabled)}}
+
+ {{ctx.Locale.Tr $unit.NameKey}}
+ {{if eq ($.Team.UnitAccessMode ctx $unit.Type) 0 -}}
+ {{ctx.Locale.Tr "org.teams.none_access"}}
+ {{- else if or (eq $.Team.ID 0) (eq ($.Team.UnitAccessMode ctx $unit.Type) 1) -}}
+ {{ctx.Locale.Tr "org.teams.read_access"}}
+ {{- else if eq ($.Team.UnitAccessMode ctx $unit.Type) 2 -}}
+ {{ctx.Locale.Tr "org.teams.write_access"}}
+ {{- end}}
+
+ {{end}}
+ {{end}}
+
+
+ {{end}}
+
+ {{end}}
+
+ {{if .IsOrganizationOwner}}
+
+ {{end}}
+
+
diff --git a/org/team/teams.tmpl b/org/team/teams.tmpl
new file mode 100644
index 0000000..53c909e
--- /dev/null
+++ b/org/team/teams.tmpl
@@ -0,0 +1,56 @@
+{{template "base/head" .}}
+
+ {{template "org/header" .}}
+
+ {{template "base/alert" .}}
+ {{if .IsOrganizationOwner}}
+
+
+ {{end}}
+
+
+ {{range .Teams}}
+
+
+
+ {{range .Members}}
+ {{template "shared/user/avatarlink" dict "user" .}}
+ {{end}}
+
+
+
+ {{end}}
+
+
+
+
+
+
+
{{ctx.Locale.Tr "org.teams.leave.detail" (` `|SafeHTML)}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+{{template "base/footer" .}}
diff --git a/package/content/alpine.tmpl b/package/content/alpine.tmpl
new file mode 100644
index 0000000..5c144b9
--- /dev/null
+++ b/package/content/alpine.tmpl
@@ -0,0 +1,52 @@
+{{if eq .PackageDescriptor.Package.Type "alpine"}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "packages.alpine.repository.branches"}}
+ {{StringUtils.Join .Branches ", "}}
+
+
+ {{ctx.Locale.Tr "packages.alpine.repository.repositories"}}
+ {{StringUtils.Join .Repositories ", "}}
+
+
+ {{ctx.Locale.Tr "packages.alpine.repository.architectures"}}
+ {{StringUtils.Join .Architectures ", "}}
+
+
+
+
+
+ {{if .PackageDescriptor.Metadata.Description}}
+
+
+ {{.PackageDescriptor.Metadata.Description}}
+
+ {{end}}
+{{end}}
diff --git a/package/content/arch.tmpl b/package/content/arch.tmpl
new file mode 100644
index 0000000..1c568cb
--- /dev/null
+++ b/package/content/arch.tmpl
@@ -0,0 +1,41 @@
+{{if eq .PackageDescriptor.Package.Type "arch"}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "packages.arch.repository.repositories"}}
+ {{StringUtils.Join .Repositories ", "}}
+
+
+ {{ctx.Locale.Tr "packages.arch.repository.architectures"}}
+ {{StringUtils.Join .Architectures ", "}}
+
+
+
+
+
+ {{if .PackageDescriptor.Metadata.Description}}
+
+ {{.PackageDescriptor.Metadata.Description}}
+ {{end}}
+{{end}}
diff --git a/package/content/cargo.tmpl b/package/content/cargo.tmpl
new file mode 100644
index 0000000..8b51074
--- /dev/null
+++ b/package/content/cargo.tmpl
@@ -0,0 +1,63 @@
+{{if eq .PackageDescriptor.Package.Type "cargo"}}
+
+
+
+ {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.Readme}}
+
+ {{if .PackageDescriptor.Metadata.Description}}{{.PackageDescriptor.Metadata.Description}}
{{end}}
+ {{if .PackageDescriptor.Metadata.Readme}}{{ctx.RenderUtils.MarkdownToHtml .PackageDescriptor.Metadata.Readme}}
{{end}}
+ {{end}}
+
+ {{if .PackageDescriptor.Metadata.Dependencies}}
+
+
+
+
+
+ {{ctx.Locale.Tr "packages.dependency.id"}}
+ {{ctx.Locale.Tr "packages.dependency.version"}}
+
+
+
+ {{range .PackageDescriptor.Metadata.Dependencies}}
+
+ {{.Name}}
+ {{.Req}}
+
+ {{end}}
+
+
+
+ {{end}}
+
+ {{if .PackageDescriptor.Metadata.Keywords}}
+
+
+ {{range .PackageDescriptor.Metadata.Keywords}}
+ {{.}}
+ {{end}}
+
+ {{end}}
+{{end}}
diff --git a/package/content/chef.tmpl b/package/content/chef.tmpl
new file mode 100644
index 0000000..b371380
--- /dev/null
+++ b/package/content/chef.tmpl
@@ -0,0 +1,48 @@
+{{if eq .PackageDescriptor.Package.Type "chef"}}
+
+
+
+ {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.LongDescription}}
+
+
+ {{if .PackageDescriptor.Metadata.Description}}
{{.PackageDescriptor.Metadata.Description}}
{{end}}
+ {{if .PackageDescriptor.Metadata.LongDescription}}{{ctx.RenderUtils.MarkdownToHtml .PackageDescriptor.Metadata.LongDescription}}{{end}}
+
+ {{end}}
+
+ {{if .PackageDescriptor.Metadata.Dependencies}}
+
+
+
+
+
+ {{ctx.Locale.Tr "packages.dependency.id"}}
+ {{ctx.Locale.Tr "packages.dependency.version"}}
+
+
+
+ {{range $dependency, $version := .PackageDescriptor.Metadata.Dependencies}}
+
+ {{$dependency}}
+ {{$version}}
+
+ {{end}}
+
+
+
+ {{end}}
+{{end}}
diff --git a/package/content/composer.tmpl b/package/content/composer.tmpl
new file mode 100644
index 0000000..4569820
--- /dev/null
+++ b/package/content/composer.tmpl
@@ -0,0 +1,50 @@
+{{if eq .PackageDescriptor.Package.Type "composer"}}
+
+
+
+ {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.Comments}}
+
+ {{if .PackageDescriptor.Metadata.Description}}{{.PackageDescriptor.Metadata.Description}}
{{end}}
+ {{if .PackageDescriptor.Metadata.Readme}}{{ctx.RenderUtils.MarkdownToHtml .PackageDescriptor.Metadata.Readme}}
{{end}}
+ {{if .PackageDescriptor.Metadata.Comments}}{{StringUtils.Join .PackageDescriptor.Metadata.Comments " "}}
{{end}}
+ {{end}}
+
+ {{if or .PackageDescriptor.Metadata.Require .PackageDescriptor.Metadata.RequireDev}}
+
+
+
+ {{template "package/content/composer_dependencies" dict "root" $ "dependencies" .PackageDescriptor.Metadata.Require "title" (ctx.Locale.Tr "packages.composer.dependencies")}}
+ {{template "package/content/composer_dependencies" dict "root" $ "dependencies" .PackageDescriptor.Metadata.RequireDev "title" (ctx.Locale.Tr "packages.composer.dependencies.development")}}
+
+
+ {{end}}
+
+ {{if .PackageDescriptor.Metadata.Keywords}}
+
+
+ {{range .PackageDescriptor.Metadata.Keywords}}
+ {{.}}
+ {{end}}
+
+ {{end}}
+{{end}}
diff --git a/package/content/composer_dependencies.tmpl b/package/content/composer_dependencies.tmpl
new file mode 100644
index 0000000..dba4575
--- /dev/null
+++ b/package/content/composer_dependencies.tmpl
@@ -0,0 +1,19 @@
+{{if .dependencies}}
+{{.title}}
+
+
+
+ {{ctx.Locale.Tr "packages.dependency.id"}}
+ {{ctx.Locale.Tr "packages.dependency.version"}}
+
+
+
+ {{range $dependency, $version := .dependencies}}
+
+ {{$dependency}}
+ {{$version}}
+
+ {{end}}
+
+
+{{end}}
diff --git a/package/content/conan.tmpl b/package/content/conan.tmpl
new file mode 100644
index 0000000..b68a45f
--- /dev/null
+++ b/package/content/conan.tmpl
@@ -0,0 +1,34 @@
+{{if eq .PackageDescriptor.Package.Type "conan"}}
+
+
+
+ {{if .PackageDescriptor.Metadata.Description}}
+
+
+ {{if .PackageDescriptor.Metadata.Description}}{{.PackageDescriptor.Metadata.Description}}{{end}}
+
+ {{end}}
+
+ {{if or .PackageDescriptor.Metadata.Keywords}}
+
+
+ {{range .PackageDescriptor.Metadata.Keywords}}
+ {{.}}
+ {{end}}
+
+ {{end}}
+{{end}}
diff --git a/package/content/conda.tmpl b/package/content/conda.tmpl
new file mode 100644
index 0000000..031b51a
--- /dev/null
+++ b/package/content/conda.tmpl
@@ -0,0 +1,30 @@
+{{if eq .PackageDescriptor.Package.Type "conda"}}
+
+
+
+ {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.Summary}}
+
+
+ {{if .PackageDescriptor.Metadata.Description}}{{.PackageDescriptor.Metadata.Description}}{{else}}{{.PackageDescriptor.Metadata.Summary}}{{end}}
+
+ {{end}}
+{{end}}
diff --git a/package/content/container.tmpl b/package/content/container.tmpl
new file mode 100644
index 0000000..a88ebec
--- /dev/null
+++ b/package/content/container.tmpl
@@ -0,0 +1,93 @@
+{{if eq .PackageDescriptor.Package.Type "container"}}
+
+
+ {{if .PackageDescriptor.Metadata.Manifests}}
+
+
+
+
+
+ {{ctx.Locale.Tr "packages.container.digest"}}
+ {{ctx.Locale.Tr "packages.container.multi_arch"}}
+ {{ctx.Locale.Tr "admin.packages.size"}}
+
+
+
+ {{range .PackageDescriptor.Metadata.Manifests}}
+ {{/* "unknown/unknown" is attestation-manifest, so we should skip it */}}
+ {{if ne .Platform "unknown/unknown"}}
+
+ {{StringUtils.TrimPrefix .Digest "sha256:" | ShortSha}}
+ {{.Platform}}
+ {{FileSize .Size}}
+
+ {{end}}
+ {{end}}
+
+
+
+ {{end}}
+ {{if .PackageDescriptor.Metadata.Description}}
+
+
+ {{.PackageDescriptor.Metadata.Description}}
+
+ {{end}}
+ {{if .PackageDescriptor.Metadata.ImageLayers}}
+
+
+
+
+ {{range .PackageDescriptor.Metadata.ImageLayers}}
+
+ {{.}}
+
+ {{end}}
+
+
+
+ {{end}}
+ {{if .PackageDescriptor.Metadata.Labels}}
+
+
+
+
+
+ {{ctx.Locale.Tr "packages.container.labels.key"}}
+ {{ctx.Locale.Tr "packages.container.labels.value"}}
+
+
+
+ {{range $key, $value := .PackageDescriptor.Metadata.Labels}}
+
+ {{$key}}
+ {{$value}}
+
+ {{end}}
+
+
+
+ {{end}}
+{{end}}
diff --git a/package/content/cran.tmpl b/package/content/cran.tmpl
new file mode 100644
index 0000000..ae58e6f
--- /dev/null
+++ b/package/content/cran.tmpl
@@ -0,0 +1,59 @@
+{{if eq .PackageDescriptor.Package.Type "cran"}}
+
+
+
+ {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.Title}}
+
+
+ {{if .PackageDescriptor.Metadata.Description}}{{.PackageDescriptor.Metadata.Description}}{{.PackageDescriptor.Metadata.Title}}{{else}}{{end}}
+
+ {{end}}
+
+ {{if or .PackageDescriptor.Metadata.Imports .PackageDescriptor.Metadata.Depends .PackageDescriptor.Metadata.LinkingTo .PackageDescriptor.Metadata.Suggests}}
+
+
+
+
+ {{if .PackageDescriptor.Metadata.Imports}}
+
+ Imports
+ {{StringUtils.Join .PackageDescriptor.Metadata.Imports ", "}}
+
+ {{end}}
+ {{if .PackageDescriptor.Metadata.Depends}}
+
+ Depends
+ {{StringUtils.Join .PackageDescriptor.Metadata.Depends ", "}}
+
+ {{end}}
+ {{if .PackageDescriptor.Metadata.LinkingTo}}
+
+ LinkingTo
+ {{StringUtils.Join .PackageDescriptor.Metadata.LinkingTo ", "}}
+
+ {{end}}
+ {{if .PackageDescriptor.Metadata.Suggests}}
+
+ Suggests
+ {{StringUtils.Join .PackageDescriptor.Metadata.Suggests ", "}}
+
+ {{end}}
+
+
+
+ {{end}}
+{{end}}
diff --git a/package/content/debian.tmpl b/package/content/debian.tmpl
new file mode 100644
index 0000000..73b8257
--- /dev/null
+++ b/package/content/debian.tmpl
@@ -0,0 +1,65 @@
+{{if eq .PackageDescriptor.Package.Type "debian"}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "packages.debian.repository.distributions"}}
+ {{StringUtils.Join .Distributions ", "}}
+
+
+ {{ctx.Locale.Tr "packages.debian.repository.components"}}
+ {{StringUtils.Join .Components ", "}}
+
+
+ {{ctx.Locale.Tr "packages.debian.repository.architectures"}}
+ {{StringUtils.Join .Architectures ", "}}
+
+
+
+
+
+ {{if .PackageDescriptor.Metadata.Description}}
+
+
+ {{.PackageDescriptor.Metadata.Description}}
+
+ {{end}}
+
+ {{if .PackageDescriptor.Metadata.Dependencies}}
+
+
+
+
+ {{range .PackageDescriptor.Metadata.Dependencies}}
+
+ {{.}}
+
+ {{end}}
+
+
+
+ {{end}}
+{{end}}
diff --git a/package/content/generic.tmpl b/package/content/generic.tmpl
new file mode 100644
index 0000000..2fd9521
--- /dev/null
+++ b/package/content/generic.tmpl
@@ -0,0 +1,18 @@
+{{if eq .PackageDescriptor.Package.Type "generic"}}
+
+
+{{end}}
diff --git a/package/content/go.tmpl b/package/content/go.tmpl
new file mode 100644
index 0000000..80d1ab2
--- /dev/null
+++ b/package/content/go.tmpl
@@ -0,0 +1,14 @@
+{{if eq .PackageDescriptor.Package.Type "go"}}
+
+
+{{end}}
diff --git a/package/content/helm.tmpl b/package/content/helm.tmpl
new file mode 100644
index 0000000..da846e9
--- /dev/null
+++ b/package/content/helm.tmpl
@@ -0,0 +1,57 @@
+{{if eq .PackageDescriptor.Package.Type "helm"}}
+
+
+
+ {{if .PackageDescriptor.Metadata.Description}}
+
+
+ {{.PackageDescriptor.Metadata.Description}}
+
+ {{end}}
+
+ {{if .PackageDescriptor.Metadata.Dependencies}}
+
+
+
+
+
+ {{ctx.Locale.Tr "packages.dependency.id"}}
+ {{ctx.Locale.Tr "packages.dependency.version"}}
+
+
+
+ {{range .PackageDescriptor.Metadata.Dependencies}}
+
+ {{.Name}}
+ {{.Version}}
+
+ {{end}}
+
+
+
+ {{end}}
+
+ {{if .PackageDescriptor.Metadata.Keywords}}
+
+
+ {{range .PackageDescriptor.Metadata.Keywords}}
+ {{.}}
+ {{end}}
+
+ {{end}}
+{{end}}
diff --git a/package/content/maven.tmpl b/package/content/maven.tmpl
new file mode 100644
index 0000000..e98fc53
--- /dev/null
+++ b/package/content/maven.tmpl
@@ -0,0 +1,75 @@
+{{if and (eq .PackageDescriptor.Package.Type "maven") (not .PackageDescriptor.Metadata)}}
+
+ {{ctx.Locale.Tr "packages.no_metadata"}}
+{{end}}
+{{if and (eq .PackageDescriptor.Package.Type "maven") .PackageDescriptor.Metadata}}
+
+
+
+ {{if .PackageDescriptor.Metadata.Description}}
+
+
+ {{.PackageDescriptor.Metadata.Description}}
+
+ {{end}}
+
+ {{if .PackageDescriptor.Metadata.Dependencies}}
+
+
+
+ {{range .PackageDescriptor.Metadata.Dependencies}}
+
+
{{svg "octicon-package-dependencies" 16 ""}}
+
+
+ {{end}}
+
+
+ {{end}}
+{{end}}
diff --git a/package/content/npm.tmpl b/package/content/npm.tmpl
new file mode 100644
index 0000000..bb02434
--- /dev/null
+++ b/package/content/npm.tmpl
@@ -0,0 +1,65 @@
+{{if eq .PackageDescriptor.Package.Type "npm"}}
+
+
+
+ {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.Readme}}
+
+
+ {{if .PackageDescriptor.Metadata.Readme}}
+
+ {{ctx.RenderUtils.MarkdownToHtml .PackageDescriptor.Metadata.Readme}}
+
+ {{else if .PackageDescriptor.Metadata.Description}}
+ {{.PackageDescriptor.Metadata.Description}}
+ {{end}}
+
+ {{end}}
+
+ {{if or .PackageDescriptor.Metadata.Dependencies .PackageDescriptor.Metadata.DevelopmentDependencies .PackageDescriptor.Metadata.PeerDependencies .PackageDescriptor.Metadata.OptionalDependencies}}
+
+
+
+ {{template "package/content/npm_dependencies" dict "root" $ "dependencies" .PackageDescriptor.Metadata.Dependencies "title" (ctx.Locale.Tr "packages.npm.dependencies")}}
+ {{template "package/content/npm_dependencies" dict "root" $ "dependencies" .PackageDescriptor.Metadata.DevelopmentDependencies "title" (ctx.Locale.Tr "packages.npm.dependencies.development")}}
+ {{template "package/content/npm_dependencies" dict "root" $ "dependencies" .PackageDescriptor.Metadata.PeerDependencies "title" (ctx.Locale.Tr "packages.npm.dependencies.peer")}}
+ {{template "package/content/npm_dependencies" dict "root" $ "dependencies" .PackageDescriptor.Metadata.OptionalDependencies "title" (ctx.Locale.Tr "packages.npm.dependencies.optional")}}
+
+
+ {{end}}
+
+ {{if .PackageDescriptor.Metadata.BundleDependencies}}
+
+
+ {{range .PackageDescriptor.Metadata.BundleDependencies}}
+ {{.}}
+ {{end}}
+
+ {{end}}
+
+ {{if .PackageDescriptor.Metadata.Keywords}}
+
+
+ {{range .PackageDescriptor.Metadata.Keywords}}
+ {{.}}
+ {{end}}
+
+ {{end}}
+{{end}}
diff --git a/package/content/npm_dependencies.tmpl b/package/content/npm_dependencies.tmpl
new file mode 100644
index 0000000..dba4575
--- /dev/null
+++ b/package/content/npm_dependencies.tmpl
@@ -0,0 +1,19 @@
+{{if .dependencies}}
+{{.title}}
+
+
+
+ {{ctx.Locale.Tr "packages.dependency.id"}}
+ {{ctx.Locale.Tr "packages.dependency.version"}}
+
+
+
+ {{range $dependency, $version := .dependencies}}
+
+ {{$dependency}}
+ {{$version}}
+
+ {{end}}
+
+
+{{end}}
diff --git a/package/content/nuget.tmpl b/package/content/nuget.tmpl
new file mode 100644
index 0000000..5bb98a8
--- /dev/null
+++ b/package/content/nuget.tmpl
@@ -0,0 +1,51 @@
+{{if eq .PackageDescriptor.Package.Type "nuget"}}
+
+
+
+ {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.ReleaseNotes .PackageDescriptor.Metadata.Readme}}
+
+ {{if .PackageDescriptor.Metadata.Description}}{{ctx.RenderUtils.MarkdownToHtml .PackageDescriptor.Metadata.Description}}
{{end}}
+ {{if .PackageDescriptor.Metadata.Readme}}{{ctx.RenderUtils.MarkdownToHtml .PackageDescriptor.Metadata.Readme}}
{{end}}
+ {{if .PackageDescriptor.Metadata.ReleaseNotes}}{{ctx.RenderUtils.MarkdownToHtml .PackageDescriptor.Metadata.ReleaseNotes}}
{{end}}
+ {{end}}
+
+ {{if .PackageDescriptor.Metadata.Dependencies}}
+
+
+
+
+
+ {{ctx.Locale.Tr "packages.dependency.id"}}
+ {{ctx.Locale.Tr "packages.dependency.version"}}
+ {{ctx.Locale.Tr "packages.nuget.dependency.framework"}}
+
+
+
+ {{range $framework, $dependencies := .PackageDescriptor.Metadata.Dependencies}}
+ {{range $dependencies}}
+
+ {{.ID}}
+ {{.Version}}
+ {{$framework}}
+
+ {{end}}
+ {{end}}
+
+
+
+ {{end}}
+{{end}}
diff --git a/package/content/pub.tmpl b/package/content/pub.tmpl
new file mode 100644
index 0000000..2f63cde
--- /dev/null
+++ b/package/content/pub.tmpl
@@ -0,0 +1,19 @@
+{{if eq .PackageDescriptor.Package.Type "pub"}}
+
+
+ {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.Readme}}
+
+ {{if .PackageDescriptor.Metadata.Description}}{{.PackageDescriptor.Metadata.Description}}
{{end}}
+ {{if .PackageDescriptor.Metadata.Readme}}{{ctx.RenderUtils.MarkdownToHtml .PackageDescriptor.Metadata.Readme}}
{{end}}
+ {{end}}
+{{end}}
diff --git a/package/content/pypi.tmpl b/package/content/pypi.tmpl
new file mode 100644
index 0000000..2a22a6e
--- /dev/null
+++ b/package/content/pypi.tmpl
@@ -0,0 +1,31 @@
+{{if eq .PackageDescriptor.Package.Type "pypi"}}
+
+
+ {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.LongDescription .PackageDescriptor.Metadata.Summary}}
+
+
+
{{if .PackageDescriptor.Metadata.Summary}}{{.PackageDescriptor.Metadata.Summary}}{{end}}
+ {{if .PackageDescriptor.Metadata.LongDescription}}
+ {{ctx.RenderUtils.MarkdownToHtml .PackageDescriptor.Metadata.LongDescription}}
+ {{else if .PackageDescriptor.Metadata.Description}}
+ {{ctx.RenderUtils.MarkdownToHtml .PackageDescriptor.Metadata.Description}}
+ {{end}}
+
+ {{end}}
+ {{if .PackageDescriptor.Metadata.RequiresPython}}
+
+
+ {{ctx.Locale.Tr "packages.pypi.requires"}}: {{.PackageDescriptor.Metadata.RequiresPython}}
+
+ {{end}}
+{{end}}
diff --git a/package/content/rpm.tmpl b/package/content/rpm.tmpl
new file mode 100644
index 0000000..3faa8a0
--- /dev/null
+++ b/package/content/rpm.tmpl
@@ -0,0 +1,56 @@
+{{if eq .PackageDescriptor.Package.Type "rpm"}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "packages.rpm.repository.architectures"}}
+ {{StringUtils.Join .Architectures ", "}}
+
+
+
+
+
+ {{if or .PackageDescriptor.Metadata.Summary .PackageDescriptor.Metadata.Description}}
+
+ {{if .PackageDescriptor.Metadata.Summary}}{{.PackageDescriptor.Metadata.Summary}}
{{end}}
+ {{if .PackageDescriptor.Metadata.Description}}{{.PackageDescriptor.Metadata.Description}}
{{end}}
+ {{end}}
+{{end}}
diff --git a/package/content/rubygems.tmpl b/package/content/rubygems.tmpl
new file mode 100644
index 0000000..610dfc7
--- /dev/null
+++ b/package/content/rubygems.tmpl
@@ -0,0 +1,40 @@
+{{if eq .PackageDescriptor.Package.Type "rubygems"}}
+
+
+ {{if .PackageDescriptor.Metadata.Description}}
+
+ {{.PackageDescriptor.Metadata.Description}}
+ {{end}}
+ {{if or .PackageDescriptor.Metadata.RequiredRubyVersion .PackageDescriptor.Metadata.RequiredRubygemsVersion}}
+
+
+ {{if .PackageDescriptor.Metadata.RequiredRubyVersion}}
{{ctx.Locale.Tr "packages.rubygems.required.ruby"}}: {{range $i, $v := .PackageDescriptor.Metadata.RequiredRubyVersion}}{{if gt $i 0}}, {{end}}{{$v.Restriction}}{{$v.Version}}{{end}}
{{end}}
+ {{if .PackageDescriptor.Metadata.RequiredRubygemsVersion}}
{{ctx.Locale.Tr "packages.rubygems.required.rubygems"}}: {{range $i, $v := .PackageDescriptor.Metadata.RequiredRubygemsVersion}}{{if gt $i 0}}, {{end}}{{$v.Restriction}}{{$v.Version}}{{end}}
{{end}}
+
+ {{end}}
+ {{if or .PackageDescriptor.Metadata.RuntimeDependencies .PackageDescriptor.Metadata.DevelopmentDependencies}}
+
+
+
+ {{template "package/content/rubygems_dependencies" dict "root" $ "dependencies" .PackageDescriptor.Metadata.RuntimeDependencies "title" (ctx.Locale.Tr "packages.rubygems.dependencies.runtime")}}
+ {{template "package/content/rubygems_dependencies" dict "root" $ "dependencies" .PackageDescriptor.Metadata.DevelopmentDependencies "title" (ctx.Locale.Tr "packages.rubygems.dependencies.development")}}
+
+
+ {{end}}
+{{end}}
diff --git a/package/content/rubygems_dependencies.tmpl b/package/content/rubygems_dependencies.tmpl
new file mode 100644
index 0000000..2c42dce
--- /dev/null
+++ b/package/content/rubygems_dependencies.tmpl
@@ -0,0 +1,19 @@
+{{if .dependencies}}
+{{.title}}
+
+
+
+ {{ctx.Locale.Tr "packages.dependency.id"}}
+ {{ctx.Locale.Tr "packages.dependency.version"}}
+
+
+
+ {{range .dependencies}}
+
+ {{.Name}}
+ {{range $i, $v := .Version}}{{if gt $i 0}}, {{end}}{{$v.Restriction}}{{$v.Version}}{{end}}
+
+ {{end}}
+
+
+{{end}}
diff --git a/package/content/swift.tmpl b/package/content/swift.tmpl
new file mode 100644
index 0000000..aacbc83
--- /dev/null
+++ b/package/content/swift.tmpl
@@ -0,0 +1,40 @@
+{{if eq .PackageDescriptor.Package.Type "swift"}}
+
+
+
+ {{if .PackageDescriptor.Metadata.Description}}
+
+
+ {{if .PackageDescriptor.Metadata.Description}}{{.PackageDescriptor.Metadata.Description}}{{end}}
+
+ {{end}}
+
+ {{if .PackageDescriptor.Metadata.Keywords}}
+
+
+ {{range .PackageDescriptor.Metadata.Keywords}}
+ {{.}}
+ {{end}}
+
+ {{end}}
+{{end}}
diff --git a/package/content/vagrant.tmpl b/package/content/vagrant.tmpl
new file mode 100644
index 0000000..7666284
--- /dev/null
+++ b/package/content/vagrant.tmpl
@@ -0,0 +1,18 @@
+{{if eq .PackageDescriptor.Package.Type "vagrant"}}
+
+
+ {{if .PackageDescriptor.Metadata.Description}}
+
+ {{.PackageDescriptor.Metadata.Description}}
+ {{end}}
+{{end}}
diff --git a/package/metadata/alpine.tmpl b/package/metadata/alpine.tmpl
new file mode 100644
index 0000000..c917494
--- /dev/null
+++ b/package/metadata/alpine.tmpl
@@ -0,0 +1,5 @@
+{{if eq .PackageDescriptor.Package.Type "alpine"}}
+ {{if .PackageDescriptor.Metadata.Maintainer}}{{svg "octicon-person"}} {{.PackageDescriptor.Metadata.Maintainer}}
{{end}}
+ {{if .PackageDescriptor.Metadata.ProjectURL}}{{end}}
+ {{if .PackageDescriptor.Metadata.License}}{{svg "octicon-law"}} {{.PackageDescriptor.Metadata.License}}
{{end}}
+{{end}}
diff --git a/package/metadata/arch.tmpl b/package/metadata/arch.tmpl
new file mode 100644
index 0000000..62308e4
--- /dev/null
+++ b/package/metadata/arch.tmpl
@@ -0,0 +1,4 @@
+{{if eq .PackageDescriptor.Package.Type "arch"}}
+ {{range .PackageDescriptor.Metadata.Licenses}}{{svg "octicon-law"}} {{.}}
{{end}}
+ {{if .PackageDescriptor.Metadata.ProjectURL}}{{end}}
+{{end}}
diff --git a/package/metadata/cargo.tmpl b/package/metadata/cargo.tmpl
new file mode 100644
index 0000000..f7dd887
--- /dev/null
+++ b/package/metadata/cargo.tmpl
@@ -0,0 +1,7 @@
+{{if eq .PackageDescriptor.Package.Type "cargo"}}
+ {{range .PackageDescriptor.Metadata.Authors}}{{svg "octicon-person"}} {{.}}
{{end}}
+ {{if .PackageDescriptor.Metadata.ProjectURL}}{{end}}
+ {{if .PackageDescriptor.Metadata.RepositoryURL}}{{end}}
+ {{if .PackageDescriptor.Metadata.DocumentationURL}}{{end}}
+ {{if .PackageDescriptor.Metadata.License}}{{svg "octicon-law"}} {{.PackageDescriptor.Metadata.License}}
{{end}}
+{{end}}
diff --git a/package/metadata/chef.tmpl b/package/metadata/chef.tmpl
new file mode 100644
index 0000000..6bf606c
--- /dev/null
+++ b/package/metadata/chef.tmpl
@@ -0,0 +1,5 @@
+{{if eq .PackageDescriptor.Package.Type "chef"}}
+ {{if .PackageDescriptor.Metadata.Author}}{{svg "octicon-person"}} {{.PackageDescriptor.Metadata.Author}}
{{end}}
+ {{if .PackageDescriptor.Metadata.RepositoryURL}}{{end}}
+ {{if .PackageDescriptor.Metadata.License}}{{svg "octicon-law"}} {{.PackageDescriptor.Metadata.License}}
{{end}}
+{{end}}
diff --git a/package/metadata/composer.tmpl b/package/metadata/composer.tmpl
new file mode 100644
index 0000000..e69e917
--- /dev/null
+++ b/package/metadata/composer.tmpl
@@ -0,0 +1,5 @@
+{{if eq .PackageDescriptor.Package.Type "composer"}}
+ {{range .PackageDescriptor.Metadata.Authors}}{{svg "octicon-person"}} {{.Name}}
{{end}}
+ {{if .PackageDescriptor.Metadata.Homepage}}{{end}}
+ {{range .PackageDescriptor.Metadata.License}}{{svg "octicon-law"}} {{.}}
{{end}}
+{{end}}
diff --git a/package/metadata/conan.tmpl b/package/metadata/conan.tmpl
new file mode 100644
index 0000000..8b15375
--- /dev/null
+++ b/package/metadata/conan.tmpl
@@ -0,0 +1,6 @@
+{{if eq .PackageDescriptor.Package.Type "conan"}}
+ {{if .PackageDescriptor.Metadata.Author}}{{svg "octicon-person"}} {{.PackageDescriptor.Metadata.Author}}
{{end}}
+ {{if .PackageDescriptor.Metadata.ProjectURL}}{{end}}
+ {{if .PackageDescriptor.Metadata.License}}{{svg "octicon-law"}} {{.PackageDescriptor.Metadata.License}}
{{end}}
+ {{if .PackageDescriptor.Metadata.RepositoryURL}}{{end}}
+{{end}}
diff --git a/package/metadata/conda.tmpl b/package/metadata/conda.tmpl
new file mode 100644
index 0000000..4add945
--- /dev/null
+++ b/package/metadata/conda.tmpl
@@ -0,0 +1,6 @@
+{{if eq .PackageDescriptor.Package.Type "conda"}}
+ {{if .PackageDescriptor.Metadata.License}}{{svg "octicon-law"}} {{.PackageDescriptor.Metadata.License}}
{{end}}
+ {{if .PackageDescriptor.Metadata.ProjectURL}}{{end}}
+ {{if .PackageDescriptor.Metadata.RepositoryURL}}{{end}}
+ {{if .PackageDescriptor.Metadata.DocumentationURL}}{{end}}
+{{end}}
diff --git a/package/metadata/container.tmpl b/package/metadata/container.tmpl
new file mode 100644
index 0000000..ecc1796
--- /dev/null
+++ b/package/metadata/container.tmpl
@@ -0,0 +1,9 @@
+{{if eq .PackageDescriptor.Package.Type "container"}}
+ {{svg "octicon-package"}} {{.PackageDescriptor.Metadata.Type.Name}}
+ {{if .PackageDescriptor.Metadata.Platform}}{{svg "octicon-cpu"}} {{.PackageDescriptor.Metadata.Platform}}
{{end}}
+ {{range .PackageDescriptor.Metadata.Authors}}{{svg "octicon-person"}} {{.}}
{{end}}
+ {{if .PackageDescriptor.Metadata.Licenses}}{{svg "octicon-law"}} {{.PackageDescriptor.Metadata.Licenses}}
{{end}}
+ {{if .PackageDescriptor.Metadata.ProjectURL}}{{end}}
+ {{if .PackageDescriptor.Metadata.RepositoryURL}}{{end}}
+ {{if .PackageDescriptor.Metadata.DocumentationURL}}{{end}}
+{{end}}
diff --git a/package/metadata/cran.tmpl b/package/metadata/cran.tmpl
new file mode 100644
index 0000000..3ada7ac
--- /dev/null
+++ b/package/metadata/cran.tmpl
@@ -0,0 +1,5 @@
+{{if eq .PackageDescriptor.Package.Type "cran"}}
+ {{if .PackageDescriptor.Metadata.License}}{{svg "octicon-law"}} {{.PackageDescriptor.Metadata.License}}
{{end}}
+ {{range .PackageDescriptor.Metadata.Authors}}{{svg "octicon-person"}} {{.}}
{{end}}
+ {{range .PackageDescriptor.Metadata.ProjectURL}}{{end}}
+{{end}}
diff --git a/package/metadata/debian.tmpl b/package/metadata/debian.tmpl
new file mode 100644
index 0000000..d35e8b0
--- /dev/null
+++ b/package/metadata/debian.tmpl
@@ -0,0 +1,4 @@
+{{if eq .PackageDescriptor.Package.Type "debian"}}
+ {{if .PackageDescriptor.Metadata.Maintainer}}{{svg "octicon-person"}} {{.PackageDescriptor.Metadata.Maintainer}}
{{end}}
+ {{if .PackageDescriptor.Metadata.ProjectURL}}{{end}}
+{{end}}
diff --git a/package/metadata/generic.tmpl b/package/metadata/generic.tmpl
new file mode 100644
index 0000000..e69de29
diff --git a/package/metadata/helm.tmpl b/package/metadata/helm.tmpl
new file mode 100644
index 0000000..b3b3f34
--- /dev/null
+++ b/package/metadata/helm.tmpl
@@ -0,0 +1,4 @@
+{{if eq .PackageDescriptor.Package.Type "helm"}}
+ {{range .PackageDescriptor.Metadata.Maintainers}}{{svg "octicon-person"}} {{.Name}}
{{end}}
+ {{if .PackageDescriptor.Metadata.Home}}{{end}}
+{{end}}
diff --git a/package/metadata/maven.tmpl b/package/metadata/maven.tmpl
new file mode 100644
index 0000000..33662be
--- /dev/null
+++ b/package/metadata/maven.tmpl
@@ -0,0 +1,8 @@
+{{if and (eq .PackageDescriptor.Package.Type "maven") (not .PackageDescriptor.Metadata)}}
+ {{svg "octicon-note"}} {{ctx.Locale.Tr "packages.no_metadata"}}
+{{end}}
+{{if and (eq .PackageDescriptor.Package.Type "maven") .PackageDescriptor.Metadata}}
+ {{if .PackageDescriptor.Metadata.Name}}{{svg "octicon-note"}} {{.PackageDescriptor.Metadata.Name}}
{{end}}
+ {{if .PackageDescriptor.Metadata.ProjectURL}}{{end}}
+ {{range .PackageDescriptor.Metadata.Licenses}}{{svg "octicon-law"}} {{.}}
{{end}}
+{{end}}
diff --git a/package/metadata/npm.tmpl b/package/metadata/npm.tmpl
new file mode 100644
index 0000000..ff245f2
--- /dev/null
+++ b/package/metadata/npm.tmpl
@@ -0,0 +1,8 @@
+{{if eq .PackageDescriptor.Package.Type "npm"}}
+ {{if .PackageDescriptor.Metadata.Author}}{{svg "octicon-person"}} {{.PackageDescriptor.Metadata.Author}}
{{end}}
+ {{if .PackageDescriptor.Metadata.ProjectURL}}{{end}}
+ {{if .PackageDescriptor.Metadata.License}}{{svg "octicon-law"}} {{.PackageDescriptor.Metadata.License}}
{{end}}
+ {{range .PackageDescriptor.VersionProperties}}
+ {{if eq .Name "npm.tag"}}{{svg "octicon-versions"}} {{.Value}}
{{end}}
+ {{end}}
+{{end}}
diff --git a/package/metadata/nuget.tmpl b/package/metadata/nuget.tmpl
new file mode 100644
index 0000000..2d18528
--- /dev/null
+++ b/package/metadata/nuget.tmpl
@@ -0,0 +1,5 @@
+{{if eq .PackageDescriptor.Package.Type "nuget"}}
+ {{if .PackageDescriptor.Metadata.Authors}}{{svg "octicon-person"}} {{.PackageDescriptor.Metadata.Authors}}
{{end}}
+ {{if .PackageDescriptor.Metadata.ProjectURL}}{{end}}
+ {{if .PackageDescriptor.Metadata.RepositoryURL}}{{end}}
+{{end}}
diff --git a/package/metadata/pub.tmpl b/package/metadata/pub.tmpl
new file mode 100644
index 0000000..e54207c
--- /dev/null
+++ b/package/metadata/pub.tmpl
@@ -0,0 +1,5 @@
+{{if eq .PackageDescriptor.Package.Type "pub"}}
+ {{if .PackageDescriptor.Metadata.ProjectURL}}{{end}}
+ {{if .PackageDescriptor.Metadata.RepositoryURL}}{{end}}
+ {{if .PackageDescriptor.Metadata.DocumentationURL}}{{end}}
+{{end}}
diff --git a/package/metadata/pypi.tmpl b/package/metadata/pypi.tmpl
new file mode 100644
index 0000000..9dfac07
--- /dev/null
+++ b/package/metadata/pypi.tmpl
@@ -0,0 +1,5 @@
+{{if eq .PackageDescriptor.Package.Type "pypi"}}
+ {{if .PackageDescriptor.Metadata.Author}}{{svg "octicon-person"}} {{.PackageDescriptor.Metadata.Author}}
{{end}}
+ {{if .PackageDescriptor.Metadata.ProjectURL}}{{end}}
+ {{if .PackageDescriptor.Metadata.License}}{{svg "octicon-law"}} {{.PackageDescriptor.Metadata.License}}
{{end}}
+{{end}}
diff --git a/package/metadata/rpm.tmpl b/package/metadata/rpm.tmpl
new file mode 100644
index 0000000..6509393
--- /dev/null
+++ b/package/metadata/rpm.tmpl
@@ -0,0 +1,4 @@
+{{if eq .PackageDescriptor.Package.Type "rpm"}}
+ {{if .PackageDescriptor.Metadata.ProjectURL}}{{end}}
+ {{if .PackageDescriptor.Metadata.License}}{{svg "octicon-law"}} {{.PackageDescriptor.Metadata.License}}
{{end}}
+{{end}}
diff --git a/package/metadata/rubygems.tmpl b/package/metadata/rubygems.tmpl
new file mode 100644
index 0000000..04fc369
--- /dev/null
+++ b/package/metadata/rubygems.tmpl
@@ -0,0 +1,5 @@
+{{if eq .PackageDescriptor.Package.Type "rubygems"}}
+ {{range .PackageDescriptor.Metadata.Authors}}{{svg "octicon-person"}} {{.}}
{{end}}
+ {{if .PackageDescriptor.Metadata.ProjectURL}} {{end}}
+ {{range .PackageDescriptor.Metadata.Licenses}}{{svg "octicon-law"}} {{.}}
{{end}}
+{{end}}
diff --git a/package/metadata/swift.tmpl b/package/metadata/swift.tmpl
new file mode 100644
index 0000000..fe28759
--- /dev/null
+++ b/package/metadata/swift.tmpl
@@ -0,0 +1,4 @@
+{{if eq .PackageDescriptor.Package.Type "swift"}}
+ {{if .PackageDescriptor.Metadata.Author.String}}{{svg "octicon-person"}} {{.PackageDescriptor.Metadata.Author}}
{{end}}
+ {{if .PackageDescriptor.Metadata.RepositoryURL}}{{end}}
+{{end}}
diff --git a/package/metadata/vagrant.tmpl b/package/metadata/vagrant.tmpl
new file mode 100644
index 0000000..795ab33
--- /dev/null
+++ b/package/metadata/vagrant.tmpl
@@ -0,0 +1,5 @@
+{{if eq .PackageDescriptor.Package.Type "vagrant"}}
+ {{if .PackageDescriptor.Metadata.Author}}{{svg "octicon-person"}} {{.PackageDescriptor.Metadata.Author}}
{{end}}
+ {{if .PackageDescriptor.Metadata.ProjectURL}}{{end}}
+ {{if .PackageDescriptor.Metadata.RepositoryURL}}{{end}}
+{{end}}
diff --git a/package/settings.tmpl b/package/settings.tmpl
new file mode 100644
index 0000000..4b87734
--- /dev/null
+++ b/package/settings.tmpl
@@ -0,0 +1,77 @@
+{{template "base/head" .}}
+
+ {{if .ContextUser.IsOrganization}}
+ {{template "org/header" .}}
+ {{else}}
+ {{template "shared/user/org_profile_avatar" .}}
+ {{end}}
+
+ {{if not .ContextUser.IsOrganization}}
+ {{template "user/overview/header" .}}
+ {{end}}
+ {{template "base/alert" .}}
+
{{.PackageDescriptor.Package.Name}} ({{.PackageDescriptor.Version.Version}}) / {{ctx.Locale.Tr "repo.settings"}}
+
+
+
{{ctx.Locale.Tr "packages.settings.link.description"}}
+
+ {{template "base/disable_form_autofill"}}
+ {{.CsrfTokenHtml}}
+
+
+
+ {{$repoID := 0}}
+ {{if .PackageDescriptor.Repository}}
+ {{$repoID = .PackageDescriptor.Repository.ID}}
+ {{end}}
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
{{ctx.Locale.Tr "packages.settings.link.select"}}
+
+
+
+
+ {{ctx.Locale.Tr "packages.settings.link.button"}}
+
+
+
+
+
+
+
+
+
{{ctx.Locale.Tr "packages.settings.delete"}}
+
{{ctx.Locale.Tr "packages.settings.delete.description"}}
+
+
+ {{ctx.Locale.Tr "packages.settings.delete"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "packages.settings.delete.notice" .PackageDescriptor.Package.Name .PackageDescriptor.Version.Version}}
+
+
+ {{.CsrfTokenHtml}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+
+
+
+
+
+
+
+{{template "base/footer" .}}
diff --git a/package/shared/cargo.tmpl b/package/shared/cargo.tmpl
new file mode 100644
index 0000000..7652231
--- /dev/null
+++ b/package/shared/cargo.tmpl
@@ -0,0 +1,24 @@
+
+
diff --git a/package/shared/cleanup_rules/edit.tmpl b/package/shared/cleanup_rules/edit.tmpl
new file mode 100644
index 0000000..138a907
--- /dev/null
+++ b/package/shared/cleanup_rules/edit.tmpl
@@ -0,0 +1,73 @@
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+
+ {{ctx.Locale.Tr "enabled"}}
+
+
+
+
+ {{ctx.Locale.Tr "packages.filter.type"}}
+
+ {{range $type := .AvailableTypes}}
+ {{$type.Name}}
+ {{end}}
+
+
+
+
+ {{ctx.Locale.Tr "packages.owner.settings.cleanuprules.pattern_full_match"}}
+
+
+
+
+ {{ctx.Locale.Tr "packages.owner.settings.cleanuprules.keep.title"}}
+
+ {{ctx.Locale.Tr "packages.owner.settings.cleanuprules.keep.count"}}:
+
+
+ {{ctx.Locale.Tr "packages.owner.settings.cleanuprules.keep.count.1"}}
+ {{ctx.Locale.Tr "packages.owner.settings.cleanuprules.keep.count.n" 5}}
+ {{ctx.Locale.Tr "packages.owner.settings.cleanuprules.keep.count.n" 10}}
+ {{ctx.Locale.Tr "packages.owner.settings.cleanuprules.keep.count.n" 25}}
+ {{ctx.Locale.Tr "packages.owner.settings.cleanuprules.keep.count.n" 50}}
+ {{ctx.Locale.Tr "packages.owner.settings.cleanuprules.keep.count.n" 100}}
+
+
+
+
{{ctx.Locale.Tr "packages.owner.settings.cleanuprules.keep.pattern"}}:
+
+
{{ctx.Locale.Tr "packages.owner.settings.cleanuprules.keep.pattern.container"}}
+
+
+ {{ctx.Locale.Tr "packages.owner.settings.cleanuprules.remove.title"}}
+
+ {{ctx.Locale.Tr "packages.owner.settings.cleanuprules.remove.days"}}:
+
+
+ {{ctx.Locale.Tr "tool.days" 7}}
+ {{ctx.Locale.Tr "tool.days" 14}}
+ {{ctx.Locale.Tr "tool.days" 30}}
+ {{ctx.Locale.Tr "tool.days" 60}}
+ {{ctx.Locale.Tr "tool.days" 90}}
+ {{ctx.Locale.Tr "tool.days" 180}}
+
+
+
+ {{ctx.Locale.Tr "packages.owner.settings.cleanuprules.remove.pattern"}}:
+
+
+
+
+
diff --git a/package/shared/cleanup_rules/list.tmpl b/package/shared/cleanup_rules/list.tmpl
new file mode 100644
index 0000000..6505c8f
--- /dev/null
+++ b/package/shared/cleanup_rules/list.tmpl
@@ -0,0 +1,56 @@
+
+
+
+ {{range .CleanupRules}}
+
+
+ {{svg .Type.SVGName 32}}
+
+
+
+
+ {{if .Enabled}}{{ctx.Locale.Tr "enabled"}}{{else}}{{ctx.Locale.Tr "disabled"}}{{end}}
+
+ {{if .KeepCount}}
+
+ {{ctx.Locale.Tr "packages.owner.settings.cleanuprules.keep.count"}}: {{if eq .KeepCount 1}}{{ctx.Locale.Tr "packages.owner.settings.cleanuprules.keep.count.1"}}{{else}}{{ctx.Locale.Tr "packages.owner.settings.cleanuprules.keep.count.n" .KeepCount}}{{end}}
+
+ {{end}}
+ {{if .KeepPattern}}
+
+ {{ctx.Locale.Tr "packages.owner.settings.cleanuprules.keep.pattern"}}: {{StringUtils.EllipsisString .KeepPattern 100}}
+
+ {{end}}
+ {{if .RemoveDays}}
+
+ {{ctx.Locale.Tr "packages.owner.settings.cleanuprules.remove.days"}}: {{ctx.Locale.Tr "tool.days" .RemoveDays}}
+
+ {{end}}
+ {{if .RemovePattern}}
+
+ {{ctx.Locale.Tr "packages.owner.settings.cleanuprules.remove.pattern"}}: {{StringUtils.EllipsisString .RemovePattern 100}}
+
+ {{end}}
+
+
+
+ {{svg "octicon-kebab-horizontal"}}
+
+
+
+
+ {{else}}
+
{{ctx.Locale.Tr "packages.owner.settings.cleanuprules.none"}}
+ {{end}}
+
+
diff --git a/package/shared/cleanup_rules/preview.tmpl b/package/shared/cleanup_rules/preview.tmpl
new file mode 100644
index 0000000..bb2354c
--- /dev/null
+++ b/package/shared/cleanup_rules/preview.tmpl
@@ -0,0 +1,34 @@
+
+
+
{{ctx.Locale.Tr "packages.owner.settings.cleanuprules.preview.overview" (len .VersionsToRemove)}}
+
+
+
+
+
+ {{ctx.Locale.Tr "admin.packages.type"}}
+ {{ctx.Locale.Tr "admin.packages.name"}}
+ {{ctx.Locale.Tr "admin.packages.version"}}
+ {{ctx.Locale.Tr "admin.packages.creator"}}
+ {{ctx.Locale.Tr "admin.packages.size"}}
+ {{ctx.Locale.Tr "admin.packages.published"}}
+
+
+
+ {{range .VersionsToRemove}}
+
+ {{.Package.Type.Name}}
+ {{.Package.Name}}
+ {{.Version.Version}}
+ {{.Creator.Name}}
+ {{FileSize .CalculateBlobSize}}
+ {{DateUtils.AbsoluteShort .Version.CreatedUnix}}
+
+ {{else}}
+
+ {{ctx.Locale.Tr "packages.owner.settings.cleanuprules.preview.none"}}
+
+ {{end}}
+
+
+
diff --git a/package/shared/list.tmpl b/package/shared/list.tmpl
new file mode 100644
index 0000000..e621c04
--- /dev/null
+++ b/package/shared/list.tmpl
@@ -0,0 +1,57 @@
+{{template "base/alert" .}}
+{{if .HasPackages}}
+
+
+ {{template "shared/search/input" dict "Value" .Query "Placeholder" (ctx.Locale.Tr "search.package_kind")}}
+
+ {{ctx.Locale.Tr "packages.filter.type"}}
+ {{ctx.Locale.Tr "packages.filter.type.all"}}
+ {{range $type := .AvailableTypes}}
+ {{$type.Name}}
+ {{end}}
+
+ {{template "shared/search/button"}}
+
+
+{{end}}
+
+ {{range .PackageDescriptors}}
+
+
+
+
+
+ {{$timeStr := DateUtils.TimeSince .Version.CreatedUnix}}
+ {{$hasRepositoryAccess := false}}
+ {{if .Repository}}
+ {{$hasRepositoryAccess = index $.RepositoryAccessMap .Repository.ID}}
+ {{end}}
+ {{if $hasRepositoryAccess}}
+ {{ctx.Locale.Tr "packages.published_by_in" $timeStr .Creator.HomeLink .Creator.GetDisplayName .Repository.Link .Repository.FullName}}
+ {{else}}
+ {{ctx.Locale.Tr "packages.published_by" $timeStr .Creator.HomeLink .Creator.GetDisplayName}}
+ {{end}}
+
+
+
+
+ {{else}}
+ {{if not .HasPackages}}
+
+ {{svg "octicon-package" 48}}
+
{{ctx.Locale.Tr "packages.empty"}}
+ {{if and .Repository .CanWritePackages}}
+ {{$packagesUrl := URLJoin .Owner.HomeLink "-" "packages"}}
+
{{ctx.Locale.Tr "packages.empty.repo" $packagesUrl}}
+ {{end}}
+
{{ctx.Locale.Tr "packages.empty.documentation" "https://docs.gitea.com/usage/packages/overview/"}}
+
+ {{else}}
+
{{ctx.Locale.Tr "packages.filter.no_result"}}
+ {{end}}
+ {{end}}
+ {{template "base/paginate" .}}
+
diff --git a/package/shared/versionlist.tmpl b/package/shared/versionlist.tmpl
new file mode 100644
index 0000000..7a1059e
--- /dev/null
+++ b/package/shared/versionlist.tmpl
@@ -0,0 +1,37 @@
+{{.PackageDescriptor.Package.Name}} / {{ctx.Locale.Tr "packages.versions"}}
+
+
+ {{template "shared/search/input" dict "Value" .Query "Placeholder" (ctx.Locale.Tr "search.package_kind")}}
+
+ {{ctx.Locale.Tr "filter.string.asc"}}
+ {{ctx.Locale.Tr "filter.string.desc"}}
+ {{ctx.Locale.Tr "repo.issues.filter_sort.oldest"}}
+ {{ctx.Locale.Tr "repo.issues.filter_sort.latest"}}
+
+ {{if eq .PackageDescriptor.Package.Type "container"}}
+
+ {{$isTagged := or (eq .Tagged "") (eq .Tagged "tagged")}}
+ {{ctx.Locale.Tr "packages.filter.container.tagged"}}
+ {{ctx.Locale.Tr "packages.filter.container.untagged"}}
+
+ {{end}}
+ {{template "shared/search/button"}}
+
+
+
+ {{range .PackageDescriptors}}
+
+
+
+
{{.Version.LowerVersion}}
+
+ {{ctx.Locale.Tr "packages.published_by" (DateUtils.TimeSince .Version.CreatedUnix) .Creator.HomeLink .Creator.GetDisplayName}}
+
+
+
+
+ {{else}}
+
{{ctx.Locale.Tr "packages.filter.no_result"}}
+ {{end}}
+ {{template "base/paginate" .}}
+
diff --git a/package/view.tmpl b/package/view.tmpl
new file mode 100644
index 0000000..9e92207
--- /dev/null
+++ b/package/view.tmpl
@@ -0,0 +1,114 @@
+{{template "base/head" .}}
+
+ {{template "shared/user/org_profile_avatar" .}}
+
+ {{template "user/overview/header" .}}
+
+
+
+ {{template "package/content/alpine" .}}
+ {{template "package/content/arch" .}}
+ {{template "package/content/cargo" .}}
+ {{template "package/content/chef" .}}
+ {{template "package/content/composer" .}}
+ {{template "package/content/conan" .}}
+ {{template "package/content/conda" .}}
+ {{template "package/content/container" .}}
+ {{template "package/content/cran" .}}
+ {{template "package/content/debian" .}}
+ {{template "package/content/generic" .}}
+ {{template "package/content/go" .}}
+ {{template "package/content/helm" .}}
+ {{template "package/content/maven" .}}
+ {{template "package/content/npm" .}}
+ {{template "package/content/nuget" .}}
+ {{template "package/content/pub" .}}
+ {{template "package/content/pypi" .}}
+ {{template "package/content/rpm" .}}
+ {{template "package/content/rubygems" .}}
+ {{template "package/content/swift" .}}
+ {{template "package/content/vagrant" .}}
+
+
+
{{ctx.Locale.Tr "packages.details"}}
+
+
{{svg .PackageDescriptor.Package.Type.SVGName}} {{.PackageDescriptor.Package.Type.Name}}
+ {{if .HasRepositoryAccess}}
+
+ {{end}}
+
{{svg "octicon-calendar"}} {{DateUtils.TimeSince .PackageDescriptor.Version.CreatedUnix}}
+
{{svg "octicon-download"}} {{.PackageDescriptor.Version.DownloadCount}}
+ {{template "package/metadata/alpine" .}}
+ {{template "package/metadata/arch" .}}
+ {{template "package/metadata/cargo" .}}
+ {{template "package/metadata/chef" .}}
+ {{template "package/metadata/composer" .}}
+ {{template "package/metadata/conan" .}}
+ {{template "package/metadata/conda" .}}
+ {{template "package/metadata/container" .}}
+ {{template "package/metadata/cran" .}}
+ {{template "package/metadata/debian" .}}
+ {{template "package/metadata/generic" .}}
+ {{template "package/metadata/helm" .}}
+ {{template "package/metadata/maven" .}}
+ {{template "package/metadata/npm" .}}
+ {{template "package/metadata/nuget" .}}
+ {{template "package/metadata/pub" .}}
+ {{template "package/metadata/pypi" .}}
+ {{template "package/metadata/rpm" .}}
+ {{template "package/metadata/rubygems" .}}
+ {{template "package/metadata/swift" .}}
+ {{template "package/metadata/vagrant" .}}
+ {{if not (and (eq .PackageDescriptor.Package.Type "container") .PackageDescriptor.Metadata.Manifests)}}
+
{{svg "octicon-database"}} {{FileSize .PackageDescriptor.CalculateBlobSize}}
+ {{end}}
+
+ {{if not (eq .PackageDescriptor.Package.Type "container")}}
+
+
{{ctx.Locale.Tr "packages.assets"}} ({{len .PackageDescriptor.Files}})
+
+ {{range .PackageDescriptor.Files}}
+
+ {{end}}
+
+ {{end}}
+
+
{{ctx.Locale.Tr "packages.versions"}} ({{.TotalVersionCount}})
+
{{ctx.Locale.Tr "packages.versions.view_all"}}
+
+ {{range .LatestVersions}}
+
+ {{end}}
+
+ {{if or .CanWritePackages .HasRepositoryAccess}}
+
+
+ {{if .HasRepositoryAccess}}
+
+ {{end}}
+ {{if .CanWritePackages}}
+
+ {{end}}
+
+ {{end}}
+
+
+
+
+{{template "base/footer" .}}
diff --git a/post-install.tmpl b/post-install.tmpl
new file mode 100644
index 0000000..fb23400
--- /dev/null
+++ b/post-install.tmpl
@@ -0,0 +1,24 @@
+{{template "base/head" .}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{{template "base/footer" .}}
diff --git a/projects/list.tmpl b/projects/list.tmpl
new file mode 100644
index 0000000..31a3152
--- /dev/null
+++ b/projects/list.tmpl
@@ -0,0 +1,96 @@
+{{if and $.CanWriteProjects (not $.Repository.IsArchived)}}
+
+{{end}}
+
+{{template "base/alert" .}}
+
+
+
+
+ {{range .Projects}}
+
+
+ {{svg .IconName 16}}
+ {{.Title}}
+
+
+ {{if .Description}}
+
+ {{.RenderedContent}}
+
+ {{end}}
+
+ {{end}}
+
+ {{template "base/paginate" .}}
+
+
+{{if and $.CanWriteProjects (not $.Repository.IsArchived)}}
+
+
+
+
{{ctx.Locale.Tr "repo.projects.deletion_desc"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+{{end}}
diff --git a/projects/new.tmpl b/projects/new.tmpl
new file mode 100644
index 0000000..a936079
--- /dev/null
+++ b/projects/new.tmpl
@@ -0,0 +1,75 @@
+
+{{template "base/alert" .}}
+
+ {{.CsrfTokenHtml}}
+
+
+
+ {{ctx.Locale.Tr "repo.projects.title"}}
+
+
+
+ {{ctx.Locale.Tr "repo.projects.description"}}
+ {{/* TODO: repo-level project and org-level project have different behaviros to render */}}
+ {{/* the "Repository" is nil when the project is org-level */}}
+ {{template "shared/combomarkdowneditor" (dict
+ "MarkdownPreviewInRepo" $.Repository
+ "MarkdownPreviewContext" (Iif $.Repository "" .HomeLink)
+ "MarkdownPreviewMode" (Iif $.Repository "comment")
+ "TextareaName" "content"
+ "TextareaContent" .content
+ "TextareaPlaceholder" (ctx.Locale.Tr "repo.projects.description_placeholder")
+ )}}
+
+
+ {{if not .PageIsEditProjects}}
+
+
{{ctx.Locale.Tr "repo.projects.template.desc"}}
+
+
+
{{ctx.Locale.Tr "repo.projects.template.desc_helper"}}
+
+
+
+ {{end}}
+
+
+
{{ctx.Locale.Tr "repo.projects.card_type.desc"}}
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+ {{range $element := .CardTypes}}
+ {{if or (eq $.card_type $element.CardType) (and (not $.PageIsEditProjects) (eq $element.CardType 1))}}
+
+
{{ctx.Locale.Tr $element.Translation}}
+ {{end}}
+ {{end}}
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.milestones.cancel"}}
+
+
+ {{if .PageIsEditProjects}}{{ctx.Locale.Tr "repo.projects.modify"}}{{else}}{{ctx.Locale.Tr "repo.projects.create"}}{{end}}
+
+
+
diff --git a/projects/view.tmpl b/projects/view.tmpl
new file mode 100644
index 0000000..217ffe6
--- /dev/null
+++ b/projects/view.tmpl
@@ -0,0 +1,192 @@
+{{$canWriteProject := and .CanWriteProjects (or (not .Repository) (not .Repository.IsArchived))}}
+
+
+
+
{{.Project.Title}}
+
+
+ {{if $canWriteProject}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.projects.column.new_title"}}
+
+
+
+
+
{{ctx.Locale.Tr "repo.projects.column.color"}}
+
+
+ {{template "repo/issue/label_precolors"}}
+
+
+
+
+ {{ctx.Locale.Tr "settings.cancel"}}
+ {{ctx.Locale.Tr "repo.projects.column.new_submit"}}
+
+
+
+
+ {{end}}
+
+
+
{{$.Project.RenderedContent}}
+
+
+
+
+
+
+ {{range .Columns}}
+
+
+
+ {{.NumIssues}}
+
+
{{.Title}}
+ {{if $canWriteProject}}
+
+ {{svg "octicon-kebab-horizontal"}}
+
+
+ {{end}}
+
+
+
+ {{range (index $.IssuesMap .ID)}}
+
+ {{template "repo/issue/card" (dict "Issue" . "Page" $)}}
+
+ {{end}}
+
+
+ {{end}}
+
+
+
+{{if .CanWriteProjects}}
+
+
+
+
{{ctx.Locale.Tr "repo.projects.deletion_desc"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+{{end}}
diff --git a/repo/actions/list.tmpl b/repo/actions/list.tmpl
new file mode 100644
index 0000000..7d782c0
--- /dev/null
+++ b/repo/actions/list.tmpl
@@ -0,0 +1,92 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+ {{template "base/alert" .}}
+
+ {{if .HasWorkflowsOrRuns}}
+
+
+
+
+
+
+
+ {{if .WorkflowDispatchConfig}}
+ {{template "repo/actions/workflow_dispatch" .}}
+ {{end}}
+
+ {{template "repo/actions/runs_list" .}}
+
+
+ {{else}}
+ {{template "repo/actions/no_workflows" .}}
+ {{end}}
+
+
+{{template "base/footer" .}}
diff --git a/repo/actions/no_workflows.tmpl b/repo/actions/no_workflows.tmpl
new file mode 100644
index 0000000..0093135
--- /dev/null
+++ b/repo/actions/no_workflows.tmpl
@@ -0,0 +1,8 @@
+
+ {{svg "octicon-no-entry" 48}}
+
{{ctx.Locale.Tr "actions.runs.no_workflows"}}
+ {{if and .CanWriteCode .CanWriteActions}}
+
{{ctx.Locale.Tr "actions.runs.no_workflows.quick_start" "https://docs.gitea.com/usage/actions/quickstart/"}}
+ {{end}}
+
{{ctx.Locale.Tr "actions.runs.no_workflows.documentation" "https://docs.gitea.com/usage/actions/overview/"}}
+
diff --git a/repo/actions/runs_list.tmpl b/repo/actions/runs_list.tmpl
new file mode 100644
index 0000000..fa1adb3
--- /dev/null
+++ b/repo/actions/runs_list.tmpl
@@ -0,0 +1,43 @@
+
+ {{if not .Runs}}
+
+ {{svg "octicon-no-entry" 48}}
+
{{if $.IsFiltered}}{{ctx.Locale.Tr "actions.runs.no_results"}}{{else}}{{ctx.Locale.Tr "actions.runs.no_runs"}}{{end}}
+
+ {{end}}
+ {{range .Runs}}
+
+ {{end}}
+
+{{template "base/paginate" .}}
diff --git a/repo/actions/status.tmpl b/repo/actions/status.tmpl
new file mode 100644
index 0000000..64c2543
--- /dev/null
+++ b/repo/actions/status.tmpl
@@ -0,0 +1,23 @@
+
+{{- $size := Iif .size .size 16 -}}
+{{- $className := Iif .className .className "" -}}
+
+{{if eq .status "success"}}
+ {{svg "octicon-check-circle-fill" $size (printf "text green %s" $className)}}
+{{else if eq .status "skipped"}}
+ {{svg "octicon-skip" $size (printf "text grey %s" $className)}}
+{{else if eq .status "cancelled"}}
+ {{svg "octicon-stop" $size (printf "text grey %s" $className)}}
+{{else if eq .status "waiting"}}
+ {{svg "octicon-clock" $size (printf "text yellow %s" $className)}}
+{{else if eq .status "blocked"}}
+ {{svg "octicon-blocked" $size (printf "text yellow %s" $className)}}
+{{else if eq .status "running"}}
+ {{svg "octicon-meter" $size (printf "text yellow job-status-rotate %s" $className)}}
+{{else}}{{/*failure, unknown*/}}
+ {{svg "octicon-x-circle-fill" $size (printf "text red %s" $className)}}
+{{end}}
+
diff --git a/repo/actions/view.tmpl b/repo/actions/view.tmpl
new file mode 100644
index 0000000..f7b0360
--- /dev/null
+++ b/repo/actions/view.tmpl
@@ -0,0 +1,34 @@
+{{template "base/head" .}}
+
+
+ {{template "repo/header" .}}
+
+
+
+
+{{template "base/footer" .}}
diff --git a/repo/actions/workflow_dispatch.tmpl b/repo/actions/workflow_dispatch.tmpl
new file mode 100644
index 0000000..21f3ef2
--- /dev/null
+++ b/repo/actions/workflow_dispatch.tmpl
@@ -0,0 +1,78 @@
+
+ {{ctx.Locale.Tr "actions.workflow.has_workflow_dispatch"}}
+ {{ctx.Locale.Tr "actions.workflow.run"}}{{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+ {{ctx.Locale.Tr "actions.workflow.from_ref"}}:
+
+
+
+
+
+
+ {{range $item := .WorkflowDispatchConfig.Inputs}}
+
+ {{if eq .Type "choice"}}
+
{{.Description}}:
+
+ {{range .Options}}
+ {{.}}
+ {{end}}
+
+ {{else if eq .Type "boolean"}}
+
+ {{.Description}}
+
+
+ {{else if eq .Type "number"}}
+
{{.Description}}:
+
+ {{else}}
+
{{.Description}}:
+
+ {{end}}
+
+ {{end}}
+ Submit
+
+
+
diff --git a/repo/activity.tmpl b/repo/activity.tmpl
new file mode 100644
index 0000000..a19fb66
--- /dev/null
+++ b/repo/activity.tmpl
@@ -0,0 +1,17 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+
+ {{template "repo/navbar" .}}
+
+
+ {{if .PageIsPulse}}{{template "repo/pulse" .}}{{end}}
+ {{if .PageIsContributors}}{{template "repo/contributors" .}}{{end}}
+ {{if .PageIsCodeFrequency}}{{template "repo/code_frequency" .}}{{end}}
+ {{if .PageIsRecentCommits}}{{template "repo/recent_commits" .}}{{end}}
+
+
+
+{{template "base/footer" .}}
+
diff --git a/repo/blame.tmpl b/repo/blame.tmpl
new file mode 100644
index 0000000..62d1bbf
--- /dev/null
+++ b/repo/blame.tmpl
@@ -0,0 +1,92 @@
+{{if or .UsesIgnoreRevs .FaultyIgnoreRevsFile}}
+ {{$revsFileLink := URLJoin .RepoLink "src" .BranchNameSubURL "/.git-blame-ignore-revs"}}
+ {{if .UsesIgnoreRevs}}
+
+
{{ctx.Locale.Tr "repo.blame.ignore_revs" $revsFileLink "?bypass-blame-ignore=true"}}
+
+ {{else}}
+
+
{{ctx.Locale.Tr "repo.blame.ignore_revs.failed" $revsFileLink}}
+
+ {{end}}
+{{end}}
+
+
+
+
+ {{if .IsFileTooLarge}}
+ {{template "shared/filetoolarge" dict "RawFileLink" .RawFileLink}}
+ {{else if not .FileSize}}
+ {{template "shared/fileisempty"}}
+ {{else}}
+
+
+ {{range $row := .BlameRows}}
+
+
+
+
+
+ {{$row.Avatar}}
+
+
+
+ {{$row.CommitSince}}
+
+
+
+
+
+ {{if $row.PreviousSha}}
+
+ {{svg "octicon-versions"}}
+
+ {{end}}
+
+
+
+
+ {{if $.EscapeStatus.Escaped}}
+
+ {{if $row.EscapeStatus.Escaped}}
+
+ {{end}}
+
+ {{end}}
+
+ {{$row.Code}}
+
+
+ {{end}}
+
+
+ {{end}}{{/* end if .IsFileTooLarge */}}
+
+
+
+
diff --git a/repo/branch/list.tmpl b/repo/branch/list.tmpl
new file mode 100644
index 0000000..f10b2ef
--- /dev/null
+++ b/repo/branch/list.tmpl
@@ -0,0 +1,260 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+ {{template "base/alert" .}}
+ {{template "repo/sub_menu" .}}
+ {{if .DefaultBranchBranch}}
+
+
+
+
+
+
+
+
+
{{.DefaultBranchBranch.DBBranch.Name}}
+ {{if .DefaultBranchBranch.IsProtected}}
+
{{svg "octicon-shield-lock"}}
+ {{end}}
+
{{svg "octicon-copy" 14}}
+ {{template "repo/commit_statuses" dict "Status" (index $.CommitStatus .DefaultBranchBranch.DBBranch.CommitID) "Statuses" (index $.CommitStatuses .DefaultBranchBranch.DBBranch.CommitID)}}
+
+ {{svg "octicon-git-commit" 16 "tw-mr-1"}}{{ShortSha .DefaultBranchBranch.DBBranch.CommitID}} · {{ctx.RenderUtils.RenderCommitMessage .DefaultBranchBranch.DBBranch.CommitMessage (.Repository.ComposeMetas ctx)}} · {{ctx.Locale.Tr "org.repo_updated"}} {{DateUtils.TimeSince .DefaultBranchBranch.DBBranch.CommitTime}}{{if .DefaultBranchBranch.DBBranch.Pusher}} {{template "shared/user/avatarlink" dict "user" .DefaultBranchBranch.DBBranch.Pusher}}{{template "shared/user/namelink" .DefaultBranchBranch.DBBranch.Pusher}}{{end}}
+
+
+ {{if and $.IsWriter (not $.Repository.IsArchived) (not .IsDeleted)}}
+
+ {{svg "octicon-git-branch"}}
+
+ {{end}}
+ {{if .EnableFeed}}
+ {{svg "octicon-rss"}}
+ {{end}}
+ {{if not $.DisableDownloadSourceArchives}}
+
+ {{svg "octicon-download"}}
+
+
+ {{end}}
+ {{if and $.IsWriter (not $.Repository.IsArchived) (not .IsDeleted) (not $.IsMirror)}}
+
+ {{svg "octicon-pencil"}}
+
+ {{end}}
+
+
+
+
+
+ {{end}}
+
+
+
+
+
+ {{template "shared/search/combo" dict "Value" .Keyword "Placeholder" (ctx.Locale.Tr "search.branch_kind")}}
+
+
+
+
+ {{template "base/paginate" .}}
+
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.branch.delete_desc"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+
+
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "repo.branch.create_new_branch"}}
+
+
+
+ {{ctx.Locale.Tr "repo.branch.name"}}
+
+
+
+ {{template "base/modal_actions_confirm" (dict "ModalButtonTypes" "confirm")}}
+
+
+
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "repo.branch.warning_rename_default_branch"}}
+
+
+
+
+
+
+
+
+
+ {{template "base/modal_actions_confirm" (dict "ModalButtonTypes" "confirm")}}
+
+
+{{template "base/footer" .}}
diff --git a/repo/branch_dropdown.tmpl b/repo/branch_dropdown.tmpl
new file mode 100644
index 0000000..6efed34
--- /dev/null
+++ b/repo/branch_dropdown.tmpl
@@ -0,0 +1,63 @@
+{{/* Attributes:
+* ContainerClasses
+* Repository
+* CurrentRefType: eg. "branch", "tag", "commit"
+* CurrentRefShortName: eg. "master", "v1.0", "abcdef0123"
+* CurrentTreePath
+* RefLinkTemplate: redirect to the link when a branch/tag is selected
+* RefFormActionTemplate: change the parent form's action when a branch/tag is selected
+* DropdownFixedText: the text to show in the dropdown (mainly used by "release page"), if empty, the text will be the branch/tag name
+* ShowTabBranches
+* ShowTabTagsTab
+* AllowCreateNewRef
+* ShowViewAllRefsEntry
+
+Search "repo/branch_dropdown" in the template directory to find all occurrences.
+*/}}
+
+ {{/* show dummy elements before Vue componment is mounted, this code must match the code in BranchTagSelector.vue */}}
+
+
+
+ {{if not .DropdownFixedText}}
+ {{if .ShowTabTags}}
+ {{svg "octicon-tag"}}
+ {{else if .ShowTabBranches}}
+ {{svg "octicon-git-branch"}}
+ {{end}}
+ {{end}}
+ {{Iif .DropdownFixedText .SelectedRefShortName}}
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
diff --git a/repo/cite/cite_buttons.tmpl b/repo/cite/cite_buttons.tmpl
new file mode 100644
index 0000000..426ca38
--- /dev/null
+++ b/repo/cite/cite_buttons.tmpl
@@ -0,0 +1,11 @@
+
+APA
+
+
+BibTeX
+
+
+
+
+ {{svg "octicon-copy"}}
+
diff --git a/repo/cite/cite_modal.tmpl b/repo/cite/cite_modal.tmpl
new file mode 100644
index 0000000..fb25144
--- /dev/null
+++ b/repo/cite/cite_modal.tmpl
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "cancel"}}
+
+
+
diff --git a/repo/clone_buttons.tmpl b/repo/clone_buttons.tmpl
new file mode 100644
index 0000000..03b7a56
--- /dev/null
+++ b/repo/clone_buttons.tmpl
@@ -0,0 +1,13 @@
+
+
+ {{if $.CloneButtonShowHTTPS}}
+ HTTPS
+ {{end}}
+ {{if $.CloneButtonShowSSH}}
+ SSH
+ {{end}}
+
+
+ {{svg "octicon-copy" 14}}
+
+
diff --git a/repo/clone_panel.tmpl b/repo/clone_panel.tmpl
new file mode 100644
index 0000000..1937083
--- /dev/null
+++ b/repo/clone_panel.tmpl
@@ -0,0 +1,45 @@
+
+ {{svg "octicon-code" 16}}
+ Code
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
diff --git a/repo/code/recently_pushed_new_branches.tmpl b/repo/code/recently_pushed_new_branches.tmpl
new file mode 100644
index 0000000..f0edf60
--- /dev/null
+++ b/repo/code/recently_pushed_new_branches.tmpl
@@ -0,0 +1,12 @@
+{{range .RecentlyPushedNewBranches}}
+
+
+ {{$timeSince := DateUtils.TimeSince .CommitTime}}
+ {{$branchLink := HTMLFormat `
%s ` .BranchLink .BranchDisplayName}}
+ {{ctx.Locale.Tr "repo.pulls.recently_pushed_new_branches" $branchLink $timeSince}}
+
+
+ {{ctx.Locale.Tr "repo.pulls.compare_changes"}}
+
+
+{{end}}
diff --git a/repo/code/upstream_diverging_info.tmpl b/repo/code/upstream_diverging_info.tmpl
new file mode 100644
index 0000000..b3d35c0
--- /dev/null
+++ b/repo/code/upstream_diverging_info.tmpl
@@ -0,0 +1,23 @@
+{{if and .UpstreamDivergingInfo .UpstreamDivergingInfo.BaseBranchHasNewCommits}}
+
+
+ {{$upstreamLink := printf "%s/src/branch/%s" .Repository.BaseRepo.Link (.UpstreamDivergingInfo.BaseBranchName|PathEscapeSegments)}}
+ {{$upstreamRepoBranchDisplay := HTMLFormat "%s:%s" .Repository.BaseRepo.FullName .UpstreamDivergingInfo.BaseBranchName}}
+ {{$thisRepoBranchDisplay := HTMLFormat "%s:%s" .Repository.FullName .BranchName}}
+ {{$upstreamHtml := HTMLFormat `
%s ` $upstreamLink $upstreamRepoBranchDisplay}}
+ {{if .UpstreamDivergingInfo.HeadBranchCommitsBehind}}
+ {{ctx.Locale.TrN .UpstreamDivergingInfo.HeadBranchCommitsBehind "repo.pulls.upstream_diverging_prompt_behind_1" "repo.pulls.upstream_diverging_prompt_behind_n" .UpstreamDivergingInfo.HeadBranchCommitsBehind $upstreamHtml}}
+ {{else}}
+ {{ctx.Locale.Tr "repo.pulls.upstream_diverging_prompt_base_newer" $upstreamHtml}}
+ {{end}}
+
+ {{if .CanWriteCode}}
+
+ {{ctx.Locale.Tr "repo.pulls.upstream_diverging_merge"}}
+
+ {{end}}
+
+{{end}}
diff --git a/repo/code_frequency.tmpl b/repo/code_frequency.tmpl
new file mode 100644
index 0000000..79b45d4
--- /dev/null
+++ b/repo/code_frequency.tmpl
@@ -0,0 +1,9 @@
+{{if .Permission.CanRead ctx.Consts.RepoUnitTypeCode}}
+
+
+{{end}}
diff --git a/repo/commit_load_branches_and_tags.tmpl b/repo/commit_load_branches_and_tags.tmpl
new file mode 100644
index 0000000..ffa0e53
--- /dev/null
+++ b/repo/commit_load_branches_and_tags.tmpl
@@ -0,0 +1,20 @@
+{{if not .PageIsWiki}}
+
+
...
+
+
+
{{ctx.Locale.Tr "repo.commit.contained_in"}}
+
+
{{svg "octicon-git-branch"}}
+
+
+
+
{{svg "octicon-tag"}}
+
+
+
+
+{{end}}
diff --git a/repo/commit_page.tmpl b/repo/commit_page.tmpl
new file mode 100644
index 0000000..38e3df8
--- /dev/null
+++ b/repo/commit_page.tmpl
@@ -0,0 +1,288 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+ {{$class := ""}}
+ {{if .Commit.Signature}}
+ {{$class = (print $class " isSigned")}}
+ {{if .Verification.Verified}}
+ {{if eq .Verification.TrustStatus "trusted"}}
+ {{$class = (print $class " isVerified")}}
+ {{else if eq .Verification.TrustStatus "untrusted"}}
+ {{$class = (print $class " isVerifiedUntrusted")}}
+ {{else}}
+ {{$class = (print $class " isVerifiedUnmatched")}}
+ {{end}}
+ {{else if .Verification.Warning}}
+ {{$class = (print $class " isWarning")}}
+ {{end}}
+ {{end}}
+
+
+ {{if .Commit.Signature}}
+
+ {{end}}
+ {{if .NoteRendered}}
+
+
+
{{.NoteRendered | SanitizeHTML}}
+
+ {{end}}
+ {{template "repo/diff/box" .}}
+
+
+{{template "base/footer" .}}
diff --git a/repo/commit_status.tmpl b/repo/commit_status.tmpl
new file mode 100644
index 0000000..eb700ab
--- /dev/null
+++ b/repo/commit_status.tmpl
@@ -0,0 +1,16 @@
+
+{{if eq .State "pending"}}
+ {{svg "octicon-dot-fill" 18 "commit-status icon text yellow"}}
+{{end}}
+{{if eq .State "success"}}
+ {{svg "octicon-check" 18 "commit-status icon text green"}}
+{{end}}
+{{if eq .State "error"}}
+ {{svg "gitea-exclamation" 18 "commit-status icon text red"}}
+{{end}}
+{{if eq .State "failure"}}
+ {{svg "octicon-x" 18 "commit-status icon text red"}}
+{{end}}
+{{if eq .State "warning"}}
+ {{svg "gitea-exclamation" 18 "commit-status icon text yellow"}}
+{{end}}
diff --git a/repo/commit_statuses.tmpl b/repo/commit_statuses.tmpl
new file mode 100644
index 0000000..a6f7558
--- /dev/null
+++ b/repo/commit_statuses.tmpl
@@ -0,0 +1,14 @@
+{{if .Statuses}}
+ {{if and (eq (len .Statuses) 1) .Status.TargetURL}}
+
+ {{template "repo/commit_status" .Status}}
+
+ {{else}}
+
+ {{template "repo/commit_status" .Status}}
+
+ {{end}}
+
+ {{template "repo/pulls/status" (dict "CommitStatuses" .Statuses "CommitStatus" .Status)}}
+
+{{end}}
diff --git a/repo/commits.tmpl b/repo/commits.tmpl
new file mode 100644
index 0000000..d80d4ac
--- /dev/null
+++ b/repo/commits.tmpl
@@ -0,0 +1,39 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+ {{template "repo/sub_menu" .}}
+
+ {{template "repo/commits_table" .}}
+
+
+{{template "base/footer" .}}
diff --git a/repo/commits_list.tmpl b/repo/commits_list.tmpl
new file mode 100644
index 0000000..50b754c
--- /dev/null
+++ b/repo/commits_list.tmpl
@@ -0,0 +1,98 @@
+
+
+
+
+ {{ctx.Locale.Tr "repo.commits.author"}}
+ {{StringUtils.ToUpper $.Repository.ObjectFormatName}}
+ {{ctx.Locale.Tr "repo.commits.message"}}
+ {{ctx.Locale.Tr "repo.commits.date"}}
+
+
+
+
+ {{$commitRepoLink := $.RepoLink}}{{if $.CommitRepoLink}}{{$commitRepoLink = $.CommitRepoLink}}{{end}}
+ {{range .Commits}}
+
+
+
+ {{$userName := .Author.Name}}
+ {{if .User}}
+ {{if and .User.FullName DefaultShowFullName}}
+ {{$userName = .User.FullName}}
+ {{end}}
+ {{ctx.AvatarUtils.Avatar .User 28 "tw-mr-2"}}
{{$userName}}
+ {{else}}
+ {{ctx.AvatarUtils.AvatarByEmail .Author.Email .Author.Name 28 "tw-mr-2"}}
+
{{$userName}}
+ {{end}}
+
+
+
+ {{$class := "ui sha label"}}
+ {{if .Signature}}
+ {{$class = (print $class " isSigned")}}
+ {{if .Verification.Verified}}
+ {{if eq .Verification.TrustStatus "trusted"}}
+ {{$class = (print $class " isVerified")}}
+ {{else if eq .Verification.TrustStatus "untrusted"}}
+ {{$class = (print $class " isVerifiedUntrusted")}}
+ {{else}}
+ {{$class = (print $class " isVerifiedUnmatched")}}
+ {{end}}
+ {{else if .Verification.Warning}}
+ {{$class = (print $class " isWarning")}}
+ {{end}}
+ {{end}}
+ {{$commitShaLink := ""}}
+ {{if $.PageIsWiki}}
+ {{$commitShaLink = (printf "%s/wiki/commit/%s" $commitRepoLink (PathEscape .ID.String))}}
+ {{else if $.PageIsPullCommits}}
+ {{$commitShaLink = (printf "%s/pulls/%d/commits/%s" $commitRepoLink $.Issue.Index (PathEscape .ID.String))}}
+ {{else if $.Reponame}}
+ {{$commitShaLink = (printf "%s/commit/%s" $commitRepoLink (PathEscape .ID.String))}}
+ {{end}}
+
+ {{ShortSha .ID.String}}
+ {{if .Signature}}{{template "repo/shabox_badge" dict "root" $ "verification" .Verification}}{{end}}
+
+
+
+
+ {{if $.PageIsWiki}}
+ {{.Summary | ctx.RenderUtils.RenderEmoji}}
+ {{else}}
+ {{$commitLink:= printf "%s/commit/%s" $commitRepoLink (PathEscape .ID.String)}}
+ {{ctx.RenderUtils.RenderCommitMessageLinkSubject .Message $commitLink ($.Repository.ComposeMetas ctx)}}
+ {{end}}
+
+ {{if IsMultilineCommitMessage .Message}}
+ ...
+ {{end}}
+ {{template "repo/commit_statuses" dict "Status" .Status "Statuses" .Statuses}}
+ {{if IsMultilineCommitMessage .Message}}
+ {{ctx.RenderUtils.RenderCommitBody .Message ($.Repository.ComposeMetas ctx)}}
+ {{end}}
+ {{if $.CommitsTagsMap}}
+ {{range (index $.CommitsTagsMap .ID.String)}}
+ {{- template "repo/tag/name" dict "RepoLink" $.Repository.Link "TagName" .TagName "IsRelease" (not .IsTag) -}}
+ {{end}}
+ {{end}}
+
+ {{if .Committer}}
+ {{DateUtils.TimeSince .Committer.When}}
+ {{else}}
+ {{DateUtils.TimeSince .Author.When}}
+ {{end}}
+
+ {{svg "octicon-copy"}}
+ {{if not $.PageIsWiki}}{{/* at the moment, wiki doesn't support "view at history point*/}}
+ {{$viewCommitLink := printf "%s/src/commit/%s" $commitRepoLink (PathEscape .ID.String)}}
+ {{if $.FileName}}{{$viewCommitLink = printf "%s/%s" $viewCommitLink (PathEscapeSegments $.FileName)}}{{end}}
+ {{svg "octicon-file-code"}}
+ {{end}}
+
+
+ {{end}}
+
+
+
diff --git a/repo/commits_list_small.tmpl b/repo/commits_list_small.tmpl
new file mode 100644
index 0000000..0657eab
--- /dev/null
+++ b/repo/commits_list_small.tmpl
@@ -0,0 +1,55 @@
+{{$index := 0}}
+
+{{range .comment.Commits}}
+ {{$tag := printf "%s-%d" $.comment.HashTag $index}}
+ {{$index = Eval $index "+" 1}}
+
+
{{svg "octicon-git-commit"}}
+ {{if .User}}
+
{{ctx.AvatarUtils.Avatar .User 20}}
+ {{else}}
+ {{ctx.AvatarUtils.AvatarByEmail .Author.Email .Author.Name 20}}
+ {{end}}
+
+ {{$commitLink:= printf "%s/commit/%s" $.comment.Issue.PullRequest.BaseRepo.Link (PathEscape .ID.String)}}
+
+
+ {{- ctx.RenderUtils.RenderCommitMessageLinkSubject .Message $commitLink ($.comment.Issue.PullRequest.BaseRepo.ComposeMetas ctx) -}}
+
+
+ {{if IsMultilineCommitMessage .Message}}
+
...
+ {{end}}
+
+
+ {{template "repo/commit_statuses" dict "Status" .Status "Statuses" .Statuses}}
+ {{$class := "ui sha label"}}
+ {{if .Signature}}
+ {{$class = (print $class " isSigned")}}
+ {{if .Verification.Verified}}
+ {{if eq .Verification.TrustStatus "trusted"}}
+ {{$class = (print $class " isVerified")}}
+ {{else if eq .Verification.TrustStatus "untrusted"}}
+ {{$class = (print $class " isVerifiedUntrusted")}}
+ {{else}}
+ {{$class = (print $class " isVerifiedUnmatched")}}
+ {{end}}
+ {{else if .Verification.Warning}}
+ {{$class = (print $class " isWarning")}}
+ {{end}}
+ {{end}}
+
+ {{ShortSha .ID.String}}
+ {{if .Signature}}
+ {{template "repo/shabox_badge" dict "root" $.root "verification" .Verification}}
+ {{end}}
+
+
+
+ {{if IsMultilineCommitMessage .Message}}
+
+ {{- ctx.RenderUtils.RenderCommitBody .Message ($.comment.Issue.PullRequest.BaseRepo.ComposeMetas ctx) -}}
+
+ {{end}}
+{{end}}
+
diff --git a/repo/commits_search_dropdown.tmpl b/repo/commits_search_dropdown.tmpl
new file mode 100644
index 0000000..5aa3f4f
--- /dev/null
+++ b/repo/commits_search_dropdown.tmpl
@@ -0,0 +1,8 @@
+
+
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
{{if .All}}{{ctx.Locale.Tr "repo.commits.search_all"}}{{else}}{{ctx.Locale.Tr "repo.commits.search_branch"}}{{end}}
+
+
diff --git a/repo/commits_table.tmpl b/repo/commits_table.tmpl
new file mode 100644
index 0000000..91fc1c2
--- /dev/null
+++ b/repo/commits_table.tmpl
@@ -0,0 +1,36 @@
+
+
+{{if .PageIsCommits}}
+
+
+
+ {{template "shared/search/input" dict "Value" .Keyword "Placeholder" (ctx.Locale.Tr "search.commit_kind")}}
+ {{template "repo/commits_search_dropdown" .}}
+ {{template "shared/search/button" dict "Tooltip" (ctx.Locale.Tr "repo.commits.search.tooltip")}}
+
+
+
+{{end}}
+
+{{if and .Commits (gt .CommitCount 0)}}
+ {{template "repo/commits_list" .}}
+{{end}}
+
+{{template "base/paginate" .}}
diff --git a/repo/contributors.tmpl b/repo/contributors.tmpl
new file mode 100644
index 0000000..882d8b2
--- /dev/null
+++ b/repo/contributors.tmpl
@@ -0,0 +1,15 @@
+{{if .Permission.CanRead ctx.Consts.RepoUnitTypeCode}}
+
+
+{{end}}
diff --git a/repo/create.tmpl b/repo/create.tmpl
new file mode 100644
index 0000000..07d581b
--- /dev/null
+++ b/repo/create.tmpl
@@ -0,0 +1,220 @@
+{{template "base/head" .}}
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+ {{template "base/alert" .}}
+ {{template "repo/create_helper" .}}
+
+
+
{{ctx.Locale.Tr "repo.owner"}}
+
+
+
+ {{ctx.AvatarUtils.Avatar .ContextUser 28 "mini"}}
+ {{.ContextUser.ShortName 40}}
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
{{ctx.Locale.Tr "repo.owner_helper"}}
+
+
+
+ {{ctx.Locale.Tr "repo.repo_name"}}
+
+ {{ctx.Locale.Tr "repo.repo_name_helper"}}
+
+
+
+ {{ctx.Locale.Tr "repo.repo_desc"}}
+ {{.description}}
+
+
+
{{ctx.Locale.Tr "repo.template"}}
+
+
+
{{.repo_template_name}}
+
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.template.items"}}
+
+
+ {{ctx.Locale.Tr "repo.template.git_content"}}
+
+
+
+ {{ctx.Locale.Tr "repo.template.git_hooks"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.template.webhooks"}}
+
+
+
+ {{ctx.Locale.Tr "repo.template.topics"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.template.avatar"}}
+
+
+
+ {{ctx.Locale.Tr "repo.template.issue_labels"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.protected_branch"}}
+
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.issue_labels"}}
+
+
+
{{ctx.Locale.Tr "repo.issue_labels_helper"}}
+
+
+
+
+
+
+
+
.gitignore
+
+
+
{{ctx.Locale.Tr "repo.repo_gitignore_helper"}}
+
+
+
{{ctx.Locale.Tr "repo.repo_gitignore_helper_desc"}}
+
+
+
{{ctx.Locale.Tr "repo.license"}}
+
+
+
{{ctx.Locale.Tr "repo.license_helper"}}
+
+
+
{{ctx.Locale.Tr "repo.license_helper_desc" "https://choosealicense.com/"}}
+
+
+
+
{{ctx.Locale.Tr "repo.readme"}}
+
+
+
{{ctx.Locale.Tr "repo.readme_helper"}}
+
+
+
{{ctx.Locale.Tr "repo.readme_helper_desc"}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.auto_init"}}
+
+
+
+ {{ctx.Locale.Tr "repo.default_branch"}}
+
+ {{ctx.Locale.Tr "repo.default_branch_helper"}}
+
+
+
{{ctx.Locale.Tr "repo.object_format"}}
+
+
+
{{.DefaultObjectFormat.Name}}
+
+
+
{{ctx.Locale.Tr "repo.object_format_helper"}}
+
+
+
{{ctx.Locale.Tr "repo.template"}}
+
+
+ {{ctx.Locale.Tr "repo.template_helper"}}
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.create_repo"}}
+
+
+
+
+
+
+
+{{template "base/footer" .}}
diff --git a/repo/create_helper.tmpl b/repo/create_helper.tmpl
new file mode 100644
index 0000000..70c28b7
--- /dev/null
+++ b/repo/create_helper.tmpl
@@ -0,0 +1,3 @@
+{{if not $.DisableMigrations}}
+ {{ctx.Locale.Tr "repo.new_repo_helper" (print AppSubUrl "/repo/migrate")}}
+{{end}}
diff --git a/repo/diff/blob_excerpt.tmpl b/repo/diff/blob_excerpt.tmpl
new file mode 100644
index 0000000..cc22370
--- /dev/null
+++ b/repo/diff/blob_excerpt.tmpl
@@ -0,0 +1,82 @@
+{{if $.IsSplitStyle}}
+ {{range $k, $line := $.section.Lines}}
+
+ {{if eq .GetType 4}}
+ {{$expandDirection := $line.GetExpandDirection}}
+
+
+ {{if or (eq $expandDirection 3) (eq $expandDirection 5)}}
+
+ {{svg "octicon-fold-down"}}
+
+ {{end}}
+ {{if or (eq $expandDirection 3) (eq $expandDirection 4)}}
+
+ {{svg "octicon-fold-up"}}
+
+ {{end}}
+ {{if eq $expandDirection 2}}
+
+ {{svg "octicon-fold"}}
+
+ {{end}}
+
+
+ {{$inlineDiff := $.section.GetComputedInlineDiffFor $line ctx.Locale}}{{/*
+ */}}{{template "repo/diff/section_code" dict "diff" $inlineDiff}}
+ {{else}}
+ {{$inlineDiff := $.section.GetComputedInlineDiffFor $line ctx.Locale}}
+
+ {{if and $line.LeftIdx $inlineDiff.EscapeStatus.Escaped}} {{end}}
+ {{if $line.LeftIdx}} {{end}}
+ {{/*
+ */}}{{if $line.LeftIdx}}{{template "repo/diff/section_code" dict "diff" $inlineDiff}}{{else}}{{/*
+ */}}
{{/*
+ */}}{{end}}{{/*
+ */}}
+
+ {{if and $line.RightIdx $inlineDiff.EscapeStatus.Escaped}} {{end}}
+ {{if $line.RightIdx}} {{end}}
+ {{/*
+ */}}{{if $line.RightIdx}}{{template "repo/diff/section_code" dict "diff" $inlineDiff}}{{else}}{{/*
+ */}}
{{/*
+ */}}{{end}}{{/*
+ */}}
+ {{end}}
+
+ {{end}}
+{{else}}
+ {{range $k, $line := $.section.Lines}}
+
+ {{if eq .GetType 4}}
+ {{$expandDirection := $line.GetExpandDirection}}
+
+
+ {{if or (eq $expandDirection 3) (eq $expandDirection 5)}}
+
+ {{svg "octicon-fold-down"}}
+
+ {{end}}
+ {{if or (eq $expandDirection 3) (eq $expandDirection 4)}}
+
+ {{svg "octicon-fold-up"}}
+
+ {{end}}
+ {{if eq $expandDirection 2}}
+
+ {{svg "octicon-fold"}}
+
+ {{end}}
+
+
+ {{else}}
+
+
+ {{end}}
+ {{$inlineDiff := $.section.GetComputedInlineDiffFor $line ctx.Locale}}
+ {{if $inlineDiff.EscapeStatus.Escaped}} {{end}}
+
+ {{$inlineDiff.Content}}
+
+ {{end}}
+{{end}}
diff --git a/repo/diff/box.tmpl b/repo/diff/box.tmpl
new file mode 100644
index 0000000..53ea4fd
--- /dev/null
+++ b/repo/diff/box.tmpl
@@ -0,0 +1,265 @@
+{{$showFileTree := (and (not .DiffNotAvailable) (gt .Diff.NumFiles 1))}}
+
+
+
+ {{if $showFileTree}}
+
+ {{/* the icon meaning is reversed here, "octicon-sidebar-collapse" means show the file tree */}}
+ {{svg "octicon-sidebar-collapse" 20 "icon tw-hidden"}}
+ {{svg "octicon-sidebar-expand" 20 "icon tw-hidden"}}
+
+
+ {{end}}
+ {{if not .DiffNotAvailable}}
+
+ {{svg "octicon-diff" 16 "tw-mr-1"}}{{ctx.Locale.Tr "repo.diff.stats_desc" .Diff.NumFiles .Diff.TotalAddition .Diff.TotalDeletion}}
+
+ {{end}}
+
+
+ {{if and .PageIsPullFiles $.SignedUserID (not .IsArchived) (not .DiffNotAvailable)}}
+
+
+ {{ctx.Locale.Tr "repo.pulls.viewed_files_label" .Diff.NumViewedFiles .Diff.NumFiles}}
+
+
+
+ {{end}}
+ {{template "repo/diff/whitespace_dropdown" .}}
+ {{template "repo/diff/options_dropdown" .}}
+ {{if .PageIsPullFiles}}
+
+ {{/*
+ the following will be replaced by vue component
+ but this avoids any loading artifacts till the vue component is initialized
+ */}}
+
+ {{svg "octicon-git-commit"}}
+
+
+ {{end}}
+ {{if and .PageIsPullFiles $.SignedUserID (not .IsArchived)}}
+ {{template "repo/diff/new_review" .}}
+ {{end}}
+
+
+ {{if not .DiffNotAvailable}}
+ {{if and .IsShowingOnlySingleCommit .PageIsPullFiles}}
+
+ {{else if and (not .IsShowingAllCommits) .PageIsPullFiles}}
+
+ {{end}}
+
+
+ {{end}}
+
+ {{if $showFileTree}}
+
+
+ {{end}}
+ {{if .DiffNotAvailable}}
+
{{ctx.Locale.Tr "repo.diff.data_not_available"}}
+ {{else}}
+
+ {{range $i, $file := .Diff.Files}}
+ {{/*notice: the index of Diff.Files should not be used for element ID, because the index will be restarted from 0 when doing load-more for PRs with a lot of files*/}}
+ {{$blobBase := call $.GetBlobByPathForCommit $.BeforeCommit $file.OldName}}
+ {{$blobHead := call $.GetBlobByPathForCommit $.HeadCommit $file.Name}}
+ {{$sniffedTypeBase := call $.GetSniffedTypeForBlob $blobBase}}
+ {{$sniffedTypeHead := call $.GetSniffedTypeForBlob $blobHead}}
+ {{$isImage:= or (call $.IsSniffedTypeAnImage $sniffedTypeBase) (call $.IsSniffedTypeAnImage $sniffedTypeHead)}}
+ {{$isCsv := (call $.IsCsvFile $file)}}
+ {{$showFileViewToggle := or $isImage (and (not $file.IsIncomplete) $isCsv)}}
+ {{$isExpandable := or (gt $file.Addition 0) (gt $file.Deletion 0) $file.IsBin}}
+ {{$isReviewFile := and $.IsSigned $.PageIsPullFiles (not $.IsArchived) $.IsShowingAllCommits}}
+
+
+
+
+ {{if or $file.IsIncomplete $file.IsBin}}
+
+ {{if $file.IsIncomplete}}
+ {{if $file.IsIncompleteLineTooLong}}
+ {{ctx.Locale.Tr "repo.diff.file_suppressed_line_too_long"}}
+ {{else}}
+ {{ctx.Locale.Tr "repo.diff.file_suppressed"}}
+
{{ctx.Locale.Tr "repo.diff.load"}}
+ {{end}}
+ {{else}}
+ {{ctx.Locale.Tr "repo.diff.bin_not_shown"}}
+ {{end}}
+
+ {{else}}
+
+ {{if $.IsSplitStyle}}
+ {{template "repo/diff/section_split" dict "file" . "root" $}}
+ {{else}}
+ {{template "repo/diff/section_unified" dict "file" . "root" $}}
+ {{end}}
+
+ {{end}}
+
+ {{if $showFileViewToggle}}
+ {{/* for image or CSV, it can have a horizontal scroll bar, there won't be review comment context menu (position absolute) which would be clipped by "overflow" */}}
+
+
+ {{if $isImage}}
+ {{template "repo/diff/image_diff" dict "file" . "root" $ "blobBase" $blobBase "blobHead" $blobHead "sniffedTypeBase" $sniffedTypeBase "sniffedTypeHead" $sniffedTypeHead}}
+ {{else}}
+ {{template "repo/diff/csv_diff" dict "file" . "root" $ "blobBase" $blobBase "blobHead" $blobHead "sniffedTypeBase" $sniffedTypeBase "sniffedTypeHead" $sniffedTypeHead}}
+ {{end}}
+
+
+ {{end}}
+
+
+ {{end}}
+
+ {{if .Diff.IsIncomplete}}
+
+
+
+ {{end}}
+
+ {{end}}
+
+
+ {{if and (not $.Repository.IsArchived) (not .DiffNotAvailable)}}
+
+ {{end}}
+ {{if (not .DiffNotAvailable)}}
+ {{template "repo/issue/view_content/reference_issue_dialog" .}}
+ {{template "shared/user/block_user_dialog" .}}
+ {{end}}
+
diff --git a/repo/diff/comment_form.tmpl b/repo/diff/comment_form.tmpl
new file mode 100644
index 0000000..964dc2a
--- /dev/null
+++ b/repo/diff/comment_form.tmpl
@@ -0,0 +1,49 @@
+{{if and $.root.SignedUserID (not $.Repository.IsArchived)}}
+
+{{end}}
diff --git a/repo/diff/comment_form_datahandler.tmpl b/repo/diff/comment_form_datahandler.tmpl
new file mode 100644
index 0000000..d0e4934
--- /dev/null
+++ b/repo/diff/comment_form_datahandler.tmpl
@@ -0,0 +1,7 @@
+{{if $.comment}}
+ {{template "repo/diff/comment_form" dict "root" $.root "hidden" $.hidden "reply" $.reply "Line" $.comment.UnsignedLine "File" $.comment.TreePath "Side" $.comment.DiffSide "HasComments" true}}
+{{else if $.root}}
+ {{template "repo/diff/comment_form" $}}
+{{else}}
+ {{template "repo/diff/comment_form" dict "root" $}}
+{{end}}
diff --git a/repo/diff/comments.tmpl b/repo/diff/comments.tmpl
new file mode 100644
index 0000000..2d71668
--- /dev/null
+++ b/repo/diff/comments.tmpl
@@ -0,0 +1,75 @@
+{{range .comments}}
+
+{{$createdStr:= DateUtils.TimeSince .CreatedUnix}}
+
+{{end}}
diff --git a/repo/diff/compare.tmpl b/repo/diff/compare.tmpl
new file mode 100644
index 0000000..118d647
--- /dev/null
+++ b/repo/diff/compare.tmpl
@@ -0,0 +1,230 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+ {{$showDiffBox := false}}
+
+
+ {{$BaseCompareName := $.BaseName -}}
+ {{- $HeadCompareName := $.HeadRepo.OwnerName -}}
+ {{- if and (eq $.BaseName $.HeadRepo.OwnerName) (ne $.Repository.Name $.HeadRepo.Name) -}}
+ {{- $HeadCompareName = printf "%s/%s" $.HeadRepo.OwnerName $.HeadRepo.Name -}}
+ {{- end -}}
+ {{- $OwnForkCompareName := "" -}}
+ {{- if .OwnForkRepo -}}
+ {{- $OwnForkCompareName = .OwnForkRepo.OwnerName -}}
+ {{- end -}}
+ {{- $RootRepoCompareName := "" -}}
+ {{- if .RootRepo -}}
+ {{- $RootRepoCompareName = .RootRepo.OwnerName -}}
+ {{- if eq $.HeadRepo.OwnerName .RootRepo.OwnerName -}}
+ {{- $HeadCompareName = printf "%s/%s" $.HeadRepo.OwnerName $.HeadRepo.Name -}}
+ {{- end -}}
+ {{- end -}}
+
+
{{svg "octicon-git-compare"}}
+
+
+ {{if $.PageIsComparePull}}{{ctx.Locale.Tr "repo.pulls.compare_base"}}{{else}}{{ctx.Locale.Tr "repo.compare.compare_base"}}{{end}}: {{$BaseCompareName}}:{{$.BaseBranch}}
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
{{svg "octicon-arrow-left" 16}}{{.CompareSeparator}}
+
+
+ {{if $.PageIsComparePull}}{{ctx.Locale.Tr "repo.pulls.compare_compare"}}{{else}}{{ctx.Locale.Tr "repo.compare.compare_head"}}{{end}}: {{$HeadCompareName}}:{{$.HeadBranch}}
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+
+ {{if .IsNothingToCompare}}
+ {{if and $.IsSigned $.AllowEmptyPr (not .Repository.IsArchived) .PageIsComparePull}}
+
{{ctx.Locale.Tr "repo.pulls.nothing_to_compare_and_allow_empty_pr"}}
+
+ {{ctx.Locale.Tr "repo.pulls.new"}}
+
+
+ {{template "repo/issue/new_form" .}}
+
+ {{else if and .HeadIsBranch .BaseIsBranch}}
+
{{ctx.Locale.Tr "repo.pulls.nothing_to_compare"}}
+ {{else}}
+
{{ctx.Locale.Tr "repo.pulls.nothing_to_compare_have_tag"}}
+ {{end}}
+ {{else if and .PageIsComparePull (gt .CommitCount 0)}}
+ {{if .HasPullRequest}}
+
+ {{template "shared/issueicon" .}}
+
+ {{ctx.RenderUtils.RenderIssueTitle .PullRequest.Issue.Title ($.Repository.ComposeMetas ctx)}}
+ #{{.PullRequest.Issue.Index}}
+
+
+ {{ctx.Locale.Tr "repo.pulls.view"}}
+
+
+ {{else}}
+ {{if and $.IsSigned (not .Repository.IsArchived)}}
+
+ {{ctx.Locale.Tr "repo.pulls.new"}}
+
+ {{else if .Repository.IsArchived}}
+
+ {{if .Repository.ArchivedUnix.IsZero}}
+ {{ctx.Locale.Tr "repo.archive.title"}}
+ {{else}}
+ {{ctx.Locale.Tr "repo.archive.title_date" (DateUtils.AbsoluteLong .Repository.ArchivedUnix)}}
+ {{end}}
+
+ {{end}}
+ {{if $.IsSigned}}
+
+ {{template "repo/issue/new_form" .}}
+
+ {{end}}
+ {{$showDiffBox = true}}
+ {{end}}
+ {{else if not .IsNothingToCompare}}
+ {{$showDiffBox = true}}
+ {{end}}
+
+
+ {{if $showDiffBox}}
+
+ {{template "repo/commits_table" .}}
+ {{template "repo/diff/box" .}}
+
+ {{end}}
+
+{{template "base/footer" .}}
diff --git a/repo/diff/conversation.tmpl b/repo/diff/conversation.tmpl
new file mode 100644
index 0000000..08f6064
--- /dev/null
+++ b/repo/diff/conversation.tmpl
@@ -0,0 +1,72 @@
+{{if len .comments}}
+ {{$comment := index .comments 0}}
+ {{$resolved := $comment.IsResolved}}
+ {{$invalid := $comment.Invalidated}}
+ {{$resolveDoer := $comment.ResolveDoer}}
+ {{$hasReview := and $comment.Review}}
+ {{$isReviewPending := and $hasReview (eq $comment.Review.Type 0)}}
+ {{$referenceUrl := printf "%s#%s" $.Issue.Link $comment.HashTag}}
+
+ {{if $resolved}}
+
+ {{end}}
+
+
+{{else}}
+ {{template "repo/diff/conversation_outdated"}}
+{{end}}
diff --git a/repo/diff/conversation_outdated.tmpl b/repo/diff/conversation_outdated.tmpl
new file mode 100644
index 0000000..c6a4bf1
--- /dev/null
+++ b/repo/diff/conversation_outdated.tmpl
@@ -0,0 +1,3 @@
+
+ {{ctx.Locale.Tr "repo.issues.review.outdated_description"}}
+
diff --git a/repo/diff/csv_diff.tmpl b/repo/diff/csv_diff.tmpl
new file mode 100644
index 0000000..0f46da3
--- /dev/null
+++ b/repo/diff/csv_diff.tmpl
@@ -0,0 +1,58 @@
+
+
+ {{$result := call .root.CreateCsvDiff .file .blobBase .blobHead}}
+ {{if $result.Error}}
+ {{$result.Error}}
+ {{else if $result.Sections}}
+
+ {{range $i, $section := $result.Sections}}
+
+ {{range $j, $row := $section.Rows}}
+
+ {{if and (eq $i 0) (eq $j 0)}}
+ {{.RowIdx}}
+ {{range $j, $cell := $row.Cells}}
+ {{if not $cell}}
+
+ {{else if eq $cell.Type 2}}
+ {{.LeftCell}} {{.RightCell}}
+ {{else if eq $cell.Type 3}}
+ {{.RightCell}}
+ {{else if eq $cell.Type 4}}
+ {{.LeftCell}}
+ {{else if eq $cell.Type 5}}
+ {{.RightCell}}
+ {{else if eq $cell.Type 6}}
+ {{.LeftCell}} {{.RightCell}}
+ {{else}}
+ {{.RightCell}}
+ {{end}}
+ {{end}}
+ {{else}}
+ {{if .RowIdx}}{{.RowIdx}}{{end}}
+ {{range $j, $cell := $row.Cells}}
+ {{if not $cell}}
+
+ {{else if eq $cell.Type 2}}
+ {{.LeftCell}} {{.RightCell}}
+ {{else if eq $cell.Type 3}}
+ {{.RightCell}}
+ {{else if eq $cell.Type 4}}
+ {{.LeftCell}}
+ {{else if eq $cell.Type 5}}
+ {{.RightCell}}
+ {{else if eq $cell.Type 6}}
+ {{.LeftCell}} {{.RightCell}}
+ {{else}}
+ {{.RightCell}}
+ {{end}}
+ {{end}}
+ {{end}}
+
+ {{end}}
+
+ {{end}}
+
+ {{end}}
+
+
diff --git a/repo/diff/escape_title.tmpl b/repo/diff/escape_title.tmpl
new file mode 100644
index 0000000..e70f402
--- /dev/null
+++ b/repo/diff/escape_title.tmpl
@@ -0,0 +1,2 @@
+{{if .diff.EscapeStatus.HasInvisible}}{{ctx.Locale.Tr "repo.invisible_runes_line"}} {{end}}{{/*
+*/}}{{if .diff.EscapeStatus.HasAmbiguous}}{{ctx.Locale.Tr "repo.ambiguous_runes_line"}}{{end}}
diff --git a/repo/diff/image_diff.tmpl b/repo/diff/image_diff.tmpl
new file mode 100644
index 0000000..608174e
--- /dev/null
+++ b/repo/diff/image_diff.tmpl
@@ -0,0 +1,83 @@
+{{if or .blobBase .blobHead}}
+
+
+
+
+
+
+
+ {{if .blobBase}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.diff.file_image_width"}}:
+ |
+ {{ctx.Locale.Tr "repo.diff.file_image_height"}}:
+ |
+
+ {{ctx.Locale.Tr "repo.diff.file_byte_size"}}: {{FileSize .blobBase.Size}}
+
+
+ {{end}}
+ {{if .blobHead}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.diff.file_image_width"}}:
+ |
+ {{ctx.Locale.Tr "repo.diff.file_image_height"}}:
+ |
+
+ {{ctx.Locale.Tr "repo.diff.file_byte_size"}}: {{FileSize .blobHead.Size}}
+
+
+ {{end}}
+
+
+ {{if and .blobBase .blobHead}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{end}}
+
+
+
+
+{{end}}
diff --git a/repo/diff/new_comment.tmpl b/repo/diff/new_comment.tmpl
new file mode 100644
index 0000000..6a71539
--- /dev/null
+++ b/repo/diff/new_comment.tmpl
@@ -0,0 +1,5 @@
+
+
+
diff --git a/repo/diff/new_review.tmpl b/repo/diff/new_review.tmpl
new file mode 100644
index 0000000..2febc63
--- /dev/null
+++ b/repo/diff/new_review.tmpl
@@ -0,0 +1,56 @@
+
+
+ {{ctx.Locale.Tr "repo.diff.review"}}
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+ {{if $.IsShowingAllCommits}}
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+
+ {{template "shared/combomarkdowneditor" (dict
+ "MarkdownPreviewInRepo" $.Repository
+ "MarkdownPreviewMode" "comment"
+ "TextareaName" "content"
+ "TextareaPlaceholder" (ctx.Locale.Tr "repo.diff.review.placeholder")
+ "DropzoneParentContainer" "form"
+ )}}
+
+ {{if .IsAttachmentEnabled}}
+
+ {{template "repo/upload" .}}
+
+ {{end}}
+
+ {{$showSelfTooltip := (and $.IsSigned ($.Issue.IsPoster $.SignedUser.ID))}}
+ {{if not $.Issue.IsClosed}}
+ {{if $showSelfTooltip}}
+
+ {{ctx.Locale.Tr "repo.diff.review.approve"}}
+
+ {{else}}
+ {{ctx.Locale.Tr "repo.diff.review.approve"}}
+ {{end}}
+ {{end}}
+ {{ctx.Locale.Tr "repo.diff.review.comment"}}
+ {{if not $.Issue.IsClosed}}
+ {{if $showSelfTooltip}}
+
+ {{ctx.Locale.Tr "repo.diff.review.reject"}}
+
+ {{else}}
+ {{ctx.Locale.Tr "repo.diff.review.reject"}}
+ {{end}}
+ {{end}}
+
+
+
+ {{end}}
+
diff --git a/repo/diff/options_dropdown.tmpl b/repo/diff/options_dropdown.tmpl
new file mode 100644
index 0000000..09b7b80
--- /dev/null
+++ b/repo/diff/options_dropdown.tmpl
@@ -0,0 +1,33 @@
+
+ {{svg "octicon-kebab-horizontal"}}
+
+
diff --git a/repo/diff/section_code.tmpl b/repo/diff/section_code.tmpl
new file mode 100644
index 0000000..3e8303e
--- /dev/null
+++ b/repo/diff/section_code.tmpl
@@ -0,0 +1 @@
+{{.diff.Content}}
diff --git a/repo/diff/section_split.tmpl b/repo/diff/section_split.tmpl
new file mode 100644
index 0000000..37b42bc
--- /dev/null
+++ b/repo/diff/section_split.tmpl
@@ -0,0 +1,157 @@
+{{$file := .file}}
+{{$blobExcerptRepoLink := or ctx.RootData.CommitRepoLink ctx.RootData.RepoLink}}
+
+
+
+
+
+
+
+
+
+
+{{range $j, $section := $file.Sections}}
+ {{range $k, $line := $section.Lines}}
+ {{$hasmatch := ne $line.Match -1}}
+ {{if or (ne .GetType 2) (not $hasmatch)}}
+
+ {{if eq .GetType 4}}
+ {{$expandDirection := $line.GetExpandDirection}}
+
+
+ {{if or (eq $expandDirection 3) (eq $expandDirection 5)}}
+
+ {{svg "octicon-fold-down"}}
+
+ {{end}}
+ {{if or (eq $expandDirection 3) (eq $expandDirection 4)}}
+
+ {{svg "octicon-fold-up"}}
+
+ {{end}}
+ {{if eq $expandDirection 2}}
+
+ {{svg "octicon-fold"}}
+
+ {{end}}
+
+ {{$inlineDiff := $section.GetComputedInlineDiffFor $line ctx.Locale}}
+ {{if $inlineDiff.EscapeStatus.Escaped}} {{end}}
+ {{/*
+ */}}{{template "repo/diff/section_code" dict "diff" $inlineDiff}}{{/*
+ */}}
+ {{else if and (eq .GetType 3) $hasmatch}}{{/* DEL */}}
+ {{$match := index $section.Lines $line.Match}}
+ {{- $leftDiff := ""}}{{if $line.LeftIdx}}{{$leftDiff = $section.GetComputedInlineDiffFor $line ctx.Locale}}{{end}}
+ {{- $rightDiff := ""}}{{if $match.RightIdx}}{{$rightDiff = $section.GetComputedInlineDiffFor $match ctx.Locale}}{{end}}
+
+ {{if $line.LeftIdx}}{{if $leftDiff.EscapeStatus.Escaped}} {{end}}{{end}}
+
+ {{/*
+ */}}{{if and $.root.SignedUserID $.root.PageIsPullFiles}}{{/*
+ */}}{{/*
+ */}}{{end}}{{/*
+ */}}{{if $line.LeftIdx}}{{/*
+ */}}{{template "repo/diff/section_code" dict "diff" $leftDiff}}{{/*
+ */}}{{else}}{{/*
+ */}}
{{/*
+ */}}{{end}}{{/*
+ */}}
+
+ {{if $match.RightIdx}}{{if $rightDiff.EscapeStatus.Escaped}} {{end}}{{end}}
+ {{if $match.RightIdx}} {{end}}
+ {{/*
+ */}}{{if and $.root.SignedUserID $.root.PageIsPullFiles}}{{/*
+ */}}{{/*
+ */}}{{end}}{{/*
+ */}}{{if $match.RightIdx}}{{/*
+ */}}{{template "repo/diff/section_code" dict "diff" $rightDiff}}{{/*
+ */}}{{else}}{{/*
+ */}}
{{/*
+ */}}{{end}}{{/*
+ */}}
+ {{else}}
+ {{$inlineDiff := $section.GetComputedInlineDiffFor $line ctx.Locale}}
+
+ {{if $line.LeftIdx}}{{if $inlineDiff.EscapeStatus.Escaped}} {{end}}{{end}}
+ {{if $line.LeftIdx}} {{end}}
+ {{/*
+ */}}{{if and $.root.SignedUserID $.root.PageIsPullFiles (not (eq .GetType 2))}}{{/*
+ */}}{{/*
+ */}}{{end}}{{/*
+ */}}{{if $line.LeftIdx}}{{/*
+ */}}{{template "repo/diff/section_code" dict "diff" $inlineDiff}}{{/*
+ */}}{{else}}{{/*
+ */}}
{{/*
+ */}}{{end}}{{/*
+ */}}
+
+ {{if $line.RightIdx}}{{if $inlineDiff.EscapeStatus.Escaped}} {{end}}{{end}}
+ {{if $line.RightIdx}} {{end}}
+ {{/*
+ */}}{{if and $.root.SignedUserID $.root.PageIsPullFiles (not (eq .GetType 3))}}{{/*
+ */}}{{/*
+ */}}{{end}}{{/*
+ */}}{{if $line.RightIdx}}{{/*
+ */}}{{template "repo/diff/section_code" dict "diff" $inlineDiff}}{{/*
+ */}}{{else}}{{/*
+ */}}
{{/*
+ */}}{{end}}{{/*
+ */}}
+ {{end}}
+
+ {{if and (eq .GetType 3) $hasmatch}}
+ {{$match := index $section.Lines $line.Match}}
+ {{if or $line.Comments $match.Comments}}
+
+ {{end}}
+ {{else if $line.Comments}}
+
+ {{end}}
+ {{end}}
+ {{end}}
+{{end}}
diff --git a/repo/diff/section_unified.tmpl b/repo/diff/section_unified.tmpl
new file mode 100644
index 0000000..708b333
--- /dev/null
+++ b/repo/diff/section_unified.tmpl
@@ -0,0 +1,73 @@
+{{$file := .file}}
+{{$blobExcerptRepoLink := or ctx.RootData.CommitRepoLink ctx.RootData.RepoLink}}
+
+
+
+
+
+
+
+{{range $j, $section := $file.Sections}}
+ {{range $k, $line := $section.Lines}}
+
+ {{if eq .GetType 4}}
+ {{if $.root.AfterCommitID}}
+ {{$expandDirection := $line.GetExpandDirection}}
+
+
+ {{if or (eq $expandDirection 3) (eq $expandDirection 5)}}
+
+ {{svg "octicon-fold-down"}}
+
+ {{end}}
+ {{if or (eq $expandDirection 3) (eq $expandDirection 4)}}
+
+ {{svg "octicon-fold-up"}}
+
+ {{end}}
+ {{if eq $expandDirection 2}}
+
+ {{svg "octicon-fold"}}
+
+ {{end}}
+
+
+ {{else}}
+ {{/* for code file preview page or comment diffs on pull comment pages, do not show the expansion arrows */}}
+
+ {{end}}
+ {{else}}
+
+
+ {{end}}
+ {{$inlineDiff := $section.GetComputedInlineDiffFor $line ctx.Locale -}}
+
+ {{- if $inlineDiff.EscapeStatus.Escaped -}}
+
+ {{- end -}}
+
+
+ {{if eq .GetType 4}}
+ {{/*
+ */}}{{template "repo/diff/section_code" dict "diff" $inlineDiff}}{{/*
+ */}}
+ {{else}}
+ {{/*
+ */}}{{if and $.root.SignedUserID $.root.PageIsPullFiles}}{{/*
+ */}}{{/*
+ */}}{{end}}{{/*
+ */}}{{template "repo/diff/section_code" dict "diff" $inlineDiff}}{{/*
+ */}}
+ {{end}}
+
+ {{if $line.Comments}}
+
+ {{end}}
+ {{end}}
+{{end}}
diff --git a/repo/diff/stats.tmpl b/repo/diff/stats.tmpl
new file mode 100644
index 0000000..d0dff1b
--- /dev/null
+++ b/repo/diff/stats.tmpl
@@ -0,0 +1,5 @@
+{{Eval .file.Addition "+" .file.Deletion}}
+
+ {{/* if the denominator is zero, then the float result is "width: NaNpx", as before, it just works */}}
+
+
diff --git a/repo/diff/whitespace_dropdown.tmpl b/repo/diff/whitespace_dropdown.tmpl
new file mode 100644
index 0000000..cf69579
--- /dev/null
+++ b/repo/diff/whitespace_dropdown.tmpl
@@ -0,0 +1,30 @@
+
+ {{svg "gitea-whitespace"}}
+
+
+{{svg (Iif .IsSplitStyle "gitea-join" "gitea-split")}}
diff --git a/repo/editor/cherry_pick.tmpl b/repo/editor/cherry_pick.tmpl
new file mode 100644
index 0000000..f9c9eef
--- /dev/null
+++ b/repo/editor/cherry_pick.tmpl
@@ -0,0 +1,30 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+ {{template "base/alert" .}}
+
+ {{.CsrfTokenHtml}}
+
+
+
+
+ {{template "repo/editor/commit_form" .}}
+
+
+
+{{template "base/footer" .}}
diff --git a/repo/editor/commit_form.tmpl b/repo/editor/commit_form.tmpl
new file mode 100644
index 0000000..c050324
--- /dev/null
+++ b/repo/editor/commit_form.tmpl
@@ -0,0 +1,74 @@
+
diff --git a/repo/editor/delete.tmpl b/repo/editor/delete.tmpl
new file mode 100644
index 0000000..2c0c2fc
--- /dev/null
+++ b/repo/editor/delete.tmpl
@@ -0,0 +1,13 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+ {{template "base/alert" .}}
+
+ {{.CsrfTokenHtml}}
+
+ {{template "repo/editor/commit_form" .}}
+
+
+
+{{template "base/footer" .}}
diff --git a/repo/editor/diff_preview.tmpl b/repo/editor/diff_preview.tmpl
new file mode 100644
index 0000000..fd543a5
--- /dev/null
+++ b/repo/editor/diff_preview.tmpl
@@ -0,0 +1,17 @@
+{{if .File}}
+
+
+
+
+
+ {{template "repo/diff/section_unified" dict "file" .File "root" $}}
+
+
+
+
+
+{{else}}
+
+ {{ctx.Locale.Tr "repo.editor.no_changes_to_show"}}
+
+{{end}}
diff --git a/repo/editor/edit.tmpl b/repo/editor/edit.tmpl
new file mode 100644
index 0000000..204a426
--- /dev/null
+++ b/repo/editor/edit.tmpl
@@ -0,0 +1,60 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+ {{template "base/alert" .}}
+
+ {{.CsrfTokenHtml}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "loading"}}
+
+
+
+
+ {{template "repo/editor/commit_form" .}}
+
+
+
+{{template "base/footer" .}}
diff --git a/repo/editor/patch.tmpl b/repo/editor/patch.tmpl
new file mode 100644
index 0000000..33a7c2a
--- /dev/null
+++ b/repo/editor/patch.tmpl
@@ -0,0 +1,40 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+ {{template "base/alert" .}}
+
+ {{.CsrfTokenHtml}}
+
+
+
+
+ {{template "repo/editor/commit_form" .}}
+
+
+
+{{template "base/footer" .}}
diff --git a/repo/editor/upload.tmpl b/repo/editor/upload.tmpl
new file mode 100644
index 0000000..5725020
--- /dev/null
+++ b/repo/editor/upload.tmpl
@@ -0,0 +1,33 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+ {{template "base/alert" .}}
+
+
+
+{{template "base/footer" .}}
diff --git a/repo/empty.tmpl b/repo/empty.tmpl
new file mode 100644
index 0000000..ae3f950
--- /dev/null
+++ b/repo/empty.tmpl
@@ -0,0 +1,76 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+
+
+ {{template "base/alert" .}}
+ {{if .Repository.IsArchived}}
+
+ {{if .Repository.ArchivedUnix.IsZero}}
+ {{ctx.Locale.Tr "repo.archive.title"}}
+ {{else}}
+ {{ctx.Locale.Tr "repo.archive.title_date" (DateUtils.AbsoluteLong .Repository.ArchivedUnix)}}
+ {{end}}
+
+ {{end}}
+
+ {{if .Repository.IsBroken}}
+
{{ctx.Locale.Tr "repo.broken_message"}}
+ {{else if .RepoHasContentsWithoutBranch}}
+
{{ctx.Locale.Tr "repo.no_branch"}}
+ {{else if .CanWriteCode}}
+
+
+
+
{{ctx.Locale.Tr "repo.clone_this_repo"}} {{ctx.Locale.Tr "repo.clone_helper" "http://git-scm.com/book/en/v2/Git-Basics-Getting-a-Git-Repository"}}
+
+
+
+
+ {{if not .Repository.IsArchived}}
+
+
+
+
{{ctx.Locale.Tr "repo.create_new_repo_command"}}
+
+
touch README.md
+git init
+{{if ne .Repository.DefaultBranch "master"}}git checkout -b {{.Repository.DefaultBranch}}{{end}}
+git add README.md
+git commit -m "first commit"
+git remote add origin {{$.CloneButtonOriginLink.HTTPS}}
+git push -u origin {{.Repository.DefaultBranch}}
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.push_exist_repo"}}
+
+
git remote add origin {{$.CloneButtonOriginLink.HTTPS}}
+git push -u origin {{.Repository.DefaultBranch}}
+
+
+ {{end}}
+
+ {{else}}
+
{{ctx.Locale.Tr "repo.empty_message"}}
+ {{end}}
+
+
+
+
+{{template "base/footer" .}}
diff --git a/repo/file_info.tmpl b/repo/file_info.tmpl
new file mode 100644
index 0000000..b63af68
--- /dev/null
+++ b/repo/file_info.tmpl
@@ -0,0 +1,48 @@
+
+ {{if .FileIsSymlink}}
+
+ {{ctx.Locale.Tr "repo.symbolic_link"}}
+
+ {{end}}
+ {{if ne .NumLines nil}}
+
+ {{.NumLines}} {{ctx.Locale.TrN .NumLines "repo.line" "repo.lines"}}
+
+ {{end}}
+ {{if ne .FileSize nil}}
+
+ {{FileSize .FileSize}}{{if .IsLFSFile}} ({{ctx.Locale.Tr "repo.stored_lfs"}}){{end}}
+
+ {{end}}
+ {{if .LFSLock}}
+
+ {{svg "octicon-lock" 16 "tw-mr-1"}}
+
{{.LFSLockOwner}}
+
+ {{end}}
+ {{if .LexerName}}
+
+ {{.LexerName}}
+
+ {{end}}
+ {{if .IsExecutable}}
+
+ {{ctx.Locale.Tr "repo.executable_file"}}
+
+ {{end}}
+ {{if .IsVendored}}
+
+ {{ctx.Locale.Tr "repo.vendored"}}
+
+ {{end}}
+ {{if .IsGenerated}}
+
+ {{ctx.Locale.Tr "repo.generated"}}
+
+ {{end}}
+ {{if .ImageSize}}
+
+ {{.ImageSize}}
+
+ {{end}}
+
diff --git a/repo/find/files.tmpl b/repo/find/files.tmpl
new file mode 100644
index 0000000..ce24279
--- /dev/null
+++ b/repo/find/files.tmpl
@@ -0,0 +1,21 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+
+
+
+
{{ctx.Locale.Tr "repo.find_file.no_matching"}}
+
+
+
+{{template "base/footer" .}}
diff --git a/repo/forks.tmpl b/repo/forks.tmpl
new file mode 100644
index 0000000..725b67c
--- /dev/null
+++ b/repo/forks.tmpl
@@ -0,0 +1,20 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+
+
+ {{range .Forks}}
+
+ {{end}}
+
+
+
+ {{template "base/paginate" .}}
+
+{{template "base/footer" .}}
diff --git a/repo/graph.tmpl b/repo/graph.tmpl
new file mode 100644
index 0000000..9eb4bd4
--- /dev/null
+++ b/repo/graph.tmpl
@@ -0,0 +1,62 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+
+
+
+
+ {{template "repo/graph/svgcontainer" .}}
+ {{template "repo/graph/commits" .}}
+
+
+
+
+{{template "base/footer" .}}
diff --git a/repo/graph/commits.tmpl b/repo/graph/commits.tmpl
new file mode 100644
index 0000000..f1d0e62
--- /dev/null
+++ b/repo/graph/commits.tmpl
@@ -0,0 +1,77 @@
+
+
+ {{range $commitI, $commit := .Graph.Commits}}
+
+ {{if $commit.OnlyRelation}}
+
+ {{else}}
+
+ {{$class := "ui sha label"}}
+ {{if $commit.Commit.Signature}}
+ {{$class = (print $class " isSigned")}}
+ {{if $commit.Verification.Verified}}
+ {{if eq $commit.Verification.TrustStatus "trusted"}}
+ {{$class = (print $class " isVerified")}}
+ {{else if eq $commit.Verification.TrustStatus "untrusted"}}
+ {{$class = (print $class " isVerifiedUntrusted")}}
+ {{else}}
+ {{$class = (print $class " isVerifiedUnmatched")}}
+ {{end}}
+ {{else if $commit.Verification.Warning}}
+ {{$class = (print $class " isWarning")}}
+ {{end}}
+ {{end}}
+
+ {{ShortSha $commit.Commit.ID.String}}
+ {{- if $commit.Commit.Signature -}}
+ {{template "repo/shabox_badge" dict "root" $ "verification" $commit.Verification}}
+ {{- end -}}
+
+
+
+ {{ctx.RenderUtils.RenderCommitMessage $commit.Subject ($.Repository.ComposeMetas ctx)}}
+
+
+ {{range $commit.Refs}}
+ {{$refGroup := .RefGroup}}
+ {{if eq $refGroup "pull"}}
+ {{if or (not $.HidePRRefs) (SliceUtils.Contains $.SelectedBranches .Name)}}
+
+
+ {{svg "octicon-git-pull-request"}} #{{.ShortName}}
+
+ {{end}}
+ {{else if eq $refGroup "tags"}}
+ {{- template "repo/tag/name" dict "RepoLink" $.Repository.Link "TagName" .ShortName -}}
+ {{else if eq $refGroup "remotes"}}
+
+ {{svg "octicon-cross-reference"}} {{.ShortName}}
+
+ {{else if eq $refGroup "heads"}}
+
+ {{svg "octicon-git-branch"}} {{.ShortName}}
+
+ {{else}}
+
+ {{end}}
+ {{end}}
+
+
+ {{$userName := $commit.Commit.Author.Name}}
+ {{if $commit.User}}
+ {{if and $commit.User.FullName DefaultShowFullName}}
+ {{$userName = $commit.User.FullName}}
+ {{end}}
+ {{ctx.AvatarUtils.Avatar $commit.User 18}}
+ {{$userName}}
+ {{else}}
+ {{ctx.AvatarUtils.AvatarByEmail $commit.Commit.Author.Email $userName 18}}
+ {{$userName}}
+ {{end}}
+
+ {{DateUtils.FullTime $commit.Date}}
+ {{end}}
+
+ {{end}}
+
+
diff --git a/repo/graph/div.tmpl b/repo/graph/div.tmpl
new file mode 100644
index 0000000..c0bd4e2
--- /dev/null
+++ b/repo/graph/div.tmpl
@@ -0,0 +1,7 @@
+
+ {{template "repo/graph/svgcontainer" .}}
+ {{template "repo/graph/commits" .}}
+
+
diff --git a/repo/graph/svgcontainer.tmpl b/repo/graph/svgcontainer.tmpl
new file mode 100644
index 0000000..99c3c87
--- /dev/null
+++ b/repo/graph/svgcontainer.tmpl
@@ -0,0 +1,24 @@
+
+
+ {{range $flowid, $flow := .Graph.Flows}}
+
+
+ {{range $flow.Commits}}
+
+ {{end}}
+
+ {{end}}
+
+
diff --git a/repo/header.tmpl b/repo/header.tmpl
new file mode 100644
index 0000000..e187ef1
--- /dev/null
+++ b/repo/header.tmpl
@@ -0,0 +1,236 @@
+
+{{with .Repository}}
+
+
+ {{if $.PullMirror}}
+
+ {{ctx.Locale.Tr "repo.mirror_from"}}
+
{{$.PullMirror.RemoteAddress}}
+ {{if $.PullMirror.UpdatedUnix}}{{ctx.Locale.Tr "repo.mirror_sync"}} {{DateUtils.TimeSince $.PullMirror.UpdatedUnix}}{{end}}
+
+ {{end}}
+ {{if .IsFork}}
{{end}}
+ {{if .IsGenerated}}
{{end}}
+
+{{end}}
+
+
+
+
+
diff --git a/repo/home.tmpl b/repo/home.tmpl
new file mode 100644
index 0000000..f80c9c1
--- /dev/null
+++ b/repo/home.tmpl
@@ -0,0 +1,145 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+ {{template "base/alert" .}}
+
+ {{if .Repository.IsArchived}}
+
+ {{if .Repository.ArchivedUnix.IsZero}}
+ {{ctx.Locale.Tr "repo.archive.title"}}
+ {{else}}
+ {{ctx.Locale.Tr "repo.archive.title_date" (DateUtils.AbsoluteLong .Repository.ArchivedUnix)}}
+ {{end}}
+
+ {{end}}
+
+ {{template "repo/code/recently_pushed_new_branches" .}}
+
+ {{$treeNamesLen := len .TreeNames}}
+ {{$isTreePathRoot := eq $treeNamesLen 0}}
+ {{$showSidebar := and $isTreePathRoot (not .HideRepoInfo) (not .IsBlame)}}
+
+
+
+{{template "base/footer" .}}
diff --git a/repo/home_sidebar_bottom.tmpl b/repo/home_sidebar_bottom.tmpl
new file mode 100644
index 0000000..f780dc1
--- /dev/null
+++ b/repo/home_sidebar_bottom.tmpl
@@ -0,0 +1,61 @@
+
diff --git a/repo/home_sidebar_top.tmpl b/repo/home_sidebar_top.tmpl
new file mode 100644
index 0000000..8d3d7c6
--- /dev/null
+++ b/repo/home_sidebar_top.tmpl
@@ -0,0 +1,75 @@
+
diff --git a/repo/icon.tmpl b/repo/icon.tmpl
new file mode 100644
index 0000000..e5e0bd6
--- /dev/null
+++ b/repo/icon.tmpl
@@ -0,0 +1,10 @@
+{{$avatarLink := (.RelAvatarLink ctx)}}
+{{if $avatarLink}}
+
+{{else if $.IsMirror}}
+ {{svg "octicon-mirror" 24}}
+{{else if $.IsFork}}
+ {{svg "octicon-repo-forked" 24}}
+{{else}}
+ {{svg "octicon-repo" 24}}
+{{end}}
diff --git a/repo/issue/branch_selector_field.tmpl b/repo/issue/branch_selector_field.tmpl
new file mode 100644
index 0000000..9183b7b
--- /dev/null
+++ b/repo/issue/branch_selector_field.tmpl
@@ -0,0 +1,62 @@
+{{/* TODO: RemoveIssueRef: the Issue.Ref will be removed in 1.24 or 1.25 if no end user really needs it or there could be better alternative then.
+PR: https://github.com/go-gitea/gitea/pull/32744
+
+The Issue.Ref was added by Add possibility to record branch or tag information in an issue (#780)
+After 8 years, this "branch selector" does nothing more than saving the branch/tag name into database and displays it.
+
+There are still users using it:
+* @didim99: it is a really useful feature to specify a branch in which issue found.
+
+Still needs to figure out:
+* Could the "recording branch/tag name" be replaced by other approaches?
+ * Write the branch name in the issue title/body then it will still be displayed, eg: `[bug] (fix/ui-broken-bug) there is a bug ....`
+* Is "GitHub-like development sidebar (`#31899`)" good enough (or better) for your usage?
+*/}}
+{{if and (not .Issue.IsPull) (not .PageIsComparePull)}}
+
+
+
+ {{if .Reference}}{{$.RefEndName}}{{else}}{{ctx.Locale.Tr "repo.issues.no_ref"}}{{end}}
+ {{if .HasIssuesOrPullsWritePermission}}{{svg "octicon-triangle-down" 14 "dropdown icon"}}{{end}}
+
+
+
+
+{{end}}
diff --git a/repo/issue/card.tmpl b/repo/issue/card.tmpl
new file mode 100644
index 0000000..2e19e86
--- /dev/null
+++ b/repo/issue/card.tmpl
@@ -0,0 +1,78 @@
+{{with .Issue}}
+ {{if eq $.Page.Project.CardType 1}}{{/* Images and Text*/}}
+ {{$attachments := index $.Page.issuesAttachmentMap .ID}}
+ {{if $attachments}}
+
+ {{range $attachments}}
+
+ {{end}}
+
+ {{end}}
+ {{end}}
+
+
+
+
+ {{if not $.Page.Repository}}{{.Repo.FullName}}{{end}}#{{.Index}}
+ {{$timeStr := DateUtils.TimeSince .GetLastEventTimestamp}}
+ {{if .OriginalAuthor}}
+ {{ctx.Locale.Tr .GetLastEventLabelFake $timeStr .OriginalAuthor}}
+ {{else if gt .Poster.ID 0}}
+ {{ctx.Locale.Tr .GetLastEventLabel $timeStr .Poster.HomeLink .Poster.GetDisplayName}}
+ {{else}}
+ {{ctx.Locale.Tr .GetLastEventLabelFake $timeStr .Poster.GetDisplayName}}
+ {{end}}
+
+
+ {{if .MilestoneID}}
+
+ {{end}}
+ {{if $.Page.LinkedPRs}}
+ {{range index $.Page.LinkedPRs .ID}}
+
+ {{end}}
+ {{end}}
+ {{$tasks := .GetTasks}}
+ {{if gt $tasks 0}}
+
+ {{svg "octicon-checklist" 16 "tw-mr-1 tw-align-middle"}}
+ {{.GetTasksDone}} / {{$tasks}}
+
+ {{end}}
+
+
+ {{if or .Labels .Assignees}}
+
+ {{end}}
+{{end}}
diff --git a/repo/issue/choose.tmpl b/repo/issue/choose.tmpl
new file mode 100644
index 0000000..38cf9e4
--- /dev/null
+++ b/repo/issue/choose.tmpl
@@ -0,0 +1,59 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+ {{template "base/alert" .}}
+
+ {{template "repo/issue/navbar" .}}
+
+
+ {{range .IssueTemplates}}
+
+
+
+ {{.Name}}
+ {{.About}}
+
+
+
+
+ {{end}}
+ {{range .IssueConfig.ContactLinks}}
+
+
+
+ {{.Name}}
+ {{.About}}
+
+
+
+
+ {{end}}
+ {{if .IssueConfig.BlankIssuesEnabled}}
+
+
+
+ {{ctx.Locale.Tr "repo.issues.choose.blank"}}
+ {{ctx.Locale.Tr "repo.issues.choose.blank_about"}}
+
+
+
+
+ {{end}}
+ {{- if .IssueConfigError}}{{/* normal warning flash makes problems here*/}}
+
+
+
{{ctx.Locale.Tr "repo.issues.choose.invalid_config"}}
+
{{.IssueConfigError}}
+
+
+ {{end}}
+
+
+{{template "base/footer" .}}
diff --git a/repo/issue/comment_tab.tmpl b/repo/issue/comment_tab.tmpl
new file mode 100644
index 0000000..a4626dd
--- /dev/null
+++ b/repo/issue/comment_tab.tmpl
@@ -0,0 +1,22 @@
+{{$textareaContent := .BodyQuery}}
+{{if not $textareaContent}}{{$textareaContent = .IssueTemplate}}{{end}}
+{{if not $textareaContent}}{{$textareaContent = .PullRequestTemplate}}{{end}}
+{{if not $textareaContent}}{{$textareaContent = .content}}{{end}}
+
+
+ {{template "shared/combomarkdowneditor" (dict
+ "CustomInit" true
+ "MarkdownPreviewInRepo" $.Repository
+ "MarkdownPreviewMode" "comment"
+ "TextareaName" "content"
+ "TextareaContent" $textareaContent
+ "TextareaPlaceholder" (ctx.Locale.Tr "repo.diff.comment.placeholder")
+ "DropzoneParentContainer" "form, .ui.form"
+ )}}
+
+
+{{if .IsAttachmentEnabled}}
+
+ {{template "repo/upload" .}}
+
+{{end}}
diff --git a/repo/issue/fields/checkboxes.tmpl b/repo/issue/fields/checkboxes.tmpl
new file mode 100644
index 0000000..6134c32
--- /dev/null
+++ b/repo/issue/fields/checkboxes.tmpl
@@ -0,0 +1,14 @@
+
diff --git a/repo/issue/fields/dropdown.tmpl b/repo/issue/fields/dropdown.tmpl
new file mode 100644
index 0000000..26505f5
--- /dev/null
+++ b/repo/issue/fields/dropdown.tmpl
@@ -0,0 +1,17 @@
+
diff --git a/repo/issue/fields/header.tmpl b/repo/issue/fields/header.tmpl
new file mode 100644
index 0000000..bcd0ffb
--- /dev/null
+++ b/repo/issue/fields/header.tmpl
@@ -0,0 +1,6 @@
+{{if and (.item.Attributes.label) (not .item.Attributes.hide_label)}}
+ {{.item.Attributes.label}}{{if .item.Validations.required}} {{end}}
+{{end}}
+{{if .item.Attributes.description}}
+ {{ctx.RenderUtils.MarkdownToHtml .item.Attributes.description}}
+{{end}}
diff --git a/repo/issue/fields/input.tmpl b/repo/issue/fields/input.tmpl
new file mode 100644
index 0000000..039f9a9
--- /dev/null
+++ b/repo/issue/fields/input.tmpl
@@ -0,0 +1,4 @@
+
+ {{template "repo/issue/fields/header" .}}
+
+
diff --git a/repo/issue/fields/markdown.tmpl b/repo/issue/fields/markdown.tmpl
new file mode 100644
index 0000000..da8f5e6
--- /dev/null
+++ b/repo/issue/fields/markdown.tmpl
@@ -0,0 +1,3 @@
+
diff --git a/repo/issue/fields/textarea.tmpl b/repo/issue/fields/textarea.tmpl
new file mode 100644
index 0000000..722b670
--- /dev/null
+++ b/repo/issue/fields/textarea.tmpl
@@ -0,0 +1,25 @@
+{{$useMarkdownEditor := not .item.Attributes.render}}
+
diff --git a/repo/issue/filter_actions.tmpl b/repo/issue/filter_actions.tmpl
new file mode 100644
index 0000000..8e24103
--- /dev/null
+++ b/repo/issue/filter_actions.tmpl
@@ -0,0 +1,128 @@
+
+
diff --git a/repo/issue/filter_item_label.tmpl b/repo/issue/filter_item_label.tmpl
new file mode 100644
index 0000000..88e2e43
--- /dev/null
+++ b/repo/issue/filter_item_label.tmpl
@@ -0,0 +1,48 @@
+{{/*
+* "labels" from query string (needed by JS)
+* QueryLink
+* Labels
+* SupportArchivedLabel, if true, then it needs "archived_labels" from query string
+*/}}
+{{$queryLink := .QueryLink}}
+
+ {{ctx.Locale.Tr "repo.issues.filter_label"}}
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
diff --git a/repo/issue/filter_item_user_assign.tmpl b/repo/issue/filter_item_user_assign.tmpl
new file mode 100644
index 0000000..4f1db71
--- /dev/null
+++ b/repo/issue/filter_item_user_assign.tmpl
@@ -0,0 +1,31 @@
+{{/* This is a user list for filter, the data is provided by a local variable assignment
+* QueryParamKey: eg: "poster", "assignee"
+* QueryLink
+* UserSearchList
+* SelectedUserId: 0 or empty means default, -1 means "no user is set"
+* TextFilterTitle
+* TextZeroValue: the text for "all issues"
+* TextNegativeOne: the text for "issues with no assignee"
+*/}}
+{{$queryLink := .QueryLink}}
+
+ {{$.TextFilterTitle}} {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
diff --git a/repo/issue/filter_item_user_fetch.tmpl b/repo/issue/filter_item_user_fetch.tmpl
new file mode 100644
index 0000000..5fa8142
--- /dev/null
+++ b/repo/issue/filter_item_user_fetch.tmpl
@@ -0,0 +1,23 @@
+{{/* This is a user list for filter, the data is provided by a remote "fetch" request
+* QueryParamKey: eg: "poster", "assignee"
+* QueryLink
+* UserSearchUrl
+* SelectedUsername
+* TextFilterTitle
+*/}}
+{{$queryLink := .QueryLink}}
+
+ {{$.TextFilterTitle}} {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
diff --git a/repo/issue/filter_list.tmpl b/repo/issue/filter_list.tmpl
new file mode 100644
index 0000000..7612d93
--- /dev/null
+++ b/repo/issue/filter_list.tmpl
@@ -0,0 +1,137 @@
+{{$queryLink := QueryBuild "?" "q" $.Keyword "type" $.ViewType "sort" $.SortType "state" $.State "labels" $.SelectLabels "milestone" $.MilestoneID "project" $.ProjectID "assignee" $.AssigneeID "poster" $.PosterUsername "archived_labels" (Iif $.ShowArchivedLabels "true")}}
+
+{{template "repo/issue/filter_item_label" dict "Labels" .Labels "QueryLink" $queryLink "SupportArchivedLabel" true}}
+
+{{if not .Milestone}}
+
+
+
+ {{ctx.Locale.Tr "repo.issues.filter_milestone"}}
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+{{end}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.issues.filter_project"}}
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+{{/* TODO: the UserSearchUrl is old logic but not right, milestone could also have "pull request" posters */}}
+{{template "repo/issue/filter_item_user_fetch" dict
+ "QueryParamKey" "poster"
+ "QueryLink" $queryLink
+ "UserSearchUrl" (Iif .Milestone (print $.RepoLink "/issues/posters") (print $.Link "/posters"))
+ "SelectedUsername" $.PosterUsername
+ "TextFilterTitle" (ctx.Locale.Tr "repo.issues.filter_poster")
+}}
+
+{{template "repo/issue/filter_item_user_assign" dict
+ "QueryParamKey" "assignee"
+ "QueryLink" $queryLink
+ "UserSearchList" $.Assignees
+ "SelectedUserId" $.AssigneeID
+ "TextFilterTitle" (ctx.Locale.Tr "repo.issues.filter_assignee")
+ "TextZeroValue" (ctx.Locale.Tr "repo.issues.filter_assginee_no_select")
+ "TextNegativeOne" (ctx.Locale.Tr "repo.issues.filter_assginee_no_assignee")
+}}
+
+{{if .IsSigned}}
+
+
+
+ {{ctx.Locale.Tr "repo.issues.filter_type"}}
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+{{end}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.issues.filter_sort"}}
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
diff --git a/repo/issue/filters.tmpl b/repo/issue/filters.tmpl
new file mode 100644
index 0000000..06e7c1a
--- /dev/null
+++ b/repo/issue/filters.tmpl
@@ -0,0 +1,26 @@
+
diff --git a/repo/issue/label_precolors.tmpl b/repo/issue/label_precolors.tmpl
new file mode 100644
index 0000000..8000766
--- /dev/null
+++ b/repo/issue/label_precolors.tmpl
@@ -0,0 +1,22 @@
+
diff --git a/repo/issue/labels.tmpl b/repo/issue/labels.tmpl
new file mode 100644
index 0000000..317fe09
--- /dev/null
+++ b/repo/issue/labels.tmpl
@@ -0,0 +1,18 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+
+ {{template "repo/issue/navbar" .}}
+ {{if and (or .CanWriteIssues .CanWritePulls) (not .Repository.IsArchived)}}
+ {{ctx.Locale.Tr "repo.issues.new_label"}}
+ {{end}}
+
+ {{template "base/alert" .}}
+ {{template "repo/issue/labels/label_list" .}}
+
+ {{if and (or .CanWriteIssues .CanWritePulls) (not .Repository.IsArchived)}}
+ {{template "repo/issue/labels/label_edit_modal" .}}
+ {{end}}
+
+{{template "base/footer" .}}
diff --git a/repo/issue/labels/label_archived.tmpl b/repo/issue/labels/label_archived.tmpl
new file mode 100644
index 0000000..feaf77e
--- /dev/null
+++ b/repo/issue/labels/label_archived.tmpl
@@ -0,0 +1,5 @@
+{{if .IsArchived}}
+
+ {{ctx.Locale.Tr "archived"}}
+
+{{end}}
diff --git a/repo/issue/labels/label_edit_modal.tmpl b/repo/issue/labels/label_edit_modal.tmpl
new file mode 100644
index 0000000..f04d499
--- /dev/null
+++ b/repo/issue/labels/label_edit_modal.tmpl
@@ -0,0 +1,63 @@
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+
{{ctx.Locale.Tr "repo.issues.label_title"}}
+
+
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.issues.label_description"}}
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.issues.label_color"}}
+
+
+ {{template "repo/issue/label_precolors"}}
+
+
+
+
+
+
+ {{svg "octicon-x"}}
+ {{ctx.Locale.Tr "cancel"}}
+
+
+ {{svg "fontawesome-save"}}
+ {{ctx.Locale.Tr "save"}}
+
+
+
diff --git a/repo/issue/labels/label_list.tmpl b/repo/issue/labels/label_list.tmpl
new file mode 100644
index 0000000..8225673
--- /dev/null
+++ b/repo/issue/labels/label_list.tmpl
@@ -0,0 +1,92 @@
+
+
+
+ {{if and (not $.PageIsOrgSettingsLabels) (or $.CanWriteIssues $.CanWritePulls) (eq .NumLabels 0) (not $.Repository.IsArchived)}}
+ {{template "repo/issue/labels/label_load_template" .}}
+
+ {{else if and ($.PageIsOrgSettingsLabels) (eq .NumLabels 0)}}
+ {{template "repo/issue/labels/label_load_template" .}}
+
+ {{end}}
+
+
+ {{$canEditLabel := and (not $.PageIsOrgSettingsLabels) (not $.Repository.IsArchived) (or $.CanWriteIssues $.CanWritePulls)}}
+ {{$canEditLabel = or $canEditLabel $.PageIsOrgSettingsLabels}}
+ {{range .Labels}}
+
+
+ {{ctx.RenderUtils.RenderLabel .}}
+ {{if .Description}}{{.Description | ctx.RenderUtils.RenderEmoji}} {{end}}
+
+
+
+ {{template "repo/issue/labels/label_archived" .}}
+
+
+
+ {{end}}
+
+ {{if and (not .PageIsOrgSettingsLabels) (.OrgLabels)}}
+
+
+
+
+ {{range .OrgLabels}}
+
+
+ {{ctx.RenderUtils.RenderLabel .}}
+ {{if .Description}}{{.Description | ctx.RenderUtils.RenderEmoji}} {{end}}
+
+
+
+ {{template "repo/issue/labels/label_archived" .}}
+
+
+ {{end}}
+ {{end}}
+
+
diff --git a/repo/issue/labels/label_load_template.tmpl b/repo/issue/labels/label_load_template.tmpl
new file mode 100644
index 0000000..3cb2442
--- /dev/null
+++ b/repo/issue/labels/label_load_template.tmpl
@@ -0,0 +1,21 @@
+
+
+
{{ctx.Locale.Tr "repo.issues.label_templates.info"}}
+
+ {{.CsrfTokenHtml}}
+
+
+
+
{{ctx.Locale.Tr "repo.issues.label_templates.helper"}}
+
+ {{svg "octicon-triangle-down" 18 "dropdown icon"}}
+
+
+ {{ctx.Locale.Tr "repo.issues.label_templates.use"}}
+
+
+
diff --git a/repo/issue/list.tmpl b/repo/issue/list.tmpl
new file mode 100644
index 0000000..ee783b4
--- /dev/null
+++ b/repo/issue/list.tmpl
@@ -0,0 +1,56 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+ {{template "base/alert" .}}
+
+ {{if .PinnedIssues}}
+
+ {{range .PinnedIssues}}
+
+ {{template "repo/issue/card" (dict "Issue" . "Page" $ "isPinnedIssueCard" true)}}
+
+ {{end}}
+
+ {{end}}
+
+
+
+ {{template "repo/issue/filters" .}}
+
+
+ {{template "shared/issuelist" dict "." . "listType" "repo"}}
+
+
+{{template "base/footer" .}}
diff --git a/repo/issue/milestone/filter_list.tmpl b/repo/issue/milestone/filter_list.tmpl
new file mode 100644
index 0000000..0740b86
--- /dev/null
+++ b/repo/issue/milestone/filter_list.tmpl
@@ -0,0 +1,16 @@
+
+
+
+ {{ctx.Locale.Tr "repo.issues.filter_sort"}}
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
diff --git a/repo/issue/milestone_issues.tmpl b/repo/issue/milestone_issues.tmpl
new file mode 100644
index 0000000..4fc6057
--- /dev/null
+++ b/repo/issue/milestone_issues.tmpl
@@ -0,0 +1,65 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+ {{template "base/alert" .}}
+
+
{{.Milestone.Name}}
+ {{if not .Repository.IsArchived}}
+
+ {{end}}
+
+ {{if .Milestone.RenderedContent}}
+
+ {{.Milestone.RenderedContent}}
+
+ {{end}}
+
+
+
+
+ {{$closedDate:= DateUtils.TimeSince .Milestone.ClosedDateUnix}}
+ {{if .IsClosed}}
+ {{svg "octicon-clock"}} {{ctx.Locale.Tr "repo.milestones.closed" $closedDate}}
+ {{else}}
+
+ {{if .Milestone.DeadlineString}}
+
+ {{svg "octicon-calendar"}}
+ {{DateUtils.AbsoluteShort (.Milestone.DeadlineString|DateUtils.ParseLegacy)}}
+
+ {{else}}
+ {{svg "octicon-calendar"}}
+ {{ctx.Locale.Tr "repo.milestones.no_due_date"}}
+ {{end}}
+ {{end}}
+
+
{{ctx.Locale.Tr "repo.milestones.completeness" .Milestone.Completeness}}
+ {{if .TotalTrackedTime}}
+
+ {{svg "octicon-clock"}}
+ {{.TotalTrackedTime | Sec2Time}}
+
+ {{end}}
+
+
+
+
+ {{template "repo/issue/filters" .}}
+
+ {{template "shared/issuelist" dict "." . "listType" "milestone"}}
+
+
+{{template "base/footer" .}}
diff --git a/repo/issue/milestone_new.tmpl b/repo/issue/milestone_new.tmpl
new file mode 100644
index 0000000..4809149
--- /dev/null
+++ b/repo/issue/milestone_new.tmpl
@@ -0,0 +1,64 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+
+ {{template "repo/issue/navbar" .}}
+ {{if and (or .CanWriteIssues .CanWritePulls) .PageIsEditMilestone}}
+
+ {{end}}
+
+
+
+ {{template "base/alert" .}}
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "repo.milestones.title"}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.milestones.desc"}}
+ {{template "shared/combomarkdowneditor" (dict
+ "MarkdownPreviewInRepo" $.Repository
+ "MarkdownPreviewMode" "comment"
+ "TextareaName" "content"
+ "TextareaContent" .content
+ "TextareaPlaceholder" (ctx.Locale.Tr "repo.milestones.desc")
+ )}}
+
+
+ {{if .PageIsEditMilestone}}
+
+ {{ctx.Locale.Tr "repo.milestones.cancel"}}
+
+
+ {{ctx.Locale.Tr "repo.milestones.modify"}}
+
+ {{else}}
+
+ {{ctx.Locale.Tr "repo.milestones.create"}}
+
+ {{end}}
+
+
+
+
+{{template "base/footer" .}}
diff --git a/repo/issue/milestones.tmpl b/repo/issue/milestones.tmpl
new file mode 100644
index 0000000..9515acf
--- /dev/null
+++ b/repo/issue/milestones.tmpl
@@ -0,0 +1,108 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+ {{template "base/alert" .}}
+
+
+
+ {{template "repo/issue/filters" .}}
+
+
+
+ {{range .Milestones}}
+
+
+
+ {{if .Content}}
+
+ {{.RenderedContent}}
+
+ {{end}}
+
+ {{end}}
+
+ {{template "base/paginate" .}}
+
+
+
+
+{{if or .CanWriteIssues .CanWritePulls}}
+
+
+
+
{{ctx.Locale.Tr "repo.milestones.deletion_desc"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+{{end}}
+{{template "base/footer" .}}
diff --git a/repo/issue/navbar.tmpl b/repo/issue/navbar.tmpl
new file mode 100644
index 0000000..30e42c7
--- /dev/null
+++ b/repo/issue/navbar.tmpl
@@ -0,0 +1,4 @@
+
diff --git a/repo/issue/new.tmpl b/repo/issue/new.tmpl
new file mode 100644
index 0000000..ccd45fd
--- /dev/null
+++ b/repo/issue/new.tmpl
@@ -0,0 +1,8 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+ {{template "repo/issue/new_form" .}}
+
+
+{{template "base/footer" .}}
diff --git a/repo/issue/new_form.tmpl b/repo/issue/new_form.tmpl
new file mode 100644
index 0000000..dd4c761
--- /dev/null
+++ b/repo/issue/new_form.tmpl
@@ -0,0 +1,73 @@
+{{if .Flash}}
+{{template "base/alert" .}}
+{{end}}
+
diff --git a/repo/issue/openclose.tmpl b/repo/issue/openclose.tmpl
new file mode 100644
index 0000000..00a31b5
--- /dev/null
+++ b/repo/issue/openclose.tmpl
@@ -0,0 +1,23 @@
+{{/* this tmpl is quite dirty, it should not mix unrelated things together .... need to split it in the future*/}}
+{{$allStatesLink := ""}}{{$openLink := ""}}{{$closedLink := ""}}
+{{if .PageIsMilestones}}
+ {{$allStatesLink = QueryBuild "?" "q" $.Keyword "sort" $.SortType "state" "all"}}
+{{else}}
+ {{$allStatesLink = QueryBuild "?" "q" $.Keyword "type" $.ViewType "sort" $.SortType "state" "all" "labels" $.SelectLabels "milestone" $.MilestoneID "project" $.ProjectID "assignee" $.AssigneeID "poster" $.PosterUsername "archived_labels" (Iif $.ShowArchivedLabels "true")}}
+{{end}}
+{{$openLink = QueryBuild $allStatesLink "state" "open"}}
+{{$closedLink = QueryBuild $allStatesLink "state" "closed"}}
+
diff --git a/repo/issue/search.tmpl b/repo/issue/search.tmpl
new file mode 100644
index 0000000..07732ab
--- /dev/null
+++ b/repo/issue/search.tmpl
@@ -0,0 +1,18 @@
+
diff --git a/repo/issue/sidebar/allow_maintainer_edit.tmpl b/repo/issue/sidebar/allow_maintainer_edit.tmpl
new file mode 100644
index 0000000..ad4ce96
--- /dev/null
+++ b/repo/issue/sidebar/allow_maintainer_edit.tmpl
@@ -0,0 +1,13 @@
+{{if and .Issue.IsPull .IsIssuePoster (not .Issue.IsClosed) .Issue.PullRequest.HeadRepo}}
+ {{if and (not (eq .Issue.PullRequest.HeadRepo.FullName .Issue.PullRequest.BaseRepo.FullName)) .CanWriteToHeadRepo}}
+
+
+ {{ctx.Locale.Tr "repo.pulls.allow_edits_from_maintainers"}}
+
+
+ {{end}}
+{{end}}
diff --git a/repo/issue/sidebar/assignee_list.tmpl b/repo/issue/sidebar/assignee_list.tmpl
new file mode 100644
index 0000000..f124c3f
--- /dev/null
+++ b/repo/issue/sidebar/assignee_list.tmpl
@@ -0,0 +1,38 @@
+{{$pageMeta := .}}
+{{$data := .AssigneesData}}
+{{$issueAssignees := NIL}}{{if $pageMeta.Issue}}{{$issueAssignees = $pageMeta.Issue.Assignees}}{{end}}
+
+
diff --git a/repo/issue/sidebar/due_date.tmpl b/repo/issue/sidebar/due_date.tmpl
new file mode 100644
index 0000000..e6e19f6
--- /dev/null
+++ b/repo/issue/sidebar/due_date.tmpl
@@ -0,0 +1,29 @@
+
+{{ctx.Locale.Tr "repo.issues.due_date"}}
+
diff --git a/repo/issue/sidebar/issue_dependencies.tmpl b/repo/issue/sidebar/issue_dependencies.tmpl
new file mode 100644
index 0000000..17e9738
--- /dev/null
+++ b/repo/issue/sidebar/issue_dependencies.tmpl
@@ -0,0 +1,149 @@
+{{if .Repository.IsDependenciesEnabled ctx}}
+
+
+
+ {{if (and (not .BlockedByDependencies) (not .BlockedByDependenciesNotPermitted) (not .BlockingDependencies) (not .BlockingDependenciesNotPermitted))}}
+
{{ctx.Locale.Tr "repo.issues.dependency.title"}}
+
+
+ {{if .Issue.IsPull}}
+ {{ctx.Locale.Tr "repo.issues.dependency.pr_no_dependencies"}}
+ {{else}}
+ {{ctx.Locale.Tr "repo.issues.dependency.issue_no_dependencies"}}
+ {{end}}
+
+ {{end}}
+
+ {{if or .BlockingDependencies .BlockingDependenciesNotPermitted}}
+
+ {{ctx.Locale.Tr "repo.issues.dependency.blocks_short"}}
+
+
+ {{range .BlockingDependencies}}
+
+ {{end}}
+ {{if .BlockingDependenciesNotPermitted}}
+
+ {{ctx.Locale.TrN (len .BlockingDependenciesNotPermitted) "repo.issues.dependency.no_permission_1" "repo.issues.dependency.no_permission_n" (len .BlockingDependenciesNotPermitted)}}
+
+ {{end}}
+
+ {{end}}
+
+ {{if or .BlockedByDependencies .BlockedByDependenciesNotPermitted}}
+
+ {{ctx.Locale.Tr "repo.issues.dependency.blocked_by_short"}}
+
+
+ {{range .BlockedByDependencies}}
+
+ {{end}}
+ {{if $.CanCreateIssueDependencies}}
+ {{range .BlockedByDependenciesNotPermitted}}
+
+
+
+ {{svg "octicon-lock" 16}}
+
+ #{{.Issue.Index}} {{.Issue.Title | ctx.RenderUtils.RenderEmoji}}
+
+
+
+ {{.Repository.OwnerName}}/{{.Repository.Name}}
+
+
+
+
+ {{end}}
+ {{else if .BlockedByDependenciesNotPermitted}}
+
+ {{ctx.Locale.TrN (len .BlockedByDependenciesNotPermitted) "repo.issues.dependency.no_permission_1" "repo.issues.dependency.no_permission_n" (len .BlockedByDependenciesNotPermitted)}}
+
+ {{end}}
+
+ {{end}}
+
+ {{if and .CanCreateIssueDependencies (not .Repository.IsArchived)}}
+
+
+ {{$.CsrfTokenHtml}}
+
+
+
+ {{end}}
+
+
+ {{if and .CanCreateIssueDependencies (not .Repository.IsArchived)}}
+
+
+
+
+
+
+ {{$.CsrfTokenHtml}}
+
+
+
+
{{if .Issue.IsPull}}
+ {{ctx.Locale.Tr "repo.issues.dependency.pr_remove_text"}}
+ {{else}}
+ {{ctx.Locale.Tr "repo.issues.dependency.issue_remove_text"}}
+ {{end}}
+
+ {{$ModalButtonCancelText := ctx.Locale.Tr "repo.issues.dependency.cancel"}}
+ {{$ModalButtonOkText := ctx.Locale.Tr "repo.issues.dependency.remove"}}
+ {{template "base/modal_actions_confirm" (dict "." . "ModalButtonCancelText" $ModalButtonCancelText "ModalButtonOkText" $ModalButtonOkText)}}
+
+ {{end}}
+{{end}}
diff --git a/repo/issue/sidebar/issue_management.tmpl b/repo/issue/sidebar/issue_management.tmpl
new file mode 100644
index 0000000..76edf16
--- /dev/null
+++ b/repo/issue/sidebar/issue_management.tmpl
@@ -0,0 +1,118 @@
+{{if and .IsRepoAdmin (not .Repository.IsArchived)}}
+
+
+ {{if or .PinEnabled .Issue.IsPinned}}
+
+ {{$.CsrfTokenHtml}}
+
+ {{if not .Issue.IsPinned}}
+ {{svg "octicon-pin"}}
+ {{ctx.Locale.Tr "pin"}}
+ {{else}}
+ {{svg "octicon-pin-slash"}}
+ {{ctx.Locale.Tr "unpin"}}
+ {{end}}
+
+
+ {{end}}
+
+
+ {{if .Issue.IsLocked}}
+ {{svg "octicon-key"}}
+ {{ctx.Locale.Tr "repo.issues.unlock"}}
+ {{else}}
+ {{svg "octicon-lock"}}
+ {{ctx.Locale.Tr "repo.issues.lock"}}
+ {{end}}
+
+
+
+
+
+ {{if .Issue.IsLocked}}
+ {{ctx.Locale.Tr "repo.issues.unlock.notice_1"}}
+ {{ctx.Locale.Tr "repo.issues.unlock.notice_2"}}
+ {{else}}
+ {{ctx.Locale.Tr "repo.issues.lock.notice_1"}}
+ {{ctx.Locale.Tr "repo.issues.lock.notice_2"}}
+ {{ctx.Locale.Tr "repo.issues.lock.notice_3"}}
+ {{end}}
+
+
+
+ {{.CsrfTokenHtml}}
+
+ {{if not .Issue.IsLocked}}
+
+ {{ctx.Locale.Tr "repo.issues.lock.reason"}}
+
+
+
+
+
+
+
+ {{range .LockReasons}}
+ {{.}}
+ {{end}}
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+
+
+ {{end}}
+
+
+ {{ctx.Locale.Tr "settings.cancel"}}
+
+ {{if .Issue.IsLocked}}
+ {{ctx.Locale.Tr "repo.issues.unlock_confirm"}}
+ {{else}}
+ {{ctx.Locale.Tr "repo.issues.lock_confirm"}}
+ {{end}}
+
+
+
+
+
+
+ {{svg "octicon-trash"}}
+ {{ctx.Locale.Tr "repo.issues.delete"}}
+
+
+{{end}}
diff --git a/repo/issue/sidebar/label_list.tmpl b/repo/issue/sidebar/label_list.tmpl
new file mode 100644
index 0000000..9b6195a
--- /dev/null
+++ b/repo/issue/sidebar/label_list.tmpl
@@ -0,0 +1,56 @@
+{{$pageMeta := .}}
+{{$data := .LabelsData}}
+
diff --git a/repo/issue/sidebar/label_list_item.tmpl b/repo/issue/sidebar/label_list_item.tmpl
new file mode 100644
index 0000000..5c6808d
--- /dev/null
+++ b/repo/issue/sidebar/label_list_item.tmpl
@@ -0,0 +1,11 @@
+{{$label := .Label}}
+
+ {{svg (Iif $label.ExclusiveScope "octicon-dot-fill" "octicon-check")}}
+ {{ctx.RenderUtils.RenderLabel $label}}
+
+ {{if $label.Description}}
{{$label.Description | ctx.RenderUtils.RenderEmoji}}
{{end}}
+
{{template "repo/issue/labels/label_archived" $label}}
+
+
diff --git a/repo/issue/sidebar/milestone_list.tmpl b/repo/issue/sidebar/milestone_list.tmpl
new file mode 100644
index 0000000..6495a42
--- /dev/null
+++ b/repo/issue/sidebar/milestone_list.tmpl
@@ -0,0 +1,54 @@
+{{$pageMeta := .}}
+{{$data := .MilestonesData}}
+{{$issueMilestone := NIL}}{{if and $pageMeta.Issue $pageMeta.Issue.Milestone}}{{$issueMilestone = $pageMeta.Issue.Milestone}}{{end}}
+
+
diff --git a/repo/issue/sidebar/participant_list.tmpl b/repo/issue/sidebar/participant_list.tmpl
new file mode 100644
index 0000000..11debf9
--- /dev/null
+++ b/repo/issue/sidebar/participant_list.tmpl
@@ -0,0 +1,11 @@
+{{if .Participants}}
+
+ {{ctx.Locale.Tr "repo.issues.num_participants" .NumParticipants}}
+
+{{end}}
diff --git a/repo/issue/sidebar/project_list.tmpl b/repo/issue/sidebar/project_list.tmpl
new file mode 100644
index 0000000..4520d1f
--- /dev/null
+++ b/repo/issue/sidebar/project_list.tmpl
@@ -0,0 +1,51 @@
+{{$pageMeta := .}}
+{{$data := .ProjectsData}}
+{{$issueProject := NIL}}{{if and $pageMeta.Issue $pageMeta.Issue.Project}}{{$issueProject = $pageMeta.Issue.Project}}{{end}}
+
+
diff --git a/repo/issue/sidebar/reference_link.tmpl b/repo/issue/sidebar/reference_link.tmpl
new file mode 100644
index 0000000..6b8f120
--- /dev/null
+++ b/repo/issue/sidebar/reference_link.tmpl
@@ -0,0 +1,8 @@
+
+
+ {{$issueReferenceLink := printf "%s#%d" .Issue.Repo.FullName .Issue.Index}}
+
+ {{ctx.Locale.Tr "repo.issues.reference_link" $issueReferenceLink}}
+ {{svg "octicon-copy" 14}}
+
+
diff --git a/repo/issue/sidebar/reviewer_list.tmpl b/repo/issue/sidebar/reviewer_list.tmpl
new file mode 100644
index 0000000..b08af03
--- /dev/null
+++ b/repo/issue/sidebar/reviewer_list.tmpl
@@ -0,0 +1,132 @@
+{{$pageMeta := .}}
+{{$data := .ReviewersData}}
+{{$repoOwnerName := $pageMeta.Repository.OwnerName}}
+{{$hasCandidates := or $data.Reviewers $data.TeamReviewers}}
+
diff --git a/repo/issue/sidebar/stopwatch_timetracker.tmpl b/repo/issue/sidebar/stopwatch_timetracker.tmpl
new file mode 100644
index 0000000..f107dc5
--- /dev/null
+++ b/repo/issue/sidebar/stopwatch_timetracker.tmpl
@@ -0,0 +1,93 @@
+{{if .Repository.IsTimetrackerEnabled ctx}}
+ {{if and .CanUseTimetracker (not .Repository.IsArchived)}}
+
+
+
+
+ {{if and (not $.IsStopwatchRunning) .HasUserStopwatch}}
+
{{ctx.Locale.Tr "repo.issues.tracking_already_started" .OtherStopwatchURL}}
+ {{end}}
+
+ {{if .Issue.TimeEstimate}}
+
{{ctx.Locale.Tr "repo.issues.time_estimate_display" (TimeEstimateString .Issue.TimeEstimate)}}
+ {{end}}
+
+ {{/* set time estimate modal */}}
+
+
+
+
+ {{$.CsrfTokenHtml}}
+
+
+ {{ctx.Locale.Tr "cancel"}}
+ {{ctx.Locale.Tr "repo.issues.save"}}
+
+
+
+
+
+ {{/* manually add time modal */}}
+
+
+ {{end}}
+ {{if .WorkingUsers}}
+
+ {{end}}
+{{end}}
diff --git a/repo/issue/sidebar/watch_notification.tmpl b/repo/issue/sidebar/watch_notification.tmpl
new file mode 100644
index 0000000..aafee87
--- /dev/null
+++ b/repo/issue/sidebar/watch_notification.tmpl
@@ -0,0 +1,9 @@
+{{if and $.IssueWatch (not .Repository.IsArchived)}}
+
+
+
{{ctx.Locale.Tr "notification.notifications"}}
+
+ {{template "repo/issue/view_content/watching" .}}
+
+
+{{end}}
diff --git a/repo/issue/sidebar/wip_switch.tmpl b/repo/issue/sidebar/wip_switch.tmpl
new file mode 100644
index 0000000..06a3be0
--- /dev/null
+++ b/repo/issue/sidebar/wip_switch.tmpl
@@ -0,0 +1,7 @@
+{{if and (or .HasIssuesOrPullsWritePermission .IsIssuePoster) (not .HasMerged) (not .Issue.IsClosed) (not .IsPullWorkInProgress)}}
+
+{{end}}
diff --git a/repo/issue/view.tmpl b/repo/issue/view.tmpl
new file mode 100644
index 0000000..1ef9e73
--- /dev/null
+++ b/repo/issue/view.tmpl
@@ -0,0 +1,12 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+ {{template "repo/issue/view_title" .}}
+ {{if .Issue.IsPull}}
+ {{template "repo/pulls/tab_menu" .}}
+ {{end}}
+ {{template "repo/issue/view_content" .}}
+
+
+{{template "base/footer" .}}
diff --git a/repo/issue/view_content.tmpl b/repo/issue/view_content.tmpl
new file mode 100644
index 0000000..69b5a11
--- /dev/null
+++ b/repo/issue/view_content.tmpl
@@ -0,0 +1,184 @@
+
+ {{$createdStr:= DateUtils.TimeSince .Issue.CreatedUnix}}
+
+
+ {{template "repo/issue/view_content/sidebar" .}}
+
+
+
+
+{{template "repo/issue/view_content/reference_issue_dialog" .}}
+{{template "shared/user/block_user_dialog" .}}
+
+
+ {{ctx.Locale.Tr "repo.issues.no_content"}}
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.branch.delete_desc"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
diff --git a/repo/issue/view_content/add_reaction.tmpl b/repo/issue/view_content/add_reaction.tmpl
new file mode 100644
index 0000000..6baded8
--- /dev/null
+++ b/repo/issue/view_content/add_reaction.tmpl
@@ -0,0 +1,10 @@
+{{if ctx.RootData.IsSigned}}
+
+{{end}}
diff --git a/repo/issue/view_content/attachments.tmpl b/repo/issue/view_content/attachments.tmpl
new file mode 100644
index 0000000..2155f78
--- /dev/null
+++ b/repo/issue/view_content/attachments.tmpl
@@ -0,0 +1,42 @@
+
+ {{if .Attachments}}
+
+ {{end}}
+ {{$hasThumbnails := false}}
+ {{- range .Attachments -}}
+
+
+
+ {{.Size | FileSize}}
+
+
+ {{end -}}
+
+ {{if $hasThumbnails}}
+
+
+ {{- range .Attachments -}}
+ {{if FilenameIsImage .Name}}
+ {{if not (StringUtils.Contains (StringUtils.ToString $.RenderedContent) .UUID)}}
+
+
+
+ {{end}}
+ {{end}}
+ {{end -}}
+
+ {{end}}
+
+
diff --git a/repo/issue/view_content/comments.tmpl b/repo/issue/view_content/comments.tmpl
new file mode 100644
index 0000000..2e1a67e
--- /dev/null
+++ b/repo/issue/view_content/comments.tmpl
@@ -0,0 +1,710 @@
+{{template "base/alert"}}
+{{range .Issue.Comments}}
+ {{if call $.ShouldShowCommentType .Type}}
+ {{$createdStr:= DateUtils.TimeSince .CreatedUnix}}
+
+
+ {{if eq .Type 0}}
+
+ {{else if eq .Type 1}}
+
+ {{svg "octicon-dot-fill"}}
+ {{if not .OriginalAuthor}}
+ {{template "shared/user/avatarlink" dict "user" .Poster}}
+ {{end}}
+
+ {{template "repo/issue/view_content/comments_authorlink" dict "ctxData" $ "comment" .}}
+ {{if .Issue.IsPull}}
+ {{ctx.Locale.Tr "repo.pulls.reopened_at" .EventTag $createdStr}}
+ {{else}}
+ {{ctx.Locale.Tr "repo.issues.reopened_at" .EventTag $createdStr}}
+ {{end}}
+
+
+ {{else if eq .Type 2}}
+
+ {{svg "octicon-circle-slash"}}
+ {{if not .OriginalAuthor}}
+ {{template "shared/user/avatarlink" dict "user" .Poster}}
+ {{end}}
+
+ {{template "repo/issue/view_content/comments_authorlink" dict "ctxData" $ "comment" .}}
+ {{if .Issue.IsPull}}
+ {{ctx.Locale.Tr "repo.pulls.closed_at" .EventTag $createdStr}}
+ {{else}}
+ {{ctx.Locale.Tr "repo.issues.closed_at" .EventTag $createdStr}}
+ {{end}}
+
+
+ {{else if eq .Type 28}}
+
+
{{svg "octicon-git-merge"}}
+ {{if not .OriginalAuthor}}
+ {{template "shared/user/avatarlink" dict "user" .Poster}}
+ {{end}}
+
+ {{template "repo/issue/view_content/comments_authorlink" dict "ctxData" $ "comment" .}}
+ {{$link := printf "%s/commit/%s" $.Repository.Link ($.Issue.PullRequest.MergedCommitID|PathEscape)}}
+ {{if eq $.Issue.PullRequest.Status 3}}
+ {{ctx.Locale.Tr "repo.issues.comment_manually_pull_merged_at" (HTMLFormat `%[2]s ` $link (ShortSha $.Issue.PullRequest.MergedCommitID)) (HTMLFormat "%[1]s " $.BaseTarget) $createdStr}}
+ {{else}}
+ {{ctx.Locale.Tr "repo.issues.comment_pull_merged_at" (HTMLFormat `%[2]s ` $link (ShortSha $.Issue.PullRequest.MergedCommitID)) (HTMLFormat "%[1]s " $.BaseTarget) $createdStr}}
+ {{end}}
+
+
+ {{else if eq .Type 3 5 6}}
+ {{$refFrom:= ""}}
+ {{if ne .RefRepoID .Issue.RepoID}}
+ {{$refFrom = ctx.Locale.Tr "repo.issues.ref_from" .RefRepo.FullName}}
+ {{end}}
+ {{$refTr := "repo.issues.ref_issue_from"}}
+ {{if .Issue.IsPull}}
+ {{$refTr = "repo.issues.ref_pull_from"}}
+ {{else if eq .RefAction 1}}
+ {{$refTr = "repo.issues.ref_closing_from"}}
+ {{else if eq .RefAction 2}}
+ {{$refTr = "repo.issues.ref_reopening_from"}}
+ {{end}}
+ {{$createdStr:= DateUtils.TimeSince .CreatedUnix}}
+
+
{{svg "octicon-bookmark"}}
+ {{template "shared/user/avatarlink" dict "user" .Poster}}
+ {{if eq .RefAction 3}}
{{end}}
+
+ {{template "shared/user/authorlink" .Poster}}
+ {{ctx.Locale.Tr $refTr .EventTag $createdStr (.RefCommentLink ctx) $refFrom}}
+
+ {{if eq .RefAction 3}}{{end}}
+
+
+
+ {{else if eq .Type 4}}
+
+
{{svg "octicon-bookmark"}}
+ {{template "shared/user/avatarlink" dict "user" .Poster}}
+
+ {{template "shared/user/authorlink" .Poster}}
+ {{ctx.Locale.Tr "repo.issues.commit_ref_at" .EventTag $createdStr}}
+
+
+ {{svg "octicon-git-commit"}}
+ {{.Content | SanitizeHTML}}
+
+
+ {{else if eq .Type 7}}
+ {{if or .AddedLabels .RemovedLabels}}
+
+ {{svg "octicon-tag"}}
+ {{template "shared/user/avatarlink" dict "user" .Poster}}
+
+ {{template "shared/user/authorlink" .Poster}}
+ {{if and .AddedLabels (not .RemovedLabels)}}
+ {{ctx.Locale.TrN (len .AddedLabels) "repo.issues.add_label" "repo.issues.add_labels" (ctx.RenderUtils.RenderLabels .AddedLabels $.RepoLink .Issue) $createdStr}}
+ {{else if and (not .AddedLabels) .RemovedLabels}}
+ {{ctx.Locale.TrN (len .RemovedLabels) "repo.issues.remove_label" "repo.issues.remove_labels" (ctx.RenderUtils.RenderLabels .RemovedLabels $.RepoLink .Issue) $createdStr}}
+ {{else}}
+ {{ctx.Locale.Tr "repo.issues.add_remove_labels" (ctx.RenderUtils.RenderLabels .AddedLabels $.RepoLink .Issue) (ctx.RenderUtils.RenderLabels .RemovedLabels $.RepoLink .Issue) $createdStr}}
+ {{end}}
+
+
+ {{end}}
+ {{else if eq .Type 8}}
+
+ {{svg "octicon-milestone"}}
+ {{template "shared/user/avatarlink" dict "user" .Poster}}
+
+ {{template "shared/user/authorlink" .Poster}}
+ {{if gt .OldMilestoneID 0}}{{if gt .MilestoneID 0}}{{ctx.Locale.Tr "repo.issues.change_milestone_at" .OldMilestone.Name .Milestone.Name $createdStr}}{{else}}{{ctx.Locale.Tr "repo.issues.remove_milestone_at" .OldMilestone.Name $createdStr}}{{end}}{{else if gt .MilestoneID 0}}{{ctx.Locale.Tr "repo.issues.add_milestone_at" .Milestone.Name $createdStr}}{{end}}
+
+
+ {{else if and (eq .Type 9) (gt .AssigneeID 0)}}
+
+ {{svg "octicon-person"}}
+ {{if .RemovedAssignee}}
+ {{template "shared/user/avatarlink" dict "user" .Assignee}}
+
+ {{template "shared/user/authorlink" .Assignee}}
+ {{if eq .Poster.ID .Assignee.ID}}
+ {{ctx.Locale.Tr "repo.issues.remove_self_assignment" $createdStr}}
+ {{else}}
+ {{ctx.Locale.Tr "repo.issues.remove_assignee_at" .Poster.GetDisplayName $createdStr}}
+ {{end}}
+
+ {{else}}
+ {{template "shared/user/avatarlink" dict "user" .Assignee}}
+
+ {{template "shared/user/authorlink" .Assignee}}
+ {{if eq .Poster.ID .AssigneeID}}
+ {{ctx.Locale.Tr "repo.issues.self_assign_at" $createdStr}}
+ {{else}}
+ {{ctx.Locale.Tr "repo.issues.add_assignee_at" .Poster.GetDisplayName $createdStr}}
+ {{end}}
+
+ {{end}}
+
+ {{else if eq .Type 10}}
+
+ {{svg "octicon-pencil"}}
+ {{template "shared/user/avatarlink" dict "user" .Poster}}
+
+ {{template "shared/user/authorlink" .Poster}}
+ {{ctx.Locale.Tr "repo.issues.change_title_at" (.OldTitle|ctx.RenderUtils.RenderEmoji) (.NewTitle|ctx.RenderUtils.RenderEmoji) $createdStr}}
+
+
+ {{else if eq .Type 11}}
+
+ {{svg "octicon-git-branch"}}
+ {{template "shared/user/avatarlink" dict "user" .Poster}}
+
+ {{template "shared/user/authorlink" .Poster}}
+ {{$oldRef := HTMLFormat `%s ` .OldRef}}
+ {{ctx.Locale.Tr "repo.issues.delete_branch_at" $oldRef $createdStr}}
+
+
+ {{else if eq .Type 12}}
+
+ {{svg "octicon-clock"}}
+ {{template "shared/user/avatarlink" dict "user" .Poster}}
+
+ {{template "shared/user/authorlink" .Poster}}
+ {{ctx.Locale.Tr "repo.issues.start_tracking_history" $createdStr}}
+
+
+ {{else if eq .Type 13}}
+
+ {{svg "octicon-clock"}}
+ {{template "shared/user/avatarlink" dict "user" .Poster}}
+
+ {{template "shared/user/authorlink" .Poster}}
+ {{$timeStr := .RenderedContent}} {{/* compatibility with time comments made before v1.21 */}}
+ {{if not $timeStr}}{{$timeStr = .Content|Sec2Time}}{{end}}
+ {{ctx.Locale.Tr "repo.issues.stop_tracking_history" $timeStr $createdStr}}
+
+ {{template "repo/issue/view_content/comments_delete_time" dict "ctxData" $ "comment" .}}
+
+ {{else if eq .Type 14}}
+
+ {{svg "octicon-clock"}}
+ {{template "shared/user/avatarlink" dict "user" .Poster}}
+
+ {{template "shared/user/authorlink" .Poster}}
+ {{$timeStr := .RenderedContent}} {{/* compatibility with time comments made before v1.21 */}}
+ {{if not $timeStr}}{{$timeStr = .Content|Sec2Time}}{{end}}
+ {{ctx.Locale.Tr "repo.issues.add_time_history" $timeStr $createdStr}}
+
+ {{template "repo/issue/view_content/comments_delete_time" dict "ctxData" $ "comment" .}}
+
+ {{else if eq .Type 15}}
+
+ {{svg "octicon-clock"}}
+ {{template "shared/user/avatarlink" dict "user" .Poster}}
+
+ {{template "shared/user/authorlink" .Poster}}
+ {{ctx.Locale.Tr "repo.issues.cancel_tracking_history" $createdStr}}
+
+
+ {{else if eq .Type 16}}
+
+ {{svg "octicon-clock"}}
+ {{template "shared/user/avatarlink" dict "user" .Poster}}
+
+ {{template "shared/user/authorlink" .Poster}}
+ {{$dueDate := DateUtils.AbsoluteLong (.Content|DateUtils.ParseLegacy)}}
+ {{ctx.Locale.Tr "repo.issues.due_date_added" $dueDate $createdStr}}
+
+
+ {{else if eq .Type 17}}
+
+ {{svg "octicon-clock"}}
+ {{template "shared/user/avatarlink" dict "user" .Poster}}
+
+ {{template "shared/user/authorlink" .Poster}}
+ {{$parsedDeadline := StringUtils.Split .Content "|"}}
+ {{if eq (len $parsedDeadline) 2}}
+ {{$to := DateUtils.AbsoluteLong ((index $parsedDeadline 0)|DateUtils.ParseLegacy)}}
+ {{$from := DateUtils.AbsoluteLong ((index $parsedDeadline 1)|DateUtils.ParseLegacy)}}
+ {{ctx.Locale.Tr "repo.issues.due_date_modified" $to $from $createdStr}}
+ {{end}}
+
+
+ {{else if eq .Type 18}}
+
+ {{svg "octicon-clock"}}
+ {{template "shared/user/avatarlink" dict "user" .Poster}}
+
+ {{template "shared/user/authorlink" .Poster}}
+ {{$dueDate := DateUtils.AbsoluteLong (.Content|DateUtils.ParseLegacy)}}
+ {{ctx.Locale.Tr "repo.issues.due_date_remove" $dueDate $createdStr}}
+
+
+ {{else if eq .Type 19}}
+
+
{{svg "octicon-package-dependents"}}
+ {{template "shared/user/avatarlink" dict "user" .Poster}}
+
+ {{template "shared/user/authorlink" .Poster}}
+ {{ctx.Locale.Tr "repo.issues.dependency.added_dependency" $createdStr}}
+
+ {{if .DependentIssue}}
+
+ {{end}}
+
+ {{else if eq .Type 20}}
+
+
{{svg "octicon-package-dependents"}}
+ {{template "shared/user/avatarlink" dict "user" .Poster}}
+
+ {{template "shared/user/authorlink" .Poster}}
+ {{ctx.Locale.Tr "repo.issues.dependency.removed_dependency" $createdStr}}
+
+ {{if .DependentIssue}}
+
+ {{end}}
+
+ {{else if eq .Type 22}}
+
+
+ {{$reviewType := -1}}
+ {{if .Review}}{{$reviewType = .Review.Type}}{{end}}
+ {{if not .OriginalAuthor}}
+ {{/* Some timeline avatars need a offset to correctly align with their speech bubble.
+ The condition depends on whether the comment has contents/attachments,
+ review's comment is also controlled/rendered by issue comment's Content field */}}
+
+ {{ctx.AvatarUtils.Avatar .Poster 40}}
+
+ {{end}}
+
+ {{if .Review}}{{svg (printf "octicon-%s" .Review.Type.Icon)}}{{end}}
+
+
+ {{template "repo/issue/view_content/comments_authorlink" dict "ctxData" $ "comment" .}}
+ {{if eq $reviewType 1}}
+ {{ctx.Locale.Tr "repo.issues.review.approve" $createdStr}}
+ {{else if eq $reviewType 2}}
+ {{ctx.Locale.Tr "repo.issues.review.comment" $createdStr}}
+ {{else if eq $reviewType 3}}
+ {{ctx.Locale.Tr "repo.issues.review.reject" $createdStr}}
+ {{else}}
+ {{ctx.Locale.Tr "repo.issues.review.comment" $createdStr}}
+ {{end}}
+ {{if and .Review .Review.Dismissed}}
+ {{ctx.Locale.Tr "repo.issues.review.dismissed_label"}}
+ {{end}}
+
+
+ {{if or .Content .Attachments}}
+
+ {{end}}
+
+ {{if and .Review .Review.CodeComments}}
+
+ {{range $filename, $lines := .Review.CodeComments}}
+ {{range $line, $comms := $lines}}
+ {{template "repo/issue/view_content/conversation" dict "." $ "comments" $comms}}
+ {{end}}
+ {{end}}
+
+ {{end}}
+
+ {{else if eq .Type 23}}
+
+ {{svg "octicon-lock"}}
+ {{template "shared/user/avatarlink" dict "user" .Poster}}
+ {{if .Content}}
+
+ {{template "shared/user/authorlink" .Poster}}
+ {{ctx.Locale.Tr "repo.issues.lock_with_reason" .Content $createdStr}}
+
+ {{else}}
+
+ {{template "shared/user/authorlink" .Poster}}
+ {{ctx.Locale.Tr "repo.issues.lock_no_reason" $createdStr}}
+
+ {{end}}
+
+ {{else if eq .Type 24}}
+
+ {{svg "octicon-key"}}
+ {{template "shared/user/avatarlink" dict "user" .Poster}}
+
+ {{template "shared/user/authorlink" .Poster}}
+ {{ctx.Locale.Tr "repo.issues.unlock_comment" $createdStr}}
+
+
+ {{else if eq .Type 25}}
+
+ {{svg "octicon-git-branch"}}
+ {{if not .OriginalAuthor}}
+ {{template "shared/user/avatarlink" dict "user" .Poster}}
+ {{end}}
+
+ {{template "repo/issue/view_content/comments_authorlink" dict "ctxData" $ "comment" .}}
+ {{ctx.Locale.Tr "repo.pulls.change_target_branch_at" .OldRef .NewRef $createdStr}}
+
+
+ {{else if eq .Type 26}}
+
+
{{svg "octicon-clock"}}
+ {{template "shared/user/avatarlink" dict "user" .Poster}}
+
+ {{template "shared/user/authorlink" .Poster}}
+
+ {{ctx.Locale.Tr "repo.issues.del_time_history" $createdStr}}
+
+
+ {{svg "octicon-clock"}}
+ {{if .RenderedContent}}
+ {{/* compatibility with time comments made before v1.21 */}}
+ {{.RenderedContent}}
+ {{else}}
+ - {{.Content|Sec2Time}}
+ {{end}}
+
+
+ {{else if eq .Type 27}}
+
+ {{svg "octicon-eye"}}
+ {{template "shared/user/avatarlink" dict "user" .Poster}}
+
+ {{template "shared/user/authorlink" .Poster}}
+ {{if (gt .AssigneeID 0)}}
+ {{if .RemovedAssignee}}
+ {{if eq .PosterID .AssigneeID}}
+ {{ctx.Locale.Tr "repo.issues.review.remove_review_request_self" $createdStr}}
+ {{else}}
+ {{ctx.Locale.Tr "repo.issues.review.remove_review_request" .Assignee.GetDisplayName $createdStr}}
+ {{end}}
+ {{else}}
+ {{ctx.Locale.Tr "repo.issues.review.add_review_request" .Assignee.GetDisplayName $createdStr}}
+ {{end}}
+ {{else}}
+
+ {{$teamName := "Ghost Team"}}
+ {{if .AssigneeTeam}}
+ {{$teamName = .AssigneeTeam.Name}}
+ {{end}}
+ {{if .RemovedAssignee}}
+ {{ctx.Locale.Tr "repo.issues.review.remove_review_request" $teamName $createdStr}}
+ {{else}}
+ {{ctx.Locale.Tr "repo.issues.review.add_review_request" $teamName $createdStr}}
+ {{end}}
+ {{end}}
+
+
+ {{else if and (eq .Type 29) (or (gt .CommitsNum 0) .IsForcePush)}}
+
+ {{if and .Issue.IsClosed (gt .ID $.LatestCloseCommentID)}}
+ {{continue}}
+ {{end}}
+
+
{{svg "octicon-repo-push"}}
+
+ {{template "shared/user/authorlink" .Poster}}
+ {{if .IsForcePush}}
+ {{ctx.Locale.Tr "repo.issues.force_push_codes" $.Issue.PullRequest.HeadBranch (ShortSha .OldCommit) ($.Issue.Repo.CommitLink .OldCommit) (ShortSha .NewCommit) ($.Issue.Repo.CommitLink .NewCommit) $createdStr}}
+ {{else}}
+ {{ctx.Locale.TrN (len .Commits) "repo.issues.push_commit_1" "repo.issues.push_commits_n" (len .Commits) $createdStr}}
+ {{end}}
+
+ {{if and .IsForcePush $.Issue.PullRequest.BaseRepo.Name}}
+
+ {{ctx.Locale.Tr "repo.issues.force_push_compare"}}
+
+ {{end}}
+
+ {{if not .IsForcePush}}
+ {{template "repo/commits_list_small" dict "comment" . "root" $}}
+ {{end}}
+ {{else if eq .Type 30}}
+
+ {{svg "octicon-project"}}
+ {{template "shared/user/avatarlink" dict "user" .Poster}}
+
+ {{template "shared/user/authorlink" .Poster}}
+ {{$oldProjectDisplayHtml := "Unknown Project"}}
+ {{if .OldProject}}
+ {{$tooltip := ctx.Locale.Tr "projects.deleted.display_name"}}
+ {{if not .OldProject.IsGhost}}
+ {{$tooltip = ctx.Locale.Tr (printf "projects.type-%d.display_name" .OldProject.Type)}}
+ {{end}}
+ {{$oldProjectDisplayHtml = HTMLFormat `%s ` $tooltip .OldProject.Title}}
+ {{end}}
+ {{$newProjectDisplayHtml := "Unknown Project"}}
+ {{if .Project}}
+ {{$tooltip := ctx.Locale.Tr "projects.deleted.display_name"}}
+ {{if not .Project.IsGhost}}
+ {{$tooltip = ctx.Locale.Tr (printf "projects.type-%d.display_name" .Project.Type)}}
+ {{end}}
+ {{$newProjectDisplayHtml = HTMLFormat `%s ` $tooltip .Project.Title}}
+ {{end}}
+ {{if and (gt .OldProjectID 0) (gt .ProjectID 0)}}
+ {{ctx.Locale.Tr "repo.issues.change_project_at" $oldProjectDisplayHtml $newProjectDisplayHtml $createdStr}}
+ {{else if gt .OldProjectID 0}}
+ {{ctx.Locale.Tr "repo.issues.remove_project_at" $oldProjectDisplayHtml $createdStr}}
+ {{else if gt .ProjectID 0}}
+ {{ctx.Locale.Tr "repo.issues.add_project_at" $newProjectDisplayHtml $createdStr}}
+ {{end}}
+
+
+ {{else if eq .Type 31}}
+ {{if not $.UnitProjectsGlobalDisabled}}
+
+
{{svg "octicon-project"}}
+ {{template "shared/user/avatarlink" dict "user" .Poster}}
+
+ {{template "shared/user/authorlink" .Poster}}
+ {{$newProjectDisplay := .CommentMetaData.ProjectTitle}}
+ {{if .Project}}
+ {{$trKey := printf "projects.type-%d.display_name" .Project.Type}}
+ {{$newProjectDisplay = HTMLFormat `%s %s ` (svg .Project.IconName) (.Project.Link ctx) (ctx.Locale.Tr $trKey) .Project.Title}}
+ {{end}}
+ {{ctx.Locale.Tr "repo.issues.move_to_column_of_project" .CommentMetaData.ProjectColumnTitle $newProjectDisplay $createdStr}}
+
+
+ {{end}}
+ {{else if eq .Type 32}}
+
+
+
+
+
+
{{svg "octicon-x" 16}}
+
+ {{template "shared/user/authorlink" .Poster}}
+ {{$reviewerName := ""}}
+ {{if .Review}}
+ {{if eq .Review.OriginalAuthor ""}}
+ {{$reviewerName = .Review.Reviewer.Name}}
+ {{else}}
+ {{$reviewerName = .Review.OriginalAuthor}}
+ {{end}}
+ {{end}}
+ {{ctx.Locale.Tr "repo.issues.review.dismissed" $reviewerName $createdStr}}
+
+
+ {{if .Content}}
+
+ {{end}}
+
+ {{else if eq .Type 33}}
+
+ {{svg "octicon-git-branch"}}
+ {{template "shared/user/avatarlink" dict "user" .Poster}}
+
+ {{template "shared/user/authorlink" .Poster}}
+ {{if and .OldRef .NewRef}}
+ {{ctx.Locale.Tr "repo.issues.change_ref_at" .OldRef .NewRef $createdStr}}
+ {{else if .OldRef}}
+ {{ctx.Locale.Tr "repo.issues.remove_ref_at" .OldRef $createdStr}}
+ {{else}}
+ {{ctx.Locale.Tr "repo.issues.add_ref_at" .NewRef $createdStr}}
+ {{end}}
+
+
+ {{else if or (eq .Type 34) (eq .Type 35)}}
+
+ {{svg "octicon-git-merge" 16}}
+
+ {{template "repo/issue/view_content/comments_authorlink" dict "ctxData" $ "comment" .}}
+ {{if eq .Type 34}}{{ctx.Locale.Tr "repo.pulls.auto_merge_newly_scheduled_comment" $createdStr}}
+ {{else}}{{ctx.Locale.Tr "repo.pulls.auto_merge_canceled_schedule_comment" $createdStr}}{{end}}
+
+
+ {{else if or (eq .Type 36) (eq .Type 37)}}
+
+ {{svg "octicon-pin" 16}}
+ {{template "shared/user/avatarlink" dict "user" .Poster}}
+
+ {{template "shared/user/authorlink" .Poster}}
+ {{if eq .Type 36}}{{ctx.Locale.Tr "repo.issues.pin_comment" $createdStr}}
+ {{else}}{{ctx.Locale.Tr "repo.issues.unpin_comment" $createdStr}}{{end}}
+
+
+ {{else if eq .Type 38}}
+
+ {{svg "octicon-clock"}}
+ {{template "shared/user/avatarlink" dict "user" .Poster}}
+
+ {{template "shared/user/authorlink" .Poster}}
+ {{$timeStr := .Content|TimeEstimateString}}
+ {{if $timeStr}}
+ {{ctx.Locale.Tr "repo.issues.change_time_estimate_at" $timeStr $createdStr}}
+ {{else}}
+ {{ctx.Locale.Tr "repo.issues.remove_time_estimate_at" $createdStr}}
+ {{end}}
+
+
+ {{end}}
+ {{end}}
+{{end}}
diff --git a/repo/issue/view_content/comments_authorlink.tmpl b/repo/issue/view_content/comments_authorlink.tmpl
new file mode 100644
index 0000000..f652a0b
--- /dev/null
+++ b/repo/issue/view_content/comments_authorlink.tmpl
@@ -0,0 +1,11 @@
+{{if .comment.OriginalAuthor}}
+
+ {{svg (MigrationIcon .ctxData.Repository.GetOriginalURLHostname)}}
+ {{.comment.OriginalAuthor}}
+
+ {{if .ctxData.Repository.OriginalURL}}
+ ({{ctx.Locale.Tr "repo.migrated_from" .ctxData.Repository.OriginalURL .ctxData.Repository.GetOriginalURLHostname}})
+ {{end}}
+{{else}}
+ {{template "shared/user/authorlink" .comment.Poster}}
+{{end}}
diff --git a/repo/issue/view_content/comments_delete_time.tmpl b/repo/issue/view_content/comments_delete_time.tmpl
new file mode 100644
index 0000000..5534a30
--- /dev/null
+++ b/repo/issue/view_content/comments_delete_time.tmpl
@@ -0,0 +1,14 @@
+{{if and .comment.Time (.ctxData.Repository.IsTimetrackerEnabled ctx)}} {{/* compatibility with time comments made before v1.14 */}}
+ {{if (not .comment.Time.Deleted)}}
+ {{if (or .ctxData.IsAdmin (and .ctxData.IsSigned (eq .ctxData.SignedUserID .comment.PosterID)))}}
+
+
+ {{svg "octicon-trash"}}
+
+
+ {{end}}
+ {{end}}
+{{end}}
diff --git a/repo/issue/view_content/context_menu.tmpl b/repo/issue/view_content/context_menu.tmpl
new file mode 100644
index 0000000..749a2fa
--- /dev/null
+++ b/repo/issue/view_content/context_menu.tmpl
@@ -0,0 +1,44 @@
+
+
+
+
diff --git a/repo/issue/view_content/conversation.tmpl b/repo/issue/view_content/conversation.tmpl
new file mode 100644
index 0000000..1480329
--- /dev/null
+++ b/repo/issue/view_content/conversation.tmpl
@@ -0,0 +1,143 @@
+{{if len .comments}}
+ {{$comment := index .comments 0}}
+ {{$invalid := $comment.Invalidated}}
+ {{$resolved := $comment.IsResolved}}
+ {{$resolveDoer := $comment.ResolveDoer}}
+ {{$hasReview := and $comment.Review}}
+ {{$isReviewPending := and $hasReview (eq $comment.Review.Type 0)}}
+
+
+ {{$diff := (CommentMustAsDiff ctx $comment)}}
+ {{if $diff}}
+ {{$file := (index $diff.Files 0)}}
+
+ {{end}}
+
+
+{{else}}
+ {{template "repo/diff/conversation_outdated"}}
+{{end}}
diff --git a/repo/issue/view_content/pull.tmpl b/repo/issue/view_content/pull.tmpl
new file mode 100644
index 0000000..d117bfb
--- /dev/null
+++ b/repo/issue/view_content/pull.tmpl
@@ -0,0 +1,398 @@
+{{if and .Issue.PullRequest.HasMerged (not .IsPullBranchDeletable)}}
+{{/* Then the merge box will not be displayed because this page already contains enough information */}}
+{{else}}
+
+{{end}}
diff --git a/repo/issue/view_content/pull_merge_instruction.tmpl b/repo/issue/view_content/pull_merge_instruction.tmpl
new file mode 100644
index 0000000..9a3e2cb
--- /dev/null
+++ b/repo/issue/view_content/pull_merge_instruction.tmpl
@@ -0,0 +1,55 @@
+
+ {{ctx.Locale.Tr "repo.pulls.cmd_instruction_hint"}}
+
+
{{ctx.Locale.Tr "repo.pulls.cmd_instruction_checkout_title"}} {{ctx.Locale.Tr "repo.pulls.cmd_instruction_checkout_desc"}}
+ {{$localBranch := .PullRequest.HeadBranch}}
+ {{if ne .PullRequest.HeadRepo.ID .PullRequest.BaseRepo.ID}}
+ {{$localBranch = print .PullRequest.HeadRepo.OwnerName "-" .PullRequest.HeadBranch}}
+ {{end}}
+
+ {{if eq .PullRequest.Flow 0}}
+
git fetch -u {{if ne .PullRequest.HeadRepo.ID .PullRequest.BaseRepo.ID}} {{else}}origin{{end}} {{.PullRequest.HeadBranch}}:{{$localBranch}}
+ {{else}}
+
git fetch -u origin {{.PullRequest.GetGitRefName}}:{{$localBranch}}
+ {{end}}
+
git checkout {{$localBranch}}
+
+ {{if .ShowMergeInstructions}}
+
+
{{ctx.Locale.Tr "repo.pulls.cmd_instruction_merge_title"}}
+ {{ctx.Locale.Tr "repo.pulls.cmd_instruction_merge_desc"}}
+ {{if not .AutodetectManualMerge}}
+
{{ctx.Locale.Tr "repo.pulls.cmd_instruction_merge_warning"}}
+ {{end}}
+
+
+
+
git checkout {{.PullRequest.BaseBranch}}
+
git merge --no-ff {{$localBranch}}
+
+
+
git checkout {{.PullRequest.BaseBranch}}
+
git merge --ff-only {{$localBranch}}
+
+
+
git checkout {{$localBranch}}
+
git rebase {{.PullRequest.BaseBranch}}
+
git checkout {{.PullRequest.BaseBranch}}
+
git merge --no-ff {{$localBranch}}
+
+
+
git checkout {{.PullRequest.BaseBranch}}
+
git merge --squash {{$localBranch}}
+
+
+
git checkout {{.PullRequest.BaseBranch}}
+
git merge --ff-only {{$localBranch}}
+
+
+
git checkout {{.PullRequest.BaseBranch}}
+
git merge {{$localBranch}}
+
+
git push origin {{.PullRequest.BaseBranch}}
+
+ {{end}}
+
diff --git a/repo/issue/view_content/reactions.tmpl b/repo/issue/view_content/reactions.tmpl
new file mode 100644
index 0000000..0011efe
--- /dev/null
+++ b/repo/issue/view_content/reactions.tmpl
@@ -0,0 +1,17 @@
+
+{{range $key, $value := .Reactions}}
+ {{$hasReacted := $value.HasUser ctx.RootData.SignedUserID}}
+
+{{end}}
+{{if AllowedReactions}}
+ {{template "repo/issue/view_content/add_reaction" dict "ActionURL" .ActionURL}}
+{{end}}
+
diff --git a/repo/issue/view_content/reference_issue_dialog.tmpl b/repo/issue/view_content/reference_issue_dialog.tmpl
new file mode 100644
index 0000000..d6c9081
--- /dev/null
+++ b/repo/issue/view_content/reference_issue_dialog.tmpl
@@ -0,0 +1,28 @@
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+
{{ctx.Locale.Tr "repository"}}
+
+
{{.Repository.FullName}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.milestones.title"}}
+
+
+
+ {{ctx.Locale.Tr "repo.issues.reference_issue.body"}}
+
+
+
+ {{ctx.Locale.Tr "repo.issues.create"}}
+
+
+
+
diff --git a/repo/issue/view_content/show_role.tmpl b/repo/issue/view_content/show_role.tmpl
new file mode 100644
index 0000000..40c8b67
--- /dev/null
+++ b/repo/issue/view_content/show_role.tmpl
@@ -0,0 +1,10 @@
+{{if and .ShowRole.IsPoster (not .IgnorePoster)}}
+
+ {{ctx.Locale.Tr "repo.issues.author"}}
+
+{{end}}
+{{if .ShowRole.RoleInRepo}}
+
+ {{.ShowRole.RoleInRepo.LocaleString ctx.Locale}}
+
+{{end}}
diff --git a/repo/issue/view_content/sidebar.tmpl b/repo/issue/view_content/sidebar.tmpl
new file mode 100644
index 0000000..987a882
--- /dev/null
+++ b/repo/issue/view_content/sidebar.tmpl
@@ -0,0 +1,26 @@
+
+ {{template "repo/issue/branch_selector_field" $}}{{/* TODO: RemoveIssueRef: template "repo/issue/branch_selector_field" $*/}}
+
+ {{if .Issue.IsPull}}
+ {{template "repo/issue/sidebar/reviewer_list" $.IssuePageMetaData}}
+ {{template "repo/issue/sidebar/wip_switch" $}}
+
+ {{end}}
+
+ {{template "repo/issue/sidebar/label_list" $.IssuePageMetaData}}
+
+ {{template "repo/issue/sidebar/milestone_list" $.IssuePageMetaData}}
+ {{if .IsProjectsEnabled}}
+ {{template "repo/issue/sidebar/project_list" $.IssuePageMetaData}}
+ {{end}}
+ {{template "repo/issue/sidebar/assignee_list" $.IssuePageMetaData}}
+
+ {{template "repo/issue/sidebar/participant_list" $}}
+ {{template "repo/issue/sidebar/watch_notification" $}}
+ {{template "repo/issue/sidebar/stopwatch_timetracker" $}}
+ {{template "repo/issue/sidebar/due_date" $}}
+ {{template "repo/issue/sidebar/issue_dependencies" $}}
+ {{template "repo/issue/sidebar/reference_link" $}}
+ {{template "repo/issue/sidebar/issue_management" $}}
+ {{template "repo/issue/sidebar/allow_maintainer_edit" $}}
+
diff --git a/repo/issue/view_content/update_branch_by_merge.tmpl b/repo/issue/view_content/update_branch_by_merge.tmpl
new file mode 100644
index 0000000..adce052
--- /dev/null
+++ b/repo/issue/view_content/update_branch_by_merge.tmpl
@@ -0,0 +1,37 @@
+{{if and (gt $.Issue.PullRequest.CommitsBehind 0) (not $.Issue.IsClosed) (not $.Issue.PullRequest.IsChecking) (not $.IsPullFilesConflicted) (not $.IsPullRequestBroken)}}
+
+
+
+ {{svg "octicon-alert"}}
+ {{ctx.Locale.Tr "repo.pulls.outdated_with_base_branch"}}
+
+
+ {{if and $.UpdateAllowed $.UpdateByRebaseAllowed}}
+
+ {{end}}
+ {{if and $.UpdateAllowed (not $.UpdateByRebaseAllowed)}}
+
+ {{$.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "repo.pulls.update_branch"}}
+
+
+ {{end}}
+
+
+{{end}}
diff --git a/repo/issue/view_content/watching.tmpl b/repo/issue/view_content/watching.tmpl
new file mode 100644
index 0000000..05936d0
--- /dev/null
+++ b/repo/issue/view_content/watching.tmpl
@@ -0,0 +1,12 @@
+
+
+
+ {{if $.IssueWatch.IsWatching}}
+ {{svg "octicon-mute" 16 "tw-mr-2"}}
+ {{ctx.Locale.Tr "repo.issues.unsubscribe"}}
+ {{else}}
+ {{svg "octicon-unmute" 16 "tw-mr-2"}}
+ {{ctx.Locale.Tr "repo.issues.subscribe"}}
+ {{end}}
+
+
diff --git a/repo/issue/view_title.tmpl b/repo/issue/view_title.tmpl
new file mode 100644
index 0000000..7bb00ff
--- /dev/null
+++ b/repo/issue/view_title.tmpl
@@ -0,0 +1,139 @@
+{{if .Flash}}
+
+ {{template "base/alert" .}}
+
+{{end}}
+
+
diff --git a/repo/latest_commit.tmpl b/repo/latest_commit.tmpl
new file mode 100644
index 0000000..b815c7a
--- /dev/null
+++ b/repo/latest_commit.tmpl
@@ -0,0 +1,31 @@
+{{if not .LatestCommit}}
+ …
+{{else}}
+ {{if .LatestCommitUser}}
+ {{ctx.AvatarUtils.Avatar .LatestCommitUser 24}}
+ {{if and .LatestCommitUser.FullName DefaultShowFullName}}
+ {{.LatestCommitUser.FullName}}
+ {{else}}
+ {{if .LatestCommit.Author}}{{.LatestCommit.Author.Name}}{{else}}{{.LatestCommitUser.Name}}{{end}}
+ {{end}}
+ {{else}}
+ {{if .LatestCommit.Author}}
+ {{ctx.AvatarUtils.AvatarByEmail .LatestCommit.Author.Email .LatestCommit.Author.Name 24}}
+ {{.LatestCommit.Author.Name}}
+ {{end}}
+ {{end}}
+
+ {{ShortSha .LatestCommit.ID.String}}
+ {{if .LatestCommit.Signature}}
+ {{template "repo/shabox_badge" dict "root" $ "verification" .LatestCommitVerification}}
+ {{end}}
+
+ {{template "repo/commit_statuses" dict "Status" .LatestCommitStatus "Statuses" .LatestCommitStatuses}}
+ {{$commitLink:= printf "%s/commit/%s" .RepoLink (PathEscape .LatestCommit.ID.String)}}
+ {{ctx.RenderUtils.RenderCommitMessageLinkSubject .LatestCommit.Message $commitLink ($.Repository.ComposeMetas ctx)}}
+ {{if IsMultilineCommitMessage .LatestCommit.Message}}
+ ...
+ {{ctx.RenderUtils.RenderCommitBody .LatestCommit.Message ($.Repository.ComposeMetas ctx)}}
+ {{end}}
+
+{{end}}
diff --git a/repo/migrate/codebase.tmpl b/repo/migrate/codebase.tmpl
new file mode 100644
index 0000000..c8059b7
--- /dev/null
+++ b/repo/migrate/codebase.tmpl
@@ -0,0 +1,116 @@
+{{template "base/head" .}}
+
+
+
+
+ {{template "base/disable_form_autofill"}}
+ {{.CsrfTokenHtml}}
+
+
+ {{template "base/alert" .}}
+
+ {{ctx.Locale.Tr "repo.migrate.clone_address"}}
+
+
+ {{ctx.Locale.Tr "repo.migrate.clone_address_desc"}}{{if .ContextUser.CanImportLocal}} {{ctx.Locale.Tr "repo.migrate.clone_local_path"}}{{end}}
+
+
+
+
+ {{ctx.Locale.Tr "username"}}
+
+
+
+ {{ctx.Locale.Tr "password"}}
+
+
+
+ {{template "repo/migrate/options" .}}
+
+
+
+
{{ctx.Locale.Tr "repo.migrate_items"}}
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_milestones"}}
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_labels"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_issues"}}
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_merge_requests"}}
+
+
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.owner"}}
+
+
+
+ {{ctx.AvatarUtils.Avatar .ContextUser 28 "mini"}}
+ {{.ContextUser.ShortName 40}}
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.repo_name"}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.repo_desc"}}
+ {{.description}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_repo"}}
+
+
+
+
+
+
+
+{{template "base/footer" .}}
diff --git a/repo/migrate/codecommit.tmpl b/repo/migrate/codecommit.tmpl
new file mode 100644
index 0000000..d1cebd0
--- /dev/null
+++ b/repo/migrate/codecommit.tmpl
@@ -0,0 +1,117 @@
+{{template "base/head" .}}
+
+
+
+
+ {{template "base/disable_form_autofill"}}
+ {{.CsrfTokenHtml}}
+
+
+ {{template "base/alert" .}}
+
+ {{ctx.Locale.Tr "repo.migrate.clone_address"}}
+
+
+ {{ctx.Locale.Tr "repo.migrate.clone_address_desc"}}{{if .ContextUser.CanImportLocal}} {{ctx.Locale.Tr "repo.migrate.clone_local_path"}}{{end}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.migrate.codecommit.aws_access_key_id"}}
+
+
+
+ {{ctx.Locale.Tr "repo.migrate.codecommit.aws_secret_access_key"}}
+
+
+
+ {{ctx.Locale.Tr "repo.migrate.codecommit.https_git_credentials_username"}}
+
+
+
+ {{ctx.Locale.Tr "repo.migrate.codecommit.https_git_credentials_password"}}
+
+
+
+ {{if not .DisableNewPullMirrors}}
+
+
{{ctx.Locale.Tr "repo.migrate_options"}}
+
+
+ {{ctx.Locale.Tr "repo.migrate_options_mirror_helper"}}
+
+
+ {{end}}
+
+
+
+
{{ctx.Locale.Tr "repo.migrate_items"}}
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_pullrequests"}}
+
+
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.owner"}}
+
+
+
+ {{ctx.AvatarUtils.Avatar .ContextUser 28 "mini"}}
+ {{.ContextUser.ShortName 40}}
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.repo_name"}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.repo_desc"}}
+ {{.description}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_repo"}}
+
+
+
+
+
+
+
+{{template "base/footer" .}}
diff --git a/repo/migrate/git.tmpl b/repo/migrate/git.tmpl
new file mode 100644
index 0000000..9c5f0d7
--- /dev/null
+++ b/repo/migrate/git.tmpl
@@ -0,0 +1,90 @@
+{{template "base/head" .}}
+
+
+
+
+ {{template "base/disable_form_autofill"}}
+ {{.CsrfTokenHtml}}
+
+
+ {{template "base/alert" .}}
+
+ {{ctx.Locale.Tr "repo.migrate.clone_address"}}
+
+
+ {{ctx.Locale.Tr "repo.migrate.clone_address_desc"}}{{if .ContextUser.CanImportLocal}} {{ctx.Locale.Tr "repo.migrate.clone_local_path"}}{{end}}
+
+
+
+ {{ctx.Locale.Tr "username"}}
+
+
+
+ {{ctx.Locale.Tr "password"}}
+
+
+
+ {{template "repo/migrate/options" .}}
+
+
+
+
+
{{ctx.Locale.Tr "repo.owner"}}
+
+
+
+ {{ctx.AvatarUtils.Avatar .ContextUser}}
+ {{.ContextUser.ShortName 40}}
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.repo_name"}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.repo_desc"}}
+ {{.description}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_repo"}}
+
+
+
+
+
+
+
+{{template "base/footer" .}}
diff --git a/repo/migrate/gitbucket.tmpl b/repo/migrate/gitbucket.tmpl
new file mode 100644
index 0000000..b667fa8
--- /dev/null
+++ b/repo/migrate/gitbucket.tmpl
@@ -0,0 +1,132 @@
+{{template "base/head" .}}
+
+
+
+
+ {{template "base/disable_form_autofill"}}
+ {{.CsrfTokenHtml}}
+
+
+ {{template "base/alert" .}}
+
+ {{ctx.Locale.Tr "repo.migrate.clone_address"}}
+
+
+ {{ctx.Locale.Tr "repo.migrate.clone_address_desc"}}{{if .ContextUser.CanImportLocal}} {{ctx.Locale.Tr "repo.migrate.clone_local_path"}}{{end}}
+
+
+
+
+ {{ctx.Locale.Tr "username"}}
+
+
+
+ {{ctx.Locale.Tr "password"}}
+
+
+
+ {{template "repo/migrate/options" .}}
+
+
+
{{ctx.Locale.Tr "repo.migrate_items"}}
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_wiki"}}
+
+
+
+
+
{{ctx.Locale.Tr "repo.migrate.migrate_items_options"}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_labels"}}
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_issues"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_pullrequests"}}
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_releases"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_milestones"}}
+
+
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.owner"}}
+
+
+
+ {{ctx.AvatarUtils.Avatar .ContextUser 28 "mini"}}
+ {{.ContextUser.ShortName 40}}
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.repo_name"}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.repo_desc"}}
+ {{.description}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_repo"}}
+
+
+
+
+
+
+
+{{template "base/footer" .}}
diff --git a/repo/migrate/gitea.tmpl b/repo/migrate/gitea.tmpl
new file mode 100644
index 0000000..3b8f377
--- /dev/null
+++ b/repo/migrate/gitea.tmpl
@@ -0,0 +1,128 @@
+{{template "base/head" .}}
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+ {{template "base/alert" .}}
+
+ {{ctx.Locale.Tr "repo.migrate.clone_address"}}
+
+
+ {{ctx.Locale.Tr "repo.migrate.clone_address_desc"}}{{if .ContextUser.CanImportLocal}} {{ctx.Locale.Tr "repo.migrate.clone_local_path"}}{{end}}
+
+
+
+
+
+ {{template "repo/migrate/options" .}}
+
+
+
{{ctx.Locale.Tr "repo.migrate_items"}}
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_wiki"}}
+
+
+
+
+
{{ctx.Locale.Tr "repo.migrate.migrate_items_options"}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_labels"}}
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_issues"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_pullrequests"}}
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_releases"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_milestones"}}
+
+
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.owner"}}
+
+
+
+ {{ctx.AvatarUtils.Avatar .ContextUser}}
+ {{.ContextUser.ShortName 40}}
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.repo_name"}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.repo_desc"}}
+ {{.description}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_repo"}}
+
+
+
+
+
+
+
+{{template "base/footer" .}}
diff --git a/repo/migrate/github.tmpl b/repo/migrate/github.tmpl
new file mode 100644
index 0000000..3535edd
--- /dev/null
+++ b/repo/migrate/github.tmpl
@@ -0,0 +1,130 @@
+{{template "base/head" .}}
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+ {{template "base/alert" .}}
+
+ {{ctx.Locale.Tr "repo.migrate.clone_address"}}
+
+
+ {{ctx.Locale.Tr "repo.migrate.clone_address_desc"}}
+
+
+
+
+
+ {{template "repo/migrate/options" .}}
+
+
+
{{ctx.Locale.Tr "repo.migrate_items"}}
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_wiki"}}
+
+
+
+
{{ctx.Locale.Tr "repo.migrate.migrate_items_options"}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_labels"}}
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_issues"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_pullrequests"}}
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_releases"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_milestones"}}
+
+
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.owner"}}
+
+
+
+ {{ctx.AvatarUtils.Avatar .ContextUser 28 "mini"}}
+ {{.ContextUser.ShortName 40}}
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.repo_name"}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.repo_desc"}}
+ {{.description}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_repo"}}
+
+
+
+
+
+
+
+{{template "base/footer" .}}
diff --git a/repo/migrate/gitlab.tmpl b/repo/migrate/gitlab.tmpl
new file mode 100644
index 0000000..f705fb3
--- /dev/null
+++ b/repo/migrate/gitlab.tmpl
@@ -0,0 +1,127 @@
+{{template "base/head" .}}
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+ {{template "base/alert" .}}
+
+ {{ctx.Locale.Tr "repo.migrate.clone_address"}}
+
+
+ {{ctx.Locale.Tr "repo.migrate.clone_address_desc"}}{{if .ContextUser.CanImportLocal}} {{ctx.Locale.Tr "repo.migrate.clone_local_path"}}{{end}}
+
+
+
+
+
+ {{template "repo/migrate/options" .}}
+
+
+
{{ctx.Locale.Tr "repo.migrate_items"}}
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_wiki"}}
+
+
+
+
{{ctx.Locale.Tr "repo.migrate.migrate_items_options"}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_labels"}}
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_issues"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_merge_requests"}}
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_releases"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_milestones"}}
+
+
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.owner"}}
+
+
+
+ {{ctx.AvatarUtils.Avatar .ContextUser 28 "mini"}}
+ {{.ContextUser.ShortName 40}}
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.repo_name"}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.repo_desc"}}
+ {{.description}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_repo"}}
+
+
+
+
+
+
+
+{{template "base/footer" .}}
diff --git a/repo/migrate/gogs.tmpl b/repo/migrate/gogs.tmpl
new file mode 100644
index 0000000..eca83b1
--- /dev/null
+++ b/repo/migrate/gogs.tmpl
@@ -0,0 +1,130 @@
+{{template "base/head" .}}
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+ {{template "base/alert" .}}
+
+ {{ctx.Locale.Tr "repo.migrate.clone_address"}}
+
+
+ {{ctx.Locale.Tr "repo.migrate.clone_address_desc"}}{{if .ContextUser.CanImportLocal}} {{ctx.Locale.Tr "repo.migrate.clone_local_path"}}{{end}}
+
+
+
+
+ {{ctx.Locale.Tr "access_token"}}
+
+
+
+
+ {{template "repo/migrate/options" .}}
+
+
+
{{ctx.Locale.Tr "repo.migrate_items"}}
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_wiki"}}
+
+
+
+
+
{{ctx.Locale.Tr "repo.migrate.migrate_items_options"}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_labels"}}
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_issues"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_milestones"}}
+
+
+
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.owner"}}
+
+
+
+ {{ctx.AvatarUtils.Avatar .ContextUser}}
+ {{.ContextUser.ShortName 40}}
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.repo_name"}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.repo_desc"}}
+ {{.description}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_repo"}}
+
+
+
+
+
+
+
+{{template "base/footer" .}}
diff --git a/repo/migrate/helper.tmpl b/repo/migrate/helper.tmpl
new file mode 100644
index 0000000..e69de29
diff --git a/repo/migrate/migrate.tmpl b/repo/migrate/migrate.tmpl
new file mode 100644
index 0000000..c5c697e
--- /dev/null
+++ b/repo/migrate/migrate.tmpl
@@ -0,0 +1,32 @@
+{{template "base/head" .}}
+
+
+
+ {{template "repo/migrate/helper" .}}
+
+
+
+
+{{template "base/footer" .}}
diff --git a/repo/migrate/migrating.tmpl b/repo/migrate/migrating.tmpl
new file mode 100644
index 0000000..bc07b48
--- /dev/null
+++ b/repo/migrate/migrating.tmpl
@@ -0,0 +1,101 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+
+
+ {{template "base/alert" .}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.migrate.migrating" .CloneAddr}}
+
+
+
+ {{if .CloneAddr}}
+
{{ctx.Locale.Tr "repo.migrate.migrating_failed" .CloneAddr}}
+ {{else}}
+
{{ctx.Locale.Tr "repo.migrate.migrating_failed_no_addr"}}
+ {{end}}
+
+
+ {{if .Permission.IsAdmin}}
+
+
+ {{if .Failed}}
+ {{ctx.Locale.Tr "repo.settings.delete"}}
+ {{else}}
+ {{ctx.Locale.Tr "cancel"}}
+ {{end}}
+ {{ctx.Locale.Tr "retry"}}
+
+ {{end}}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.delete_notices_1"}}
+ {{ctx.Locale.Tr "repo.settings.delete_notices_2" .Repository.FullName}}
+ {{if .Repository.NumForks}}
+ {{ctx.Locale.Tr "repo.settings.delete_notices_fork_1"}}
+ {{end}}
+
+
+ {{.CsrfTokenHtml}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.transfer_form_title"}}
+ {{.Repository.Name}}
+
+
+
+ {{ctx.Locale.Tr "repo.repo_name"}}
+
+
+
+
+ {{ctx.Locale.Tr "settings.cancel"}}
+ {{ctx.Locale.Tr "repo.settings.confirm_delete"}}
+
+
+
+
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "repo.migrate.cancel_migrating_confirm"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+
+
+{{template "base/footer" .}}
diff --git a/repo/migrate/onedev.tmpl b/repo/migrate/onedev.tmpl
new file mode 100644
index 0000000..e1aad96
--- /dev/null
+++ b/repo/migrate/onedev.tmpl
@@ -0,0 +1,116 @@
+{{template "base/head" .}}
+
+
+
+
+ {{template "base/disable_form_autofill"}}
+ {{.CsrfTokenHtml}}
+
+
+ {{template "base/alert" .}}
+
+ {{ctx.Locale.Tr "repo.migrate.clone_address"}}
+
+
+ {{ctx.Locale.Tr "repo.migrate.clone_address_desc"}}{{if .ContextUser.CanImportLocal}} {{ctx.Locale.Tr "repo.migrate.clone_local_path"}}{{end}}
+
+
+
+
+ {{ctx.Locale.Tr "username"}}
+
+
+
+ {{ctx.Locale.Tr "password"}}
+
+
+
+ {{template "repo/migrate/options" .}}
+
+
+
+
{{ctx.Locale.Tr "repo.migrate_items"}}
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_milestones"}}
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_labels"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_issues"}}
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_items_pullrequests"}}
+
+
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.owner"}}
+
+
+
+ {{ctx.AvatarUtils.Avatar .ContextUser 28 "mini"}}
+ {{.ContextUser.ShortName 40}}
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.repo_name"}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.repo_desc"}}
+ {{.description}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.migrate_repo"}}
+
+
+
+
+
+
+
+{{template "base/footer" .}}
diff --git a/repo/migrate/options.tmpl b/repo/migrate/options.tmpl
new file mode 100644
index 0000000..8a46e57
--- /dev/null
+++ b/repo/migrate/options.tmpl
@@ -0,0 +1,26 @@
+{{if not .DisableNewPullMirrors}}
+
+
{{ctx.Locale.Tr "repo.migrate_options"}}
+
+
+ {{ctx.Locale.Tr "repo.migrate_options_mirror_helper"}}
+
+
+{{end}}
+{{if .LFSActive}}
+
+
+
{{ctx.Locale.Tr "repo.migrate_options_lfs_endpoint.description" "https://github.com/git-lfs/git-lfs/blob/main/docs/api/server-discovery.md#server-discovery"}}{{if .ContextUser.CanImportLocal}} {{ctx.Locale.Tr "repo.migrate_options_lfs_endpoint.description.local"}}{{end}}
+
+ {{ctx.Locale.Tr "repo.migrate_options_lfs_endpoint.label"}}
+
+
+
+{{end}}
diff --git a/repo/navbar.tmpl b/repo/navbar.tmpl
new file mode 100644
index 0000000..d6e9b1b
--- /dev/null
+++ b/repo/navbar.tmpl
@@ -0,0 +1,18 @@
+{{$canReadCode := $.Permission.CanRead ctx.Consts.RepoUnitTypeCode}}
+
+
diff --git a/repo/packages.tmpl b/repo/packages.tmpl
new file mode 100644
index 0000000..14e32c1
--- /dev/null
+++ b/repo/packages.tmpl
@@ -0,0 +1,8 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+ {{template "package/shared/list" .}}
+
+
+{{template "base/footer" .}}
diff --git a/repo/projects/list.tmpl b/repo/projects/list.tmpl
new file mode 100644
index 0000000..9eae401
--- /dev/null
+++ b/repo/projects/list.tmpl
@@ -0,0 +1,8 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+ {{template "projects/list" .}}
+
+
+{{template "base/footer" .}}
diff --git a/repo/projects/new.tmpl b/repo/projects/new.tmpl
new file mode 100644
index 0000000..67abfe2
--- /dev/null
+++ b/repo/projects/new.tmpl
@@ -0,0 +1,8 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+ {{template "projects/new" .}}
+
+
+{{template "base/footer" .}}
diff --git a/repo/projects/view.tmpl b/repo/projects/view.tmpl
new file mode 100644
index 0000000..7267a99
--- /dev/null
+++ b/repo/projects/view.tmpl
@@ -0,0 +1,16 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+
+ {{template "projects/view" .}}
+
+
+
+{{template "base/footer" .}}
diff --git a/repo/pulls/commits.tmpl b/repo/pulls/commits.tmpl
new file mode 100644
index 0000000..bf6e812
--- /dev/null
+++ b/repo/pulls/commits.tmpl
@@ -0,0 +1,10 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+ {{template "repo/issue/view_title" .}}
+ {{template "repo/pulls/tab_menu" .}}
+ {{template "repo/commits_table" .}}
+
+
+{{template "base/footer" .}}
diff --git a/repo/pulls/files.tmpl b/repo/pulls/files.tmpl
new file mode 100644
index 0000000..e7baa48
--- /dev/null
+++ b/repo/pulls/files.tmpl
@@ -0,0 +1,10 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+ {{template "repo/issue/view_title" .}}
+ {{template "repo/pulls/tab_menu" .}}
+ {{template "repo/diff/box" .}}
+
+
+{{template "base/footer" .}}
diff --git a/repo/pulls/fork.tmpl b/repo/pulls/fork.tmpl
new file mode 100644
index 0000000..7af535f
--- /dev/null
+++ b/repo/pulls/fork.tmpl
@@ -0,0 +1,88 @@
+{{template "base/head" .}}
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+ {{template "base/alert" .}}
+
+
{{ctx.Locale.Tr "repo.owner"}}
+
+
+
+ {{ctx.AvatarUtils.Avatar .ContextUser 28 "mini"}}
+ {{.ContextUser.ShortName 40}}
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.repo_name"}}
+
+
+
+
{{ctx.Locale.Tr "repo.visibility"}}
+
+
+ {{ctx.Locale.Tr "repo.visibility_helper"}}
+
+
{{ctx.Locale.Tr "repo.fork_visibility_helper"}}
+
+
+
{{ctx.Locale.Tr "repo.fork_branch"}}
+
+
+
+ {{ctx.Locale.Tr "repo.all_branches"}}
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.repo_desc"}}
+ {{.description}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.fork_repo"}}
+
+
+
+
+
+
+
+{{template "base/footer" .}}
diff --git a/repo/pulls/status.tmpl b/repo/pulls/status.tmpl
new file mode 100644
index 0000000..e8636ba
--- /dev/null
+++ b/repo/pulls/status.tmpl
@@ -0,0 +1,59 @@
+{{/*
+Template Attributes:
+* CommitStatus: summary of all commit status state
+* CommitStatuses: all commit status elements
+* MissingRequiredChecks: commit check contexts that are required by branch protection but not present
+* ShowHideChecks: whether use a button to show/hide the checks
+* is_context_required: Used in pull request commit status check table
+*/}}
+
+{{if .CommitStatus}}
+
+
+
+
+ {{range .CommitStatuses}}
+
+ {{template "repo/commit_status" .}}
+
{{.Context}} {{.Description}}
+
+
+ {{end}}
+ {{range .MissingRequiredChecks}}
+
+ {{svg "octicon-dot-fill" 18 "commit-status icon text yellow"}}
+
{{.}}
+
{{ctx.Locale.Tr "repo.pulls.status_checks_requested"}}
+
+ {{end}}
+
+
+{{end}}
diff --git a/repo/pulls/tab_menu.tmpl b/repo/pulls/tab_menu.tmpl
new file mode 100644
index 0000000..8b192c4
--- /dev/null
+++ b/repo/pulls/tab_menu.tmpl
@@ -0,0 +1,28 @@
+
diff --git a/repo/pulse.tmpl b/repo/pulse.tmpl
new file mode 100644
index 0000000..5222633
--- /dev/null
+++ b/repo/pulse.tmpl
@@ -0,0 +1,231 @@
+
+
+{{if (or (.Permission.CanRead ctx.Consts.RepoUnitTypeIssues) (.Permission.CanRead ctx.Consts.RepoUnitTypePullRequests))}}
+
+
+ {{if .Permission.CanRead ctx.Consts.RepoUnitTypePullRequests}}
+
+ {{if gt .Activity.ActivePRCount 0}}
+
+ {{if gt .Activity.MergedPRPerc 0}}
+
+ {{end}}
+
+
+ {{else}}
+
+ {{end}}
+ {{ctx.Locale.TrN .Activity.ActivePRCount "repo.activity.active_prs_count_1" "repo.activity.active_prs_count_n" .Activity.ActivePRCount}}
+
+ {{end}}
+ {{if .Permission.CanRead ctx.Consts.RepoUnitTypeIssues}}
+
+ {{if gt .Activity.ActiveIssueCount 0}}
+
+ {{if gt .Activity.ClosedIssuePerc 0}}
+
+ {{end}}
+
+
+ {{else}}
+
+ {{end}}
+ {{ctx.Locale.TrN .Activity.ActiveIssueCount "repo.activity.active_issues_count_1" "repo.activity.active_issues_count_n" .Activity.ActiveIssueCount}}
+
+ {{end}}
+
+
+{{end}}
+
+{{if .Permission.CanRead ctx.Consts.RepoUnitTypeCode}}
+ {{if eq .Activity.Code.CommitCountInAllBranches 0}}
+
+
+
+ {{end}}
+ {{if gt .Activity.Code.CommitCountInAllBranches 0}}
+
+
+ {{ctx.Locale.Tr "repo.activity.git_stats_exclude_merges"}}
+ {{ctx.Locale.TrN .Activity.Code.AuthorCount "repo.activity.git_stats_author_1" "repo.activity.git_stats_author_n" .Activity.Code.AuthorCount}}
+ {{ctx.Locale.TrN .Activity.Code.AuthorCount "repo.activity.git_stats_pushed_1" "repo.activity.git_stats_pushed_n"}}
+ {{ctx.Locale.TrN .Activity.Code.CommitCount "repo.activity.git_stats_commit_1" "repo.activity.git_stats_commit_n" .Activity.Code.CommitCount}}
+ {{ctx.Locale.Tr "repo.activity.git_stats_push_to_branch" .Repository.DefaultBranch}}
+ {{ctx.Locale.TrN .Activity.Code.CommitCountInAllBranches "repo.activity.git_stats_commit_1" "repo.activity.git_stats_commit_n" .Activity.Code.CommitCountInAllBranches}}
+ {{ctx.Locale.Tr "repo.activity.git_stats_push_to_all_branches"}}
+ {{ctx.Locale.Tr "repo.activity.git_stats_on_default_branch" .Repository.DefaultBranch}}
+ {{ctx.Locale.TrN .Activity.Code.ChangedFiles "repo.activity.git_stats_file_1" "repo.activity.git_stats_file_n" .Activity.Code.ChangedFiles}}
+ {{ctx.Locale.TrN .Activity.Code.ChangedFiles "repo.activity.git_stats_files_changed_1" "repo.activity.git_stats_files_changed_n"}}
+ {{ctx.Locale.Tr "repo.activity.git_stats_additions"}}
+ {{ctx.Locale.TrN .Activity.Code.Additions "repo.activity.git_stats_addition_1" "repo.activity.git_stats_addition_n" .Activity.Code.Additions}}
+ {{ctx.Locale.Tr "repo.activity.git_stats_and_deletions"}}
+ {{ctx.Locale.TrN .Activity.Code.Deletions "repo.activity.git_stats_deletion_1" "repo.activity.git_stats_deletion_n" .Activity.Code.Deletions}} .
+
+
+
+ {{end}}
+{{end}}
+
+{{if gt .Activity.PublishedReleaseCount 0}}
+
+ {{svg "octicon-tag" 16 "tw-mr-2"}}
+ {{ctx.Locale.Tr "repo.activity.title.releases_published_by"
+ (ctx.Locale.TrN .Activity.PublishedReleaseCount "repo.activity.title.releases_1" "repo.activity.title.releases_n" .Activity.PublishedReleaseCount)
+ (ctx.Locale.TrN .Activity.PublishedReleaseAuthorCount "repo.activity.title.user_1" "repo.activity.title.user_n" .Activity.PublishedReleaseAuthorCount)
+ }}
+
+
+{{end}}
+
+{{if gt .Activity.MergedPRCount 0}}
+
+ {{svg "octicon-git-pull-request" 16 "tw-mr-2"}}
+ {{ctx.Locale.Tr "repo.activity.title.prs_merged_by"
+ (ctx.Locale.TrN .Activity.MergedPRCount "repo.activity.title.prs_1" "repo.activity.title.prs_n" .Activity.MergedPRCount)
+ (ctx.Locale.TrN .Activity.MergedPRAuthorCount "repo.activity.title.user_1" "repo.activity.title.user_n" .Activity.MergedPRAuthorCount)
+ }}
+
+
+{{end}}
+
+{{if gt .Activity.OpenedPRCount 0}}
+
+ {{svg "octicon-git-branch" 16 "tw-mr-2"}}
+ {{ctx.Locale.Tr "repo.activity.title.prs_opened_by"
+ (ctx.Locale.TrN .Activity.OpenedPRCount "repo.activity.title.prs_1" "repo.activity.title.prs_n" .Activity.OpenedPRCount)
+ (ctx.Locale.TrN .Activity.OpenedPRAuthorCount "repo.activity.title.user_1" "repo.activity.title.user_n" .Activity.OpenedPRAuthorCount)
+ }}
+
+
+{{end}}
+
+{{if gt .Activity.ClosedIssueCount 0}}
+
+ {{svg "octicon-issue-closed" 16 "tw-mr-2"}}
+ {{ctx.Locale.Tr "repo.activity.title.issues_closed_from"
+ (ctx.Locale.TrN .Activity.ClosedIssueCount "repo.activity.title.issues_1" "repo.activity.title.issues_n" .Activity.ClosedIssueCount)
+ (ctx.Locale.TrN .Activity.ClosedIssueAuthorCount "repo.activity.title.user_1" "repo.activity.title.user_n" .Activity.ClosedIssueAuthorCount)
+ }}
+
+
+{{end}}
+
+{{if gt .Activity.OpenedIssueCount 0}}
+
+ {{svg "octicon-issue-opened" 16 "tw-mr-2"}}
+ {{ctx.Locale.Tr "repo.activity.title.issues_created_by"
+ (ctx.Locale.TrN .Activity.OpenedIssueCount "repo.activity.title.issues_1" "repo.activity.title.issues_n" .Activity.OpenedIssueCount)
+ (ctx.Locale.TrN .Activity.OpenedIssueAuthorCount "repo.activity.title.user_1" "repo.activity.title.user_n" .Activity.OpenedIssueAuthorCount)
+ }}
+
+
+{{end}}
+
+{{if gt .Activity.UnresolvedIssueCount 0}}
+
+ {{svg "octicon-comment-discussion" 16 "tw-mr-2"}}
+ {{ctx.Locale.TrN .Activity.UnresolvedIssueCount "repo.activity.title.unresolved_conv_1" "repo.activity.title.unresolved_conv_n" .Activity.UnresolvedIssueCount}}
+
+
+{{end}}
diff --git a/repo/recent_commits.tmpl b/repo/recent_commits.tmpl
new file mode 100644
index 0000000..cfa8fab
--- /dev/null
+++ b/repo/recent_commits.tmpl
@@ -0,0 +1,9 @@
+{{if .Permission.CanRead ctx.Consts.RepoUnitTypeCode}}
+
+
+{{end}}
diff --git a/repo/release/label.tmpl b/repo/release/label.tmpl
new file mode 100644
index 0000000..eacb3e3
--- /dev/null
+++ b/repo/release/label.tmpl
@@ -0,0 +1,14 @@
+{{/*
+Template Attributes:
+* Release: the release
+* IsLatest: boolean indicating whether this is the latest release, optional
+*/}}
+{{if .IsLatest}}
+ {{ctx.Locale.Tr "repo.release.latest"}}
+{{else if .Release.IsDraft}}
+ {{ctx.Locale.Tr "repo.release.draft"}}
+{{else if .Release.IsPrerelease}}
+ {{ctx.Locale.Tr "repo.release.prerelease"}}
+{{else if (not .Release.IsTag)}}
+ {{ctx.Locale.Tr "repo.release.stable"}}
+{{end}}
diff --git a/repo/release/list.tmpl b/repo/release/list.tmpl
new file mode 100644
index 0000000..99934d2
--- /dev/null
+++ b/repo/release/list.tmpl
@@ -0,0 +1,121 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+ {{template "base/alert" .}}
+ {{template "repo/release_tag_header" .}}
+
+ {{range $idx, $info := .Releases}}
+ {{$release := $info.Release}}
+
+
+
+
+
+ {{if $.PageIsSingleTag}}{{$release.Title}}{{else}}{{$release.Title}} {{end}}
+ {{template "repo/commit_statuses" dict "Status" $info.CommitStatus "Statuses" $info.CommitStatuses "AdditionalClasses" "tw-flex"}}
+ {{template "repo/release/label" (dict "Release" $release)}}
+
+
+
+
+
+ {{if $release.OriginalAuthor}}
+ {{svg (MigrationIcon $release.Repo.GetOriginalURLHostname) 20 "tw-mr-1"}}{{$release.OriginalAuthor}}
+ {{else if $release.Publisher}}
+ {{ctx.AvatarUtils.Avatar $release.Publisher 20 "tw-mr-1"}}
+ {{$release.Publisher.GetDisplayName}}
+ {{else}}
+ Ghost
+ {{end}}
+
+
+ {{ctx.Locale.Tr "repo.released_this"}}
+
+ {{if $release.CreatedUnix}}
+ {{DateUtils.TimeSince $release.CreatedUnix}}
+ {{end}}
+ {{if and (not $release.IsDraft) ($.Permission.CanRead ctx.Consts.RepoUnitTypeCode)}}
+ | {{ctx.Locale.Tr "repo.release.ahead.commits" $release.NumCommitsBehind}} {{ctx.Locale.Tr "repo.release.ahead.target" $release.TargetBehind}}
+ {{end}}
+
+
+ {{$release.RenderedNote}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.release.downloads"}}
+
+
+
+
+
+ {{end}}
+
+
+ {{template "base/paginate" .}}
+
+
+
+{{if (and ($.Permission.CanWrite ctx.Consts.RepoUnitTypeCode) .PageIsTagList)}}
+
+
+
+
{{ctx.Locale.Tr "repo.release.deletion_tag_desc"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+{{end}}
+
+{{template "base/footer" .}}
diff --git a/repo/release/new.tmpl b/repo/release/new.tmpl
new file mode 100644
index 0000000..574b0d0
--- /dev/null
+++ b/repo/release/new.tmpl
@@ -0,0 +1,149 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+
+ {{template "base/alert" .}}
+
+ {{.CsrfTokenHtml}}
+
+
+ {{if .PageIsEditRelease}}
+
{{.tag_name}} @ {{.tag_target}}
+ {{else}}
+
+
+
+
@
+
+
+ {{svg "octicon-git-branch"}}
+
+ {{ctx.Locale.Tr "repo.release.target"}} :
+ {{.Repository.DefaultBranch}}
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.release.tag_helper"}}
+
+ {{end}}
+
+
+
+
+
+
+
+ {{template "shared/combomarkdowneditor" (dict
+ "MarkdownPreviewInRepo" $.Repository
+ "MarkdownPreviewMode" "comment"
+ "TextareaName" "content"
+ "TextareaContent" .content
+ "TextareaPlaceholder" (ctx.Locale.Tr "repo.release.message")
+ "DropzoneParentContainer" "form"
+ )}}
+
+ {{range .attachments}}
+
+
+
+
+ {{.Size | FileSize}}
+
+ {{svg "octicon-info"}}
+
+
+
+ {{ctx.Locale.Tr "remove"}}
+
+
+ {{end}}
+ {{if .IsAttachmentEnabled}}
+
+ {{template "repo/upload" .}}
+
+ {{end}}
+
+
+
+
+ {{if not .PageIsEditRelease}}
+
+
+
+ {{ctx.Locale.Tr "repo.release.add_tag_msg"}}
+
+
+ {{else}}
+
+ {{end}}
+
+
+
+ {{ctx.Locale.Tr "repo.release.prerelease_desc"}}
+
+
+
{{ctx.Locale.Tr "repo.release.prerelease_helper"}}
+
+
+ {{if .PageIsEditRelease}}
+
+ {{ctx.Locale.Tr "repo.release.cancel"}}
+
+
+ {{ctx.Locale.Tr "repo.release.delete_release"}}
+
+ {{if .IsDraft}}
+
{{ctx.Locale.Tr "repo.release.save_draft"}}
+
+ {{ctx.Locale.Tr "repo.release.publish"}}
+
+ {{else}}
+
+ {{ctx.Locale.Tr "repo.release.edit_release"}}
+
+ {{end}}
+ {{else}}
+ {{if not .tag_name}}
+
{{ctx.Locale.Tr "repo.release.add_tag"}}
+ {{end}}
+
{{ctx.Locale.Tr "repo.release.save_draft"}}
+
+ {{ctx.Locale.Tr "repo.release.publish"}}
+
+ {{end}}
+
+
+
+
+
+
+
+{{if .PageIsEditRelease}}
+
+
+
+
{{ctx.Locale.Tr "repo.release.deletion_desc"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+{{end}}
+{{template "base/footer" .}}
diff --git a/repo/release_tag_header.tmpl b/repo/release_tag_header.tmpl
new file mode 100644
index 0000000..f96c768
--- /dev/null
+++ b/repo/release_tag_header.tmpl
@@ -0,0 +1,29 @@
+{{$canReadReleases := $.Permission.CanRead ctx.Consts.RepoUnitTypeReleases}}
+{{$canReadCode := $.Permission.CanRead ctx.Consts.RepoUnitTypeCode}}
+
+{{if $canReadReleases}}
+
+
+{{else if $canReadCode}}
+ {{/* if the "repo.releases" unit is disabled, only show the "commits / branches / tags" sub menu */}}
+ {{template "repo/sub_menu" .}}
+{{end}}
diff --git a/repo/search.tmpl b/repo/search.tmpl
new file mode 100644
index 0000000..3f5b22b
--- /dev/null
+++ b/repo/search.tmpl
@@ -0,0 +1,8 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+ {{template "shared/search/code/search" .}}
+
+
+{{template "base/footer" .}}
diff --git a/repo/search_name.tmpl b/repo/search_name.tmpl
new file mode 100644
index 0000000..951f168
--- /dev/null
+++ b/repo/search_name.tmpl
@@ -0,0 +1 @@
+{{.Name}}{{if DefaultShowFullName}} {{.FullName}} {{end}}
diff --git a/repo/settings/actions.tmpl b/repo/settings/actions.tmpl
new file mode 100644
index 0000000..f38ab5b
--- /dev/null
+++ b/repo/settings/actions.tmpl
@@ -0,0 +1,11 @@
+{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings actions")}}
+
+ {{if eq .PageType "runners"}}
+ {{template "shared/actions/runner_list" .}}
+ {{else if eq .PageType "secrets"}}
+ {{template "shared/secrets/add_list" .}}
+ {{else if eq .PageType "variables"}}
+ {{template "shared/variables/variable_list" .}}
+ {{end}}
+
+{{template "repo/settings/layout_footer" .}}
diff --git a/repo/settings/branches.tmpl b/repo/settings/branches.tmpl
new file mode 100644
index 0000000..57d9f2c
--- /dev/null
+++ b/repo/settings/branches.tmpl
@@ -0,0 +1,79 @@
+{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings edit")}}
+
+ {{if .Repository.IsArchived}}
+
+ {{ctx.Locale.Tr "repo.settings.archive.branchsettings_unavailable"}}
+
+ {{else}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.default_branch_desc"}}
+
+
+ {{.CsrfTokenHtml}}
+
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
{{.Repository.DefaultBranch}}
+
+
+ {{ctx.Locale.Tr "repo.settings.branches.update_default_branch"}}
+
+
+
+
+
+
+
+ {{range .ProtectedBranches}}
+
+
+ {{svg "octicon-grabber" 16}}
+
+
+
+
+ {{else}}
+
+ {{ctx.Locale.Tr "repo.settings.no_protected_branch"}}
+
+ {{end}}
+
+
+ {{end}}
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.protected_branch_deletion_desc"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+
+{{template "repo/settings/layout_footer" .}}
diff --git a/repo/settings/collaboration.tmpl b/repo/settings/collaboration.tmpl
new file mode 100644
index 0000000..9f90f0a
--- /dev/null
+++ b/repo/settings/collaboration.tmpl
@@ -0,0 +1,117 @@
+{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings collaboration")}}
+
+
+ {{if .Collaborators}}
+
+
+ {{range .Collaborators}}
+
+
+
+
+ {{template "shared/user/name" .}}
+
+
+
+
+ {{svg "octicon-shield-lock"}}
+
+
{{if eq .Collaboration.Mode 1}}{{ctx.Locale.Tr "repo.settings.collaboration.read"}}{{else if eq .Collaboration.Mode 2}}{{ctx.Locale.Tr "repo.settings.collaboration.write"}}{{else if eq .Collaboration.Mode 3}}{{ctx.Locale.Tr "repo.settings.collaboration.admin"}}{{else}}{{ctx.Locale.Tr "repo.settings.collaboration.undefined"}}{{end}}
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.delete_collaborator"}}
+
+
+
+ {{end}}
+
+
+ {{end}}
+
+
+ {{.CsrfTokenHtml}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.add_collaborator"}}
+
+
+
+ {{if .RepoOwnerIsOrganization}}
+
+ {{$allowedToChangeTeams := (or (.Org.RepoAdminChangeTeamAccess) (.Permission.IsOwner))}}
+ {{if .Teams}}
+
+
+ {{range $t, $team := .Teams}}
+
+
+
+ {{.Name}}
+
+
+ {{svg "octicon-shield-lock"}}
+ {{if eq .AccessMode 1}}{{ctx.Locale.Tr "repo.settings.collaboration.read"}}{{else if eq .AccessMode 2}}{{ctx.Locale.Tr "repo.settings.collaboration.write"}}{{else if eq .AccessMode 3}}{{ctx.Locale.Tr "repo.settings.collaboration.admin"}}{{else if eq .AccessMode 4}}{{ctx.Locale.Tr "repo.settings.collaboration.owner"}}{{else}}{{ctx.Locale.Tr "repo.settings.collaboration.undefined"}}{{end}}
+
+ {{if or (eq .AccessMode 1) (eq .AccessMode 2)}}
+ {{$first := true}}
+
+ Sections: {{range $u, $unit := $.Units}}{{if and ($.Repo.UnitEnabled ctx $unit.Type) ($team.UnitEnabled ctx $unit.Type)}}{{if $first}}{{$first = false}}{{else}}, {{end}}{{ctx.Locale.Tr $unit.NameKey}}{{end}}{{end}} {{if $first}}None{{end}}
+
+ {{end}}
+
+ {{if $allowedToChangeTeams}}
+
+
+ {{ctx.Locale.Tr "repo.settings.delete_collaborator"}}
+
+
+ {{end}}
+
+ {{end}}
+
+
+ {{end}}
+
+ {{if $allowedToChangeTeams}}
+
+ {{.CsrfTokenHtml}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.add_team"}}
+
+ {{else}}
+
+ {{ctx.Locale.Tr "repo.settings.change_team_access_not_allowed"}}
+
+ {{end}}
+
+ {{end}}
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.collaborator_deletion_desc"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+
+{{template "repo/settings/layout_footer" .}}
diff --git a/repo/settings/deploy_keys.tmpl b/repo/settings/deploy_keys.tmpl
new file mode 100644
index 0000000..5eb2a47
--- /dev/null
+++ b/repo/settings/deploy_keys.tmpl
@@ -0,0 +1,86 @@
+{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings")}}
+
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "repo.settings.deploy_key_desc"}}
+
+
+ {{ctx.Locale.Tr "repo.settings.title"}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.deploy_key_content"}}
+ {{.content}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.is_writable"}}
+
+ {{ctx.Locale.Tr "repo.settings.is_writable_info"}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.add_deploy_key"}}
+
+
+ {{ctx.Locale.Tr "cancel"}}
+
+
+
+ {{if .Deploykeys}}
+
+ {{range .Deploykeys}}
+
+
+ {{svg "octicon-key" 32}}
+
+
+
{{.Name}}
+
+ {{.Fingerprint}}
+
+
+ {{ctx.Locale.Tr "settings.added_on" (DateUtils.AbsoluteShort .CreatedUnix)}} — {{svg "octicon-info"}} {{if .HasUsed}}{{ctx.Locale.Tr "settings.last_used"}} {{DateUtils.AbsoluteShort .UpdatedUnix}} {{else}}{{ctx.Locale.Tr "settings.no_activity"}}{{end}} - {{ctx.Locale.Tr "settings.can_read_info"}}{{if not .IsReadOnly}} / {{ctx.Locale.Tr "settings.can_write_info"}} {{end}}
+
+
+
+
+ {{ctx.Locale.Tr "settings.delete_key"}}
+
+
+
+ {{end}}
+
+ {{else}}
+ {{ctx.Locale.Tr "repo.settings.no_deploy_keys"}}
+ {{end}}
+
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.deploy_key_deletion_desc"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+
+{{template "repo/settings/layout_footer" .}}
diff --git a/repo/settings/githook_edit.tmpl b/repo/settings/githook_edit.tmpl
new file mode 100644
index 0000000..e20f51b
--- /dev/null
+++ b/repo/settings/githook_edit.tmpl
@@ -0,0 +1,27 @@
+{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings edit githook")}}
+
+
+
+
{{ctx.Locale.Tr "repo.settings.githook_edit_desc"}}
+
+ {{.CsrfTokenHtml}}
+ {{with .Hook}}
+
+ {{ctx.Locale.Tr "repo.settings.githook_name"}}
+ {{.Name}}
+
+
+
{{ctx.Locale.Tr "repo.settings.githook_content"}}
+
{{if .IsActive}}{{.Content}}{{else}}{{.Sample}}{{end}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.update_githook"}}
+
+ {{end}}
+
+
+
+{{template "repo/settings/layout_footer" .}}
diff --git a/repo/settings/githooks.tmpl b/repo/settings/githooks.tmpl
new file mode 100644
index 0000000..1a603f9
--- /dev/null
+++ b/repo/settings/githooks.tmpl
@@ -0,0 +1,23 @@
+{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings githooks")}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.githooks_desc"}}
+
+ {{range .Hooks}}
+
+ {{end}}
+
+
+
+{{template "repo/settings/layout_footer" .}}
diff --git a/repo/settings/layout_footer.tmpl b/repo/settings/layout_footer.tmpl
new file mode 100644
index 0000000..60cad3f
--- /dev/null
+++ b/repo/settings/layout_footer.tmpl
@@ -0,0 +1,11 @@
+{{if false}}{{/* to make html structure "likely" complete to prevent IDE warnings */}}
+
+
+
+ {{/* block: repo-setting-content */}}
+{{end}}
+
+
+
+
+{{template "base/footer" .}}
diff --git a/repo/settings/layout_head.tmpl b/repo/settings/layout_head.tmpl
new file mode 100644
index 0000000..efec9bf
--- /dev/null
+++ b/repo/settings/layout_head.tmpl
@@ -0,0 +1,14 @@
+{{template "base/head" .ctxData}}
+
+ {{template "repo/header" .ctxData}}
+
+ {{template "repo/settings/navbar" .ctxData}}
+
+ {{template "base/alert" .ctxData}}
+ {{/* block: repo-setting-content */}}
+
+{{if false}}{{/* to make html structure "likely" complete to prevent IDE warnings */}}
+
+
+
+{{end}}
diff --git a/repo/settings/lfs.tmpl b/repo/settings/lfs.tmpl
new file mode 100644
index 0000000..c1878d2
--- /dev/null
+++ b/repo/settings/lfs.tmpl
@@ -0,0 +1,53 @@
+{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings lfs")}}
+
+
+
+ {{template "base/paginate" .}}
+ {{range .LFSFiles}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.lfs_delete_warning"}}
+
+
+ {{$.CsrfTokenHtml}}
+ {{template "base/modal_actions_confirm"}}
+
+
+
+ {{end}}
+
+{{template "repo/settings/layout_footer" .}}
diff --git a/repo/settings/lfs_file.tmpl b/repo/settings/lfs_file.tmpl
new file mode 100644
index 0000000..f6fac05
--- /dev/null
+++ b/repo/settings/lfs_file.tmpl
@@ -0,0 +1,53 @@
+{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings lfs")}}
+
+
+
+
+ {{template "repo/unicode_escape_prompt" dict "EscapeStatus" .EscapeStatus "root" $}}
+
+ {{if .IsFileTooLarge}}
+ {{template "shared/filetoolarge" dict "RawFileLink" .RawFileLink}}
+ {{else if not .FileSize}}
+ {{template "shared/fileisempty"}}
+ {{else if not .IsTextFile}}
+
+ {{if .IsImageFile}}
+
+ {{else if .IsVideoFile}}
+
+ {{ctx.Locale.Tr "repo.video_not_supported_in_browser"}}
+
+ {{else if .IsAudioFile}}
+
+ {{ctx.Locale.Tr "repo.audio_not_supported_in_browser"}}
+
+ {{else if .IsPDFFile}}
+
+ {{else}}
+
{{ctx.Locale.Tr "repo.file_view_raw"}}
+ {{end}}
+
+ {{else if .FileSize}}
+
+
+
+ {{.LineNums}}
+ {{.FileContent}}
+
+
+
+ {{end}}
+
+
+
+
+{{template "repo/settings/layout_footer" .}}
diff --git a/repo/settings/lfs_file_find.tmpl b/repo/settings/lfs_file_find.tmpl
new file mode 100644
index 0000000..59f1bb1
--- /dev/null
+++ b/repo/settings/lfs_file_find.tmpl
@@ -0,0 +1,46 @@
+{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings lfs")}}
+
+
+
+
+
+ {{range .Results}}
+
+
+ {{svg "octicon-file"}}
+ {{.Name}}
+
+
+
+
+ {{.Summary | ctx.RenderUtils.RenderEmoji}}
+
+
+
+
+ {{svg "octicon-git-branch"}}{{.BranchName}}
+
+
+ {{if .ParentHashes}}
+ {{ctx.Locale.Tr "repo.diff.parent"}}
+ {{range .ParentHashes}}
+ {{ShortSha .String}}
+ {{end}}
+ {{end}}
+ {{ctx.Locale.Tr "repo.diff.commit"}}
+ {{ShortSha .SHA}}
+
+ {{DateUtils.TimeSince .When}}
+
+ {{else}}
+
+ {{ctx.Locale.Tr "repo.settings.lfs_lfs_file_no_commits"}}
+
+ {{end}}
+
+
+
+
+{{template "repo/settings/layout_footer" .}}
diff --git a/repo/settings/lfs_locks.tmpl b/repo/settings/lfs_locks.tmpl
new file mode 100644
index 0000000..64c6b3a
--- /dev/null
+++ b/repo/settings/lfs_locks.tmpl
@@ -0,0 +1,56 @@
+{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings lfs")}}
+
+
+
+
+
+ {{$.CsrfTokenHtml}}
+
+
+ {{ctx.Locale.Tr "repo.settings.lfs_lock"}}
+
+
+
+
+
+ {{range $index, $lock := .LFSLocks}}
+
+
+ {{if index $.Linkable $index}}
+ {{svg "octicon-file"}}
+ {{$lock.Path}}
+ {{else}}
+ {{svg "octicon-diff"}}
+ {{$lock.Path}}
+ {{end}}
+ {{if not (index $.Lockables $index)}}
+ {{svg "octicon-alert"}}
+ {{end}}
+
+
+
+ {{ctx.AvatarUtils.Avatar $lock.Owner}}
+ {{$lock.Owner.DisplayName}}
+
+
+ {{DateUtils.TimeSince .Created}}
+
+
+ {{$.CsrfTokenHtml}}
+ {{svg "octicon-lock"}} {{ctx.Locale.Tr "repo.settings.lfs_force_unlock"}}
+
+
+
+ {{else}}
+
+ {{ctx.Locale.Tr "repo.settings.lfs_locks_no_locks"}}
+
+ {{end}}
+
+
+ {{template "base/paginate" .}}
+
+
+{{template "repo/settings/layout_footer" .}}
diff --git a/repo/settings/lfs_pointers.tmpl b/repo/settings/lfs_pointers.tmpl
new file mode 100644
index 0000000..4cfc0fc
--- /dev/null
+++ b/repo/settings/lfs_pointers.tmpl
@@ -0,0 +1,56 @@
+{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings lfs")}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.lfs_pointers.sha"}}
+ {{ctx.Locale.Tr "repo.settings.lfs_pointers.oid"}}
+ {{ctx.Locale.Tr "repo.settings.lfs_pointers.inRepo"}}
+ {{ctx.Locale.Tr "repo.settings.lfs_pointers.exists"}}
+ {{ctx.Locale.Tr "repo.settings.lfs_pointers.accessible"}}
+
+
+
+
+ {{range .Pointers}}
+
+
+
+ {{ShortSha .SHA}}
+
+
+
+
+ {{ShortSha .Oid}}
+
+
+ {{svg (Iif .InRepo "octicon-check" "octicon-x")}}
+ {{svg (Iif .Exists "octicon-check" "octicon-x")}}
+ {{svg (Iif .Accessible "octicon-check" "octicon-x")}}
+
+ {{ctx.Locale.Tr "repo.settings.lfs_findcommits"}}
+
+
+ {{end}}
+
+
+
+
+{{template "repo/settings/layout_footer" .}}
diff --git a/repo/settings/navbar.tmpl b/repo/settings/navbar.tmpl
new file mode 100644
index 0000000..3e127cc
--- /dev/null
+++ b/repo/settings/navbar.tmpl
@@ -0,0 +1,53 @@
+
+
+
diff --git a/repo/settings/options.tmpl b/repo/settings/options.tmpl
new file mode 100644
index 0000000..1a7884b
--- /dev/null
+++ b/repo/settings/options.tmpl
@@ -0,0 +1,1112 @@
+{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings options")}}
+
+
+
+
+ {{template "base/disable_form_autofill"}}
+ {{.CsrfTokenHtml}}
+
+
+ {{ctx.Locale.Tr "repo.repo_name"}}
+
+
+
+ {{ctx.Locale.Tr "repo.repo_size"}}
+ {{FileSize .Repository.Size}}
+
+
+
{{ctx.Locale.Tr "repo.template"}}
+
+
+ {{ctx.Locale.Tr "repo.template_helper"}}
+
+
+
+ {{ctx.Locale.Tr "repo.repo_desc"}}
+ {{.Repository.Description}}
+
+
+ {{ctx.Locale.Tr "repo.settings.site"}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.update_settings"}}
+
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "settings.choose_new_avatar"}}
+
+
+
+ {{ctx.Locale.Tr "settings.update_avatar"}}
+ {{ctx.Locale.Tr "settings.delete_current_avatar"}}
+
+
+
+
+ {{/* These variables exist to make the logic in the Settings window easier to comprehend and are not used later on. */}}
+ {{$newMirrorsPartiallyEnabled := or (not .DisableNewPullMirrors) (not .DisableNewPushMirrors)}}
+ {{/* .Repository.IsMirror is not always reliable if the repository is not actively acting as a mirror because of errors. */}}
+ {{$showMirrorSettings := and (.Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypeCode) (or $newMirrorsPartiallyEnabled .Repository.IsMirror .PullMirror .PushMirrors)}}
+ {{$newMirrorsEntirelyEnabled := and (not .DisableNewPullMirrors) (not .DisableNewPushMirrors)}}
+ {{$onlyNewPushMirrorsEnabled := and (not .DisableNewPushMirrors) .DisableNewPullMirrors}}
+ {{$onlyNewPullMirrorsEnabled := and .DisableNewPushMirrors (not .DisableNewPullMirrors)}}
+ {{$existingPushMirror := or .Repository.IsMirror .PushMirrors}}
+ {{$modifyBrokenPullMirror := and .Repository.IsMirror (not .PullMirror)}}
+ {{$isWorkingPullMirror := .PullMirror}}
+
+ {{if $showMirrorSettings}}
+
+
+ {{if .Repository.IsArchived}}
+
+ {{ctx.Locale.Tr "repo.settings.archive.mirrors_unavailable"}}
+
+ {{else}}
+ {{if $newMirrorsEntirelyEnabled}}
+ {{ctx.Locale.Tr "repo.settings.mirror_settings.docs"}}
+
{{ctx.Locale.Tr "repo.settings.mirror_settings.docs.doc_link_title"}}
+ {{ctx.Locale.Tr "repo.settings.mirror_settings.docs.pull_mirror_instructions"}}
+
{{ctx.Locale.Tr "repo.settings.mirror_settings.docs.doc_link_pull_section"}}
+ {{else if $onlyNewPushMirrorsEnabled}}
+ {{ctx.Locale.Tr "repo.settings.mirror_settings.docs.disabled_pull_mirror.instructions"}}
+ {{ctx.Locale.Tr "repo.settings.mirror_settings.docs.more_information_if_disabled"}}
+
{{ctx.Locale.Tr "repo.settings.mirror_settings.docs.doc_link_title"}}
+ {{else if $onlyNewPullMirrorsEnabled}}
+ {{ctx.Locale.Tr "repo.settings.mirror_settings.docs.disabled_push_mirror.instructions"}}
+ {{ctx.Locale.Tr "repo.settings.mirror_settings.docs.disabled_push_mirror.pull_mirror_warning"}}
+ {{ctx.Locale.Tr "repo.settings.mirror_settings.docs.more_information_if_disabled"}}
+
{{ctx.Locale.Tr "repo.settings.mirror_settings.docs.doc_link_title"}}
+ {{ctx.Locale.Tr "repo.settings.mirror_settings.docs.disabled_push_mirror.info"}}
+ {{if $existingPushMirror}}
+ {{ctx.Locale.Tr "repo.settings.mirror_settings.docs.can_still_use"}}
+ {{end}}
+ {{else}}
+ {{ctx.Locale.Tr "repo.settings.mirror_settings.docs.no_new_mirrors"}} {{ctx.Locale.Tr "repo.settings.mirror_settings.docs.can_still_use"}}
+ {{end}}
+
+ {{if .Repository.IsMirror}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.mirror_settings.mirrored_repository"}}
+ {{ctx.Locale.Tr "repo.settings.mirror_settings.direction"}}
+ {{ctx.Locale.Tr "repo.settings.mirror_settings.last_update"}}
+
+
+
+ {{if $modifyBrokenPullMirror}}
+ {{/* even if a repo is a pull mirror (IsMirror=true), the PullMirror might still be nil if the mirror migration is broken */}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.mirror_settings.direction.pull"}}: {{ctx.Locale.Tr "error.occurred"}}
+
+
+
+ {{else if $isWorkingPullMirror}}
+
+
+ {{.PullMirror.RemoteAddress}}
+ {{ctx.Locale.Tr "repo.settings.mirror_settings.direction.pull"}}
+ {{DateUtils.FullTime .PullMirror.UpdatedUnix}}
+
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "repo.settings.sync_mirror"}}
+
+
+
+
+
+
+ {{template "base/disable_form_autofill"}}
+ {{.CsrfTokenHtml}}
+
+
+
{{ctx.Locale.Tr "repo.mirror_prune"}}
+
+
+ {{ctx.Locale.Tr "repo.mirror_prune_desc"}}
+
+
+
+ {{ctx.Locale.Tr "repo.mirror_interval" .MinimumMirrorInterval}}
+
+
+ {{$address := MirrorRemoteAddress ctx .Repository .PullMirror.GetRemoteName}}
+
+
{{ctx.Locale.Tr "repo.mirror_address"}}
+
+
{{ctx.Locale.Tr "repo.mirror_address_desc"}}
+
+
+
+ {{ctx.Locale.Tr "repo.need_auth"}}
+
+
+
+ {{ctx.Locale.Tr "username"}}
+
+
+
+ {{ctx.Locale.Tr "password"}}
+
+
+
{{ctx.Locale.Tr "repo.mirror_password_help"}}
+
+
+
+ {{if .LFSStartServer}}
+
+
{{ctx.Locale.Tr "repo.mirror_lfs"}}
+
+
+ {{ctx.Locale.Tr "repo.mirror_lfs_desc"}}
+
+
+
+
{{ctx.Locale.Tr "repo.mirror_lfs_endpoint"}}
+
+
{{ctx.Locale.Tr "repo.mirror_lfs_endpoint_desc" "https://github.com/git-lfs/git-lfs/blob/main/docs/api/server-discovery.md#server-discovery"}}
+
+ {{end}}
+
+ {{ctx.Locale.Tr "repo.settings.update_mirror_settings"}}
+
+
+
+
+
+ {{end}}{{/* end if: $modifyBrokenPullMirror / $isWorkingPullMirror */}}
+
+ {{end}}{{/* end if .Repository.IsMirror */}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.mirror_settings.pushed_repository"}}
+ {{ctx.Locale.Tr "repo.settings.mirror_settings.direction"}}
+ {{ctx.Locale.Tr "repo.settings.mirror_settings.last_update"}}
+
+
+
+
+ {{range .PushMirrors}}
+
+ {{.RemoteAddress}}
+ {{ctx.Locale.Tr "repo.settings.mirror_settings.direction.push"}}
+ {{if .LastUpdateUnix}}{{DateUtils.FullTime .LastUpdateUnix}}{{else}}{{ctx.Locale.Tr "never"}}{{end}} {{if .LastError}}{{ctx.Locale.Tr "error"}}
{{end}}
+
+
+ {{svg "octicon-pencil" 14}}
+
+
+ {{$.CsrfTokenHtml}}
+
+
+ {{svg "octicon-sync" 14}}
+
+
+ {{$.CsrfTokenHtml}}
+
+
+ {{svg "octicon-trash" 14}}
+
+
+
+ {{else}}
+
+ {{ctx.Locale.Tr "repo.settings.mirror_settings.push_mirror.none"}}
+
+ {{end}}
+ {{if (not .DisableNewPushMirrors)}}
+
+
+
+ {{template "base/disable_form_autofill"}}
+ {{.CsrfTokenHtml}}
+
+
+
{{ctx.Locale.Tr "repo.settings.mirror_settings.push_mirror.remote_url"}}
+
+
{{ctx.Locale.Tr "repo.mirror_address_desc"}}
+
+
+
+ {{ctx.Locale.Tr "repo.need_auth"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.mirror_sync_on_commit"}}
+
+
+
+ {{ctx.Locale.Tr "repo.mirror_interval" .MinimumMirrorInterval}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.mirror_settings.push_mirror.add"}}
+
+
+
+
+ {{end}}
+
+
+ {{end}}
+
+ {{end}}
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+ {{$isCodeEnabled := .Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypeCode}}
+ {{$isCodeGlobalDisabled := ctx.Consts.RepoUnitTypeCode.UnitGlobalDisabled}}
+
+
{{ctx.Locale.Tr "repo.code"}}
+
+
+ {{ctx.Locale.Tr "repo.code.desc"}}
+
+
+
+ {{$isInternalWikiEnabled := .Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypeWiki}}
+ {{$isExternalWikiEnabled := .Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypeExternalWiki}}
+ {{$isWikiEnabled := or $isInternalWikiEnabled $isExternalWikiEnabled}}
+ {{$isWikiGlobalDisabled := ctx.Consts.RepoUnitTypeWiki.UnitGlobalDisabled}}
+ {{$isExternalWikiGlobalDisabled := ctx.Consts.RepoUnitTypeExternalWiki.UnitGlobalDisabled}}
+ {{$isBothWikiGlobalDisabled := and $isWikiGlobalDisabled $isExternalWikiGlobalDisabled}}
+
+
{{ctx.Locale.Tr "repo.wiki"}}
+
+
+ {{ctx.Locale.Tr "repo.settings.wiki_desc"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.use_internal_wiki"}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.default_wiki_branch_name"}}
+
+
+
+ {{$unitInternalWiki := .Repository.MustGetUnit ctx ctx.Consts.RepoUnitTypeWiki}}
+ {{ctx.Locale.Tr "repo.settings.default_wiki_everyone_access"}}
+
+ {{/* everyone access mode is different from others, none means it is unset and won't be applied */}}
+ {{ctx.Locale.Tr "settings.permission_not_set"}}
+ {{ctx.Locale.Tr "settings.permission_read"}}
+ {{ctx.Locale.Tr "settings.permission_write"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.use_external_wiki"}}
+
+
+
+
{{ctx.Locale.Tr "repo.settings.external_wiki_url"}}
+
+
{{ctx.Locale.Tr "repo.settings.external_wiki_url_desc"}}
+
+
+
+
+
+ {{$isIssuesEnabled := or (.Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypeIssues) (.Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypeExternalTracker)}}
+ {{$isIssuesGlobalDisabled := ctx.Consts.RepoUnitTypeIssues.UnitGlobalDisabled}}
+ {{$isExternalTrackerGlobalDisabled := ctx.Consts.RepoUnitTypeExternalTracker.UnitGlobalDisabled}}
+ {{$isIssuesAndExternalGlobalDisabled := and $isIssuesGlobalDisabled $isExternalTrackerGlobalDisabled}}
+
+
{{ctx.Locale.Tr "repo.issues"}}
+
+
+ {{ctx.Locale.Tr "repo.settings.issues_desc"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.use_internal_issue_tracker"}}
+
+
+
+ {{if .Repository.CanEnableTimetracker}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.enable_timetracker"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.allow_only_contributors_to_track_time"}}
+
+
+ {{end}}
+
+
+
+ {{ctx.Locale.Tr "repo.issues.dependency.setting"}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.admin_enable_close_issues_via_commit_in_any_branch"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.use_external_issue_tracker"}}
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.external_tracker_url"}}
+
+
{{ctx.Locale.Tr "repo.settings.external_tracker_url_desc"}}
+
+
+
{{ctx.Locale.Tr "repo.settings.tracker_url_format"}}
+
+
{{ctx.Locale.Tr "repo.settings.tracker_url_format_desc"}}
+
+
+
{{ctx.Locale.Tr "repo.settings.tracker_issue_style"}}
+
+
+ {{$externalTracker := (.Repository.MustGetUnit ctx ctx.Consts.RepoUnitTypeExternalTracker)}}
+ {{$externalTrackerStyle := $externalTracker.ExternalTrackerConfig.ExternalTrackerStyle}}
+
+ {{ctx.Locale.Tr "repo.settings.tracker_issue_style.numeric"}} #1234
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.tracker_issue_style.alphanumeric"}} ABC-123 , DEFG-234
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.tracker_issue_style.regexp"}} (ISSUE-\d+) , ISSUE-(\d+)
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.tracker_issue_style.regexp_pattern"}}
+
+
{{ctx.Locale.Tr "repo.settings.tracker_issue_style.regexp_pattern_desc"}}
+
+
+
+
+
+
+ {{$isProjectsEnabled := .Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypeProjects}}
+ {{$isProjectsGlobalDisabled := ctx.Consts.RepoUnitTypeProjects.UnitGlobalDisabled}}
+ {{$projectsUnit := .Repository.MustGetUnit ctx ctx.Consts.RepoUnitTypeProjects}}
+
+
{{ctx.Locale.Tr "repo.projects"}}
+
+
+ {{ctx.Locale.Tr "repo.settings.projects_desc"}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.projects_mode_desc"}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.projects_mode_repo"}}
+ {{ctx.Locale.Tr "repo.settings.projects_mode_owner"}}
+ {{ctx.Locale.Tr "repo.settings.projects_mode_all"}}
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+ {{if (eq $projectsUnit.ProjectsConfig.GetProjectsMode "repo")}}
+ {{ctx.Locale.Tr "repo.settings.projects_mode_repo"}}
+ {{end}}
+ {{if (eq $projectsUnit.ProjectsConfig.GetProjectsMode "owner")}}
+ {{ctx.Locale.Tr "repo.settings.projects_mode_owner"}}
+ {{end}}
+ {{if (eq $projectsUnit.ProjectsConfig.GetProjectsMode "all")}}
+ {{ctx.Locale.Tr "repo.settings.projects_mode_all"}}
+ {{end}}
+
+
+
+
+
+
+
+ {{$isReleasesEnabled := .Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypeReleases}}
+ {{$isReleasesGlobalDisabled := ctx.Consts.RepoUnitTypeReleases.UnitGlobalDisabled}}
+
+
{{ctx.Locale.Tr "repo.releases"}}
+
+
+ {{ctx.Locale.Tr "repo.settings.releases_desc"}}
+
+
+
+ {{$isPackagesEnabled := .Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypePackages}}
+ {{$isPackagesGlobalDisabled := ctx.Consts.RepoUnitTypePackages.UnitGlobalDisabled}}
+
+
{{ctx.Locale.Tr "repo.packages"}}
+
+
+ {{ctx.Locale.Tr "repo.settings.packages_desc"}}
+
+
+
+ {{if .EnableActions}}
+ {{$isActionsEnabled := .Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypeActions}}
+ {{$isActionsGlobalDisabled := ctx.Consts.RepoUnitTypeActions.UnitGlobalDisabled}}
+
+
{{ctx.Locale.Tr "actions.actions"}}
+
+
+ {{ctx.Locale.Tr "repo.settings.actions_desc"}}
+
+
+ {{end}}
+
+ {{if not .IsMirror}}
+
+ {{$pullRequestEnabled := .Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypePullRequests}}
+ {{$pullRequestGlobalDisabled := ctx.Consts.RepoUnitTypePullRequests.UnitGlobalDisabled}}
+ {{$prUnit := .Repository.MustGetUnit ctx ctx.Consts.RepoUnitTypePullRequests}}
+
+
{{ctx.Locale.Tr "repo.pulls"}}
+
+
+ {{ctx.Locale.Tr "repo.settings.pulls_desc"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.merge_style_desc"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.pulls.merge_pull_request"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.pulls.rebase_merge_pull_request"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.pulls.rebase_merge_commit_pull_request"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.pulls.squash_merge_pull_request"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.pulls.fast_forward_only_merge_pull_request"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.pulls.merge_manually"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.default_merge_style_desc"}}
+
+
+
+ {{ctx.Locale.Tr "repo.pulls.merge_pull_request"}}
+ {{ctx.Locale.Tr "repo.pulls.rebase_merge_pull_request"}}
+ {{ctx.Locale.Tr "repo.pulls.rebase_merge_commit_pull_request"}}
+ {{ctx.Locale.Tr "repo.pulls.squash_merge_pull_request"}}
+ {{ctx.Locale.Tr "repo.pulls.fast_forward_only_merge_pull_request"}}
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+ {{if (eq $prUnit.PullRequestsConfig.DefaultMergeStyle "merge")}}
+ {{ctx.Locale.Tr "repo.pulls.merge_pull_request"}}
+ {{end}}
+ {{if (eq $prUnit.PullRequestsConfig.DefaultMergeStyle "rebase")}}
+ {{ctx.Locale.Tr "repo.pulls.rebase_merge_pull_request"}}
+ {{end}}
+ {{if (eq $prUnit.PullRequestsConfig.DefaultMergeStyle "rebase-merge")}}
+ {{ctx.Locale.Tr "repo.pulls.rebase_merge_commit_pull_request"}}
+ {{end}}
+ {{if (eq $prUnit.PullRequestsConfig.DefaultMergeStyle "squash")}}
+ {{ctx.Locale.Tr "repo.pulls.squash_merge_pull_request"}}
+ {{end}}
+ {{if (eq $prUnit.PullRequestsConfig.DefaultMergeStyle "fast-forward-only")}}
+ {{ctx.Locale.Tr "repo.pulls.fast_forward_only_merge_pull_request"}}
+ {{end}}
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.pulls.default_allow_edits_from_maintainers"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.pulls.allow_rebase_update"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.pulls.default_delete_branch_after_merge"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.pulls.enable_autodetect_manual_merge"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.pulls.ignore_whitespace"}}
+
+
+
+ {{end}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.update_settings"}}
+
+
+
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+
{{ctx.Locale.Tr "repo.settings.trust_model"}}
+
+
+
+
{{ctx.Locale.Tr "repo.settings.trust_model.default"}}
+
{{ctx.Locale.Tr "repo.settings.trust_model.default.desc"}}
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.trust_model.collaborator.long"}}
+
{{ctx.Locale.Tr "repo.settings.trust_model.collaborator.desc"}}
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.trust_model.committer.long"}}
+
{{ctx.Locale.Tr "repo.settings.trust_model.committer.desc"}}
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.trust_model.collaboratorcommitter.long"}}
+
{{ctx.Locale.Tr "repo.settings.trust_model.collaboratorcommitter.desc"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.update_settings"}}
+
+
+
+
+ {{if .IsAdmin}}
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.admin_enable_health_check"}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.update_settings"}}
+
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+ {{if .IsRepoIndexerEnabled}}
+
+
+
{{ctx.Locale.Tr "repo.settings.admin_indexer_commit_sha"}}
+
+ {{if .CodeIndexerStatus}}
+
+ {{ShortSha .CodeIndexerStatus.CommitSha}}
+
+ {{else}}
+ {{ctx.Locale.Tr "repo.settings.admin_indexer_unindexed"}}
+ {{end}}
+
+
+ {{ctx.Locale.Tr "repo.settings.reindex_button"}}
+
+
+ {{end}}
+
+
+ {{if and .StatsIndexerStatus .StatsIndexerStatus.CommitSha}}
+
{{ctx.Locale.Tr "repo.settings.admin_indexer_commit_sha"}}
+ {{end}}
+
+ {{if and .StatsIndexerStatus .StatsIndexerStatus.CommitSha}}
+
+ {{ShortSha .StatsIndexerStatus.CommitSha}}
+
+ {{else}}
+ {{ctx.Locale.Tr "repo.settings.admin_indexer_unindexed"}}
+ {{end}}
+
+
+ {{ctx.Locale.Tr "repo.settings.reindex_button"}}
+
+
+
+
+ {{end}}
+
+ {{if .Permission.IsOwner}}
+
+
+
+ {{if not .Repository.IsFork}}
+
+
+
{{ctx.Locale.Tr "repo.visibility"}}
+ {{if .Repository.IsPrivate}}
+
{{ctx.Locale.Tr "repo.settings.visibility.public.text"}}
+ {{else}}
+
{{ctx.Locale.Tr "repo.settings.visibility.private.text"}}
+ {{end}}
+
+
+
+ {{if .Repository.IsPrivate}}
+ {{ctx.Locale.Tr "repo.settings.visibility.public.button"}}
+ {{else}}
+ {{ctx.Locale.Tr "repo.settings.visibility.private.button"}}
+ {{end}}
+
+
+
+ {{end}}
+ {{if .Repository.IsMirror}}
+
+
+
{{ctx.Locale.Tr "repo.settings.convert"}}
+
{{ctx.Locale.Tr "repo.settings.convert_desc"}}
+
+
+ {{ctx.Locale.Tr "repo.settings.convert"}}
+
+
+ {{end}}
+ {{if and .Repository.IsFork .Repository.Owner.CanCreateRepo}}
+
+
+
{{ctx.Locale.Tr "repo.settings.convert_fork"}}
+
{{ctx.Locale.Tr "repo.settings.convert_fork_desc"}}
+
+
+ {{ctx.Locale.Tr "repo.settings.convert_fork"}}
+
+
+ {{end}}
+
+
+
{{ctx.Locale.Tr "repo.settings.transfer"}}
+
+ {{if .RepoTransfer}}
+ {{ctx.Locale.Tr "repo.settings.transfer_started" .RepoTransfer.Recipient.DisplayName}}
+ {{else}}
+ {{ctx.Locale.Tr "repo.settings.transfer_desc"}}
+ {{end}}
+
+
+
+ {{if .RepoTransfer}}
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "repo.settings.transfer_abort"}}
+
+ {{else}}
+ {{ctx.Locale.Tr "repo.settings.transfer"}}
+ {{end}}
+
+
+ {{if .Permission.CanRead ctx.Consts.RepoUnitTypeWiki}}
+
+
+
{{ctx.Locale.Tr "repo.settings.wiki_delete"}}
+
{{ctx.Locale.Tr "repo.settings.wiki_delete_desc"}}
+
+
+ {{ctx.Locale.Tr "repo.settings.wiki_delete"}}
+
+
+ {{end}}
+
+
+
{{ctx.Locale.Tr "repo.settings.delete"}}
+
{{ctx.Locale.Tr "repo.settings.delete_desc"}}
+
+
+ {{ctx.Locale.Tr "repo.settings.delete"}}
+
+
+ {{if not .Repository.IsMirror}}
+
+
+ {{if .Repository.IsArchived}}
+
{{ctx.Locale.Tr "repo.settings.unarchive.header"}}
+
{{ctx.Locale.Tr "repo.settings.unarchive.text"}}
+ {{else}}
+
{{ctx.Locale.Tr "repo.settings.archive.header"}}
+
{{ctx.Locale.Tr "repo.settings.archive.text"}}
+ {{end}}
+
+
+
+ {{if .Repository.IsArchived}}
+ {{ctx.Locale.Tr "repo.settings.unarchive.button"}}
+ {{else}}
+ {{ctx.Locale.Tr "repo.settings.archive.button"}}
+ {{end}}
+
+
+
+ {{end}}
+
+
+ {{end}}
+
+{{template "repo/settings/layout_footer" .}}
+
+{{if .Permission.IsOwner}}
+ {{if .Repository.IsMirror}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.convert_notices_1"}}
+
+
+ {{.CsrfTokenHtml}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.transfer_form_title"}}
+ {{.Repository.Name}}
+
+
+
+ {{ctx.Locale.Tr "repo.repo_name"}}
+
+
+
+
+ {{ctx.Locale.Tr "settings.cancel"}}
+ {{ctx.Locale.Tr "repo.settings.convert_confirm"}}
+
+
+
+
+ {{end}}
+ {{if and .Repository.IsFork .Repository.Owner.CanCreateRepo}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.convert_fork_notices_1"}}
+
+
+ {{.CsrfTokenHtml}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.transfer_form_title"}}
+ {{.Repository.Name}}
+
+
+
+ {{ctx.Locale.Tr "repo.repo_name"}}
+
+
+
+
+ {{ctx.Locale.Tr "settings.cancel"}}
+ {{ctx.Locale.Tr "repo.settings.convert_fork_confirm"}}
+
+
+
+
+ {{end}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.transfer_notices_1"}}
+ {{ctx.Locale.Tr "repo.settings.transfer_notices_2"}}
+ {{ctx.Locale.Tr "repo.settings.transfer_notices_3"}}
+ {{ctx.Locale.Tr "repo.settings.transfer_notices_4"}}
+
+
+ {{.CsrfTokenHtml}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.transfer_form_title"}}
+ {{.Repository.Name}}
+
+
+
+ {{ctx.Locale.Tr "repo.repo_name"}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.transfer_owner"}}
+
+
+
+
+ {{ctx.Locale.Tr "settings.cancel"}}
+ {{ctx.Locale.Tr "repo.settings.transfer_perform"}}
+
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.delete_notices_1"}}
+ {{ctx.Locale.Tr "repo.settings.delete_notices_2" .Repository.FullName}}
+ {{if .Repository.NumForks}}
+ {{ctx.Locale.Tr "repo.settings.delete_notices_fork_1"}}
+ {{end}}
+
+
+ {{.CsrfTokenHtml}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.transfer_form_title"}}
+ {{.Repository.Name}}
+
+
+
+ {{ctx.Locale.Tr "repo.repo_name"}}
+
+
+
+
+ {{ctx.Locale.Tr "settings.cancel"}}
+ {{ctx.Locale.Tr "repo.settings.confirm_delete"}}
+
+
+
+
+
+ {{if not .Repository.IsFork}}
+
+
+
+ {{if .Repository.IsPrivate}}
+
{{ctx.Locale.Tr "repo.settings.visibility.public.bullet_title"}}
+
+ {{ctx.Locale.Tr "repo.settings.visibility.public.bullet_one"}}
+
+ {{else}}
+
{{ctx.Locale.Tr "repo.settings.visibility.private.bullet_title"}}
+
+ {{ctx.Locale.Tr "repo.settings.visibility.private.bullet_one"}}
+ {{ctx.Locale.Tr "repo.settings.visibility.private.bullet_two"}}{{if .Repository.NumForks}}{{ctx.Locale.Tr "repo.visibility_fork_helper"}} {{end}}
+
+ {{end}}
+
+
+ {{.CsrfTokenHtml}}
+
+
+ {{template "base/modal_actions_confirm" .}}
+
+
+ {{end}}
+
+ {{if .Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypeWiki}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.delete_notices_1"}}
+ {{ctx.Locale.Tr "repo.settings.wiki_delete_notices_1" .Repository.Name}}
+
+
+ {{.CsrfTokenHtml}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.transfer_form_title"}}
+ {{.Repository.Name}}
+
+
+
+ {{ctx.Locale.Tr "repo.repo_name"}}
+
+
+
+
+ {{ctx.Locale.Tr "settings.cancel"}}
+ {{ctx.Locale.Tr "repo.settings.confirm_wiki_delete"}}
+
+
+
+
+ {{end}}
+
+ {{if not .Repository.IsMirror}}
+
+
+
+
+ {{if .Repository.IsArchived}}
+ {{ctx.Locale.Tr "repo.settings.unarchive.text"}}
+ {{else}}
+ {{ctx.Locale.Tr "repo.settings.archive.text"}}
+ {{end}}
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+ {{template "base/modal_actions_confirm" .}}
+
+
+ {{end}}
+{{end}}
+
+{{template "repo/settings/push_mirror_sync_modal" .}}
diff --git a/repo/settings/protected_branch.tmpl b/repo/settings/protected_branch.tmpl
new file mode 100644
index 0000000..61cc607
--- /dev/null
+++ b/repo/settings/protected_branch.tmpl
@@ -0,0 +1,341 @@
+{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings branches")}}
+
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.protect_branch_name_pattern"}}
+
+
+
{{ctx.Locale.Tr "repo.settings.protect_branch_name_pattern_desc" "https://github.com/gobwas/glob"}}
+
+
+
{{ctx.Locale.Tr "repo.settings.protect_protected_file_patterns"}}
+
+
{{ctx.Locale.Tr "repo.settings.protect_protected_file_patterns_desc" "https://pkg.go.dev/github.com/gobwas/glob#Compile" "github.com/gobwas/glob"}}
+
+
+
{{ctx.Locale.Tr "repo.settings.protect_unprotected_file_patterns"}}
+
+
{{ctx.Locale.Tr "repo.settings.protect_unprotected_file_patterns_desc" "https://pkg.go.dev/github.com/gobwas/glob#Compile" "github.com/gobwas/glob"}}
+
+
+ {{.CsrfTokenHtml}}
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.protect_disable_push"}}
+
{{ctx.Locale.Tr "repo.settings.protect_disable_push_desc"}}
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.protect_enable_push"}}
+
{{ctx.Locale.Tr "repo.settings.protect_enable_push_desc"}}
+
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.protect_whitelist_committers"}}
+
{{ctx.Locale.Tr "repo.settings.protect_whitelist_committers_desc"}}
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.protect_whitelist_users"}}
+
+
+
{{ctx.Locale.Tr "search.user_kind"}}
+
+
+
+ {{if .Owner.IsOrganization}}
+
+
{{ctx.Locale.Tr "repo.settings.protect_whitelist_teams"}}
+
+
+
{{ctx.Locale.Tr "search.team_kind"}}
+
+
+
+ {{end}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.protect_whitelist_deploy_keys"}}
+
+
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.require_signed_commits"}}
+
{{ctx.Locale.Tr "repo.settings.require_signed_commits_desc"}}
+
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.protect_disable_force_push"}}
+
{{ctx.Locale.Tr "repo.settings.protect_disable_force_push_desc"}}
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.protect_enable_force_push_all"}}
+
{{ctx.Locale.Tr "repo.settings.protect_enable_force_push_all_desc"}}
+
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.protect_enable_force_push_allowlist"}}
+
{{ctx.Locale.Tr "repo.settings.protect_enable_force_push_allowlist_desc"}}
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.protect_force_push_allowlist_users"}}
+
+
+
{{ctx.Locale.Tr "search.user_kind"}}
+
+
+
+ {{if .Owner.IsOrganization}}
+
+
{{ctx.Locale.Tr "repo.settings.protect_force_push_allowlist_teams"}}
+
+
+
{{ctx.Locale.Tr "search.team_kind"}}
+
+
+
+ {{end}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.protect_force_push_allowlist_deploy_keys"}}
+
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.protect_required_approvals"}}
+
+
{{ctx.Locale.Tr "repo.settings.protect_required_approvals_desc"}}
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.protect_approvals_whitelist_enabled"}}
+
{{ctx.Locale.Tr "repo.settings.protect_approvals_whitelist_enabled_desc"}}
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.protect_approvals_whitelist_users"}}
+
+
+
{{ctx.Locale.Tr "search.user_kind"}}
+
+
+
+ {{if .Owner.IsOrganization}}
+
+
{{ctx.Locale.Tr "repo.settings.protect_approvals_whitelist_teams"}}
+
+
+
{{ctx.Locale.Tr "search.team_kind"}}
+
+
+
+ {{end}}
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.dismiss_stale_approvals"}}
+
{{ctx.Locale.Tr "repo.settings.dismiss_stale_approvals_desc"}}
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.ignore_stale_approvals"}}
+
{{ctx.Locale.Tr "repo.settings.ignore_stale_approvals_desc"}}
+
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.protect_check_status_contexts"}}
+
{{ctx.Locale.Tr "repo.settings.protect_check_status_contexts_desc"}}
+
+
+
+
{{ctx.Locale.Tr "repo.settings.protect_status_check_patterns"}}
+
{{.status_check_contexts}}
+
{{ctx.Locale.Tr "repo.settings.protect_status_check_patterns_desc"}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.protect_check_status_contexts_list"}}
+
+
+
+ {{range $.recent_status_checks}}
+
+
+ {{.}}
+ {{ctx.Locale.Tr "repo.settings.protect_status_check_matched"}}
+
+
+ {{else}}
+ -
+ {{end}}
+
+
+
+
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.protect_enable_merge"}}
+
{{ctx.Locale.Tr "repo.settings.protect_enable_merge_desc"}}
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.protect_merge_whitelist_committers"}}
+
{{ctx.Locale.Tr "repo.settings.protect_merge_whitelist_committers_desc"}}
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.protect_merge_whitelist_users"}}
+
+
+
{{ctx.Locale.Tr "search.user_kind"}}
+
+
+
+ {{if .Owner.IsOrganization}}
+
+
{{ctx.Locale.Tr "repo.settings.protect_merge_whitelist_teams"}}
+
+
+
{{ctx.Locale.Tr "search.team_kind"}}
+
+
+
+ {{end}}
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.block_rejected_reviews"}}
+
{{ctx.Locale.Tr "repo.settings.block_rejected_reviews_desc"}}
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.block_on_official_review_requests"}}
+
{{ctx.Locale.Tr "repo.settings.block_on_official_review_requests_desc"}}
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.block_outdated_branch"}}
+
{{ctx.Locale.Tr "repo.settings.block_outdated_branch_desc"}}
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.block_admin_merge_override"}}
+
{{ctx.Locale.Tr "repo.settings.block_admin_merge_override_desc"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.protected_branch.save_rule"}}
+
+
+
+
+{{template "repo/settings/layout_footer" .}}
diff --git a/repo/settings/push_mirror_sync_modal.tmpl b/repo/settings/push_mirror_sync_modal.tmpl
new file mode 100644
index 0000000..e8dad61
--- /dev/null
+++ b/repo/settings/push_mirror_sync_modal.tmpl
@@ -0,0 +1,32 @@
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+
+
{{ctx.Locale.Tr "repo.settings.mirror_settings.mirrored_repository"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.mirror_interval" .MinimumMirrorInterval}}
+
+
+
+
+ {{svg "octicon-x"}}
+ {{ctx.Locale.Tr "cancel"}}
+
+
+ {{svg "fontawesome-save"}}
+ {{ctx.Locale.Tr "save"}}
+
+
+
+
+
diff --git a/repo/settings/runner_edit.tmpl b/repo/settings/runner_edit.tmpl
new file mode 100644
index 0000000..8b76aea
--- /dev/null
+++ b/repo/settings/runner_edit.tmpl
@@ -0,0 +1,5 @@
+{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings runners")}}
+
+ {{template "shared/actions/runner_edit" .}}
+
+{{template "repo/settings/layout_footer" .}}
diff --git a/repo/settings/secrets.tmpl b/repo/settings/secrets.tmpl
new file mode 100644
index 0000000..0b89639
--- /dev/null
+++ b/repo/settings/secrets.tmpl
@@ -0,0 +1,5 @@
+{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings")}}
+
+ {{template "shared/secrets/add_list" .}}
+
+{{template "repo/settings/layout_footer" .}}
diff --git a/repo/settings/tags.tmpl b/repo/settings/tags.tmpl
new file mode 100644
index 0000000..27b0f51
--- /dev/null
+++ b/repo/settings/tags.tmpl
@@ -0,0 +1,126 @@
+{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings edit")}}
+
+ {{if .Repository.IsArchived}}
+
+ {{ctx.Locale.Tr "repo.settings.archive.tagsettings_unavailable"}}
+
+ {{else}}
+
+
+
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+
{{ctx.Locale.Tr "repo.settings.tags.protection.pattern"}}
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.tags.protection.pattern.description" "https://docs.gitea.com/usage/protected-tags"}}
+
+
+
+
{{ctx.Locale.Tr "repo.settings.tags.protection.allowed.users"}}
+
+
+
{{ctx.Locale.Tr "search.user_kind"}}
+
+
+
+ {{if .Owner.IsOrganization}}
+
+
{{ctx.Locale.Tr "repo.settings.tags.protection.allowed.teams"}}
+
+
+
{{ctx.Locale.Tr "search.team_kind"}}
+
+
+
+ {{end}}
+
+ {{if .PageIsEditProtectedTag}}
+
+ {{ctx.Locale.Tr "save"}}
+
+
+ {{ctx.Locale.Tr "cancel"}}
+
+ {{else}}
+
+ {{ctx.Locale.Tr "repo.settings.tags.protection.create"}}
+
+ {{end}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.tags.protection.pattern"}}
+ {{ctx.Locale.Tr "repo.settings.tags.protection.allowed"}}
+
+
+
+ {{range .ProtectedTags}}
+
+ {{.NamePattern}}
+
+ {{if or .AllowlistUserIDs (and $.Owner.IsOrganization .AllowlistTeamIDs)}}
+ {{$userIDs := .AllowlistUserIDs}}
+ {{range $.Users}}
+ {{if SliceUtils.Contains $userIDs .ID}}
+ {{ctx.AvatarUtils.Avatar . 26}} {{.GetDisplayName}}
+ {{end}}
+ {{end}}
+ {{if $.Owner.IsOrganization}}
+ {{$teamIDs := .AllowlistTeamIDs}}
+ {{range $.Teams}}
+ {{if SliceUtils.Contains $teamIDs .ID}}
+ {{.Name}}
+ {{end}}
+ {{end}}
+ {{end}}
+ {{else}}
+ {{ctx.Locale.Tr "repo.settings.tags.protection.allowed.noone"}}
+ {{end}}
+
+
+ {{ctx.Locale.Tr "edit"}}
+
+ {{$.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "remove"}}
+
+
+
+ {{else}}
+ {{ctx.Locale.Tr "repo.settings.tags.protection.none"}}
+ {{end}}
+
+
+
+
+
+ {{end}}
+
+{{template "repo/settings/layout_footer" .}}
diff --git a/repo/settings/webhook/base.tmpl b/repo/settings/webhook/base.tmpl
new file mode 100644
index 0000000..d524722
--- /dev/null
+++ b/repo/settings/webhook/base.tmpl
@@ -0,0 +1,5 @@
+{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings webhooks")}}
+
+ {{template "repo/settings/webhook/list" .}}
+
+{{template "repo/settings/layout_footer" .}}
diff --git a/repo/settings/webhook/base_list.tmpl b/repo/settings/webhook/base_list.tmpl
new file mode 100644
index 0000000..36e75a7
--- /dev/null
+++ b/repo/settings/webhook/base_list.tmpl
@@ -0,0 +1,26 @@
+
+
+
+
+ {{.Description}}
+
+ {{range .Webhooks}}
+
+ {{end}}
+
+
diff --git a/repo/settings/webhook/delete_modal.tmpl b/repo/settings/webhook/delete_modal.tmpl
new file mode 100644
index 0000000..9955ed3
--- /dev/null
+++ b/repo/settings/webhook/delete_modal.tmpl
@@ -0,0 +1,10 @@
+
+
+
+
{{ctx.Locale.Tr "repo.settings.webhook_deletion_desc"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
diff --git a/repo/settings/webhook/dingtalk.tmpl b/repo/settings/webhook/dingtalk.tmpl
new file mode 100644
index 0000000..0ba99e9
--- /dev/null
+++ b/repo/settings/webhook/dingtalk.tmpl
@@ -0,0 +1,11 @@
+{{if eq .HookType "dingtalk"}}
+ {{ctx.Locale.Tr "repo.settings.add_web_hook_desc" "https://dingtalk.com" (ctx.Locale.Tr "repo.settings.web_hook_name_dingtalk")}}
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "repo.settings.payload_url"}}
+
+
+ {{template "repo/settings/webhook/settings" .}}
+
+{{end}}
diff --git a/repo/settings/webhook/discord.tmpl b/repo/settings/webhook/discord.tmpl
new file mode 100644
index 0000000..104346e
--- /dev/null
+++ b/repo/settings/webhook/discord.tmpl
@@ -0,0 +1,19 @@
+{{if eq .HookType "discord"}}
+ {{ctx.Locale.Tr "repo.settings.add_web_hook_desc" "https://discord.com" (ctx.Locale.Tr "repo.settings.web_hook_name_discord")}}
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "repo.settings.payload_url"}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.discord_username"}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.discord_icon_url"}}
+
+
+ {{template "repo/settings/webhook/settings" .}}
+
+{{end}}
diff --git a/repo/settings/webhook/feishu.tmpl b/repo/settings/webhook/feishu.tmpl
new file mode 100644
index 0000000..d80deab
--- /dev/null
+++ b/repo/settings/webhook/feishu.tmpl
@@ -0,0 +1,12 @@
+{{if eq .HookType "feishu"}}
+ {{ctx.Locale.Tr "repo.settings.add_web_hook_desc" "https://feishu.cn" (ctx.Locale.Tr "repo.settings.web_hook_name_feishu")}}
+ {{ctx.Locale.Tr "repo.settings.add_web_hook_desc" "https://larksuite.com" (ctx.Locale.Tr "repo.settings.web_hook_name_larksuite")}}
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "repo.settings.payload_url"}}
+
+
+ {{template "repo/settings/webhook/settings" .}}
+
+{{end}}
diff --git a/repo/settings/webhook/gitea.tmpl b/repo/settings/webhook/gitea.tmpl
new file mode 100644
index 0000000..e6eb61e
--- /dev/null
+++ b/repo/settings/webhook/gitea.tmpl
@@ -0,0 +1,40 @@
+{{if eq .HookType "gitea"}}
+ {{ctx.Locale.Tr "repo.settings.add_web_hook_desc" "https://docs.gitea.com/usage/webhooks" (ctx.Locale.Tr "repo.settings.web_hook_name_gitea")}}
+
+ {{template "base/disable_form_autofill"}}
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "repo.settings.payload_url"}}
+
+
+
+
{{ctx.Locale.Tr "repo.settings.http_method"}}
+
+
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+
{{ctx.Locale.Tr "repo.settings.content_type"}}
+
+
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.secret"}}
+
+
+ {{template "repo/settings/webhook/settings" .}}
+
+{{end}}
diff --git a/repo/settings/webhook/gogs.tmpl b/repo/settings/webhook/gogs.tmpl
new file mode 100644
index 0000000..e91a327
--- /dev/null
+++ b/repo/settings/webhook/gogs.tmpl
@@ -0,0 +1,28 @@
+{{if eq .HookType "gogs"}}
+ {{ctx.Locale.Tr "repo.settings.add_web_hook_desc" "https://docs.gitea.com/usage/webhooks" (ctx.Locale.Tr "repo.settings.web_hook_name_gogs")}}
+
+ {{template "base/disable_form_autofill"}}
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "repo.settings.payload_url"}}
+
+
+
+
{{ctx.Locale.Tr "repo.settings.content_type"}}
+
+
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.secret"}}
+
+
+ {{template "repo/settings/webhook/settings" .}}
+
+{{end}}
diff --git a/repo/settings/webhook/history.tmpl b/repo/settings/webhook/history.tmpl
new file mode 100644
index 0000000..ea3c037
--- /dev/null
+++ b/repo/settings/webhook/history.tmpl
@@ -0,0 +1,92 @@
+{{$isNew:=or .PageIsSettingsHooksNew .PageIsAdminDefaultHooksNew .PageIsAdminSystemHooksNew}}
+{{if .PageIsSettingsHooksEdit}}
+
+
+
+ {{range .History}}
+
+
+
+ {{if .IsSucceed}}
+
{{svg "octicon-check"}}
+ {{else if not .IsDelivered}}
+
{{svg "octicon-stopwatch"}}
+ {{else}}
+
{{svg "octicon-alert"}}
+ {{end}}
+
{{.UUID}}
+
+
+ {{DateUtils.TimeSince .Delivered}}
+
+
+
+
+
+ {{if .RequestInfo}}
+
{{ctx.Locale.Tr "repo.settings.webhook.headers"}}
+
Request URL: {{.RequestInfo.URL}}
+Request method: {{if .RequestInfo.HTTPMethod}}{{.RequestInfo.HTTPMethod}}{{else}}POST{{end}}
+{{range $key, $val := .RequestInfo.Headers}}{{$key}}: {{$val}}
+{{end}}
+
{{ctx.Locale.Tr "repo.settings.webhook.payload"}}
+
{{or .RequestInfo.Body .PayloadContent}}
+ {{else}}
+ -
+ {{end}}
+
+
+ {{if .ResponseInfo}}
+
{{ctx.Locale.Tr "repo.settings.webhook.headers"}}
+
{{range $key, $val := .ResponseInfo.Headers}}{{$key}}: {{$val}}
+{{end}}
+
{{ctx.Locale.Tr "repo.settings.webhook.body"}}
+
{{.ResponseInfo.Body}}
+ {{else}}
+ -
+ {{end}}
+
+
+
+ {{end}}
+
+
+{{end}}
diff --git a/repo/settings/webhook/link_menu.tmpl b/repo/settings/webhook/link_menu.tmpl
new file mode 100644
index 0000000..e2c86dc
--- /dev/null
+++ b/repo/settings/webhook/link_menu.tmpl
@@ -0,0 +1,50 @@
+{{$size := 20}}
+{{if .Size}}
+ {{$size = .Size}}
+{{end}}
+
diff --git a/repo/settings/webhook/list.tmpl b/repo/settings/webhook/list.tmpl
new file mode 100644
index 0000000..b24159f
--- /dev/null
+++ b/repo/settings/webhook/list.tmpl
@@ -0,0 +1,4 @@
+
+{{template "repo/settings/webhook/base_list" .}}
+
+{{template "repo/settings/webhook/delete_modal" .}}
diff --git a/repo/settings/webhook/matrix.tmpl b/repo/settings/webhook/matrix.tmpl
new file mode 100644
index 0000000..7f1c9f0
--- /dev/null
+++ b/repo/settings/webhook/matrix.tmpl
@@ -0,0 +1,27 @@
+{{if eq .HookType "matrix"}}
+ {{ctx.Locale.Tr "repo.settings.add_web_hook_desc" "https://matrix.org/" (ctx.Locale.Tr "repo.settings.web_hook_name_matrix")}}
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "repo.settings.matrix.homeserver_url"}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.matrix.room_id"}}
+
+
+
+
{{ctx.Locale.Tr "repo.settings.matrix.message_type"}}
+
+
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+ {{template "repo/settings/webhook/settings" .}}
+
+{{end}}
diff --git a/repo/settings/webhook/msteams.tmpl b/repo/settings/webhook/msteams.tmpl
new file mode 100644
index 0000000..62ea24e
--- /dev/null
+++ b/repo/settings/webhook/msteams.tmpl
@@ -0,0 +1,11 @@
+{{if eq .HookType "msteams"}}
+ {{ctx.Locale.Tr "repo.settings.add_web_hook_desc" "https://teams.microsoft.com" (ctx.Locale.Tr "repo.settings.web_hook_name_msteams")}}
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "repo.settings.payload_url"}}
+
+
+ {{template "repo/settings/webhook/settings" .}}
+
+{{end}}
diff --git a/repo/settings/webhook/new.tmpl b/repo/settings/webhook/new.tmpl
new file mode 100644
index 0000000..b04a442
--- /dev/null
+++ b/repo/settings/webhook/new.tmpl
@@ -0,0 +1,7 @@
+{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings new webhook")}}
+
+ {{$CustomHeaderTitle := ctx.Locale.Tr "repo.settings.update_webhook"}}
+ {{if .PageIsSettingsHooksNew}}{{$CustomHeaderTitle = ctx.Locale.Tr "repo.settings.add_webhook"}}{{end}}
+ {{template "webhook/new" (dict "ctxData" . "CustomHeaderTitle" $CustomHeaderTitle)}}
+
+{{template "repo/settings/layout_footer" .}}
diff --git a/repo/settings/webhook/packagist.tmpl b/repo/settings/webhook/packagist.tmpl
new file mode 100644
index 0000000..25aba2a
--- /dev/null
+++ b/repo/settings/webhook/packagist.tmpl
@@ -0,0 +1,19 @@
+{{if eq .HookType "packagist"}}
+ {{ctx.Locale.Tr "repo.settings.add_web_hook_desc" "https://packagist.org" (ctx.Locale.Tr "repo.settings.web_hook_name_packagist")}}
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "repo.settings.packagist_username"}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.packagist_api_token"}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.packagist_package_url"}}
+
+
+ {{template "repo/settings/webhook/settings" .}}
+
+{{end}}
diff --git a/repo/settings/webhook/settings.tmpl b/repo/settings/webhook/settings.tmpl
new file mode 100644
index 0000000..07e7305
--- /dev/null
+++ b/repo/settings/webhook/settings.tmpl
@@ -0,0 +1,299 @@
+{{$isNew:=or .PageIsSettingsHooksNew .PageIsAdminDefaultHooksNew .PageIsAdminSystemHooksNew}}
+
+
{{ctx.Locale.Tr "repo.settings.event_desc"}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.event_push_only"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.event_send_everything"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.event_choose"}}
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.event_header_repository"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.event_create"}}
+ {{ctx.Locale.Tr "repo.settings.event_create_desc"}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.event_delete"}}
+ {{ctx.Locale.Tr "repo.settings.event_delete_desc"}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.event_fork"}}
+ {{ctx.Locale.Tr "repo.settings.event_fork_desc"}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.event_push"}}
+ {{ctx.Locale.Tr "repo.settings.event_push_desc"}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.event_repository"}}
+ {{ctx.Locale.Tr "repo.settings.event_repository_desc"}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.event_release"}}
+ {{ctx.Locale.Tr "repo.settings.event_release_desc"}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.event_package"}}
+ {{ctx.Locale.Tr "repo.settings.event_package_desc"}}
+
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.event_wiki"}}
+ {{ctx.Locale.Tr "repo.settings.event_wiki_desc"}}
+
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.event_statuses"}}
+ {{ctx.Locale.Tr "repo.settings.event_statuses_desc"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.event_header_issue"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.event_issues"}}
+ {{ctx.Locale.Tr "repo.settings.event_issues_desc"}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.event_issue_assign"}}
+ {{ctx.Locale.Tr "repo.settings.event_issue_assign_desc"}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.event_issue_label"}}
+ {{ctx.Locale.Tr "repo.settings.event_issue_label_desc"}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.event_issue_milestone"}}
+ {{ctx.Locale.Tr "repo.settings.event_issue_milestone_desc"}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.event_issue_comment"}}
+ {{ctx.Locale.Tr "repo.settings.event_issue_comment_desc"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.event_header_pull_request"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.event_pull_request"}}
+ {{ctx.Locale.Tr "repo.settings.event_pull_request_desc"}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.event_pull_request_assign"}}
+ {{ctx.Locale.Tr "repo.settings.event_pull_request_assign_desc"}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.event_pull_request_label"}}
+ {{ctx.Locale.Tr "repo.settings.event_pull_request_label_desc"}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.event_pull_request_milestone"}}
+ {{ctx.Locale.Tr "repo.settings.event_pull_request_milestone_desc"}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.event_pull_request_comment"}}
+ {{ctx.Locale.Tr "repo.settings.event_pull_request_comment_desc"}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.event_pull_request_review"}}
+ {{ctx.Locale.Tr "repo.settings.event_pull_request_review_desc"}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.event_pull_request_sync"}}
+ {{ctx.Locale.Tr "repo.settings.event_pull_request_sync_desc"}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.event_pull_request_review_request"}}
+ {{ctx.Locale.Tr "repo.settings.event_pull_request_review_request_desc"}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.branch_filter"}}
+
+ {{ctx.Locale.Tr "repo.settings.branch_filter_desc" "https://pkg.go.dev/github.com/gobwas/glob#Compile" "github.com/gobwas/glob"}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.authorization_header"}}
+
+ {{if ne .HookType "matrix"}}{{/* Matrix doesn't make the authorization optional but it is implied by the help string, should be changed.*/}}
+ {{ctx.Locale.Tr "repo.settings.authorization_header_desc" ("Bearer token123456
, Basic YWxhZGRpbjpvcGVuc2VzYW1l
" | SafeHTML)}}
+ {{end}}
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.active"}}
+ {{ctx.Locale.Tr "repo.settings.active_helper"}}
+
+
+
+
+{{template "repo/settings/webhook/delete_modal" .}}
diff --git a/repo/settings/webhook/slack.tmpl b/repo/settings/webhook/slack.tmpl
new file mode 100644
index 0000000..e7cae92
--- /dev/null
+++ b/repo/settings/webhook/slack.tmpl
@@ -0,0 +1,28 @@
+{{if eq .HookType "slack"}}
+ {{ctx.Locale.Tr "repo.settings.add_web_hook_desc" "https://slack.com" (ctx.Locale.Tr "repo.settings.web_hook_name_slack")}}
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "repo.settings.payload_url"}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.slack_channel"}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.settings.slack_username"}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.slack_icon_url"}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.slack_color"}}
+
+
+ {{template "repo/settings/webhook/settings" .}}
+
+{{end}}
diff --git a/repo/settings/webhook/telegram.tmpl b/repo/settings/webhook/telegram.tmpl
new file mode 100644
index 0000000..f92c2be
--- /dev/null
+++ b/repo/settings/webhook/telegram.tmpl
@@ -0,0 +1,19 @@
+{{if eq .HookType "telegram"}}
+ {{ctx.Locale.Tr "repo.settings.add_web_hook_desc" "https://core.telegram.org/bots" (ctx.Locale.Tr "repo.settings.web_hook_name_telegram")}}
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "repo.settings.bot_token"}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.chat_id"}}
+
+
+
+ {{ctx.Locale.Tr "repo.settings.thread_id"}}
+
+
+ {{template "repo/settings/webhook/settings" .}}
+
+{{end}}
diff --git a/repo/settings/webhook/wechatwork.tmpl b/repo/settings/webhook/wechatwork.tmpl
new file mode 100644
index 0000000..78a1617
--- /dev/null
+++ b/repo/settings/webhook/wechatwork.tmpl
@@ -0,0 +1,11 @@
+{{if eq .HookType "wechatwork"}}
+ {{ctx.Locale.Tr "repo.settings.add_web_hook_desc" "https://work.weixin.qq.com" (ctx.Locale.Tr "repo.settings.web_hook_name_wechatwork")}}
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "repo.settings.payload_url"}}
+
+
+ {{template "repo/settings/webhook/settings" .}}
+
+{{end}}
diff --git a/repo/shabox_badge.tmpl b/repo/shabox_badge.tmpl
new file mode 100644
index 0000000..36fc9e0
--- /dev/null
+++ b/repo/shabox_badge.tmpl
@@ -0,0 +1,15 @@
+
diff --git a/repo/star_unstar.tmpl b/repo/star_unstar.tmpl
new file mode 100644
index 0000000..9234a0d
--- /dev/null
+++ b/repo/star_unstar.tmpl
@@ -0,0 +1,13 @@
+
+
+
diff --git a/repo/sub_menu.tmpl b/repo/sub_menu.tmpl
new file mode 100644
index 0000000..b39db95
--- /dev/null
+++ b/repo/sub_menu.tmpl
@@ -0,0 +1,19 @@
+{{if and (not .HideRepoInfo) (not .IsBlame)}}
+
+
+
+{{end}}
diff --git a/repo/tag/list.tmpl b/repo/tag/list.tmpl
new file mode 100644
index 0000000..9789943
--- /dev/null
+++ b/repo/tag/list.tmpl
@@ -0,0 +1,88 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+ {{template "base/alert" .}}
+ {{template "repo/release_tag_header" .}}
+
+ {{$canReadReleases := $.Permission.CanRead ctx.Consts.RepoUnitTypeReleases}}
+
+
+ {{template "shared/search/combo" dict "Value" .Keyword "Placeholder" (ctx.Locale.Tr "search.tag_kind") "Tooltip" (ctx.Locale.Tr "search.tag_tooltip")}}
+
+
+
+ {{if .Releases}}
+
+ {{else}}
+ {{if .NumTags}}
+
{{ctx.Locale.Tr "no_results_found"}}
+ {{end}}
+ {{end}}
+
+ {{template "base/paginate" .}}
+
+
+
+{{if $.Permission.CanWrite ctx.Consts.RepoUnitTypeCode}}
+
+
+
+
{{ctx.Locale.Tr "repo.release.deletion_tag_desc"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+{{end}}
+
+{{template "base/footer" .}}
diff --git a/repo/tag/name.tmpl b/repo/tag/name.tmpl
new file mode 100644
index 0000000..c304201
--- /dev/null
+++ b/repo/tag/name.tmpl
@@ -0,0 +1,3 @@
+
+{{svg "octicon-tag"}} {{.TagName}}
+
diff --git a/repo/unicode_escape_prompt.tmpl b/repo/unicode_escape_prompt.tmpl
new file mode 100644
index 0000000..8bceafa
--- /dev/null
+++ b/repo/unicode_escape_prompt.tmpl
@@ -0,0 +1,22 @@
+{{if .EscapeStatus}}
+ {{if .EscapeStatus.HasInvisible}}
+
+
{{svg "octicon-x" 16 "close inside"}}
+
+
{{ctx.Locale.Tr "repo.invisible_runes_description"}}
+ {{if .EscapeStatus.HasAmbiguous}}
+
{{ctx.Locale.Tr "repo.ambiguous_runes_description"}}
+ {{end}}
+
+ {{else if .EscapeStatus.HasAmbiguous}}
+
+
{{svg "octicon-x" 16 "close inside"}}
+
+
{{ctx.Locale.Tr "repo.ambiguous_runes_description"}}
+
+ {{end}}
+{{end}}
diff --git a/repo/upload.tmpl b/repo/upload.tmpl
new file mode 100644
index 0000000..eef5199
--- /dev/null
+++ b/repo/upload.tmpl
@@ -0,0 +1,15 @@
+
diff --git a/repo/user_cards.tmpl b/repo/user_cards.tmpl
new file mode 100644
index 0000000..360aeaf
--- /dev/null
+++ b/repo/user_cards.tmpl
@@ -0,0 +1,39 @@
+
+
+
+ {{if .CardsTitle}}
+
+ {{end}}
+
+
+ {{template "base/paginate" .}}
+
diff --git a/repo/view_file.tmpl b/repo/view_file.tmpl
new file mode 100644
index 0000000..86366ae
--- /dev/null
+++ b/repo/view_file.tmpl
@@ -0,0 +1,143 @@
+
+ {{- if .FileError}}
+
+ {{end}}
+ {{- if .FileWarning}}
+
+ {{end}}
+
+ {{if not .ReadmeInList}}
+
+ {{end}}
+
+
+
+ {{if not (or .IsMarkup .IsRenderedHTML)}}
+ {{template "repo/unicode_escape_prompt" dict "EscapeStatus" .EscapeStatus "root" $}}
+ {{end}}
+
+ {{if .IsFileTooLarge}}
+ {{template "shared/filetoolarge" dict "RawFileLink" .RawFileLink}}
+ {{else if not .FileSize}}
+ {{template "shared/fileisempty"}}
+ {{else if .IsMarkup}}
+ {{if .FileContent}}{{.FileContent}}{{end}}
+ {{else if .IsPlainText}}
+
{{if .FileContent}}{{.FileContent}}{{end}}
+ {{else if not .IsTextSource}}
+
+ {{if .IsImageFile}}
+
+ {{else if .IsVideoFile}}
+
+ {{ctx.Locale.Tr "repo.video_not_supported_in_browser"}}
+
+ {{else if .IsAudioFile}}
+
+ {{ctx.Locale.Tr "repo.audio_not_supported_in_browser"}}
+
+ {{else if .IsPDFFile}}
+
+ {{else}}
+
{{ctx.Locale.Tr "repo.file_view_raw"}}
+ {{end}}
+
+ {{else if .FileSize}}
+
+
+ {{range $idx, $code := .FileContent}}
+ {{$line := Eval $idx "+" 1}}
+
+
+ {{if $.EscapeStatus.Escaped}}
+ {{if (index $.LineEscapeStatus $idx).Escaped}} {{end}}
+ {{end}}
+ {{$code}}
+
+ {{end}}
+
+
+
+ {{end}}
+
+
+
diff --git a/repo/view_list.tmpl b/repo/view_list.tmpl
new file mode 100644
index 0000000..c50a0d3
--- /dev/null
+++ b/repo/view_list.tmpl
@@ -0,0 +1,57 @@
+{{/* use grid layout, still use the old ID because there are many other CSS styles depending on this ID */}}
+
+
+
{{template "repo/latest_commit" .}}
+
{{if and .LatestCommit .LatestCommit.Committer}}{{DateUtils.TimeSince .LatestCommit.Committer.When}}{{end}}
+
+ {{if .HasParentPath}}
+
+ {{svg "octicon-file-directory-fill"}} ..
+
+ {{end}}
+ {{range $item := .Files}}
+
+ {{$entry := $item.Entry}}
+ {{$commit := $item.Commit}}
+ {{$subModuleFile := $item.SubModuleFile}}
+
+
+ {{if $commit}}
+ {{$commitLink := printf "%s/commit/%s" $.RepoLink (PathEscape $commit.ID.String)}}
+ {{ctx.RenderUtils.RenderCommitMessageLinkSubject $commit.Message $commitLink ($.Repository.ComposeMetas ctx)}}
+ {{else}}
+ … {{/* will be loaded again by LastCommitLoaderURL */}}
+ {{end}}
+
+
{{if $commit}}{{DateUtils.TimeSince $commit.Committer.When}}{{end}}
+
+ {{end}}
+
diff --git a/repo/watch_unwatch.tmpl b/repo/watch_unwatch.tmpl
new file mode 100644
index 0000000..465cd91
--- /dev/null
+++ b/repo/watch_unwatch.tmpl
@@ -0,0 +1,13 @@
+
+
+
diff --git a/repo/watchers.tmpl b/repo/watchers.tmpl
new file mode 100644
index 0000000..1828544
--- /dev/null
+++ b/repo/watchers.tmpl
@@ -0,0 +1,8 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+ {{template "repo/user_cards" .}}
+
+
+{{template "base/footer" .}}
diff --git a/repo/wiki/new.tmpl b/repo/wiki/new.tmpl
new file mode 100644
index 0000000..ea2913c
--- /dev/null
+++ b/repo/wiki/new.tmpl
@@ -0,0 +1,45 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+ {{template "base/alert" .}}
+
+
+ {{.CsrfTokenHtml}}
+
+
+
+
+ {{ctx.Locale.Tr "repo.wiki.page_name_desc"}}
+
+
+ {{$content := .content}}
+ {{if not .PageIsWikiEdit}}
+ {{$content = ctx.Locale.Tr "repo.wiki.welcome"}}
+ {{end}}
+ {{template "shared/combomarkdowneditor" (dict
+ "CustomInit" true
+ "MarkdownPreviewInRepo" $.Repository
+ "MarkdownPreviewMode" "wiki"
+ "TextareaName" "content"
+ "TextareaContent" $content
+ "TextareaPlaceholder" (ctx.Locale.Tr "repo.wiki.page_content")
+ )}}
+
+
+
+
+
+
+
{{ctx.Locale.Tr "cancel"}}
+
{{ctx.Locale.Tr "repo.wiki.save_page"}}
+
+
+
+
+{{template "base/footer" .}}
diff --git a/repo/wiki/pages.tmpl b/repo/wiki/pages.tmpl
new file mode 100644
index 0000000..38d6d6f
--- /dev/null
+++ b/repo/wiki/pages.tmpl
@@ -0,0 +1,31 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+
+ {{if .IsRepositoryAdmin}}
{{ctx.Locale.Tr "repo.default_branch"}}: {{.Repository.DefaultWikiBranch}}
{{end}}
+
+
+ {{range .Pages}}
+
+
+ {{svg "octicon-file"}}
+ {{.Name}}
+ {{svg "octicon-chevron-right"}}
+
+ {{$timeSince := DateUtils.TimeSince .UpdatedUnix}}
+ {{ctx.Locale.Tr "repo.wiki.last_updated" $timeSince}}
+
+ {{end}}
+
+
+
+
+{{template "base/footer" .}}
diff --git a/repo/wiki/revision.tmpl b/repo/wiki/revision.tmpl
new file mode 100644
index 0000000..ca89549
--- /dev/null
+++ b/repo/wiki/revision.tmpl
@@ -0,0 +1,37 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+ {{$title := .title}}
+
+
+
+
+
+
+ {{template "repo/clone_panel" .}}
+
+
+
+
+
+ {{if and .Commits (gt .CommitCount 0)}}
+ {{template "repo/commits_list" .}}
+ {{end}}
+ {{template "base/paginate" .}}
+
+
+
+{{template "base/footer" .}}
diff --git a/repo/wiki/start.tmpl b/repo/wiki/start.tmpl
new file mode 100644
index 0000000..1b3c3d5
--- /dev/null
+++ b/repo/wiki/start.tmpl
@@ -0,0 +1,15 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+
+
+{{template "base/footer" .}}
diff --git a/repo/wiki/view.tmpl b/repo/wiki/view.tmpl
new file mode 100644
index 0000000..843a977
--- /dev/null
+++ b/repo/wiki/view.tmpl
@@ -0,0 +1,112 @@
+{{template "base/head" .}}
+
+ {{template "repo/header" .}}
+ {{$title := .title}}
+
+
+
+ {{if .FormatWarning}}
+
+ {{end}}
+
+
+ {{if .sidebarTocContent}}
+
+ {{end}}
+
+
+ {{template "repo/unicode_escape_prompt" dict "EscapeStatus" .EscapeStatus "root" $}}
+ {{.content | SafeHTML}}
+
+
+ {{if .sidebarPresent}}
+
+ {{end}}
+
+
+
+ {{if .footerPresent}}
+
+ {{end}}
+
+
+
+
+
+
+
+
{{ctx.Locale.Tr "repo.wiki.delete_page_notice_1" $title}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+
+{{template "base/footer" .}}
diff --git a/shared/actions/runner_badge.tmpl b/shared/actions/runner_badge.tmpl
new file mode 100644
index 0000000..816e87e
--- /dev/null
+++ b/shared/actions/runner_badge.tmpl
@@ -0,0 +1,25 @@
+
+ {{.Badge.Label.Text}}: {{.Badge.Message.Text}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{.Badge.Label.Text}} {{.Badge.Label.Text}} {{.Badge.Message.Text}} {{.Badge.Message.Text}}
+
diff --git a/shared/actions/runner_edit.tmpl b/shared/actions/runner_edit.tmpl
new file mode 100644
index 0000000..54250f8
--- /dev/null
+++ b/shared/actions/runner_edit.tmpl
@@ -0,0 +1,96 @@
+
+
+
+
+ {{template "base/disable_form_autofill"}}
+ {{.CsrfTokenHtml}}
+
+
+ {{ctx.Locale.Tr "actions.runners.status"}}
+ {{.Runner.StatusLocaleName ctx.Locale}}
+
+
+ {{ctx.Locale.Tr "actions.runners.last_online"}}
+ {{if .Runner.LastOnline}}{{DateUtils.TimeSince .Runner.LastOnline}}{{else}}{{ctx.Locale.Tr "never"}}{{end}}
+
+
+ {{ctx.Locale.Tr "actions.runners.labels"}}
+
+ {{range .Runner.AgentLabels}}
+ {{.}}
+ {{end}}
+
+
+
+ {{ctx.Locale.Tr "actions.runners.owner_type"}}
+ {{.Runner.BelongsToOwnerType.LocaleString ctx.Locale}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "actions.runners.description"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "actions.runners.update_runner"}}
+
+ {{ctx.Locale.Tr "actions.runners.delete_runner"}}
+
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "actions.runners.task_list.run"}}
+ {{ctx.Locale.Tr "actions.runners.task_list.status"}}
+ {{ctx.Locale.Tr "actions.runners.task_list.repository"}}
+ {{ctx.Locale.Tr "actions.runners.task_list.commit"}}
+ {{ctx.Locale.Tr "actions.runners.task_list.done_at"}}
+
+
+
+ {{range .Tasks}}
+
+ {{.ID}}
+ {{.Status.LocaleString ctx.Locale}}
+ {{.GetRepoName}}
+
+ {{ShortSha .CommitSHA}}
+
+ {{if .IsStopped}}
+ {{DateUtils.TimeSince .Stopped}}
+ {{else}}-{{end}}
+
+ {{end}}
+ {{if not .Tasks}}
+
+ {{ctx.Locale.Tr "actions.runners.task_list.no_tasks"}}
+
+ {{end}}
+
+
+ {{template "base/paginate" .}}
+
+
+
+
+
{{ctx.Locale.Tr "actions.runners.delete_runner_notice"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+
diff --git a/shared/actions/runner_list.tmpl b/shared/actions/runner_list.tmpl
new file mode 100644
index 0000000..e5907da
--- /dev/null
+++ b/shared/actions/runner_list.tmpl
@@ -0,0 +1,99 @@
+
+
+
+
+
+ {{template "shared/search/combo" dict "Value" .Keyword "Placeholder" (ctx.Locale.Tr "search.runner_kind")}}
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "actions.runners.status"}}
+ {{SortArrow "online" "offline" .SortType false}}
+
+
+ {{ctx.Locale.Tr "actions.runners.id"}}
+ {{SortArrow "oldest" "newest" .SortType false}}
+
+
+ {{ctx.Locale.Tr "actions.runners.name"}}
+ {{SortArrow "alphabetically" "reversealphabetically" .SortType false}}
+
+ {{ctx.Locale.Tr "actions.runners.version"}}
+ {{ctx.Locale.Tr "actions.runners.owner_type"}}
+ {{ctx.Locale.Tr "actions.runners.labels"}}
+ {{ctx.Locale.Tr "actions.runners.last_online"}}
+ {{ctx.Locale.Tr "edit"}}
+
+
+
+ {{if .Runners}}
+ {{range .Runners}}
+
+
+ {{.StatusLocaleName ctx.Locale}}
+
+ {{.ID}}
+ {{.Name}}
+ {{if .Version}}{{.Version}}{{else}}{{ctx.Locale.Tr "unknown"}}{{end}}
+ {{.BelongsToOwnerType.LocaleString ctx.Locale}}
+
+ {{range .AgentLabels}}{{.}} {{end}}
+
+ {{if .LastOnline}}{{DateUtils.TimeSince .LastOnline}}{{else}}{{ctx.Locale.Tr "never"}}{{end}}
+
+ {{if .Editable $.RunnerOwnerID $.RunnerRepoID}}
+ {{svg "octicon-pencil"}}
+ {{end}}
+
+
+ {{end}}
+ {{else}}
+
+ {{ctx.Locale.Tr "actions.runners.none"}}
+
+ {{end}}
+
+
+
+
+ {{template "base/paginate" .}}
+
+
diff --git a/shared/combomarkdowneditor.tmpl b/shared/combomarkdowneditor.tmpl
new file mode 100644
index 0000000..3191346
--- /dev/null
+++ b/shared/combomarkdowneditor.tmpl
@@ -0,0 +1,96 @@
+{{/*
+Template Attributes:
+* CustomInit: do not initialize the editor automatically
+* ContainerId: id attribute for the container element
+* ContainerClasses: additional classes for the container element
+* MarkdownPreviewInRepo: the repo to preview markdown
+* MarkdownPreviewContext: preview context (the related url path when rendering) for the preview tab, eg: repo link or user home link
+* MarkdownPreviewMode: content mode for the editor, eg: wiki, comment or default
+* TextareaName: name attribute for the textarea
+* TextareaContent: content for the textarea
+* TextareaMaxLength: maxlength attribute for the textarea
+* TextareaPlaceholder: placeholder attribute for the textarea
+* TextareaAriaLabel: aria-label attribute for the textarea
+* DropzoneParentContainer: container for file upload (leave it empty if no upload)
+* DisableAutosize: whether to disable automatic height resizing
+*/}}
+{{$ariaLabel := or .TextareaAriaLabel .TextareaPlaceholder}}
+{{$repo := .MarkdownPreviewInRepo}}
+{{$previewContext := .MarkdownPreviewContext}}
+{{$previewMode := .MarkdownPreviewMode}}
+{{$previewUrl := print AppSubUrl "/-/markup"}}
+{{if $repo}}
+ {{$previewUrl = print $repo.Link "/markup"}}
+{{end}}
+{{$supportEasyMDE := or (eq $previewMode "comment") (eq $previewMode "wiki")}}
+
+
+
+
+
+ {{svg "octicon-heading"}}
+ {{svg "octicon-heading"}}
+ {{svg "octicon-heading"}}
+
+
+ {{svg "octicon-bold"}}
+ {{svg "octicon-italic"}}
+
+
+ {{svg "octicon-quote"}}
+ {{svg "octicon-code"}}
+ {{svg "octicon-link"}}
+
+
+ {{svg "octicon-list-unordered"}}
+ {{svg "octicon-list-ordered"}}
+ {{svg "octicon-tasklist"}}
+ {{svg "octicon-table"}}
+
+ {{if eq $previewMode "comment"}}
+
+ {{svg "octicon-mention"}}
+ {{svg "octicon-cross-reference"}}
+
+ {{end}}
+
+ {{svg "octicon-typography"}}
+ {{if $supportEasyMDE}}
+ {{svg "octicon-arrow-switch"}}
+ {{end}}
+
+
+
+ {{.TextareaContent}}
+
+
+
+
+ {{ctx.Locale.Tr "loading"}}
+
+
+
diff --git a/shared/fileisempty.tmpl b/shared/fileisempty.tmpl
new file mode 100644
index 0000000..a92bcbc
--- /dev/null
+++ b/shared/fileisempty.tmpl
@@ -0,0 +1,3 @@
+
+ {{ctx.Locale.Tr "repo.file_is_empty"}}
+
diff --git a/shared/filetoolarge.tmpl b/shared/filetoolarge.tmpl
new file mode 100644
index 0000000..cb23864
--- /dev/null
+++ b/shared/filetoolarge.tmpl
@@ -0,0 +1,4 @@
+
diff --git a/shared/issueicon.tmpl b/shared/issueicon.tmpl
new file mode 100644
index 0000000..bb6247c
--- /dev/null
+++ b/shared/issueicon.tmpl
@@ -0,0 +1,26 @@
+{{/* the logic should be kept the same as getIssueIcon/getIssueColor in JS code */}}
+{{- if .IsPull -}}
+ {{- if not .PullRequest -}}
+ No PullRequest
+ {{- else -}}
+ {{- if .IsClosed -}}
+ {{- if .PullRequest.HasMerged -}}
+ {{- svg "octicon-git-merge" 16 "text purple" -}}
+ {{- else -}}
+ {{- svg "octicon-git-pull-request-closed" 16 "text red" -}}
+ {{- end -}}
+ {{- else -}}
+ {{- if .PullRequest.IsWorkInProgress ctx -}}
+ {{- svg "octicon-git-pull-request-draft" 16 "text grey" -}}
+ {{- else -}}
+ {{- svg "octicon-git-pull-request" 16 "text green" -}}
+ {{- end -}}
+ {{- end -}}
+ {{- end -}}
+{{- else -}}
+ {{- if .IsClosed -}}
+ {{- svg "octicon-issue-closed" 16 "text red" -}}
+ {{- else -}}
+ {{- svg "octicon-issue-opened" 16 "text green" -}}
+ {{- end -}}
+{{- end -}}
diff --git a/shared/issuelist.tmpl b/shared/issuelist.tmpl
new file mode 100644
index 0000000..a2b802f
--- /dev/null
+++ b/shared/issuelist.tmpl
@@ -0,0 +1,163 @@
+
+ {{$approvalCounts := .ApprovalCounts}}
+ {{range .Issues}}
+
+
+
+ {{if $.CanWriteIssuesOrPulls}}
+
+ {{end}}
+ {{template "shared/issueicon" .}}
+
+
+
+
+
+
+ {{if eq $.listType "dashboard"}}
+ {{.Repo.FullName}}#{{.Index}}
+ {{else}}
+ #{{.Index}}
+ {{end}}
+
+ {{$timeStr := DateUtils.TimeSince .GetLastEventTimestamp}}
+ {{if .OriginalAuthor}}
+ {{ctx.Locale.Tr .GetLastEventLabelFake $timeStr .OriginalAuthor}}
+ {{else if gt .Poster.ID 0}}
+ {{ctx.Locale.Tr .GetLastEventLabel $timeStr .Poster.HomeLink .Poster.GetDisplayName}}
+ {{else}}
+ {{ctx.Locale.Tr .GetLastEventLabelFake $timeStr .Poster.GetDisplayName}}
+ {{end}}
+ {{if .IsPull}}
+
+
+ {{svg "gitea-double-chevron-left" 12}}
+ {{if .PullRequest.HeadRepo}}
+
+ {{end}}
+
+ {{end}}
+ {{if and .Milestone (ne $.listType "milestone")}}
+
+ {{svg "octicon-milestone" 14}}
+ {{.Milestone.Name}}
+
+ {{end}}
+ {{if .Project}}
+
+ {{svg .Project.IconName 14}}
+ {{.Project.Title}}
+
+ {{end}}
+ {{if .Ref}}{{/* TODO: RemoveIssueRef: see "repo/issue/branch_selector_field.tmpl" */}}
+
+ {{svg "octicon-git-branch" 14}}
+ {{index $.IssueRefEndNames .ID}}
+
+ {{end}}
+ {{$tasks := .GetTasks}}
+ {{if gt $tasks 0}}
+ {{$tasksDone := .GetTasksDone}}
+
+ {{svg "octicon-checklist" 14}}{{$tasksDone}} / {{$tasks}}
+
+
+ {{end}}
+ {{if ne .DeadlineUnix 0}}
+
+
+ {{svg "octicon-calendar" 14}}
+ {{DateUtils.AbsoluteShort .DeadlineUnix}}
+
+
+ {{end}}
+ {{if .IsPull}}
+ {{$approveOfficial := call $approvalCounts .ID "approve"}}
+ {{$rejectOfficial := call $approvalCounts .ID "reject"}}
+ {{$waitingOfficial := call $approvalCounts .ID "waiting"}}
+ {{if gt $approveOfficial 0}}
+
+ {{svg "octicon-check" 14}}
+ {{ctx.Locale.TrN $approveOfficial "repo.pulls.approve_count_1" "repo.pulls.approve_count_n" $approveOfficial}}
+
+ {{end}}
+ {{if gt $rejectOfficial 0}}
+
+ {{svg "octicon-diff" 14}}
+ {{ctx.Locale.TrN $rejectOfficial "repo.pulls.reject_count_1" "repo.pulls.reject_count_n" $rejectOfficial}}
+
+ {{end}}
+ {{if gt $waitingOfficial 0}}
+
+ {{svg "octicon-eye" 14}}
+ {{ctx.Locale.TrN $waitingOfficial "repo.pulls.waiting_count_1" "repo.pulls.waiting_count_n" $waitingOfficial}}
+
+ {{end}}
+ {{if and (not .PullRequest.HasMerged) .PullRequest.ConflictedFiles}}
+
+ {{svg "octicon-x" 14}}
+ {{ctx.Locale.TrN (len .PullRequest.ConflictedFiles) "repo.pulls.num_conflicting_files_1" "repo.pulls.num_conflicting_files_n" (len .PullRequest.ConflictedFiles)}}
+
+ {{end}}
+ {{end}}
+
+
+
+ {{end}}
+ {{if .IssueIndexerUnavailable}}
+
+
{{ctx.Locale.Tr "search.keyword_search_unavailable"}}
+
+ {{end}}
+
+{{template "base/paginate" .}}
diff --git a/shared/misc/tabtitle.tmpl b/shared/misc/tabtitle.tmpl
new file mode 100644
index 0000000..dea9d4d
--- /dev/null
+++ b/shared/misc/tabtitle.tmpl
@@ -0,0 +1 @@
+{{.}}
diff --git a/shared/repo_search.tmpl b/shared/repo_search.tmpl
new file mode 100644
index 0000000..7fcb5d2
--- /dev/null
+++ b/shared/repo_search.tmpl
@@ -0,0 +1,64 @@
+
+{{if and .PageIsExploreRepositories .OnlyShowRelevant}}
+
+
+ {{ctx.Locale.Tr "explore.relevant_repositories" (printf "?only_show_relevant=0&sort=%s&q=%s&language=%s" $.SortType (QueryEscape $.Keyword) (QueryEscape $.Language))}}
+
+
+{{end}}
+
diff --git a/shared/search/button.tmpl b/shared/search/button.tmpl
new file mode 100644
index 0000000..7bb1662
--- /dev/null
+++ b/shared/search/button.tmpl
@@ -0,0 +1,3 @@
+{{/* Disable (optional) - if search button has to be disabled */}}
+{{/* Tooltip (optional) - a tooltip to be displayed on hover */}}
+{{svg "octicon-search"}}
diff --git a/shared/search/code/results.tmpl b/shared/search/code/results.tmpl
new file mode 100644
index 0000000..a98a662
--- /dev/null
+++ b/shared/search/code/results.tmpl
@@ -0,0 +1,36 @@
+
+ {{range $term := .SearchResultLanguages}}
+
+
+ {{$term.Language}}
+ {{$term.Count}}
+
+ {{end}}
+
+
+ {{range $result := .SearchResults}}
+ {{$repo := or $.Repo (index $.RepoMaps .RepoID)}}
+
+
+
+ {{template "shared/searchfile" dict "RepoLink" $repo.Link "SearchResult" .}}
+
+ {{template "shared/searchbottom" dict "root" $ "result" .}}
+
+ {{end}}
+
+{{template "base/paginate" .}}
diff --git a/shared/search/code/search.tmpl b/shared/search/code/search.tmpl
new file mode 100644
index 0000000..dde45c0
--- /dev/null
+++ b/shared/search/code/search.tmpl
@@ -0,0 +1,23 @@
+
+ {{template "shared/search/combo_fuzzy" dict "Value" .Keyword "Disabled" .CodeIndexerUnavailable "IsFuzzy" .IsFuzzy "Placeholder" (ctx.Locale.Tr "search.code_kind")}}
+
+
+
+ {{template "base/alert" .}}
+ {{if .CodeIndexerUnavailable}}
+
+
{{ctx.Locale.Tr "search.code_search_unavailable"}}
+
+ {{else}}
+ {{if not .IsRepoIndexerEnabled}}
+
+
{{ctx.Locale.Tr "search.code_search_by_git_grep"}}
+
+ {{end}}
+ {{if .SearchResults}}
+ {{template "shared/search/code/results" .}}
+ {{else if .Keyword}}
+
{{ctx.Locale.Tr "search.no_results"}}
+ {{end}}
+ {{end}}
+
diff --git a/shared/search/combo.tmpl b/shared/search/combo.tmpl
new file mode 100644
index 0000000..788db95
--- /dev/null
+++ b/shared/search/combo.tmpl
@@ -0,0 +1,8 @@
+{{/* Value - value of the search field (for search results page) */}}
+{{/* Disabled (optional) - if search field/button has to be disabled */}}
+{{/* Placeholder (optional) - placeholder text to be used */}}
+{{/* Tooltip (optional) - a tooltip to be displayed on button hover */}}
+
+ {{template "shared/search/input" dict "Value" .Value "Disabled" .Disabled "Placeholder" .Placeholder}}
+ {{template "shared/search/button" dict "Disabled" .Disabled "Tooltip" .Tooltip}}
+
diff --git a/shared/search/combo_fuzzy.tmpl b/shared/search/combo_fuzzy.tmpl
new file mode 100644
index 0000000..3540a89
--- /dev/null
+++ b/shared/search/combo_fuzzy.tmpl
@@ -0,0 +1,10 @@
+{{/* Value - value of the search field (for search results page) */}}
+{{/* Disabled (optional) - if search field/button has to be disabled */}}
+{{/* Placeholder (optional) - placeholder text to be used */}}
+{{/* IsFuzzy - state of the fuzzy search toggle */}}
+{{/* Tooltip (optional) - a tooltip to be displayed on button hover */}}
+
+ {{template "shared/search/input" dict "Value" .Value "Disabled" .Disabled "Placeholder" .Placeholder}}
+ {{template "shared/search/fuzzy" dict "Disabled" .Disabled "IsFuzzy" .IsFuzzy}}
+ {{template "shared/search/button" dict "Disabled" .Disabled "Tooltip" .Tooltip}}
+
diff --git a/shared/search/fuzzy.tmpl b/shared/search/fuzzy.tmpl
new file mode 100644
index 0000000..5c09d3c
--- /dev/null
+++ b/shared/search/fuzzy.tmpl
@@ -0,0 +1,10 @@
+{{/* Disabled (optional) - if dropdown has to be disabled */}}
+{{/* IsFuzzy - state of the fuzzy search toggle */}}
+
+
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
{{if .IsFuzzy}}{{ctx.Locale.Tr "search.fuzzy"}}{{else}}{{ctx.Locale.Tr "search.exact"}}{{end}}
+
+
diff --git a/shared/search/input.tmpl b/shared/search/input.tmpl
new file mode 100644
index 0000000..75bed07
--- /dev/null
+++ b/shared/search/input.tmpl
@@ -0,0 +1,4 @@
+{{/* Value - value of the search field (for search results page) */}}
+{{/* Disabled (optional) - if search field has to be disabled */}}
+{{/* Placeholder (optional) - placeholder text to be used */}}
+
diff --git a/shared/searchbottom.tmpl b/shared/searchbottom.tmpl
new file mode 100644
index 0000000..4e0bd95
--- /dev/null
+++ b/shared/searchbottom.tmpl
@@ -0,0 +1,14 @@
+{{if or .result.Language (not .result.UpdatedUnix.IsZero)}}
+
+
+ {{if .result.Language}}
+ {{.result.Language}}
+ {{end}}
+
+
+ {{if not .result.UpdatedUnix.IsZero}}
+ {{ctx.Locale.Tr "explore.code_last_indexed_at" (DateUtils.TimeSince .result.UpdatedUnix)}}
+ {{end}}
+
+
+{{end}}
diff --git a/shared/searchfile.tmpl b/shared/searchfile.tmpl
new file mode 100644
index 0000000..280584e
--- /dev/null
+++ b/shared/searchfile.tmpl
@@ -0,0 +1,14 @@
+
+
+
+ {{range .SearchResult.Lines}}
+
+
+ {{.Num}}
+
+ {{.FormattedContent}}
+
+ {{end}}
+
+
+
diff --git a/shared/secrets/add_list.tmpl b/shared/secrets/add_list.tmpl
new file mode 100644
index 0000000..59596d1
--- /dev/null
+++ b/shared/secrets/add_list.tmpl
@@ -0,0 +1,81 @@
+
+
+ {{if .Secrets}}
+
+ {{range .Secrets}}
+
+
+ {{svg "octicon-key" 32}}
+
+
+
+ {{.Name}}
+
+
+ ******
+
+
+
+
+ {{ctx.Locale.Tr "settings.added_on" (DateUtils.AbsoluteShort .CreatedUnix)}}
+
+
+ {{svg "octicon-trash"}}
+
+
+
+ {{end}}
+
+ {{else}}
+ {{ctx.Locale.Tr "secrets.none"}}
+ {{end}}
+
+
+{{/* Add secret dialog */}}
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "secrets.description"}}
+
+
+ {{ctx.Locale.Tr "name"}}
+
+
+
+ {{ctx.Locale.Tr "value"}}
+
+
+
+ {{template "base/modal_actions_confirm" (dict "ModalButtonTypes" "confirm")}}
+
+
diff --git a/shared/user/authorlink.tmpl b/shared/user/authorlink.tmpl
new file mode 100644
index 0000000..abe1ab1
--- /dev/null
+++ b/shared/user/authorlink.tmpl
@@ -0,0 +1 @@
+{{.GetDisplayName}} {{if .IsBot}}bot {{end}}
diff --git a/shared/user/avatarlink.tmpl b/shared/user/avatarlink.tmpl
new file mode 100644
index 0000000..5e3ed7a
--- /dev/null
+++ b/shared/user/avatarlink.tmpl
@@ -0,0 +1 @@
+{{ctx.AvatarUtils.Avatar .user}}
diff --git a/shared/user/block_user_dialog.tmpl b/shared/user/block_user_dialog.tmpl
new file mode 100644
index 0000000..c6db4ca
--- /dev/null
+++ b/shared/user/block_user_dialog.tmpl
@@ -0,0 +1,23 @@
+
+
+
+
{{ctx.Locale.Tr "user.block.info"}}
+
+ {{.CsrfTokenHtml}}
+
+
+
+ {{ctx.Locale.Tr "user.block.user_to_block"}}:
+
+
+
{{ctx.Locale.Tr "user.block.note.title"}}
+
+
{{ctx.Locale.Tr "user.block.note.info"}}
+
+
+ {{ctx.Locale.Tr "cancel"}}
+ {{ctx.Locale.Tr "user.block.block"}}
+
+
+
+
diff --git a/shared/user/blocked_users.tmpl b/shared/user/blocked_users.tmpl
new file mode 100644
index 0000000..e83a039
--- /dev/null
+++ b/shared/user/blocked_users.tmpl
@@ -0,0 +1,83 @@
+
+
+
{{ctx.Locale.Tr "user.block.info_1"}}
+
+ {{ctx.Locale.Tr "user.block.info_2"}}
+ {{ctx.Locale.Tr "user.block.info_3"}}
+ {{ctx.Locale.Tr "user.block.info_4"}}
+ {{ctx.Locale.Tr "user.block.info_5"}}
+ {{ctx.Locale.Tr "user.block.info_6"}}
+ {{ctx.Locale.Tr "user.block.info_7"}}
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+
+ {{ctx.Locale.Tr "user.block.block"}}
+
+
+
{{ctx.Locale.Tr "user.block.note.title"}}
+
+
{{ctx.Locale.Tr "user.block.note.info"}}
+
+
+
+
+
+
+ {{range .UserBlocks}}
+
+
+ {{ctx.AvatarUtils.Avatar .Blockee}}
+
+
+
+ {{if .Note}}
+
+ {{ctx.Locale.Tr "user.block.note"}}: {{.Note}}
+
+ {{end}}
+
+
+ {{ctx.Locale.Tr "user.block.note.edit"}}
+
+ {{$.CsrfTokenHtml}}
+
+
+ {{ctx.Locale.Tr "user.block.unblock"}}
+
+
+
+ {{else}}
+
{{ctx.Locale.Tr "user.block.list.none"}}
+ {{end}}
+
+
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+
+
{{ctx.Locale.Tr "user.block.note.title"}}
+
+
{{ctx.Locale.Tr "user.block.note.info"}}
+
+
+ {{ctx.Locale.Tr "cancel"}}
+ {{ctx.Locale.Tr "save"}}
+
+
+
+
diff --git a/shared/user/name.tmpl b/shared/user/name.tmpl
new file mode 100644
index 0000000..896349f
--- /dev/null
+++ b/shared/user/name.tmpl
@@ -0,0 +1 @@
+{{.Name}}{{if .FullName}} ({{.FullName}}){{end}}
diff --git a/shared/user/namelink.tmpl b/shared/user/namelink.tmpl
new file mode 100644
index 0000000..a122f4f
--- /dev/null
+++ b/shared/user/namelink.tmpl
@@ -0,0 +1 @@
+{{.GetDisplayName}}
diff --git a/shared/user/org_profile_avatar.tmpl b/shared/user/org_profile_avatar.tmpl
new file mode 100644
index 0000000..c0abcab
--- /dev/null
+++ b/shared/user/org_profile_avatar.tmpl
@@ -0,0 +1,16 @@
+{{with .ContextUser}}
+
+{{end}}
diff --git a/shared/user/profile_big_avatar.tmpl b/shared/user/profile_big_avatar.tmpl
new file mode 100644
index 0000000..f04f1ef
--- /dev/null
+++ b/shared/user/profile_big_avatar.tmpl
@@ -0,0 +1,135 @@
+
+
+{{template "shared/user/block_user_dialog" .}}
diff --git a/shared/variables/variable_list.tmpl b/shared/variables/variable_list.tmpl
new file mode 100644
index 0000000..7a0ab48
--- /dev/null
+++ b/shared/variables/variable_list.tmpl
@@ -0,0 +1,92 @@
+
+
+ {{if .Variables}}
+
+ {{range .Variables}}
+
+
+ {{svg "octicon-pencil" 32}}
+
+
+
+ {{.Name}}
+
+
+ {{.Data}}
+
+
+
+
+ {{ctx.Locale.Tr "settings.added_on" (DateUtils.AbsoluteShort .CreatedUnix)}}
+
+
+ {{svg "octicon-pencil"}}
+
+
+ {{svg "octicon-trash"}}
+
+
+
+ {{end}}
+
+ {{else}}
+ {{ctx.Locale.Tr "actions.variables.none"}}
+ {{end}}
+
+
+{{/** Edit variable dialog */}}
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "actions.variables.description"}}
+
+
+ {{ctx.Locale.Tr "name"}}
+
+
+
+ {{ctx.Locale.Tr "value"}}
+
+
+
+ {{template "base/modal_actions_confirm" (dict "ModalButtonTypes" "confirm")}}
+
+
+
diff --git a/shared/webhook/icon.tmpl b/shared/webhook/icon.tmpl
new file mode 100644
index 0000000..0f80787
--- /dev/null
+++ b/shared/webhook/icon.tmpl
@@ -0,0 +1,27 @@
+{{$size := 26}}
+{{if .Size}}
+ {{$size = .Size}}
+{{end}}
+{{if eq .HookType "gitea"}}
+ {{svg "gitea-gitea" $size "img"}}
+{{else if eq .HookType "gogs"}}
+
+{{else if eq .HookType "slack"}}
+
+{{else if eq .HookType "discord"}}
+
+{{else if eq .HookType "dingtalk"}}
+
+{{else if eq .HookType "telegram"}}
+
+{{else if eq .HookType "msteams"}}
+
+{{else if eq .HookType "feishu"}}
+
+{{else if eq .HookType "matrix"}}
+ {{svg "gitea-matrix" $size "img"}}
+{{else if eq .HookType "wechatwork"}}
+
+{{else if eq .HookType "packagist"}}
+
+{{end}}
diff --git a/status/404.tmpl b/status/404.tmpl
new file mode 100644
index 0000000..6cfc88a
--- /dev/null
+++ b/status/404.tmpl
@@ -0,0 +1,16 @@
+{{template "base/head" .}}
+
+ {{if .IsRepo}}{{template "repo/header" .}}{{end}}
+
+
+
404 Not Found
+
+
{{if .NotFoundPrompt}}{{.NotFoundPrompt}}{{else}}{{ctx.Locale.Tr "error404"}}{{end}}
+ {{if .NotFoundGoBackURL}}
+
{{ctx.Locale.Tr "go_back"}}
+ {{end}}
+
+
+
+
+{{template "base/footer" .}}
diff --git a/status/500.tmpl b/status/500.tmpl
new file mode 100644
index 0000000..198f1ea
--- /dev/null
+++ b/status/500.tmpl
@@ -0,0 +1,69 @@
+{{/* This page should only depend the minimal template functions/variables, to avoid triggering new panics.
+* base template functions: AppName, AssetUrlPrefix, AssetVersion, AppSubUrl, UserThemeName
+* ctx.Locale
+* .Flash
+* .ErrorMsg
+* .SignedUser (optional)
+*/}}
+
+
+
+
+ Internal Server Error - {{AppName}}
+
+
+ {{template "base/head_style" .}}
+
+
+
+
+
+
+
+
+ {{template "base/alert" .}}
+
+
500 Internal Server Error
+ {{if .ErrorMsg}}
+
+
{{ctx.Locale.Tr "error.occurred"}}:
+
{{.ErrorMsg}}
+
+ {{end}}
+
+ {{if or .SignedUser.IsAdmin .ShowFooterVersion}}
{{ctx.Locale.Tr "admin.config.app_ver"}}: {{AppVer}}
{{end}}
+ {{if .SignedUser.IsAdmin}}
{{ctx.Locale.Tr "error.report_message" "https://github.com/go-gitea/gitea/issues"}}
{{end}}
+
+
+
+
+
+
+ {{/* When a sub-template triggers an 500 error, its parent template has been partially rendered, then the 500 page
+ will be rendered after that partially rendered page, the HTML/JS are totally broken. Use this inline script to try to move it to main viewport.
+ And this page shouldn't include any other JS file, avoid duplicate JS execution (still due to the partial rendering).*/}}
+
+
+
diff --git a/swagger/ui.tmpl b/swagger/ui.tmpl
new file mode 100644
index 0000000..9935ab9
--- /dev/null
+++ b/swagger/ui.tmpl
@@ -0,0 +1,12 @@
+
+
+
+ Gitea API
+
+
+
+ {{svg "octicon-reply"}}{{ctx.Locale.Tr "return_to_gitea"}}
+
+
+
+
diff --git a/swagger/v1_json.tmpl b/swagger/v1_json.tmpl
new file mode 100644
index 0000000..fb37d45
--- /dev/null
+++ b/swagger/v1_json.tmpl
@@ -0,0 +1,26721 @@
+{
+ "consumes": [
+ "application/json",
+ "text/plain"
+ ],
+ "produces": [
+ "application/json",
+ "text/html"
+ ],
+ "schemes": [
+ "https",
+ "http"
+ ],
+ "swagger": "2.0",
+ "info": {
+ "description": "This documentation describes the Gitea API.",
+ "title": "Gitea API",
+ "license": {
+ "name": "MIT",
+ "url": "http://opensource.org/licenses/MIT"
+ },
+ "version": "{{AppVer | JSEscape}}"
+ },
+ "basePath": "{{AppSubUrl | JSEscape}}/api/v1",
+ "paths": {
+ "/activitypub/user-id/{user-id}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "activitypub"
+ ],
+ "summary": "Returns the Person actor for a user",
+ "operationId": "activitypubPerson",
+ "parameters": [
+ {
+ "type": "integer",
+ "description": "user ID of the user",
+ "name": "user-id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/ActivityPub"
+ }
+ }
+ }
+ },
+ "/activitypub/user-id/{user-id}/inbox": {
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "activitypub"
+ ],
+ "summary": "Send to the inbox",
+ "operationId": "activitypubPersonInbox",
+ "parameters": [
+ {
+ "type": "integer",
+ "description": "user ID of the user",
+ "name": "user-id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ }
+ }
+ }
+ },
+ "/admin/cron": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "List cron tasks",
+ "operationId": "adminCronList",
+ "parameters": [
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/CronList"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ }
+ }
+ }
+ },
+ "/admin/cron/{task}": {
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "Run cron task",
+ "operationId": "adminCronRun",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "task to run",
+ "name": "task",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/admin/emails": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "List all emails",
+ "operationId": "adminGetAllEmails",
+ "parameters": [
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/EmailList"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ }
+ }
+ }
+ },
+ "/admin/emails/search": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "Search all emails",
+ "operationId": "adminSearchEmails",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "keyword",
+ "name": "q",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/EmailList"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ }
+ }
+ }
+ },
+ "/admin/hooks": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "List system's webhooks",
+ "operationId": "adminListHooks",
+ "parameters": [
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/HookList"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "Create a hook",
+ "operationId": "adminCreateHook",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/CreateHookOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Hook"
+ }
+ }
+ }
+ },
+ "/admin/hooks/{id}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "Get a hook",
+ "operationId": "adminGetHook",
+ "parameters": [
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the hook to get",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Hook"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "Delete a hook",
+ "operationId": "adminDeleteHook",
+ "parameters": [
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the hook to delete",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ }
+ }
+ },
+ "patch": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "Update a hook",
+ "operationId": "adminEditHook",
+ "parameters": [
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the hook to update",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/EditHookOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Hook"
+ }
+ }
+ }
+ },
+ "/admin/orgs": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "List all organizations",
+ "operationId": "adminGetAllOrgs",
+ "parameters": [
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/OrganizationList"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ }
+ }
+ }
+ },
+ "/admin/runners/registration-token": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "Get an global actions runner registration token",
+ "operationId": "adminGetRunnerRegistrationToken",
+ "responses": {
+ "200": {
+ "$ref": "#/responses/RegistrationToken"
+ }
+ }
+ }
+ },
+ "/admin/unadopted": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "List unadopted repositories",
+ "operationId": "adminUnadoptedList",
+ "parameters": [
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "pattern of repositories to search for",
+ "name": "pattern",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/StringSlice"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ }
+ }
+ }
+ },
+ "/admin/unadopted/{owner}/{repo}": {
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "Adopt unadopted files as a repository",
+ "operationId": "adminAdoptRepository",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "Delete unadopted files",
+ "operationId": "adminDeleteUnadoptedRepository",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ }
+ }
+ }
+ },
+ "/admin/users": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "Search users according filter conditions",
+ "operationId": "adminSearchUsers",
+ "parameters": [
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "ID of the user's login source to search for",
+ "name": "source_id",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "user's login name to search for",
+ "name": "login_name",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/UserList"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "Create a user",
+ "operationId": "adminCreateUser",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateUserOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/User"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/admin/users/{username}": {
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "Delete a user",
+ "operationId": "adminDeleteUser",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "username of user to delete",
+ "name": "username",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "boolean",
+ "description": "purge the user from the system completely",
+ "name": "purge",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ },
+ "patch": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "Edit an existing user",
+ "operationId": "adminEditUser",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "username of user to edit",
+ "name": "username",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/EditUserOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/User"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/admin/users/{username}/badges": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "List a user's badges",
+ "operationId": "adminListUserBadges",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "username of user",
+ "name": "username",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/BadgeList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "Add a badge to a user",
+ "operationId": "adminAddUserBadges",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "username of user",
+ "name": "username",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/UserBadgeOption"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "Remove a badge from a user",
+ "operationId": "adminDeleteUserBadges",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "username of user",
+ "name": "username",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/UserBadgeOption"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/admin/users/{username}/keys": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "Add a public key on behalf of a user",
+ "operationId": "adminCreatePublicKey",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "username of the user",
+ "name": "username",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "key",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateKeyOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/PublicKey"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/admin/users/{username}/keys/{id}": {
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "Delete a user's public key",
+ "operationId": "adminDeleteUserPublicKey",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "username of user",
+ "name": "username",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the key to delete",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/admin/users/{username}/orgs": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "Create an organization",
+ "operationId": "adminCreateOrg",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "username of the user that will own the created organization",
+ "name": "username",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "organization",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/CreateOrgOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Organization"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/admin/users/{username}/rename": {
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "Rename a user",
+ "operationId": "adminRenameUser",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "existing username of user",
+ "name": "username",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/RenameUserOption"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/admin/users/{username}/repos": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "admin"
+ ],
+ "summary": "Create a repository on behalf of a user",
+ "operationId": "adminCreateRepo",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "username of the user. This user will own the created repository",
+ "name": "username",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "repository",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/CreateRepoOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Repository"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "409": {
+ "$ref": "#/responses/error"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/gitignore/templates": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "miscellaneous"
+ ],
+ "summary": "Returns a list of all gitignore templates",
+ "operationId": "listGitignoresTemplates",
+ "responses": {
+ "200": {
+ "$ref": "#/responses/GitignoreTemplateList"
+ }
+ }
+ }
+ },
+ "/gitignore/templates/{name}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "miscellaneous"
+ ],
+ "summary": "Returns information about a gitignore template",
+ "operationId": "getGitignoreTemplateInfo",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the template",
+ "name": "name",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/GitignoreTemplateInfo"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/label/templates": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "miscellaneous"
+ ],
+ "summary": "Returns a list of all label templates",
+ "operationId": "listLabelTemplates",
+ "responses": {
+ "200": {
+ "$ref": "#/responses/LabelTemplateList"
+ }
+ }
+ }
+ },
+ "/label/templates/{name}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "miscellaneous"
+ ],
+ "summary": "Returns all labels in a template",
+ "operationId": "getLabelTemplateInfo",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the template",
+ "name": "name",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/LabelTemplateInfo"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/licenses": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "miscellaneous"
+ ],
+ "summary": "Returns a list of all license templates",
+ "operationId": "listLicenseTemplates",
+ "responses": {
+ "200": {
+ "$ref": "#/responses/LicenseTemplateList"
+ }
+ }
+ }
+ },
+ "/licenses/{name}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "miscellaneous"
+ ],
+ "summary": "Returns information about a license template",
+ "operationId": "getLicenseTemplateInfo",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the license",
+ "name": "name",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/LicenseTemplateInfo"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/markdown": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "text/html"
+ ],
+ "tags": [
+ "miscellaneous"
+ ],
+ "summary": "Render a markdown document as HTML",
+ "operationId": "renderMarkdown",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/MarkdownOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/MarkdownRender"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/markdown/raw": {
+ "post": {
+ "consumes": [
+ "text/plain"
+ ],
+ "produces": [
+ "text/html"
+ ],
+ "tags": [
+ "miscellaneous"
+ ],
+ "summary": "Render raw markdown as HTML",
+ "operationId": "renderMarkdownRaw",
+ "parameters": [
+ {
+ "description": "Request body to render",
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/MarkdownRender"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/markup": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "text/html"
+ ],
+ "tags": [
+ "miscellaneous"
+ ],
+ "summary": "Render a markup document as HTML",
+ "operationId": "renderMarkup",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/MarkupOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/MarkupRender"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/nodeinfo": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "miscellaneous"
+ ],
+ "summary": "Returns the nodeinfo of the Gitea application",
+ "operationId": "getNodeInfo",
+ "responses": {
+ "200": {
+ "$ref": "#/responses/NodeInfo"
+ }
+ }
+ }
+ },
+ "/notifications": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "notification"
+ ],
+ "summary": "List users's notification threads",
+ "operationId": "notifyGetList",
+ "parameters": [
+ {
+ "type": "boolean",
+ "description": "If true, show notifications marked as read. Default value is false",
+ "name": "all",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "Show notifications with the provided status types. Options are: unread, read and/or pinned. Defaults to unread \u0026 pinned.",
+ "name": "status-types",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "issue",
+ "pull",
+ "commit",
+ "repository"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "filter notifications by subject type",
+ "name": "subject-type",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "format": "date-time",
+ "description": "Only show notifications updated after the given time. This is a timestamp in RFC 3339 format",
+ "name": "since",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "format": "date-time",
+ "description": "Only show notifications updated before the given time. This is a timestamp in RFC 3339 format",
+ "name": "before",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/NotificationThreadList"
+ }
+ }
+ },
+ "put": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "notification"
+ ],
+ "summary": "Mark notification threads as read, pinned or unread",
+ "operationId": "notifyReadList",
+ "parameters": [
+ {
+ "type": "string",
+ "format": "date-time",
+ "description": "Describes the last point that notifications were checked. Anything updated since this time will not be updated.",
+ "name": "last_read_at",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "If true, mark all notifications on this repo. Default value is false",
+ "name": "all",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "Mark notifications with the provided status types. Options are: unread, read and/or pinned. Defaults to unread.",
+ "name": "status-types",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "Status to mark notifications as, Defaults to read.",
+ "name": "to-status",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "205": {
+ "$ref": "#/responses/NotificationThreadList"
+ }
+ }
+ }
+ },
+ "/notifications/new": {
+ "get": {
+ "tags": [
+ "notification"
+ ],
+ "summary": "Check if unread notifications exist",
+ "operationId": "notifyNewAvailable",
+ "responses": {
+ "200": {
+ "$ref": "#/responses/NotificationCount"
+ }
+ }
+ }
+ },
+ "/notifications/threads/{id}": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "notification"
+ ],
+ "summary": "Get notification thread by ID",
+ "operationId": "notifyGetThread",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "id of notification thread",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/NotificationThread"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "patch": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "notification"
+ ],
+ "summary": "Mark notification thread as read by ID",
+ "operationId": "notifyReadThread",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "id of notification thread",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "default": "read",
+ "description": "Status to mark notifications as",
+ "name": "to-status",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "205": {
+ "$ref": "#/responses/NotificationThread"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/org/{org}/repos": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Create a repository in an organization",
+ "operationId": "createOrgRepoDeprecated",
+ "deprecated": true,
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateRepoOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Repository"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/orgs": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Get list of organizations",
+ "operationId": "orgGetAll",
+ "parameters": [
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/OrganizationList"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Create an organization",
+ "operationId": "orgCreate",
+ "parameters": [
+ {
+ "name": "organization",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/CreateOrgOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Organization"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/orgs/{org}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Get an organization",
+ "operationId": "orgGet",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization to get",
+ "name": "org",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Organization"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Delete an organization",
+ "operationId": "orgDelete",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "organization that is to be deleted",
+ "name": "org",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "patch": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Edit an organization",
+ "operationId": "orgEdit",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization to edit",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/EditOrgOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Organization"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/orgs/{org}/actions/runners/registration-token": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Get an organization's actions runner registration token",
+ "operationId": "orgGetRunnerRegistrationToken",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/RegistrationToken"
+ }
+ }
+ }
+ },
+ "/orgs/{org}/actions/secrets": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "List an organization's actions secrets",
+ "operationId": "orgListActionsSecrets",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/SecretList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/orgs/{org}/actions/secrets/{secretname}": {
+ "put": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Create or Update a secret value in an organization",
+ "operationId": "updateOrgSecret",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the secret",
+ "name": "secretname",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateOrUpdateSecretOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "response when creating a secret"
+ },
+ "204": {
+ "description": "response when updating a secret"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Delete a secret in an organization",
+ "operationId": "deleteOrgSecret",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the secret",
+ "name": "secretname",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "delete one secret of the organization"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/orgs/{org}/actions/variables": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Get an org-level variables list",
+ "operationId": "getOrgVariablesList",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/VariableList"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/orgs/{org}/actions/variables/{variablename}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Get an org-level variable",
+ "operationId": "getOrgVariable",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the variable",
+ "name": "variablename",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/ActionVariable"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "put": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Update an org-level variable",
+ "operationId": "updateOrgVariable",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the variable",
+ "name": "variablename",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/UpdateVariableOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "response when updating an org-level variable"
+ },
+ "204": {
+ "description": "response when updating an org-level variable"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Create an org-level variable",
+ "operationId": "createOrgVariable",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the variable",
+ "name": "variablename",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateVariableOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "response when creating an org-level variable"
+ },
+ "204": {
+ "description": "response when creating an org-level variable"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Delete an org-level variable",
+ "operationId": "deleteOrgVariable",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the variable",
+ "name": "variablename",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/ActionVariable"
+ },
+ "201": {
+ "description": "response when deleting a variable"
+ },
+ "204": {
+ "description": "response when deleting a variable"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/orgs/{org}/activities/feeds": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "List an organization's activity feeds",
+ "operationId": "orgListActivityFeeds",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the org",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "format": "date",
+ "description": "the date of the activities to be found",
+ "name": "date",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/ActivityFeedsList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/orgs/{org}/avatar": {
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Update Avatar",
+ "operationId": "orgUpdateAvatar",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/UpdateUserAvatarOption"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Delete Avatar",
+ "operationId": "orgDeleteAvatar",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/orgs/{org}/blocks": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "List users blocked by the organization",
+ "operationId": "organizationListBlocks",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/UserList"
+ }
+ }
+ }
+ },
+ "/orgs/{org}/blocks/{username}": {
+ "get": {
+ "tags": [
+ "organization"
+ ],
+ "summary": "Check if a user is blocked by the organization",
+ "operationId": "organizationCheckUserBlock",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "user to check",
+ "name": "username",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "put": {
+ "tags": [
+ "organization"
+ ],
+ "summary": "Block a user",
+ "operationId": "organizationBlockUser",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "user to block",
+ "name": "username",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "optional note for the block",
+ "name": "note",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "organization"
+ ],
+ "summary": "Unblock a user",
+ "operationId": "organizationUnblockUser",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "user to unblock",
+ "name": "username",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/orgs/{org}/hooks": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "List an organization's webhooks",
+ "operationId": "orgListHooks",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/HookList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Create a hook",
+ "operationId": "orgCreateHook",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/CreateHookOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Hook"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/orgs/{org}/hooks/{id}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Get a hook",
+ "operationId": "orgGetHook",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the hook to get",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Hook"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Delete a hook",
+ "operationId": "orgDeleteHook",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the hook to delete",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "patch": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Update a hook",
+ "operationId": "orgEditHook",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the hook to update",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/EditHookOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Hook"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/orgs/{org}/labels": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "List an organization's labels",
+ "operationId": "orgListLabels",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/LabelList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Create a label for an organization",
+ "operationId": "orgCreateLabel",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateLabelOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Label"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/orgs/{org}/labels/{id}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Get a single label",
+ "operationId": "orgGetLabel",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the label to get",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Label"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "organization"
+ ],
+ "summary": "Delete a label",
+ "operationId": "orgDeleteLabel",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the label to delete",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "patch": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Update a label",
+ "operationId": "orgEditLabel",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the label to edit",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/EditLabelOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Label"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/orgs/{org}/members": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "List an organization's members",
+ "operationId": "orgListMembers",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/UserList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/orgs/{org}/members/{username}": {
+ "get": {
+ "tags": [
+ "organization"
+ ],
+ "summary": "Check if a user is a member of an organization",
+ "operationId": "orgIsMember",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "username of the user",
+ "name": "username",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "user is a member"
+ },
+ "303": {
+ "description": "redirection to /orgs/{org}/public_members/{username}"
+ },
+ "404": {
+ "description": "user is not a member"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Remove a member from an organization",
+ "operationId": "orgDeleteMember",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "username of the user",
+ "name": "username",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "member removed"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/orgs/{org}/public_members": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "List an organization's public members",
+ "operationId": "orgListPublicMembers",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/UserList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/orgs/{org}/public_members/{username}": {
+ "get": {
+ "tags": [
+ "organization"
+ ],
+ "summary": "Check if a user is a public member of an organization",
+ "operationId": "orgIsPublicMember",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "username of the user",
+ "name": "username",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "user is a public member"
+ },
+ "404": {
+ "description": "user is not a public member"
+ }
+ }
+ },
+ "put": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Publicize a user's membership",
+ "operationId": "orgPublicizeMember",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "username of the user",
+ "name": "username",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "membership publicized"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Conceal a user's membership",
+ "operationId": "orgConcealMember",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "username of the user",
+ "name": "username",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/orgs/{org}/repos": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "List an organization's repos",
+ "operationId": "orgListRepos",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/RepositoryList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Create a repository in an organization",
+ "operationId": "createOrgRepo",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateRepoOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Repository"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/orgs/{org}/teams": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "List an organization's teams",
+ "operationId": "orgListTeams",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/TeamList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Create a team",
+ "operationId": "orgCreateTeam",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateTeamOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Team"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/orgs/{org}/teams/search": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Search for teams within an organization",
+ "operationId": "teamSearch",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "keywords to search",
+ "name": "q",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "include search within team description (defaults to true)",
+ "name": "include_desc",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "SearchResults of a successful search",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Team"
+ }
+ },
+ "ok": {
+ "type": "boolean"
+ }
+ }
+ }
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/packages/{owner}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "package"
+ ],
+ "summary": "Gets all packages of an owner",
+ "operationId": "listPackages",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the packages",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ },
+ {
+ "enum": [
+ "alpine",
+ "cargo",
+ "chef",
+ "composer",
+ "conan",
+ "conda",
+ "container",
+ "cran",
+ "debian",
+ "generic",
+ "go",
+ "helm",
+ "maven",
+ "npm",
+ "nuget",
+ "pub",
+ "pypi",
+ "rpm",
+ "rubygems",
+ "swift",
+ "vagrant"
+ ],
+ "type": "string",
+ "description": "package type filter",
+ "name": "type",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "name filter",
+ "name": "q",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/PackageList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/packages/{owner}/{type}/{name}/{version}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "package"
+ ],
+ "summary": "Gets a package",
+ "operationId": "getPackage",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the package",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "type of the package",
+ "name": "type",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the package",
+ "name": "name",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "version of the package",
+ "name": "version",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Package"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "package"
+ ],
+ "summary": "Delete a package",
+ "operationId": "deletePackage",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the package",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "type of the package",
+ "name": "type",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the package",
+ "name": "name",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "version of the package",
+ "name": "version",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/packages/{owner}/{type}/{name}/{version}/files": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "package"
+ ],
+ "summary": "Gets all files of a package",
+ "operationId": "listPackageFiles",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the package",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "type of the package",
+ "name": "type",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the package",
+ "name": "name",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "version of the package",
+ "name": "version",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/PackageFileList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/issues/search": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Search for issues across the repositories that the user has access to",
+ "operationId": "issueSearchIssues",
+ "parameters": [
+ {
+ "enum": [
+ "open",
+ "closed",
+ "all"
+ ],
+ "type": "string",
+ "default": "open",
+ "description": "State of the issue",
+ "name": "state",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "Comma-separated list of label names. Fetch only issues that have any of these labels. Non existent labels are discarded.",
+ "name": "labels",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "Comma-separated list of milestone names. Fetch only issues that have any of these milestones. Non existent milestones are discarded.",
+ "name": "milestones",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "Search string",
+ "name": "q",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "Repository ID to prioritize in the results",
+ "name": "priority_repo_id",
+ "in": "query"
+ },
+ {
+ "enum": [
+ "issues",
+ "pulls"
+ ],
+ "type": "string",
+ "description": "Filter by issue type",
+ "name": "type",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "format": "date-time",
+ "description": "Only show issues updated after the given time (RFC 3339 format)",
+ "name": "since",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "format": "date-time",
+ "description": "Only show issues updated before the given time (RFC 3339 format)",
+ "name": "before",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "default": false,
+ "description": "Filter issues or pulls assigned to the authenticated user",
+ "name": "assigned",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "default": false,
+ "description": "Filter issues or pulls created by the authenticated user",
+ "name": "created",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "default": false,
+ "description": "Filter issues or pulls mentioning the authenticated user",
+ "name": "mentioned",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "default": false,
+ "description": "Filter pull requests where the authenticated user's review was requested",
+ "name": "review_requested",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "default": false,
+ "description": "Filter pull requests reviewed by the authenticated user",
+ "name": "reviewed",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "Filter by repository owner",
+ "name": "owner",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "Filter by team (requires organization owner parameter)",
+ "name": "team",
+ "in": "query"
+ },
+ {
+ "minimum": 1,
+ "type": "integer",
+ "default": 1,
+ "description": "Page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "minimum": 0,
+ "type": "integer",
+ "description": "Number of items per page",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/IssueList"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/repos/migrate": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Migrate a remote git repository",
+ "operationId": "repoMigrate",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/MigrateRepoOptions"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Repository"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "409": {
+ "description": "The repository with the same name already exists."
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/repos/search": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Search for repositories",
+ "operationId": "repoSearch",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "keyword",
+ "name": "q",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "Limit search to repositories with keyword as topic",
+ "name": "topic",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "include search of keyword within repository description",
+ "name": "includeDesc",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "search only for repos that the user with the given id owns or contributes to",
+ "name": "uid",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "repo owner to prioritize in the results",
+ "name": "priority_owner_id",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "search only for repos that belong to the given team id",
+ "name": "team_id",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "search only for repos that the user with the given id has starred",
+ "name": "starredBy",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "include private repositories this user has access to (defaults to true)",
+ "name": "private",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "show only pubic, private or all repositories (defaults to all)",
+ "name": "is_private",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "include template repositories this user has access to (defaults to true)",
+ "name": "template",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "show only archived, non-archived or all repositories (defaults to all)",
+ "name": "archived",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "type of repository to search for. Supported values are \"fork\", \"source\", \"mirror\" and \"collaborative\"",
+ "name": "mode",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "if `uid` is given, search only for repos that the user owns",
+ "name": "exclusive",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "sort repos by attribute. Supported values are \"alpha\", \"created\", \"updated\", \"size\", \"git_size\", \"lfs_size\", \"stars\", \"forks\" and \"id\". Default is \"alpha\"",
+ "name": "sort",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "sort order, either \"asc\" (ascending) or \"desc\" (descending). Default is \"asc\", ignored if \"sort\" is not specified.",
+ "name": "order",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/SearchResults"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get a repository",
+ "operationId": "repoGet",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Repository"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Delete a repository",
+ "operationId": "repoDelete",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo to delete",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo to delete",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "patch": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Edit a repository's properties. Only fields that are set will be changed.",
+ "operationId": "repoEdit",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo to edit",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo to edit",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "Properties of a repo that you can edit",
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/EditRepoOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Repository"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/actions/runners/registration-token": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get a repository's actions runner registration token",
+ "operationId": "repoGetRunnerRegistrationToken",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/RegistrationToken"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/actions/secrets": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "List an repo's actions secrets",
+ "operationId": "repoListActionsSecrets",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repository",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repository",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/SecretList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/actions/secrets/{secretname}": {
+ "put": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Create or Update a secret value in a repository",
+ "operationId": "updateRepoSecret",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repository",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repository",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the secret",
+ "name": "secretname",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateOrUpdateSecretOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "response when creating a secret"
+ },
+ "204": {
+ "description": "response when updating a secret"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Delete a secret in a repository",
+ "operationId": "deleteRepoSecret",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repository",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repository",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the secret",
+ "name": "secretname",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "delete one secret of the organization"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/actions/tasks": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "List a repository's action tasks",
+ "operationId": "ListActionTasks",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results, default maximum page size is 50",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/TasksList"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "409": {
+ "$ref": "#/responses/conflict"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/actions/variables": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get repo-level variables list",
+ "operationId": "getRepoVariablesList",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the owner",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repository",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/VariableList"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/actions/variables/{variablename}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get a repo-level variable",
+ "operationId": "getRepoVariable",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the owner",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repository",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the variable",
+ "name": "variablename",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/ActionVariable"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "put": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Update a repo-level variable",
+ "operationId": "updateRepoVariable",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the owner",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repository",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the variable",
+ "name": "variablename",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/UpdateVariableOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "response when updating a repo-level variable"
+ },
+ "204": {
+ "description": "response when updating a repo-level variable"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Create a repo-level variable",
+ "operationId": "createRepoVariable",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the owner",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repository",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the variable",
+ "name": "variablename",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateVariableOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "response when creating a repo-level variable"
+ },
+ "204": {
+ "description": "response when creating a repo-level variable"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Delete a repo-level variable",
+ "operationId": "deleteRepoVariable",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the owner",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repository",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the variable",
+ "name": "variablename",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/ActionVariable"
+ },
+ "201": {
+ "description": "response when deleting a variable"
+ },
+ "204": {
+ "description": "response when deleting a variable"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/activities/feeds": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "List a repository's activity feeds",
+ "operationId": "repoListActivityFeeds",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "format": "date",
+ "description": "the date of the activities to be found",
+ "name": "date",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/ActivityFeedsList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/archive/{archive}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get an archive of a repository",
+ "operationId": "repoGetArchive",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "the git reference for download with attached archive format (e.g. master.zip)",
+ "name": "archive",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "success"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/assignees": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Return all users that have write access and can be assigned to issues",
+ "operationId": "repoGetAssignees",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/UserList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/avatar": {
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Update avatar",
+ "operationId": "repoUpdateAvatar",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/UpdateRepoAvatarOption"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Delete avatar",
+ "operationId": "repoDeleteAvatar",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/branch_protections": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "List branch protections for a repository",
+ "operationId": "repoListBranchProtection",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/BranchProtectionList"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Create a branch protections for a repository",
+ "operationId": "repoCreateBranchProtection",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateBranchProtectionOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/BranchProtection"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/branch_protections/priority": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Update the priorities of branch protections for a repository.",
+ "operationId": "repoUpdateBranchProtectionPriories",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/UpdateBranchProtectionPriories"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/branch_protections/{name}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get a specific branch protection for the repository",
+ "operationId": "repoGetBranchProtection",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of protected branch",
+ "name": "name",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/BranchProtection"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Delete a specific branch protection for the repository",
+ "operationId": "repoDeleteBranchProtection",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of protected branch",
+ "name": "name",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "patch": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Edit a branch protections for a repository. Only fields that are set will be changed",
+ "operationId": "repoEditBranchProtection",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of protected branch",
+ "name": "name",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/EditBranchProtectionOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/BranchProtection"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/branches": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "List a repository's branches",
+ "operationId": "repoListBranches",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/BranchList"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Create a branch",
+ "operationId": "repoCreateBranch",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateBranchRepoOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Branch"
+ },
+ "403": {
+ "description": "The branch is archived or a mirror."
+ },
+ "404": {
+ "description": "The old branch does not exist."
+ },
+ "409": {
+ "description": "The branch with the same name already exists."
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/branches/{branch}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Retrieve a specific branch from a repository, including its effective branch protection",
+ "operationId": "repoGetBranch",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "branch to get",
+ "name": "branch",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Branch"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Delete a specific branch from a repository",
+ "operationId": "repoDeleteBranch",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "branch to delete",
+ "name": "branch",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ },
+ "patch": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Update a branch",
+ "operationId": "repoUpdateBranch",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the branch",
+ "name": "branch",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/UpdateBranchRepoOption"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/collaborators": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "List a repository's collaborators",
+ "operationId": "repoListCollaborators",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/UserList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/collaborators/{collaborator}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Check if a user is a collaborator of a repository",
+ "operationId": "repoCheckCollaborator",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "username of the collaborator",
+ "name": "collaborator",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ },
+ "put": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Add or Update a collaborator to a repository",
+ "operationId": "repoAddCollaborator",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "username of the collaborator to add",
+ "name": "collaborator",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/AddCollaboratorOption"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Delete a collaborator from a repository",
+ "operationId": "repoDeleteCollaborator",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "username of the collaborator to delete",
+ "name": "collaborator",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/collaborators/{collaborator}/permission": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get repository permissions for a user",
+ "operationId": "repoGetRepoPermissions",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "username of the collaborator",
+ "name": "collaborator",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/RepoCollaboratorPermission"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/commits": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get a list of all commits from a repository",
+ "operationId": "repoGetAllCommits",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "SHA or branch to start listing commits from (usually 'master')",
+ "name": "sha",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "filepath of a file/dir",
+ "name": "path",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "include diff stats for every commit (disable for speedup, default 'true')",
+ "name": "stat",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "include verification for every commit (disable for speedup, default 'true')",
+ "name": "verification",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "include a list of affected files for every commit (disable for speedup, default 'true')",
+ "name": "files",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results (ignored if used with 'path')",
+ "name": "limit",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "commits that match the given specifier will not be listed.",
+ "name": "not",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/CommitList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "409": {
+ "$ref": "#/responses/EmptyRepository"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/commits/{ref}/status": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get a commit's combined status, by branch/tag/commit reference",
+ "operationId": "repoGetCombinedStatusByRef",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of branch/tag/commit",
+ "name": "ref",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/CombinedStatus"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/commits/{ref}/statuses": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get a commit's statuses, by branch/tag/commit reference",
+ "operationId": "repoListStatusesByRef",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of branch/tag/commit",
+ "name": "ref",
+ "in": "path",
+ "required": true
+ },
+ {
+ "enum": [
+ "oldest",
+ "recentupdate",
+ "leastupdate",
+ "leastindex",
+ "highestindex"
+ ],
+ "type": "string",
+ "description": "type of sort",
+ "name": "sort",
+ "in": "query"
+ },
+ {
+ "enum": [
+ "pending",
+ "success",
+ "error",
+ "failure",
+ "warning"
+ ],
+ "type": "string",
+ "description": "type of state",
+ "name": "state",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/CommitStatusList"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/commits/{sha}/pull": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get the merged pull request of the commit",
+ "operationId": "repoGetCommitPullRequest",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "SHA of the commit to get",
+ "name": "sha",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/PullRequest"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/compare/{basehead}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get commit comparison information",
+ "operationId": "repoCompareDiff",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "compare two branches or commits",
+ "name": "basehead",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Compare"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/contents": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Gets the metadata of all the entries of the root dir",
+ "operationId": "repoGetContentsList",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "The name of the commit/branch/tag. Default the repository’s default branch (usually master)",
+ "name": "ref",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/ContentsListResponse"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Modify multiple files in a repository",
+ "operationId": "repoChangeFiles",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/ChangeFilesOptions"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/FilesResponse"
+ },
+ "403": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/error"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/contents/{filepath}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Gets the metadata and contents (if a file) of an entry in a repository, or a list of entries if a dir",
+ "operationId": "repoGetContents",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "path of the dir, file, symlink or submodule in the repo",
+ "name": "filepath",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "The name of the commit/branch/tag. Default the repository’s default branch (usually master)",
+ "name": "ref",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/ContentsResponse"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "put": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Update a file in a repository",
+ "operationId": "repoUpdateFile",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "path of the file to update",
+ "name": "filepath",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/UpdateFileOptions"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/FileResponse"
+ },
+ "403": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/error"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Create a file in a repository",
+ "operationId": "repoCreateFile",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "path of the file to create",
+ "name": "filepath",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/CreateFileOptions"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/FileResponse"
+ },
+ "403": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/error"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ },
+ "delete": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Delete a file in a repository",
+ "operationId": "repoDeleteFile",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "path of the file to delete",
+ "name": "filepath",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/DeleteFileOptions"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/FileDeleteResponse"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "403": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/error"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/diffpatch": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Apply diff patch to repository",
+ "operationId": "repoApplyDiffPatch",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/UpdateFileOptions"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/FileResponse"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/editorconfig/{filepath}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get the EditorConfig definitions of a file in a repository",
+ "operationId": "repoGetEditorConfig",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "filepath of file to get",
+ "name": "filepath",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "The name of the commit/branch/tag. Default the repository’s default branch (usually master)",
+ "name": "ref",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "success"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/forks": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "List a repository's forks",
+ "operationId": "listForks",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/RepositoryList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Fork a repository",
+ "operationId": "createFork",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo to fork",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo to fork",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateForkOption"
+ }
+ }
+ ],
+ "responses": {
+ "202": {
+ "$ref": "#/responses/Repository"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "409": {
+ "description": "The repository with the same name already exists."
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/git/blobs/{sha}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Gets the blob of a repository.",
+ "operationId": "GetBlob",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "sha of the commit",
+ "name": "sha",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/GitBlobResponse"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/git/commits/{sha}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get a single commit from a repository",
+ "operationId": "repoGetSingleCommit",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "a git ref or commit sha",
+ "name": "sha",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "boolean",
+ "description": "include diff stats for every commit (disable for speedup, default 'true')",
+ "name": "stat",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "include verification for every commit (disable for speedup, default 'true')",
+ "name": "verification",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "include a list of affected files for every commit (disable for speedup, default 'true')",
+ "name": "files",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Commit"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/git/commits/{sha}.{diffType}": {
+ "get": {
+ "produces": [
+ "text/plain"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get a commit's diff or patch",
+ "operationId": "repoDownloadCommitDiffOrPatch",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "SHA of the commit to get",
+ "name": "sha",
+ "in": "path",
+ "required": true
+ },
+ {
+ "enum": [
+ "diff",
+ "patch"
+ ],
+ "type": "string",
+ "description": "whether the output is diff or patch",
+ "name": "diffType",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/string"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/git/notes/{sha}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get a note corresponding to a single commit from a repository",
+ "operationId": "repoGetNote",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "a git ref or commit sha",
+ "name": "sha",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "boolean",
+ "description": "include verification for every commit (disable for speedup, default 'true')",
+ "name": "verification",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "include a list of affected files for every commit (disable for speedup, default 'true')",
+ "name": "files",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Note"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/git/refs": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get specified ref or filtered repository's refs",
+ "operationId": "repoListAllGitRefs",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/ReferenceList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/git/refs/{ref}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get specified ref or filtered repository's refs",
+ "operationId": "repoListGitRefs",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "part or full name of the ref",
+ "name": "ref",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/ReferenceList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/git/tags/{sha}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Gets the tag object of an annotated tag (not lightweight tags)",
+ "operationId": "GetAnnotatedTag",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "sha of the tag. The Git tags API only supports annotated tag objects, not lightweight tags.",
+ "name": "sha",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/AnnotatedTag"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/git/trees/{sha}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Gets the tree of a repository.",
+ "operationId": "GetTree",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "sha of the commit",
+ "name": "sha",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "boolean",
+ "description": "show all directories and files",
+ "name": "recursive",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page number; the 'truncated' field in the response will be true if there are still more items after this page, false if the last page",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "number of items per page",
+ "name": "per_page",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/GitTreeResponse"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/hooks": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "List the hooks in a repository",
+ "operationId": "repoListHooks",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/HookList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Create a hook",
+ "operationId": "repoCreateHook",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateHookOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Hook"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/hooks/git": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "List the Git hooks in a repository",
+ "operationId": "repoListGitHooks",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/GitHookList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/hooks/git/{id}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get a Git hook",
+ "operationId": "repoGetGitHook",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "id of the hook to get",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/GitHook"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Delete a Git hook in a repository",
+ "operationId": "repoDeleteGitHook",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "id of the hook to get",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "patch": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Edit a Git hook in a repository",
+ "operationId": "repoEditGitHook",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "id of the hook to get",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/EditGitHookOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/GitHook"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/hooks/{id}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get a hook",
+ "operationId": "repoGetHook",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the hook to get",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Hook"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Delete a hook in a repository",
+ "operationId": "repoDeleteHook",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the hook to delete",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "patch": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Edit a hook in a repository",
+ "operationId": "repoEditHook",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the hook",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/EditHookOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Hook"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/hooks/{id}/tests": {
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Test a push webhook",
+ "operationId": "repoTestHook",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the hook to test",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "The name of the commit/branch/tag, indicates which commit will be loaded to the webhook payload.",
+ "name": "ref",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issue_config": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Returns the issue config for a repo",
+ "operationId": "repoGetIssueConfig",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/RepoIssueConfig"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issue_config/validate": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Returns the validation information for a issue config",
+ "operationId": "repoValidateIssueConfig",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/RepoIssueConfigValidation"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issue_templates": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get available issue templates for a repository",
+ "operationId": "repoGetIssueTemplates",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/IssueTemplates"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issues": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "List a repository's issues",
+ "operationId": "issueListIssues",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "enum": [
+ "closed",
+ "open",
+ "all"
+ ],
+ "type": "string",
+ "description": "whether issue is open or closed",
+ "name": "state",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "comma separated list of labels. Fetch only issues that have any of this labels. Non existent labels are discarded",
+ "name": "labels",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "search string",
+ "name": "q",
+ "in": "query"
+ },
+ {
+ "enum": [
+ "issues",
+ "pulls"
+ ],
+ "type": "string",
+ "description": "filter by type (issues / pulls) if set",
+ "name": "type",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "comma separated list of milestone names or ids. It uses names and fall back to ids. Fetch only issues that have any of this milestones. Non existent milestones are discarded",
+ "name": "milestones",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "format": "date-time",
+ "description": "Only show items updated after the given time. This is a timestamp in RFC 3339 format",
+ "name": "since",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "format": "date-time",
+ "description": "Only show items updated before the given time. This is a timestamp in RFC 3339 format",
+ "name": "before",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "Only show items which were created by the given user",
+ "name": "created_by",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "Only show items for which the given user is assigned",
+ "name": "assigned_by",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "Only show items in which the given user was mentioned",
+ "name": "mentioned_by",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/IssueList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Create an issue. If using deadline only the date will be taken into account, and time of day ignored.",
+ "operationId": "issueCreateIssue",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateIssueOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Issue"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "412": {
+ "$ref": "#/responses/error"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issues/comments": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "List all comments in a repository",
+ "operationId": "issueGetRepoComments",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "format": "date-time",
+ "description": "if provided, only comments updated since the provided time are returned.",
+ "name": "since",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "format": "date-time",
+ "description": "if provided, only comments updated before the provided time are returned.",
+ "name": "before",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/CommentList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issues/comments/{id}": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Get a comment",
+ "operationId": "issueGetComment",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the comment",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Comment"
+ },
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "issue"
+ ],
+ "summary": "Delete a comment",
+ "operationId": "issueDeleteComment",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of comment to delete",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "patch": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Edit a comment",
+ "operationId": "issueEditComment",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the comment to edit",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/EditIssueCommentOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Comment"
+ },
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issues/comments/{id}/assets": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "List comment's attachments",
+ "operationId": "issueListIssueCommentAttachments",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the comment",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/AttachmentList"
+ },
+ "404": {
+ "$ref": "#/responses/error"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "multipart/form-data"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Create a comment attachment",
+ "operationId": "issueCreateIssueCommentAttachment",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the comment",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the attachment",
+ "name": "name",
+ "in": "query"
+ },
+ {
+ "type": "file",
+ "description": "attachment to upload",
+ "name": "attachment",
+ "in": "formData",
+ "required": true
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Attachment"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/error"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issues/comments/{id}/assets/{attachment_id}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Get a comment attachment",
+ "operationId": "issueGetIssueCommentAttachment",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the comment",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the attachment to get",
+ "name": "attachment_id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Attachment"
+ },
+ "404": {
+ "$ref": "#/responses/error"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Delete a comment attachment",
+ "operationId": "issueDeleteIssueCommentAttachment",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the comment",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the attachment to delete",
+ "name": "attachment_id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/error"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ },
+ "patch": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Edit a comment attachment",
+ "operationId": "issueEditIssueCommentAttachment",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the comment",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the attachment to edit",
+ "name": "attachment_id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/EditAttachmentOptions"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Attachment"
+ },
+ "404": {
+ "$ref": "#/responses/error"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issues/comments/{id}/reactions": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Get a list of reactions from a comment of an issue",
+ "operationId": "issueGetCommentReactions",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the comment to edit",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/ReactionList"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Add a reaction to a comment of an issue",
+ "operationId": "issuePostCommentReaction",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the comment to edit",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "content",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/EditReactionOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Reaction"
+ },
+ "201": {
+ "$ref": "#/responses/Reaction"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Remove a reaction from a comment of an issue",
+ "operationId": "issueDeleteCommentReaction",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the comment to edit",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "content",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/EditReactionOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issues/pinned": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "List a repo's pinned issues",
+ "operationId": "repoListPinnedIssues",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/IssueList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issues/{index}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Get an issue",
+ "operationId": "issueGetIssue",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue to get",
+ "name": "index",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Issue"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "issue"
+ ],
+ "summary": "Delete an issue",
+ "operationId": "issueDelete",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of issue to delete",
+ "name": "index",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "patch": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Edit an issue. If using deadline only the date will be taken into account, and time of day ignored.",
+ "operationId": "issueEditIssue",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue to edit",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/EditIssueOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Issue"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "412": {
+ "$ref": "#/responses/error"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issues/{index}/assets": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "List issue's attachments",
+ "operationId": "issueListIssueAttachments",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/AttachmentList"
+ },
+ "404": {
+ "$ref": "#/responses/error"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "multipart/form-data"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Create an issue attachment",
+ "operationId": "issueCreateIssueAttachment",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the attachment",
+ "name": "name",
+ "in": "query"
+ },
+ {
+ "type": "file",
+ "description": "attachment to upload",
+ "name": "attachment",
+ "in": "formData",
+ "required": true
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Attachment"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/error"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issues/{index}/assets/{attachment_id}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Get an issue attachment",
+ "operationId": "issueGetIssueAttachment",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the attachment to get",
+ "name": "attachment_id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Attachment"
+ },
+ "404": {
+ "$ref": "#/responses/error"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Delete an issue attachment",
+ "operationId": "issueDeleteIssueAttachment",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the attachment to delete",
+ "name": "attachment_id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/error"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ },
+ "patch": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Edit an issue attachment",
+ "operationId": "issueEditIssueAttachment",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the attachment to edit",
+ "name": "attachment_id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/EditAttachmentOptions"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Attachment"
+ },
+ "404": {
+ "$ref": "#/responses/error"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issues/{index}/blocks": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "List issues that are blocked by this issue",
+ "operationId": "issueListBlocks",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "index of the issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/IssueList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Block the issue given in the body by the issue in path",
+ "operationId": "issueCreateIssueBlocking",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "index of the issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/IssueMeta"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Issue"
+ },
+ "404": {
+ "description": "the issue does not exist"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Unblock the issue given in the body by the issue in path",
+ "operationId": "issueRemoveIssueBlocking",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "index of the issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/IssueMeta"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Issue"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issues/{index}/comments": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "List all comments on an issue",
+ "operationId": "issueGetComments",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "format": "date-time",
+ "description": "if provided, only comments updated since the specified time are returned.",
+ "name": "since",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "format": "date-time",
+ "description": "if provided, only comments updated before the provided time are returned.",
+ "name": "before",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/CommentList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Add a comment to an issue",
+ "operationId": "issueCreateComment",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateIssueCommentOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Comment"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issues/{index}/comments/{id}": {
+ "delete": {
+ "tags": [
+ "issue"
+ ],
+ "summary": "Delete a comment",
+ "operationId": "issueDeleteCommentDeprecated",
+ "deprecated": true,
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "this parameter is ignored",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of comment to delete",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "patch": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Edit a comment",
+ "operationId": "issueEditCommentDeprecated",
+ "deprecated": true,
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "this parameter is ignored",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the comment to edit",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/EditIssueCommentOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Comment"
+ },
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issues/{index}/deadline": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Set an issue deadline. If set to null, the deadline is deleted. If using deadline only the date will be taken into account, and time of day ignored.",
+ "operationId": "issueEditIssueDeadline",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue to create or update a deadline on",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/EditDeadlineOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/IssueDeadline"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issues/{index}/dependencies": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "List an issue's dependencies, i.e all issues that block this issue.",
+ "operationId": "issueListIssueDependencies",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "index of the issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/IssueList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Make the issue in the url depend on the issue in the form.",
+ "operationId": "issueCreateIssueDependencies",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "index of the issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/IssueMeta"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Issue"
+ },
+ "404": {
+ "description": "the issue does not exist"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Remove an issue dependency",
+ "operationId": "issueRemoveIssueDependencies",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "index of the issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/IssueMeta"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Issue"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issues/{index}/labels": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Get an issue's labels",
+ "operationId": "issueGetLabels",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/LabelList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "put": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Replace an issue's labels",
+ "operationId": "issueReplaceLabels",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/IssueLabelsOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/LabelList"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Add a label to an issue",
+ "operationId": "issueAddLabel",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/IssueLabelsOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/LabelList"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Remove all labels from an issue",
+ "operationId": "issueClearLabels",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issues/{index}/labels/{id}": {
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Remove a label from an issue",
+ "operationId": "issueRemoveLabel",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the label to remove",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issues/{index}/pin": {
+ "post": {
+ "tags": [
+ "issue"
+ ],
+ "summary": "Pin an Issue",
+ "operationId": "pinIssue",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of issue to pin",
+ "name": "index",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "issue"
+ ],
+ "summary": "Unpin an Issue",
+ "operationId": "unpinIssue",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of issue to unpin",
+ "name": "index",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issues/{index}/pin/{position}": {
+ "patch": {
+ "tags": [
+ "issue"
+ ],
+ "summary": "Moves the Pin to the given Position",
+ "operationId": "moveIssuePin",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "the new position",
+ "name": "position",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issues/{index}/reactions": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Get a list reactions of an issue",
+ "operationId": "issueGetIssueReactions",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/ReactionList"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Add a reaction to an issue",
+ "operationId": "issuePostIssueReaction",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "content",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/EditReactionOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Reaction"
+ },
+ "201": {
+ "$ref": "#/responses/Reaction"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Remove a reaction from an issue",
+ "operationId": "issueDeleteIssueReaction",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "content",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/EditReactionOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issues/{index}/stopwatch/delete": {
+ "delete": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Delete an issue's existing stopwatch.",
+ "operationId": "issueDeleteStopWatch",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue to stop the stopwatch on",
+ "name": "index",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "description": "Not repo writer, user does not have rights to toggle stopwatch"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "409": {
+ "description": "Cannot cancel a non existent stopwatch"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issues/{index}/stopwatch/start": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Start stopwatch on an issue.",
+ "operationId": "issueStartStopWatch",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue to create the stopwatch on",
+ "name": "index",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "description": "Not repo writer, user does not have rights to toggle stopwatch"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "409": {
+ "description": "Cannot start a stopwatch again if it already exists"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issues/{index}/stopwatch/stop": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Stop an issue's existing stopwatch.",
+ "operationId": "issueStopStopWatch",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue to stop the stopwatch on",
+ "name": "index",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "description": "Not repo writer, user does not have rights to toggle stopwatch"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "409": {
+ "description": "Cannot stop a non existent stopwatch"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issues/{index}/subscriptions": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Get users who subscribed on an issue.",
+ "operationId": "issueSubscriptions",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/UserList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issues/{index}/subscriptions/check": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Check if user is subscribed to an issue",
+ "operationId": "issueCheckSubscription",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/WatchInfo"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issues/{index}/subscriptions/{user}": {
+ "put": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Subscribe user to issue",
+ "operationId": "issueAddSubscription",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "user to subscribe",
+ "name": "user",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Already subscribed"
+ },
+ "201": {
+ "description": "Successfully Subscribed"
+ },
+ "304": {
+ "description": "User can only subscribe itself if he is no admin"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Unsubscribe user from issue",
+ "operationId": "issueDeleteSubscription",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "user witch unsubscribe",
+ "name": "user",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Already unsubscribed"
+ },
+ "201": {
+ "description": "Successfully Unsubscribed"
+ },
+ "304": {
+ "description": "User can only subscribe itself if he is no admin"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issues/{index}/timeline": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "List all comments and events on an issue",
+ "operationId": "issueGetCommentsAndTimeline",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "format": "date-time",
+ "description": "if provided, only comments updated since the specified time are returned.",
+ "name": "since",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "format": "date-time",
+ "description": "if provided, only comments updated before the provided time are returned.",
+ "name": "before",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/TimelineList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issues/{index}/times": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "List an issue's tracked times",
+ "operationId": "issueTrackedTimes",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "optional filter by user (available for issue managers)",
+ "name": "user",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "format": "date-time",
+ "description": "Only show times updated after the given time. This is a timestamp in RFC 3339 format",
+ "name": "since",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "format": "date-time",
+ "description": "Only show times updated before the given time. This is a timestamp in RFC 3339 format",
+ "name": "before",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/TrackedTimeList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Add tracked time to a issue",
+ "operationId": "issueAddTime",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/AddTimeOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/TrackedTime"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Reset a tracked time of an issue",
+ "operationId": "issueResetTime",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue to add tracked time to",
+ "name": "index",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/issues/{index}/times/{id}": {
+ "delete": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Delete specific tracked time",
+ "operationId": "issueDeleteTime",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the issue",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of time to delete",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/keys": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "List a repository's keys",
+ "operationId": "repoListKeys",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "the key_id to search for",
+ "name": "key_id",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "fingerprint of the key",
+ "name": "fingerprint",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/DeployKeyList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Add a key to a repository",
+ "operationId": "repoCreateKey",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateKeyOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/DeployKey"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/keys/{id}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get a repository's key by id",
+ "operationId": "repoGetKey",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the key to get",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/DeployKey"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "repository"
+ ],
+ "summary": "Delete a key from a repository",
+ "operationId": "repoDeleteKey",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the key to delete",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/labels": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Get all of a repository's labels",
+ "operationId": "issueListLabels",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/LabelList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Create a label",
+ "operationId": "issueCreateLabel",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateLabelOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Label"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/labels/{id}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Get a single label",
+ "operationId": "issueGetLabel",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the label to get",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Label"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "issue"
+ ],
+ "summary": "Delete a label",
+ "operationId": "issueDeleteLabel",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the label to delete",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "patch": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Update a label",
+ "operationId": "issueEditLabel",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the label to edit",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/EditLabelOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Label"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/languages": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get languages and number of bytes of code written",
+ "operationId": "repoGetLanguages",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/LanguageStatistics"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/licenses": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get repo licenses",
+ "operationId": "repoGetLicenses",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/LicensesList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/media/{filepath}": {
+ "get": {
+ "produces": [
+ "application/octet-stream"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get a file or it's LFS object from a repository",
+ "operationId": "repoGetRawFileOrLFS",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "path of the file to get, it should be \"{ref}/{filepath}\". If there is no ref could be inferred, it will be treated as the default branch",
+ "name": "filepath",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "The name of the commit/branch/tag. Default the repository’s default branch",
+ "name": "ref",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Returns raw file content.",
+ "schema": {
+ "type": "file"
+ }
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/merge-upstream": {
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Merge a branch from upstream",
+ "operationId": "repoMergeUpstream",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/MergeUpstreamRequest"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/MergeUpstreamResponse"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/milestones": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Get all of a repository's opened milestones",
+ "operationId": "issueGetMilestonesList",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Milestone state, Recognized values are open, closed and all. Defaults to \"open\"",
+ "name": "state",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "filter by milestone name",
+ "name": "name",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/MilestoneList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Create a milestone",
+ "operationId": "issueCreateMilestone",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateMilestoneOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Milestone"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/milestones/{id}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Get a milestone",
+ "operationId": "issueGetMilestone",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "the milestone to get, identified by ID and if not available by name",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Milestone"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "issue"
+ ],
+ "summary": "Delete a milestone",
+ "operationId": "issueDeleteMilestone",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "the milestone to delete, identified by ID and if not available by name",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "patch": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "issue"
+ ],
+ "summary": "Update a milestone",
+ "operationId": "issueEditMilestone",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "the milestone to edit, identified by ID and if not available by name",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/EditMilestoneOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Milestone"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/mirror-sync": {
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Sync a mirrored repository",
+ "operationId": "repoMirrorSync",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo to sync",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo to sync",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/new_pin_allowed": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Returns if new Issue Pins are allowed",
+ "operationId": "repoNewPinAllowed",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/RepoNewIssuePinsAllowed"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/notifications": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "notification"
+ ],
+ "summary": "List users's notification threads on a specific repo",
+ "operationId": "notifyGetRepoList",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "boolean",
+ "description": "If true, show notifications marked as read. Default value is false",
+ "name": "all",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "Show notifications with the provided status types. Options are: unread, read and/or pinned. Defaults to unread \u0026 pinned",
+ "name": "status-types",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "enum": [
+ "issue",
+ "pull",
+ "commit",
+ "repository"
+ ],
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "filter notifications by subject type",
+ "name": "subject-type",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "format": "date-time",
+ "description": "Only show notifications updated after the given time. This is a timestamp in RFC 3339 format",
+ "name": "since",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "format": "date-time",
+ "description": "Only show notifications updated before the given time. This is a timestamp in RFC 3339 format",
+ "name": "before",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/NotificationThreadList"
+ }
+ }
+ },
+ "put": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "notification"
+ ],
+ "summary": "Mark notification threads as read, pinned or unread on a specific repo",
+ "operationId": "notifyReadRepoList",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "If true, mark all notifications on this repo. Default value is false",
+ "name": "all",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "collectionFormat": "multi",
+ "description": "Mark notifications with the provided status types. Options are: unread, read and/or pinned. Defaults to unread.",
+ "name": "status-types",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "Status to mark notifications as. Defaults to read.",
+ "name": "to-status",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "format": "date-time",
+ "description": "Describes the last point that notifications were checked. Anything updated since this time will not be updated.",
+ "name": "last_read_at",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "205": {
+ "$ref": "#/responses/NotificationThreadList"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/pulls": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "List a repo's pull requests",
+ "operationId": "repoListPullRequests",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "Owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "Name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "enum": [
+ "open",
+ "closed",
+ "all"
+ ],
+ "type": "string",
+ "default": "open",
+ "description": "State of pull request",
+ "name": "state",
+ "in": "query"
+ },
+ {
+ "enum": [
+ "oldest",
+ "recentupdate",
+ "leastupdate",
+ "mostcomment",
+ "leastcomment",
+ "priority"
+ ],
+ "type": "string",
+ "description": "Type of sort",
+ "name": "sort",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "ID of the milestone",
+ "name": "milestone",
+ "in": "query"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "collectionFormat": "multi",
+ "description": "Label IDs",
+ "name": "labels",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "Filter by pull request author",
+ "name": "poster",
+ "in": "query"
+ },
+ {
+ "minimum": 1,
+ "type": "integer",
+ "default": 1,
+ "description": "Page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "minimum": 0,
+ "type": "integer",
+ "description": "Page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/PullRequestList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "500": {
+ "$ref": "#/responses/error"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Create a pull request",
+ "operationId": "repoCreatePullRequest",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreatePullRequestOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/PullRequest"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "409": {
+ "$ref": "#/responses/error"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/pulls/pinned": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "List a repo's pinned pull requests",
+ "operationId": "repoListPinnedPullRequests",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/PullRequestList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/pulls/{base}/{head}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get a pull request by base and head",
+ "operationId": "repoGetPullRequestByBaseHead",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "base of the pull request to get",
+ "name": "base",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "head of the pull request to get",
+ "name": "head",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/PullRequest"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/pulls/{index}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get a pull request",
+ "operationId": "repoGetPullRequest",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the pull request to get",
+ "name": "index",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/PullRequest"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "patch": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Update a pull request. If using deadline only the date will be taken into account, and time of day ignored.",
+ "operationId": "repoEditPullRequest",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the pull request to edit",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/EditPullRequestOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/PullRequest"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "409": {
+ "$ref": "#/responses/error"
+ },
+ "412": {
+ "$ref": "#/responses/error"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/pulls/{index}.{diffType}": {
+ "get": {
+ "produces": [
+ "text/plain"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get a pull request diff or patch",
+ "operationId": "repoDownloadPullDiffOrPatch",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the pull request to get",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "enum": [
+ "diff",
+ "patch"
+ ],
+ "type": "string",
+ "description": "whether the output is diff or patch",
+ "name": "diffType",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "boolean",
+ "description": "whether to include binary file changes. if true, the diff is applicable with `git apply`",
+ "name": "binary",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/string"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/pulls/{index}/commits": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get commits for a pull request",
+ "operationId": "repoGetPullRequestCommits",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the pull request to get",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "include verification for every commit (disable for speedup, default 'true')",
+ "name": "verification",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "include a list of affected files for every commit (disable for speedup, default 'true')",
+ "name": "files",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/CommitList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/pulls/{index}/files": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get changed files for a pull request",
+ "operationId": "repoGetPullRequestFiles",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the pull request to get",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "skip to given file",
+ "name": "skip-to",
+ "in": "query"
+ },
+ {
+ "enum": [
+ "ignore-all",
+ "ignore-change",
+ "ignore-eol",
+ "show-all"
+ ],
+ "type": "string",
+ "description": "whitespace behavior",
+ "name": "whitespace",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/ChangedFileList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/pulls/{index}/merge": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Check if a pull request has been merged",
+ "operationId": "repoPullRequestIsMerged",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the pull request",
+ "name": "index",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "pull request has been merged"
+ },
+ "404": {
+ "description": "pull request has not been merged"
+ }
+ }
+ },
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Merge a pull request",
+ "operationId": "repoMergePullRequest",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the pull request to merge",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/MergePullRequestOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "405": {
+ "$ref": "#/responses/empty"
+ },
+ "409": {
+ "$ref": "#/responses/error"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Cancel the scheduled auto merge for the given pull request",
+ "operationId": "repoCancelScheduledAutoMerge",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the pull request to merge",
+ "name": "index",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/pulls/{index}/requested_reviewers": {
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "create review requests for a pull request",
+ "operationId": "repoCreatePullReviewRequests",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the pull request",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/PullReviewRequestOptions"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/PullReviewList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "cancel review requests for a pull request",
+ "operationId": "repoDeletePullReviewRequests",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the pull request",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/PullReviewRequestOptions"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/pulls/{index}/reviews": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "List all reviews for a pull request",
+ "operationId": "repoListPullReviews",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the pull request",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/PullReviewList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Create a review to an pull request",
+ "operationId": "repoCreatePullReview",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the pull request",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/CreatePullReviewOptions"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/PullReview"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/pulls/{index}/reviews/{id}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get a specific review for a pull request",
+ "operationId": "repoGetPullReview",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the pull request",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the review",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/PullReview"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Submit a pending review to an pull request",
+ "operationId": "repoSubmitPullReview",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the pull request",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the review",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/SubmitPullReviewOptions"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/PullReview"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Delete a specific review from a pull request",
+ "operationId": "repoDeletePullReview",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the pull request",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the review",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/pulls/{index}/reviews/{id}/comments": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get a specific review for a pull request",
+ "operationId": "repoGetPullReviewComments",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the pull request",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the review",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/PullReviewCommentList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/pulls/{index}/reviews/{id}/dismissals": {
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Dismiss a review for a pull request",
+ "operationId": "repoDismissPullReview",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the pull request",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the review",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/DismissPullReviewOptions"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/PullReview"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/pulls/{index}/reviews/{id}/undismissals": {
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Cancel to dismiss a review for a pull request",
+ "operationId": "repoUnDismissPullReview",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the pull request",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the review",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/PullReview"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/pulls/{index}/update": {
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Merge PR's baseBranch into headBranch",
+ "operationId": "repoUpdatePullRequest",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "index of the pull request to get",
+ "name": "index",
+ "in": "path",
+ "required": true
+ },
+ {
+ "enum": [
+ "merge",
+ "rebase"
+ ],
+ "type": "string",
+ "description": "how to update pull request",
+ "name": "style",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "409": {
+ "$ref": "#/responses/error"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/push_mirrors": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get all push mirrors of the repository",
+ "operationId": "repoListPushMirrors",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/PushMirrorList"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "add a push mirror to the repository",
+ "operationId": "repoAddPushMirror",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreatePushMirrorOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/PushMirror"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/push_mirrors-sync": {
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Sync all push mirrored repository",
+ "operationId": "repoPushMirrorSync",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo to sync",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo to sync",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/empty"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/push_mirrors/{name}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get push mirror of the repository by remoteName",
+ "operationId": "repoGetPushMirrorByRemoteName",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "remote name of push mirror",
+ "name": "name",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/PushMirror"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "deletes a push mirror from a repository by remoteName",
+ "operationId": "repoDeletePushMirror",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "remote name of the pushMirror",
+ "name": "name",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/raw/{filepath}": {
+ "get": {
+ "produces": [
+ "application/octet-stream"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get a file from a repository",
+ "operationId": "repoGetRawFile",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "path of the file to get, it should be \"{ref}/{filepath}\". If there is no ref could be inferred, it will be treated as the default branch",
+ "name": "filepath",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "The name of the commit/branch/tag. Default the repository’s default branch",
+ "name": "ref",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Returns raw file content.",
+ "schema": {
+ "type": "file"
+ }
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/releases": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "List a repo's releases",
+ "operationId": "repoListReleases",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "boolean",
+ "description": "filter (exclude / include) drafts, if you dont have repo write access none will show",
+ "name": "draft",
+ "in": "query"
+ },
+ {
+ "type": "boolean",
+ "description": "filter (exclude / include) pre-releases",
+ "name": "pre-release",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/ReleaseList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Create a release",
+ "operationId": "repoCreateRelease",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateReleaseOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Release"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "409": {
+ "$ref": "#/responses/error"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/releases/latest": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Gets the most recent non-prerelease, non-draft release of a repository, sorted by created_at",
+ "operationId": "repoGetLatestRelease",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Release"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/releases/tags/{tag}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get a release by tag name",
+ "operationId": "repoGetReleaseByTag",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "tag name of the release to get",
+ "name": "tag",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Release"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "repository"
+ ],
+ "summary": "Delete a release by tag name",
+ "operationId": "repoDeleteReleaseByTag",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "tag name of the release to delete",
+ "name": "tag",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/releases/{id}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get a release",
+ "operationId": "repoGetRelease",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the release to get",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Release"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "repository"
+ ],
+ "summary": "Delete a release",
+ "operationId": "repoDeleteRelease",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the release to delete",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ },
+ "patch": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Update a release",
+ "operationId": "repoEditRelease",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the release to edit",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/EditReleaseOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Release"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/releases/{id}/assets": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "List release's attachments",
+ "operationId": "repoListReleaseAttachments",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the release",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/AttachmentList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "multipart/form-data",
+ "application/octet-stream"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Create a release attachment",
+ "operationId": "repoCreateReleaseAttachment",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the release",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the attachment",
+ "name": "name",
+ "in": "query"
+ },
+ {
+ "type": "file",
+ "description": "attachment to upload",
+ "name": "attachment",
+ "in": "formData"
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Attachment"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/releases/{id}/assets/{attachment_id}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get a release attachment",
+ "operationId": "repoGetReleaseAttachment",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the release",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the attachment to get",
+ "name": "attachment_id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Attachment"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Delete a release attachment",
+ "operationId": "repoDeleteReleaseAttachment",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the release",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the attachment to delete",
+ "name": "attachment_id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "patch": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Edit a release attachment",
+ "operationId": "repoEditReleaseAttachment",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the release",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the attachment to edit",
+ "name": "attachment_id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/EditAttachmentOptions"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Attachment"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/reviewers": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Return all users that can be requested to review in this repo",
+ "operationId": "repoGetReviewers",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/UserList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/signing-key.gpg": {
+ "get": {
+ "produces": [
+ "text/plain"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get signing-key.gpg for given repository",
+ "operationId": "repoSigningKey",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "GPG armored public key",
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/stargazers": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "List a repo's stargazers",
+ "operationId": "repoListStargazers",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/UserList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/statuses/{sha}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get a commit's statuses",
+ "operationId": "repoListStatuses",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "sha of the commit",
+ "name": "sha",
+ "in": "path",
+ "required": true
+ },
+ {
+ "enum": [
+ "oldest",
+ "recentupdate",
+ "leastupdate",
+ "leastindex",
+ "highestindex"
+ ],
+ "type": "string",
+ "description": "type of sort",
+ "name": "sort",
+ "in": "query"
+ },
+ {
+ "enum": [
+ "pending",
+ "success",
+ "error",
+ "failure",
+ "warning"
+ ],
+ "type": "string",
+ "description": "type of state",
+ "name": "state",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/CommitStatusList"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Create a commit status",
+ "operationId": "repoCreateStatus",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "sha of the commit",
+ "name": "sha",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateStatusOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/CommitStatus"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/subscribers": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "List a repo's watchers",
+ "operationId": "repoListSubscribers",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/UserList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/subscription": {
+ "get": {
+ "tags": [
+ "repository"
+ ],
+ "summary": "Check if the current user is watching a repo",
+ "operationId": "userCurrentCheckSubscription",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/WatchInfo"
+ },
+ "404": {
+ "description": "User is not watching this repo or repo do not exist"
+ }
+ }
+ },
+ "put": {
+ "tags": [
+ "repository"
+ ],
+ "summary": "Watch a repo",
+ "operationId": "userCurrentPutSubscription",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/WatchInfo"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "repository"
+ ],
+ "summary": "Unwatch a repo",
+ "operationId": "userCurrentDeleteSubscription",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/tag_protections": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "List tag protections for a repository",
+ "operationId": "repoListTagProtection",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/TagProtectionList"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Create a tag protections for a repository",
+ "operationId": "repoCreateTagProtection",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateTagProtectionOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/TagProtection"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/tag_protections/{id}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get a specific tag protection for the repository",
+ "operationId": "repoGetTagProtection",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "id of the tag protect to get",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/TagProtection"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Delete a specific tag protection for the repository",
+ "operationId": "repoDeleteTagProtection",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "id of protected tag",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "patch": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Edit a tag protections for a repository. Only fields that are set will be changed",
+ "operationId": "repoEditTagProtection",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "id of protected tag",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/EditTagProtectionOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/TagProtection"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/tags": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "List a repository's tags",
+ "operationId": "repoListTags",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results, default maximum page size is 50",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/TagList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Create a new git tag in a repository",
+ "operationId": "repoCreateTag",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateTagOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Tag"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "405": {
+ "$ref": "#/responses/empty"
+ },
+ "409": {
+ "$ref": "#/responses/conflict"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/tags/{tag}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get the tag of a repository by tag name",
+ "operationId": "repoGetTag",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of tag",
+ "name": "tag",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Tag"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Delete a repository's tag by name",
+ "operationId": "repoDeleteTag",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of tag to delete",
+ "name": "tag",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "405": {
+ "$ref": "#/responses/empty"
+ },
+ "409": {
+ "$ref": "#/responses/conflict"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/teams": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "List a repository's teams",
+ "operationId": "repoListTeams",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/TeamList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/teams/{team}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Check if a team is assigned to a repository",
+ "operationId": "repoCheckTeam",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "team name",
+ "name": "team",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Team"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "405": {
+ "$ref": "#/responses/error"
+ }
+ }
+ },
+ "put": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Add a team to a repository",
+ "operationId": "repoAddTeam",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "team name",
+ "name": "team",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "405": {
+ "$ref": "#/responses/error"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Delete a team from a repository",
+ "operationId": "repoDeleteTeam",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "team name",
+ "name": "team",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "405": {
+ "$ref": "#/responses/error"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/times": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "List a repo's tracked times",
+ "operationId": "repoTrackedTimes",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "optional filter by user (available for issue managers)",
+ "name": "user",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "format": "date-time",
+ "description": "Only show times updated after the given time. This is a timestamp in RFC 3339 format",
+ "name": "since",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "format": "date-time",
+ "description": "Only show times updated before the given time. This is a timestamp in RFC 3339 format",
+ "name": "before",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/TrackedTimeList"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/times/{user}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "List a user's tracked times in a repo",
+ "operationId": "userTrackedTimes",
+ "deprecated": true,
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "username of user",
+ "name": "user",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/TrackedTimeList"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/topics": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get list of topics that a repository has",
+ "operationId": "repoListTopics",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/TopicNames"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "put": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Replace list of topics for a repository",
+ "operationId": "repoUpdateTopics",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/RepoTopicOptions"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/invalidTopicsError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/topics/{topic}": {
+ "put": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Add a topic to a repository",
+ "operationId": "repoAddTopic",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the topic to add",
+ "name": "topic",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/invalidTopicsError"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Delete a topic from a repository",
+ "operationId": "repoDeleteTopic",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the topic to delete",
+ "name": "topic",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/invalidTopicsError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/transfer": {
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Transfer a repo ownership",
+ "operationId": "repoTransfer",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo to transfer",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo to transfer",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "description": "Transfer Options",
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/TransferRepoOption"
+ }
+ }
+ ],
+ "responses": {
+ "202": {
+ "$ref": "#/responses/Repository"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/transfer/accept": {
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Accept a repo transfer",
+ "operationId": "acceptRepoTransfer",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo to transfer",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo to transfer",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "202": {
+ "$ref": "#/responses/Repository"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/transfer/reject": {
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Reject a repo transfer",
+ "operationId": "rejectRepoTransfer",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo to transfer",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo to transfer",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Repository"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/wiki/new": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Create a wiki page",
+ "operationId": "repoCreateWikiPage",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateWikiPageOptions"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/WikiPage"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/wiki/page/{pageName}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get a wiki page",
+ "operationId": "repoGetWikiPage",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the page",
+ "name": "pageName",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/WikiPage"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "repository"
+ ],
+ "summary": "Delete a wiki page",
+ "operationId": "repoDeleteWikiPage",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the page",
+ "name": "pageName",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ },
+ "patch": {
+ "consumes": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Edit a wiki page",
+ "operationId": "repoEditWikiPage",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the page",
+ "name": "pageName",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateWikiPageOptions"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/WikiPage"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "423": {
+ "$ref": "#/responses/repoArchivedError"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/wiki/pages": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get all wiki pages",
+ "operationId": "repoGetWikiPages",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/WikiPageList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{owner}/{repo}/wiki/revisions/{pageName}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get revisions of a wiki page",
+ "operationId": "repoGetWikiPageRevisions",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the page",
+ "name": "pageName",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/WikiCommitList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/repos/{template_owner}/{template_repo}/generate": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Create a repository using a template",
+ "operationId": "generateRepo",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the template repository owner",
+ "name": "template_owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the template repository",
+ "name": "template_repo",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/GenerateRepoOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Repository"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "409": {
+ "description": "The repository with the same name already exists."
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/repositories/{id}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "Get a repository by id",
+ "operationId": "repoGetByID",
+ "parameters": [
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the repo to get",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Repository"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/settings/api": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "settings"
+ ],
+ "summary": "Get instance's global settings for api",
+ "operationId": "getGeneralAPISettings",
+ "responses": {
+ "200": {
+ "$ref": "#/responses/GeneralAPISettings"
+ }
+ }
+ }
+ },
+ "/settings/attachment": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "settings"
+ ],
+ "summary": "Get instance's global settings for Attachment",
+ "operationId": "getGeneralAttachmentSettings",
+ "responses": {
+ "200": {
+ "$ref": "#/responses/GeneralAttachmentSettings"
+ }
+ }
+ }
+ },
+ "/settings/repository": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "settings"
+ ],
+ "summary": "Get instance's global settings for repositories",
+ "operationId": "getGeneralRepositorySettings",
+ "responses": {
+ "200": {
+ "$ref": "#/responses/GeneralRepoSettings"
+ }
+ }
+ }
+ },
+ "/settings/ui": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "settings"
+ ],
+ "summary": "Get instance's global settings for ui",
+ "operationId": "getGeneralUISettings",
+ "responses": {
+ "200": {
+ "$ref": "#/responses/GeneralUISettings"
+ }
+ }
+ }
+ },
+ "/signing-key.gpg": {
+ "get": {
+ "produces": [
+ "text/plain"
+ ],
+ "tags": [
+ "miscellaneous"
+ ],
+ "summary": "Get default signing-key.gpg",
+ "operationId": "getSigningKey",
+ "responses": {
+ "200": {
+ "description": "GPG armored public key",
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "/teams/{id}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Get a team",
+ "operationId": "orgGetTeam",
+ "parameters": [
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the team to get",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Team"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "organization"
+ ],
+ "summary": "Delete a team",
+ "operationId": "orgDeleteTeam",
+ "parameters": [
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the team to delete",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "team deleted"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "patch": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Edit a team",
+ "operationId": "orgEditTeam",
+ "parameters": [
+ {
+ "type": "integer",
+ "description": "id of the team to edit",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/EditTeamOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Team"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/teams/{id}/activities/feeds": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "List a team's activity feeds",
+ "operationId": "orgListTeamActivityFeeds",
+ "parameters": [
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the team",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "format": "date",
+ "description": "the date of the activities to be found",
+ "name": "date",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/ActivityFeedsList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/teams/{id}/members": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "List a team's members",
+ "operationId": "orgListTeamMembers",
+ "parameters": [
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the team",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/UserList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/teams/{id}/members/{username}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "List a particular member of team",
+ "operationId": "orgListTeamMember",
+ "parameters": [
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the team",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "username of the member to list",
+ "name": "username",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/User"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "put": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Add a team member",
+ "operationId": "orgAddTeamMember",
+ "parameters": [
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the team",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "username of the user to add",
+ "name": "username",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Remove a team member",
+ "operationId": "orgRemoveTeamMember",
+ "parameters": [
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the team",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "username of the user to remove",
+ "name": "username",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/teams/{id}/repos": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "List a team's repos",
+ "operationId": "orgListTeamRepos",
+ "parameters": [
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the team",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/RepositoryList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/teams/{id}/repos/{org}/{repo}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "List a particular repo of team",
+ "operationId": "orgListTeamRepo",
+ "parameters": [
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the team",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "organization that owns the repo to list",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo to list",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Repository"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "put": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Add a repository to a team",
+ "operationId": "orgAddTeamRepository",
+ "parameters": [
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the team",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "organization that owns the repo to add",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo to add",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "description": "This does not delete the repository, it only removes the repository from the team.",
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Remove a repository from a team",
+ "operationId": "orgRemoveTeamRepository",
+ "parameters": [
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the team",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "organization that owns the repo to remove",
+ "name": "org",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo to remove",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/topics/search": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository"
+ ],
+ "summary": "search topics via keyword",
+ "operationId": "topicSearch",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "keywords to search",
+ "name": "q",
+ "in": "query",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/TopicListResponse"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/user": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Get the authenticated user",
+ "operationId": "userGetCurrent",
+ "responses": {
+ "200": {
+ "$ref": "#/responses/User"
+ }
+ }
+ }
+ },
+ "/user/actions/runners/registration-token": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Get an user's actions runner registration token",
+ "operationId": "userGetRunnerRegistrationToken",
+ "responses": {
+ "200": {
+ "$ref": "#/responses/RegistrationToken"
+ }
+ }
+ }
+ },
+ "/user/actions/secrets/{secretname}": {
+ "put": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Create or Update a secret value in a user scope",
+ "operationId": "updateUserSecret",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the secret",
+ "name": "secretname",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateOrUpdateSecretOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "response when creating a secret"
+ },
+ "204": {
+ "description": "response when updating a secret"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Delete a secret in a user scope",
+ "operationId": "deleteUserSecret",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the secret",
+ "name": "secretname",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "delete one secret of the user"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/user/actions/variables": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Get the user-level list of variables which is created by current doer",
+ "operationId": "getUserVariablesList",
+ "parameters": [
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/VariableList"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/user/actions/variables/{variablename}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Get a user-level variable which is created by current doer",
+ "operationId": "getUserVariable",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the variable",
+ "name": "variablename",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/ActionVariable"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "put": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Update a user-level variable which is created by current doer",
+ "operationId": "updateUserVariable",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the variable",
+ "name": "variablename",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/UpdateVariableOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "response when updating a variable"
+ },
+ "204": {
+ "description": "response when updating a variable"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Create a user-level variable",
+ "operationId": "createUserVariable",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the variable",
+ "name": "variablename",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateVariableOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "response when creating a variable"
+ },
+ "204": {
+ "description": "response when creating a variable"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Delete a user-level variable which is created by current doer",
+ "operationId": "deleteUserVariable",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "name of the variable",
+ "name": "variablename",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "201": {
+ "description": "response when deleting a variable"
+ },
+ "204": {
+ "description": "response when deleting a variable"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/user/applications/oauth2": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "List the authenticated user's oauth2 applications",
+ "operationId": "userGetOauth2Application",
+ "parameters": [
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/OAuth2ApplicationList"
+ }
+ }
+ },
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "creates a new OAuth2 application",
+ "operationId": "userCreateOAuth2Application",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/CreateOAuth2ApplicationOptions"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/OAuth2Application"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ }
+ }
+ }
+ },
+ "/user/applications/oauth2/{id}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "get an OAuth2 Application",
+ "operationId": "userGetOAuth2Application",
+ "parameters": [
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "Application ID to be found",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/OAuth2Application"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "delete an OAuth2 Application",
+ "operationId": "userDeleteOAuth2Application",
+ "parameters": [
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "token to be deleted",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "patch": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "update an OAuth2 Application, this includes regenerating the client secret",
+ "operationId": "userUpdateOAuth2Application",
+ "parameters": [
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "application to be updated",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/CreateOAuth2ApplicationOptions"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/OAuth2Application"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/user/avatar": {
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Update Avatar",
+ "operationId": "userUpdateAvatar",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/UpdateUserAvatarOption"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Delete Avatar",
+ "operationId": "userDeleteAvatar",
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ }
+ }
+ }
+ },
+ "/user/blocks": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "List users blocked by the authenticated user",
+ "operationId": "userListBlocks",
+ "parameters": [
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/UserList"
+ }
+ }
+ }
+ },
+ "/user/blocks/{username}": {
+ "get": {
+ "tags": [
+ "user"
+ ],
+ "summary": "Check if a user is blocked by the authenticated user",
+ "operationId": "userCheckUserBlock",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "user to check",
+ "name": "username",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "put": {
+ "tags": [
+ "user"
+ ],
+ "summary": "Block a user",
+ "operationId": "userBlockUser",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "user to block",
+ "name": "username",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "optional note for the block",
+ "name": "note",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "user"
+ ],
+ "summary": "Unblock a user",
+ "operationId": "userUnblockUser",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "user to unblock",
+ "name": "username",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/user/emails": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "List the authenticated user's email addresses",
+ "operationId": "userListEmails",
+ "responses": {
+ "200": {
+ "$ref": "#/responses/EmailList"
+ }
+ }
+ },
+ "post": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Add email addresses",
+ "operationId": "userAddEmail",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateEmailOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/EmailList"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Delete email addresses",
+ "operationId": "userDeleteEmail",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/DeleteEmailOption"
+ }
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/user/followers": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "List the authenticated user's followers",
+ "operationId": "userCurrentListFollowers",
+ "parameters": [
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/UserList"
+ }
+ }
+ }
+ },
+ "/user/following": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "List the users that the authenticated user is following",
+ "operationId": "userCurrentListFollowing",
+ "parameters": [
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/UserList"
+ }
+ }
+ }
+ },
+ "/user/following/{username}": {
+ "get": {
+ "tags": [
+ "user"
+ ],
+ "summary": "Check whether a user is followed by the authenticated user",
+ "operationId": "userCurrentCheckFollowing",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "username of followed user",
+ "name": "username",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "put": {
+ "tags": [
+ "user"
+ ],
+ "summary": "Follow a user",
+ "operationId": "userCurrentPutFollow",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "username of user to follow",
+ "name": "username",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "user"
+ ],
+ "summary": "Unfollow a user",
+ "operationId": "userCurrentDeleteFollow",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "username of user to unfollow",
+ "name": "username",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/user/gpg_key_token": {
+ "get": {
+ "produces": [
+ "text/plain"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Get a Token to verify",
+ "operationId": "getVerificationToken",
+ "responses": {
+ "200": {
+ "$ref": "#/responses/string"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/user/gpg_key_verify": {
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Verify a GPG key",
+ "operationId": "userVerifyGPGKey",
+ "responses": {
+ "201": {
+ "$ref": "#/responses/GPGKey"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/user/gpg_keys": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "List the authenticated user's GPG keys",
+ "operationId": "userCurrentListGPGKeys",
+ "parameters": [
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/GPGKeyList"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Create a GPG key",
+ "operationId": "userCurrentPostGPGKey",
+ "parameters": [
+ {
+ "name": "Form",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateGPGKeyOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/GPGKey"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/user/gpg_keys/{id}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Get a GPG key",
+ "operationId": "userCurrentGetGPGKey",
+ "parameters": [
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of key to get",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/GPGKey"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Remove a GPG key",
+ "operationId": "userCurrentDeleteGPGKey",
+ "parameters": [
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of key to delete",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/user/hooks": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "List the authenticated user's webhooks",
+ "operationId": "userListHooks",
+ "parameters": [
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/HookList"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Create a hook",
+ "operationId": "userCreateHook",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/CreateHookOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Hook"
+ }
+ }
+ }
+ },
+ "/user/hooks/{id}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Get a hook",
+ "operationId": "userGetHook",
+ "parameters": [
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the hook to get",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Hook"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Delete a hook",
+ "operationId": "userDeleteHook",
+ "parameters": [
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the hook to delete",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ }
+ }
+ },
+ "patch": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Update a hook",
+ "operationId": "userEditHook",
+ "parameters": [
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of the hook to update",
+ "name": "id",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/EditHookOption"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/Hook"
+ }
+ }
+ }
+ },
+ "/user/keys": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "List the authenticated user's public keys",
+ "operationId": "userCurrentListKeys",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "fingerprint of the key",
+ "name": "fingerprint",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/PublicKeyList"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Create a public key",
+ "operationId": "userCurrentPostKey",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateKeyOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/PublicKey"
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/user/keys/{id}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Get a public key",
+ "operationId": "userCurrentGetKey",
+ "parameters": [
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of key to get",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/PublicKey"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Delete a public key",
+ "operationId": "userCurrentDeleteKey",
+ "parameters": [
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "id of key to delete",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/user/orgs": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "List the current user's organizations",
+ "operationId": "orgListCurrentUserOrgs",
+ "parameters": [
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/OrganizationList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/user/repos": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "List the repos that the authenticated user owns",
+ "operationId": "userCurrentListRepos",
+ "parameters": [
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/RepositoryList"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "repository",
+ "user"
+ ],
+ "summary": "Create a repository",
+ "operationId": "createCurrentUserRepo",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateRepoOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/Repository"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "409": {
+ "description": "The repository with the same name already exists."
+ },
+ "422": {
+ "$ref": "#/responses/validationError"
+ }
+ }
+ }
+ },
+ "/user/settings": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Get user settings",
+ "operationId": "getUserSettings",
+ "responses": {
+ "200": {
+ "$ref": "#/responses/UserSettings"
+ }
+ }
+ },
+ "patch": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Update user settings",
+ "operationId": "updateUserSettings",
+ "parameters": [
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/UserSettingsOptions"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/UserSettings"
+ }
+ }
+ }
+ },
+ "/user/starred": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "The repos that the authenticated user has starred",
+ "operationId": "userCurrentListStarred",
+ "parameters": [
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/RepositoryList"
+ }
+ }
+ }
+ },
+ "/user/starred/{owner}/{repo}": {
+ "get": {
+ "tags": [
+ "user"
+ ],
+ "summary": "Whether the authenticated is starring the repo",
+ "operationId": "userCurrentCheckStarring",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "put": {
+ "tags": [
+ "user"
+ ],
+ "summary": "Star the given repo",
+ "operationId": "userCurrentPutStar",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo to star",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo to star",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ },
+ "delete": {
+ "tags": [
+ "user"
+ ],
+ "summary": "Unstar the given repo",
+ "operationId": "userCurrentDeleteStar",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "owner of the repo to unstar",
+ "name": "owner",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the repo to unstar",
+ "name": "repo",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/user/stopwatches": {
+ "get": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Get list of all existing stopwatches",
+ "operationId": "userGetStopWatches",
+ "parameters": [
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/StopWatchList"
+ }
+ }
+ }
+ },
+ "/user/subscriptions": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "List repositories watched by the authenticated user",
+ "operationId": "userCurrentListSubscriptions",
+ "parameters": [
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/RepositoryList"
+ }
+ }
+ }
+ },
+ "/user/teams": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "List all the teams a user belongs to",
+ "operationId": "userListTeams",
+ "parameters": [
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/TeamList"
+ }
+ }
+ }
+ },
+ "/user/times": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "List the current user's tracked times",
+ "operationId": "userCurrentTrackedTimes",
+ "parameters": [
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "format": "date-time",
+ "description": "Only show times updated after the given time. This is a timestamp in RFC 3339 format",
+ "name": "since",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "format": "date-time",
+ "description": "Only show times updated before the given time. This is a timestamp in RFC 3339 format",
+ "name": "before",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/TrackedTimeList"
+ }
+ }
+ }
+ },
+ "/users/search": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Search for users",
+ "operationId": "userSearch",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "keyword",
+ "name": "q",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "format": "int64",
+ "description": "ID of the user to search for",
+ "name": "uid",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "SearchResults of a successful search",
+ "schema": {
+ "type": "object",
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/User"
+ }
+ },
+ "ok": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/users/{username}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Get a user",
+ "operationId": "userGet",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "username of user to get",
+ "name": "username",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/User"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/users/{username}/activities/feeds": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "List a user's activity feeds",
+ "operationId": "userListActivityFeeds",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "username of user",
+ "name": "username",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "boolean",
+ "description": "if true, only show actions performed by the requested user",
+ "name": "only-performed-by",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "format": "date",
+ "description": "the date of the activities to be found",
+ "name": "date",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/ActivityFeedsList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/users/{username}/followers": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "List the given user's followers",
+ "operationId": "userListFollowers",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "username of user",
+ "name": "username",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/UserList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/users/{username}/following": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "List the users that the given user is following",
+ "operationId": "userListFollowing",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "username of user",
+ "name": "username",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/UserList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/users/{username}/following/{target}": {
+ "get": {
+ "tags": [
+ "user"
+ ],
+ "summary": "Check if one user is following another user",
+ "operationId": "userCheckFollowing",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "username of following user",
+ "name": "username",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "username of followed user",
+ "name": "target",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/users/{username}/gpg_keys": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "List the given user's GPG keys",
+ "operationId": "userListGPGKeys",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "username of user",
+ "name": "username",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/GPGKeyList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/users/{username}/heatmap": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Get a user's heatmap",
+ "operationId": "userGetHeatmapData",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "username of user to get",
+ "name": "username",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/UserHeatmapData"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/users/{username}/keys": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "List the given user's public keys",
+ "operationId": "userListKeys",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "username of user",
+ "name": "username",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "fingerprint of the key",
+ "name": "fingerprint",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/PublicKeyList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/users/{username}/orgs": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "List a user's organizations",
+ "operationId": "orgListUserOrgs",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "username of user",
+ "name": "username",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/OrganizationList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/users/{username}/orgs/{org}/permissions": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "organization"
+ ],
+ "summary": "Get user permissions in organization",
+ "operationId": "orgGetUserPermissions",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "username of user",
+ "name": "username",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "name of the organization",
+ "name": "org",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/OrganizationPermissions"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/users/{username}/repos": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "List the repos owned by the given user",
+ "operationId": "userListRepos",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "username of user",
+ "name": "username",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/RepositoryList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/users/{username}/starred": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "The repos that the given user has starred",
+ "operationId": "userListStarred",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "username of user",
+ "name": "username",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/RepositoryList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/users/{username}/subscriptions": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "List the repositories watched by a user",
+ "operationId": "userListSubscriptions",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "username of the user",
+ "name": "username",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/RepositoryList"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ }
+ }
+ }
+ },
+ "/users/{username}/tokens": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "List the authenticated user's access tokens",
+ "operationId": "userGetTokens",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "username of user",
+ "name": "username",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "page number of results to return (1-based)",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "page size of results",
+ "name": "limit",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/AccessTokenList"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ }
+ }
+ },
+ "post": {
+ "consumes": [
+ "application/json"
+ ],
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "Create an access token",
+ "operationId": "userCreateToken",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "username of user",
+ "name": "username",
+ "in": "path",
+ "required": true
+ },
+ {
+ "name": "body",
+ "in": "body",
+ "schema": {
+ "$ref": "#/definitions/CreateAccessTokenOption"
+ }
+ }
+ ],
+ "responses": {
+ "201": {
+ "$ref": "#/responses/AccessToken"
+ },
+ "400": {
+ "$ref": "#/responses/error"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ }
+ }
+ }
+ },
+ "/users/{username}/tokens/{token}": {
+ "delete": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "user"
+ ],
+ "summary": "delete an access token",
+ "operationId": "userDeleteAccessToken",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "username of user",
+ "name": "username",
+ "in": "path",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "token to be deleted, identified by ID and if not available by name",
+ "name": "token",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "204": {
+ "$ref": "#/responses/empty"
+ },
+ "403": {
+ "$ref": "#/responses/forbidden"
+ },
+ "404": {
+ "$ref": "#/responses/notFound"
+ },
+ "422": {
+ "$ref": "#/responses/error"
+ }
+ }
+ }
+ },
+ "/version": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "miscellaneous"
+ ],
+ "summary": "Returns the version of the Gitea application",
+ "operationId": "getVersion",
+ "responses": {
+ "200": {
+ "$ref": "#/responses/ServerVersion"
+ }
+ }
+ }
+ }
+ },
+ "definitions": {
+ "APIError": {
+ "description": "APIError is an api error with a message",
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string",
+ "x-go-name": "Message"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "AccessToken": {
+ "type": "object",
+ "title": "AccessToken represents an API access token.",
+ "properties": {
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "scopes": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "Scopes"
+ },
+ "sha1": {
+ "type": "string",
+ "x-go-name": "Token"
+ },
+ "token_last_eight": {
+ "type": "string",
+ "x-go-name": "TokenLastEight"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "ActionTask": {
+ "description": "ActionTask represents a ActionTask",
+ "type": "object",
+ "properties": {
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "CreatedAt"
+ },
+ "display_title": {
+ "type": "string",
+ "x-go-name": "DisplayTitle"
+ },
+ "event": {
+ "type": "string",
+ "x-go-name": "Event"
+ },
+ "head_branch": {
+ "type": "string",
+ "x-go-name": "HeadBranch"
+ },
+ "head_sha": {
+ "type": "string",
+ "x-go-name": "HeadSHA"
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "run_number": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "RunNumber"
+ },
+ "run_started_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "RunStartedAt"
+ },
+ "status": {
+ "type": "string",
+ "x-go-name": "Status"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "UpdatedAt"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ },
+ "workflow_id": {
+ "type": "string",
+ "x-go-name": "WorkflowID"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "ActionTaskResponse": {
+ "description": "ActionTaskResponse returns a ActionTask",
+ "type": "object",
+ "properties": {
+ "total_count": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "TotalCount"
+ },
+ "workflow_runs": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ActionTask"
+ },
+ "x-go-name": "Entries"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "ActionVariable": {
+ "description": "ActionVariable return value of the query API",
+ "type": "object",
+ "properties": {
+ "data": {
+ "description": "the value of the variable",
+ "type": "string",
+ "x-go-name": "Data"
+ },
+ "name": {
+ "description": "the name of the variable",
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "owner_id": {
+ "description": "the owner to which the variable belongs",
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "OwnerID"
+ },
+ "repo_id": {
+ "description": "the repository to which the variable belongs",
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "RepoID"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "Activity": {
+ "type": "object",
+ "properties": {
+ "act_user": {
+ "$ref": "#/definitions/User"
+ },
+ "act_user_id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ActUserID"
+ },
+ "comment": {
+ "$ref": "#/definitions/Comment"
+ },
+ "comment_id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "CommentID"
+ },
+ "content": {
+ "type": "string",
+ "x-go-name": "Content"
+ },
+ "created": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Created"
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "is_private": {
+ "type": "boolean",
+ "x-go-name": "IsPrivate"
+ },
+ "op_type": {
+ "description": "the type of action",
+ "type": "string",
+ "enum": [
+ "create_repo",
+ "rename_repo",
+ "star_repo",
+ "watch_repo",
+ "commit_repo",
+ "create_issue",
+ "create_pull_request",
+ "transfer_repo",
+ "push_tag",
+ "comment_issue",
+ "merge_pull_request",
+ "close_issue",
+ "reopen_issue",
+ "close_pull_request",
+ "reopen_pull_request",
+ "delete_tag",
+ "delete_branch",
+ "mirror_sync_push",
+ "mirror_sync_create",
+ "mirror_sync_delete",
+ "approve_pull_request",
+ "reject_pull_request",
+ "comment_pull",
+ "publish_release",
+ "pull_review_dismissed",
+ "pull_request_ready_for_review",
+ "auto_merge_pull_request"
+ ],
+ "x-go-name": "OpType"
+ },
+ "ref_name": {
+ "type": "string",
+ "x-go-name": "RefName"
+ },
+ "repo": {
+ "$ref": "#/definitions/Repository"
+ },
+ "repo_id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "RepoID"
+ },
+ "user_id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "UserID"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "ActivityPub": {
+ "description": "ActivityPub type",
+ "type": "object",
+ "properties": {
+ "@context": {
+ "type": "string",
+ "x-go-name": "Context"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "AddCollaboratorOption": {
+ "description": "AddCollaboratorOption options when adding a user as a collaborator of a repository",
+ "type": "object",
+ "properties": {
+ "permission": {
+ "type": "string",
+ "enum": [
+ "read",
+ "write",
+ "admin"
+ ],
+ "x-go-name": "Permission"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "AddTimeOption": {
+ "description": "AddTimeOption options for adding time to an issue",
+ "type": "object",
+ "required": [
+ "time"
+ ],
+ "properties": {
+ "created": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Created"
+ },
+ "time": {
+ "description": "time in seconds",
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Time"
+ },
+ "user_name": {
+ "description": "User who spent the time (optional)",
+ "type": "string",
+ "x-go-name": "User"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "AnnotatedTag": {
+ "description": "AnnotatedTag represents an annotated tag",
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string",
+ "x-go-name": "Message"
+ },
+ "object": {
+ "$ref": "#/definitions/AnnotatedTagObject"
+ },
+ "sha": {
+ "type": "string",
+ "x-go-name": "SHA"
+ },
+ "tag": {
+ "type": "string",
+ "x-go-name": "Tag"
+ },
+ "tagger": {
+ "$ref": "#/definitions/CommitUser"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ },
+ "verification": {
+ "$ref": "#/definitions/PayloadCommitVerification"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "AnnotatedTagObject": {
+ "description": "AnnotatedTagObject contains meta information of the tag object",
+ "type": "object",
+ "properties": {
+ "sha": {
+ "type": "string",
+ "x-go-name": "SHA"
+ },
+ "type": {
+ "type": "string",
+ "x-go-name": "Type"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "Attachment": {
+ "description": "Attachment a generic attachment",
+ "type": "object",
+ "properties": {
+ "browser_download_url": {
+ "type": "string",
+ "x-go-name": "DownloadURL"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Created"
+ },
+ "download_count": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "DownloadCount"
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "size": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Size"
+ },
+ "uuid": {
+ "type": "string",
+ "x-go-name": "UUID"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "Badge": {
+ "description": "Badge represents a user badge",
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string",
+ "x-go-name": "Description"
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "image_url": {
+ "type": "string",
+ "x-go-name": "ImageURL"
+ },
+ "slug": {
+ "type": "string",
+ "x-go-name": "Slug"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "Branch": {
+ "description": "Branch represents a repository branch",
+ "type": "object",
+ "properties": {
+ "commit": {
+ "$ref": "#/definitions/PayloadCommit"
+ },
+ "effective_branch_protection_name": {
+ "type": "string",
+ "x-go-name": "EffectiveBranchProtectionName"
+ },
+ "enable_status_check": {
+ "type": "boolean",
+ "x-go-name": "EnableStatusCheck"
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "protected": {
+ "type": "boolean",
+ "x-go-name": "Protected"
+ },
+ "required_approvals": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "RequiredApprovals"
+ },
+ "status_check_contexts": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "StatusCheckContexts"
+ },
+ "user_can_merge": {
+ "type": "boolean",
+ "x-go-name": "UserCanMerge"
+ },
+ "user_can_push": {
+ "type": "boolean",
+ "x-go-name": "UserCanPush"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "BranchProtection": {
+ "description": "BranchProtection represents a branch protection for a repository",
+ "type": "object",
+ "properties": {
+ "approvals_whitelist_teams": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "ApprovalsWhitelistTeams"
+ },
+ "approvals_whitelist_username": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "ApprovalsWhitelistUsernames"
+ },
+ "block_admin_merge_override": {
+ "type": "boolean",
+ "x-go-name": "BlockAdminMergeOverride"
+ },
+ "block_on_official_review_requests": {
+ "type": "boolean",
+ "x-go-name": "BlockOnOfficialReviewRequests"
+ },
+ "block_on_outdated_branch": {
+ "type": "boolean",
+ "x-go-name": "BlockOnOutdatedBranch"
+ },
+ "block_on_rejected_reviews": {
+ "type": "boolean",
+ "x-go-name": "BlockOnRejectedReviews"
+ },
+ "branch_name": {
+ "description": "Deprecated: true",
+ "type": "string",
+ "x-go-name": "BranchName"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Created"
+ },
+ "dismiss_stale_approvals": {
+ "type": "boolean",
+ "x-go-name": "DismissStaleApprovals"
+ },
+ "enable_approvals_whitelist": {
+ "type": "boolean",
+ "x-go-name": "EnableApprovalsWhitelist"
+ },
+ "enable_force_push": {
+ "type": "boolean",
+ "x-go-name": "EnableForcePush"
+ },
+ "enable_force_push_allowlist": {
+ "type": "boolean",
+ "x-go-name": "EnableForcePushAllowlist"
+ },
+ "enable_merge_whitelist": {
+ "type": "boolean",
+ "x-go-name": "EnableMergeWhitelist"
+ },
+ "enable_push": {
+ "type": "boolean",
+ "x-go-name": "EnablePush"
+ },
+ "enable_push_whitelist": {
+ "type": "boolean",
+ "x-go-name": "EnablePushWhitelist"
+ },
+ "enable_status_check": {
+ "type": "boolean",
+ "x-go-name": "EnableStatusCheck"
+ },
+ "force_push_allowlist_deploy_keys": {
+ "type": "boolean",
+ "x-go-name": "ForcePushAllowlistDeployKeys"
+ },
+ "force_push_allowlist_teams": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "ForcePushAllowlistTeams"
+ },
+ "force_push_allowlist_usernames": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "ForcePushAllowlistUsernames"
+ },
+ "ignore_stale_approvals": {
+ "type": "boolean",
+ "x-go-name": "IgnoreStaleApprovals"
+ },
+ "merge_whitelist_teams": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "MergeWhitelistTeams"
+ },
+ "merge_whitelist_usernames": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "MergeWhitelistUsernames"
+ },
+ "priority": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Priority"
+ },
+ "protected_file_patterns": {
+ "type": "string",
+ "x-go-name": "ProtectedFilePatterns"
+ },
+ "push_whitelist_deploy_keys": {
+ "type": "boolean",
+ "x-go-name": "PushWhitelistDeployKeys"
+ },
+ "push_whitelist_teams": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "PushWhitelistTeams"
+ },
+ "push_whitelist_usernames": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "PushWhitelistUsernames"
+ },
+ "require_signed_commits": {
+ "type": "boolean",
+ "x-go-name": "RequireSignedCommits"
+ },
+ "required_approvals": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "RequiredApprovals"
+ },
+ "rule_name": {
+ "type": "string",
+ "x-go-name": "RuleName"
+ },
+ "status_check_contexts": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "StatusCheckContexts"
+ },
+ "unprotected_file_patterns": {
+ "type": "string",
+ "x-go-name": "UnprotectedFilePatterns"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Updated"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "ChangeFileOperation": {
+ "description": "ChangeFileOperation for creating, updating or deleting a file",
+ "type": "object",
+ "required": [
+ "operation",
+ "path"
+ ],
+ "properties": {
+ "content": {
+ "description": "new or updated file content, must be base64 encoded",
+ "type": "string",
+ "x-go-name": "ContentBase64"
+ },
+ "from_path": {
+ "description": "old path of the file to move",
+ "type": "string",
+ "x-go-name": "FromPath"
+ },
+ "operation": {
+ "description": "indicates what to do with the file",
+ "type": "string",
+ "enum": [
+ "create",
+ "update",
+ "delete"
+ ],
+ "x-go-name": "Operation"
+ },
+ "path": {
+ "description": "path to the existing or new file",
+ "type": "string",
+ "x-go-name": "Path"
+ },
+ "sha": {
+ "description": "sha is the SHA for the file that already exists, required for update or delete",
+ "type": "string",
+ "x-go-name": "SHA"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "ChangeFilesOptions": {
+ "description": "ChangeFilesOptions options for creating, updating or deleting multiple files\nNote: `author` and `committer` are optional (if only one is given, it will be used for the other, otherwise the authenticated user will be used)",
+ "type": "object",
+ "required": [
+ "files"
+ ],
+ "properties": {
+ "author": {
+ "$ref": "#/definitions/Identity"
+ },
+ "branch": {
+ "description": "branch (optional) to base this file from. if not given, the default branch is used",
+ "type": "string",
+ "x-go-name": "BranchName"
+ },
+ "committer": {
+ "$ref": "#/definitions/Identity"
+ },
+ "dates": {
+ "$ref": "#/definitions/CommitDateOptions"
+ },
+ "files": {
+ "description": "list of file operations",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ChangeFileOperation"
+ },
+ "x-go-name": "Files"
+ },
+ "message": {
+ "description": "message (optional) for the commit of this file. if not supplied, a default message will be used",
+ "type": "string",
+ "x-go-name": "Message"
+ },
+ "new_branch": {
+ "description": "new_branch (optional) will make a new branch from `branch` before creating the file",
+ "type": "string",
+ "x-go-name": "NewBranchName"
+ },
+ "signoff": {
+ "description": "Add a Signed-off-by trailer by the committer at the end of the commit log message.",
+ "type": "boolean",
+ "x-go-name": "Signoff"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "ChangedFile": {
+ "description": "ChangedFile store information about files affected by the pull request",
+ "type": "object",
+ "properties": {
+ "additions": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Additions"
+ },
+ "changes": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Changes"
+ },
+ "contents_url": {
+ "type": "string",
+ "x-go-name": "ContentsURL"
+ },
+ "deletions": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Deletions"
+ },
+ "filename": {
+ "type": "string",
+ "x-go-name": "Filename"
+ },
+ "html_url": {
+ "type": "string",
+ "x-go-name": "HTMLURL"
+ },
+ "previous_filename": {
+ "type": "string",
+ "x-go-name": "PreviousFilename"
+ },
+ "raw_url": {
+ "type": "string",
+ "x-go-name": "RawURL"
+ },
+ "status": {
+ "type": "string",
+ "x-go-name": "Status"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CombinedStatus": {
+ "description": "CombinedStatus holds the combined state of several statuses for a single commit",
+ "type": "object",
+ "properties": {
+ "commit_url": {
+ "type": "string",
+ "x-go-name": "CommitURL"
+ },
+ "repository": {
+ "$ref": "#/definitions/Repository"
+ },
+ "sha": {
+ "type": "string",
+ "x-go-name": "SHA"
+ },
+ "state": {
+ "$ref": "#/definitions/CommitStatusState"
+ },
+ "statuses": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/CommitStatus"
+ },
+ "x-go-name": "Statuses"
+ },
+ "total_count": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "TotalCount"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "Comment": {
+ "description": "Comment represents a comment on a commit or issue",
+ "type": "object",
+ "properties": {
+ "assets": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Attachment"
+ },
+ "x-go-name": "Attachments"
+ },
+ "body": {
+ "type": "string",
+ "x-go-name": "Body"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Created"
+ },
+ "html_url": {
+ "type": "string",
+ "x-go-name": "HTMLURL"
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "issue_url": {
+ "type": "string",
+ "x-go-name": "IssueURL"
+ },
+ "original_author": {
+ "type": "string",
+ "x-go-name": "OriginalAuthor"
+ },
+ "original_author_id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "OriginalAuthorID"
+ },
+ "pull_request_url": {
+ "type": "string",
+ "x-go-name": "PRURL"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Updated"
+ },
+ "user": {
+ "$ref": "#/definitions/User"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "Commit": {
+ "type": "object",
+ "title": "Commit contains information generated from a Git commit.",
+ "properties": {
+ "author": {
+ "$ref": "#/definitions/User"
+ },
+ "commit": {
+ "$ref": "#/definitions/RepoCommit"
+ },
+ "committer": {
+ "$ref": "#/definitions/User"
+ },
+ "created": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Created"
+ },
+ "files": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/CommitAffectedFiles"
+ },
+ "x-go-name": "Files"
+ },
+ "html_url": {
+ "type": "string",
+ "x-go-name": "HTMLURL"
+ },
+ "parents": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/CommitMeta"
+ },
+ "x-go-name": "Parents"
+ },
+ "sha": {
+ "type": "string",
+ "x-go-name": "SHA"
+ },
+ "stats": {
+ "$ref": "#/definitions/CommitStats"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CommitAffectedFiles": {
+ "description": "CommitAffectedFiles store information about files affected by the commit",
+ "type": "object",
+ "properties": {
+ "filename": {
+ "type": "string",
+ "x-go-name": "Filename"
+ },
+ "status": {
+ "type": "string",
+ "x-go-name": "Status"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CommitDateOptions": {
+ "description": "CommitDateOptions store dates for GIT_AUTHOR_DATE and GIT_COMMITTER_DATE",
+ "type": "object",
+ "properties": {
+ "author": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Author"
+ },
+ "committer": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Committer"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CommitMeta": {
+ "type": "object",
+ "title": "CommitMeta contains meta information of a commit in terms of API.",
+ "properties": {
+ "created": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Created"
+ },
+ "sha": {
+ "type": "string",
+ "x-go-name": "SHA"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CommitStats": {
+ "description": "CommitStats is statistics for a RepoCommit",
+ "type": "object",
+ "properties": {
+ "additions": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Additions"
+ },
+ "deletions": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Deletions"
+ },
+ "total": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Total"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CommitStatus": {
+ "description": "CommitStatus holds a single status of a single Commit",
+ "type": "object",
+ "properties": {
+ "context": {
+ "type": "string",
+ "x-go-name": "Context"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Created"
+ },
+ "creator": {
+ "$ref": "#/definitions/User"
+ },
+ "description": {
+ "type": "string",
+ "x-go-name": "Description"
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "status": {
+ "$ref": "#/definitions/CommitStatusState"
+ },
+ "target_url": {
+ "type": "string",
+ "x-go-name": "TargetURL"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Updated"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CommitStatusState": {
+ "description": "CommitStatusState holds the state of a CommitStatus\nIt can be \"pending\", \"success\", \"error\" and \"failure\"",
+ "type": "string",
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CommitUser": {
+ "type": "object",
+ "title": "CommitUser contains information of a user in the context of a commit.",
+ "properties": {
+ "date": {
+ "type": "string",
+ "x-go-name": "Date"
+ },
+ "email": {
+ "type": "string",
+ "format": "email",
+ "x-go-name": "Email"
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "Compare": {
+ "type": "object",
+ "title": "Compare represents a comparison between two commits.",
+ "properties": {
+ "commits": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Commit"
+ },
+ "x-go-name": "Commits"
+ },
+ "total_commits": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "TotalCommits"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "ContentsResponse": {
+ "description": "ContentsResponse contains information about a repo's entry's (dir, file, symlink, submodule) metadata and content",
+ "type": "object",
+ "properties": {
+ "_links": {
+ "$ref": "#/definitions/FileLinksResponse"
+ },
+ "content": {
+ "description": "`content` is populated when `type` is `file`, otherwise null",
+ "type": "string",
+ "x-go-name": "Content"
+ },
+ "download_url": {
+ "type": "string",
+ "x-go-name": "DownloadURL"
+ },
+ "encoding": {
+ "description": "`encoding` is populated when `type` is `file`, otherwise null",
+ "type": "string",
+ "x-go-name": "Encoding"
+ },
+ "git_url": {
+ "type": "string",
+ "x-go-name": "GitURL"
+ },
+ "html_url": {
+ "type": "string",
+ "x-go-name": "HTMLURL"
+ },
+ "last_commit_sha": {
+ "type": "string",
+ "x-go-name": "LastCommitSHA"
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "path": {
+ "type": "string",
+ "x-go-name": "Path"
+ },
+ "sha": {
+ "type": "string",
+ "x-go-name": "SHA"
+ },
+ "size": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Size"
+ },
+ "submodule_git_url": {
+ "description": "`submodule_git_url` is populated when `type` is `submodule`, otherwise null",
+ "type": "string",
+ "x-go-name": "SubmoduleGitURL"
+ },
+ "target": {
+ "description": "`target` is populated when `type` is `symlink`, otherwise null",
+ "type": "string",
+ "x-go-name": "Target"
+ },
+ "type": {
+ "description": "`type` will be `file`, `dir`, `symlink`, or `submodule`",
+ "type": "string",
+ "x-go-name": "Type"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreateAccessTokenOption": {
+ "description": "CreateAccessTokenOption options when create access token",
+ "type": "object",
+ "required": [
+ "name"
+ ],
+ "properties": {
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "scopes": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "Scopes"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreateBranchProtectionOption": {
+ "description": "CreateBranchProtectionOption options for creating a branch protection",
+ "type": "object",
+ "properties": {
+ "approvals_whitelist_teams": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "ApprovalsWhitelistTeams"
+ },
+ "approvals_whitelist_username": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "ApprovalsWhitelistUsernames"
+ },
+ "block_admin_merge_override": {
+ "type": "boolean",
+ "x-go-name": "BlockAdminMergeOverride"
+ },
+ "block_on_official_review_requests": {
+ "type": "boolean",
+ "x-go-name": "BlockOnOfficialReviewRequests"
+ },
+ "block_on_outdated_branch": {
+ "type": "boolean",
+ "x-go-name": "BlockOnOutdatedBranch"
+ },
+ "block_on_rejected_reviews": {
+ "type": "boolean",
+ "x-go-name": "BlockOnRejectedReviews"
+ },
+ "branch_name": {
+ "description": "Deprecated: true",
+ "type": "string",
+ "x-go-name": "BranchName"
+ },
+ "dismiss_stale_approvals": {
+ "type": "boolean",
+ "x-go-name": "DismissStaleApprovals"
+ },
+ "enable_approvals_whitelist": {
+ "type": "boolean",
+ "x-go-name": "EnableApprovalsWhitelist"
+ },
+ "enable_force_push": {
+ "type": "boolean",
+ "x-go-name": "EnableForcePush"
+ },
+ "enable_force_push_allowlist": {
+ "type": "boolean",
+ "x-go-name": "EnableForcePushAllowlist"
+ },
+ "enable_merge_whitelist": {
+ "type": "boolean",
+ "x-go-name": "EnableMergeWhitelist"
+ },
+ "enable_push": {
+ "type": "boolean",
+ "x-go-name": "EnablePush"
+ },
+ "enable_push_whitelist": {
+ "type": "boolean",
+ "x-go-name": "EnablePushWhitelist"
+ },
+ "enable_status_check": {
+ "type": "boolean",
+ "x-go-name": "EnableStatusCheck"
+ },
+ "force_push_allowlist_deploy_keys": {
+ "type": "boolean",
+ "x-go-name": "ForcePushAllowlistDeployKeys"
+ },
+ "force_push_allowlist_teams": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "ForcePushAllowlistTeams"
+ },
+ "force_push_allowlist_usernames": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "ForcePushAllowlistUsernames"
+ },
+ "ignore_stale_approvals": {
+ "type": "boolean",
+ "x-go-name": "IgnoreStaleApprovals"
+ },
+ "merge_whitelist_teams": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "MergeWhitelistTeams"
+ },
+ "merge_whitelist_usernames": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "MergeWhitelistUsernames"
+ },
+ "priority": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Priority"
+ },
+ "protected_file_patterns": {
+ "type": "string",
+ "x-go-name": "ProtectedFilePatterns"
+ },
+ "push_whitelist_deploy_keys": {
+ "type": "boolean",
+ "x-go-name": "PushWhitelistDeployKeys"
+ },
+ "push_whitelist_teams": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "PushWhitelistTeams"
+ },
+ "push_whitelist_usernames": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "PushWhitelistUsernames"
+ },
+ "require_signed_commits": {
+ "type": "boolean",
+ "x-go-name": "RequireSignedCommits"
+ },
+ "required_approvals": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "RequiredApprovals"
+ },
+ "rule_name": {
+ "type": "string",
+ "x-go-name": "RuleName"
+ },
+ "status_check_contexts": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "StatusCheckContexts"
+ },
+ "unprotected_file_patterns": {
+ "type": "string",
+ "x-go-name": "UnprotectedFilePatterns"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreateBranchRepoOption": {
+ "description": "CreateBranchRepoOption options when creating a branch in a repository",
+ "type": "object",
+ "required": [
+ "new_branch_name"
+ ],
+ "properties": {
+ "new_branch_name": {
+ "description": "Name of the branch to create",
+ "type": "string",
+ "uniqueItems": true,
+ "x-go-name": "BranchName"
+ },
+ "old_branch_name": {
+ "description": "Deprecated: true\nName of the old branch to create from",
+ "type": "string",
+ "uniqueItems": true,
+ "x-go-name": "OldBranchName"
+ },
+ "old_ref_name": {
+ "description": "Name of the old branch/tag/commit to create from",
+ "type": "string",
+ "uniqueItems": true,
+ "x-go-name": "OldRefName"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreateEmailOption": {
+ "description": "CreateEmailOption options when creating email addresses",
+ "type": "object",
+ "properties": {
+ "emails": {
+ "description": "email addresses to add",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "Emails"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreateFileOptions": {
+ "description": "CreateFileOptions options for creating files\nNote: `author` and `committer` are optional (if only one is given, it will be used for the other, otherwise the authenticated user will be used)",
+ "type": "object",
+ "required": [
+ "content"
+ ],
+ "properties": {
+ "author": {
+ "$ref": "#/definitions/Identity"
+ },
+ "branch": {
+ "description": "branch (optional) to base this file from. if not given, the default branch is used",
+ "type": "string",
+ "x-go-name": "BranchName"
+ },
+ "committer": {
+ "$ref": "#/definitions/Identity"
+ },
+ "content": {
+ "description": "content must be base64 encoded",
+ "type": "string",
+ "x-go-name": "ContentBase64"
+ },
+ "dates": {
+ "$ref": "#/definitions/CommitDateOptions"
+ },
+ "message": {
+ "description": "message (optional) for the commit of this file. if not supplied, a default message will be used",
+ "type": "string",
+ "x-go-name": "Message"
+ },
+ "new_branch": {
+ "description": "new_branch (optional) will make a new branch from `branch` before creating the file",
+ "type": "string",
+ "x-go-name": "NewBranchName"
+ },
+ "signoff": {
+ "description": "Add a Signed-off-by trailer by the committer at the end of the commit log message.",
+ "type": "boolean",
+ "x-go-name": "Signoff"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreateForkOption": {
+ "description": "CreateForkOption options for creating a fork",
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "name of the forked repository",
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "organization": {
+ "description": "organization name, if forking into an organization",
+ "type": "string",
+ "x-go-name": "Organization"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreateGPGKeyOption": {
+ "description": "CreateGPGKeyOption options create user GPG key",
+ "type": "object",
+ "required": [
+ "armored_public_key"
+ ],
+ "properties": {
+ "armored_public_key": {
+ "description": "An armored GPG key to add",
+ "type": "string",
+ "uniqueItems": true,
+ "x-go-name": "ArmoredKey"
+ },
+ "armored_signature": {
+ "type": "string",
+ "x-go-name": "Signature"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreateHookOption": {
+ "description": "CreateHookOption options when create a hook",
+ "type": "object",
+ "required": [
+ "type",
+ "config"
+ ],
+ "properties": {
+ "active": {
+ "type": "boolean",
+ "default": false,
+ "x-go-name": "Active"
+ },
+ "authorization_header": {
+ "type": "string",
+ "x-go-name": "AuthorizationHeader"
+ },
+ "branch_filter": {
+ "type": "string",
+ "x-go-name": "BranchFilter"
+ },
+ "config": {
+ "$ref": "#/definitions/CreateHookOptionConfig"
+ },
+ "events": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "Events"
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "dingtalk",
+ "discord",
+ "gitea",
+ "gogs",
+ "msteams",
+ "slack",
+ "telegram",
+ "feishu",
+ "wechatwork",
+ "packagist"
+ ],
+ "x-go-name": "Type"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreateHookOptionConfig": {
+ "description": "CreateHookOptionConfig has all config options in it\nrequired are \"content_type\" and \"url\" Required",
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreateIssueCommentOption": {
+ "description": "CreateIssueCommentOption options for creating a comment on an issue",
+ "type": "object",
+ "required": [
+ "body"
+ ],
+ "properties": {
+ "body": {
+ "type": "string",
+ "x-go-name": "Body"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreateIssueOption": {
+ "description": "CreateIssueOption options to create one issue",
+ "type": "object",
+ "required": [
+ "title"
+ ],
+ "properties": {
+ "assignee": {
+ "description": "deprecated",
+ "type": "string",
+ "x-go-name": "Assignee"
+ },
+ "assignees": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "Assignees"
+ },
+ "body": {
+ "type": "string",
+ "x-go-name": "Body"
+ },
+ "closed": {
+ "type": "boolean",
+ "x-go-name": "Closed"
+ },
+ "due_date": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Deadline"
+ },
+ "labels": {
+ "description": "list of label ids",
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "x-go-name": "Labels"
+ },
+ "milestone": {
+ "description": "milestone id",
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Milestone"
+ },
+ "ref": {
+ "type": "string",
+ "x-go-name": "Ref"
+ },
+ "title": {
+ "type": "string",
+ "x-go-name": "Title"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreateKeyOption": {
+ "description": "CreateKeyOption options when creating a key",
+ "type": "object",
+ "required": [
+ "title",
+ "key"
+ ],
+ "properties": {
+ "key": {
+ "description": "An armored SSH key to add",
+ "type": "string",
+ "uniqueItems": true,
+ "x-go-name": "Key"
+ },
+ "read_only": {
+ "description": "Describe if the key has only read access or read/write",
+ "type": "boolean",
+ "x-go-name": "ReadOnly"
+ },
+ "title": {
+ "description": "Title of the key to add",
+ "type": "string",
+ "uniqueItems": true,
+ "x-go-name": "Title"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreateLabelOption": {
+ "description": "CreateLabelOption options for creating a label",
+ "type": "object",
+ "required": [
+ "name",
+ "color"
+ ],
+ "properties": {
+ "color": {
+ "type": "string",
+ "x-go-name": "Color",
+ "example": "#00aabb"
+ },
+ "description": {
+ "type": "string",
+ "x-go-name": "Description"
+ },
+ "exclusive": {
+ "type": "boolean",
+ "x-go-name": "Exclusive",
+ "example": false
+ },
+ "is_archived": {
+ "type": "boolean",
+ "x-go-name": "IsArchived",
+ "example": false
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreateMilestoneOption": {
+ "description": "CreateMilestoneOption options for creating a milestone",
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string",
+ "x-go-name": "Description"
+ },
+ "due_on": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Deadline"
+ },
+ "state": {
+ "type": "string",
+ "enum": [
+ "open",
+ "closed"
+ ],
+ "x-go-name": "State"
+ },
+ "title": {
+ "type": "string",
+ "x-go-name": "Title"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreateOAuth2ApplicationOptions": {
+ "description": "CreateOAuth2ApplicationOptions holds options to create an oauth2 application",
+ "type": "object",
+ "properties": {
+ "confidential_client": {
+ "type": "boolean",
+ "x-go-name": "ConfidentialClient"
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "redirect_uris": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "RedirectURIs"
+ },
+ "skip_secondary_authorization": {
+ "type": "boolean",
+ "x-go-name": "SkipSecondaryAuthorization"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreateOrUpdateSecretOption": {
+ "description": "CreateOrUpdateSecretOption options when creating or updating secret",
+ "type": "object",
+ "required": [
+ "data"
+ ],
+ "properties": {
+ "data": {
+ "description": "Data of the secret to update",
+ "type": "string",
+ "x-go-name": "Data"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreateOrgOption": {
+ "description": "CreateOrgOption options for creating an organization",
+ "type": "object",
+ "required": [
+ "username"
+ ],
+ "properties": {
+ "description": {
+ "type": "string",
+ "x-go-name": "Description"
+ },
+ "email": {
+ "type": "string",
+ "x-go-name": "Email"
+ },
+ "full_name": {
+ "type": "string",
+ "x-go-name": "FullName"
+ },
+ "location": {
+ "type": "string",
+ "x-go-name": "Location"
+ },
+ "repo_admin_change_team_access": {
+ "type": "boolean",
+ "x-go-name": "RepoAdminChangeTeamAccess"
+ },
+ "username": {
+ "type": "string",
+ "x-go-name": "UserName"
+ },
+ "visibility": {
+ "description": "possible values are `public` (default), `limited` or `private`",
+ "type": "string",
+ "enum": [
+ "public",
+ "limited",
+ "private"
+ ],
+ "x-go-name": "Visibility"
+ },
+ "website": {
+ "type": "string",
+ "x-go-name": "Website"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreatePullRequestOption": {
+ "description": "CreatePullRequestOption options when creating a pull request",
+ "type": "object",
+ "properties": {
+ "assignee": {
+ "type": "string",
+ "x-go-name": "Assignee"
+ },
+ "assignees": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "Assignees"
+ },
+ "base": {
+ "type": "string",
+ "x-go-name": "Base"
+ },
+ "body": {
+ "type": "string",
+ "x-go-name": "Body"
+ },
+ "due_date": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Deadline"
+ },
+ "head": {
+ "type": "string",
+ "x-go-name": "Head"
+ },
+ "labels": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "x-go-name": "Labels"
+ },
+ "milestone": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Milestone"
+ },
+ "reviewers": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "Reviewers"
+ },
+ "team_reviewers": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "TeamReviewers"
+ },
+ "title": {
+ "type": "string",
+ "x-go-name": "Title"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreatePullReviewComment": {
+ "description": "CreatePullReviewComment represent a review comment for creation api",
+ "type": "object",
+ "properties": {
+ "body": {
+ "type": "string",
+ "x-go-name": "Body"
+ },
+ "new_position": {
+ "description": "if comment to new file line or 0",
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "NewLineNum"
+ },
+ "old_position": {
+ "description": "if comment to old file line or 0",
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "OldLineNum"
+ },
+ "path": {
+ "description": "the tree path",
+ "type": "string",
+ "x-go-name": "Path"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreatePullReviewOptions": {
+ "description": "CreatePullReviewOptions are options to create a pull review",
+ "type": "object",
+ "properties": {
+ "body": {
+ "type": "string",
+ "x-go-name": "Body"
+ },
+ "comments": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/CreatePullReviewComment"
+ },
+ "x-go-name": "Comments"
+ },
+ "commit_id": {
+ "type": "string",
+ "x-go-name": "CommitID"
+ },
+ "event": {
+ "$ref": "#/definitions/ReviewStateType"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreatePushMirrorOption": {
+ "type": "object",
+ "title": "CreatePushMirrorOption represents need information to create a push mirror of a repository.",
+ "properties": {
+ "interval": {
+ "type": "string",
+ "x-go-name": "Interval"
+ },
+ "remote_address": {
+ "type": "string",
+ "x-go-name": "RemoteAddress"
+ },
+ "remote_password": {
+ "type": "string",
+ "x-go-name": "RemotePassword"
+ },
+ "remote_username": {
+ "type": "string",
+ "x-go-name": "RemoteUsername"
+ },
+ "sync_on_commit": {
+ "type": "boolean",
+ "x-go-name": "SyncOnCommit"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreateReleaseOption": {
+ "description": "CreateReleaseOption options when creating a release",
+ "type": "object",
+ "required": [
+ "tag_name"
+ ],
+ "properties": {
+ "body": {
+ "type": "string",
+ "x-go-name": "Note"
+ },
+ "draft": {
+ "type": "boolean",
+ "x-go-name": "IsDraft"
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Title"
+ },
+ "prerelease": {
+ "type": "boolean",
+ "x-go-name": "IsPrerelease"
+ },
+ "tag_name": {
+ "type": "string",
+ "x-go-name": "TagName"
+ },
+ "target_commitish": {
+ "type": "string",
+ "x-go-name": "Target"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreateRepoOption": {
+ "description": "CreateRepoOption options when creating repository",
+ "type": "object",
+ "required": [
+ "name"
+ ],
+ "properties": {
+ "auto_init": {
+ "description": "Whether the repository should be auto-initialized?",
+ "type": "boolean",
+ "x-go-name": "AutoInit"
+ },
+ "default_branch": {
+ "description": "DefaultBranch of the repository (used when initializes and in template)",
+ "type": "string",
+ "x-go-name": "DefaultBranch"
+ },
+ "description": {
+ "description": "Description of the repository to create",
+ "type": "string",
+ "x-go-name": "Description"
+ },
+ "gitignores": {
+ "description": "Gitignores to use",
+ "type": "string",
+ "x-go-name": "Gitignores"
+ },
+ "issue_labels": {
+ "description": "Label-Set to use",
+ "type": "string",
+ "x-go-name": "IssueLabels"
+ },
+ "license": {
+ "description": "License to use",
+ "type": "string",
+ "x-go-name": "License"
+ },
+ "name": {
+ "description": "Name of the repository to create",
+ "type": "string",
+ "uniqueItems": true,
+ "x-go-name": "Name"
+ },
+ "object_format_name": {
+ "description": "ObjectFormatName of the underlying git repository",
+ "type": "string",
+ "enum": [
+ "sha1",
+ "sha256"
+ ],
+ "x-go-name": "ObjectFormatName"
+ },
+ "private": {
+ "description": "Whether the repository is private",
+ "type": "boolean",
+ "x-go-name": "Private"
+ },
+ "readme": {
+ "description": "Readme of the repository to create",
+ "type": "string",
+ "x-go-name": "Readme"
+ },
+ "template": {
+ "description": "Whether the repository is template",
+ "type": "boolean",
+ "x-go-name": "Template"
+ },
+ "trust_model": {
+ "description": "TrustModel of the repository",
+ "type": "string",
+ "enum": [
+ "default",
+ "collaborator",
+ "committer",
+ "collaboratorcommitter"
+ ],
+ "x-go-name": "TrustModel"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreateStatusOption": {
+ "description": "CreateStatusOption holds the information needed to create a new CommitStatus for a Commit",
+ "type": "object",
+ "properties": {
+ "context": {
+ "type": "string",
+ "x-go-name": "Context"
+ },
+ "description": {
+ "type": "string",
+ "x-go-name": "Description"
+ },
+ "state": {
+ "$ref": "#/definitions/CommitStatusState"
+ },
+ "target_url": {
+ "type": "string",
+ "x-go-name": "TargetURL"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreateTagOption": {
+ "description": "CreateTagOption options when creating a tag",
+ "type": "object",
+ "required": [
+ "tag_name"
+ ],
+ "properties": {
+ "message": {
+ "type": "string",
+ "x-go-name": "Message"
+ },
+ "tag_name": {
+ "type": "string",
+ "x-go-name": "TagName"
+ },
+ "target": {
+ "type": "string",
+ "x-go-name": "Target"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreateTagProtectionOption": {
+ "description": "CreateTagProtectionOption options for creating a tag protection",
+ "type": "object",
+ "properties": {
+ "name_pattern": {
+ "type": "string",
+ "x-go-name": "NamePattern"
+ },
+ "whitelist_teams": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "WhitelistTeams"
+ },
+ "whitelist_usernames": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "WhitelistUsernames"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreateTeamOption": {
+ "description": "CreateTeamOption options for creating a team",
+ "type": "object",
+ "required": [
+ "name"
+ ],
+ "properties": {
+ "can_create_org_repo": {
+ "type": "boolean",
+ "x-go-name": "CanCreateOrgRepo"
+ },
+ "description": {
+ "type": "string",
+ "x-go-name": "Description"
+ },
+ "includes_all_repositories": {
+ "type": "boolean",
+ "x-go-name": "IncludesAllRepositories"
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "permission": {
+ "type": "string",
+ "enum": [
+ "read",
+ "write",
+ "admin"
+ ],
+ "x-go-name": "Permission"
+ },
+ "units": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "Units",
+ "example": [
+ "repo.actions",
+ "repo.code",
+ "repo.issues",
+ "repo.ext_issues",
+ "repo.wiki",
+ "repo.ext_wiki",
+ "repo.pulls",
+ "repo.releases",
+ "repo.projects",
+ "repo.ext_wiki"
+ ]
+ },
+ "units_map": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "x-go-name": "UnitsMap",
+ "example": "{\"repo.actions\",\"repo.packages\",\"repo.code\":\"read\",\"repo.issues\":\"write\",\"repo.ext_issues\":\"none\",\"repo.wiki\":\"admin\",\"repo.pulls\":\"owner\",\"repo.releases\":\"none\",\"repo.projects\":\"none\",\"repo.ext_wiki\":\"none\"}"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreateUserOption": {
+ "description": "CreateUserOption create user options",
+ "type": "object",
+ "required": [
+ "username",
+ "email"
+ ],
+ "properties": {
+ "created_at": {
+ "description": "For explicitly setting the user creation timestamp. Useful when users are\nmigrated from other systems. When omitted, the user's creation timestamp\nwill be set to \"now\".",
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Created"
+ },
+ "email": {
+ "type": "string",
+ "format": "email",
+ "x-go-name": "Email"
+ },
+ "full_name": {
+ "type": "string",
+ "x-go-name": "FullName"
+ },
+ "login_name": {
+ "type": "string",
+ "x-go-name": "LoginName"
+ },
+ "must_change_password": {
+ "type": "boolean",
+ "x-go-name": "MustChangePassword"
+ },
+ "password": {
+ "type": "string",
+ "x-go-name": "Password"
+ },
+ "restricted": {
+ "type": "boolean",
+ "x-go-name": "Restricted"
+ },
+ "send_notify": {
+ "type": "boolean",
+ "x-go-name": "SendNotify"
+ },
+ "source_id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "SourceID"
+ },
+ "username": {
+ "type": "string",
+ "x-go-name": "Username"
+ },
+ "visibility": {
+ "type": "string",
+ "x-go-name": "Visibility"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreateVariableOption": {
+ "description": "CreateVariableOption the option when creating variable",
+ "type": "object",
+ "required": [
+ "value"
+ ],
+ "properties": {
+ "value": {
+ "description": "Value of the variable to create",
+ "type": "string",
+ "x-go-name": "Value"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "CreateWikiPageOptions": {
+ "description": "CreateWikiPageOptions form for creating wiki",
+ "type": "object",
+ "properties": {
+ "content_base64": {
+ "description": "content must be base64 encoded",
+ "type": "string",
+ "x-go-name": "ContentBase64"
+ },
+ "message": {
+ "description": "optional commit message summarizing the change",
+ "type": "string",
+ "x-go-name": "Message"
+ },
+ "title": {
+ "description": "page title. leave empty to keep unchanged",
+ "type": "string",
+ "x-go-name": "Title"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "Cron": {
+ "description": "Cron represents a Cron task",
+ "type": "object",
+ "properties": {
+ "exec_times": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ExecTimes"
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "next": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Next"
+ },
+ "prev": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Prev"
+ },
+ "schedule": {
+ "type": "string",
+ "x-go-name": "Schedule"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "DeleteEmailOption": {
+ "description": "DeleteEmailOption options when deleting email addresses",
+ "type": "object",
+ "properties": {
+ "emails": {
+ "description": "email addresses to delete",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "Emails"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "DeleteFileOptions": {
+ "description": "DeleteFileOptions options for deleting files (used for other File structs below)\nNote: `author` and `committer` are optional (if only one is given, it will be used for the other, otherwise the authenticated user will be used)",
+ "type": "object",
+ "required": [
+ "sha"
+ ],
+ "properties": {
+ "author": {
+ "$ref": "#/definitions/Identity"
+ },
+ "branch": {
+ "description": "branch (optional) to base this file from. if not given, the default branch is used",
+ "type": "string",
+ "x-go-name": "BranchName"
+ },
+ "committer": {
+ "$ref": "#/definitions/Identity"
+ },
+ "dates": {
+ "$ref": "#/definitions/CommitDateOptions"
+ },
+ "message": {
+ "description": "message (optional) for the commit of this file. if not supplied, a default message will be used",
+ "type": "string",
+ "x-go-name": "Message"
+ },
+ "new_branch": {
+ "description": "new_branch (optional) will make a new branch from `branch` before creating the file",
+ "type": "string",
+ "x-go-name": "NewBranchName"
+ },
+ "sha": {
+ "description": "sha is the SHA for the file that already exists",
+ "type": "string",
+ "x-go-name": "SHA"
+ },
+ "signoff": {
+ "description": "Add a Signed-off-by trailer by the committer at the end of the commit log message.",
+ "type": "boolean",
+ "x-go-name": "Signoff"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "DeployKey": {
+ "description": "DeployKey a deploy key",
+ "type": "object",
+ "properties": {
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Created"
+ },
+ "fingerprint": {
+ "type": "string",
+ "x-go-name": "Fingerprint"
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "key": {
+ "type": "string",
+ "x-go-name": "Key"
+ },
+ "key_id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "KeyID"
+ },
+ "read_only": {
+ "type": "boolean",
+ "x-go-name": "ReadOnly"
+ },
+ "repository": {
+ "$ref": "#/definitions/Repository"
+ },
+ "title": {
+ "type": "string",
+ "x-go-name": "Title"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "DismissPullReviewOptions": {
+ "description": "DismissPullReviewOptions are options to dismiss a pull review",
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string",
+ "x-go-name": "Message"
+ },
+ "priors": {
+ "type": "boolean",
+ "x-go-name": "Priors"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "EditAttachmentOptions": {
+ "description": "EditAttachmentOptions options for editing attachments",
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "EditBranchProtectionOption": {
+ "description": "EditBranchProtectionOption options for editing a branch protection",
+ "type": "object",
+ "properties": {
+ "approvals_whitelist_teams": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "ApprovalsWhitelistTeams"
+ },
+ "approvals_whitelist_username": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "ApprovalsWhitelistUsernames"
+ },
+ "block_admin_merge_override": {
+ "type": "boolean",
+ "x-go-name": "BlockAdminMergeOverride"
+ },
+ "block_on_official_review_requests": {
+ "type": "boolean",
+ "x-go-name": "BlockOnOfficialReviewRequests"
+ },
+ "block_on_outdated_branch": {
+ "type": "boolean",
+ "x-go-name": "BlockOnOutdatedBranch"
+ },
+ "block_on_rejected_reviews": {
+ "type": "boolean",
+ "x-go-name": "BlockOnRejectedReviews"
+ },
+ "dismiss_stale_approvals": {
+ "type": "boolean",
+ "x-go-name": "DismissStaleApprovals"
+ },
+ "enable_approvals_whitelist": {
+ "type": "boolean",
+ "x-go-name": "EnableApprovalsWhitelist"
+ },
+ "enable_force_push": {
+ "type": "boolean",
+ "x-go-name": "EnableForcePush"
+ },
+ "enable_force_push_allowlist": {
+ "type": "boolean",
+ "x-go-name": "EnableForcePushAllowlist"
+ },
+ "enable_merge_whitelist": {
+ "type": "boolean",
+ "x-go-name": "EnableMergeWhitelist"
+ },
+ "enable_push": {
+ "type": "boolean",
+ "x-go-name": "EnablePush"
+ },
+ "enable_push_whitelist": {
+ "type": "boolean",
+ "x-go-name": "EnablePushWhitelist"
+ },
+ "enable_status_check": {
+ "type": "boolean",
+ "x-go-name": "EnableStatusCheck"
+ },
+ "force_push_allowlist_deploy_keys": {
+ "type": "boolean",
+ "x-go-name": "ForcePushAllowlistDeployKeys"
+ },
+ "force_push_allowlist_teams": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "ForcePushAllowlistTeams"
+ },
+ "force_push_allowlist_usernames": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "ForcePushAllowlistUsernames"
+ },
+ "ignore_stale_approvals": {
+ "type": "boolean",
+ "x-go-name": "IgnoreStaleApprovals"
+ },
+ "merge_whitelist_teams": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "MergeWhitelistTeams"
+ },
+ "merge_whitelist_usernames": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "MergeWhitelistUsernames"
+ },
+ "priority": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Priority"
+ },
+ "protected_file_patterns": {
+ "type": "string",
+ "x-go-name": "ProtectedFilePatterns"
+ },
+ "push_whitelist_deploy_keys": {
+ "type": "boolean",
+ "x-go-name": "PushWhitelistDeployKeys"
+ },
+ "push_whitelist_teams": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "PushWhitelistTeams"
+ },
+ "push_whitelist_usernames": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "PushWhitelistUsernames"
+ },
+ "require_signed_commits": {
+ "type": "boolean",
+ "x-go-name": "RequireSignedCommits"
+ },
+ "required_approvals": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "RequiredApprovals"
+ },
+ "status_check_contexts": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "StatusCheckContexts"
+ },
+ "unprotected_file_patterns": {
+ "type": "string",
+ "x-go-name": "UnprotectedFilePatterns"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "EditDeadlineOption": {
+ "description": "EditDeadlineOption options for creating a deadline",
+ "type": "object",
+ "required": [
+ "due_date"
+ ],
+ "properties": {
+ "due_date": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Deadline"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "EditGitHookOption": {
+ "description": "EditGitHookOption options when modifying one Git hook",
+ "type": "object",
+ "properties": {
+ "content": {
+ "type": "string",
+ "x-go-name": "Content"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "EditHookOption": {
+ "description": "EditHookOption options when modify one hook",
+ "type": "object",
+ "properties": {
+ "active": {
+ "type": "boolean",
+ "x-go-name": "Active"
+ },
+ "authorization_header": {
+ "type": "string",
+ "x-go-name": "AuthorizationHeader"
+ },
+ "branch_filter": {
+ "type": "string",
+ "x-go-name": "BranchFilter"
+ },
+ "config": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "x-go-name": "Config"
+ },
+ "events": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "Events"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "EditIssueCommentOption": {
+ "description": "EditIssueCommentOption options for editing a comment",
+ "type": "object",
+ "required": [
+ "body"
+ ],
+ "properties": {
+ "body": {
+ "type": "string",
+ "x-go-name": "Body"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "EditIssueOption": {
+ "description": "EditIssueOption options for editing an issue",
+ "type": "object",
+ "properties": {
+ "assignee": {
+ "description": "deprecated",
+ "type": "string",
+ "x-go-name": "Assignee"
+ },
+ "assignees": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "Assignees"
+ },
+ "body": {
+ "type": "string",
+ "x-go-name": "Body"
+ },
+ "due_date": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Deadline"
+ },
+ "milestone": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Milestone"
+ },
+ "ref": {
+ "type": "string",
+ "x-go-name": "Ref"
+ },
+ "state": {
+ "type": "string",
+ "x-go-name": "State"
+ },
+ "title": {
+ "type": "string",
+ "x-go-name": "Title"
+ },
+ "unset_due_date": {
+ "type": "boolean",
+ "x-go-name": "RemoveDeadline"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "EditLabelOption": {
+ "description": "EditLabelOption options for editing a label",
+ "type": "object",
+ "properties": {
+ "color": {
+ "type": "string",
+ "x-go-name": "Color",
+ "example": "#00aabb"
+ },
+ "description": {
+ "type": "string",
+ "x-go-name": "Description"
+ },
+ "exclusive": {
+ "type": "boolean",
+ "x-go-name": "Exclusive",
+ "example": false
+ },
+ "is_archived": {
+ "type": "boolean",
+ "x-go-name": "IsArchived",
+ "example": false
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "EditMilestoneOption": {
+ "description": "EditMilestoneOption options for editing a milestone",
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string",
+ "x-go-name": "Description"
+ },
+ "due_on": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Deadline"
+ },
+ "state": {
+ "type": "string",
+ "x-go-name": "State"
+ },
+ "title": {
+ "type": "string",
+ "x-go-name": "Title"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "EditOrgOption": {
+ "description": "EditOrgOption options for editing an organization",
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string",
+ "x-go-name": "Description"
+ },
+ "email": {
+ "type": "string",
+ "x-go-name": "Email"
+ },
+ "full_name": {
+ "type": "string",
+ "x-go-name": "FullName"
+ },
+ "location": {
+ "type": "string",
+ "x-go-name": "Location"
+ },
+ "repo_admin_change_team_access": {
+ "type": "boolean",
+ "x-go-name": "RepoAdminChangeTeamAccess"
+ },
+ "visibility": {
+ "description": "possible values are `public`, `limited` or `private`",
+ "type": "string",
+ "enum": [
+ "public",
+ "limited",
+ "private"
+ ],
+ "x-go-name": "Visibility"
+ },
+ "website": {
+ "type": "string",
+ "x-go-name": "Website"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "EditPullRequestOption": {
+ "description": "EditPullRequestOption options when modify pull request",
+ "type": "object",
+ "properties": {
+ "allow_maintainer_edit": {
+ "type": "boolean",
+ "x-go-name": "AllowMaintainerEdit"
+ },
+ "assignee": {
+ "type": "string",
+ "x-go-name": "Assignee"
+ },
+ "assignees": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "Assignees"
+ },
+ "base": {
+ "type": "string",
+ "x-go-name": "Base"
+ },
+ "body": {
+ "type": "string",
+ "x-go-name": "Body"
+ },
+ "due_date": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Deadline"
+ },
+ "labels": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "x-go-name": "Labels"
+ },
+ "milestone": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Milestone"
+ },
+ "state": {
+ "type": "string",
+ "x-go-name": "State"
+ },
+ "title": {
+ "type": "string",
+ "x-go-name": "Title"
+ },
+ "unset_due_date": {
+ "type": "boolean",
+ "x-go-name": "RemoveDeadline"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "EditReactionOption": {
+ "description": "EditReactionOption contain the reaction type",
+ "type": "object",
+ "properties": {
+ "content": {
+ "type": "string",
+ "x-go-name": "Reaction"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "EditReleaseOption": {
+ "description": "EditReleaseOption options when editing a release",
+ "type": "object",
+ "properties": {
+ "body": {
+ "type": "string",
+ "x-go-name": "Note"
+ },
+ "draft": {
+ "type": "boolean",
+ "x-go-name": "IsDraft"
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Title"
+ },
+ "prerelease": {
+ "type": "boolean",
+ "x-go-name": "IsPrerelease"
+ },
+ "tag_name": {
+ "type": "string",
+ "x-go-name": "TagName"
+ },
+ "target_commitish": {
+ "type": "string",
+ "x-go-name": "Target"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "EditRepoOption": {
+ "description": "EditRepoOption options when editing a repository's properties",
+ "type": "object",
+ "properties": {
+ "allow_fast_forward_only_merge": {
+ "description": "either `true` to allow fast-forward-only merging pull requests, or `false` to prevent fast-forward-only merging.",
+ "type": "boolean",
+ "x-go-name": "AllowFastForwardOnly"
+ },
+ "allow_manual_merge": {
+ "description": "either `true` to allow mark pr as merged manually, or `false` to prevent it.",
+ "type": "boolean",
+ "x-go-name": "AllowManualMerge"
+ },
+ "allow_merge_commits": {
+ "description": "either `true` to allow merging pull requests with a merge commit, or `false` to prevent merging pull requests with merge commits.",
+ "type": "boolean",
+ "x-go-name": "AllowMerge"
+ },
+ "allow_rebase": {
+ "description": "either `true` to allow rebase-merging pull requests, or `false` to prevent rebase-merging.",
+ "type": "boolean",
+ "x-go-name": "AllowRebase"
+ },
+ "allow_rebase_explicit": {
+ "description": "either `true` to allow rebase with explicit merge commits (--no-ff), or `false` to prevent rebase with explicit merge commits.",
+ "type": "boolean",
+ "x-go-name": "AllowRebaseMerge"
+ },
+ "allow_rebase_update": {
+ "description": "either `true` to allow updating pull request branch by rebase, or `false` to prevent it.",
+ "type": "boolean",
+ "x-go-name": "AllowRebaseUpdate"
+ },
+ "allow_squash_merge": {
+ "description": "either `true` to allow squash-merging pull requests, or `false` to prevent squash-merging.",
+ "type": "boolean",
+ "x-go-name": "AllowSquash"
+ },
+ "archived": {
+ "description": "set to `true` to archive this repository.",
+ "type": "boolean",
+ "x-go-name": "Archived"
+ },
+ "autodetect_manual_merge": {
+ "description": "either `true` to enable AutodetectManualMerge, or `false` to prevent it. Note: In some special cases, misjudgments can occur.",
+ "type": "boolean",
+ "x-go-name": "AutodetectManualMerge"
+ },
+ "default_allow_maintainer_edit": {
+ "description": "set to `true` to allow edits from maintainers by default",
+ "type": "boolean",
+ "x-go-name": "DefaultAllowMaintainerEdit"
+ },
+ "default_branch": {
+ "description": "sets the default branch for this repository.",
+ "type": "string",
+ "x-go-name": "DefaultBranch"
+ },
+ "default_delete_branch_after_merge": {
+ "description": "set to `true` to delete pr branch after merge by default",
+ "type": "boolean",
+ "x-go-name": "DefaultDeleteBranchAfterMerge"
+ },
+ "default_merge_style": {
+ "description": "set to a merge style to be used by this repository: \"merge\", \"rebase\", \"rebase-merge\", \"squash\", or \"fast-forward-only\".",
+ "type": "string",
+ "x-go-name": "DefaultMergeStyle"
+ },
+ "description": {
+ "description": "a short description of the repository.",
+ "type": "string",
+ "x-go-name": "Description"
+ },
+ "enable_prune": {
+ "description": "enable prune - remove obsolete remote-tracking references when mirroring",
+ "type": "boolean",
+ "x-go-name": "EnablePrune"
+ },
+ "external_tracker": {
+ "$ref": "#/definitions/ExternalTracker"
+ },
+ "external_wiki": {
+ "$ref": "#/definitions/ExternalWiki"
+ },
+ "has_actions": {
+ "description": "either `true` to enable actions unit, or `false` to disable them.",
+ "type": "boolean",
+ "x-go-name": "HasActions"
+ },
+ "has_issues": {
+ "description": "either `true` to enable issues for this repository or `false` to disable them.",
+ "type": "boolean",
+ "x-go-name": "HasIssues"
+ },
+ "has_packages": {
+ "description": "either `true` to enable packages unit, or `false` to disable them.",
+ "type": "boolean",
+ "x-go-name": "HasPackages"
+ },
+ "has_projects": {
+ "description": "either `true` to enable project unit, or `false` to disable them.",
+ "type": "boolean",
+ "x-go-name": "HasProjects"
+ },
+ "has_pull_requests": {
+ "description": "either `true` to allow pull requests, or `false` to prevent pull request.",
+ "type": "boolean",
+ "x-go-name": "HasPullRequests"
+ },
+ "has_releases": {
+ "description": "either `true` to enable releases unit, or `false` to disable them.",
+ "type": "boolean",
+ "x-go-name": "HasReleases"
+ },
+ "has_wiki": {
+ "description": "either `true` to enable the wiki for this repository or `false` to disable it.",
+ "type": "boolean",
+ "x-go-name": "HasWiki"
+ },
+ "ignore_whitespace_conflicts": {
+ "description": "either `true` to ignore whitespace for conflicts, or `false` to not ignore whitespace.",
+ "type": "boolean",
+ "x-go-name": "IgnoreWhitespaceConflicts"
+ },
+ "internal_tracker": {
+ "$ref": "#/definitions/InternalTracker"
+ },
+ "mirror_interval": {
+ "description": "set to a string like `8h30m0s` to set the mirror interval time",
+ "type": "string",
+ "x-go-name": "MirrorInterval"
+ },
+ "name": {
+ "description": "name of the repository",
+ "type": "string",
+ "uniqueItems": true,
+ "x-go-name": "Name"
+ },
+ "private": {
+ "description": "either `true` to make the repository private or `false` to make it public.\nNote: you will get a 422 error if the organization restricts changing repository visibility to organization\nowners and a non-owner tries to change the value of private.",
+ "type": "boolean",
+ "x-go-name": "Private"
+ },
+ "projects_mode": {
+ "description": "`repo` to only allow repo-level projects, `owner` to only allow owner projects, `all` to allow both.",
+ "type": "string",
+ "x-go-name": "ProjectsMode"
+ },
+ "template": {
+ "description": "either `true` to make this repository a template or `false` to make it a normal repository",
+ "type": "boolean",
+ "x-go-name": "Template"
+ },
+ "website": {
+ "description": "a URL with more information about the repository.",
+ "type": "string",
+ "x-go-name": "Website"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "EditTagProtectionOption": {
+ "description": "EditTagProtectionOption options for editing a tag protection",
+ "type": "object",
+ "properties": {
+ "name_pattern": {
+ "type": "string",
+ "x-go-name": "NamePattern"
+ },
+ "whitelist_teams": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "WhitelistTeams"
+ },
+ "whitelist_usernames": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "WhitelistUsernames"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "EditTeamOption": {
+ "description": "EditTeamOption options for editing a team",
+ "type": "object",
+ "required": [
+ "name"
+ ],
+ "properties": {
+ "can_create_org_repo": {
+ "type": "boolean",
+ "x-go-name": "CanCreateOrgRepo"
+ },
+ "description": {
+ "type": "string",
+ "x-go-name": "Description"
+ },
+ "includes_all_repositories": {
+ "type": "boolean",
+ "x-go-name": "IncludesAllRepositories"
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "permission": {
+ "type": "string",
+ "enum": [
+ "read",
+ "write",
+ "admin"
+ ],
+ "x-go-name": "Permission"
+ },
+ "units": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "Units",
+ "example": [
+ "repo.code",
+ "repo.issues",
+ "repo.ext_issues",
+ "repo.wiki",
+ "repo.pulls",
+ "repo.releases",
+ "repo.projects",
+ "repo.ext_wiki"
+ ]
+ },
+ "units_map": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "x-go-name": "UnitsMap",
+ "example": {
+ "repo.code": "read",
+ "repo.ext_issues": "none",
+ "repo.ext_wiki": "none",
+ "repo.issues": "write",
+ "repo.projects": "none",
+ "repo.pulls": "owner",
+ "repo.releases": "none",
+ "repo.wiki": "admin"
+ }
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "EditUserOption": {
+ "description": "EditUserOption edit user options",
+ "type": "object",
+ "required": [
+ "source_id",
+ "login_name"
+ ],
+ "properties": {
+ "active": {
+ "type": "boolean",
+ "x-go-name": "Active"
+ },
+ "admin": {
+ "type": "boolean",
+ "x-go-name": "Admin"
+ },
+ "allow_create_organization": {
+ "type": "boolean",
+ "x-go-name": "AllowCreateOrganization"
+ },
+ "allow_git_hook": {
+ "type": "boolean",
+ "x-go-name": "AllowGitHook"
+ },
+ "allow_import_local": {
+ "type": "boolean",
+ "x-go-name": "AllowImportLocal"
+ },
+ "description": {
+ "type": "string",
+ "x-go-name": "Description"
+ },
+ "email": {
+ "type": "string",
+ "format": "email",
+ "x-go-name": "Email"
+ },
+ "full_name": {
+ "type": "string",
+ "x-go-name": "FullName"
+ },
+ "location": {
+ "type": "string",
+ "x-go-name": "Location"
+ },
+ "login_name": {
+ "type": "string",
+ "x-go-name": "LoginName"
+ },
+ "max_repo_creation": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "MaxRepoCreation"
+ },
+ "must_change_password": {
+ "type": "boolean",
+ "x-go-name": "MustChangePassword"
+ },
+ "password": {
+ "type": "string",
+ "x-go-name": "Password"
+ },
+ "prohibit_login": {
+ "type": "boolean",
+ "x-go-name": "ProhibitLogin"
+ },
+ "restricted": {
+ "type": "boolean",
+ "x-go-name": "Restricted"
+ },
+ "source_id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "SourceID"
+ },
+ "visibility": {
+ "type": "string",
+ "x-go-name": "Visibility"
+ },
+ "website": {
+ "type": "string",
+ "x-go-name": "Website"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "Email": {
+ "description": "Email an email address belonging to a user",
+ "type": "object",
+ "properties": {
+ "email": {
+ "type": "string",
+ "format": "email",
+ "x-go-name": "Email"
+ },
+ "primary": {
+ "type": "boolean",
+ "x-go-name": "Primary"
+ },
+ "user_id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "UserID"
+ },
+ "username": {
+ "type": "string",
+ "x-go-name": "UserName"
+ },
+ "verified": {
+ "type": "boolean",
+ "x-go-name": "Verified"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "ExternalTracker": {
+ "description": "ExternalTracker represents settings for external tracker",
+ "type": "object",
+ "properties": {
+ "external_tracker_format": {
+ "description": "External Issue Tracker URL Format. Use the placeholders {user}, {repo} and {index} for the username, repository name and issue index.",
+ "type": "string",
+ "x-go-name": "ExternalTrackerFormat"
+ },
+ "external_tracker_regexp_pattern": {
+ "description": "External Issue Tracker issue regular expression",
+ "type": "string",
+ "x-go-name": "ExternalTrackerRegexpPattern"
+ },
+ "external_tracker_style": {
+ "description": "External Issue Tracker Number Format, either `numeric`, `alphanumeric`, or `regexp`",
+ "type": "string",
+ "x-go-name": "ExternalTrackerStyle"
+ },
+ "external_tracker_url": {
+ "description": "URL of external issue tracker.",
+ "type": "string",
+ "x-go-name": "ExternalTrackerURL"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "ExternalWiki": {
+ "description": "ExternalWiki represents setting for external wiki",
+ "type": "object",
+ "properties": {
+ "external_wiki_url": {
+ "description": "URL of external wiki.",
+ "type": "string",
+ "x-go-name": "ExternalWikiURL"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "FileCommitResponse": {
+ "type": "object",
+ "title": "FileCommitResponse contains information generated from a Git commit for a repo's file.",
+ "properties": {
+ "author": {
+ "$ref": "#/definitions/CommitUser"
+ },
+ "committer": {
+ "$ref": "#/definitions/CommitUser"
+ },
+ "created": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Created"
+ },
+ "html_url": {
+ "type": "string",
+ "x-go-name": "HTMLURL"
+ },
+ "message": {
+ "type": "string",
+ "x-go-name": "Message"
+ },
+ "parents": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/CommitMeta"
+ },
+ "x-go-name": "Parents"
+ },
+ "sha": {
+ "type": "string",
+ "x-go-name": "SHA"
+ },
+ "tree": {
+ "$ref": "#/definitions/CommitMeta"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "FileDeleteResponse": {
+ "description": "FileDeleteResponse contains information about a repo's file that was deleted",
+ "type": "object",
+ "properties": {
+ "commit": {
+ "$ref": "#/definitions/FileCommitResponse"
+ },
+ "content": {
+ "x-go-name": "Content"
+ },
+ "verification": {
+ "$ref": "#/definitions/PayloadCommitVerification"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "FileLinksResponse": {
+ "description": "FileLinksResponse contains the links for a repo's file",
+ "type": "object",
+ "properties": {
+ "git": {
+ "type": "string",
+ "x-go-name": "GitURL"
+ },
+ "html": {
+ "type": "string",
+ "x-go-name": "HTMLURL"
+ },
+ "self": {
+ "type": "string",
+ "x-go-name": "Self"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "FileResponse": {
+ "description": "FileResponse contains information about a repo's file",
+ "type": "object",
+ "properties": {
+ "commit": {
+ "$ref": "#/definitions/FileCommitResponse"
+ },
+ "content": {
+ "$ref": "#/definitions/ContentsResponse"
+ },
+ "verification": {
+ "$ref": "#/definitions/PayloadCommitVerification"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "FilesResponse": {
+ "description": "FilesResponse contains information about multiple files from a repo",
+ "type": "object",
+ "properties": {
+ "commit": {
+ "$ref": "#/definitions/FileCommitResponse"
+ },
+ "files": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ContentsResponse"
+ },
+ "x-go-name": "Files"
+ },
+ "verification": {
+ "$ref": "#/definitions/PayloadCommitVerification"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "GPGKey": {
+ "description": "GPGKey a user GPG key to sign commit and tag in repository",
+ "type": "object",
+ "properties": {
+ "can_certify": {
+ "type": "boolean",
+ "x-go-name": "CanCertify"
+ },
+ "can_encrypt_comms": {
+ "type": "boolean",
+ "x-go-name": "CanEncryptComms"
+ },
+ "can_encrypt_storage": {
+ "type": "boolean",
+ "x-go-name": "CanEncryptStorage"
+ },
+ "can_sign": {
+ "type": "boolean",
+ "x-go-name": "CanSign"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Created"
+ },
+ "emails": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/GPGKeyEmail"
+ },
+ "x-go-name": "Emails"
+ },
+ "expires_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Expires"
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "key_id": {
+ "type": "string",
+ "x-go-name": "KeyID"
+ },
+ "primary_key_id": {
+ "type": "string",
+ "x-go-name": "PrimaryKeyID"
+ },
+ "public_key": {
+ "type": "string",
+ "x-go-name": "PublicKey"
+ },
+ "subkeys": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/GPGKey"
+ },
+ "x-go-name": "SubsKey"
+ },
+ "verified": {
+ "type": "boolean",
+ "x-go-name": "Verified"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "GPGKeyEmail": {
+ "description": "GPGKeyEmail an email attached to a GPGKey",
+ "type": "object",
+ "properties": {
+ "email": {
+ "type": "string",
+ "x-go-name": "Email"
+ },
+ "verified": {
+ "type": "boolean",
+ "x-go-name": "Verified"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "GeneralAPISettings": {
+ "description": "GeneralAPISettings contains global api settings exposed by it",
+ "type": "object",
+ "properties": {
+ "default_git_trees_per_page": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "DefaultGitTreesPerPage"
+ },
+ "default_max_blob_size": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "DefaultMaxBlobSize"
+ },
+ "default_paging_num": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "DefaultPagingNum"
+ },
+ "max_response_items": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "MaxResponseItems"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "GeneralAttachmentSettings": {
+ "description": "GeneralAttachmentSettings contains global Attachment settings exposed by API",
+ "type": "object",
+ "properties": {
+ "allowed_types": {
+ "type": "string",
+ "x-go-name": "AllowedTypes"
+ },
+ "enabled": {
+ "type": "boolean",
+ "x-go-name": "Enabled"
+ },
+ "max_files": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "MaxFiles"
+ },
+ "max_size": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "MaxSize"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "GeneralRepoSettings": {
+ "description": "GeneralRepoSettings contains global repository settings exposed by API",
+ "type": "object",
+ "properties": {
+ "http_git_disabled": {
+ "type": "boolean",
+ "x-go-name": "HTTPGitDisabled"
+ },
+ "lfs_disabled": {
+ "type": "boolean",
+ "x-go-name": "LFSDisabled"
+ },
+ "migrations_disabled": {
+ "type": "boolean",
+ "x-go-name": "MigrationsDisabled"
+ },
+ "mirrors_disabled": {
+ "type": "boolean",
+ "x-go-name": "MirrorsDisabled"
+ },
+ "stars_disabled": {
+ "type": "boolean",
+ "x-go-name": "StarsDisabled"
+ },
+ "time_tracking_disabled": {
+ "type": "boolean",
+ "x-go-name": "TimeTrackingDisabled"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "GeneralUISettings": {
+ "description": "GeneralUISettings contains global ui settings exposed by API",
+ "type": "object",
+ "properties": {
+ "allowed_reactions": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "AllowedReactions"
+ },
+ "custom_emojis": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "CustomEmojis"
+ },
+ "default_theme": {
+ "type": "string",
+ "x-go-name": "DefaultTheme"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "GenerateRepoOption": {
+ "description": "GenerateRepoOption options when creating repository using a template",
+ "type": "object",
+ "required": [
+ "owner",
+ "name"
+ ],
+ "properties": {
+ "avatar": {
+ "description": "include avatar of the template repo",
+ "type": "boolean",
+ "x-go-name": "Avatar"
+ },
+ "default_branch": {
+ "description": "Default branch of the new repository",
+ "type": "string",
+ "x-go-name": "DefaultBranch"
+ },
+ "description": {
+ "description": "Description of the repository to create",
+ "type": "string",
+ "x-go-name": "Description"
+ },
+ "git_content": {
+ "description": "include git content of default branch in template repo",
+ "type": "boolean",
+ "x-go-name": "GitContent"
+ },
+ "git_hooks": {
+ "description": "include git hooks in template repo",
+ "type": "boolean",
+ "x-go-name": "GitHooks"
+ },
+ "labels": {
+ "description": "include labels in template repo",
+ "type": "boolean",
+ "x-go-name": "Labels"
+ },
+ "name": {
+ "description": "Name of the repository to create",
+ "type": "string",
+ "uniqueItems": true,
+ "x-go-name": "Name"
+ },
+ "owner": {
+ "description": "The organization or person who will own the new repository",
+ "type": "string",
+ "x-go-name": "Owner"
+ },
+ "private": {
+ "description": "Whether the repository is private",
+ "type": "boolean",
+ "x-go-name": "Private"
+ },
+ "protected_branch": {
+ "description": "include protected branches in template repo",
+ "type": "boolean",
+ "x-go-name": "ProtectedBranch"
+ },
+ "topics": {
+ "description": "include topics in template repo",
+ "type": "boolean",
+ "x-go-name": "Topics"
+ },
+ "webhooks": {
+ "description": "include webhooks in template repo",
+ "type": "boolean",
+ "x-go-name": "Webhooks"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "GitBlobResponse": {
+ "description": "GitBlobResponse represents a git blob",
+ "type": "object",
+ "properties": {
+ "content": {
+ "type": "string",
+ "x-go-name": "Content"
+ },
+ "encoding": {
+ "type": "string",
+ "x-go-name": "Encoding"
+ },
+ "sha": {
+ "type": "string",
+ "x-go-name": "SHA"
+ },
+ "size": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Size"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "GitEntry": {
+ "description": "GitEntry represents a git tree",
+ "type": "object",
+ "properties": {
+ "mode": {
+ "type": "string",
+ "x-go-name": "Mode"
+ },
+ "path": {
+ "type": "string",
+ "x-go-name": "Path"
+ },
+ "sha": {
+ "type": "string",
+ "x-go-name": "SHA"
+ },
+ "size": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Size"
+ },
+ "type": {
+ "type": "string",
+ "x-go-name": "Type"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "GitHook": {
+ "description": "GitHook represents a Git repository hook",
+ "type": "object",
+ "properties": {
+ "content": {
+ "type": "string",
+ "x-go-name": "Content"
+ },
+ "is_active": {
+ "type": "boolean",
+ "x-go-name": "IsActive"
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "GitObject": {
+ "type": "object",
+ "title": "GitObject represents a Git object.",
+ "properties": {
+ "sha": {
+ "type": "string",
+ "x-go-name": "SHA"
+ },
+ "type": {
+ "type": "string",
+ "x-go-name": "Type"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "GitTreeResponse": {
+ "description": "GitTreeResponse returns a git tree",
+ "type": "object",
+ "properties": {
+ "page": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Page"
+ },
+ "sha": {
+ "type": "string",
+ "x-go-name": "SHA"
+ },
+ "total_count": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "TotalCount"
+ },
+ "tree": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/GitEntry"
+ },
+ "x-go-name": "Entries"
+ },
+ "truncated": {
+ "type": "boolean",
+ "x-go-name": "Truncated"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "GitignoreTemplateInfo": {
+ "description": "GitignoreTemplateInfo name and text of a gitignore template",
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "source": {
+ "type": "string",
+ "x-go-name": "Source"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "Hook": {
+ "description": "Hook a hook is a web hook when one repository changed",
+ "type": "object",
+ "properties": {
+ "active": {
+ "type": "boolean",
+ "x-go-name": "Active"
+ },
+ "authorization_header": {
+ "type": "string",
+ "x-go-name": "AuthorizationHeader"
+ },
+ "branch_filter": {
+ "type": "string",
+ "x-go-name": "BranchFilter"
+ },
+ "config": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "x-go-name": "Config"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Created"
+ },
+ "events": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "Events"
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "type": {
+ "type": "string",
+ "x-go-name": "Type"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Updated"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "Identity": {
+ "description": "Identity for a person's identity like an author or committer",
+ "type": "object",
+ "properties": {
+ "email": {
+ "type": "string",
+ "format": "email",
+ "x-go-name": "Email"
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "InternalTracker": {
+ "description": "InternalTracker represents settings for internal tracker",
+ "type": "object",
+ "properties": {
+ "allow_only_contributors_to_track_time": {
+ "description": "Let only contributors track time (Built-in issue tracker)",
+ "type": "boolean",
+ "x-go-name": "AllowOnlyContributorsToTrackTime"
+ },
+ "enable_issue_dependencies": {
+ "description": "Enable dependencies for issues and pull requests (Built-in issue tracker)",
+ "type": "boolean",
+ "x-go-name": "EnableIssueDependencies"
+ },
+ "enable_time_tracker": {
+ "description": "Enable time tracking (Built-in issue tracker)",
+ "type": "boolean",
+ "x-go-name": "EnableTimeTracker"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "Issue": {
+ "description": "Issue represents an issue in a repository",
+ "type": "object",
+ "properties": {
+ "assets": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Attachment"
+ },
+ "x-go-name": "Attachments"
+ },
+ "assignee": {
+ "$ref": "#/definitions/User"
+ },
+ "assignees": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/User"
+ },
+ "x-go-name": "Assignees"
+ },
+ "body": {
+ "type": "string",
+ "x-go-name": "Body"
+ },
+ "closed_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Closed"
+ },
+ "comments": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Comments"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Created"
+ },
+ "due_date": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Deadline"
+ },
+ "html_url": {
+ "type": "string",
+ "x-go-name": "HTMLURL"
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "is_locked": {
+ "type": "boolean",
+ "x-go-name": "IsLocked"
+ },
+ "labels": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Label"
+ },
+ "x-go-name": "Labels"
+ },
+ "milestone": {
+ "$ref": "#/definitions/Milestone"
+ },
+ "number": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Index"
+ },
+ "original_author": {
+ "type": "string",
+ "x-go-name": "OriginalAuthor"
+ },
+ "original_author_id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "OriginalAuthorID"
+ },
+ "pin_order": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "PinOrder"
+ },
+ "pull_request": {
+ "$ref": "#/definitions/PullRequestMeta"
+ },
+ "ref": {
+ "type": "string",
+ "x-go-name": "Ref"
+ },
+ "repository": {
+ "$ref": "#/definitions/RepositoryMeta"
+ },
+ "state": {
+ "$ref": "#/definitions/StateType"
+ },
+ "title": {
+ "type": "string",
+ "x-go-name": "Title"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Updated"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ },
+ "user": {
+ "$ref": "#/definitions/User"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "IssueConfig": {
+ "type": "object",
+ "properties": {
+ "blank_issues_enabled": {
+ "type": "boolean",
+ "x-go-name": "BlankIssuesEnabled"
+ },
+ "contact_links": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/IssueConfigContactLink"
+ },
+ "x-go-name": "ContactLinks"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "IssueConfigContactLink": {
+ "type": "object",
+ "properties": {
+ "about": {
+ "type": "string",
+ "x-go-name": "About"
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "IssueConfigValidation": {
+ "type": "object",
+ "properties": {
+ "message": {
+ "type": "string",
+ "x-go-name": "Message"
+ },
+ "valid": {
+ "type": "boolean",
+ "x-go-name": "Valid"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "IssueDeadline": {
+ "description": "IssueDeadline represents an issue deadline",
+ "type": "object",
+ "properties": {
+ "due_date": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Deadline"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "IssueFormField": {
+ "description": "IssueFormField represents a form field",
+ "type": "object",
+ "properties": {
+ "attributes": {
+ "type": "object",
+ "additionalProperties": {},
+ "x-go-name": "Attributes"
+ },
+ "id": {
+ "type": "string",
+ "x-go-name": "ID"
+ },
+ "type": {
+ "$ref": "#/definitions/IssueFormFieldType"
+ },
+ "validations": {
+ "type": "object",
+ "additionalProperties": {},
+ "x-go-name": "Validations"
+ },
+ "visible": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/IssueFormFieldVisible"
+ },
+ "x-go-name": "Visible"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "IssueFormFieldType": {
+ "type": "string",
+ "title": "IssueFormFieldType defines issue form field type, can be \"markdown\", \"textarea\", \"input\", \"dropdown\" or \"checkboxes\"",
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "IssueFormFieldVisible": {
+ "description": "IssueFormFieldVisible defines issue form field visible",
+ "type": "string",
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "IssueLabelsOption": {
+ "description": "IssueLabelsOption a collection of labels",
+ "type": "object",
+ "properties": {
+ "labels": {
+ "description": "Labels can be a list of integers representing label IDs\nor a list of strings representing label names",
+ "type": "array",
+ "items": {},
+ "x-go-name": "Labels"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "IssueMeta": {
+ "description": "IssueMeta basic issue information",
+ "type": "object",
+ "properties": {
+ "index": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Index"
+ },
+ "owner": {
+ "type": "string",
+ "x-go-name": "Owner"
+ },
+ "repo": {
+ "type": "string",
+ "x-go-name": "Name"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "IssueTemplate": {
+ "description": "IssueTemplate represents an issue template for a repository",
+ "type": "object",
+ "properties": {
+ "about": {
+ "type": "string",
+ "x-go-name": "About"
+ },
+ "assignees": {
+ "$ref": "#/definitions/IssueTemplateStringSlice"
+ },
+ "body": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/IssueFormField"
+ },
+ "x-go-name": "Fields"
+ },
+ "content": {
+ "type": "string",
+ "x-go-name": "Content"
+ },
+ "file_name": {
+ "type": "string",
+ "x-go-name": "FileName"
+ },
+ "labels": {
+ "$ref": "#/definitions/IssueTemplateStringSlice"
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "ref": {
+ "type": "string",
+ "x-go-name": "Ref"
+ },
+ "title": {
+ "type": "string",
+ "x-go-name": "Title"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "IssueTemplateStringSlice": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "Label": {
+ "description": "Label a label to an issue or a pr",
+ "type": "object",
+ "properties": {
+ "color": {
+ "type": "string",
+ "x-go-name": "Color",
+ "example": "00aabb"
+ },
+ "description": {
+ "type": "string",
+ "x-go-name": "Description"
+ },
+ "exclusive": {
+ "type": "boolean",
+ "x-go-name": "Exclusive",
+ "example": false
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "is_archived": {
+ "type": "boolean",
+ "x-go-name": "IsArchived",
+ "example": false
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "LabelTemplate": {
+ "description": "LabelTemplate info of a Label template",
+ "type": "object",
+ "properties": {
+ "color": {
+ "type": "string",
+ "x-go-name": "Color",
+ "example": "00aabb"
+ },
+ "description": {
+ "type": "string",
+ "x-go-name": "Description"
+ },
+ "exclusive": {
+ "type": "boolean",
+ "x-go-name": "Exclusive",
+ "example": false
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "LicenseTemplateInfo": {
+ "description": "LicensesInfo contains information about a License",
+ "type": "object",
+ "properties": {
+ "body": {
+ "type": "string",
+ "x-go-name": "Body"
+ },
+ "implementation": {
+ "type": "string",
+ "x-go-name": "Implementation"
+ },
+ "key": {
+ "type": "string",
+ "x-go-name": "Key"
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "LicensesTemplateListEntry": {
+ "description": "LicensesListEntry is used for the API",
+ "type": "object",
+ "properties": {
+ "key": {
+ "type": "string",
+ "x-go-name": "Key"
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "MarkdownOption": {
+ "description": "MarkdownOption markdown options",
+ "type": "object",
+ "properties": {
+ "Context": {
+ "description": "URL path for rendering issue, media and file links\nExpected format: /subpath/{user}/{repo}/src/{branch, commit, tag}/{identifier/path}/{file/dir}\n\nin: body",
+ "type": "string"
+ },
+ "Mode": {
+ "description": "Mode to render (markdown, comment, wiki, file)\n\nin: body",
+ "type": "string"
+ },
+ "Text": {
+ "description": "Text markdown to render\n\nin: body",
+ "type": "string"
+ },
+ "Wiki": {
+ "description": "Is it a wiki page? (use mode=wiki instead)\n\nDeprecated: true\nin: body",
+ "type": "boolean"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "MarkupOption": {
+ "description": "MarkupOption markup options",
+ "type": "object",
+ "properties": {
+ "Context": {
+ "description": "URL path for rendering issue, media and file links\nExpected format: /subpath/{user}/{repo}/src/{branch, commit, tag}/{identifier/path}/{file/dir}\n\nin: body",
+ "type": "string"
+ },
+ "FilePath": {
+ "description": "File path for detecting extension in file mode\n\nin: body",
+ "type": "string"
+ },
+ "Mode": {
+ "description": "Mode to render (markdown, comment, wiki, file)\n\nin: body",
+ "type": "string"
+ },
+ "Text": {
+ "description": "Text markup to render\n\nin: body",
+ "type": "string"
+ },
+ "Wiki": {
+ "description": "Is it a wiki page? (use mode=wiki instead)\n\nDeprecated: true\nin: body",
+ "type": "boolean"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "MergePullRequestOption": {
+ "description": "MergePullRequestForm form for merging Pull Request",
+ "type": "object",
+ "required": [
+ "Do"
+ ],
+ "properties": {
+ "Do": {
+ "type": "string",
+ "enum": [
+ "merge",
+ "rebase",
+ "rebase-merge",
+ "squash",
+ "fast-forward-only",
+ "manually-merged"
+ ]
+ },
+ "MergeCommitID": {
+ "type": "string"
+ },
+ "MergeMessageField": {
+ "type": "string"
+ },
+ "MergeTitleField": {
+ "type": "string"
+ },
+ "delete_branch_after_merge": {
+ "type": "boolean",
+ "x-go-name": "DeleteBranchAfterMerge"
+ },
+ "force_merge": {
+ "type": "boolean",
+ "x-go-name": "ForceMerge"
+ },
+ "head_commit_id": {
+ "type": "string",
+ "x-go-name": "HeadCommitID"
+ },
+ "merge_when_checks_succeed": {
+ "type": "boolean",
+ "x-go-name": "MergeWhenChecksSucceed"
+ }
+ },
+ "x-go-name": "MergePullRequestForm",
+ "x-go-package": "code.gitea.io/gitea/services/forms"
+ },
+ "MergeUpstreamRequest": {
+ "type": "object",
+ "properties": {
+ "branch": {
+ "type": "string",
+ "x-go-name": "Branch"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "MergeUpstreamResponse": {
+ "type": "object",
+ "properties": {
+ "merge_type": {
+ "type": "string",
+ "x-go-name": "MergeStyle"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "MigrateRepoOptions": {
+ "description": "MigrateRepoOptions options for migrating repository's\nthis is used to interact with api v1",
+ "type": "object",
+ "required": [
+ "clone_addr",
+ "repo_name"
+ ],
+ "properties": {
+ "auth_password": {
+ "type": "string",
+ "x-go-name": "AuthPassword"
+ },
+ "auth_token": {
+ "type": "string",
+ "x-go-name": "AuthToken"
+ },
+ "auth_username": {
+ "type": "string",
+ "x-go-name": "AuthUsername"
+ },
+ "aws_access_key_id": {
+ "type": "string",
+ "x-go-name": "AWSAccessKeyID"
+ },
+ "aws_secret_access_key": {
+ "type": "string",
+ "x-go-name": "AWSSecretAccessKey"
+ },
+ "clone_addr": {
+ "type": "string",
+ "x-go-name": "CloneAddr"
+ },
+ "description": {
+ "type": "string",
+ "x-go-name": "Description"
+ },
+ "issues": {
+ "type": "boolean",
+ "x-go-name": "Issues"
+ },
+ "labels": {
+ "type": "boolean",
+ "x-go-name": "Labels"
+ },
+ "lfs": {
+ "type": "boolean",
+ "x-go-name": "LFS"
+ },
+ "lfs_endpoint": {
+ "type": "string",
+ "x-go-name": "LFSEndpoint"
+ },
+ "milestones": {
+ "type": "boolean",
+ "x-go-name": "Milestones"
+ },
+ "mirror": {
+ "type": "boolean",
+ "x-go-name": "Mirror"
+ },
+ "mirror_interval": {
+ "type": "string",
+ "x-go-name": "MirrorInterval"
+ },
+ "private": {
+ "type": "boolean",
+ "x-go-name": "Private"
+ },
+ "pull_requests": {
+ "type": "boolean",
+ "x-go-name": "PullRequests"
+ },
+ "releases": {
+ "type": "boolean",
+ "x-go-name": "Releases"
+ },
+ "repo_name": {
+ "type": "string",
+ "x-go-name": "RepoName"
+ },
+ "repo_owner": {
+ "description": "Name of User or Organisation who will own Repo after migration",
+ "type": "string",
+ "x-go-name": "RepoOwner"
+ },
+ "service": {
+ "type": "string",
+ "enum": [
+ "git",
+ "github",
+ "gitea",
+ "gitlab",
+ "gogs",
+ "onedev",
+ "gitbucket",
+ "codebase"
+ ],
+ "x-go-name": "Service"
+ },
+ "uid": {
+ "description": "deprecated (only for backwards compatibility)",
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "RepoOwnerID"
+ },
+ "wiki": {
+ "type": "boolean",
+ "x-go-name": "Wiki"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "Milestone": {
+ "description": "Milestone milestone is a collection of issues on one repository",
+ "type": "object",
+ "properties": {
+ "closed_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Closed"
+ },
+ "closed_issues": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ClosedIssues"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Created"
+ },
+ "description": {
+ "type": "string",
+ "x-go-name": "Description"
+ },
+ "due_on": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Deadline"
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "open_issues": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "OpenIssues"
+ },
+ "state": {
+ "$ref": "#/definitions/StateType"
+ },
+ "title": {
+ "type": "string",
+ "x-go-name": "Title"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Updated"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "NewIssuePinsAllowed": {
+ "description": "NewIssuePinsAllowed represents an API response that says if new Issue Pins are allowed",
+ "type": "object",
+ "properties": {
+ "issues": {
+ "type": "boolean",
+ "x-go-name": "Issues"
+ },
+ "pull_requests": {
+ "type": "boolean",
+ "x-go-name": "PullRequests"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "NodeInfo": {
+ "description": "NodeInfo contains standardized way of exposing metadata about a server running one of the distributed social networks",
+ "type": "object",
+ "properties": {
+ "metadata": {
+ "type": "object",
+ "x-go-name": "Metadata"
+ },
+ "openRegistrations": {
+ "type": "boolean",
+ "x-go-name": "OpenRegistrations"
+ },
+ "protocols": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "Protocols"
+ },
+ "services": {
+ "$ref": "#/definitions/NodeInfoServices"
+ },
+ "software": {
+ "$ref": "#/definitions/NodeInfoSoftware"
+ },
+ "usage": {
+ "$ref": "#/definitions/NodeInfoUsage"
+ },
+ "version": {
+ "type": "string",
+ "x-go-name": "Version"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "NodeInfoServices": {
+ "description": "NodeInfoServices contains the third party sites this server can connect to via their application API",
+ "type": "object",
+ "properties": {
+ "inbound": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "Inbound"
+ },
+ "outbound": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "Outbound"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "NodeInfoSoftware": {
+ "description": "NodeInfoSoftware contains Metadata about server software in use",
+ "type": "object",
+ "properties": {
+ "homepage": {
+ "type": "string",
+ "x-go-name": "Homepage"
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "repository": {
+ "type": "string",
+ "x-go-name": "Repository"
+ },
+ "version": {
+ "type": "string",
+ "x-go-name": "Version"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "NodeInfoUsage": {
+ "description": "NodeInfoUsage contains usage statistics for this server",
+ "type": "object",
+ "properties": {
+ "localComments": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "LocalComments"
+ },
+ "localPosts": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "LocalPosts"
+ },
+ "users": {
+ "$ref": "#/definitions/NodeInfoUsageUsers"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "NodeInfoUsageUsers": {
+ "description": "NodeInfoUsageUsers contains statistics about the users of this server",
+ "type": "object",
+ "properties": {
+ "activeHalfyear": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ActiveHalfyear"
+ },
+ "activeMonth": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ActiveMonth"
+ },
+ "total": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Total"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "Note": {
+ "description": "Note contains information related to a git note",
+ "type": "object",
+ "properties": {
+ "commit": {
+ "$ref": "#/definitions/Commit"
+ },
+ "message": {
+ "type": "string",
+ "x-go-name": "Message"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "NotificationCount": {
+ "description": "NotificationCount number of unread notifications",
+ "type": "object",
+ "properties": {
+ "new": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "New"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "NotificationSubject": {
+ "description": "NotificationSubject contains the notification subject (Issue/Pull/Commit)",
+ "type": "object",
+ "properties": {
+ "html_url": {
+ "type": "string",
+ "x-go-name": "HTMLURL"
+ },
+ "latest_comment_html_url": {
+ "type": "string",
+ "x-go-name": "LatestCommentHTMLURL"
+ },
+ "latest_comment_url": {
+ "type": "string",
+ "x-go-name": "LatestCommentURL"
+ },
+ "state": {
+ "$ref": "#/definitions/StateType"
+ },
+ "title": {
+ "type": "string",
+ "x-go-name": "Title"
+ },
+ "type": {
+ "$ref": "#/definitions/NotifySubjectType"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "NotificationThread": {
+ "description": "NotificationThread expose Notification on API",
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "pinned": {
+ "type": "boolean",
+ "x-go-name": "Pinned"
+ },
+ "repository": {
+ "$ref": "#/definitions/Repository"
+ },
+ "subject": {
+ "$ref": "#/definitions/NotificationSubject"
+ },
+ "unread": {
+ "type": "boolean",
+ "x-go-name": "Unread"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "UpdatedAt"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "NotifySubjectType": {
+ "description": "NotifySubjectType represent type of notification subject",
+ "type": "string",
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "OAuth2Application": {
+ "type": "object",
+ "title": "OAuth2Application represents an OAuth2 application.",
+ "properties": {
+ "client_id": {
+ "type": "string",
+ "x-go-name": "ClientID"
+ },
+ "client_secret": {
+ "type": "string",
+ "x-go-name": "ClientSecret"
+ },
+ "confidential_client": {
+ "type": "boolean",
+ "x-go-name": "ConfidentialClient"
+ },
+ "created": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Created"
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "redirect_uris": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "RedirectURIs"
+ },
+ "skip_secondary_authorization": {
+ "type": "boolean",
+ "x-go-name": "SkipSecondaryAuthorization"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "Organization": {
+ "description": "Organization represents an organization",
+ "type": "object",
+ "properties": {
+ "avatar_url": {
+ "type": "string",
+ "x-go-name": "AvatarURL"
+ },
+ "description": {
+ "type": "string",
+ "x-go-name": "Description"
+ },
+ "email": {
+ "type": "string",
+ "x-go-name": "Email"
+ },
+ "full_name": {
+ "type": "string",
+ "x-go-name": "FullName"
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "location": {
+ "type": "string",
+ "x-go-name": "Location"
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "repo_admin_change_team_access": {
+ "type": "boolean",
+ "x-go-name": "RepoAdminChangeTeamAccess"
+ },
+ "username": {
+ "description": "deprecated",
+ "type": "string",
+ "x-go-name": "UserName"
+ },
+ "visibility": {
+ "type": "string",
+ "x-go-name": "Visibility"
+ },
+ "website": {
+ "type": "string",
+ "x-go-name": "Website"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "OrganizationPermissions": {
+ "description": "OrganizationPermissions list different users permissions on an organization",
+ "type": "object",
+ "properties": {
+ "can_create_repository": {
+ "type": "boolean",
+ "x-go-name": "CanCreateRepository"
+ },
+ "can_read": {
+ "type": "boolean",
+ "x-go-name": "CanRead"
+ },
+ "can_write": {
+ "type": "boolean",
+ "x-go-name": "CanWrite"
+ },
+ "is_admin": {
+ "type": "boolean",
+ "x-go-name": "IsAdmin"
+ },
+ "is_owner": {
+ "type": "boolean",
+ "x-go-name": "IsOwner"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "PRBranchInfo": {
+ "description": "PRBranchInfo information about a branch",
+ "type": "object",
+ "properties": {
+ "label": {
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "ref": {
+ "type": "string",
+ "x-go-name": "Ref"
+ },
+ "repo": {
+ "$ref": "#/definitions/Repository"
+ },
+ "repo_id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "RepoID"
+ },
+ "sha": {
+ "type": "string",
+ "x-go-name": "Sha"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "Package": {
+ "description": "Package represents a package",
+ "type": "object",
+ "properties": {
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "CreatedAt"
+ },
+ "creator": {
+ "$ref": "#/definitions/User"
+ },
+ "html_url": {
+ "type": "string",
+ "x-go-name": "HTMLURL"
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "owner": {
+ "$ref": "#/definitions/User"
+ },
+ "repository": {
+ "$ref": "#/definitions/Repository"
+ },
+ "type": {
+ "type": "string",
+ "x-go-name": "Type"
+ },
+ "version": {
+ "type": "string",
+ "x-go-name": "Version"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "PackageFile": {
+ "description": "PackageFile represents a package file",
+ "type": "object",
+ "properties": {
+ "Size": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "md5": {
+ "type": "string",
+ "x-go-name": "HashMD5"
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "sha1": {
+ "type": "string",
+ "x-go-name": "HashSHA1"
+ },
+ "sha256": {
+ "type": "string",
+ "x-go-name": "HashSHA256"
+ },
+ "sha512": {
+ "type": "string",
+ "x-go-name": "HashSHA512"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "PayloadCommit": {
+ "description": "PayloadCommit represents a commit",
+ "type": "object",
+ "properties": {
+ "added": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "Added"
+ },
+ "author": {
+ "$ref": "#/definitions/PayloadUser"
+ },
+ "committer": {
+ "$ref": "#/definitions/PayloadUser"
+ },
+ "id": {
+ "description": "sha1 hash of the commit",
+ "type": "string",
+ "x-go-name": "ID"
+ },
+ "message": {
+ "type": "string",
+ "x-go-name": "Message"
+ },
+ "modified": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "Modified"
+ },
+ "removed": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "Removed"
+ },
+ "timestamp": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Timestamp"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ },
+ "verification": {
+ "$ref": "#/definitions/PayloadCommitVerification"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "PayloadCommitVerification": {
+ "description": "PayloadCommitVerification represents the GPG verification of a commit",
+ "type": "object",
+ "properties": {
+ "payload": {
+ "type": "string",
+ "x-go-name": "Payload"
+ },
+ "reason": {
+ "type": "string",
+ "x-go-name": "Reason"
+ },
+ "signature": {
+ "type": "string",
+ "x-go-name": "Signature"
+ },
+ "signer": {
+ "$ref": "#/definitions/PayloadUser"
+ },
+ "verified": {
+ "type": "boolean",
+ "x-go-name": "Verified"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "PayloadUser": {
+ "description": "PayloadUser represents the author or committer of a commit",
+ "type": "object",
+ "properties": {
+ "email": {
+ "type": "string",
+ "format": "email",
+ "x-go-name": "Email"
+ },
+ "name": {
+ "description": "Full name of the commit author",
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "username": {
+ "type": "string",
+ "x-go-name": "UserName"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "Permission": {
+ "description": "Permission represents a set of permissions",
+ "type": "object",
+ "properties": {
+ "admin": {
+ "type": "boolean",
+ "x-go-name": "Admin"
+ },
+ "pull": {
+ "type": "boolean",
+ "x-go-name": "Pull"
+ },
+ "push": {
+ "type": "boolean",
+ "x-go-name": "Push"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "PublicKey": {
+ "description": "PublicKey publickey is a user key to push code to repository",
+ "type": "object",
+ "properties": {
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Created"
+ },
+ "fingerprint": {
+ "type": "string",
+ "x-go-name": "Fingerprint"
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "key": {
+ "type": "string",
+ "x-go-name": "Key"
+ },
+ "key_type": {
+ "type": "string",
+ "x-go-name": "KeyType"
+ },
+ "read_only": {
+ "type": "boolean",
+ "x-go-name": "ReadOnly"
+ },
+ "title": {
+ "type": "string",
+ "x-go-name": "Title"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ },
+ "user": {
+ "$ref": "#/definitions/User"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "PullRequest": {
+ "description": "PullRequest represents a pull request",
+ "type": "object",
+ "properties": {
+ "additions": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Additions"
+ },
+ "allow_maintainer_edit": {
+ "type": "boolean",
+ "x-go-name": "AllowMaintainerEdit"
+ },
+ "assignee": {
+ "$ref": "#/definitions/User"
+ },
+ "assignees": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/User"
+ },
+ "x-go-name": "Assignees"
+ },
+ "base": {
+ "$ref": "#/definitions/PRBranchInfo"
+ },
+ "body": {
+ "type": "string",
+ "x-go-name": "Body"
+ },
+ "changed_files": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ChangedFiles"
+ },
+ "closed_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Closed"
+ },
+ "comments": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Comments"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Created"
+ },
+ "deletions": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Deletions"
+ },
+ "diff_url": {
+ "type": "string",
+ "x-go-name": "DiffURL"
+ },
+ "draft": {
+ "type": "boolean",
+ "x-go-name": "Draft"
+ },
+ "due_date": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Deadline"
+ },
+ "head": {
+ "$ref": "#/definitions/PRBranchInfo"
+ },
+ "html_url": {
+ "type": "string",
+ "x-go-name": "HTMLURL"
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "is_locked": {
+ "type": "boolean",
+ "x-go-name": "IsLocked"
+ },
+ "labels": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Label"
+ },
+ "x-go-name": "Labels"
+ },
+ "merge_base": {
+ "type": "string",
+ "x-go-name": "MergeBase"
+ },
+ "merge_commit_sha": {
+ "type": "string",
+ "x-go-name": "MergedCommitID"
+ },
+ "mergeable": {
+ "type": "boolean",
+ "x-go-name": "Mergeable"
+ },
+ "merged": {
+ "type": "boolean",
+ "x-go-name": "HasMerged"
+ },
+ "merged_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Merged"
+ },
+ "merged_by": {
+ "$ref": "#/definitions/User"
+ },
+ "milestone": {
+ "$ref": "#/definitions/Milestone"
+ },
+ "number": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Index"
+ },
+ "patch_url": {
+ "type": "string",
+ "x-go-name": "PatchURL"
+ },
+ "pin_order": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "PinOrder"
+ },
+ "requested_reviewers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/User"
+ },
+ "x-go-name": "RequestedReviewers"
+ },
+ "requested_reviewers_teams": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Team"
+ },
+ "x-go-name": "RequestedReviewersTeams"
+ },
+ "review_comments": {
+ "description": "number of review comments made on the diff of a PR review (not including comments on commits or issues in a PR)",
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ReviewComments"
+ },
+ "state": {
+ "$ref": "#/definitions/StateType"
+ },
+ "title": {
+ "type": "string",
+ "x-go-name": "Title"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Updated"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ },
+ "user": {
+ "$ref": "#/definitions/User"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "PullRequestMeta": {
+ "description": "PullRequestMeta PR info if an issue is a PR",
+ "type": "object",
+ "properties": {
+ "draft": {
+ "type": "boolean",
+ "x-go-name": "IsWorkInProgress"
+ },
+ "html_url": {
+ "type": "string",
+ "x-go-name": "HTMLURL"
+ },
+ "merged": {
+ "type": "boolean",
+ "x-go-name": "HasMerged"
+ },
+ "merged_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Merged"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "PullReview": {
+ "description": "PullReview represents a pull request review",
+ "type": "object",
+ "properties": {
+ "body": {
+ "type": "string",
+ "x-go-name": "Body"
+ },
+ "comments_count": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "CodeCommentsCount"
+ },
+ "commit_id": {
+ "type": "string",
+ "x-go-name": "CommitID"
+ },
+ "dismissed": {
+ "type": "boolean",
+ "x-go-name": "Dismissed"
+ },
+ "html_url": {
+ "type": "string",
+ "x-go-name": "HTMLURL"
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "official": {
+ "type": "boolean",
+ "x-go-name": "Official"
+ },
+ "pull_request_url": {
+ "type": "string",
+ "x-go-name": "HTMLPullURL"
+ },
+ "stale": {
+ "type": "boolean",
+ "x-go-name": "Stale"
+ },
+ "state": {
+ "$ref": "#/definitions/ReviewStateType"
+ },
+ "submitted_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Submitted"
+ },
+ "team": {
+ "$ref": "#/definitions/Team"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Updated"
+ },
+ "user": {
+ "$ref": "#/definitions/User"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "PullReviewComment": {
+ "description": "PullReviewComment represents a comment on a pull request review",
+ "type": "object",
+ "properties": {
+ "body": {
+ "type": "string",
+ "x-go-name": "Body"
+ },
+ "commit_id": {
+ "type": "string",
+ "x-go-name": "CommitID"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Created"
+ },
+ "diff_hunk": {
+ "type": "string",
+ "x-go-name": "DiffHunk"
+ },
+ "html_url": {
+ "type": "string",
+ "x-go-name": "HTMLURL"
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "original_commit_id": {
+ "type": "string",
+ "x-go-name": "OrigCommitID"
+ },
+ "original_position": {
+ "type": "integer",
+ "format": "uint64",
+ "x-go-name": "OldLineNum"
+ },
+ "path": {
+ "type": "string",
+ "x-go-name": "Path"
+ },
+ "position": {
+ "type": "integer",
+ "format": "uint64",
+ "x-go-name": "LineNum"
+ },
+ "pull_request_review_id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ReviewID"
+ },
+ "pull_request_url": {
+ "type": "string",
+ "x-go-name": "HTMLPullURL"
+ },
+ "resolver": {
+ "$ref": "#/definitions/User"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Updated"
+ },
+ "user": {
+ "$ref": "#/definitions/User"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "PullReviewRequestOptions": {
+ "description": "PullReviewRequestOptions are options to add or remove pull review requests",
+ "type": "object",
+ "properties": {
+ "reviewers": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "Reviewers"
+ },
+ "team_reviewers": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "TeamReviewers"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "PushMirror": {
+ "description": "PushMirror represents information of a push mirror",
+ "type": "object",
+ "properties": {
+ "created": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "CreatedUnix"
+ },
+ "interval": {
+ "type": "string",
+ "x-go-name": "Interval"
+ },
+ "last_error": {
+ "type": "string",
+ "x-go-name": "LastError"
+ },
+ "last_update": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "LastUpdateUnix"
+ },
+ "remote_address": {
+ "type": "string",
+ "x-go-name": "RemoteAddress"
+ },
+ "remote_name": {
+ "type": "string",
+ "x-go-name": "RemoteName"
+ },
+ "repo_name": {
+ "type": "string",
+ "x-go-name": "RepoName"
+ },
+ "sync_on_commit": {
+ "type": "boolean",
+ "x-go-name": "SyncOnCommit"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "Reaction": {
+ "description": "Reaction contain one reaction",
+ "type": "object",
+ "properties": {
+ "content": {
+ "type": "string",
+ "x-go-name": "Reaction"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Created"
+ },
+ "user": {
+ "$ref": "#/definitions/User"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "Reference": {
+ "type": "object",
+ "title": "Reference represents a Git reference.",
+ "properties": {
+ "object": {
+ "$ref": "#/definitions/GitObject"
+ },
+ "ref": {
+ "type": "string",
+ "x-go-name": "Ref"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "Release": {
+ "description": "Release represents a repository release",
+ "type": "object",
+ "properties": {
+ "assets": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Attachment"
+ },
+ "x-go-name": "Attachments"
+ },
+ "author": {
+ "$ref": "#/definitions/User"
+ },
+ "body": {
+ "type": "string",
+ "x-go-name": "Note"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "CreatedAt"
+ },
+ "draft": {
+ "type": "boolean",
+ "x-go-name": "IsDraft"
+ },
+ "html_url": {
+ "type": "string",
+ "x-go-name": "HTMLURL"
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Title"
+ },
+ "prerelease": {
+ "type": "boolean",
+ "x-go-name": "IsPrerelease"
+ },
+ "published_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "PublishedAt"
+ },
+ "tag_name": {
+ "type": "string",
+ "x-go-name": "TagName"
+ },
+ "tarball_url": {
+ "type": "string",
+ "x-go-name": "TarURL"
+ },
+ "target_commitish": {
+ "type": "string",
+ "x-go-name": "Target"
+ },
+ "upload_url": {
+ "type": "string",
+ "x-go-name": "UploadURL"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ },
+ "zipball_url": {
+ "type": "string",
+ "x-go-name": "ZipURL"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "RenameUserOption": {
+ "description": "RenameUserOption options when renaming a user",
+ "type": "object",
+ "required": [
+ "new_username"
+ ],
+ "properties": {
+ "new_username": {
+ "description": "New username for this user. This name cannot be in use yet by any other user.",
+ "type": "string",
+ "uniqueItems": true,
+ "x-go-name": "NewName"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "RepoCollaboratorPermission": {
+ "description": "RepoCollaboratorPermission to get repository permission for a collaborator",
+ "type": "object",
+ "properties": {
+ "permission": {
+ "type": "string",
+ "x-go-name": "Permission"
+ },
+ "role_name": {
+ "type": "string",
+ "x-go-name": "RoleName"
+ },
+ "user": {
+ "$ref": "#/definitions/User"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "RepoCommit": {
+ "type": "object",
+ "title": "RepoCommit contains information of a commit in the context of a repository.",
+ "properties": {
+ "author": {
+ "$ref": "#/definitions/CommitUser"
+ },
+ "committer": {
+ "$ref": "#/definitions/CommitUser"
+ },
+ "message": {
+ "type": "string",
+ "x-go-name": "Message"
+ },
+ "tree": {
+ "$ref": "#/definitions/CommitMeta"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ },
+ "verification": {
+ "$ref": "#/definitions/PayloadCommitVerification"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "RepoTopicOptions": {
+ "description": "RepoTopicOptions a collection of repo topic names",
+ "type": "object",
+ "properties": {
+ "topics": {
+ "description": "list of topic names",
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "Topics"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "RepoTransfer": {
+ "description": "RepoTransfer represents a pending repo transfer",
+ "type": "object",
+ "properties": {
+ "doer": {
+ "$ref": "#/definitions/User"
+ },
+ "recipient": {
+ "$ref": "#/definitions/User"
+ },
+ "teams": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Team"
+ },
+ "x-go-name": "Teams"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "Repository": {
+ "description": "Repository represents a repository",
+ "type": "object",
+ "properties": {
+ "allow_fast_forward_only_merge": {
+ "type": "boolean",
+ "x-go-name": "AllowFastForwardOnly"
+ },
+ "allow_merge_commits": {
+ "type": "boolean",
+ "x-go-name": "AllowMerge"
+ },
+ "allow_rebase": {
+ "type": "boolean",
+ "x-go-name": "AllowRebase"
+ },
+ "allow_rebase_explicit": {
+ "type": "boolean",
+ "x-go-name": "AllowRebaseMerge"
+ },
+ "allow_rebase_update": {
+ "type": "boolean",
+ "x-go-name": "AllowRebaseUpdate"
+ },
+ "allow_squash_merge": {
+ "type": "boolean",
+ "x-go-name": "AllowSquash"
+ },
+ "archived": {
+ "type": "boolean",
+ "x-go-name": "Archived"
+ },
+ "archived_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "ArchivedAt"
+ },
+ "avatar_url": {
+ "type": "string",
+ "x-go-name": "AvatarURL"
+ },
+ "clone_url": {
+ "type": "string",
+ "x-go-name": "CloneURL"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Created"
+ },
+ "default_allow_maintainer_edit": {
+ "type": "boolean",
+ "x-go-name": "DefaultAllowMaintainerEdit"
+ },
+ "default_branch": {
+ "type": "string",
+ "x-go-name": "DefaultBranch"
+ },
+ "default_delete_branch_after_merge": {
+ "type": "boolean",
+ "x-go-name": "DefaultDeleteBranchAfterMerge"
+ },
+ "default_merge_style": {
+ "type": "string",
+ "x-go-name": "DefaultMergeStyle"
+ },
+ "description": {
+ "type": "string",
+ "x-go-name": "Description"
+ },
+ "empty": {
+ "type": "boolean",
+ "x-go-name": "Empty"
+ },
+ "external_tracker": {
+ "$ref": "#/definitions/ExternalTracker"
+ },
+ "external_wiki": {
+ "$ref": "#/definitions/ExternalWiki"
+ },
+ "fork": {
+ "type": "boolean",
+ "x-go-name": "Fork"
+ },
+ "forks_count": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Forks"
+ },
+ "full_name": {
+ "type": "string",
+ "x-go-name": "FullName"
+ },
+ "has_actions": {
+ "type": "boolean",
+ "x-go-name": "HasActions"
+ },
+ "has_issues": {
+ "type": "boolean",
+ "x-go-name": "HasIssues"
+ },
+ "has_packages": {
+ "type": "boolean",
+ "x-go-name": "HasPackages"
+ },
+ "has_projects": {
+ "type": "boolean",
+ "x-go-name": "HasProjects"
+ },
+ "has_pull_requests": {
+ "type": "boolean",
+ "x-go-name": "HasPullRequests"
+ },
+ "has_releases": {
+ "type": "boolean",
+ "x-go-name": "HasReleases"
+ },
+ "has_wiki": {
+ "type": "boolean",
+ "x-go-name": "HasWiki"
+ },
+ "html_url": {
+ "type": "string",
+ "x-go-name": "HTMLURL"
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "ignore_whitespace_conflicts": {
+ "type": "boolean",
+ "x-go-name": "IgnoreWhitespaceConflicts"
+ },
+ "internal": {
+ "type": "boolean",
+ "x-go-name": "Internal"
+ },
+ "internal_tracker": {
+ "$ref": "#/definitions/InternalTracker"
+ },
+ "language": {
+ "type": "string",
+ "x-go-name": "Language"
+ },
+ "languages_url": {
+ "type": "string",
+ "x-go-name": "LanguagesURL"
+ },
+ "licenses": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "Licenses"
+ },
+ "link": {
+ "type": "string",
+ "x-go-name": "Link"
+ },
+ "mirror": {
+ "type": "boolean",
+ "x-go-name": "Mirror"
+ },
+ "mirror_interval": {
+ "type": "string",
+ "x-go-name": "MirrorInterval"
+ },
+ "mirror_updated": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "MirrorUpdated"
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "object_format_name": {
+ "description": "ObjectFormatName of the underlying git repository",
+ "type": "string",
+ "enum": [
+ "sha1",
+ "sha256"
+ ],
+ "x-go-name": "ObjectFormatName"
+ },
+ "open_issues_count": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "OpenIssues"
+ },
+ "open_pr_counter": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "OpenPulls"
+ },
+ "original_url": {
+ "type": "string",
+ "x-go-name": "OriginalURL"
+ },
+ "owner": {
+ "$ref": "#/definitions/User"
+ },
+ "parent": {
+ "$ref": "#/definitions/Repository"
+ },
+ "permissions": {
+ "$ref": "#/definitions/Permission"
+ },
+ "private": {
+ "type": "boolean",
+ "x-go-name": "Private"
+ },
+ "projects_mode": {
+ "type": "string",
+ "x-go-name": "ProjectsMode"
+ },
+ "release_counter": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Releases"
+ },
+ "repo_transfer": {
+ "$ref": "#/definitions/RepoTransfer"
+ },
+ "size": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Size"
+ },
+ "ssh_url": {
+ "type": "string",
+ "x-go-name": "SSHURL"
+ },
+ "stars_count": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Stars"
+ },
+ "template": {
+ "type": "boolean",
+ "x-go-name": "Template"
+ },
+ "topics": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "Topics"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Updated"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ },
+ "watchers_count": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Watchers"
+ },
+ "website": {
+ "type": "string",
+ "x-go-name": "Website"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "RepositoryMeta": {
+ "description": "RepositoryMeta basic repository information",
+ "type": "object",
+ "properties": {
+ "full_name": {
+ "type": "string",
+ "x-go-name": "FullName"
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "owner": {
+ "type": "string",
+ "x-go-name": "Owner"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "ReviewStateType": {
+ "description": "ReviewStateType review state type",
+ "type": "string",
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "SearchResults": {
+ "description": "SearchResults results of a successful search",
+ "type": "object",
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Repository"
+ },
+ "x-go-name": "Data"
+ },
+ "ok": {
+ "type": "boolean",
+ "x-go-name": "OK"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "Secret": {
+ "description": "Secret represents a secret",
+ "type": "object",
+ "properties": {
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Created"
+ },
+ "name": {
+ "description": "the secret's name",
+ "type": "string",
+ "x-go-name": "Name"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "ServerVersion": {
+ "description": "ServerVersion wraps the version of the server",
+ "type": "object",
+ "properties": {
+ "version": {
+ "type": "string",
+ "x-go-name": "Version"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "StateType": {
+ "description": "StateType issue state type",
+ "type": "string",
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "StopWatch": {
+ "description": "StopWatch represent a running stopwatch",
+ "type": "object",
+ "properties": {
+ "created": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Created"
+ },
+ "duration": {
+ "type": "string",
+ "x-go-name": "Duration"
+ },
+ "issue_index": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "IssueIndex"
+ },
+ "issue_title": {
+ "type": "string",
+ "x-go-name": "IssueTitle"
+ },
+ "repo_name": {
+ "type": "string",
+ "x-go-name": "RepoName"
+ },
+ "repo_owner_name": {
+ "type": "string",
+ "x-go-name": "RepoOwnerName"
+ },
+ "seconds": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Seconds"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "SubmitPullReviewOptions": {
+ "description": "SubmitPullReviewOptions are options to submit a pending pull review",
+ "type": "object",
+ "properties": {
+ "body": {
+ "type": "string",
+ "x-go-name": "Body"
+ },
+ "event": {
+ "$ref": "#/definitions/ReviewStateType"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "Tag": {
+ "description": "Tag represents a repository tag",
+ "type": "object",
+ "properties": {
+ "commit": {
+ "$ref": "#/definitions/CommitMeta"
+ },
+ "id": {
+ "type": "string",
+ "x-go-name": "ID"
+ },
+ "message": {
+ "type": "string",
+ "x-go-name": "Message"
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "tarball_url": {
+ "type": "string",
+ "x-go-name": "TarballURL"
+ },
+ "zipball_url": {
+ "type": "string",
+ "x-go-name": "ZipballURL"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "TagProtection": {
+ "description": "TagProtection represents a tag protection",
+ "type": "object",
+ "properties": {
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Created"
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "name_pattern": {
+ "type": "string",
+ "x-go-name": "NamePattern"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Updated"
+ },
+ "whitelist_teams": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "WhitelistTeams"
+ },
+ "whitelist_usernames": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "WhitelistUsernames"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "Team": {
+ "description": "Team represents a team in an organization",
+ "type": "object",
+ "properties": {
+ "can_create_org_repo": {
+ "type": "boolean",
+ "x-go-name": "CanCreateOrgRepo"
+ },
+ "description": {
+ "type": "string",
+ "x-go-name": "Description"
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "includes_all_repositories": {
+ "type": "boolean",
+ "x-go-name": "IncludesAllRepositories"
+ },
+ "name": {
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "organization": {
+ "$ref": "#/definitions/Organization"
+ },
+ "permission": {
+ "type": "string",
+ "enum": [
+ "none",
+ "read",
+ "write",
+ "admin",
+ "owner"
+ ],
+ "x-go-name": "Permission"
+ },
+ "units": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "Units",
+ "example": [
+ "repo.code",
+ "repo.issues",
+ "repo.ext_issues",
+ "repo.wiki",
+ "repo.pulls",
+ "repo.releases",
+ "repo.projects",
+ "repo.ext_wiki"
+ ]
+ },
+ "units_map": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "x-go-name": "UnitsMap",
+ "example": {
+ "repo.code": "read",
+ "repo.ext_issues": "none",
+ "repo.ext_wiki": "none",
+ "repo.issues": "write",
+ "repo.projects": "none",
+ "repo.pulls": "owner",
+ "repo.releases": "none",
+ "repo.wiki": "admin"
+ }
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "TimeStamp": {
+ "description": "TimeStamp defines a timestamp",
+ "type": "integer",
+ "format": "int64",
+ "x-go-package": "code.gitea.io/gitea/modules/timeutil"
+ },
+ "TimelineComment": {
+ "description": "TimelineComment represents a timeline comment (comment of any type) on a commit or issue",
+ "type": "object",
+ "properties": {
+ "assignee": {
+ "$ref": "#/definitions/User"
+ },
+ "assignee_team": {
+ "$ref": "#/definitions/Team"
+ },
+ "body": {
+ "type": "string",
+ "x-go-name": "Body"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Created"
+ },
+ "dependent_issue": {
+ "$ref": "#/definitions/Issue"
+ },
+ "html_url": {
+ "type": "string",
+ "x-go-name": "HTMLURL"
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "issue_url": {
+ "type": "string",
+ "x-go-name": "IssueURL"
+ },
+ "label": {
+ "$ref": "#/definitions/Label"
+ },
+ "milestone": {
+ "$ref": "#/definitions/Milestone"
+ },
+ "new_ref": {
+ "type": "string",
+ "x-go-name": "NewRef"
+ },
+ "new_title": {
+ "type": "string",
+ "x-go-name": "NewTitle"
+ },
+ "old_milestone": {
+ "$ref": "#/definitions/Milestone"
+ },
+ "old_project_id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "OldProjectID"
+ },
+ "old_ref": {
+ "type": "string",
+ "x-go-name": "OldRef"
+ },
+ "old_title": {
+ "type": "string",
+ "x-go-name": "OldTitle"
+ },
+ "project_id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ProjectID"
+ },
+ "pull_request_url": {
+ "type": "string",
+ "x-go-name": "PRURL"
+ },
+ "ref_action": {
+ "type": "string",
+ "x-go-name": "RefAction"
+ },
+ "ref_comment": {
+ "$ref": "#/definitions/Comment"
+ },
+ "ref_commit_sha": {
+ "description": "commit SHA where issue/PR was referenced",
+ "type": "string",
+ "x-go-name": "RefCommitSHA"
+ },
+ "ref_issue": {
+ "$ref": "#/definitions/Issue"
+ },
+ "removed_assignee": {
+ "description": "whether the assignees were removed or added",
+ "type": "boolean",
+ "x-go-name": "RemovedAssignee"
+ },
+ "resolve_doer": {
+ "$ref": "#/definitions/User"
+ },
+ "review_id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ReviewID"
+ },
+ "tracked_time": {
+ "$ref": "#/definitions/TrackedTime"
+ },
+ "type": {
+ "type": "string",
+ "x-go-name": "Type"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Updated"
+ },
+ "user": {
+ "$ref": "#/definitions/User"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "TopicName": {
+ "description": "TopicName a list of repo topic names",
+ "type": "object",
+ "properties": {
+ "topics": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "TopicNames"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "TopicResponse": {
+ "description": "TopicResponse for returning topics",
+ "type": "object",
+ "properties": {
+ "created": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Created"
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "repo_count": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "RepoCount"
+ },
+ "topic_name": {
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "updated": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Updated"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "TrackedTime": {
+ "description": "TrackedTime worked time for an issue / pr",
+ "type": "object",
+ "properties": {
+ "created": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Created"
+ },
+ "id": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "issue": {
+ "$ref": "#/definitions/Issue"
+ },
+ "issue_id": {
+ "description": "deprecated (only for backwards compatibility)",
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "IssueID"
+ },
+ "time": {
+ "description": "Time in seconds",
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Time"
+ },
+ "user_id": {
+ "description": "deprecated (only for backwards compatibility)",
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "UserID"
+ },
+ "user_name": {
+ "type": "string",
+ "x-go-name": "UserName"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "TransferRepoOption": {
+ "description": "TransferRepoOption options when transfer a repository's ownership",
+ "type": "object",
+ "required": [
+ "new_owner"
+ ],
+ "properties": {
+ "new_owner": {
+ "type": "string",
+ "x-go-name": "NewOwner"
+ },
+ "team_ids": {
+ "description": "ID of the team or teams to add to the repository. Teams can only be added to organization-owned repositories.",
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "x-go-name": "TeamIDs"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "UpdateBranchProtectionPriories": {
+ "description": "UpdateBranchProtectionPriories a list to update the branch protection rule priorities",
+ "type": "object",
+ "properties": {
+ "ids": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int64"
+ },
+ "x-go-name": "IDs"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "UpdateBranchRepoOption": {
+ "description": "UpdateBranchRepoOption options when updating a branch in a repository",
+ "type": "object",
+ "required": [
+ "name"
+ ],
+ "properties": {
+ "name": {
+ "description": "New branch name",
+ "type": "string",
+ "uniqueItems": true,
+ "x-go-name": "Name"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "UpdateFileOptions": {
+ "description": "UpdateFileOptions options for updating files\nNote: `author` and `committer` are optional (if only one is given, it will be used for the other, otherwise the authenticated user will be used)",
+ "type": "object",
+ "required": [
+ "sha",
+ "content"
+ ],
+ "properties": {
+ "author": {
+ "$ref": "#/definitions/Identity"
+ },
+ "branch": {
+ "description": "branch (optional) to base this file from. if not given, the default branch is used",
+ "type": "string",
+ "x-go-name": "BranchName"
+ },
+ "committer": {
+ "$ref": "#/definitions/Identity"
+ },
+ "content": {
+ "description": "content must be base64 encoded",
+ "type": "string",
+ "x-go-name": "ContentBase64"
+ },
+ "dates": {
+ "$ref": "#/definitions/CommitDateOptions"
+ },
+ "from_path": {
+ "description": "from_path (optional) is the path of the original file which will be moved/renamed to the path in the URL",
+ "type": "string",
+ "x-go-name": "FromPath"
+ },
+ "message": {
+ "description": "message (optional) for the commit of this file. if not supplied, a default message will be used",
+ "type": "string",
+ "x-go-name": "Message"
+ },
+ "new_branch": {
+ "description": "new_branch (optional) will make a new branch from `branch` before creating the file",
+ "type": "string",
+ "x-go-name": "NewBranchName"
+ },
+ "sha": {
+ "description": "sha is the SHA for the file that already exists",
+ "type": "string",
+ "x-go-name": "SHA"
+ },
+ "signoff": {
+ "description": "Add a Signed-off-by trailer by the committer at the end of the commit log message.",
+ "type": "boolean",
+ "x-go-name": "Signoff"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "UpdateRepoAvatarOption": {
+ "description": "UpdateRepoAvatarUserOption options when updating the repo avatar",
+ "type": "object",
+ "properties": {
+ "image": {
+ "description": "image must be base64 encoded",
+ "type": "string",
+ "x-go-name": "Image"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "UpdateUserAvatarOption": {
+ "description": "UpdateUserAvatarUserOption options when updating the user avatar",
+ "type": "object",
+ "properties": {
+ "image": {
+ "description": "image must be base64 encoded",
+ "type": "string",
+ "x-go-name": "Image"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "UpdateVariableOption": {
+ "description": "UpdateVariableOption the option when updating variable",
+ "type": "object",
+ "required": [
+ "value"
+ ],
+ "properties": {
+ "name": {
+ "description": "New name for the variable. If the field is empty, the variable name won't be updated.",
+ "type": "string",
+ "x-go-name": "Name"
+ },
+ "value": {
+ "description": "Value of the variable to update",
+ "type": "string",
+ "x-go-name": "Value"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "User": {
+ "description": "User represents a user",
+ "type": "object",
+ "properties": {
+ "active": {
+ "description": "Is user active",
+ "type": "boolean",
+ "x-go-name": "IsActive"
+ },
+ "avatar_url": {
+ "description": "URL to the user's avatar",
+ "type": "string",
+ "x-go-name": "AvatarURL"
+ },
+ "created": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "Created"
+ },
+ "description": {
+ "description": "the user's description",
+ "type": "string",
+ "x-go-name": "Description"
+ },
+ "email": {
+ "type": "string",
+ "format": "email",
+ "x-go-name": "Email"
+ },
+ "followers_count": {
+ "description": "user counts",
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Followers"
+ },
+ "following_count": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Following"
+ },
+ "full_name": {
+ "description": "the user's full name",
+ "type": "string",
+ "x-go-name": "FullName"
+ },
+ "html_url": {
+ "description": "URL to the user's gitea page",
+ "type": "string",
+ "x-go-name": "HTMLURL"
+ },
+ "id": {
+ "description": "the user's id",
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "ID"
+ },
+ "is_admin": {
+ "description": "Is the user an administrator",
+ "type": "boolean",
+ "x-go-name": "IsAdmin"
+ },
+ "language": {
+ "description": "User locale",
+ "type": "string",
+ "x-go-name": "Language"
+ },
+ "last_login": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "LastLogin"
+ },
+ "location": {
+ "description": "the user's location",
+ "type": "string",
+ "x-go-name": "Location"
+ },
+ "login": {
+ "description": "the user's username",
+ "type": "string",
+ "x-go-name": "UserName"
+ },
+ "login_name": {
+ "description": "the user's authentication sign-in name.",
+ "type": "string",
+ "default": "empty",
+ "x-go-name": "LoginName"
+ },
+ "prohibit_login": {
+ "description": "Is user login prohibited",
+ "type": "boolean",
+ "x-go-name": "ProhibitLogin"
+ },
+ "restricted": {
+ "description": "Is user restricted",
+ "type": "boolean",
+ "x-go-name": "Restricted"
+ },
+ "source_id": {
+ "description": "The ID of the user's Authentication Source",
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "SourceID"
+ },
+ "starred_repos_count": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "StarredRepos"
+ },
+ "visibility": {
+ "description": "User visibility level option: public, limited, private",
+ "type": "string",
+ "x-go-name": "Visibility"
+ },
+ "website": {
+ "description": "the user's website",
+ "type": "string",
+ "x-go-name": "Website"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "UserBadgeOption": {
+ "description": "UserBadgeOption options for link between users and badges",
+ "type": "object",
+ "properties": {
+ "badge_slugs": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "x-go-name": "BadgeSlugs",
+ "example": [
+ "badge1",
+ "badge2"
+ ]
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "UserHeatmapData": {
+ "description": "UserHeatmapData represents the data needed to create a heatmap",
+ "type": "object",
+ "properties": {
+ "contributions": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Contributions"
+ },
+ "timestamp": {
+ "$ref": "#/definitions/TimeStamp"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/models/activities"
+ },
+ "UserSettings": {
+ "description": "UserSettings represents user settings",
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string",
+ "x-go-name": "Description"
+ },
+ "diff_view_style": {
+ "type": "string",
+ "x-go-name": "DiffViewStyle"
+ },
+ "full_name": {
+ "type": "string",
+ "x-go-name": "FullName"
+ },
+ "hide_activity": {
+ "type": "boolean",
+ "x-go-name": "HideActivity"
+ },
+ "hide_email": {
+ "description": "Privacy",
+ "type": "boolean",
+ "x-go-name": "HideEmail"
+ },
+ "language": {
+ "type": "string",
+ "x-go-name": "Language"
+ },
+ "location": {
+ "type": "string",
+ "x-go-name": "Location"
+ },
+ "theme": {
+ "type": "string",
+ "x-go-name": "Theme"
+ },
+ "website": {
+ "type": "string",
+ "x-go-name": "Website"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "UserSettingsOptions": {
+ "description": "UserSettingsOptions represents options to change user settings",
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string",
+ "x-go-name": "Description"
+ },
+ "diff_view_style": {
+ "type": "string",
+ "x-go-name": "DiffViewStyle"
+ },
+ "full_name": {
+ "type": "string",
+ "x-go-name": "FullName"
+ },
+ "hide_activity": {
+ "type": "boolean",
+ "x-go-name": "HideActivity"
+ },
+ "hide_email": {
+ "description": "Privacy",
+ "type": "boolean",
+ "x-go-name": "HideEmail"
+ },
+ "language": {
+ "type": "string",
+ "x-go-name": "Language"
+ },
+ "location": {
+ "type": "string",
+ "x-go-name": "Location"
+ },
+ "theme": {
+ "type": "string",
+ "x-go-name": "Theme"
+ },
+ "website": {
+ "type": "string",
+ "x-go-name": "Website"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "WatchInfo": {
+ "description": "WatchInfo represents an API watch status of one repository",
+ "type": "object",
+ "properties": {
+ "created_at": {
+ "type": "string",
+ "format": "date-time",
+ "x-go-name": "CreatedAt"
+ },
+ "ignored": {
+ "type": "boolean",
+ "x-go-name": "Ignored"
+ },
+ "reason": {
+ "x-go-name": "Reason"
+ },
+ "repository_url": {
+ "type": "string",
+ "x-go-name": "RepositoryURL"
+ },
+ "subscribed": {
+ "type": "boolean",
+ "x-go-name": "Subscribed"
+ },
+ "url": {
+ "type": "string",
+ "x-go-name": "URL"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "WikiCommit": {
+ "description": "WikiCommit page commit/revision",
+ "type": "object",
+ "properties": {
+ "author": {
+ "$ref": "#/definitions/CommitUser"
+ },
+ "commiter": {
+ "$ref": "#/definitions/CommitUser"
+ },
+ "message": {
+ "type": "string",
+ "x-go-name": "Message"
+ },
+ "sha": {
+ "type": "string",
+ "x-go-name": "ID"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "WikiCommitList": {
+ "description": "WikiCommitList commit/revision list",
+ "type": "object",
+ "properties": {
+ "commits": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/WikiCommit"
+ },
+ "x-go-name": "WikiCommits"
+ },
+ "count": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "Count"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "WikiPage": {
+ "description": "WikiPage a wiki page",
+ "type": "object",
+ "properties": {
+ "commit_count": {
+ "type": "integer",
+ "format": "int64",
+ "x-go-name": "CommitCount"
+ },
+ "content_base64": {
+ "description": "Page content, base64 encoded",
+ "type": "string",
+ "x-go-name": "ContentBase64"
+ },
+ "footer": {
+ "type": "string",
+ "x-go-name": "Footer"
+ },
+ "html_url": {
+ "type": "string",
+ "x-go-name": "HTMLURL"
+ },
+ "last_commit": {
+ "$ref": "#/definitions/WikiCommit"
+ },
+ "sidebar": {
+ "type": "string",
+ "x-go-name": "Sidebar"
+ },
+ "sub_url": {
+ "type": "string",
+ "x-go-name": "SubURL"
+ },
+ "title": {
+ "type": "string",
+ "x-go-name": "Title"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ },
+ "WikiPageMetaData": {
+ "description": "WikiPageMetaData wiki page meta information",
+ "type": "object",
+ "properties": {
+ "html_url": {
+ "type": "string",
+ "x-go-name": "HTMLURL"
+ },
+ "last_commit": {
+ "$ref": "#/definitions/WikiCommit"
+ },
+ "sub_url": {
+ "type": "string",
+ "x-go-name": "SubURL"
+ },
+ "title": {
+ "type": "string",
+ "x-go-name": "Title"
+ }
+ },
+ "x-go-package": "code.gitea.io/gitea/modules/structs"
+ }
+ },
+ "responses": {
+ "AccessToken": {
+ "description": "AccessToken represents an API access token.",
+ "schema": {
+ "$ref": "#/definitions/AccessToken"
+ }
+ },
+ "AccessTokenList": {
+ "description": "AccessTokenList represents a list of API access token.",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/AccessToken"
+ }
+ }
+ },
+ "ActionVariable": {
+ "description": "ActionVariable",
+ "schema": {
+ "$ref": "#/definitions/ActionVariable"
+ }
+ },
+ "ActivityFeedsList": {
+ "description": "ActivityFeedsList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Activity"
+ }
+ }
+ },
+ "ActivityPub": {
+ "description": "ActivityPub",
+ "schema": {
+ "$ref": "#/definitions/ActivityPub"
+ }
+ },
+ "AnnotatedTag": {
+ "description": "AnnotatedTag",
+ "schema": {
+ "$ref": "#/definitions/AnnotatedTag"
+ }
+ },
+ "Attachment": {
+ "description": "Attachment",
+ "schema": {
+ "$ref": "#/definitions/Attachment"
+ }
+ },
+ "AttachmentList": {
+ "description": "AttachmentList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Attachment"
+ }
+ }
+ },
+ "BadgeList": {
+ "description": "BadgeList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Badge"
+ }
+ }
+ },
+ "Branch": {
+ "description": "Branch",
+ "schema": {
+ "$ref": "#/definitions/Branch"
+ }
+ },
+ "BranchList": {
+ "description": "BranchList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Branch"
+ }
+ }
+ },
+ "BranchProtection": {
+ "description": "BranchProtection",
+ "schema": {
+ "$ref": "#/definitions/BranchProtection"
+ }
+ },
+ "BranchProtectionList": {
+ "description": "BranchProtectionList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/BranchProtection"
+ }
+ }
+ },
+ "ChangedFileList": {
+ "description": "ChangedFileList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ChangedFile"
+ }
+ },
+ "headers": {
+ "X-HasMore": {
+ "type": "boolean",
+ "description": "True if there is another page"
+ },
+ "X-Page": {
+ "type": "integer",
+ "format": "int64",
+ "description": "The current page"
+ },
+ "X-PageCount": {
+ "type": "integer",
+ "format": "int64",
+ "description": "Total number of pages"
+ },
+ "X-PerPage": {
+ "type": "integer",
+ "format": "int64",
+ "description": "Commits per page"
+ },
+ "X-Total": {
+ "type": "integer",
+ "format": "int64",
+ "description": "Total commit count"
+ }
+ }
+ },
+ "CombinedStatus": {
+ "description": "CombinedStatus",
+ "schema": {
+ "$ref": "#/definitions/CombinedStatus"
+ }
+ },
+ "Comment": {
+ "description": "Comment",
+ "schema": {
+ "$ref": "#/definitions/Comment"
+ }
+ },
+ "CommentList": {
+ "description": "CommentList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Comment"
+ }
+ }
+ },
+ "Commit": {
+ "description": "Commit",
+ "schema": {
+ "$ref": "#/definitions/Commit"
+ }
+ },
+ "CommitList": {
+ "description": "CommitList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Commit"
+ }
+ },
+ "headers": {
+ "X-HasMore": {
+ "type": "boolean",
+ "description": "True if there is another page"
+ },
+ "X-Page": {
+ "type": "integer",
+ "format": "int64",
+ "description": "The current page"
+ },
+ "X-PageCount": {
+ "type": "integer",
+ "format": "int64",
+ "description": "Total number of pages"
+ },
+ "X-PerPage": {
+ "type": "integer",
+ "format": "int64",
+ "description": "Commits per page"
+ },
+ "X-Total": {
+ "type": "integer",
+ "format": "int64",
+ "description": "Total commit count"
+ }
+ }
+ },
+ "CommitStatus": {
+ "description": "CommitStatus",
+ "schema": {
+ "$ref": "#/definitions/CommitStatus"
+ }
+ },
+ "CommitStatusList": {
+ "description": "CommitStatusList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/CommitStatus"
+ }
+ }
+ },
+ "Compare": {
+ "description": "",
+ "schema": {
+ "$ref": "#/definitions/Compare"
+ }
+ },
+ "ContentsListResponse": {
+ "description": "ContentsListResponse",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ContentsResponse"
+ }
+ }
+ },
+ "ContentsResponse": {
+ "description": "ContentsResponse",
+ "schema": {
+ "$ref": "#/definitions/ContentsResponse"
+ }
+ },
+ "CronList": {
+ "description": "CronList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Cron"
+ }
+ }
+ },
+ "DeployKey": {
+ "description": "DeployKey",
+ "schema": {
+ "$ref": "#/definitions/DeployKey"
+ }
+ },
+ "DeployKeyList": {
+ "description": "DeployKeyList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/DeployKey"
+ }
+ }
+ },
+ "EmailList": {
+ "description": "EmailList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Email"
+ }
+ }
+ },
+ "EmptyRepository": {
+ "description": "EmptyRepository",
+ "schema": {
+ "$ref": "#/definitions/APIError"
+ }
+ },
+ "FileDeleteResponse": {
+ "description": "FileDeleteResponse",
+ "schema": {
+ "$ref": "#/definitions/FileDeleteResponse"
+ }
+ },
+ "FileResponse": {
+ "description": "FileResponse",
+ "schema": {
+ "$ref": "#/definitions/FileResponse"
+ }
+ },
+ "FilesResponse": {
+ "description": "FilesResponse",
+ "schema": {
+ "$ref": "#/definitions/FilesResponse"
+ }
+ },
+ "GPGKey": {
+ "description": "GPGKey",
+ "schema": {
+ "$ref": "#/definitions/GPGKey"
+ }
+ },
+ "GPGKeyList": {
+ "description": "GPGKeyList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/GPGKey"
+ }
+ }
+ },
+ "GeneralAPISettings": {
+ "description": "GeneralAPISettings",
+ "schema": {
+ "$ref": "#/definitions/GeneralAPISettings"
+ }
+ },
+ "GeneralAttachmentSettings": {
+ "description": "GeneralAttachmentSettings",
+ "schema": {
+ "$ref": "#/definitions/GeneralAttachmentSettings"
+ }
+ },
+ "GeneralRepoSettings": {
+ "description": "GeneralRepoSettings",
+ "schema": {
+ "$ref": "#/definitions/GeneralRepoSettings"
+ }
+ },
+ "GeneralUISettings": {
+ "description": "GeneralUISettings",
+ "schema": {
+ "$ref": "#/definitions/GeneralUISettings"
+ }
+ },
+ "GitBlobResponse": {
+ "description": "GitBlobResponse",
+ "schema": {
+ "$ref": "#/definitions/GitBlobResponse"
+ }
+ },
+ "GitHook": {
+ "description": "GitHook",
+ "schema": {
+ "$ref": "#/definitions/GitHook"
+ }
+ },
+ "GitHookList": {
+ "description": "GitHookList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/GitHook"
+ }
+ }
+ },
+ "GitTreeResponse": {
+ "description": "GitTreeResponse",
+ "schema": {
+ "$ref": "#/definitions/GitTreeResponse"
+ }
+ },
+ "GitignoreTemplateInfo": {
+ "description": "GitignoreTemplateInfo",
+ "schema": {
+ "$ref": "#/definitions/GitignoreTemplateInfo"
+ }
+ },
+ "GitignoreTemplateList": {
+ "description": "GitignoreTemplateList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "Hook": {
+ "description": "Hook",
+ "schema": {
+ "$ref": "#/definitions/Hook"
+ }
+ },
+ "HookList": {
+ "description": "HookList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Hook"
+ }
+ }
+ },
+ "Issue": {
+ "description": "Issue",
+ "schema": {
+ "$ref": "#/definitions/Issue"
+ }
+ },
+ "IssueDeadline": {
+ "description": "IssueDeadline",
+ "schema": {
+ "$ref": "#/definitions/IssueDeadline"
+ }
+ },
+ "IssueList": {
+ "description": "IssueList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Issue"
+ }
+ }
+ },
+ "IssueTemplates": {
+ "description": "IssueTemplates",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/IssueTemplate"
+ }
+ }
+ },
+ "Label": {
+ "description": "Label",
+ "schema": {
+ "$ref": "#/definitions/Label"
+ }
+ },
+ "LabelList": {
+ "description": "LabelList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Label"
+ }
+ }
+ },
+ "LabelTemplateInfo": {
+ "description": "LabelTemplateInfo",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/LabelTemplate"
+ }
+ }
+ },
+ "LabelTemplateList": {
+ "description": "LabelTemplateList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "LanguageStatistics": {
+ "description": "LanguageStatistics",
+ "schema": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "integer",
+ "format": "int64"
+ }
+ }
+ },
+ "LicenseTemplateInfo": {
+ "description": "LicenseTemplateInfo",
+ "schema": {
+ "$ref": "#/definitions/LicenseTemplateInfo"
+ }
+ },
+ "LicenseTemplateList": {
+ "description": "LicenseTemplateList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/LicensesTemplateListEntry"
+ }
+ }
+ },
+ "LicensesList": {
+ "description": "LicensesList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "MarkdownRender": {
+ "description": "MarkdownRender is a rendered markdown document",
+ "schema": {
+ "type": "string"
+ }
+ },
+ "MarkupRender": {
+ "description": "MarkupRender is a rendered markup document",
+ "schema": {
+ "type": "string"
+ }
+ },
+ "MergeUpstreamRequest": {
+ "description": "",
+ "schema": {
+ "$ref": "#/definitions/MergeUpstreamRequest"
+ }
+ },
+ "MergeUpstreamResponse": {
+ "description": "",
+ "schema": {
+ "$ref": "#/definitions/MergeUpstreamResponse"
+ }
+ },
+ "Milestone": {
+ "description": "Milestone",
+ "schema": {
+ "$ref": "#/definitions/Milestone"
+ }
+ },
+ "MilestoneList": {
+ "description": "MilestoneList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Milestone"
+ }
+ }
+ },
+ "NodeInfo": {
+ "description": "NodeInfo",
+ "schema": {
+ "$ref": "#/definitions/NodeInfo"
+ }
+ },
+ "Note": {
+ "description": "Note",
+ "schema": {
+ "$ref": "#/definitions/Note"
+ }
+ },
+ "NotificationCount": {
+ "description": "Number of unread notifications",
+ "schema": {
+ "$ref": "#/definitions/NotificationCount"
+ }
+ },
+ "NotificationThread": {
+ "description": "NotificationThread",
+ "schema": {
+ "$ref": "#/definitions/NotificationThread"
+ }
+ },
+ "NotificationThreadList": {
+ "description": "NotificationThreadList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/NotificationThread"
+ }
+ }
+ },
+ "OAuth2Application": {
+ "description": "OAuth2Application",
+ "schema": {
+ "$ref": "#/definitions/OAuth2Application"
+ }
+ },
+ "OAuth2ApplicationList": {
+ "description": "OAuth2ApplicationList represents a list of OAuth2 applications.",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/OAuth2Application"
+ }
+ }
+ },
+ "Organization": {
+ "description": "Organization",
+ "schema": {
+ "$ref": "#/definitions/Organization"
+ }
+ },
+ "OrganizationList": {
+ "description": "OrganizationList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Organization"
+ }
+ }
+ },
+ "OrganizationPermissions": {
+ "description": "OrganizationPermissions",
+ "schema": {
+ "$ref": "#/definitions/OrganizationPermissions"
+ }
+ },
+ "Package": {
+ "description": "Package",
+ "schema": {
+ "$ref": "#/definitions/Package"
+ }
+ },
+ "PackageFileList": {
+ "description": "PackageFileList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/PackageFile"
+ }
+ }
+ },
+ "PackageList": {
+ "description": "PackageList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Package"
+ }
+ }
+ },
+ "PublicKey": {
+ "description": "PublicKey",
+ "schema": {
+ "$ref": "#/definitions/PublicKey"
+ }
+ },
+ "PublicKeyList": {
+ "description": "PublicKeyList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/PublicKey"
+ }
+ }
+ },
+ "PullRequest": {
+ "description": "PullRequest",
+ "schema": {
+ "$ref": "#/definitions/PullRequest"
+ }
+ },
+ "PullRequestList": {
+ "description": "PullRequestList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/PullRequest"
+ }
+ }
+ },
+ "PullReview": {
+ "description": "PullReview",
+ "schema": {
+ "$ref": "#/definitions/PullReview"
+ }
+ },
+ "PullReviewComment": {
+ "description": "PullComment",
+ "schema": {
+ "$ref": "#/definitions/PullReviewComment"
+ }
+ },
+ "PullReviewCommentList": {
+ "description": "PullCommentList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/PullReviewComment"
+ }
+ }
+ },
+ "PullReviewList": {
+ "description": "PullReviewList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/PullReview"
+ }
+ }
+ },
+ "PushMirror": {
+ "description": "PushMirror",
+ "schema": {
+ "$ref": "#/definitions/PushMirror"
+ }
+ },
+ "PushMirrorList": {
+ "description": "PushMirrorList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/PushMirror"
+ }
+ }
+ },
+ "Reaction": {
+ "description": "Reaction",
+ "schema": {
+ "$ref": "#/definitions/Reaction"
+ }
+ },
+ "ReactionList": {
+ "description": "ReactionList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Reaction"
+ }
+ }
+ },
+ "Reference": {
+ "description": "Reference",
+ "schema": {
+ "$ref": "#/definitions/Reference"
+ }
+ },
+ "ReferenceList": {
+ "description": "ReferenceList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Reference"
+ }
+ }
+ },
+ "RegistrationToken": {
+ "description": "RegistrationToken is response related to registration token",
+ "headers": {
+ "token": {
+ "type": "string"
+ }
+ }
+ },
+ "Release": {
+ "description": "Release",
+ "schema": {
+ "$ref": "#/definitions/Release"
+ }
+ },
+ "ReleaseList": {
+ "description": "ReleaseList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Release"
+ }
+ }
+ },
+ "RepoCollaboratorPermission": {
+ "description": "RepoCollaboratorPermission",
+ "schema": {
+ "$ref": "#/definitions/RepoCollaboratorPermission"
+ }
+ },
+ "RepoIssueConfig": {
+ "description": "RepoIssueConfig",
+ "schema": {
+ "$ref": "#/definitions/IssueConfig"
+ }
+ },
+ "RepoIssueConfigValidation": {
+ "description": "RepoIssueConfigValidation",
+ "schema": {
+ "$ref": "#/definitions/IssueConfigValidation"
+ }
+ },
+ "RepoNewIssuePinsAllowed": {
+ "description": "RepoNewIssuePinsAllowed",
+ "schema": {
+ "$ref": "#/definitions/NewIssuePinsAllowed"
+ }
+ },
+ "Repository": {
+ "description": "Repository",
+ "schema": {
+ "$ref": "#/definitions/Repository"
+ }
+ },
+ "RepositoryList": {
+ "description": "RepositoryList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Repository"
+ }
+ }
+ },
+ "SearchResults": {
+ "description": "SearchResults",
+ "schema": {
+ "$ref": "#/definitions/SearchResults"
+ }
+ },
+ "Secret": {
+ "description": "Secret",
+ "schema": {
+ "$ref": "#/definitions/Secret"
+ }
+ },
+ "SecretList": {
+ "description": "SecretList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Secret"
+ }
+ }
+ },
+ "ServerVersion": {
+ "description": "ServerVersion",
+ "schema": {
+ "$ref": "#/definitions/ServerVersion"
+ }
+ },
+ "StopWatch": {
+ "description": "StopWatch",
+ "schema": {
+ "$ref": "#/definitions/StopWatch"
+ }
+ },
+ "StopWatchList": {
+ "description": "StopWatchList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/StopWatch"
+ }
+ }
+ },
+ "StringSlice": {
+ "description": "StringSlice",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ "Tag": {
+ "description": "Tag",
+ "schema": {
+ "$ref": "#/definitions/Tag"
+ }
+ },
+ "TagList": {
+ "description": "TagList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Tag"
+ }
+ }
+ },
+ "TagProtection": {
+ "description": "TagProtection",
+ "schema": {
+ "$ref": "#/definitions/TagProtection"
+ }
+ },
+ "TagProtectionList": {
+ "description": "TagProtectionList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TagProtection"
+ }
+ }
+ },
+ "TasksList": {
+ "description": "TasksList",
+ "schema": {
+ "$ref": "#/definitions/ActionTaskResponse"
+ }
+ },
+ "Team": {
+ "description": "Team",
+ "schema": {
+ "$ref": "#/definitions/Team"
+ }
+ },
+ "TeamList": {
+ "description": "TeamList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/Team"
+ }
+ }
+ },
+ "TimelineList": {
+ "description": "TimelineList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TimelineComment"
+ }
+ }
+ },
+ "TopicListResponse": {
+ "description": "TopicListResponse",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TopicResponse"
+ }
+ }
+ },
+ "TopicNames": {
+ "description": "TopicNames",
+ "schema": {
+ "$ref": "#/definitions/TopicName"
+ }
+ },
+ "TrackedTime": {
+ "description": "TrackedTime",
+ "schema": {
+ "$ref": "#/definitions/TrackedTime"
+ }
+ },
+ "TrackedTimeList": {
+ "description": "TrackedTimeList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/TrackedTime"
+ }
+ }
+ },
+ "User": {
+ "description": "User",
+ "schema": {
+ "$ref": "#/definitions/User"
+ }
+ },
+ "UserHeatmapData": {
+ "description": "UserHeatmapData",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/UserHeatmapData"
+ }
+ }
+ },
+ "UserList": {
+ "description": "UserList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/User"
+ }
+ }
+ },
+ "UserSettings": {
+ "description": "UserSettings",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/UserSettings"
+ }
+ }
+ },
+ "VariableList": {
+ "description": "VariableList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ActionVariable"
+ }
+ }
+ },
+ "WatchInfo": {
+ "description": "WatchInfo",
+ "schema": {
+ "$ref": "#/definitions/WatchInfo"
+ }
+ },
+ "WikiCommitList": {
+ "description": "WikiCommitList",
+ "schema": {
+ "$ref": "#/definitions/WikiCommitList"
+ }
+ },
+ "WikiPage": {
+ "description": "WikiPage",
+ "schema": {
+ "$ref": "#/definitions/WikiPage"
+ }
+ },
+ "WikiPageList": {
+ "description": "WikiPageList",
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/WikiPageMetaData"
+ }
+ }
+ },
+ "conflict": {
+ "description": "APIConflict is a conflict empty response"
+ },
+ "empty": {
+ "description": "APIEmpty is an empty response"
+ },
+ "error": {
+ "description": "APIError is error format response",
+ "headers": {
+ "message": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ }
+ }
+ },
+ "forbidden": {
+ "description": "APIForbiddenError is a forbidden error response",
+ "headers": {
+ "message": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ }
+ }
+ },
+ "invalidTopicsError": {
+ "description": "APIInvalidTopicsError is error format response to invalid topics",
+ "headers": {
+ "invalidTopics": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "message": {
+ "type": "string"
+ }
+ }
+ },
+ "notFound": {
+ "description": "APINotFound is a not found empty response"
+ },
+ "parameterBodies": {
+ "description": "parameterBodies",
+ "schema": {
+ "$ref": "#/definitions/UpdateVariableOption"
+ }
+ },
+ "redirect": {
+ "description": "APIRedirect is a redirect response"
+ },
+ "repoArchivedError": {
+ "description": "APIRepoArchivedError is an error that is raised when an archived repo should be modified",
+ "headers": {
+ "message": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ }
+ }
+ },
+ "string": {
+ "description": "APIString is a string response",
+ "schema": {
+ "type": "string"
+ }
+ },
+ "validationError": {
+ "description": "APIValidationError is error format response related to input validation",
+ "headers": {
+ "message": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "securityDefinitions": {
+ "AccessToken": {
+ "description": "This authentication option is deprecated for removal in Gitea 1.23. Please use AuthorizationHeaderToken instead.",
+ "type": "apiKey",
+ "name": "access_token",
+ "in": "query"
+ },
+ "AuthorizationHeaderToken": {
+ "description": "API tokens must be prepended with \"token\" followed by a space.",
+ "type": "apiKey",
+ "name": "Authorization",
+ "in": "header"
+ },
+ "BasicAuth": {
+ "type": "basic"
+ },
+ "SudoHeader": {
+ "description": "Sudo API request as the user provided as the key. Admin privileges are required.",
+ "type": "apiKey",
+ "name": "Sudo",
+ "in": "header"
+ },
+ "SudoParam": {
+ "description": "Sudo API request as the user provided as the key. Admin privileges are required.",
+ "type": "apiKey",
+ "name": "sudo",
+ "in": "query"
+ },
+ "TOTPHeader": {
+ "description": "Must be used in combination with BasicAuth if two-factor authentication is enabled.",
+ "type": "apiKey",
+ "name": "X-GITEA-OTP",
+ "in": "header"
+ },
+ "Token": {
+ "description": "This authentication option is deprecated for removal in Gitea 1.23. Please use AuthorizationHeaderToken instead.",
+ "type": "apiKey",
+ "name": "token",
+ "in": "query"
+ }
+ },
+ "security": [
+ {
+ "BasicAuth": []
+ },
+ {
+ "Token": []
+ },
+ {
+ "AccessToken": []
+ },
+ {
+ "AuthorizationHeaderToken": []
+ },
+ {
+ "SudoParam": []
+ },
+ {
+ "SudoHeader": []
+ },
+ {
+ "TOTPHeader": []
+ }
+ ]
+}
diff --git a/user/auth/activate.tmpl b/user/auth/activate.tmpl
new file mode 100644
index 0000000..7f8ff0e
--- /dev/null
+++ b/user/auth/activate.tmpl
@@ -0,0 +1,40 @@
+{{template "base/head" .}}
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+ {{template "base/alert" .}}
+ {{if .NeedVerifyLocalPassword}}
+
+ {{ctx.Locale.Tr "password"}}
+
+
+
+ {{ctx.Locale.Tr "install.confirm_password"}}
+
+
+ {{else}}
+
{{ctx.Locale.Tr "auth.has_unconfirmed_mail" .SignedUser.Name .SignedUser.Email}}
+
+ {{ctx.Locale.Tr "auth.change_unconfirmed_mail_address"}}
+
+ {{ctx.Locale.Tr "email"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "auth.resend_mail"}}
+
+ {{end}}
+
+
+
+
+
+{{template "base/footer" .}}
diff --git a/user/auth/activate_prompt.tmpl b/user/auth/activate_prompt.tmpl
new file mode 100644
index 0000000..237244d
--- /dev/null
+++ b/user/auth/activate_prompt.tmpl
@@ -0,0 +1,15 @@
+{{template "base/head" .}}
+
+
+
+
+
+ {{template "base/alert" .}}
+
{{.ActivationPromptMessage}}
+
+
+
+
+{{template "base/footer" .}}
diff --git a/user/auth/captcha.tmpl b/user/auth/captcha.tmpl
new file mode 100644
index 0000000..8dd4d1c
--- /dev/null
+++ b/user/auth/captcha.tmpl
@@ -0,0 +1,29 @@
+{{if .EnableCaptcha}}{{if eq .CaptchaType "image"}}
+
+ {{.Captcha.CreateHTML}}
+
+
+ {{ctx.Locale.Tr "captcha"}}
+
+
+{{else if eq .CaptchaType "recaptcha"}}
+
+
+{{else if eq .CaptchaType "hcaptcha"}}
+
+
+{{else if eq .CaptchaType "mcaptcha"}}
+
+{{else if eq .CaptchaType "cfturnstile"}}
+
+
+{{end}}{{end}}
diff --git a/user/auth/change_passwd.tmpl b/user/auth/change_passwd.tmpl
new file mode 100644
index 0000000..e05f46f
--- /dev/null
+++ b/user/auth/change_passwd.tmpl
@@ -0,0 +1,7 @@
+{{template "base/head" .}}
+
+
+ {{template "user/auth/change_passwd_inner" .}}
+
+
+{{template "base/footer" .}}
diff --git a/user/auth/change_passwd_inner.tmpl b/user/auth/change_passwd_inner.tmpl
new file mode 100644
index 0000000..01bbf50
--- /dev/null
+++ b/user/auth/change_passwd_inner.tmpl
@@ -0,0 +1,22 @@
+ {{if or (not .LinkAccountMode) (and .LinkAccountMode .LinkAccountModeSignIn)}}
+ {{template "base/alert" .}}
+ {{end}}
+
+
diff --git a/user/auth/finalize_openid.tmpl b/user/auth/finalize_openid.tmpl
new file mode 100644
index 0000000..1c1dcdb
--- /dev/null
+++ b/user/auth/finalize_openid.tmpl
@@ -0,0 +1,47 @@
+{{template "base/head" .}}
+
+
+
+ {{template "user/auth/finalize_openid_navbar" .}}
+
+ {{template "base/alert" .}}
+
+
+
+
+
+
+{{template "base/footer" .}}
diff --git a/user/auth/forgot_passwd.tmpl b/user/auth/forgot_passwd.tmpl
new file mode 100644
index 0000000..55bcf63
--- /dev/null
+++ b/user/auth/forgot_passwd.tmpl
@@ -0,0 +1,39 @@
+{{template "base/head" .}}
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+ {{template "base/alert" .}}
+ {{if .IsResetSent}}
+
{{ctx.Locale.Tr "auth.reset_password_mail_sent_prompt" .Email .ResetPwdCodeLives}}
+ {{else if .IsResetRequest}}
+
+ {{ctx.Locale.Tr "email"}}
+
+
+
+
+ {{ctx.Locale.Tr "auth.send_reset_mail"}}
+
+ {{else if .IsResetDisable}}
+
+ {{if $.IsAdmin}}
+ {{ctx.Locale.Tr "auth.disable_forgot_password_mail_admin"}}
+ {{else}}
+ {{ctx.Locale.Tr "auth.disable_forgot_password_mail"}}
+ {{end}}
+
+ {{else if .ResendLimited}}
+
{{ctx.Locale.Tr "auth.resent_limit_prompt"}}
+ {{end}}
+
+
+
+
+
+{{template "base/footer" .}}
diff --git a/user/auth/grant.tmpl b/user/auth/grant.tmpl
new file mode 100644
index 0000000..4031dd7
--- /dev/null
+++ b/user/auth/grant.tmpl
@@ -0,0 +1,36 @@
+{{template "base/head" .}}
+
+
+
+
+
+ {{template "base/alert" .}}
+
+ {{if not .AdditionalScopes}}
+ {{ctx.Locale.Tr "auth.authorize_application_description"}}
+ {{end}}
+ {{ctx.Locale.Tr "auth.authorize_application_created_by" .ApplicationCreatorLinkHTML}}
+ {{ctx.Locale.Tr "auth.authorize_application_with_scopes" (HTMLFormat "%s " .Scope)}}
+
+
+
+
{{ctx.Locale.Tr "auth.authorize_redirect_notice" .ApplicationRedirectDomainHTML}}
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+
+
+
+ {{ctx.Locale.Tr "auth.authorize_application"}}
+ {{ctx.Locale.Tr "cancel"}}
+
+
+
+
+
+{{template "base/footer" .}}
diff --git a/user/auth/grant_error.tmpl b/user/auth/grant_error.tmpl
new file mode 100644
index 0000000..b2e0779
--- /dev/null
+++ b/user/auth/grant_error.tmpl
@@ -0,0 +1,16 @@
+{{template "base/head" .}}
+
+ {{if .IsRepo}}{{template "repo/header" .}}{{end}}
+
+
+
+
{{.Error.ErrorDescription}}
+
+
{{ctx.Locale.Tr "auth.authorization_failed_desc"}}
+
+
+
+
+{{template "base/footer" .}}
diff --git a/user/auth/link_account.tmpl b/user/auth/link_account.tmpl
new file mode 100644
index 0000000..d244ce3
--- /dev/null
+++ b/user/auth/link_account.tmpl
@@ -0,0 +1,36 @@
+{{template "base/head" .}}
+
+
+
+
+ {{/* these styles are quite tricky but it needs to be the same as the signin page */}}
+
+
+ {{if .AutoRegistrationFailedPrompt}}
{{.AutoRegistrationFailedPrompt}}
{{end}}
+ {{template "user/auth/signup_inner" .}}
+
+
+
+
+ {{template "user/auth/signin_inner" .}}
+
+
+
+
+
+
+{{template "base/footer" .}}
diff --git a/user/auth/oauth_container.tmpl b/user/auth/oauth_container.tmpl
new file mode 100644
index 0000000..d01aaef
--- /dev/null
+++ b/user/auth/oauth_container.tmpl
@@ -0,0 +1,24 @@
+
diff --git a/user/auth/oidc_wellknown.tmpl b/user/auth/oidc_wellknown.tmpl
new file mode 100644
index 0000000..54bb4a7
--- /dev/null
+++ b/user/auth/oidc_wellknown.tmpl
@@ -0,0 +1,49 @@
+{
+ "issuer": "{{AppUrl | JSEscape}}",
+ "authorization_endpoint": "{{AppUrl | JSEscape}}login/oauth/authorize",
+ "token_endpoint": "{{AppUrl | JSEscape}}login/oauth/access_token",
+ "jwks_uri": "{{AppUrl | JSEscape}}login/oauth/keys",
+ "userinfo_endpoint": "{{AppUrl | JSEscape}}login/oauth/userinfo",
+ "introspection_endpoint": "{{AppUrl | JSEscape}}login/oauth/introspect",
+ "response_types_supported": [
+ "code",
+ "id_token"
+ ],
+ "id_token_signing_alg_values_supported": [
+ "{{.SigningKey.SigningMethod.Alg | JSEscape}}"
+ ],
+ "subject_types_supported": [
+ "public"
+ ],
+ "scopes_supported": [
+ "openid",
+ "profile",
+ "email",
+ "groups"
+ ],
+ "claims_supported": [
+ "aud",
+ "exp",
+ "iat",
+ "iss",
+ "sub",
+ "name",
+ "preferred_username",
+ "profile",
+ "picture",
+ "website",
+ "locale",
+ "updated_at",
+ "email",
+ "email_verified",
+ "groups"
+ ],
+ "code_challenge_methods_supported": [
+ "plain",
+ "S256"
+ ],
+ "grant_types_supported": [
+ "authorization_code",
+ "refresh_token"
+ ]
+}
diff --git a/user/auth/prohibit_login.tmpl b/user/auth/prohibit_login.tmpl
new file mode 100644
index 0000000..962ddfa
--- /dev/null
+++ b/user/auth/prohibit_login.tmpl
@@ -0,0 +1,16 @@
+{{template "base/head" .}}
+
+
+
+
+
+
+
{{ctx.Locale.Tr "auth.prohibit_login_desc"}}
+
+
+
+
+
+{{template "base/footer" .}}
diff --git a/user/auth/reset_passwd.tmpl b/user/auth/reset_passwd.tmpl
new file mode 100644
index 0000000..f8303fe
--- /dev/null
+++ b/user/auth/reset_passwd.tmpl
@@ -0,0 +1,65 @@
+{{template "base/head" .}}
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+
+ {{template "base/alert" .}}
+ {{if .user_email}}
+
+ {{ctx.Locale.Tr "email"}}
+
+
+ {{end}}
+ {{if .IsResetForm}}
+
+ {{ctx.Locale.Tr "settings.new_password"}}
+
+
+ {{if not .user_signed_in}}
+
+
+ {{ctx.Locale.Tr "auth.remember_me"}}
+
+
+
+ {{end}}
+ {{if .has_two_factor}}
+
+
{{ctx.Locale.Tr "settings.twofa_is_enrolled"}}
+ {{if .scratch_code}}
+
+ {{ctx.Locale.Tr "auth.scratch_code"}}
+
+
+
+ {{else}}
+
+ {{ctx.Locale.Tr "passcode"}}
+
+
+ {{end}}
+ {{end}}
+
+
+ {{else}}
+
{{ctx.Locale.Tr "auth.invalid_code_forgot_password" (printf "%s/user/forgot_password" AppSubUrl)}}
+ {{end}}
+
+
+
+
+
+{{template "base/footer" .}}
diff --git a/user/auth/signin.tmpl b/user/auth/signin.tmpl
new file mode 100644
index 0000000..75e1bb2
--- /dev/null
+++ b/user/auth/signin.tmpl
@@ -0,0 +1,10 @@
+{{template "base/head" .}}
+
+
+ {{/* these styles are quite tricky and should also apply to the signup and link_account pages */}}
+
+ {{template "user/auth/signin_inner" .}}
+
+
+
+{{template "base/footer" .}}
diff --git a/user/auth/signin_inner.tmpl b/user/auth/signin_inner.tmpl
new file mode 100644
index 0000000..28a85dd
--- /dev/null
+++ b/user/auth/signin_inner.tmpl
@@ -0,0 +1,78 @@
+
+ {{if or (not .LinkAccountMode) (and .LinkAccountMode .LinkAccountModeSignIn)}}
+ {{template "base/alert" .}}
+ {{end}}
+
+
+ {{if .EnablePasswordSignInForm}}
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "home.uname_holder"}}
+
+
+ {{if or (not .DisablePassword) .LinkAccountMode}}
+
+
{{ctx.Locale.Tr "password"}}
+
+
+
+ {{end}}
+ {{if not .LinkAccountMode}}
+
+
+ {{ctx.Locale.Tr "auth.remember_me"}}
+
+
+
+ {{end}}
+
+ {{template "user/auth/captcha" .}}
+
+
+
+ {{if .LinkAccountMode}}
+ {{ctx.Locale.Tr "auth.oauth_signin_submit"}}
+ {{else}}
+ {{ctx.Locale.Tr "sign_in"}}
+ {{end}}
+
+
+
+ {{end}}{{/*if .EnablePasswordSignInForm*/}}
+ {{/* "oauth_container" contains not only "oauth2" methods, but also "OIDC" and "SSPI" methods */}}
+ {{$showOAuth2Methods := or .OAuth2Providers .EnableOpenIDSignIn .EnableSSPI}}
+ {{if and $showOAuth2Methods .EnablePasswordSignInForm}}
+
{{ctx.Locale.Tr "sign_in_or"}}
+ {{end}}
+ {{if $showOAuth2Methods}}
+ {{template "user/auth/oauth_container" .}}
+ {{end}}
+
+
+
+{{if or .EnablePasskeyAuth .ShowRegistrationButton}}
+
+
+
+{{end}}
diff --git a/user/auth/signin_openid.tmpl b/user/auth/signin_openid.tmpl
new file mode 100644
index 0000000..20c7bdc
--- /dev/null
+++ b/user/auth/signin_openid.tmpl
@@ -0,0 +1,51 @@
+{{template "base/head" .}}
+
+
+
+
+
+
+
+
+ {{template "base/alert" .}}
+
+
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "auth.openid_signin_desc"}}
+
+
+
+ {{svg "fontawesome-openid"}}
+ OpenID URI
+
+
+
+
+
+ {{ctx.Locale.Tr "auth.remember_me"}}
+
+
+
+
+ {{ctx.Locale.Tr "sign_in"}}
+
+
+
+
+
+
+ {{template "user/auth/webauthn_error" .}}
+
+
+
+
+
+
+{{template "base/footer" .}}
diff --git a/user/auth/signup.tmpl b/user/auth/signup.tmpl
new file mode 100644
index 0000000..1ce3934
--- /dev/null
+++ b/user/auth/signup.tmpl
@@ -0,0 +1,9 @@
+{{template "base/head" .}}
+
+
+
+ {{template "user/auth/signup_inner" .}}
+
+
+
+{{template "base/footer" .}}
diff --git a/user/auth/signup_inner.tmpl b/user/auth/signup_inner.tmpl
new file mode 100644
index 0000000..d665681
--- /dev/null
+++ b/user/auth/signup_inner.tmpl
@@ -0,0 +1,70 @@
+
+
+
+ {{if not .LinkAccountMode}}
+
+ {{end}}
+
diff --git a/user/auth/signup_openid_connect.tmpl b/user/auth/signup_openid_connect.tmpl
new file mode 100644
index 0000000..e4b7936
--- /dev/null
+++ b/user/auth/signup_openid_connect.tmpl
@@ -0,0 +1,36 @@
+{{template "base/head" .}}
+
+ {{template "user/auth/signup_openid_navbar" .}}
+
+ {{template "base/alert" .}}
+
+
+
+
+{{template "base/footer" .}}
diff --git a/user/auth/signup_openid_navbar.tmpl b/user/auth/signup_openid_navbar.tmpl
new file mode 100644
index 0000000..89068dd
--- /dev/null
+++ b/user/auth/signup_openid_navbar.tmpl
@@ -0,0 +1,12 @@
+
diff --git a/user/auth/signup_openid_register.tmpl b/user/auth/signup_openid_register.tmpl
new file mode 100644
index 0000000..c017a0e
--- /dev/null
+++ b/user/auth/signup_openid_register.tmpl
@@ -0,0 +1,37 @@
+{{template "base/head" .}}
+
+ {{template "user/auth/signup_openid_navbar" .}}
+
+ {{template "base/alert" .}}
+
+
+
+
+{{template "base/footer" .}}
diff --git a/user/auth/twofa.tmpl b/user/auth/twofa.tmpl
new file mode 100644
index 0000000..d245239
--- /dev/null
+++ b/user/auth/twofa.tmpl
@@ -0,0 +1,26 @@
+{{template "base/head" .}}
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+ {{template "base/alert" .}}
+
+ {{ctx.Locale.Tr "passcode"}}
+
+
+
+
+
+
+
+
+
+{{template "base/footer" .}}
diff --git a/user/auth/twofa_scratch.tmpl b/user/auth/twofa_scratch.tmpl
new file mode 100644
index 0000000..23ad77f
--- /dev/null
+++ b/user/auth/twofa_scratch.tmpl
@@ -0,0 +1,25 @@
+{{template "base/head" .}}
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+ {{template "base/alert" .}}
+
+ {{ctx.Locale.Tr "auth.scratch_code"}}
+
+
+
+
+ {{ctx.Locale.Tr "auth.verify"}}
+
+
+
+
+
+
+{{template "base/footer" .}}
diff --git a/user/auth/webauthn.tmpl b/user/auth/webauthn.tmpl
new file mode 100644
index 0000000..1b84765
--- /dev/null
+++ b/user/auth/webauthn.tmpl
@@ -0,0 +1,25 @@
+{{template "base/head" .}}
+
+
+
+ {{template "user/auth/webauthn_error" .}}
+
+
+ {{svg "octicon-key" 56}}
+
{{ctx.Locale.Tr "webauthn_insert_key"}}
+ {{template "base/alert" .}}
+
{{ctx.Locale.Tr "webauthn_sign_in"}}
+
+
+
+ {{ctx.Locale.Tr "webauthn_press_button"}}
+
+ {{if .HasTwoFactor}}
+
+ {{end}}
+
+
+
+{{template "base/footer" .}}
diff --git a/user/auth/webauthn_error.tmpl b/user/auth/webauthn_error.tmpl
new file mode 100644
index 0000000..511ff7c
--- /dev/null
+++ b/user/auth/webauthn_error.tmpl
@@ -0,0 +1,13 @@
+
+
+
+
+
{{ctx.Locale.Tr "webauthn_unsupported_browser"}}
+
{{ctx.Locale.Tr "webauthn_error_unknown"}}
+
{{ctx.Locale.Tr "webauthn_error_insecure"}}
+
{{ctx.Locale.Tr "webauthn_error_unable_to_process"}}
+
{{ctx.Locale.Tr "webauthn_error_duplicated"}}
+
{{ctx.Locale.Tr "webauthn_error_empty"}}
+
{{ctx.Locale.Tr "webauthn_error_timeout"}}
+
+
diff --git a/user/code.tmpl b/user/code.tmpl
new file mode 100644
index 0000000..ff6c69d
--- /dev/null
+++ b/user/code.tmpl
@@ -0,0 +1,24 @@
+{{template "base/head" .}}
+{{if .ContextUser.IsOrganization}}
+
+ {{template "org/header" .}}
+
+ {{template "shared/search/code/search" .}}
+
+
+{{else}}
+
+
+
+
+ {{template "shared/user/profile_big_avatar" .}}
+
+
+ {{template "user/overview/header" .}}
+ {{template "shared/search/code/search" .}}
+
+
+
+
+{{end}}
+{{template "base/footer" .}}
diff --git a/user/dashboard/dashboard.tmpl b/user/dashboard/dashboard.tmpl
new file mode 100644
index 0000000..5dc46dc
--- /dev/null
+++ b/user/dashboard/dashboard.tmpl
@@ -0,0 +1,13 @@
+{{template "base/head" .}}
+
+ {{template "user/dashboard/navbar" .}}
+
+
+ {{template "base/alert" .}}
+ {{template "user/heatmap" .}}
+ {{template "user/dashboard/feeds" .}}
+
+ {{template "user/dashboard/repolist" .}}
+
+
+{{template "base/footer" .}}
diff --git a/user/dashboard/feeds.tmpl b/user/dashboard/feeds.tmpl
new file mode 100644
index 0000000..739be58
--- /dev/null
+++ b/user/dashboard/feeds.tmpl
@@ -0,0 +1,130 @@
+
+ {{range .Feeds}}
+
+
+ {{ctx.AvatarUtils.AvatarByAction .}}
+
+
+
+ {{if gt .ActUser.ID 0}}
+
{{.GetActDisplayName ctx}}
+ {{else}}
+ {{.ShortActUserName ctx}}
+ {{end}}
+ {{if .GetOpType.InActions "create_repo"}}
+ {{ctx.Locale.Tr "action.create_repo" (.GetRepoLink ctx) (.ShortRepoPath ctx)}}
+ {{else if .GetOpType.InActions "rename_repo"}}
+ {{ctx.Locale.Tr "action.rename_repo" .GetContent (.GetRepoLink ctx) (.ShortRepoPath ctx)}}
+ {{else if .GetOpType.InActions "commit_repo"}}
+ {{if .Content}}
+ {{ctx.Locale.Tr "action.commit_repo" (.GetRepoLink ctx) (.GetRefLink ctx) .GetBranch (.ShortRepoPath ctx)}}
+ {{else}}
+ {{ctx.Locale.Tr "action.create_branch" (.GetRepoLink ctx) (.GetRefLink ctx) .GetBranch (.ShortRepoPath ctx)}}
+ {{end}}
+ {{else if .GetOpType.InActions "create_issue"}}
+ {{$index := index .GetIssueInfos 0}}
+ {{ctx.Locale.Tr "action.create_issue" (printf "%s/issues/%s" (.GetRepoLink ctx) $index) $index (.ShortRepoPath ctx)}}
+ {{else if .GetOpType.InActions "create_pull_request"}}
+ {{$index := index .GetIssueInfos 0}}
+ {{ctx.Locale.Tr "action.create_pull_request" (printf "%s/pulls/%s" (.GetRepoLink ctx) $index) $index (.ShortRepoPath ctx)}}
+ {{else if .GetOpType.InActions "transfer_repo"}}
+ {{ctx.Locale.Tr "action.transfer_repo" .GetContent (.GetRepoLink ctx) (.ShortRepoPath ctx)}}
+ {{else if .GetOpType.InActions "push_tag"}}
+ {{ctx.Locale.Tr "action.push_tag" (.GetRepoLink ctx) (.GetRefLink ctx) .GetTag (.ShortRepoPath ctx)}}
+ {{else if .GetOpType.InActions "comment_issue"}}
+ {{$index := index .GetIssueInfos 0}}
+ {{ctx.Locale.Tr "action.comment_issue" (printf "%s/issues/%s" (.GetRepoLink ctx) $index) $index (.ShortRepoPath ctx)}}
+ {{else if .GetOpType.InActions "merge_pull_request"}}
+ {{$index := index .GetIssueInfos 0}}
+ {{ctx.Locale.Tr "action.merge_pull_request" (printf "%s/pulls/%s" (.GetRepoLink ctx) $index) $index (.ShortRepoPath ctx)}}
+ {{else if .GetOpType.InActions "close_issue"}}
+ {{$index := index .GetIssueInfos 0}}
+ {{ctx.Locale.Tr "action.close_issue" (printf "%s/issues/%s" (.GetRepoLink ctx) $index) $index (.ShortRepoPath ctx)}}
+ {{else if .GetOpType.InActions "reopen_issue"}}
+ {{$index := index .GetIssueInfos 0}}
+ {{ctx.Locale.Tr "action.reopen_issue" (printf "%s/issues/%s" (.GetRepoLink ctx) $index) $index (.ShortRepoPath ctx)}}
+ {{else if .GetOpType.InActions "close_pull_request"}}
+ {{$index := index .GetIssueInfos 0}}
+ {{ctx.Locale.Tr "action.close_pull_request" (printf "%s/pulls/%s" (.GetRepoLink ctx) $index) $index (.ShortRepoPath ctx)}}
+ {{else if .GetOpType.InActions "reopen_pull_request"}}
+ {{$index := index .GetIssueInfos 0}}
+ {{ctx.Locale.Tr "action.reopen_pull_request" (printf "%s/pulls/%s" (.GetRepoLink ctx) $index) $index (.ShortRepoPath ctx)}}
+ {{else if .GetOpType.InActions "delete_tag"}}
+ {{$index := index .GetIssueInfos 0}}
+ {{ctx.Locale.Tr "action.delete_tag" (.GetRepoLink ctx) .GetTag (.ShortRepoPath ctx)}}
+ {{else if .GetOpType.InActions "delete_branch"}}
+ {{$index := index .GetIssueInfos 0}}
+ {{ctx.Locale.Tr "action.delete_branch" (.GetRepoLink ctx) .GetBranch (.ShortRepoPath ctx)}}
+ {{else if .GetOpType.InActions "mirror_sync_push"}}
+ {{ctx.Locale.Tr "action.mirror_sync_push" (.GetRepoLink ctx) (.GetRefLink ctx) .GetBranch (.ShortRepoPath ctx)}}
+ {{else if .GetOpType.InActions "mirror_sync_create"}}
+ {{ctx.Locale.Tr "action.mirror_sync_create" (.GetRepoLink ctx) (.GetRefLink ctx) .GetBranch (.ShortRepoPath ctx)}}
+ {{else if .GetOpType.InActions "mirror_sync_delete"}}
+ {{ctx.Locale.Tr "action.mirror_sync_delete" (.GetRepoLink ctx) .GetBranch (.ShortRepoPath ctx)}}
+ {{else if .GetOpType.InActions "approve_pull_request"}}
+ {{$index := index .GetIssueInfos 0}}
+ {{ctx.Locale.Tr "action.approve_pull_request" (printf "%s/pulls/%s" (.GetRepoLink ctx) $index) $index (.ShortRepoPath ctx)}}
+ {{else if .GetOpType.InActions "reject_pull_request"}}
+ {{$index := index .GetIssueInfos 0}}
+ {{ctx.Locale.Tr "action.reject_pull_request" (printf "%s/pulls/%s" (.GetRepoLink ctx) $index) $index (.ShortRepoPath ctx)}}
+ {{else if .GetOpType.InActions "comment_pull"}}
+ {{$index := index .GetIssueInfos 0}}
+ {{ctx.Locale.Tr "action.comment_pull" (printf "%s/pulls/%s" (.GetRepoLink ctx) $index) $index (.ShortRepoPath ctx)}}
+ {{else if .GetOpType.InActions "publish_release"}}
+ {{$linkText := .Content | ctx.RenderUtils.RenderEmoji}}
+ {{ctx.Locale.Tr "action.publish_release" (.GetRepoLink ctx) (printf "%s/releases/tag/%s" (.GetRepoLink ctx) .GetTag) (.ShortRepoPath ctx) $linkText}}
+ {{else if .GetOpType.InActions "pull_review_dismissed"}}
+ {{$index := index .GetIssueInfos 0}}
+ {{$reviewer := index .GetIssueInfos 1}}
+ {{ctx.Locale.Tr "action.review_dismissed" (printf "%s/pulls/%s" (.GetRepoLink ctx) $index) $index (.ShortRepoPath ctx) $reviewer}}
+ {{else if .GetOpType.InActions "auto_merge_pull_request"}}
+ {{$index := index .GetIssueInfos 0}}
+ {{ctx.Locale.Tr "action.auto_merge_pull_request" (printf "%s/pulls/%s" (.GetRepoLink ctx) $index) $index (.ShortRepoPath ctx)}}
+ {{end}}
+ {{DateUtils.TimeSince .GetCreate}}
+
+ {{if .GetOpType.InActions "commit_repo" "mirror_sync_push"}}
+ {{$push := ActionContent2Commits .}}
+ {{$repoLink := (.GetRepoLink ctx)}}
+ {{$repo := .Repo}}
+
+ {{range $push.Commits}}
+ {{$commitLink := printf "%s/commit/%s" $repoLink .Sha1}}
+
+
+
{{ShortSha .Sha1}}
+
+ {{ctx.RenderUtils.RenderCommitMessage .Message ($repo.ComposeMetas ctx)}}
+
+
+ {{end}}
+
+ {{if and (gt $push.Len 1) $push.CompareURL}}
+
{{ctx.Locale.Tr "action.compare_commits" $push.Len}} »
+ {{end}}
+ {{else if .GetOpType.InActions "create_issue"}}
+
{{index .GetIssueInfos 1 | ctx.RenderUtils.RenderIssueSimpleTitle}}
+ {{else if .GetOpType.InActions "create_pull_request"}}
+
{{index .GetIssueInfos 1 | ctx.RenderUtils.RenderIssueSimpleTitle}}
+ {{else if .GetOpType.InActions "comment_issue" "approve_pull_request" "reject_pull_request" "comment_pull"}}
+
{{(.GetIssueTitle ctx) | ctx.RenderUtils.RenderIssueSimpleTitle}}
+ {{$comment := index .GetIssueInfos 1}}
+ {{if $comment}}
+
{{ctx.RenderUtils.MarkdownToHtml $comment}}
+ {{end}}
+ {{else if .GetOpType.InActions "merge_pull_request"}}
+
{{index .GetIssueInfos 1}}
+ {{else if .GetOpType.InActions "close_issue" "reopen_issue" "close_pull_request" "reopen_pull_request"}}
+
{{(.GetIssueTitle ctx) | ctx.RenderUtils.RenderIssueSimpleTitle}}
+ {{else if .GetOpType.InActions "pull_review_dismissed"}}
+
{{ctx.Locale.Tr "action.review_dismissed_reason"}}
+
{{index .GetIssueInfos 2 | ctx.RenderUtils.RenderEmoji}}
+ {{end}}
+
+
+ {{svg (printf "octicon-%s" (ActionIcon .GetOpType)) 32 "text grey tw-mr-1"}}
+
+
+ {{end}}
+ {{template "base/paginate" .}}
+
diff --git a/user/dashboard/issues.tmpl b/user/dashboard/issues.tmpl
new file mode 100644
index 0000000..7924dd2
--- /dev/null
+++ b/user/dashboard/issues.tmpl
@@ -0,0 +1,108 @@
+{{template "base/head" .}}
+
+ {{template "user/dashboard/navbar" .}}
+
+ {{template "base/alert" .}}
+
+ {{$queryLink := QueryBuild "?" "type" $.ViewType "sort" $.SortType "state" $.State "q" $.Keyword "labels" .SelectLabels "fuzzy" $.IsFuzzy}}
+
+
+
+
+ {{$queryLinkWithFilter := QueryBuild $queryLink "poster" $.FilterPosterUsername "assignee" $.FilterAssigneeUsername}}
+
+
+ {{template "shared/issuelist" dict "." . "listType" "dashboard"}}
+
+
+
+
+{{template "base/footer" .}}
diff --git a/user/dashboard/milestones.tmpl b/user/dashboard/milestones.tmpl
new file mode 100644
index 0000000..c0059d3
--- /dev/null
+++ b/user/dashboard/milestones.tmpl
@@ -0,0 +1,157 @@
+{{template "base/head" .}}
+
+ {{template "user/dashboard/navbar" .}}
+
+
+
+
+
+
+
+
+ {{range .Milestones}}
+
+
+
+ {{if .Content}}
+
+ {{.RenderedContent}}
+
+ {{end}}
+
+ {{end}}
+
+ {{template "base/paginate" .}}
+
+
+
+
+
+
+{{template "base/footer" .}}
diff --git a/user/dashboard/navbar.tmpl b/user/dashboard/navbar.tmpl
new file mode 100644
index 0000000..a828bc9
--- /dev/null
+++ b/user/dashboard/navbar.tmpl
@@ -0,0 +1,107 @@
+
+
+
diff --git a/user/dashboard/repolist.tmpl b/user/dashboard/repolist.tmpl
new file mode 100644
index 0000000..a2764ba
--- /dev/null
+++ b/user/dashboard/repolist.tmpl
@@ -0,0 +1,59 @@
+
+
+
diff --git a/user/heatmap.tmpl b/user/heatmap.tmpl
new file mode 100644
index 0000000..b604b92
--- /dev/null
+++ b/user/heatmap.tmpl
@@ -0,0 +1,10 @@
+{{if .HeatmapData}}
+
+
+{{end}}
diff --git a/user/notification/notification.tmpl b/user/notification/notification.tmpl
new file mode 100644
index 0000000..b483c15
--- /dev/null
+++ b/user/notification/notification.tmpl
@@ -0,0 +1,3 @@
+{{template "base/head" .}}
+{{template "user/notification/notification_div" .}}
+{{template "base/footer" .}}
diff --git a/user/notification/notification_div.tmpl b/user/notification/notification_div.tmpl
new file mode 100644
index 0000000..0d2371a
--- /dev/null
+++ b/user/notification/notification_div.tmpl
@@ -0,0 +1,125 @@
+
+
+ {{$notificationUnreadCount := call .NotificationUnreadCount}}
+
+
+ {{if and (eq .Status 1)}}
+
+ {{$.CsrfTokenHtml}}
+
+
+ {{svg "octicon-checklist"}}
+
+
+
+ {{end}}
+
+
+
+ {{if not .Notifications}}
+
+ {{svg "octicon-inbox" 56 "tw-mb-4"}}
+ {{if eq .Status 1}}
+ {{ctx.Locale.Tr "notification.no_unread"}}
+ {{else}}
+ {{ctx.Locale.Tr "notification.no_read"}}
+ {{end}}
+
+ {{else}}
+ {{range $notification := .Notifications}}
+
+ {{end}}
+ {{end}}
+
+
+ {{template "base/paginate" .}}
+
+
diff --git a/user/notification/notification_subscriptions.tmpl b/user/notification/notification_subscriptions.tmpl
new file mode 100644
index 0000000..b92a32a
--- /dev/null
+++ b/user/notification/notification_subscriptions.tmpl
@@ -0,0 +1,79 @@
+{{template "base/head" .}}
+
+
+
+
+ {{if eq .Status 1}}
+
+
+ {{if not .Issues}}
+ {{ctx.Locale.Tr "notification.no_subscriptions"}}
+ {{else}}
+ {{template "shared/issuelist" dict "." . "listType" "dashboard"}}
+ {{end}}
+ {{else}}
+ {{template "shared/repo_search" .}}
+ {{template "explore/repo_list" .}}
+ {{template "base/paginate" .}}
+ {{end}}
+
+
+
+{{template "base/footer" .}}
diff --git a/user/overview/header.tmpl b/user/overview/header.tmpl
new file mode 100644
index 0000000..275c4e2
--- /dev/null
+++ b/user/overview/header.tmpl
@@ -0,0 +1,50 @@
+
diff --git a/user/overview/package_versions.tmpl b/user/overview/package_versions.tmpl
new file mode 100644
index 0000000..0ac2db0
--- /dev/null
+++ b/user/overview/package_versions.tmpl
@@ -0,0 +1,24 @@
+{{template "base/head" .}}
+{{if .ContextUser.IsOrganization}}
+
+ {{template "org/header" .}}
+
+ {{template "package/shared/versionlist" .}}
+
+
+{{else}}
+
+
+
+
+ {{template "shared/user/profile_big_avatar" .}}
+
+
+ {{template "user/overview/header" .}}
+ {{template "package/shared/versionlist" .}}
+
+
+
+
+{{end}}
+{{template "base/footer" .}}
diff --git a/user/overview/packages.tmpl b/user/overview/packages.tmpl
new file mode 100644
index 0000000..bb2238b
--- /dev/null
+++ b/user/overview/packages.tmpl
@@ -0,0 +1,24 @@
+{{template "base/head" .}}
+{{if .ContextUser.IsOrganization}}
+
+ {{template "org/header" .}}
+
+ {{template "package/shared/list" .}}
+
+
+{{else}}
+
+
+
+
+ {{template "shared/user/profile_big_avatar" .}}
+
+
+ {{template "user/overview/header" .}}
+ {{template "package/shared/list" .}}
+
+
+
+
+{{end}}
+{{template "base/footer" .}}
diff --git a/user/profile.tmpl b/user/profile.tmpl
new file mode 100644
index 0000000..cf61bb9
--- /dev/null
+++ b/user/profile.tmpl
@@ -0,0 +1,39 @@
+{{template "base/head" .}}
+
+
+
+
+ {{template "shared/user/profile_big_avatar" .}}
+
+
+ {{template "user/overview/header" .}}
+ {{if eq .TabName "activity"}}
+ {{if .ContextUser.KeepActivityPrivate}}
+
+
{{ctx.Locale.Tr "user.disabled_public_activity"}}
+
+ {{end}}
+ {{template "user/heatmap" .}}
+ {{template "user/dashboard/feeds" .}}
+ {{else if eq .TabName "stars"}}
+
+ {{template "shared/repo_search" .}}
+ {{template "explore/repo_list" .}}
+ {{template "base/paginate" .}}
+
+ {{else if eq .TabName "following"}}
+ {{template "repo/user_cards" .}}
+ {{else if eq .TabName "followers"}}
+ {{template "repo/user_cards" .}}
+ {{else if eq .TabName "overview"}}
+
{{.ProfileReadme}}
+ {{else}}
+ {{template "shared/repo_search" .}}
+ {{template "explore/repo_list" .}}
+ {{template "base/paginate" .}}
+ {{end}}
+
+
+
+
+{{template "base/footer" .}}
diff --git a/user/settings/account.tmpl b/user/settings/account.tmpl
new file mode 100644
index 0000000..27b0ef1
--- /dev/null
+++ b/user/settings/account.tmpl
@@ -0,0 +1,183 @@
+{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings account")}}
+
+
+
+ {{if and (not ($.UserDisabledFeatures.Contains "manage_credentials")) (or (.SignedUser.IsLocal) (.SignedUser.IsOAuth2))}}
+
+ {{template "base/disable_form_autofill"}}
+ {{.CsrfTokenHtml}}
+ {{if .SignedUser.IsPasswordSet}}
+
+ {{ctx.Locale.Tr "settings.old_password"}}
+
+
+ {{end}}
+
+ {{ctx.Locale.Tr "settings.new_password"}}
+
+
+
+ {{ctx.Locale.Tr "settings.retype_new_password"}}
+
+
+
+
+
+ {{else}}
+
+
{{ctx.Locale.Tr "settings.password_change_disabled"}}
+
+ {{end}}
+
+
+ {{if not (and ($.UserDisabledFeatures.Contains "manage_credentials") (not $.EnableNotifyMail))}}
+
+
+
+ {{if $.EnableNotifyMail}}
+
+
{{ctx.Locale.Tr "settings.email_desc"}}
+
+ {{$.CsrfTokenHtml}}
+
+
+
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
{{ctx.Locale.Tr "settings.email_notifications.submit"}}
+
+
+
+ {{end}}
+ {{if not ($.UserDisabledFeatures.Contains "manage_credentials")}}
+ {{range .Emails}}
+
+
+
{{.Email}}
+ {{if .IsPrimary}}
+
{{ctx.Locale.Tr "settings.primary"}}
+ {{end}}
+ {{if .IsActivated}}
+
{{ctx.Locale.Tr "settings.activated"}}
+ {{else}}
+
{{ctx.Locale.Tr "settings.requires_activation"}}
+ {{end}}
+
+
+ {{if not .IsPrimary}}
+
+ {{ctx.Locale.Tr "settings.delete_email"}}
+
+ {{if .CanBePrimary}}
+
+ {{$.CsrfTokenHtml}}
+
+
+ {{ctx.Locale.Tr "settings.primary_email"}}
+
+ {{end}}
+ {{end}}
+ {{if not .IsActivated}}
+
+ {{$.CsrfTokenHtml}}
+
+
+ {{if $.ActivationsPending}}
+ {{ctx.Locale.Tr "settings.activations_pending"}}
+ {{else}}
+ {{ctx.Locale.Tr "settings.activate_email"}}
+ {{end}}
+
+ {{end}}
+
+
+ {{end}}{{/* range Emails */}}
+ {{end}}{{/* if manage_credentials */}}
+
+
+ {{end}}
+
+ {{if not ($.UserDisabledFeatures.Contains "manage_credentials")}}
+
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "settings.add_new_email"}}
+
+
+
+ {{ctx.Locale.Tr "settings.add_email"}}
+
+
+ {{/* if ActivationsPending is false, then CanAddEmails must be true, so if CanAddEmails is false, ActivationsPending must be true */}}
+ {{if not .CanAddEmails}}
+
{{ctx.Locale.Tr "settings.can_not_add_email_activations_pending"}}
+ {{end}}
+
+ {{end}}
+
+ {{if not ($.UserDisabledFeatures.Contains "deletion")}}
+
+
+
+
{{svg "octicon-alert"}} {{ctx.Locale.Tr "settings.delete_prompt"}}
+ {{if .UserDeleteWithComments}}
+
{{ctx.Locale.Tr "settings.delete_with_all_comments" .UserDeleteWithCommentsMaxTime}}
+ {{end}}
+
+
+ {{template "base/disable_form_autofill"}}
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "password"}}
+
+
+
+
+ {{ctx.Locale.Tr "settings.confirm_delete_account"}}
+
+
+
+
+
+
+
{{ctx.Locale.Tr "settings.delete_account_desc"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+
+ {{end}}
+
+
+
+
+
+
{{ctx.Locale.Tr "settings.email_deletion_desc"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+
+{{template "user/settings/layout_footer" .}}
diff --git a/user/settings/actions.tmpl b/user/settings/actions.tmpl
new file mode 100644
index 0000000..abc5443
--- /dev/null
+++ b/user/settings/actions.tmpl
@@ -0,0 +1,12 @@
+{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings actions")}}
+
+ {{if eq .PageType "secrets"}}
+ {{template "shared/secrets/add_list" .}}
+ {{else if eq .PageType "runners"}}
+ {{template "shared/actions/runner_list" .}}
+ {{else if eq .PageType "variables"}}
+ {{template "shared/variables/variable_list" .}}
+ {{end}}
+
+
+{{template "user/settings/layout_footer" .}}
diff --git a/user/settings/appearance.tmpl b/user/settings/appearance.tmpl
new file mode 100644
index 0000000..4fa2489
--- /dev/null
+++ b/user/settings/appearance.tmpl
@@ -0,0 +1,157 @@
+{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings")}}
+
+
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+ {{ctx.Locale.Tr "settings.ui"}}
+
+ {{range $theme := .AllThemes}}
+ {{$theme}}
+ {{end}}
+
+
+
+ {{ctx.Locale.Tr "settings.update_theme"}}
+
+
+
+
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
{{range .AllLangs}}{{if eq $.SignedUser.Language .Lang}}{{.Name}}{{end}}{{end}}
+
+
+
+
+ {{ctx.Locale.Tr "settings.update_language"}}
+
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "settings.hidden_comment_types_description"}}
+
+
+ {{.CsrfTokenHtml}}
+
+
+
+ {{ctx.Locale.Tr "settings.comment_type_group_reference"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "settings.comment_type_group_label"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "settings.comment_type_group_milestone"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "settings.comment_type_group_assignee"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "settings.comment_type_group_title"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "settings.comment_type_group_branch"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "settings.comment_type_group_time_tracking"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "settings.comment_type_group_deadline"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "settings.comment_type_group_dependency"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "settings.comment_type_group_lock"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "settings.comment_type_group_review_request"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "settings.comment_type_group_pull_request_push"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "settings.comment_type_group_project"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "settings.comment_type_group_issue_ref"}}
+
+
+
+ {{ctx.Locale.Tr "save"}}
+
+
+
+
+{{template "user/settings/layout_footer" .}}
diff --git a/user/settings/applications.tmpl b/user/settings/applications.tmpl
new file mode 100644
index 0000000..31d1a2a
--- /dev/null
+++ b/user/settings/applications.tmpl
@@ -0,0 +1,115 @@
+{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings applications")}}
+
+
+
+
+
+ {{ctx.Locale.Tr "settings.tokens_desc"}}
+
+ {{range .Tokens}}
+
+
+
+ {{svg "fontawesome-send" 32}}
+
+
+
+
+ {{.Name}}
+
+ {{ctx.Locale.Tr "settings.repo_and_org_access"}}:
+ {{if .DisplayPublicOnly}}
+ {{ctx.Locale.Tr "settings.permissions_public_only"}}
+ {{else}}
+ {{ctx.Locale.Tr "settings.permissions_access_all"}}
+ {{end}}
+
+ {{ctx.Locale.Tr "settings.permissions_list"}}
+
+ {{range .Scope.StringSlice}}
+ {{if (ne . $.AccessTokenScopePublicOnly)}}
+ {{.}}
+ {{end}}
+ {{end}}
+
+
+
+ {{ctx.Locale.Tr "settings.added_on" (DateUtils.AbsoluteShort .CreatedUnix)}} — {{svg "octicon-info"}} {{if .HasUsed}}{{ctx.Locale.Tr "settings.last_used"}} {{DateUtils.AbsoluteShort .UpdatedUnix}} {{else}}{{ctx.Locale.Tr "settings.no_activity"}}{{end}}
+
+
+
+
+ {{svg "octicon-trash" 16 "tw-mr-1"}}
+ {{ctx.Locale.Tr "settings.delete_token"}}
+
+
+
+ {{end}}
+
+
+
+
+ {{if .EnableOAuth2}}
+ {{template "user/settings/grants_oauth2" .}}
+ {{template "user/settings/applications_oauth2" .}}
+ {{end}}
+
+
+
+
+
+
{{ctx.Locale.Tr "settings.access_token_deletion_desc"}}
+
+ {{template "base/modal_actions_confirm"}}
+
+
+{{template "user/settings/layout_footer" .}}
diff --git a/user/settings/applications_oauth2.tmpl b/user/settings/applications_oauth2.tmpl
new file mode 100644
index 0000000..866a1f8
--- /dev/null
+++ b/user/settings/applications_oauth2.tmpl
@@ -0,0 +1,6 @@
+
+
+{{template "user/settings/applications_oauth2_list" .}}
+
diff --git a/user/settings/applications_oauth2_edit.tmpl b/user/settings/applications_oauth2_edit.tmpl
new file mode 100644
index 0000000..2858ecd
--- /dev/null
+++ b/user/settings/applications_oauth2_edit.tmpl
@@ -0,0 +1,6 @@
+{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings applications")}}
+
+
+ {{template "user/settings/applications_oauth2_edit_form" .}}
+
+{{template "user/settings/layout_footer" .}}
diff --git a/user/settings/applications_oauth2_edit_form.tmpl b/user/settings/applications_oauth2_edit_form.tmpl
new file mode 100644
index 0000000..9447291
--- /dev/null
+++ b/user/settings/applications_oauth2_edit_form.tmpl
@@ -0,0 +1,60 @@
+
+
+
{{ctx.Locale.Tr "settings.oauth2_application_create_description"}}
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "settings.oauth2_application_name"}}
+
+
+
+ {{ctx.Locale.Tr "settings.oauth2_redirect_uris"}}
+ {{StringUtils.Join .App.RedirectURIs "\n"}}
+
+
+
+ {{ctx.Locale.Tr "settings.oauth2_confidential_client"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "settings.oauth2_skip_secondary_authorization"}}
+
+
+
+
+ {{ctx.Locale.Tr "settings.save_application"}}
+
+
+
diff --git a/user/settings/applications_oauth2_list.tmpl b/user/settings/applications_oauth2_list.tmpl
new file mode 100644
index 0000000..61098e1
--- /dev/null
+++ b/user/settings/applications_oauth2_list.tmpl
@@ -0,0 +1,80 @@
+
+
+
+ {{ctx.Locale.Tr "settings.oauth2_application_create_description"}}
+
+ {{range .Applications}}
+
+
+ {{svg "octicon-apps" 32}}
+
+
+
{{.Name}}
+
+ {{ctx.Locale.Tr "settings.oauth2_client_id"}}
+ {{.ClientID}}
+
+
+ {{$isBuiltin := and $.BuiltinApplications (index $.BuiltinApplications .ClientID)}}
+
+
+ {{end}}
+
+
+
+
+
+
{{ctx.Locale.Tr "settings.oauth2_application_remove_description"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "settings.oauth2_application_name"}}
+
+
+
+ {{ctx.Locale.Tr "settings.oauth2_redirect_uris"}}
+
+
+
+
+ {{ctx.Locale.Tr "settings.oauth2_confidential_client"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "settings.oauth2_skip_secondary_authorization"}}
+
+
+
+
+ {{ctx.Locale.Tr "settings.create_oauth2_application_button"}}
+
+
+
diff --git a/user/settings/blocked_users.tmpl b/user/settings/blocked_users.tmpl
new file mode 100644
index 0000000..e495b85
--- /dev/null
+++ b/user/settings/blocked_users.tmpl
@@ -0,0 +1,5 @@
+{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings blocked_users")}}
+
+ {{template "shared/user/blocked_users" .}}
+
+{{template "user/settings/layout_footer" .}}
diff --git a/user/settings/grants_oauth2.tmpl b/user/settings/grants_oauth2.tmpl
new file mode 100644
index 0000000..3f0f79c
--- /dev/null
+++ b/user/settings/grants_oauth2.tmpl
@@ -0,0 +1,40 @@
+
+
+
+
+ {{ctx.Locale.Tr "settings.authorized_oauth2_applications_description"}}
+
+ {{range .Grants}}
+
+
+ {{svg "octicon-key" 32}}
+
+
+
{{.Application.Name}}
+
+ {{ctx.Locale.Tr "settings.added_on" (DateUtils.AbsoluteShort .CreatedUnix)}}
+
+
+
+
+ {{ctx.Locale.Tr "settings.revoke_key"}}
+
+
+
+ {{end}}
+
+
+
+
+
+
{{ctx.Locale.Tr "settings.revoke_oauth2_grant_description"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+
diff --git a/user/settings/hook_new.tmpl b/user/settings/hook_new.tmpl
new file mode 100644
index 0000000..be21f59
--- /dev/null
+++ b/user/settings/hook_new.tmpl
@@ -0,0 +1,7 @@
+{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings new webhook")}}
+
+ {{$CustomHeaderTitle := ctx.Locale.Tr "repo.settings.update_webhook"}}
+ {{if .PageIsSettingsHooksNew}}{{$CustomHeaderTitle = ctx.Locale.Tr "repo.settings.add_webhook"}}{{end}}
+ {{template "webhook/new" (dict "ctxData" . "CustomHeaderTitle" $CustomHeaderTitle)}}
+
+{{template "user/settings/layout_footer" .}}
diff --git a/user/settings/hooks.tmpl b/user/settings/hooks.tmpl
new file mode 100644
index 0000000..477c333
--- /dev/null
+++ b/user/settings/hooks.tmpl
@@ -0,0 +1,5 @@
+{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings webhooks")}}
+
+ {{template "repo/settings/webhook/list" .}}
+
+{{template "user/settings/layout_footer" .}}
diff --git a/user/settings/keys.tmpl b/user/settings/keys.tmpl
new file mode 100644
index 0000000..e0f5e42
--- /dev/null
+++ b/user/settings/keys.tmpl
@@ -0,0 +1,11 @@
+{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings sshkeys")}}
+
+ {{if not ($.UserDisabledFeatures.Contains "manage_ssh_keys")}}
+ {{template "user/settings/keys_ssh" .}}
+ {{end}}
+ {{template "user/settings/keys_principal" .}}
+ {{if not ($.UserDisabledFeatures.Contains "manage_gpg_keys")}}
+ {{template "user/settings/keys_gpg" .}}
+ {{end}}
+
+{{template "user/settings/layout_footer" .}}
diff --git a/user/settings/keys_gpg.tmpl b/user/settings/keys_gpg.tmpl
new file mode 100644
index 0000000..e44a838
--- /dev/null
+++ b/user/settings/keys_gpg.tmpl
@@ -0,0 +1,123 @@
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+
+ {{ctx.Locale.Tr "settings.key_content"}}
+ {{.content}}
+
+ {{if .Err_Signature}}
+
+
{{ctx.Locale.Tr "settings.gpg_token_required"}}
+
+
+
{{ctx.Locale.Tr "settings.gpg_token"}}
+
+
+
{{ctx.Locale.Tr "settings.gpg_token_help"}}
+
{{printf `echo "%s" | gpg -a --default-key %s --detach-sig` .TokenToSign .PaddedKeyID}}
+
+
+
+ {{ctx.Locale.Tr "settings.gpg_token_signature"}}
+ {{.signature}}
+
+ {{end}}
+
+
+ {{ctx.Locale.Tr "settings.add_key"}}
+
+
+ {{ctx.Locale.Tr "cancel"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "settings.gpg_desc"}}
+ {{ctx.Locale.Tr "settings.gpg_helper" "https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/about-commit-signature-verification#gpg-commit-signature-verification"}}
+
+
+ {{range .GPGKeys}}
+
+
+ {{svg "octicon-key" 32}}
+
+
+ {{if .Verified}}
+
{{svg "octicon-verified"}} {{ctx.Locale.Tr "settings.gpg_key_verified"}}
+ {{end}}
+ {{if .Emails}}
+
{{svg "octicon-mail"}} {{ctx.Locale.Tr "settings.gpg_key_matched_identities"}} {{range .Emails}}{{.Email}} {{end}}
+ {{end}}
+
+ {{ctx.Locale.Tr "settings.key_id"}}: {{.PaddedKeyID}}
+ {{ctx.Locale.Tr "settings.subkeys"}}: {{range .SubsKey}} {{.PaddedKeyID}} {{end}}
+
+
+ {{ctx.Locale.Tr "settings.added_on" (DateUtils.AbsoluteShort .AddedUnix)}}
+ -
+ {{if not .ExpiredUnix.IsZero}}{{ctx.Locale.Tr "settings.valid_until_date" (DateUtils.AbsoluteShort .ExpiredUnix)}}{{else}}{{ctx.Locale.Tr "settings.valid_forever"}}{{end}}
+
+
+
+
+ {{if and (not .Verified) (eq $.VerifyingID .KeyID)}}
+
+
{{ctx.Locale.Tr "settings.gpg_token_required"}}
+
+ {{$.CsrfTokenHtml}}
+
+
+
+
+
{{ctx.Locale.Tr "settings.gpg_token"}}
+
+
+
{{ctx.Locale.Tr "settings.gpg_token_help"}}
+
{{printf `echo "%s" | gpg -a --default-key %s --detach-sig` $.TokenToSign .PaddedKeyID}}
+
+
+
+
+ {{ctx.Locale.Tr "settings.gpg_token_signature"}}
+ {{$.signature}}
+
+
+
+ {{ctx.Locale.Tr "settings.gpg_key_verify"}}
+
+
+ {{ctx.Locale.Tr "settings.cancel"}}
+
+
+
+ {{end}}
+ {{end}}
+
+
+
+
+
{{ctx.Locale.Tr "settings.gpg_key_deletion_desc"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+
diff --git a/user/settings/keys_principal.tmpl b/user/settings/keys_principal.tmpl
new file mode 100644
index 0000000..cf335f7
--- /dev/null
+++ b/user/settings/keys_principal.tmpl
@@ -0,0 +1,69 @@
+{{if .AllowPrincipals}}
+
+
+
+
+ {{ctx.Locale.Tr "settings.principal_desc"}}
+
+ {{range .Principals}}
+
+
+ {{svg "octicon-key" 32}}
+
+
+
{{.Name}}
+
+ {{ctx.Locale.Tr "settings.added_on" (DateUtils.AbsoluteShort .CreatedUnix)}} — {{svg "octicon-info" 16}} {{if .HasUsed}}{{ctx.Locale.Tr "settings.last_used"}} {{DateUtils.AbsoluteShort .UpdatedUnix}} {{else}}{{ctx.Locale.Tr "settings.no_activity"}}{{end}}
+
+
+
+
+ {{ctx.Locale.Tr "settings.delete_key"}}
+
+
+
+ {{end}}
+
+
+
+
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "settings.principal_content"}}
+
+
+
+
+
+ {{ctx.Locale.Tr "settings.add_new_principal"}}
+
+
+
+
+
+
+
+
+
{{ctx.Locale.Tr "settings.ssh_principal_deletion_desc"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+{{end}}
diff --git a/user/settings/keys_ssh.tmpl b/user/settings/keys_ssh.tmpl
new file mode 100644
index 0000000..b894ccd
--- /dev/null
+++ b/user/settings/keys_ssh.tmpl
@@ -0,0 +1,111 @@
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "settings.key_name"}}
+
+
+
+ {{ctx.Locale.Tr "settings.key_content"}}
+ {{.content}}
+
+
+
+ {{ctx.Locale.Tr "settings.add_key"}}
+
+
+ {{ctx.Locale.Tr "cancel"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "settings.ssh_desc"}}
+ {{ctx.Locale.Tr "settings.ssh_helper" "https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/connecting-to-github-with-ssh" "https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/troubleshooting-ssh"}}
+
+
+ {{if .DisableSSH}}
+
+ {{ctx.Locale.Tr "settings.ssh_signonly"}}
+
+ {{end}}
+ {{range $index, $key := .Keys}}
+
+
+ {{svg "octicon-key" 32}}
+
+
+ {{if .Verified}}
+
{{svg "octicon-verified"}}{{ctx.Locale.Tr "settings.ssh_key_verified"}}
+ {{end}}
+
{{.Name}}
+
+ {{.Fingerprint}}
+
+
+ {{ctx.Locale.Tr "settings.added_on" (DateUtils.AbsoluteShort .CreatedUnix)}} — {{svg "octicon-info"}} {{if .HasUsed}}{{ctx.Locale.Tr "settings.last_used"}} {{DateUtils.AbsoluteShort .UpdatedUnix}} {{else}}{{ctx.Locale.Tr "settings.no_activity"}}{{end}}
+
+
+
+
+ {{if and (not .Verified) (eq $.VerifyingFingerprint .Fingerprint)}}
+
+
{{ctx.Locale.Tr "settings.ssh_token_required"}}
+
+ {{$.CsrfTokenHtml}}
+
+
+
+
+
{{ctx.Locale.Tr "settings.ssh_token"}}
+
+
+
{{ctx.Locale.Tr "settings.ssh_token_help"}}
+
{{printf "echo -n '%s' | ssh-keygen -Y sign -n gitea -f /path_to_PrivateKey_or_RelatedPublicKey" $.TokenToSign}}
+
+
+
+
+ {{ctx.Locale.Tr "settings.ssh_token_signature"}}
+ {{$.signature}}
+
+
+
+ {{ctx.Locale.Tr "settings.ssh_key_verify"}}
+
+
+ {{ctx.Locale.Tr "settings.cancel"}}
+
+
+
+ {{end}}
+ {{end}}
+
+
+
+
+
{{ctx.Locale.Tr "settings.ssh_key_deletion_desc"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+
diff --git a/user/settings/layout_footer.tmpl b/user/settings/layout_footer.tmpl
new file mode 100644
index 0000000..46120d5
--- /dev/null
+++ b/user/settings/layout_footer.tmpl
@@ -0,0 +1,11 @@
+{{if false}}{{/* to make html structure "likely" complete to prevent IDE warnings */}}
+
+
+
+ {{/* block: user-setting-content */}}
+{{end}}
+
+
+
+
+{{template "base/footer" .}}
diff --git a/user/settings/layout_head.tmpl b/user/settings/layout_head.tmpl
new file mode 100644
index 0000000..dce496e
--- /dev/null
+++ b/user/settings/layout_head.tmpl
@@ -0,0 +1,13 @@
+{{template "base/head" .ctxData}}
+
+
+ {{template "user/settings/navbar" .ctxData}}
+
+ {{template "base/alert" .ctxData}}
+ {{/* block: user-setting-content */}}
+
+{{if false}}{{/* to make html structure "likely" complete to prevent IDE warnings */}}
+
+
+
+{{end}}
diff --git a/user/settings/navbar.tmpl b/user/settings/navbar.tmpl
new file mode 100644
index 0000000..c6c1551
--- /dev/null
+++ b/user/settings/navbar.tmpl
@@ -0,0 +1,64 @@
+
+
+
diff --git a/user/settings/organization.tmpl b/user/settings/organization.tmpl
new file mode 100644
index 0000000..16c27b5
--- /dev/null
+++ b/user/settings/organization.tmpl
@@ -0,0 +1,55 @@
+{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings organization")}}
+
+
+
+ {{if .Orgs}}
+
+ {{range .Orgs}}
+
+
+ {{ctx.AvatarUtils.Avatar . 28 "mini"}}
+
+
+
{{template "shared/user/name" .}}
+
+ {{.Description}}
+
+
+
+
+ {{$.CsrfTokenHtml}}
+ {{ctx.Locale.Tr "org.members.leave"}}
+
+
+
+
+ {{end}}
+
+ {{template "base/paginate" .}}
+ {{else}}
+ {{ctx.Locale.Tr "settings.orgs_none"}}
+ {{end}}
+
+
+
+
+
+
+
{{ctx.Locale.Tr "org.members.leave.detail" (` `|SafeHTML)}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+
+{{template "user/settings/layout_footer" .}}
diff --git a/user/settings/packages.tmpl b/user/settings/packages.tmpl
new file mode 100644
index 0000000..80853ea
--- /dev/null
+++ b/user/settings/packages.tmpl
@@ -0,0 +1,24 @@
+{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings packages")}}
+
+ {{template "package/shared/cleanup_rules/list" .}}
+ {{template "package/shared/cargo" .}}
+
+
+
+
+{{template "user/settings/layout_footer" .}}
diff --git a/user/settings/packages_cleanup_rules_edit.tmpl b/user/settings/packages_cleanup_rules_edit.tmpl
new file mode 100644
index 0000000..522b524
--- /dev/null
+++ b/user/settings/packages_cleanup_rules_edit.tmpl
@@ -0,0 +1,5 @@
+{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings packages")}}
+
+ {{template "package/shared/cleanup_rules/edit" .}}
+
+{{template "user/settings/layout_footer" .}}
diff --git a/user/settings/packages_cleanup_rules_preview.tmpl b/user/settings/packages_cleanup_rules_preview.tmpl
new file mode 100644
index 0000000..d99aee4
--- /dev/null
+++ b/user/settings/packages_cleanup_rules_preview.tmpl
@@ -0,0 +1,5 @@
+{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user packages admin")}}
+
+ {{template "package/shared/cleanup_rules/preview" .}}
+
+{{template "user/settings/layout_footer" .}}
diff --git a/user/settings/profile.tmpl b/user/settings/profile.tmpl
new file mode 100644
index 0000000..1977634
--- /dev/null
+++ b/user/settings/profile.tmpl
@@ -0,0 +1,143 @@
+{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings profile")}}
+
+
+
+
{{ctx.Locale.Tr "settings.profile_desc"}}
+
+ {{.CsrfTokenHtml}}
+
+
{{ctx.Locale.Tr "username"}}
+ {{ctx.Locale.Tr "settings.change_username_prompt"}}
+ {{ctx.Locale.Tr "settings.change_username_redirect_prompt"}}
+
+
+ {{if or (not .SignedUser.IsLocal) ($.UserDisabledFeatures.Contains "change_username") .IsReverseProxy}}
+
{{ctx.Locale.Tr "settings.password_username_disabled"}}
+ {{end}}
+
+
+
{{ctx.Locale.Tr "settings.full_name"}}
+
+ {{if ($.UserDisabledFeatures.Contains "change_full_name")}}
+
{{ctx.Locale.Tr "settings.password_full_name_disabled"}}
+ {{end}}
+
+
+
{{ctx.Locale.Tr "email"}}
+
{{.SignedUser.Email}}
+
+
+ {{/* it is rendered as markdown, but the length is limited, so at the moment we do not use the markdown editor here */}}
+ {{ctx.Locale.Tr "user.user_bio"}}
+ {{.SignedUser.Description}}
+
+
+ {{ctx.Locale.Tr "settings.website"}}
+
+
+
+ {{ctx.Locale.Tr "settings.location"}}
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "settings.privacy"}}
+
+
+
+
{{ctx.Locale.Tr "settings.visibility"}}
+
+ {{if .SignedUser.Visibility.IsPublic}}
{{end}}
+ {{if .SignedUser.Visibility.IsLimited}}
{{end}}
+ {{if .SignedUser.Visibility.IsPrivate}}
{{end}}
+
+ {{if .SignedUser.Visibility.IsPublic}}{{ctx.Locale.Tr "settings.visibility.public"}}{{end}}
+ {{if .SignedUser.Visibility.IsLimited}}{{ctx.Locale.Tr "settings.visibility.limited"}}{{end}}
+ {{if .SignedUser.Visibility.IsPrivate}}{{ctx.Locale.Tr "settings.visibility.private"}}{{end}}
+
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "settings.keep_email_private"}}
+
+
+
+
+
+
+ {{ctx.Locale.Tr "settings.keep_activity_private"}}
+
+
+
+
+
+
+
+ {{ctx.Locale.Tr "settings.update_profile"}}
+
+
+
+
+
+
+
+ {{.CsrfTokenHtml}}
+ {{if not .DisableGravatar}}
+
+
+
+ {{ctx.Locale.Tr "settings.lookup_avatar_by_mail"}}
+
+
+
+ Avatar {{ctx.Locale.Tr "email"}}
+
+
+ {{end}}
+
+
+
+
+ {{ctx.Locale.Tr "settings.enable_custom_avatar"}}
+
+
+
+
+ {{ctx.Locale.Tr "settings.choose_new_avatar"}}
+
+
+
+
+
{{ctx.Locale.Tr "settings.cropper_prompt"}}
+
+
+
+
+ {{ctx.Locale.Tr "settings.update_avatar"}}
+ {{ctx.Locale.Tr "settings.delete_current_avatar"}}
+
+
+
+
+{{template "user/settings/layout_footer" .}}
diff --git a/user/settings/repos.tmpl b/user/settings/repos.tmpl
new file mode 100644
index 0000000..a50fb58
--- /dev/null
+++ b/user/settings/repos.tmpl
@@ -0,0 +1,130 @@
+{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings repos")}}
+
+
+
+ {{if or .allowAdopt .allowDelete}}
+ {{if .Dirs}}
+
+ {{range $dirI, $dir := .Dirs}}
+ {{$repo := index $.ReposMap $dir}}
+
{{/* if not repo, then there are "adapt" buttons, so the padding shouldn't be that default large*/}}
+
+ {{if $repo}}
+ {{if $repo.IsPrivate}}
+
{{svg "octicon-lock"}}
+ {{else if $repo.IsFork}}
+
{{svg "octicon-repo-forked"}}
+ {{else if $repo.IsMirror}}
+
{{svg "octicon-mirror"}}
+ {{else if $repo.IsTemplate}}
+
{{svg "octicon-repo-template"}}
+ {{else}}
+
{{svg "octicon-repo"}}
+ {{end}}
+
{{$repo.OwnerName}}/{{$repo.Name}}
+
{{FileSize $repo.Size}}
+ {{if $repo.IsFork}}
+ {{ctx.Locale.Tr "repo.forked_from"}}
+
{{$repo.BaseRepo.OwnerName}}/{{$repo.BaseRepo.Name}}
+ {{end}}
+ {{else}}
+
{{svg "octicon-file-directory-fill"}}
+
{{$.ContextUser.Name}}/{{$dir}}
+
+ {{if $.allowAdopt}}
+
{{svg "octicon-plus"}} {{ctx.Locale.Tr "repo.adopt_preexisting_label"}}
+
+
+
+
{{ctx.Locale.Tr "repo.adopt_preexisting_content" $dir}}
+
+
+ {{$.CsrfTokenHtml}}
+
+
+ {{template "base/modal_actions_confirm" $}}
+
+
+ {{end}}
+ {{if $.allowDelete}}
+
{{svg "octicon-x"}} {{ctx.Locale.Tr "repo.delete_preexisting_label"}}
+
+
+
+
{{ctx.Locale.Tr "repo.delete_preexisting_content" $dir}}
+
+
+ {{$.CsrfTokenHtml}}
+
+
+ {{template "base/modal_actions_confirm" $}}
+
+
+ {{end}}
+
+ {{end}}
+
+
+ {{end}}
+
+ {{template "base/paginate" .}}
+ {{else}}
+
+ {{ctx.Locale.Tr "settings.repos_none"}}
+
+ {{end}}
+ {{else}}
+ {{if .Repos}}
+
+ {{range .Repos}}
+
+
+ {{if .IsPrivate}}
+ {{svg "octicon-lock" 16 "text gold"}}
+ {{else if .IsFork}}
+ {{svg "octicon-repo-forked"}}
+ {{else if .IsMirror}}
+ {{svg "octicon-mirror"}}
+ {{else if .IsTemplate}}
+ {{svg "octicon-repo-template"}}
+ {{else}}
+ {{svg "octicon-repo"}}
+ {{end}}
+
{{.OwnerName}}/{{.Name}}
+
{{FileSize .Size}}
+ {{if .IsFork}}
+ {{ctx.Locale.Tr "repo.forked_from"}}
+
{{.BaseRepo.OwnerName}}/{{.BaseRepo.Name}}
+ {{end}}
+
+
+ {{end}}
+
+ {{template "base/paginate" .}}
+ {{else}}
+
+ {{ctx.Locale.Tr "settings.repos_none"}}
+
+ {{end}}
+ {{end}}
+
+
+
+
+
+
+
{{ctx.Locale.Tr "settings.remove_account_link_desc"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+
+{{template "user/settings/layout_footer" .}}
diff --git a/user/settings/runner_edit.tmpl b/user/settings/runner_edit.tmpl
new file mode 100644
index 0000000..90c58c1
--- /dev/null
+++ b/user/settings/runner_edit.tmpl
@@ -0,0 +1,5 @@
+{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings runners")}}
+
+ {{template "shared/actions/runner_edit" .}}
+
+{{template "user/settings/layout_footer" .}}
diff --git a/user/settings/security/accountlinks.tmpl b/user/settings/security/accountlinks.tmpl
new file mode 100644
index 0000000..0820844
--- /dev/null
+++ b/user/settings/security/accountlinks.tmpl
@@ -0,0 +1,62 @@
+{{/* No account links, no way to add account links: Menu will not be shown. */}}
+{{if or .AccountLinks .OrderedOAuth2Names}}
+
+
+
+
+
+ {{ctx.Locale.Tr "settings.manage_account_links_desc"}}
+
+ {{range $loginSource, $provider := .AccountLinks}}
+
+ {{$providerData := index $.OAuth2Providers $loginSource.Name}}
+
+ {{$providerData.IconHTML 20}}
+
+
+
+ {{$loginSource.Name}}
+
+ {{if $loginSource.IsActive}}
+ {{ctx.Locale.Tr "repo.settings.active"}}
+ {{end}}
+
+
+
+ {{ctx.Locale.Tr "settings.delete_key"}}
+
+
+
+ {{end}}
+
+
+
+
+
+
{{ctx.Locale.Tr "settings.remove_account_link_desc"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+
+{{end}}
diff --git a/user/settings/security/openid.tmpl b/user/settings/security/openid.tmpl
new file mode 100644
index 0000000..87ba953
--- /dev/null
+++ b/user/settings/security/openid.tmpl
@@ -0,0 +1,63 @@
+
+
+
+
+ {{ctx.Locale.Tr "settings.openid_desc"}}
+
+ {{range .OpenIDs}}
+
+
+ {{svg "fontawesome-openid" 20}}
+
+
+
+
+ {{$.CsrfTokenHtml}}
+
+ {{if .Show}}
+
+ {{svg "octicon-eye" 16 "icon"}}
+ {{ctx.Locale.Tr "settings.hide_openid"}}
+
+ {{else}}
+
+ {{svg "octicon-eye-closed" 16 "icon"}}
+ {{ctx.Locale.Tr "settings.show_openid"}}
+
+ {{end}}
+
+
+ {{ctx.Locale.Tr "settings.delete_key"}}
+
+
+
+ {{end}}
+
+
+
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "settings.add_new_openid"}}
+
+
+
+ {{ctx.Locale.Tr "settings.add_openid"}}
+
+
+
+
+
+
+
{{ctx.Locale.Tr "settings.openid_deletion_desc"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+
diff --git a/user/settings/security/security.tmpl b/user/settings/security/security.tmpl
new file mode 100644
index 0000000..d9403cf
--- /dev/null
+++ b/user/settings/security/security.tmpl
@@ -0,0 +1,17 @@
+{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings security")}}
+ {{if not ($.UserDisabledFeatures.Contains "manage_mfa" "manage_credentials")}}
+
+ {{if not ($.UserDisabledFeatures.Contains "manage_mfa")}}
+ {{template "user/settings/security/twofa" .}}
+ {{template "user/settings/security/webauthn" .}}
+ {{end}}
+ {{if not ($.UserDisabledFeatures.Contains "manage_credentials")}}
+ {{template "user/settings/security/accountlinks" .}}
+ {{if .EnableOpenIDSignIn}}
+ {{template "user/settings/security/openid" .}}
+ {{end}}
+ {{end}}
+
+ {{end}}
+
+{{template "user/settings/layout_footer" .}}
diff --git a/user/settings/security/twofa.tmpl b/user/settings/security/twofa.tmpl
new file mode 100644
index 0000000..adebce4
--- /dev/null
+++ b/user/settings/security/twofa.tmpl
@@ -0,0 +1,37 @@
+
+
+
{{ctx.Locale.Tr "settings.twofa_desc"}}
+ {{if .TOTPEnrolled}}
+
{{ctx.Locale.Tr "settings.twofa_is_enrolled"}}
+
+ {{.CsrfTokenHtml}}
+ {{ctx.Locale.Tr "settings.regenerate_scratch_token_desc"}}
+ {{ctx.Locale.Tr "settings.twofa_scratch_token_regenerate"}}
+
+
+ {{.CsrfTokenHtml}}
+ {{ctx.Locale.Tr "settings.twofa_disable_note"}}
+ {{ctx.Locale.Tr "settings.twofa_disable"}}
+
+ {{else}}
+ {{/* The recovery tip is there as a means of encouraging a user to enroll */}}
+
{{ctx.Locale.Tr "settings.twofa_recovery_tip"}}
+
{{ctx.Locale.Tr "settings.twofa_not_enrolled"}}
+
+ {{end}}
+
+
+
+
+
{{ctx.Locale.Tr "settings.twofa_disable_desc"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+
diff --git a/user/settings/security/twofa_enroll.tmpl b/user/settings/security/twofa_enroll.tmpl
new file mode 100644
index 0000000..d6bfadf
--- /dev/null
+++ b/user/settings/security/twofa_enroll.tmpl
@@ -0,0 +1,25 @@
+{{template "user/settings/layout_head" (dict "ctxData" . "pageClass" "user settings twofa")}}
+
+
+
+
{{ctx.Locale.Tr "settings.scan_this_image"}}
+
+
{{ctx.Locale.Tr "settings.or_enter_secret" .TwofaSecret}}
+
{{ctx.Locale.Tr "settings.then_enter_passcode"}}
+
+ {{.CsrfTokenHtml}}
+
+ {{ctx.Locale.Tr "passcode"}}
+
+
+
+
+ {{ctx.Locale.Tr "auth.verify"}}
+
+
+
+
+
+{{template "user/settings/layout_footer" .}}
diff --git a/user/settings/security/webauthn.tmpl b/user/settings/security/webauthn.tmpl
new file mode 100644
index 0000000..149b7eb
--- /dev/null
+++ b/user/settings/security/webauthn.tmpl
@@ -0,0 +1,43 @@
+
+
+
{{ctx.Locale.Tr "settings.webauthn_desc" "https://w3c.github.io/webauthn/#webauthn-authenticator"}}
+
{{ctx.Locale.Tr "settings.webauthn_key_loss_warning"}} {{ctx.Locale.Tr "settings.webauthn_alternative_tip"}}
+ {{template "user/auth/webauthn_error" .}}
+
+ {{range .WebAuthnCredentials}}
+
+
+ {{svg "octicon-key" 32}}
+
+
+
{{.Name}}
+
+ {{ctx.Locale.Tr "settings.added_on" (DateUtils.AbsoluteShort .CreatedUnix)}}
+
+
+
+
+ {{ctx.Locale.Tr "settings.delete_key"}}
+
+
+
+ {{end}}
+
+
+
+
+
+
{{ctx.Locale.Tr "settings.webauthn_delete_key_desc"}}
+
+ {{template "base/modal_actions_confirm" .}}
+
+
diff --git a/webhook/new.tmpl b/webhook/new.tmpl
new file mode 100644
index 0000000..8ef33df
--- /dev/null
+++ b/webhook/new.tmpl
@@ -0,0 +1,25 @@
+
+
+ {{template "repo/settings/webhook/gitea" .ctxData}}
+ {{template "repo/settings/webhook/gogs" .ctxData}}
+ {{template "repo/settings/webhook/slack" .ctxData}}
+ {{template "repo/settings/webhook/discord" .ctxData}}
+ {{template "repo/settings/webhook/dingtalk" .ctxData}}
+ {{template "repo/settings/webhook/telegram" .ctxData}}
+ {{template "repo/settings/webhook/msteams" .ctxData}}
+ {{template "repo/settings/webhook/feishu" .ctxData}}
+ {{template "repo/settings/webhook/matrix" .ctxData}}
+ {{template "repo/settings/webhook/wechatwork" .ctxData}}
+ {{template "repo/settings/webhook/packagist" .ctxData}}
+
+{{template "repo/settings/webhook/history" .ctxData}}