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")}} +
+

+ {{ctx.Locale.Tr "settings.applications"}} +

+ {{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")}} +
+

+ {{ctx.Locale.Tr "admin.auths.edit"}} +

+
+
+ {{template "base/disable_form_autofill"}} + {{.CsrfTokenHtml}} + +
+ + + {{.Source.TypeName}} +
+
+ + +
+ + + {{if or .Source.IsLDAP .Source.IsDLDAP}} + {{$cfg:=.Source.Cfg}} +
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ {{if .Source.IsLDAP}} +
+ + +
+
+ + +
+ {{end}} +
+ + +
+ {{if .Source.IsDLDAP}} +
+ + +
+ {{end}} +
+ + +
+
+ + +
+
+ + +

{{ctx.Locale.Tr "admin.auths.restricted_filter_helper"}}

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + + {{if .Source.IsLDAP}} +
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ {{end}} +
+
+ + +

{{ctx.Locale.Tr "admin.auths.skip_local_two_fa_helper"}}

+
+
+
+
+ + +
+
+ {{end}} + + + {{if .Source.IsSMTP}} + {{$cfg:=.Source.Cfg}} +
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+

{{ctx.Locale.Tr "admin.auths.force_smtps_helper"}}

+
+
+
+ + +
+
+
+ + +

{{ctx.Locale.Tr "admin.auths.helo_hostname_helper"}}

+
+
+
+ + +
+
+
+ + +

{{ctx.Locale.Tr "admin.auths.allowed_domains_helper"}}

+
+
+
+ + +

{{ctx.Locale.Tr "admin.auths.skip_local_two_fa_helper"}}

+
+
+ {{end}} + + + {{if .Source.IsPAM}} + {{$cfg:=.Source.Cfg}} +
+ + +
+
+ + +
+
+
+ + +

{{ctx.Locale.Tr "admin.auths.skip_local_two_fa_helper"}}

+
+
+ {{end}} + + + {{if .Source.IsOAuth2}} + {{$cfg:=.Source.Cfg}} +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +

{{ctx.Locale.Tr "admin.auths.skip_local_two_fa_helper"}}

+
+
+
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + {{range .OAuth2Providers}}{{if .CustomURLSettings}} + + + + + + + {{end}}{{end}} + +
+ + +
+
+ + +

{{ctx.Locale.Tr "admin.auths.oauth2_required_claim_name_helper"}}

+
+
+ + +

{{ctx.Locale.Tr "admin.auths.oauth2_required_claim_value_helper"}}

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ {{end}} + + + {{if .Source.IsSSPI}} + {{$cfg:=.Source.Cfg}} +
+
+ + +

{{ctx.Locale.Tr "admin.auths.sspi_auto_create_users_helper"}}

+
+
+
+
+ + +

{{ctx.Locale.Tr "admin.auths.sspi_auto_activate_users_helper"}}

+
+
+
+
+ + +

{{ctx.Locale.Tr "admin.auths.sspi_strip_domain_names_helper"}}

+
+
+
+ + +

{{ctx.Locale.Tr "admin.auths.sspi_separator_replacement_helper"}}

+
+
+ + +

{{ctx.Locale.Tr "admin.auths.sspi_default_language_helper"}}

+
+ {{end}} + {{if (or .Source.IsLDAP .Source.IsOAuth2)}} +
+
+ + +
+
+ {{end}} +
+
+ + +
+
+ +
+ + +
+
+
+ +

+ {{ctx.Locale.Tr "admin.auths.tips"}} +

+
+
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"}}

+
+
+ + + +{{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")}} +
+

+ {{ctx.Locale.Tr "admin.auths.auth_manage_panel"}} ({{ctx.Locale.Tr "admin.total" .Total}}) + +

+
+ + + + + + + + + + + + + + {{range .Sources}} + + + + + + + + + + {{end}} + +
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"}}
{{.ID}}{{.Name}}{{.TypeName}}{{svg (Iif .IsActive "octicon-check" "octicon-x")}}{{DateUtils.AbsoluteShort .UpdatedUnix}}{{DateUtils.AbsoluteShort .CreatedUnix}}{{svg "octicon-pencil"}}
+
+
+{{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")}} +
+

+ {{ctx.Locale.Tr "admin.auths.new"}} +

+
+
+ {{template "base/disable_form_autofill"}} + {{.CsrfTokenHtml}} + +
+ + +
+
+ + +
+ + + {{template "admin/auth/source/ldap" .}} + + + {{template "admin/auth/source/smtp" .}} + + +
+ + + + +
+
+
+ + +

{{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.tips"}} +

+
+
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.tip.oauth2_provider"}}
+
+
  • 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.restricted_filter_helper"}}

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    + + +
    +
    + + +
    +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    +
    + + +

    {{ctx.Locale.Tr "admin.auths.skip_local_two_fa_helper"}}

    +
    +
    +
    +
    + + +
    +
    +
    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.skip_local_two_fa_helper"}}

    +
    +
    + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    + + {{range .OAuth2Providers}}{{if .CustomURLSettings}} + + + + + + + {{end}}{{end}} + +
    + + +
    +
    + + +

    {{ctx.Locale.Tr "admin.auths.oauth2_required_claim_name_helper"}}

    +
    +
    + + +

    {{ctx.Locale.Tr "admin.auths.oauth2_required_claim_value_helper"}}

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    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.force_smtps_helper"}}

    +
    +
    +
    +
    + + +
    +
    +
    + + +

    {{ctx.Locale.Tr "admin.auths.helo_hostname_helper"}}

    +
    +
    +
    + + +
    +
    +
    + + +

    {{ctx.Locale.Tr "admin.auths.allowed_domains_helper"}}

    +
    +
    +
    + + +

    {{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_helper"}}

    +
    +
    +
    +
    + + +

    {{ctx.Locale.Tr "admin.auths.sspi_auto_activate_users_helper"}}

    +
    +
    +
    +
    + + +

    {{ctx.Locale.Tr "admin.auths.sspi_strip_domain_names_helper"}}

    +
    +
    +
    + + +

    {{ctx.Locale.Tr "admin.auths.sspi_separator_replacement_helper"}}

    +
    +
    + + +

    {{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.server_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_config"}} +

    +
    +
    +
    {{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_config"}} +

    +
    +
    +
    {{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_config"}} +

    +
    +
    +
    {{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.service_config"}} +

    +
    +
    +
    {{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.webhook_config"}} +

    +
    +
    +
    {{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_config"}} +

    +
    +
    +
    {{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}} +
    + +
    + +
    +
    + {{end}} +
    +
    + +

    + {{ctx.Locale.Tr "admin.config.cache_config"}} +

    +
    +
    +
    {{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 "admin.config.session_config"}} +

    +
    +
    +
    {{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_config"}} +

    +
    +
    +
    {{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"}}
    +
    +
    + +

    + {{ctx.Locale.Tr "admin.config.log_config"}} +

    +
    +
    + {{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.picture_config"}} +

    +
    +
    +
    {{ctx.Locale.Tr "admin.config.disable_gravatar"}}
    +
    +
    + +
    +
    +
    +
    {{ctx.Locale.Tr "admin.config.enable_federated_avatar"}}
    +
    +
    + +
    +
    +
    +
    + +

    + {{ctx.Locale.Tr "repository"}} +

    +
    +
    +
    +
    + {{ctx.Locale.Tr "admin.config.open_with_editor_app_help"}} +
    {{.DefaultOpenWithEditorAppsString}}
    +
    +
    +
    + +
    +
    + +
    +
    +
    +{{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.cron"}} +

    +
    +
    + + + + + + + + + + + + + + {{range .Entries}} + + + + + + + + + + {{end}} + +
    {{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"}}
    {{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}}
    + + {{.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}} +

    + {{ctx.Locale.Tr "admin.dashboard.maintenance_operations"}} +

    +
    +
    + {{.CsrfTokenHtml}} + + + + + + + + + + + + + + + + + + + {{if and (not .SSH.Disabled) (not .SSH.StartBuiltinServer)}} + + + + + + + + + {{end}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    {{ctx.Locale.Tr "admin.dashboard.delete_inactive_accounts"}}
    {{ctx.Locale.Tr "admin.dashboard.delete_repo_archives"}}
    {{ctx.Locale.Tr "admin.dashboard.delete_missing_repos"}}
    {{ctx.Locale.Tr "admin.dashboard.git_gc_repos"}}
    {{ctx.Locale.Tr "admin.dashboard.resync_all_sshkeys"}}
    {{ctx.Locale.Tr "admin.dashboard.resync_all_sshprincipals"}}
    {{ctx.Locale.Tr "admin.dashboard.resync_all_hooks"}}
    {{ctx.Locale.Tr "admin.dashboard.reinit_missing_repos"}}
    {{ctx.Locale.Tr "admin.dashboard.sync_external_users"}}
    {{ctx.Locale.Tr "admin.dashboard.repo_health_check"}}
    {{ctx.Locale.Tr "admin.dashboard.delete_generated_repository_avatars"}}
    {{ctx.Locale.Tr "admin.dashboard.sync_repo_branches"}}
    {{ctx.Locale.Tr "admin.dashboard.sync_repo_tags"}}
    +
    +
    + +

    + {{ctx.Locale.Tr "admin.dashboard.system_status"}} +

    + {{/* 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.emails.email_manage_panel"}} ({{ctx.Locale.Tr "admin.total" .Total}}) +

    +
    + +
    +
    + + + + + + + + + + + + + {{range .Emails}} + + + + + + + + + {{end}} + +
    + {{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"}}
    {{.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"}} +
    +
    + + {{template "base/paginate" .}} + + +
    + +{{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")}} +
    +

    + {{ctx.Locale.Tr "admin.notices.system_notice_list"}} ({{ctx.Locale.Tr "admin.total" .Total}}) +

    + + + + + + + + + + + + + {{range .Notices}} + + + + + + + + + {{end}} + + {{if .Notices}} + + + + + + + {{end}} +
    ID{{ctx.Locale.Tr "admin.notices.type"}}{{ctx.Locale.Tr "admin.notices.desc"}}{{ctx.Locale.Tr "admin.users.created"}}{{ctx.Locale.Tr "admin.notices.op"}}
    {{.ID}}{{ctx.Locale.Tr .TrStr}}{{.Description}}{{DateUtils.AbsoluteShort .CreatedUnix}}{{svg "octicon-note" 16}}
    +
    + {{.CsrfTokenHtml}} + +
    + + +
    + {{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")}} +
    +

    + {{ctx.Locale.Tr "admin.orgs.org_manage_panel"}} ({{ctx.Locale.Tr "admin.total" .Total}}) + +

    +
    + +
    +
    + + + + + + + + + + + + + + {{range .Users}} + + + + + + + + + + {{end}} + +
    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}} +
    {{.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"}}
    +
    + + {{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")}} +
    +

    + {{ctx.Locale.Tr "admin.packages.package_manage_panel"}} ({{ctx.Locale.Tr "admin.total" .TotalCount}}, + {{ctx.Locale.Tr "admin.packages.total_size" (FileSize .TotalBlobSize)}}, + {{ctx.Locale.Tr "admin.packages.unreferenced_size" (FileSize .TotalUnreferencedBlobSize)}}) +
    +
    + {{.CsrfTokenHtml}} + +
    +
    +

    +
    +
    +
    + {{template "shared/search/input" dict "Value" .Query}} + + {{template "shared/search/button"}} +
    +
    +
    +
    + + + + + + + + + + + + + + + + + {{range .PackageDescriptors}} + + + + + + + + + + + + + {{end}} + +
    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"}}
    {{.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"}}
    +
    + + {{template "base/paginate" .}} +
    + + + +{{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.queues"}} +

    +
    + + + + + + + + + + + + + + {{range $qid, $q := .Queues}} + + + + + + + + + + {{end}} + +
    {{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"}}
    {{$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"}}
    +
    +
    +{{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" .Queue.GetName}} +

    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    {{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}} + +
    + {{end}} +
    +
    + +

    + {{ctx.Locale.Tr "admin.monitor.queue.settings.title"}} +

    +
    +

    {{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")}} +
    +

    + {{ctx.Locale.Tr "admin.repos.repo_manage_panel"}} ({{ctx.Locale.Tr "admin.total" .Total}}) + +

    +
    + {{template "shared/repo_search" .}} +
    +
    + + + + + + + + + + + + + + + + + + + {{range .Repos}} + + + + + + + + + + + + + + + {{end}} + +
    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"}}
    {{.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"}}
    +
    + + {{template "base/paginate" .}} +
    + + + +{{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")}} +
    +

    + {{ctx.Locale.Tr "admin.repos.unadopted"}} + +

    +
    +
    +
    + + + {{template "shared/search/button"}} +
    +
    +
    + {{if .search}} +
    + {{if .Dirs}} +
    + {{range $dirI, $dir := .Dirs}} +
    + {{svg "octicon-file-directory-fill"}} {{$dir}} +
    + + + + +
    +
    + {{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")}} + +
    +

    + {{ctx.Locale.Tr "admin.self_check"}} +

    + + {{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}} +
    +
    +
    {{.Process.Description}}
    +
    {{if ne .Process.Type "none"}}{{DateUtils.TimeSince .Process.Start}}{{end}}
    +
    +
    + {{if or (eq .Process.Type "request") (eq .Process.Type "normal")}} + {{svg "octicon-trash" 16 "text-red"}} + {{end}} +
    +
    + {{if .Process.Stacks}} +
    + {{range .Process.Stacks}} +
    +
    + +
    +
    + {{svg "octicon-code" 16}}{{.Description}}{{if gt .Count 1}} * {{.Count}}{{end}} +
    +
    + {{range .Labels}} +
    {{.Name}}
    {{.Value}}
    + {{end}} +
    +
    +
    +
    + {{range .Entry}} +
    + {{svg "octicon-dot-fill" 16}} +
    +
    {{.Function}}
    +
    {{.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 "tool.raw_seconds"}} +
    +
    +
    + +
    + +

    + {{printf "%d Goroutines" .GoroutineCount}}{{/* Goroutine is non-translatable*/}} + {{- if .ProcessCount -}}, {{ctx.Locale.Tr "admin.monitor.processes_count" .ProcessCount}}{{- end -}} +

    + + {{if .ProcessStacks}} +
    +
    + {{range .ProcessStacks}} + {{template "admin/stacktrace-row" dict "Process" . "root" $}} + {{end}} +
    +
    + {{end}} +
    + + + +{{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")}} +
    +

    + {{ctx.Locale.Tr "admin.dashboard.statistic"}} +

    +
    + + {{range $statsKey := .StatsKeys}} + + + + + {{end}} +
    {{$statsKey}}{{index $.StatsCounter $statsKey}}
    +
    +
    +{{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")}} +
    +

    + {{ctx.Locale.Tr "admin.users.edit_account"}} +

    +
    +
    + {{template "base/disable_form_autofill"}} + {{.CsrfTokenHtml}} +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +

    {{ctx.Locale.Tr "admin.users.password_helper"}}

    +
    + +
    + + +
    + +
    + + +
    +
    + + +
    + +
    + +
    + + +

    {{ctx.Locale.Tr "admin.users.max_repo_creation_desc"}}

    +
    + +
    + +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    + {{if not .DisableRegularOrgCreation}} +
    +
    + + +
    +
    + {{end}} + + {{if .TwoFactorEnabled}} +
    +
    +
    + + +
    +
    + {{end}} + +
    + +
    + + +
    +
    +
    + +

    + {{ctx.Locale.Tr "settings.avatar"}} +

    +
    +
    + {{.CsrfTokenHtml}} + {{if not .DisableGravatar}} +
    +
    + + +
    +
    +
    + + +
    + {{end}} + +
    +
    + + +
    +
    + +
    + + +
    + +
    + + +
    +
    +
    +
    + + + +{{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")}} +
    +

    + {{ctx.Locale.Tr "admin.users.user_manage_panel"}} ({{ctx.Locale.Tr "admin.total" .Total}}) + +

    +
    +
    +
    + {{template "shared/search/combo" dict "Value" .Keyword "Placeholder" (ctx.Locale.Tr "search.user_kind")}} +
    + + +
    +
    +
    + + + + + + + + + + + + + + + + {{range .Users}} + + + + + + + + + {{if .LastLoginUnix}} + + {{else}} + + {{end}} + + + {{end}} + +
    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}} +
    {{.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}}{{DateUtils.AbsoluteShort .LastLoginUnix}}{{ctx.Locale.Tr "admin.users.never_login"}} + +
    +
    + + {{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")}} +
    +

    + {{ctx.Locale.Tr "admin.users.new_account"}} +

    +
    +
    + {{template "base/disable_form_autofill"}} + {{.CsrfTokenHtml}} + +
    + + +
    + +
    + + +
    + +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    + +
    +
    + + +
    +
    + + + {{if .CanSendEmail}} +
    +
    + + +
    +
    + {{end}} + +
    + +
    +
    +
    +
    +{{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")}} + +
    +
    +
    +

    + {{.Title}} + +

    +
    + {{template "admin/user/view_details" .}} +
    +
    +
    +

    + {{ctx.Locale.Tr "admin.emails"}} +
    + {{.EmailsTotal}} +
    +

    +
    + {{template "admin/user/view_emails" .}} +
    +
    +
    +

    + {{ctx.Locale.Tr "admin.repositories"}} +
    + {{.ReposTotal}} +
    +

    +
    + {{template "explore/repo_list" .}} +
    +

    + {{ctx.Locale.Tr "settings.organization"}} +
    + {{.OrgsTotal}} +
    +

    +
    + {{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" .}} + +
    + + + {{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}} + + 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 @@ +
    +
    + {{.FilePath}} + {{$link := HTMLFormat `%s` .RepoLink .CommitID (.CommitID | ShortSha) -}} + {{- if eq .LineStart .LineStop -}} + {{ctx.Locale.Tr "repo.code_preview_line_in" .LineStart $link}} + {{- else -}} + {{ctx.Locale.Tr "repo.code_preview_line_from_to" .LineStart .LineStop $link}} + {{- end}} +
    + + + {{- range $idx, $line := .HighlightLines -}} + + + {{- if $.EscapeStatus.Escaped -}} + {{- $lineEscapeStatus := index $.LineEscapeStatus $idx -}} + + {{- end}} + {{/* only div works, span generates incorrect HTML structure */}} + + {{- end -}} + +
    {{if $lineEscapeStatus.Escaped}}{{end}}
    {{$line.FormattedContent}}
    +
    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}} + + {{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}} + + + {{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"}} + + + +{{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". +
    +
    + + + + +
    +
    +
    +

    form-fetch-action

    +
    Use "window.fetch" to send a form request to backend
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    bad action url
    +
    +
    +
    +
    +
    + +{{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-info" 32}} +
    +
    +
    + Very loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong title +
    +
    + consists of leading/main/trailing part +
    +
    + Very loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong content + Truncate very loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong content +
    +
    +
    + +
    +
    + +
    +
    + {{svg "octicon-repo" 32}} +
    +
    + +
    + when inside header, the trailing part will wrap below the title +
    +
    +
    +
    + +
    + +

    Flex List (with "ui segment")

    +
    +
    +
    item 1
    +
    item 2
    +
    +
    +
    +

    Flex List (with "ui segment")

    +
    +
    item 1
    +
    item 2
    +
    +
    + +

    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

    +
    + + + +
    + + +
    +
    +
    + +
    + +

    Selection

    +
    + {{/* the "selection" class is optional, it will be added by JS automatically */}} + + +
    +

    Dropdown Button (demo only without menu)

    +
    + + + +
    + +
    + + + +
    + +
    +
    +
    Other button align with ...
    + +
    +
    +
    +{{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" .}} + + + + + + + + + + + + + + + + + +
    + + + + +
    +{{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"}} +
    +
    +

    Link

    +
    + normal + muted + suppressed + silenced +
    +

    Button

    +
    + Style: + + + + +
    +
    + State: + +
    +
    +
      +
    • +

      General purpose:

      + + + + +
    • +
    • +

      Recommended colors:

      + + + + +
    • +
    • +

      Inline / Plain:

      +
      + + + +
      +
    • +
    + +
    +
    + +
    +

    Buttons

    +
    +
    +
    +
    +
    + +
    +

    Tooltip

    +
    text with tooltip
    +
    text with interactive tooltip
    +
    + +
    +

    Loading

    +
    loading ...
    +
    +

    loading ...

    +

    loading ...

    +

    loading ...

    +

    loading ...

    +
    +
    + +
    +

    <origin-url>

    +
    +
    +
    + +
    +

    <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

    +
    + +
    + + 123 +
    + +
    + +

    Input with SVG

    +
    + +
    +
    + +
    +

    ComboMarkdownEditor

    + {{template "shared/combomarkdowneditor" dict "MarkdownPreviewContext" "/owner/path"}} +
    + +

    Tailwind CSS Demo

    +
    + +
    +
    +{{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

    +
    + + + + +
    +
    +{{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 @@ + +
    + + {{svg "octicon-repo"}} {{ctx.Locale.Tr "explore.repos"}} + + {{if not .UsersPageIsDisabled}} + + {{svg "octicon-person"}} {{ctx.Locale.Tr "explore.users"}} + + {{end}} + {{if not .OrganizationsPageIsDisabled}} + + {{svg "octicon-organization"}} {{ctx.Locale.Tr "explore.organizations"}} + + {{end}} + {{if and (not ctx.Consts.RepoUnitTypeCode.UnitGlobalDisabled) .IsRepoIndexerEnabled (not .CodePageIsDisabled)}} + + {{svg "octicon-code"}} {{ctx.Locale.Tr "explore.code"}} + + {{end}} +
    +
    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" .}} +
    +
    +
    +
    + {{if and (or $.PageIsExplore $.PageIsProfileStarList) .Owner}} + {{.Owner.Name}}/ + {{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}} + +
    + +
    + {{$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" .}} +
    +
    +
    + +
    +

    + {{AppName}} +

    +

    {{ctx.Locale.Tr "startpage.app_desc"}}

    +
    +
    +
    +
    +
    +

    + {{svg "octicon-flame"}} {{ctx.Locale.Tr "startpage.install"}} +

    +

    + {{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"}} +

    +
    +
    +

    + {{svg "octicon-device-desktop"}} {{ctx.Locale.Tr "startpage.platform"}} +

    +

    + {{ctx.Locale.Tr "startpage.platform_desc" "https://go.dev/"}} +

    +
    +
    +
    +
    +

    + {{svg "octicon-rocket"}} {{ctx.Locale.Tr "startpage.lightweight"}} +

    +

    + {{ctx.Locale.Tr "startpage.lightweight_desc"}} +

    +
    +
    +

    + {{svg "octicon-code"}} {{ctx.Locale.Tr "startpage.license"}} +

    +

    + {{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" .}} +
    +
    +
    +

    + {{ctx.Locale.Tr "install.title"}} +

    +
    + {{template "base/alert" .}} + +

    {{ctx.Locale.Tr "install.docker_helper" "https://docs.gitea.com/installation/install-with-docker"}}

    + +
    + +

    {{ctx.Locale.Tr "install.db_title"}}

    +

    {{ctx.Locale.Tr "install.require_db_desc"}}

    +
    + + +
    + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + + + {{ctx.Locale.Tr "install.db_schema_helper"}} +
    +
    + +
    +
    + + + {{ctx.Locale.Tr "install.sqlite_helper"}} +
    +
    + + {{if .Err_DbInstalledBefore}} +
    +

    {{ctx.Locale.Tr "install.reinstall_confirm_message"}}

    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    + {{end}} + + +

    {{ctx.Locale.Tr "install.general_title"}}

    +
    + + + {{ctx.Locale.Tr "install.app_name_helper"}} +
    +
    + + + {{ctx.Locale.Tr "install.repo_path_helper"}} +
    +
    + + + {{ctx.Locale.Tr "install.lfs_path_helper"}} +
    +
    + + + {{ctx.Locale.Tr "install.run_user_helper"}} +
    +
    + + + {{ctx.Locale.Tr "install.domain_helper"}} +
    +
    + + + {{ctx.Locale.Tr "install.ssh_port_helper"}} +
    +
    + + + {{ctx.Locale.Tr "install.http_port_helper"}} +
    +
    + + + {{ctx.Locale.Tr "install.app_url_helper"}} +
    +
    + + + {{ctx.Locale.Tr "install.log_root_path_helper"}} +
    +
    +
    + + +
    + {{ctx.Locale.Tr "install.enable_update_checker_helper"}} +
    + + +

    {{ctx.Locale.Tr "install.optional_title"}}

    +
    + +
    + + {{ctx.Locale.Tr "install.email_title"}} + +
    + + +
    +
    + + +
    +
    + + + {{ctx.Locale.TrString "install.smtp_from_helper"}}{{/* it contains lt/gt chars*/}} +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    + + +
    + + {{ctx.Locale.Tr "install.server_service_title"}} + +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    + + + {{ctx.Locale.Tr "install.no_reply_address_helper"}} +
    +
    + + + {{ctx.Locale.Tr "install.password_algorithm_helper"}} +
    +
    + + +
    + + {{ctx.Locale.Tr "install.admin_title"}} + +

    {{ctx.Locale.Tr "install.admin_setting_desc"}}

    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + +
    + + {{if .EnvConfigKeys}} + +

    {{ctx.Locale.Tr "install.env_config_keys"}}

    +
    +
    + {{ctx.Locale.Tr "install.env_config_keys_prompt"}} +
    +
    + {{range .EnvConfigKeys}}{{.}}{{end}} +
    +
    + {{end}} + +
    +
    + {{$copyBtn := svg "octicon-copy" 14}} + {{$filePath := HTMLFormat `%s ` .CustomConfFile .CustomConfFile $copyBtn}} + {{ctx.Locale.Tr "install.config_write_file_prompt" $filePath}} +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +{{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}} +

    + {{ctx.Locale.Tr "new_org"}} +

    +
    + {{template "base/alert" .}} +
    + + + {{ctx.Locale.Tr "org.org_name_helper"}} +
    + +
    + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    +
    +
    +
    +
    +{{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 @@ + 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"}} +
    +
    + {{.Org.DisplayName}} + + {{if .Org.Visibility.IsLimited}}{{ctx.Locale.Tr "org.settings.visibility.limited_shortname"}}{{end}} + {{if .Org.Visibility.IsPrivate}}{{ctx.Locale.Tr "org.settings.visibility.private_shortname"}}{{end}} + + + {{if .EnableFeed}} + + {{svg "octicon-rss" 24}} + + {{end}} + {{if .IsSigned}} + {{template "org/follow_unfollow" .}} + {{end}} + +
    + {{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}} +
    + {{ctx.Locale.Tr "new_repo"}} + {{if not .DisableNewPullMirrors}} + {{ctx.Locale.Tr "new_migrate"}} + {{end}} +
    +
    + {{end}} + {{if .NumMembers}} +

    + {{ctx.Locale.Tr "org.members"}} + {{.NumMembers}} {{svg "octicon-chevron-right"}} +

    +
    + {{$isMember := .IsOrganizationMember}} + {{range .Members}} + {{if or $isMember (call $.IsPublicMember .ID)}} + {{ctx.AvatarUtils.Avatar . 48}} + {{end}} + {{end}} +
    + {{end}} + {{if .IsOrganizationMember}} +
    + {{ctx.Locale.Tr "org.teams"}} + {{.Org.NumTeams}} {{svg "octicon-chevron-right"}} +
    + + {{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}} +
    +
    + {{if or (eq $.SignedUser.ID .ID) $.IsOrganizationOwner}} + {{if $isPublic}} + {{svg "octicon-eye-closed" 12 "icon"}}{{ctx.Locale.Tr "org.members.public_helper"}} + {{else}} + {{svg "octicon-eye" 12 "icon"}}{{ctx.Locale.Tr "org.members.private_helper"}} + {{end}} + {{end}} + {{if eq $.SignedUser.ID .ID}} +
    + +
    + {{else if $.IsOrganizationOwner}} +
    + +
    + {{end}} +
    +
    + {{end}} +
    + + {{template "base/paginate" .}} +
    +
    + + + +{{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")}} +
    +

    + {{ctx.Locale.Tr "settings.applications"}} +

    + + {{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")}} + +
    +

    + {{ctx.Locale.Tr "org.settings.delete_account"}} +

    +
    +
    +

    {{svg "octicon-alert"}} {{ctx.Locale.Tr "org.settings.delete_prompt"}}

    +
    +
    + {{.CsrfTokenHtml}} +
    + + +
    + +
    +
    +
    + + + +{{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"}} +
    + +
    +
    + {{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")}} +
    +

    + {{ctx.Locale.Tr "org.settings.options"}} +

    +
    +
    + {{.CsrfTokenHtml}} +
    + + +
    +
    + + +
    +
    + + +
    +
    + {{/* it is rendered as markdown, but the length is limited, so at the moment we do not use the markdown editor here */}} + + +
    +
    + + +
    +
    + + +
    + +
    +
    + +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    + + {{if .SignedUser.IsAdmin}} +
    + +
    + + +

    {{ctx.Locale.Tr "admin.users.max_repo_creation_desc"}}

    +
    + {{end}} + +
    + +
    +
    + +
    + +
    + {{.CsrfTokenHtml}} +
    + + +
    + +
    + + +
    +
    +
    +
    +{{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.title" .Team.Name .Organization.Name}}
    +
    {{ctx.Locale.Tr "org.teams.invite.by" .Inviter.Name}}
    +
    {{ctx.Locale.Tr "org.teams.invite.description"}}
    +
    +
    +
    + {{.CsrfTokenHtml}} + +
    +
    +
    +
    +
    +{{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}} + + + +
    +
    + {{end}} +
    +
    + {{range .Team.Members}} +
    + +
    +
    + {{template "shared/user/name" .}} +
    +
    +
    + {{if and $.IsOrganizationOwner (not (and ($.Team.IsOwnerTeam) (eq (len $.Team.Members) 1)))}} +
    + +
    + {{end}} +
    +
    + {{else}} +
    + {{ctx.Locale.Tr "org.teams.members.none"}} +
    + {{end}} +
    +
    + {{if and .Invites $.IsOrganizationOwner}} +

    {{ctx.Locale.Tr "org.teams.invite_team_member.list"}}

    +
    +
    + {{range .Invites}} +
    +
    + {{.Email}} +
    +
    +
    + {{$.CsrfTokenHtml}} + + +
    +
    +
    + {{end}} +
    +
    + {{end}} +
    +
    +
    +
    + +{{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}} +

    + {{if .PageIsOrgTeamsNew}}{{ctx.Locale.Tr "org.create_new_team"}}{{else}}{{ctx.Locale.Tr "org.teams.settings"}}{{end}} +

    +
    + {{template "base/alert" .}} +
    + + {{if eq .Team.LowerName "owners"}} + + {{end}} + + {{ctx.Locale.Tr "org.team_name_helper"}} +
    +
    + + + {{ctx.Locale.Tr "org.team_desc_helper"}} +
    + {{if not (eq .Team.LowerName "owners")}} +
    + +
    +
    +
    + + + {{ctx.Locale.Tr "org.teams.specific_repositories_helper"}} +
    +
    +
    +
    + + + {{ctx.Locale.Tr "org.teams.all_repositories_helper"}} +
    +
    + +
    +
    + + + {{ctx.Locale.Tr "org.teams.can_create_org_repo_helper"}} +
    +
    +
    +
    + +
    +
    +
    + + + {{ctx.Locale.Tr "org.teams.general_access_helper"}} +
    +
    +
    +
    + + + {{ctx.Locale.Tr "org.teams.admin_access_helper"}} +
    +
    +
    +
    + +
    + + + + + + + + + + + + {{range $t, $unit := $.Units}} + {{if ge $unit.MaxPerm 2}} + + + + + + + {{end}} + {{end}} + +
    {{ctx.Locale.Tr "units.unit"}}{{ctx.Locale.Tr "org.teams.none_access"}} + {{svg "octicon-question" 16 "tw-ml-1"}}{{ctx.Locale.Tr "org.teams.read_access"}} + {{svg "octicon-question" 16 "tw-ml-1"}}{{ctx.Locale.Tr "org.teams.write_access"}} + {{svg "octicon-question" 16 "tw-ml-1"}}
    +
    +
    + + {{ctx.Locale.Tr $unit.DescKey}} +
    +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    + {{range $t, $unit := $.Units}} + {{if lt $unit.MaxPerm 2}} +
    +
    + + + {{ctx.Locale.Tr $unit.DescKey}} +
    +
    + {{end}} + {{end}} +
    + {{end}} + +
    + {{if .PageIsOrgTeamsNew}} + + {{else}} + + {{if not (eq .Team.LowerName "owners")}} + + {{end}} + {{end}} +
    +
    +
    +
    +
    +
    +
    + + +{{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}} + + +
    +
    + + +
    +
    + {{end}} +
    +
    + {{range .Team.Repos}} +
    +
    + {{template "repo/icon" .}} +
    + +
    + {{if $canAddRemove}} +
    + {{$.CsrfTokenHtml}} + +
    + {{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 @@ +
    +

    + {{.Team.Name}} +
    + {{if .Team.IsMember ctx $.SignedUser.ID}} +
    + +
    + {{else if .IsOrganizationOwner}} +
    + {{$.CsrfTokenHtml}} + + +
    + {{end}} +
    +

    +
    +
    + {{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}} + + + + + + + + + {{range $t, $unit := $.Units}} + {{if (not $unit.Type.UnitGlobalDisabled)}} + + + + + {{end}} + {{end}} + +
    {{ctx.Locale.Tr "units.unit"}}{{ctx.Locale.Tr "org.team_permission_desc"}}
    {{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}} +
    + {{if .IsOrganizationOwner}} +
    + {{svg "octicon-gear"}} {{ctx.Locale.Tr "org.teams.settings"}} +
    + {{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}} +
    +
    + {{.Name}} +
    + {{ctx.Locale.Tr "view"}} + {{if .IsMember ctx $.SignedUser.ID}} +
    + +
    + {{else if $.IsOrganizationOwner}} +
    + {{$.CsrfTokenHtml}} + +
    + {{end}} +
    +
    +
    + {{range .Members}} + {{template "shared/user/avatarlink" dict "user" .}} + {{end}} +
    + +
    + {{end}} +
    +
    +
    + +{{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.installation"}}

    +
    +
    +
    + +
    /$branch/$repository
    +

    {{ctx.Locale.Tr "packages.alpine.registry.info"}}

    +
    +
    + +
    curl -JO 
    +
    +
    + +
    +
    sudo apk add {{$.PackageDescriptor.Package.Name}}={{$.PackageDescriptor.Version.Version}}
    +
    +
    +
    + +
    +
    +
    + +

    {{ctx.Locale.Tr "packages.alpine.repository"}}

    +
    + + + + + + + + + + + + + + + +
    {{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}} +

    {{ctx.Locale.Tr "packages.about"}}

    +
    + {{.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.installation"}}

    +
    +
    +
    + +
    [{{.PackageDescriptor.Owner.LowerName}}.{{.PackageRegistryHost}}]
    +SigLevel = Optional TrustAll
    +Server = 
    +
    +
    + +
    pacman -Sy {{.PackageDescriptor.Package.LowerName}}
    +
    +
    + +
    +
    +
    + +

    {{ctx.Locale.Tr "packages.arch.repository"}}

    +
    + + + + + + + + + + + +
    {{ctx.Locale.Tr "packages.arch.repository.repositories"}}
    {{StringUtils.Join .Repositories ", "}}
    {{ctx.Locale.Tr "packages.arch.repository.architectures"}}
    {{StringUtils.Join .Architectures ", "}}
    +
    + + {{if .PackageDescriptor.Metadata.Description}} +

    {{ctx.Locale.Tr "packages.about"}}

    +
    {{.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"}} +

    {{ctx.Locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    [registry]
    +default = "gitea"
    +
    +[registries.gitea]
    +index = "sparse+" # Sparse index
    +# index = "" # Git
    +
    +[net]
    +git-fetch-with-cli = true
    +
    +
    + +
    cargo add {{.PackageDescriptor.Package.Name}}@{{.PackageDescriptor.Version.Version}}
    +
    +
    + +
    +
    +
    + + {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.Readme}} +

    {{ctx.Locale.Tr "packages.about"}}

    + {{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.dependencies"}}

    +
    + + + + + + + + + {{range .PackageDescriptor.Metadata.Dependencies}} + + + + + {{end}} + +
    {{ctx.Locale.Tr "packages.dependency.id"}}{{ctx.Locale.Tr "packages.dependency.version"}}
    {{.Name}}{{.Req}}
    +
    + {{end}} + + {{if .PackageDescriptor.Metadata.Keywords}} +

    {{ctx.Locale.Tr "packages.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"}} +

    {{ctx.Locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    knife[:supermarket_site] = ''
    +
    +
    + +
    knife supermarket install {{.PackageDescriptor.Package.Name}} {{.PackageDescriptor.Version.Version}}
    +
    +
    + +
    +
    +
    + + {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.LongDescription}} +

    {{ctx.Locale.Tr "packages.about"}}

    +
    + {{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.dependencies"}}

    +
    + + + + + + + + + {{range $dependency, $version := .PackageDescriptor.Metadata.Dependencies}} + + + + + {{end}} + +
    {{ctx.Locale.Tr "packages.dependency.id"}}{{ctx.Locale.Tr "packages.dependency.version"}}
    {{$dependency}}{{$version}}
    +
    + {{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"}} +

    {{ctx.Locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    {
    +	"repositories": [{
    +			"type": "composer",
    +			"url": ""
    +		}
    +	]
    +}
    +
    +
    + +
    composer require {{.PackageDescriptor.Package.Name}}:{{.PackageDescriptor.Version.Version}}
    +
    +
    + +
    +
    +
    + + {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.Comments}} +

    {{ctx.Locale.Tr "packages.about"}}

    + {{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}} +

    {{ctx.Locale.Tr "packages.dependencies"}}

    +
    +
    + {{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}} +

    {{ctx.Locale.Tr "packages.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}}

    + + + + + + + + + {{range $dependency, $version := .dependencies}} + + + + + {{end}} + +
    {{ctx.Locale.Tr "packages.dependency.id"}}{{ctx.Locale.Tr "packages.dependency.version"}}
    {{$dependency}}{{$version}}
    +{{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"}} +

    {{ctx.Locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    conan remote add gitea 
    +
    +
    + +
    conan install --remote=gitea {{.PackageDescriptor.Package.Name}}/{{.PackageDescriptor.Version.Version}}
    +
    +
    + +
    +
    +
    + + {{if .PackageDescriptor.Metadata.Description}} +

    {{ctx.Locale.Tr "packages.about"}}

    +
    + {{if .PackageDescriptor.Metadata.Description}}{{.PackageDescriptor.Metadata.Description}}{{end}} +
    + {{end}} + + {{if or .PackageDescriptor.Metadata.Keywords}} +

    {{ctx.Locale.Tr "packages.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"}} +

    {{ctx.Locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    channel_alias: 
    +channels:
    +  - 
    +default_channels:
    +  - 
    +
    +
    + + {{$channel := .PackageDescriptor.PackageProperties.GetByName "conda.channel"}} +
    conda install{{if $channel}} -c {{$channel}}{{end}} {{.PackageDescriptor.PackageProperties.GetByName "conda.name"}}={{.PackageDescriptor.Version.Version}}
    +
    +
    + +
    +
    +
    + + {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.Summary}} +

    {{ctx.Locale.Tr "packages.about"}}

    +
    + {{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"}} +

    {{ctx.Locale.Tr "packages.installation"}}

    +
    +
    +
    + + {{if eq .PackageDescriptor.Metadata.Type "helm"}} +
    helm pull oci://{{.PackageRegistryHost}}/{{.PackageDescriptor.Owner.LowerName}}/{{.PackageDescriptor.Package.LowerName}} --version {{.PackageDescriptor.Version.LowerVersion}}
    + {{else}} + {{$separator := ":"}} + {{if not .PackageDescriptor.Metadata.IsTagged}} + {{$separator = "@"}} + {{end}} +
    docker pull {{.PackageRegistryHost}}/{{.PackageDescriptor.Owner.LowerName}}/{{.PackageDescriptor.Package.LowerName}}{{$separator}}{{.PackageDescriptor.Version.LowerVersion}}
    + {{end}} +
    +
    + +
    {{range .PackageDescriptor.Files}}{{if eq .File.LowerName "manifest.json"}}{{.Properties.GetByName "container.digest"}}{{end}}{{end}}
    +
    +
    + +
    +
    +
    + {{if .PackageDescriptor.Metadata.Manifests}} +

    {{ctx.Locale.Tr "packages.container.images"}}

    +
    + + + + + + + + + + {{range .PackageDescriptor.Metadata.Manifests}} + {{/* "unknown/unknown" is attestation-manifest, so we should skip it */}} + {{if ne .Platform "unknown/unknown"}} + + + + + + {{end}} + {{end}} + +
    {{ctx.Locale.Tr "packages.container.digest"}}{{ctx.Locale.Tr "packages.container.multi_arch"}}{{ctx.Locale.Tr "admin.packages.size"}}
    {{StringUtils.TrimPrefix .Digest "sha256:" | ShortSha}}{{.Platform}}{{FileSize .Size}}
    +
    + {{end}} + {{if .PackageDescriptor.Metadata.Description}} +

    {{ctx.Locale.Tr "packages.about"}}

    +
    + {{.PackageDescriptor.Metadata.Description}} +
    + {{end}} + {{if .PackageDescriptor.Metadata.ImageLayers}} +

    {{ctx.Locale.Tr "packages.container.layers"}}

    +
    + + + {{range .PackageDescriptor.Metadata.ImageLayers}} + + + + {{end}} + +
    {{.}}
    +
    + {{end}} + {{if .PackageDescriptor.Metadata.Labels}} +

    {{ctx.Locale.Tr "packages.container.labels"}}

    +
    + + + + + + + + + {{range $key, $value := .PackageDescriptor.Metadata.Labels}} + + + + + {{end}} + +
    {{ctx.Locale.Tr "packages.container.labels.key"}}{{ctx.Locale.Tr "packages.container.labels.value"}}
    {{$key}}{{$value}}
    +
    + {{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"}} +

    {{ctx.Locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    options("repos" = c(getOption("repos"), c(gitea="")))
    +
    +
    + +
    install.packages("{{.PackageDescriptor.Package.Name}}")
    +
    +
    + +
    +
    +
    + + {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.Title}} +

    {{ctx.Locale.Tr "packages.about"}}

    +
    + {{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}} +

    {{ctx.Locale.Tr "packages.dependencies"}}

    +
    + + + {{if .PackageDescriptor.Metadata.Imports}} + + + + + {{end}} + {{if .PackageDescriptor.Metadata.Depends}} + + + + + {{end}} + {{if .PackageDescriptor.Metadata.LinkingTo}} + + + + + {{end}} + {{if .PackageDescriptor.Metadata.Suggests}} + + + + + {{end}} + +
    Imports{{StringUtils.Join .PackageDescriptor.Metadata.Imports ", "}}
    Depends{{StringUtils.Join .PackageDescriptor.Metadata.Depends ", "}}
    LinkingTo{{StringUtils.Join .PackageDescriptor.Metadata.LinkingTo ", "}}
    Suggests{{StringUtils.Join .PackageDescriptor.Metadata.Suggests ", "}}
    +
    + {{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.installation"}}

    +
    +
    +
    + +
    sudo curl  -o /etc/apt/keyrings/gitea-{{$.PackageDescriptor.Owner.Name}}.asc
    +echo "deb [signed-by=/etc/apt/keyrings/gitea-{{$.PackageDescriptor.Owner.Name}}.asc]  $distribution $component" | sudo tee -a /etc/apt/sources.list.d/gitea.list
    +sudo apt update
    +

    {{ctx.Locale.Tr "packages.debian.registry.info"}}

    +
    +
    + +
    +
    sudo apt install {{$.PackageDescriptor.Package.Name}}={{$.PackageDescriptor.Version.Version}}
    +
    +
    +
    + +
    +
    +
    + +

    {{ctx.Locale.Tr "packages.debian.repository"}}

    +
    + + + + + + + + + + + + + + + +
    {{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}} +

    {{ctx.Locale.Tr "packages.about"}}

    +
    + {{.PackageDescriptor.Metadata.Description}} +
    + {{end}} + + {{if .PackageDescriptor.Metadata.Dependencies}} +

    {{ctx.Locale.Tr "packages.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"}} +

    {{ctx.Locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    
    +{{- range .PackageDescriptor.Files -}}
    +curl -OJ 
    +{{end -}}
    +				
    +
    +
    + +
    +
    +
    +{{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"}} +

    {{ctx.Locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    GOPROXY= go install {{$.PackageDescriptor.Package.Name}}@{{$.PackageDescriptor.Version.Version}}
    +
    +
    + +
    +
    +
    +{{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"}} +

    {{ctx.Locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    helm repo add {{AppDomain}} 
    +helm repo update
    +
    +
    + +
    helm install {{.PackageDescriptor.Package.Name}} {{AppDomain}}/{{.PackageDescriptor.Package.Name}}
    +
    +
    + +
    +
    +
    + + {{if .PackageDescriptor.Metadata.Description}} +

    {{ctx.Locale.Tr "packages.about"}}

    +
    + {{.PackageDescriptor.Metadata.Description}} +
    + {{end}} + + {{if .PackageDescriptor.Metadata.Dependencies}} +

    {{ctx.Locale.Tr "packages.dependencies"}}

    +
    + + + + + + + + + {{range .PackageDescriptor.Metadata.Dependencies}} + + + + + {{end}} + +
    {{ctx.Locale.Tr "packages.dependency.id"}}{{ctx.Locale.Tr "packages.dependency.version"}}
    {{.Name}}{{.Version}}
    +
    + {{end}} + + {{if .PackageDescriptor.Metadata.Keywords}} +

    {{ctx.Locale.Tr "packages.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.installation"}}

    +
    {{ctx.Locale.Tr "packages.no_metadata"}}
    +{{end}} +{{if and (eq .PackageDescriptor.Package.Type "maven") .PackageDescriptor.Metadata}} +

    {{ctx.Locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    <repositories>
    +	<repository>
    +		<id>gitea</id>
    +		<url></url>
    +	</repository>
    +</repositories>
    +
    +<distributionManagement>
    +	<repository>
    +		<id>gitea</id>
    +		<url></url>
    +	</repository>
    +
    +	<snapshotRepository>
    +		<id>gitea</id>
    +		<url></url>
    +	</snapshotRepository>
    +</distributionManagement>
    +
    +
    + +
    <dependency>
    +	<groupId>{{.PackageDescriptor.Metadata.GroupID}}</groupId>
    +	<artifactId>{{.PackageDescriptor.Metadata.ArtifactID}}</artifactId>
    +	<version>{{.PackageDescriptor.Version.Version}}</version>
    +</dependency>
    +
    +
    + +
    mvn install
    +
    +
    + +
    mvn dependency:get -DremoteRepositories= -Dartifact={{.PackageDescriptor.Metadata.GroupID}}:{{.PackageDescriptor.Metadata.ArtifactID}}:{{.PackageDescriptor.Version.Version}}
    +
    +
    + +
    +
    +
    + + {{if .PackageDescriptor.Metadata.Description}} +

    {{ctx.Locale.Tr "packages.about"}}

    +
    + {{.PackageDescriptor.Metadata.Description}} +
    + {{end}} + + {{if .PackageDescriptor.Metadata.Dependencies}} +

    {{ctx.Locale.Tr "packages.dependencies"}}

    +
    +
    + {{range .PackageDescriptor.Metadata.Dependencies}} +
    + {{svg "octicon-package-dependencies" 16 ""}} +
    +
    {{.GroupID}}:{{.ArtifactID}}
    +
    {{.Version}}
    +
    +
    + {{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"}} +

    {{ctx.Locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    {{if .PackageDescriptor.Metadata.Scope}}{{.PackageDescriptor.Metadata.Scope}}:{{end}}registry=
    +
    +
    + +
    npm install {{.PackageDescriptor.Package.Name}}@{{.PackageDescriptor.Version.Version}}
    +
    +
    + +
    "{{.PackageDescriptor.Package.Name}}": "{{.PackageDescriptor.Version.Version}}"
    +
    +
    + +
    +
    +
    + + {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.Readme}} +

    {{ctx.Locale.Tr "packages.about"}}

    +
    + {{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}} +

    {{ctx.Locale.Tr "packages.dependencies"}}

    +
    +
    + {{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}} +

    {{ctx.Locale.Tr "packages.npm.dependencies.bundle"}}

    +
    + {{range .PackageDescriptor.Metadata.BundleDependencies}} + {{.}} + {{end}} +
    + {{end}} + + {{if .PackageDescriptor.Metadata.Keywords}} +

    {{ctx.Locale.Tr "packages.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}}

    + + + + + + + + + {{range $dependency, $version := .dependencies}} + + + + + {{end}} + +
    {{ctx.Locale.Tr "packages.dependency.id"}}{{ctx.Locale.Tr "packages.dependency.version"}}
    {{$dependency}}{{$version}}
    +{{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"}} +

    {{ctx.Locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    dotnet nuget add source --name {{.PackageDescriptor.Owner.Name}} --username your_username --password your_token 
    +
    +
    + +
    dotnet add package --source {{.PackageDescriptor.Owner.Name}} --version {{.PackageDescriptor.Version.Version}} {{.PackageDescriptor.Package.Name}}
    +
    +
    + +
    +
    +
    + + {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.ReleaseNotes .PackageDescriptor.Metadata.Readme}} +

    {{ctx.Locale.Tr "packages.about"}}

    + {{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.dependencies"}}

    +
    + + + + + + + + + + {{range $framework, $dependencies := .PackageDescriptor.Metadata.Dependencies}} + {{range $dependencies}} + + + + + + {{end}} + {{end}} + +
    {{ctx.Locale.Tr "packages.dependency.id"}}{{ctx.Locale.Tr "packages.dependency.version"}}{{ctx.Locale.Tr "packages.nuget.dependency.framework"}}
    {{.ID}}{{.Version}}{{$framework}}
    +
    + {{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"}} +

    {{ctx.Locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    dart pub add {{.PackageDescriptor.Package.Name}}:{{.PackageDescriptor.Version.Version}} --hosted-url=
    +
    +
    + +
    +
    +
    + {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.Readme}} +

    {{ctx.Locale.Tr "packages.about"}}

    + {{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"}} +

    {{ctx.Locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    pip install --index-url  {{.PackageDescriptor.Package.Name}}
    +
    +
    + +
    +
    +
    + {{if or .PackageDescriptor.Metadata.Description .PackageDescriptor.Metadata.LongDescription .PackageDescriptor.Metadata.Summary}} +

    {{ctx.Locale.Tr "packages.about"}}

    +
    +

    {{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.requirements"}}

    +
    + {{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.installation"}}

    +
    +
    +
    + +
    {{- if gt (len .Groups) 1 -}}
    +# {{ctx.Locale.Tr "packages.rpm.repository.multiple_groups"}}
    +
    +{{end -}}
    +# {{ctx.Locale.Tr "packages.rpm.distros.redhat"}}
    +{{- range $group := .Groups}}
    +	{{- if $group}}{{$group = print "/" $group}}{{end}}
    +dnf config-manager --add-repo 
    +{{- end}}
    +
    +# {{ctx.Locale.Tr "packages.rpm.distros.suse"}}
    +{{- range $group := .Groups}}
    +	{{- if $group}}{{$group = print "/" $group}}{{end}}
    +zypper addrepo 
    +{{- end}}
    +
    +
    + +
    +
    # {{ctx.Locale.Tr "packages.rpm.distros.redhat"}}
    +dnf install {{$.PackageDescriptor.Package.Name}}
    +
    +# {{ctx.Locale.Tr "packages.rpm.distros.suse"}}
    +zypper install {{$.PackageDescriptor.Package.Name}}
    +
    +
    +
    + +
    +
    +
    + +

    {{ctx.Locale.Tr "packages.rpm.repository"}}

    +
    + + + + + + + +
    {{ctx.Locale.Tr "packages.rpm.repository.architectures"}}
    {{StringUtils.Join .Architectures ", "}}
    +
    + + {{if or .PackageDescriptor.Metadata.Summary .PackageDescriptor.Metadata.Description}} +

    {{ctx.Locale.Tr "packages.about"}}

    + {{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"}} +

    {{ctx.Locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    gem install {{.PackageDescriptor.Package.Name}} --version "{{.PackageDescriptor.Version.Version}}" --source ""
    +
    +
    + +
    source "" do
    +	gem "{{.PackageDescriptor.Package.Name}}", "{{.PackageDescriptor.Version.Version}}"
    +end
    +
    +
    + +
    +
    +
    + {{if .PackageDescriptor.Metadata.Description}} +

    {{ctx.Locale.Tr "packages.about"}}

    +
    {{.PackageDescriptor.Metadata.Description}}
    + {{end}} + {{if or .PackageDescriptor.Metadata.RequiredRubyVersion .PackageDescriptor.Metadata.RequiredRubygemsVersion}} +

    {{ctx.Locale.Tr "packages.requirements"}}

    +
    + {{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}} +

    {{ctx.Locale.Tr "packages.dependencies"}}

    +
    +
    + {{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}}

    + + + + + + + + + {{range .dependencies}} + + + + + {{end}} + +
    {{ctx.Locale.Tr "packages.dependency.id"}}{{ctx.Locale.Tr "packages.dependency.version"}}
    {{.Name}}{{range $i, $v := .Version}}{{if gt $i 0}}, {{end}}{{$v.Restriction}}{{$v.Version}}{{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"}} +

    {{ctx.Locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    swift package-registry set 
    +
    +
    + +
    dependencies: [
    +	.package(id: "{{.PackageDescriptor.Package.Name}}", from:"{{.PackageDescriptor.Version.Version}}")
    +]
    +
    +
    + +
    swift package resolve
    +
    +
    + +
    +
    +
    + + {{if .PackageDescriptor.Metadata.Description}} +

    {{ctx.Locale.Tr "packages.about"}}

    +
    + {{if .PackageDescriptor.Metadata.Description}}{{.PackageDescriptor.Metadata.Description}}{{end}} +
    + {{end}} + + {{if .PackageDescriptor.Metadata.Keywords}} +

    {{ctx.Locale.Tr "packages.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"}} +

    {{ctx.Locale.Tr "packages.installation"}}

    +
    +
    +
    + +
    vagrant box add --box-version {{.PackageDescriptor.Version.Version}} ""
    +
    +
    + +
    +
    +
    + {{if .PackageDescriptor.Metadata.Description}} +

    {{ctx.Locale.Tr "packages.about"}}

    +
    {{.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}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.project_site"}}
    {{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}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.project_site"}}
    {{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}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.project_site"}}
    {{end}} + {{if .PackageDescriptor.Metadata.RepositoryURL}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.repository_site"}}
    {{end}} + {{if .PackageDescriptor.Metadata.DocumentationURL}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.documentation_site"}}
    {{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}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.repository_site"}}
    {{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}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.project_site"}}
    {{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}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.project_site"}}
    {{end}} + {{if .PackageDescriptor.Metadata.License}}
    {{svg "octicon-law"}} {{.PackageDescriptor.Metadata.License}}
    {{end}} + {{if .PackageDescriptor.Metadata.RepositoryURL}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.repository_site"}}
    {{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}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.project_site"}}
    {{end}} + {{if .PackageDescriptor.Metadata.RepositoryURL}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.repository_site"}}
    {{end}} + {{if .PackageDescriptor.Metadata.DocumentationURL}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.documentation_site"}}
    {{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}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.project_site"}}
    {{end}} + {{if .PackageDescriptor.Metadata.RepositoryURL}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.repository_site"}}
    {{end}} + {{if .PackageDescriptor.Metadata.DocumentationURL}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.documentation_site"}}
    {{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}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.project_site"}}
    {{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}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.project_site"}}
    {{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}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.project_site"}}
    {{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}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.project_site"}}
    {{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}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.project_site"}}
    {{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}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.project_site"}}
    {{end}} + {{if .PackageDescriptor.Metadata.RepositoryURL}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.repository_site"}}
    {{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}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.project_site"}}
    {{end}} + {{if .PackageDescriptor.Metadata.RepositoryURL}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.repository_site"}}
    {{end}} + {{if .PackageDescriptor.Metadata.DocumentationURL}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.documentation_site"}}
    {{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}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.project_site"}}
    {{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}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.project_site"}}
    {{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}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.project_site"}}
    {{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}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.repository_site"}}
    {{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}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.project_site"}}
    {{end}} + {{if .PackageDescriptor.Metadata.RepositoryURL}}
    {{svg "octicon-link-external"}} {{ctx.Locale.Tr "packages.details.repository_site"}}
    {{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"}} +

    +
    +

    {{ctx.Locale.Tr "packages.settings.link.description"}}

    +
    + {{template "base/disable_form_autofill"}} + {{.CsrfTokenHtml}} + +
    + +
    +
    + +
    +
    +
    +

    + {{ctx.Locale.Tr "repo.settings.danger_zone"}} +

    +
    +
    +
    +
    +
    {{ctx.Locale.Tr "packages.settings.delete"}}
    +
    {{ctx.Locale.Tr "packages.settings.delete.description"}}
    +
    +
    + +
    + +
    +
    +
    +
    +
    +{{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 @@ +

    + {{ctx.Locale.Tr "packages.owner.settings.cargo.title"}} +

    +
    +
    +
    + +
    +
    + {{.CsrfTokenHtml}} + +
    +
    + +
    +
    + {{.CsrfTokenHtml}} + +
    +
    + +
    +
    +
    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 @@ +

    {{if .IsEditRule}}{{ctx.Locale.Tr "packages.owner.settings.cleanuprules.edit"}}{{else}}{{ctx.Locale.Tr "packages.owner.settings.cleanuprules.add"}}{{end}}

    +
    +
    + {{.CsrfTokenHtml}} + +
    +
    + + +
    +
    +
    + + +
    +
    +
    + + +
    +
    +
    +

    {{ctx.Locale.Tr "packages.owner.settings.cleanuprules.keep.title"}}

    +
    + + +
    +
    + + +

    {{ctx.Locale.Tr "packages.owner.settings.cleanuprules.keep.pattern.container"}}

    +
    +
    +

    {{ctx.Locale.Tr "packages.owner.settings.cleanuprules.remove.title"}}

    +
    + + +
    +
    + + +
    +
    + {{if .IsEditRule}} + + + {{ctx.Locale.Tr "packages.owner.settings.cleanuprules.preview"}} + {{else}} + + {{end}} +
    +
    +
    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 @@ +

    + {{ctx.Locale.Tr "packages.owner.settings.cleanuprules.title"}} +
    + {{ctx.Locale.Tr "packages.owner.settings.cleanuprules.add"}} +
    +

    +
    +
    + {{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}} +
    + +
    + {{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"}}

    +
    +

    {{ctx.Locale.Tr "packages.owner.settings.cleanuprules.preview.overview" (len .VersionsToRemove)}}

    +
    +
    + + + + + + + + + + + + + {{range .VersionsToRemove}} + + + + + + + + + {{else}} + + + + {{end}} + +
    {{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"}}
    {{.Package.Type.Name}}{{.Package.Name}}{{.Version.Version}}{{.Creator.Name}}{{FileSize .CalculateBlobSize}}{{DateUtils.AbsoluteShort .Version.CreatedUnix}}
    {{ctx.Locale.Tr "packages.owner.settings.cleanuprules.preview.none"}}
    +
    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")}} + + {{template "shared/search/button"}} +
    +
    +{{end}} +
    + {{range .PackageDescriptors}} +
    +
    +
    +
    + {{.Package.Name}} + {{svg .Package.Type.SVGName 16}} {{.Package.Type.Name}} +
    +
    + {{$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")}} + + {{if eq .PackageDescriptor.Package.Type "container"}} + + {{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" .}} +
    +

    {{.PackageDescriptor.Package.Name}} ({{.PackageDescriptor.Version.Version}})

    +
    + {{$timeStr := DateUtils.TimeSince .PackageDescriptor.Version.CreatedUnix}} + {{if .HasRepositoryAccess}} + {{ctx.Locale.Tr "packages.published_by_in" $timeStr .PackageDescriptor.Creator.HomeLink .PackageDescriptor.Creator.GetDisplayName .PackageDescriptor.Repository.Link .PackageDescriptor.Repository.FullName}} + {{else}} + {{ctx.Locale.Tr "packages.published_by" $timeStr .PackageDescriptor.Creator.HomeLink .PackageDescriptor.Creator.GetDisplayName}} + {{end}} +
    +
    +
    +
    + {{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}} +
    + {{.File.Name}} + {{FileSize .Blob.Size}} +
    + {{end}} +
    + {{end}} +
    + {{ctx.Locale.Tr "packages.versions"}} ({{.TotalVersionCount}}) + {{ctx.Locale.Tr "packages.versions.view_all"}} +
    + {{range .LatestVersions}} +
    + {{.Version}} + {{DateUtils.AbsoluteShort .CreatedUnix}} +
    + {{end}} +
    + {{if or .CanWritePackages .HasRepositoryAccess}} +
    +
    + {{if .HasRepositoryAccess}} +
    {{svg "octicon-issue-opened"}} {{ctx.Locale.Tr "repo.issues"}}
    + {{end}} + {{if .CanWritePackages}} +
    {{svg "octicon-tools"}} {{ctx.Locale.Tr "repo.settings"}}
    + {{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" .}} +
    +
    +
    +
    +
    +
    +
    +
    + {{ctx.Locale.Tr +
    +
    +
    + +
    +
    +
    +
    +
    +{{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)}} +
    + +
    + {{ctx.Locale.Tr "repo.projects.new"}} +
    +
    +{{end}} + +{{template "base/alert" .}} + +
    + + + +
    + + +
    +
    + +
    + {{range .Projects}} +
  • +

    + {{svg .IconName 16}} + {{.Title}} +

    +
    +
    +
    + {{svg "octicon-issue-opened" 14}} + {{ctx.Locale.PrettyNumber .NumOpenIssues}} {{ctx.Locale.Tr "repo.issues.open_title"}} +
    +
    + {{svg "octicon-check" 14}} + {{ctx.Locale.PrettyNumber .NumClosedIssues}} {{ctx.Locale.Tr "repo.issues.closed_title"}} +
    +
    + {{if and $.CanWriteProjects (not $.Repository.IsArchived)}} + + {{end}} +
    + {{if .Description}} +
    + {{.RenderedContent}} +
    + {{end}} +
  • + {{end}} + + {{template "base/paginate" .}} +
    + +{{if and $.CanWriteProjects (not $.Repository.IsArchived)}} + +{{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 @@ +

    + {{if .PageIsEditProjects}} + {{ctx.Locale.Tr "repo.projects.edit"}} +
    {{ctx.Locale.Tr "repo.projects.edit_subheader"}}
    + {{else}} + {{ctx.Locale.Tr "repo.projects.new"}} +
    {{ctx.Locale.Tr "repo.projects.new_subheader"}}
    + {{end}} +

    +{{template "base/alert" .}} +
    + {{.CsrfTokenHtml}} +
    + +
    + + +
    +
    + + {{/* 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}} +
    + + +
    + {{end}} + +
    + + +
    +
    +
    +
    + + {{ctx.Locale.Tr "repo.milestones.cancel"}} + + +
    +
    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}} + + + {{end}} +
    + +
    {{$.Project.RenderedContent}}
    + +
    +
    + +
    +
    + {{range .Columns}} +
    +
    +
    + {{.NumIssues}} +
    +
    {{.Title}}
    + {{if $canWriteProject}} + + {{end}} +
    +
    +
    + {{range (index $.IssuesMap .ID)}} +
    + {{template "repo/issue/card" (dict "Issue" . "Page" $)}} +
    + {{end}} +
    +
    + {{end}} +
    +
    + +{{if .CanWriteProjects}} + +{{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}} +
    +
    + {{template "repo/actions/status" (dict "status" .Status.String)}} +
    +
    + + {{if .Title}}{{.Title}}{{else}}{{ctx.Locale.Tr "actions.runs.empty_commit_message"}}{{end}} + +
    + {{if not $.CurWorkflow}}{{.WorkflowID}} {{end}}#{{.Index}}: + {{- if .ScheduleID -}} + {{ctx.Locale.Tr "actions.runs.scheduled"}} + {{- else -}} + {{ctx.Locale.Tr "actions.runs.commit"}} + {{ShortSha .CommitSHA}} + {{ctx.Locale.Tr "actions.runs.pushed_by"}} + {{.TriggerUser.GetDisplayName}} + {{- end -}} +
    +
    +
    + {{if .IsRefDeleted}} + {{.PrettyRef}} + {{else}} + {{.PrettyRef}} + {{end}} +
    +
    {{svg "octicon-calendar" 16}}{{DateUtils.TimeSince .Updated}}
    +
    {{svg "octicon-stopwatch" 16}}{{.Duration}}
    +
    +
    +
    + {{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"}} + +
    + 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}} +
    +

    +
    + {{template "repo/file_info" .}} +
    +
    +
    + {{ctx.Locale.Tr "repo.file_raw"}} + {{if not .IsViewCommit}} + {{ctx.Locale.Tr "repo.file_permalink"}} + {{end}} + {{ctx.Locale.Tr "repo.normal_view"}} + {{ctx.Locale.Tr "repo.file_history"}} + + +
    +
    +

    +
    +
    + {{if .IsFileTooLarge}} + {{template "shared/filetoolarge" dict "RawFileLink" .RawFileLink}} + {{else if not .FileSize}} + {{template "shared/fileisempty"}} + {{else}} + + + {{range $row := .BlameRows}} + + + + + {{if $.EscapeStatus.Escaped}} + + {{end}} + + + {{end}} + +
    +
    +
    +
    + {{$row.Avatar}} +
    + +
    + {{$row.CommitSince}} +
    +
    +
    +
    + {{if $row.PreviousSha}} + + {{svg "octicon-versions"}} + + {{end}} + + + + {{if $row.EscapeStatus.Escaped}} + + {{end}} + + {{$row.Code}} +
    + {{end}}{{/* end if .IsFileTooLarge */}} +
    + {{if $.Permission.CanRead ctx.Consts.RepoUnitTypeIssues}} + {{ctx.Locale.Tr "repo.issues.context.reference_issue"}} + {{end}} + {{ctx.Locale.Tr "repo.file_copy_permalink"}} +
    +
    +
    +
    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}} +

    + {{ctx.Locale.Tr "repo.default_branch"}} + {{if and $.IsWriter (not $.Repository.IsArchived) (not .IsDeleted)}} + + {{svg "octicon-arrow-switch"}} + + {{end}} +

    + +
    + + + + + + + +
    +
    + {{.DefaultBranchBranch.DBBranch.Name}} + {{if .DefaultBranchBranch.IsProtected}} + {{svg "octicon-shield-lock"}} + {{end}} + + {{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)}} + + {{end}} + {{if .EnableFeed}} + {{svg "octicon-rss"}} + {{end}} + {{if not $.DisableDownloadSourceArchives}} + + {{end}} + {{if and $.IsWriter (not $.Repository.IsArchived) (not .IsDeleted) (not $.IsMirror)}} + + {{end}} +
    +
    + {{end}} + +

    +
    + {{ctx.Locale.Tr "repo.branches"}} +
    +

    + +
    +
    + {{template "shared/search/combo" dict "Value" .Keyword "Placeholder" (ctx.Locale.Tr "search.branch_kind")}} +
    +
    + +
    + + + {{range .Branches}} + + + + + + + {{end}} + +
    + {{if .DBBranch.IsDeleted}} +
    + {{.DBBranch.Name}} + +
    +

    {{ctx.Locale.Tr "repo.branch.deleted_by" .DBBranch.DeletedBy.Name}} {{DateUtils.TimeSince .DBBranch.DeletedUnix}}

    + {{else}} +
    + {{.DBBranch.Name}} + {{if .IsProtected}} + {{svg "octicon-shield-lock"}} + {{end}} + + {{template "repo/commit_statuses" dict "Status" (index $.CommitStatus .DBBranch.CommitID) "Statuses" (index $.CommitStatuses .DBBranch.CommitID)}} +
    +

    {{svg "octicon-git-commit" 16 "tw-mr-1"}}{{ShortSha .DBBranch.CommitID}} · {{ctx.RenderUtils.RenderCommitMessage .DBBranch.CommitMessage ($.Repository.ComposeMetas ctx)}} · {{ctx.Locale.Tr "org.repo_updated"}} {{DateUtils.TimeSince .DBBranch.CommitTime}}{{if .DBBranch.Pusher}}  {{template "shared/user/avatarlink" dict "user" .DBBranch.Pusher}}  {{template "shared/user/namelink" .DBBranch.Pusher}}{{end}}

    + {{end}} +
    + {{if and (not .DBBranch.IsDeleted) $.DefaultBranchBranch}} +
    +
    +
    {{.CommitsBehind}}
    + {{/* old code bears 0/0.0 = NaN output, so it might output invalid "width: NaNpx", it just works and doesn't caues any problem. */}} +
    +
    +
    +
    {{.CommitsAhead}}
    +
    +
    +
    + {{end}} +
    + {{if not .LatestPullRequest}} + {{if .IsIncluded}} + + {{svg "octicon-git-pull-request"}} {{ctx.Locale.Tr "repo.branch.included"}} + + {{else if and (not .DBBranch.IsDeleted) $.AllowsPulls (gt .CommitsAhead 0)}} + + + + {{end}} + {{else if and .LatestPullRequest.HasMerged .MergeMovedOn}} + {{if and (not .DBBranch.IsDeleted) $.AllowsPulls (gt .CommitsAhead 0)}} + + + + {{end}} + {{else}} + {{if not .LatestPullRequest.IsSameRepo}}{{.LatestPullRequest.BaseRepo.FullName}}{{end}}#{{.LatestPullRequest.Issue.Index}} + {{if .LatestPullRequest.HasMerged}} + {{svg "octicon-git-merge" 16 "tw-mr-1"}}{{ctx.Locale.Tr "repo.pulls.merged"}} + {{else if .LatestPullRequest.Issue.IsClosed}} + {{svg "octicon-git-pull-request-closed" 16 "tw-mr-1"}}{{ctx.Locale.Tr "repo.issues.closed_title"}} + {{else}} + {{svg "octicon-git-pull-request" 16 "tw-mr-1"}}{{ctx.Locale.Tr "repo.issues.open_title"}} + {{end}} + {{end}} + + {{if and $.IsWriter (not $.Repository.IsArchived) (not .DBBranch.IsDeleted)}} + + {{end}} + {{if $.EnableFeed}} + {{svg "octicon-rss"}} + {{end}} + {{if and (not .DBBranch.IsDeleted) (not $.DisableDownloadSourceArchives)}} + + {{end}} + {{if and $.IsWriter (not $.Repository.IsArchived) (not .DBBranch.IsDeleted) (not $.IsMirror)}} + + {{end}} + {{if and $.IsWriter (not $.IsMirror) (not $.Repository.IsArchived) (not .IsProtected)}} + {{if .DBBranch.IsDeleted}} + + {{else}} + + {{end}} + {{end}} +
    +
    + {{template "base/paginate" .}} +
    +
    + + + + + + +{{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 */}} + +
    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 @@ + + + + + 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 @@ + 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}} + + {{end}} + {{if $.CloneButtonShowSSH}} + + {{end}} + + +
    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-terminal"}} Clone
    + +
    + + {{if $.CloneButtonShowHTTPS}} + + {{end}} + {{if $.CloneButtonShowSSH}} + + {{end}} +
    +
    + +
    +
    + +
    + {{svg "octicon-copy" 14}} +
    +
    +
    + + {{if not .PageIsWiki}} +
    + {{range .OpenWithEditorApps}} + {{.IconHTML}}{{ctx.Locale.Tr "repo.open_with_editor" .DisplayName}} + {{end}} +
    + + {{if and (not $.DisableDownloadSourceArchives) $.RefName}} +
    +
    + {{svg "octicon-file-zip"}} {{ctx.Locale.Tr "repo.download_zip"}} + {{svg "octicon-file-zip"}} {{ctx.Locale.Tr "repo.download_tar"}} + {{svg "octicon-package"}} {{ctx.Locale.Tr "repo.download_bundle"}} +
    + {{end}} + {{end}} +
    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}} + + {{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}} +
    +
    +

    {{ctx.RenderUtils.RenderCommitMessage .Commit.Message ($.Repository.ComposeMetas ctx)}}{{template "repo/commit_statuses" dict "Status" .CommitStatus "Statuses" .CommitStatuses}}

    + {{if not $.PageIsWiki}} +
    + + {{ctx.Locale.Tr "repo.diff.browse_source"}} + + {{if and ($.Permission.CanWrite ctx.Consts.RepoUnitTypeCode) (not $.Repository.IsArchived) (not .IsDeleted)}}{{- /* */ -}} + + {{end}} +
    + {{end}} +
    + {{if IsMultilineCommitMessage .Commit.Message}} +
    {{ctx.RenderUtils.RenderCommitBody .Commit.Message ($.Repository.ComposeMetas ctx)}}
    + {{end}} + {{template "repo/commit_load_branches_and_tags" .}} +
    +
    +
    + {{if .Author}} + {{ctx.AvatarUtils.Avatar .Author 28 "tw-mr-2"}} + {{if .Author.FullName}} + {{.Author.FullName}} + {{else}} + {{.Commit.Author.Name}} + {{end}} + {{else}} + {{ctx.AvatarUtils.AvatarByEmail .Commit.Author.Email .Commit.Author.Email 28 "tw-mr-2"}} + {{.Commit.Author.Name}} + {{end}} + {{DateUtils.TimeSince .Commit.Author.When}} + {{if or (ne .Commit.Committer.Name .Commit.Author.Name) (ne .Commit.Committer.Email .Commit.Author.Email)}} + {{ctx.Locale.Tr "repo.diff.committed_by"}} + {{if ne .Verification.CommittingUser.ID 0}} + {{ctx.AvatarUtils.Avatar .Verification.CommittingUser 28 "tw-mx-2"}} + {{.Commit.Committer.Name}} + {{else}} + {{ctx.AvatarUtils.AvatarByEmail .Commit.Committer.Email .Commit.Committer.Name 28 "tw-mr-2"}} + {{.Commit.Committer.Name}} + {{end}} + {{end}} +
    +
    + {{if .Parents}} +
    + {{ctx.Locale.Tr "repo.diff.parent"}} + {{range .Parents}} + {{if $.PageIsWiki}} + {{ShortSha .}} + {{else}} + {{ShortSha .}} + {{end}} + {{end}} +
    + {{end}} +
    + {{ctx.Locale.Tr "repo.diff.commit"}} + {{ShortSha .CommitID}} +
    +
    +
    + {{if .Commit.Signature}} +
    +
    + {{if .Verification.Verified}} + {{if ne .Verification.SigningUser.ID 0}} + {{svg "gitea-lock" 16 "tw-mr-2"}} + {{if eq .Verification.TrustStatus "trusted"}} + {{ctx.Locale.Tr "repo.commits.signed_by"}}: + {{else if eq .Verification.TrustStatus "untrusted"}} + {{ctx.Locale.Tr "repo.commits.signed_by_untrusted_user"}}: + {{else}} + {{ctx.Locale.Tr "repo.commits.signed_by_untrusted_user_unmatched"}}: + {{end}} + {{ctx.AvatarUtils.Avatar .Verification.SigningUser 28 "tw-mr-2"}} + {{.Verification.SigningUser.GetDisplayName}} + {{else}} + {{svg "gitea-lock-cog" 16 "tw-mr-2"}} + {{ctx.Locale.Tr "repo.commits.signed_by"}}: + {{ctx.AvatarUtils.AvatarByEmail .Verification.SigningEmail "" 28 "tw-mr-2"}} + {{.Verification.SigningUser.GetDisplayName}} + {{end}} + {{else}} + {{svg "gitea-unlock" 16 "tw-mr-2"}} + {{ctx.Locale.Tr .Verification.Reason}} + {{end}} +
    +
    + {{if .Verification.Verified}} + {{if ne .Verification.SigningUser.ID 0}} + {{svg "octicon-verified" 16 "tw-mr-2"}} + {{if .Verification.SigningSSHKey}} + {{ctx.Locale.Tr "repo.commits.ssh_key_fingerprint"}}: + {{.Verification.SigningSSHKey.Fingerprint}} + {{else}} + {{ctx.Locale.Tr "repo.commits.gpg_key_id"}}: + {{.Verification.SigningKey.PaddedKeyID}} + {{end}} + {{else}} + {{svg "octicon-unverified" 16 "tw-mr-2"}} + {{if .Verification.SigningSSHKey}} + {{ctx.Locale.Tr "repo.commits.ssh_key_fingerprint"}}: + {{.Verification.SigningSSHKey.Fingerprint}} + {{else}} + {{ctx.Locale.Tr "repo.commits.gpg_key_id"}}: + {{.Verification.SigningKey.PaddedKeyID}} + {{end}} + {{end}} + {{else if .Verification.Warning}} + {{svg "octicon-unverified" 16 "tw-mr-2"}} + {{if .Verification.SigningSSHKey}} + {{ctx.Locale.Tr "repo.commits.ssh_key_fingerprint"}}: + {{.Verification.SigningSSHKey.Fingerprint}} + {{else}} + {{ctx.Locale.Tr "repo.commits.gpg_key_id"}}: + {{.Verification.SigningKey.PaddedKeyID}} + {{end}} + {{else}} + {{if .Verification.SigningKey}} + {{if ne .Verification.SigningKey.KeyID ""}} + {{svg "octicon-verified" 16 "tw-mr-2"}} + {{ctx.Locale.Tr "repo.commits.gpg_key_id"}}: + {{.Verification.SigningKey.PaddedKeyID}} + {{end}} + {{end}} + {{if .Verification.SigningSSHKey}} + {{if ne .Verification.SigningSSHKey.Fingerprint ""}} + {{svg "octicon-verified" 16 "tw-mr-2"}} + {{ctx.Locale.Tr "repo.commits.ssh_key_fingerprint"}}: + {{.Verification.SigningSSHKey.Fingerprint}} + {{end}} + {{end}} + {{end}} +
    +
    + {{end}} + {{if .NoteRendered}} +
    + {{svg "octicon-note" 16 "tw-mr-2"}} + {{ctx.Locale.Tr "repo.diff.git-notes"}}: + {{if .NoteAuthor}} + + {{if .NoteAuthor.FullName}} + {{.NoteAuthor.FullName}} + {{else}} + {{.NoteCommit.Author.Name}} + {{end}} + + {{else}} + {{.NoteCommit.Author.Name}} + {{end}} + {{DateUtils.TimeSince .NoteCommit.Author.When}} +
    +
    +
    {{.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" .}} +
    +
    + {{- /* for /owner/repo/commits/branch/the-name */ -}} + {{- $branchDropdownCurrentRefType := "branch" -}} + {{- $branchDropdownCurrentRefShortName := .BranchName -}} + {{- if .IsViewTag -}} + {{- /* for /owner/repo/commits/tag/the-name */ -}} + {{- $branchDropdownCurrentRefType = "tag" -}} + {{- $branchDropdownCurrentRefShortName = .TagName -}} + {{- else if .IsViewCommit -}} + {{- /* for /owner/repo/commits/commit/000000 */ -}} + {{- $branchDropdownCurrentRefType = "commit" -}} + {{- $branchDropdownCurrentRefShortName = ShortSha .CommitID -}} + {{- end -}} + {{- template "repo/branch_dropdown" dict + "Repository" .Repository + "ShowTabBranches" true + "ShowTabTags" true + "CurrentRefType" $branchDropdownCurrentRefType + "CurrentRefShortName" $branchDropdownCurrentRefShortName + "CurrentTreePath" .TreePath + "RefLinkTemplate" "{RepoLink}/commits/{RefType}/{RefShortName}/{TreePath}" + "AllowCreateNewRef" .CanCreateBranch + -}} + + {{svg "octicon-git-branch"}} + {{ctx.Locale.Tr "repo.commit_graph"}} + +
    +
    + {{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 @@ +
    + + + + + + + + + + + + {{$commitRepoLink := $.RepoLink}}{{if $.CommitRepoLink}}{{$commitRepoLink = $.CommitRepoLink}}{{end}} + {{range .Commits}} + + + + + {{if .Committer}} + + {{else}} + + {{end}} + + + {{end}} + +
    {{ctx.Locale.Tr "repo.commits.author"}}{{StringUtils.ToUpper $.Repository.ObjectFormatName}}{{ctx.Locale.Tr "repo.commits.message"}}{{ctx.Locale.Tr "repo.commits.date"}}
    +
    + {{$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}} +
    {{DateUtils.TimeSince .Committer.When}}{{DateUtils.TimeSince .Author.When}} + + {{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}} +
    +
    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 @@ + 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 or .PageIsCommits (gt .CommitCount 0)}} + {{.CommitCount}} {{ctx.Locale.Tr "repo.commits.commits"}} + {{else if .IsNothingToCompare}} + {{ctx.Locale.Tr "repo.commits.nothing_to_compare"}} + {{else}} + {{ctx.Locale.Tr "repo.commits.no_commits" $.BaseBranch $.HeadBranch}} + {{end}} +
    + {{if .IsDiffCompare}} +
    + {{if not .BaseIsCommit}}{{if .BaseIsBranch}}{{svg "octicon-git-branch"}}{{else if .BaseIsTag}}{{svg "octicon-tag"}}{{end}}{{.BaseBranch}}{{else}}{{ShortSha .BaseBranch}}{{end}} + ... + {{if not .HeadIsCommit}}{{if .HeadIsBranch}}{{svg "octicon-git-branch"}}{{else if .HeadIsTag}}{{svg "octicon-tag"}}{{end}}{{.HeadBranch}}{{else}}{{ShortSha .HeadBranch}}{{end}} +
    + {{end}} +

    + +{{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}} +

    + {{ctx.Locale.Tr "new_repo"}} +

    +
    + {{template "base/alert" .}} + {{template "repo/create_helper" .}} +
    +
    + + + {{ctx.Locale.Tr "repo.owner_helper"}} +
    + +
    + + + {{ctx.Locale.Tr "repo.repo_name_helper"}} +
    +
    + +
    + {{if .IsForcedPrivate}} + + + {{else}} + + + {{end}} +
    + {{ctx.Locale.Tr "repo.visibility_description"}} +
    +
    + + +
    +
    + + +
    + +
    +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    +
    + +
    +
    + + +
    + +
    + +
    + + + {{ctx.Locale.Tr "repo.repo_gitignore_helper_desc"}} +
    +
    + + + {{ctx.Locale.Tr "repo.license_helper_desc" "https://choosealicense.com/"}} +
    + +
    + + + {{ctx.Locale.Tr "repo.readme_helper_desc"}} +
    +
    +
    + + +
    +
    +
    + + + {{ctx.Locale.Tr "repo.default_branch_helper"}} +
    +
    + + + {{ctx.Locale.Tr "repo.object_format_helper"}} +
    +
    + +
    + + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    +{{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)}} + + {{end}} + {{if or (eq $expandDirection 3) (eq $expandDirection 4)}} + + {{end}} + {{if eq $expandDirection 2}} + + {{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)}} + + {{end}} + {{if or (eq $expandDirection 3) (eq $expandDirection 4)}} + + {{end}} + {{if eq $expandDirection 2}} + + {{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}} + + + {{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)}} +
    + + +
    + {{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 + */}} + +
    + {{end}} + {{if and .PageIsPullFiles $.SignedUserID (not .IsArchived)}} + {{template "repo/diff/new_review" .}} + {{end}} +
    +
    + {{if not .DiffNotAvailable}} + {{if and .IsShowingOnlySingleCommit .PageIsPullFiles}} +
    +
    {{ctx.Locale.Tr "repo.pulls.showing_only_single_commit" (ShortSha .AfterCommitID)}} - {{ctx.Locale.Tr "repo.pulls.show_all_commits"}}
    +
    + {{else if and (not .IsShowingAllCommits) .PageIsPullFiles}} +
    +
    {{ctx.Locale.Tr "repo.pulls.showing_specified_commit_range" (ShortSha .BeforeCommitID) (ShortSha .AfterCommitID)}} - {{ctx.Locale.Tr "repo.pulls.show_all_commits"}}
    +
    + {{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 $file.IsBin}} + + {{ctx.Locale.Tr "repo.diff.bin"}} + + {{else}} + {{template "repo/diff/stats" dict "file" . "root" $}} + {{end}} +
    + {{if $file.IsRenamed}}{{$file.OldName}} → {{end}}{{$file.Name}} + {{if .IsLFSFile}} ({{ctx.Locale.Tr "repo.stored_lfs"}}){{end}} + + {{if $file.IsGenerated}} + {{ctx.Locale.Tr "repo.diff.generated"}} + {{end}} + {{if $file.IsVendored}} + {{ctx.Locale.Tr "repo.diff.vendored"}} + {{end}} + {{if and $file.Mode $file.OldMode}} + {{$old := ctx.Locale.Tr ($file.ModeTranslationKey $file.OldMode)}} + {{$new := ctx.Locale.Tr ($file.ModeTranslationKey $file.Mode)}} + {{ctx.Locale.Tr "git.filemode.changed_filemode" $old $new}} + {{else if $file.Mode}} + {{ctx.Locale.Tr ($file.ModeTranslationKey $file.Mode)}} + {{end}} + +
    +
    + {{if $showFileViewToggle}} +
    + + +
    + {{end}} + {{if $file.IsProtected}} + {{ctx.Locale.Tr "repo.diff.protected"}} + {{end}} + {{if and $isReviewFile $file.HasChangedSinceLastReview}} + {{ctx.Locale.Tr "repo.pulls.has_changed_since_last_review"}} + {{end}} + {{if $isReviewFile}} + + {{end}} + +
    + {{if not (or $file.IsIncomplete $file.IsBin $file.IsSubmodule)}} + + + {{end}} + {{if and (not $file.IsSubmodule) (not $.PageIsWiki)}} + {{if $file.IsDeleted}} + {{ctx.Locale.Tr "repo.diff.view_file"}} + {{else}} + {{ctx.Locale.Tr "repo.diff.view_file"}} + {{if and $.Repository.CanEnableEditor $.CanEditFile (not $file.IsLFSFile) (not $file.IsBin)}} + {{ctx.Locale.Tr "repo.editor.edit_this_file"}} + {{end}} + {{end}} + {{end}} +
    +
    +

    +
    +
    + {{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}} +
    +

    + {{ctx.Locale.Tr "repo.diff.too_many_files"}} + {{ctx.Locale.Tr "repo.diff.show_more"}} +

    +
    + {{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)}} +
    + {{$.root.CsrfTokenHtml}} + + + + + + + + +
    + {{template "shared/combomarkdowneditor" (dict + "CustomInit" true + "MarkdownPreviewInRepo" $.root.Repository + "MarkdownPreviewMode" "comment" + "TextareaName" "content" + "TextareaPlaceholder" (ctx.Locale.Tr "repo.diff.comment.placeholder") + "DropzoneParentContainer" "form" + "DisableAutosize" "true" + )}} +
    + {{if $.root.IsAttachmentEnabled}} +
    + {{template "repo/upload" $.root}} +
    + {{end}} + + +
    +{{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}} +
    + {{if .OriginalAuthor}} + {{ctx.AvatarUtils.Avatar nil}} + {{else}} + {{template "shared/user/avatarlink" dict "user" .Poster}} + {{end}} +
    +
    +
    + {{if .OriginalAuthor}} + + {{svg (MigrationIcon $.root.Repository.GetOriginalURLHostname)}} + {{.OriginalAuthor}} + + + {{ctx.Locale.Tr "repo.issues.commented_at" .HashTag $createdStr}} + + + {{if $.root.Repository.OriginalURL}} + ({{ctx.Locale.Tr "repo.migrated_from" $.root.Repository.OriginalURL $.root.Repository.GetOriginalURLHostname}}) + {{end}} + + {{else}} + + {{template "shared/user/namelink" .Poster}} + {{ctx.Locale.Tr "repo.issues.commented_at" .HashTag $createdStr}} + + {{end}} +
    +
    + {{if .Invalidated}} + {{$referenceUrl := printf "%s#%s" $.root.Issue.Link .HashTag}} + + {{ctx.Locale.Tr "repo.issues.review.outdated"}} + + {{end}} + {{if .Review}} + {{if eq .Review.Type 0}} +
    + {{ctx.Locale.Tr "repo.issues.review.pending"}} +
    + {{else}} +
    + {{ctx.Locale.Tr "repo.issues.review.review"}} +
    + {{end}} + {{end}} + {{template "repo/issue/view_content/add_reaction" dict "ActionURL" (printf "%s/comments/%d/reactions" $.root.RepoLink .ID)}} + {{template "repo/issue/view_content/context_menu" dict "item" . "delete" true "issue" false "diff" true "IsCommentPoster" (and $.root.IsSigned (eq $.root.SignedUserID .PosterID))}} +
    +
    +
    +
    + {{if .RenderedContent}} + {{.RenderedContent}} + {{else}} + {{ctx.Locale.Tr "repo.issues.no_content"}} + {{end}} +
    +
    {{.Content}}
    +
    + {{if .Attachments}} + {{template "repo/issue/view_content/attachments" dict "Attachments" .Attachments "RenderedContent" .RenderedContent}} + {{end}} +
    + {{$reactions := .Reactions.GroupByType}} + {{if $reactions}} + {{template "repo/issue/view_content/reactions" dict "ActionURL" (printf "%s/comments/%d/reactions" $.root.RepoLink .ID) "Reactions" $reactions}} + {{end}} +
    +
    +{{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}} +
    +

    + {{if and $.PageIsComparePull $.IsSigned (not .Repository.IsArchived)}} + {{ctx.Locale.Tr "repo.pulls.compare_changes"}} +
    {{ctx.Locale.Tr "repo.pulls.compare_changes_desc"}}
    + {{else}} + {{ctx.Locale.Tr "action.compare_commits_general"}} + {{end}} +

    + {{$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"}} + + {{svg "octicon-arrow-left" 16}}
    {{.CompareSeparator}}
    + +
    + + {{if .IsNothingToCompare}} + {{if and $.IsSigned $.AllowEmptyPr (not .Repository.IsArchived) .PageIsComparePull}} +
    {{ctx.Locale.Tr "repo.pulls.nothing_to_compare_and_allow_empty_pr"}}
    +
    + +
    +
    + {{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)}} +
    + +
    + {{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}} +
    +
    + {{svg "octicon-check" 16 "icon tw-mr-1"}} + {{$resolveDoer.Name}} {{ctx.Locale.Tr "repo.issues.review.resolved_by"}} + {{if $invalid}} + + + {{ctx.Locale.Tr "repo.issues.review.outdated"}} + + {{end}} +
    +
    + + +
    +
    + {{end}} +
    +
    + + {{template "repo/diff/comments" dict "root" $ "comments" .comments}} + +
    +
    +
    + + +
    + {{if and $.CanMarkConversation $hasReview (not $isReviewPending)}} + + {{end}} + {{if and $.SignedUserID (not $.Repository.IsArchived)}} + + {{end}} +
    + {{template "repo/diff/comment_form_datahandler" dict "hidden" true "reply" $comment.ReviewID "root" $ "comment" $comment}} +
    +
    +{{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)}} + + {{range $j, $cell := $row.Cells}} + {{if not $cell}} + + {{else if eq $cell.Type 2}} + + {{else if eq $cell.Type 3}} + + {{else if eq $cell.Type 4}} + + {{else if eq $cell.Type 5}} + + {{else if eq $cell.Type 6}} + + {{else}} + + {{end}} + {{end}} + {{else}} + + {{range $j, $cell := $row.Cells}} + {{if not $cell}} + + {{else if eq $cell.Type 2}} + + {{else if eq $cell.Type 3}} + + {{else if eq $cell.Type 4}} + + {{else if eq $cell.Type 5}} + + {{else if eq $cell.Type 6}} + + {{else}} + + {{end}} + {{end}} + {{end}} + + {{end}} + + {{end}} +
    {{.RowIdx}}{{.LeftCell}} {{.RightCell}}{{.RightCell}}{{.LeftCell}}{{.RightCell}}{{.LeftCell}} {{.RightCell}}{{.RightCell}}{{if .RowIdx}}{{.RowIdx}}{{end}}{{.LeftCell}} {{.RightCell}}{{.RightCell}}{{.LeftCell}}{{.RightCell}}{{.LeftCell}} {{.RightCell}}{{.RightCell}}
    + {{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_before"}}

    + +

    + + {{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_after"}}

    + +

    + + {{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 @@ +
    +
    + {{template "repo/diff/comment_form_datahandler" .}} +
    +
    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 @@ +
    + + {{if $.IsShowingAllCommits}} +
    +
    +
    + {{.CsrfTokenHtml}} + +
    +
    {{ctx.Locale.Tr "repo.diff.review.header"}}
    + {{svg "octicon-x" 16}} +
    +
    + {{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}} + + + + {{else}} + + {{end}} + {{end}} + + {{if not $.Issue.IsClosed}} + {{if $showSelfTooltip}} + + + + {{else}} + + {{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 @@ + 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)}} + + {{end}} + {{if or (eq $expandDirection 3) (eq $expandDirection 4)}} + + {{end}} + {{if eq $expandDirection 2}} + + {{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}} + + + {{if $line.Comments}} + {{if eq $line.GetCommentSide "previous"}} + {{template "repo/diff/conversation" dict "." $.root "comments" $line.Comments}} + {{end}} + {{end}} + {{if $match.Comments}} + {{if eq $match.GetCommentSide "previous"}} + {{template "repo/diff/conversation" dict "." $.root "comments" $match.Comments}} + {{end}} + {{end}} + + + {{if $line.Comments}} + {{if eq $line.GetCommentSide "proposed"}} + {{template "repo/diff/conversation" dict "." $.root "comments" $line.Comments}} + {{end}} + {{end}} + {{if $match.Comments}} + {{if eq $match.GetCommentSide "proposed"}} + {{template "repo/diff/conversation" dict "." $.root "comments" $match.Comments}} + {{end}} + {{end}} + + + {{end}} + {{else if $line.Comments}} + + + {{if eq $line.GetCommentSide "previous"}} + {{template "repo/diff/conversation" dict "." $.root "comments" $line.Comments}} + {{end}} + + + {{if eq $line.GetCommentSide "proposed"}} + {{template "repo/diff/conversation" dict "." $.root "comments" $line.Comments}} + {{end}} + + + {{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)}} + + {{end}} + {{if or (eq $expandDirection 3) (eq $expandDirection 4)}} + + {{end}} + {{if eq $expandDirection 2}} + + {{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}} + + + {{template "repo/diff/conversation" dict "." $.root "comments" $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 (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 @@ +
    + {{ctx.AvatarUtils.Avatar .SignedUser 40 "commit-avatar"}} +
    +

    {{- if .CanCommitToBranch.WillSign}} + {{svg "octicon-lock" 24}} + {{ctx.Locale.Tr "repo.editor.commit_signed_changes"}} + {{- else}} + {{svg "octicon-unlock" 24}} + {{ctx.Locale.Tr "repo.editor.commit_changes"}} + {{- end}}

    +
    + +
    +
    + +
    +
    +
    + + +
    +
    +
    +
    +
    + + +
    +
    + {{if and (not .Repository.IsEmpty) (not .IsEditingFileOnly)}} +
    +
    + {{if .CanCreatePullRequest}} + + {{else}} + + {{end}} + +
    +
    +
    +
    + {{svg "octicon-git-branch"}} + + +
    +
    + {{end}} +
    +
    + + {{ctx.Locale.Tr "repo.editor.cancel"}} +
    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}} + + +
    + +
    + + {{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" .}} +
    + {{.CsrfTokenHtml}} +
    + +
    +
    + {{template "repo/upload" .}} +
    + {{template "repo/editor/commit_form" .}} +
    +
    +
    +{{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.quick_guide"}}

    +
    +
    +

    {{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 and .CanWriteCode (not .Repository.IsArchived)}} + + {{ctx.Locale.Tr "repo.editor.new_file"}} + + {{if .RepositoryUploadEnabled}} + + {{ctx.Locale.Tr "repo.editor.upload_file"}} + + {{end}} + {{end}} + {{template "repo/clone_buttons" .}} +
    +
    + + {{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" .}} +
    +
    + {{.RepoName}} + / +
    + +
    +
    + + + +
    +
    +

    {{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" .}} +
    +

    + {{ctx.Locale.Tr "repo.forks"}} +

    +
    + {{range .Forks}} +
    + {{ctx.AvatarUtils.Avatar .Owner}} + {{.Owner.Name}} / {{.Name}} +
    + {{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" .}} +
    +
    +

    + {{ctx.Locale.Tr "repo.commit_graph"}} +
    + + + +
    +

    +
    +
    + {{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 @@ +
    + +
    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}} +
    +
    +
    +
    + {{template "repo/icon" .}} +
    + +
    + {{if .IsArchived}} + {{ctx.Locale.Tr "repo.desc.archived"}} +
    {{svg "octicon-archive" 18}}
    + {{end}} + {{if .IsPrivate}} + {{ctx.Locale.Tr "repo.desc.private"}} +
    {{svg "octicon-lock" 18}}
    + {{else}} + {{if .Owner.Visibility.IsPrivate}} + {{ctx.Locale.Tr "repo.desc.internal"}} +
    {{svg "octicon-shield-lock" 18}}
    + {{end}} + {{end}} + {{if .IsTemplate}} + {{ctx.Locale.Tr "repo.desc.template"}} +
    {{svg "octicon-repo-template" 18}}
    + {{end}} + {{if eq .ObjectFormatName "sha256"}} + {{ctx.Locale.Tr "repo.desc.sha256"}} + {{end}} +
    +
    + {{if not (or .IsBeingCreated .IsBroken)}} +
    + {{if $.RepoTransfer}} +
    + {{$.CsrfTokenHtml}} +
    + +
    +
    +
    + {{$.CsrfTokenHtml}} +
    + +
    +
    + {{end}} + {{if $.EnableFeed}} + {{/* An extra div-element is not necessary here, as this button does not secretly contain two buttons. */}} + + {{svg "octicon-rss" 16}} + + {{end}} + {{template "repo/watch_unwatch" $}} + {{if not $.DisableStars}} + {{template "repo/star_unstar" $}} + {{end}} + {{if and (not .IsEmpty) ($.Permission.CanRead ctx.Consts.RepoUnitTypeCode)}} + + + {{end}} +
    + {{end}} +
    + {{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}}
    {{ctx.Locale.Tr "repo.forked_from"}} {{.BaseRepo.FullName}}
    {{end}} + {{if .IsGenerated}}
    {{ctx.Locale.Tr "repo.generated_from"}} {{(.TemplateRepo ctx).FullName}}
    {{end}} +
    +{{end}} +
    + + {{if not (or .Repository.IsBeingCreated .Repository.IsBroken)}} +
    + {{if .Permission.CanRead ctx.Consts.RepoUnitTypeCode}} + + {{svg "octicon-code"}} {{ctx.Locale.Tr "repo.code"}} + + {{end}} + + {{if .Permission.CanRead ctx.Consts.RepoUnitTypeIssues}} + + {{svg "octicon-issue-opened"}} {{ctx.Locale.Tr "repo.issues"}} + {{if .Repository.NumOpenIssues}} + {{CountFmt .Repository.NumOpenIssues}} + {{end}} + + {{end}} + + {{if .Permission.CanRead ctx.Consts.RepoUnitTypeExternalTracker}} + + {{svg "octicon-link-external"}} {{ctx.Locale.Tr "repo.issues"}} + + {{end}} + + {{if and .Repository.CanEnablePulls (.Permission.CanRead ctx.Consts.RepoUnitTypePullRequests)}} + + {{svg "octicon-git-pull-request"}} {{ctx.Locale.Tr "repo.pulls"}} + {{if .Repository.NumOpenPulls}} + {{CountFmt .Repository.NumOpenPulls}} + {{end}} + + {{end}} + + {{if and .EnableActions (.Permission.CanRead ctx.Consts.RepoUnitTypeActions) (not .IsEmptyRepo)}} + + {{svg "octicon-play"}} {{ctx.Locale.Tr "actions.actions"}} + {{if .Repository.NumOpenActionRuns}} + {{CountFmt .Repository.NumOpenActionRuns}} + {{end}} + + {{end}} + + {{if .Permission.CanRead ctx.Consts.RepoUnitTypePackages}} + + {{svg "octicon-package"}} {{ctx.Locale.Tr "packages.title"}} + + {{end}} + + {{$projectsUnit := .Repository.MustGetUnit ctx ctx.Consts.RepoUnitTypeProjects}} + {{if and (not ctx.Consts.RepoUnitTypeProjects.UnitGlobalDisabled) (.Permission.CanRead ctx.Consts.RepoUnitTypeProjects) ($projectsUnit.ProjectsConfig.IsProjectsAllowed "repo")}} + + {{svg "octicon-project"}} {{ctx.Locale.Tr "repo.projects"}} + {{if .Repository.NumOpenProjects}} + {{CountFmt .Repository.NumOpenProjects}} + {{end}} + + {{end}} + + {{if and (.Permission.CanRead ctx.Consts.RepoUnitTypeReleases) (not .IsEmptyRepo)}} + + {{svg "octicon-tag"}} {{ctx.Locale.Tr "repo.releases"}} + {{if .NumReleases}} + {{CountFmt .NumReleases}} + {{end}} + + {{end}} + + {{if .Permission.CanRead ctx.Consts.RepoUnitTypeWiki}} + + {{svg "octicon-book"}} {{ctx.Locale.Tr "repo.wiki"}} + + {{end}} + + {{if .Permission.CanRead ctx.Consts.RepoUnitTypeExternalWiki}} + + {{svg "octicon-link-external"}} {{ctx.Locale.Tr "repo.wiki"}} + + {{end}} + + {{if and (.Permission.CanReadAny ctx.Consts.RepoUnitTypePullRequests ctx.Consts.RepoUnitTypeIssues ctx.Consts.RepoUnitTypeReleases) (not .IsEmptyRepo)}} + + {{svg "octicon-pulse"}} {{ctx.Locale.Tr "repo.activity"}} + + {{end}} + + {{template "custom/extra_tabs" .}} + + {{if .Permission.IsAdmin}} + + + {{svg "octicon-tools"}} {{ctx.Locale.Tr "repo.settings"}} + + {{end}} +
    + {{else if .Permission.IsAdmin}} + + {{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 "repo/sub_menu" .}} +
    +
    + {{- /* for repo home (default branch) and /owner/repo/src/branch/the-name */ -}} + {{- $branchDropdownCurrentRefType := "branch" -}} + {{- $branchDropdownCurrentRefShortName := .BranchName -}} + {{- if .IsViewTag -}} + {{- /* for /owner/repo/src/tag/the-name */ -}} + {{- $branchDropdownCurrentRefType = "tag" -}} + {{- $branchDropdownCurrentRefShortName = .TagName -}} + {{- else if .IsViewCommit -}} + {{- /* for /owner/repo/src/commit/000000 */ -}} + {{- $branchDropdownCurrentRefType = "commit" -}} + {{- $branchDropdownCurrentRefShortName = ShortSha .CommitID -}} + {{- end -}} + {{- template "repo/branch_dropdown" dict + "Repository" .Repository + "ShowTabBranches" true + "ShowTabTags" true + "CurrentRefType" $branchDropdownCurrentRefType + "CurrentRefShortName" $branchDropdownCurrentRefShortName + "CurrentTreePath" .TreePath + "RefLinkTemplate" "{RepoLink}/src/{RefType}/{RefShortName}/{TreePath}" + "AllowCreateNewRef" .CanCreateBranch + "ShowViewAllRefsEntry" true + -}} + {{if and .CanCompareOrPull .IsViewBranch (not .Repository.IsArchived)}} + {{$cmpBranch := ""}} + {{if ne .Repository.ID .BaseRepo.ID}} + {{$cmpBranch = printf "%s/%s:" (.Repository.OwnerName|PathEscape) (.Repository.Name|PathEscape)}} + {{end}} + {{$cmpBranch = print $cmpBranch (.BranchName|PathEscapeSegments)}} + {{$compareLink := printf "%s/compare/%s...%s" .BaseRepo.Link (.BaseRepo.DefaultBranch|PathEscapeSegments) $cmpBranch}} + + {{svg "octicon-git-pull-request"}} + + {{end}} + + + {{if $isTreePathRoot}} + {{ctx.Locale.Tr "repo.find_file.go_to_file"}} + {{end}} + + {{if and .CanWriteCode .IsViewBranch (not .Repository.IsMirror) (not .Repository.IsArchived) (not .IsViewFile)}} + + {{end}} + + {{if and $isTreePathRoot .Repository.IsTemplate}} + + {{ctx.Locale.Tr "repo.use_template"}} + + {{end}} + + {{if not $isTreePathRoot}} + {{$treeNameIdxLast := Eval $treeNamesLen "-" 1}} + + {{StringUtils.EllipsisString .Repository.Name 30}} + {{- range $i, $v := .TreeNames -}} + / + {{- if eq $i $treeNameIdxLast -}} + {{$v}} + + {{- else -}} + {{$p := index $.Paths $i}}{{$v}} + {{- end -}} + {{- end -}} + + {{end}} +
    + +
    + + {{if $isTreePathRoot}} + {{template "repo/clone_panel" .}} + {{end}} + {{if and (not $isTreePathRoot) (not .IsViewFile) (not .IsBlame)}}{{/* IsViewDirectory (not home), TODO: split the templates, avoid using "if" tricks */}} + + {{svg "octicon-history" 16 "tw-mr-2"}}{{ctx.Locale.Tr "repo.file_history"}} + + {{end}} +
    +
    + {{if .IsViewFile}} + {{template "repo/view_file" .}} + {{else if .IsBlame}} + {{template "repo/blame" .}} + {{else}}{{/* IsViewDirectory */}} + {{if $isTreePathRoot}} + {{template "repo/code/upstream_diverging_info" .}} + {{end}} + {{template "repo/view_list" .}} + {{if and .ReadmeExist (or .IsMarkup .IsPlainText)}} + {{template "repo/view_file" .}} + {{end}} + {{end}} +
    + + {{if $showSidebar}} + {{template "repo/home_sidebar_top" .}} + {{template "repo/home_sidebar_bottom" .}} + {{end}} +
    +
    +
    +{{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 @@ +
    +
    + {{if .LatestRelease}} +
    +
    + +
    +
    + {{svg "octicon-tag" 16}} +
    +
    +
    +
    + {{.LatestRelease.Title}} + {{template "repo/release/label" (dict "Release" .LatestRelease "IsLatest" true)}} +
    +
    +
    + {{DateUtils.TimeSince .LatestRelease.CreatedUnix}} +
    +
    +
    +
    +
    + {{end}} + + {{if and (not .IsEmptyRepo) .LanguageStats}} +
    +
    +
    + {{ctx.Locale.Tr "repo.repo_lang"}} +
    + +
    +
    + {{range .LanguageStats}} +
    + {{end}} +
    +
    + {{range .LanguageStats}} +
    + + + {{Iif (eq .Language "other") (ctx.Locale.Tr "repo.language_other") .Language}} + + {{.Percentage}}% +
    + {{end}} +
    +
    +
    +
    + {{end}} +
    +
    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 @@ +
    +
    +
    + {{template "shared/search/button"}} +
    +
    + +
    +
    +
    +
    {{ctx.Locale.Tr "repo.repo_desc"}}
    +
    +
    +
    + {{- $description := .Repository.DescriptionHTML ctx -}} + {{if $description}}{{$description | RenderCodeBlock}}{{else}}{{ctx.Locale.Tr "repo.repo_no_desc"}}{{end}} +
    + + {{if .Repository.Website}} + + {{svg "octicon-link" 16 "tw-text-text"}} {{.Repository.Website}} + + {{end}} + +
    + {{/* !!!! it SHOULD and MUST match the code in repo-home.ts */}} + {{range .Topics}}{{.Name}}{{end}} +
    + {{if and .Permission.IsAdmin (not .Repository.IsArchived)}} + +
    + +
    + + +
    +
    + {{end}} + + {{if .ReadmeExist}} + + {{svg "octicon-book"}} {{ctx.Locale.Tr "readme"}} + + {{end}} + + {{if .DetectedRepoLicenses}} + + {{svg "octicon-law"}} {{if eq (len .DetectedRepoLicenses) 1}}{{index .DetectedRepoLicenses 0}}{{else}}{{ctx.Locale.Tr "repo.multiple_licenses"}}{{end}} + + {{end}} + + {{if .CitiationExist}} + {{template "repo/cite/cite_modal" .}} + + {{svg "octicon-cross-reference"}} {{ctx.Locale.Tr "repo.cite_this_repo"}} + + {{end}} + + {{$fileSizeFormatted := FileSize .Repository.Size}}{{/* the formatted string is always "{val} {unit}" */}} + {{$fileSizeFields := StringUtils.Split $fileSizeFormatted " "}} + {{svg "octicon-database"}} {{ctx.Locale.PrettyNumber (index $fileSizeFields 0)}} {{index $fileSizeFields 1}} + +
    +
    +
    +
    +
    +
    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}} + {{.FullName}} +{{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)}} + + +
    +{{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}} + {{.Name}} + {{end}} +
    + {{end}} + {{end}} +
    +
    +
    + {{template "shared/issueicon" .}} +
    + {{.Title | ctx.RenderUtils.RenderIssueSimpleTitle}} + {{if and $.isPinnedIssueCard $.Page.IsRepoAdmin}} + + {{svg "octicon-x" 16}} + + {{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}} +
    + + {{svg "octicon-milestone" 16 "tw-mr-1 tw-align-middle"}} + {{.Milestone.Name}} + +
    + {{end}} + {{if $.Page.LinkedPRs}} + {{range index $.Page.LinkedPRs .ID}} +
    + + {{svg "octicon-git-merge" 16 "tw-mr-1 tw-align-middle"}} + {{.Title}} #{{.Index}} + +
    + {{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}} +
    +
    + {{range .Labels}} + {{ctx.RenderUtils.RenderLabel .}} + {{end}} +
    +
    + {{range .Assignees}} + {{ctx.AvatarUtils.Avatar . 28}} + {{end}} +
    +
    + {{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}} + + {{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 @@ +
    + {{template "repo/issue/fields/header" .}} + {{range $i, $opt := .item.Attributes.options}} +
    +
    + + +
    + {{if $opt.required}} + + {{end}} +
    + {{end}} +
    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 @@ +
    + {{template "repo/issue/fields/header" .}} + {{/* FIXME: required validation */}} + +
    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 @@ +
    +
    {{ctx.RenderUtils.MarkdownToHtml .item.Attributes.value}}
    +
    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}} +
    + {{template "repo/issue/fields/header" .}} + + {{/* the real form element to provide the value */}} + + + {{if $useMarkdownEditor}} + {{template "shared/combomarkdowneditor" (dict + "CustomInit" true + "ContainerClasses" "tw-hidden" + "MarkdownPreviewInRepo" $.root.Repository + "MarkdownPreviewMode" "comment" + "TextareaContent" .item.Attributes.value + "TextareaPlaceholder" .item.Attributes.placeholder + "DropzoneParentContainer" ".combo-editor-dropzone" + )}} + + {{if .root.IsAttachmentEnabled}} +
    + {{template "repo/upload" .root}} +
    + {{end}} + {{end}} +
    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}} + 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}} + 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}} + 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}} + + +{{end}} + + + + +{{/* 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}} + + +{{end}} + + + 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 @@ +
    +
    + {{if and $.CanWriteIssuesOrPulls .Issues}} + + {{end}} + {{template "repo/issue/openclose" .}} + + {{if .TotalTrackedTime}} + + {{end}} +
    +
    + +
    +
    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)}} + + {{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 @@ + 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 @@ +

    + {{ctx.Locale.Tr "repo.issues.label_count" .NumLabels}} +
    + + +
    +

    + +
    + {{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}} + + +
    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}} +
    + +
    + +
    +
    +
    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/search" .}} + {{ctx.Locale.Tr "repo.labels"}} + {{ctx.Locale.Tr "repo.milestones"}} + {{if not .Repository.IsArchived}} + {{if .PageIsIssueList}} + {{ctx.Locale.Tr "repo.issues.new"}} + {{else}} + {{ctx.Locale.Tr "repo.pulls.new"}} + {{end}} + {{else}} + {{if not .PageIsIssueList}} + {{ctx.Locale.Tr "action.compare_commits_general"}} + {{end}} + {{end}} +
    + + {{template "repo/issue/filters" .}} + +
    +
    + {{template "repo/issue/openclose" .}} + + {{if .TotalTrackedTime}} + + {{end}} +
    +
    + {{template "repo/issue/filter_actions" .}} +
    +
    + {{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 @@ + + 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}} +
    + {{if or .CanWriteIssues .CanWritePulls}} + {{if .Milestone.IsClosed}} + {{ctx.Locale.Tr "repo.milestones.open"}} + + {{else}} + {{ctx.Locale.Tr "repo.milestones.close"}} + + {{end}} + {{ctx.Locale.Tr "repo.milestones.edit"}} + {{end}} + {{ctx.Locale.Tr "repo.issues.new"}} +
    + {{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}} +
    +
    +

    + {{if .PageIsEditMilestone}} + {{ctx.Locale.Tr "repo.milestones.edit"}} +
    {{ctx.Locale.Tr "repo.milestones.edit_subheader"}}
    + {{else}} + {{ctx.Locale.Tr "repo.milestones.new"}} +
    {{ctx.Locale.Tr "repo.milestones.new_subheader"}}
    + {{end}} +

    + {{template "base/alert" .}} +
    + {{.CsrfTokenHtml}} +
    + + +
    +
    + + +
    +
    + + {{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"}} + + + {{else}} + + {{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/navbar" .}} + {{template "repo/issue/search" .}} + {{if and (or .CanWriteIssues .CanWritePulls) (not .Repository.IsArchived)}} + {{ctx.Locale.Tr "repo.milestones.new"}} + {{end}} +
    + + {{template "repo/issue/filters" .}} + + +
    + {{range .Milestones}} +
  • +
    +

    + {{svg "octicon-milestone" 16}} + {{.Name}} +

    +
    + {{.Completeness}}% + +
    +
    +
    +
    +
    + {{svg "octicon-issue-opened" 14}} + {{ctx.Locale.PrettyNumber .NumOpenIssues}} {{ctx.Locale.Tr "repo.issues.open_title"}} +
    +
    + {{svg "octicon-check" 14}} + {{ctx.Locale.PrettyNumber .NumClosedIssues}} {{ctx.Locale.Tr "repo.issues.closed_title"}} +
    + {{if .TotalTrackedTime}} +
    + {{svg "octicon-clock"}} + {{.TotalTrackedTime|Sec2Time}} +
    + {{end}} + {{if .UpdatedUnix}} +
    + {{svg "octicon-clock"}} + {{ctx.Locale.Tr "repo.milestones.update_ago" (DateUtils.TimeSince .UpdatedUnix)}} +
    + {{end}} +
    + {{if .IsClosed}} + {{$closedDate:= DateUtils.TimeSince .ClosedDateUnix}} + {{svg "octicon-clock" 14}} + {{ctx.Locale.Tr "repo.milestones.closed" $closedDate}} + {{else}} + {{if .DeadlineString}} + + {{svg "octicon-calendar" 14}} + {{DateUtils.AbsoluteShort (.DeadlineString|DateUtils.ParseLegacy)}} + + {{else}} + {{svg "octicon-calendar" 14}} + {{ctx.Locale.Tr "repo.milestones.no_due_date"}} + {{end}} + {{end}} +
    +
    + {{if and (or $.CanWriteIssues $.CanWritePulls) (not $.Repository.IsArchived)}} + + {{end}} +
    + {{if .Content}} +
    + {{.RenderedContent}} +
    + {{end}} +
  • + {{end}} + + {{template "base/paginate" .}} +
    +
    +
    + +{{if or .CanWriteIssues .CanWritePulls}} + +{{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}} +
    + {{.CsrfTokenHtml}} +
    +
    +
    + {{ctx.AvatarUtils.Avatar .SignedUser 40}} +
    +
    + + {{if .PageIsComparePull}} +
    {{ctx.Locale.Tr "repo.pulls.title_wip_desc" (index .PullRequestWorkInProgressPrefixes 0)}}
    + {{end}} +
    + {{if .Fields}} + + {{range .Fields}} + {{if eq .Type "input"}} + {{template "repo/issue/fields/input" dict "item" .}} + {{else if eq .Type "markdown"}} + {{template "repo/issue/fields/markdown" dict "item" .}} + {{else if eq .Type "textarea"}} + {{template "repo/issue/fields/textarea" dict "item" . "root" $}} + {{else if eq .Type "dropdown"}} + {{template "repo/issue/fields/dropdown" dict "item" .}} + {{else if eq .Type "checkboxes"}} + {{template "repo/issue/fields/checkboxes" dict "item" .}} + {{end}} + {{end}} + {{else}} + {{template "repo/issue/comment_tab" .}} + {{end}} +
    + +
    +
    +
    +
    +
    + +
    + {{template "repo/issue/branch_selector_field" $}}{{/* TODO: RemoveIssueRef: template "repo/issue/branch_selector_field" $*/}} + + {{if .PageIsComparePull}} + {{template "repo/issue/sidebar/reviewer_list" $.IssuePageMetaData}} +
    + {{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}} + + {{if and .PageIsComparePull (not (eq .HeadRepo.FullName .BaseCompareRepo.FullName)) .CanWriteToHeadRepo}} +
    +
    + + +
    + {{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}} +
    +
    + + +
    + {{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"}} +
    + {{if .Issue.DeadlineUnix}} +
    +
    + {{svg "octicon-calendar"}} {{DateUtils.AbsoluteLong .Issue.DeadlineUnix}} +
    +
    + {{if and .HasIssuesOrPullsWritePermission (not .Repository.IsArchived)}} + {{svg "octicon-pencil"}} + {{svg "octicon-trash"}} + {{end}} +
    +
    + {{else}} + {{ctx.Locale.Tr "repo.issues.due_date_not_set"}} + {{end}} + + {{if and .HasIssuesOrPullsWritePermission (not .Repository.IsArchived)}} +
    + {{$.CsrfTokenHtml}} + + +
    + {{end}} +
    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}} +
    +
    + + #{{.Issue.Index}} {{.Issue.Title | ctx.RenderUtils.RenderEmoji}} + +
    + {{.Repository.OwnerName}}/{{.Repository.Name}} +
    +
    +
    + {{if and $.CanCreateIssueDependencies (not $.Repository.IsArchived)}} + + {{svg "octicon-trash" 16}} + + {{end}} +
    +
    + {{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}} +
    +
    + + #{{.Issue.Index}} {{.Issue.Title | ctx.RenderUtils.RenderEmoji}} + +
    + {{.Repository.OwnerName}}/{{.Repository.Name}} +
    +
    +
    + {{if and $.CanCreateIssueDependencies (not $.Repository.IsArchived)}} + + {{svg "octicon-trash" 16}} + + {{end}} +
    +
    + {{end}} + {{if $.CanCreateIssueDependencies}} + {{range .BlockedByDependenciesNotPermitted}} +
    +
    +
    + {{svg "octicon-lock" 16}} + + #{{.Issue.Index}} {{.Issue.Title | ctx.RenderUtils.RenderEmoji}} + +
    +
    + {{.Repository.OwnerName}}/{{.Repository.Name}} +
    +
    +
    + {{if and $.CanCreateIssueDependencies (not $.Repository.IsArchived)}} + + {{svg "octicon-trash" 16}} + + {{end}} +
    +
    + {{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)}} + + + + {{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}} + +
    + {{end}} + + + + + +{{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}} +
    + + + +
    + {{ctx.Locale.Tr "repo.issues.new.no_label"}} + {{range $data.AllLabels}} + {{if .IsChecked}} + + {{- ctx.RenderUtils.RenderLabel . -}} + + {{end}} + {{end}} +
    +
    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}} +
    + {{range .Participants}} + + {{ctx.AvatarUtils.Avatar . 20 "tw-my-0.5 tw-mr-1"}} + + {{end}} +
    +{{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}} + +
    +
    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}} +
    + {{/* match CreateIssueForm */}} + + +
    + + {{ctx.Locale.Tr "repo.issues.new.no_reviewers"}} + + {{range $data.CurrentPullReviewers}} +
    +
    + {{if .User}} + {{ctx.AvatarUtils.Avatar .User 20}} {{.User.GetDisplayName}} + {{else if .Team}} + {{svg "octicon-people" 20}} {{$repoOwnerName}}/{{.Team.Name}} + {{end}} +
    +
    + {{if .CanBeDismissed}} + + {{svg "octicon-x" 20}} + + {{end}} + {{if .Review.Stale}} + {{svg "octicon-hourglass" 16}} + {{end}} + {{if and .CanChange $data.CanChooseReviewer}} + {{if .Requested}} + + {{svg "octicon-trash"}} + + {{else}} + + {{svg "octicon-sync"}} + + {{end}} + {{end}} + + {{svg (printf "octicon-%s" .Review.Type.Icon) 16 (printf "text %s" (.Review.HTMLTypeColorName))}} + +
    +
    + {{end}} + {{range $data.OriginalReviews}} +
    +
    + {{$originalURLHostname := $pageMeta.Repository.GetOriginalURLHostname}} + {{$originalURL := $pageMeta.Repository.OriginalURL}} + + {{svg (MigrationIcon $originalURLHostname) 20}} {{.OriginalAuthor}} + +
    +
    + + {{svg (printf "octicon-%s" .Type.Icon) 16 (printf "text %s" (.HTMLTypeColorName))}} + +
    +
    + {{end}} +
    + + {{if $data.CurrentPullReviewers}} + + {{end}} +
    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 */}} + + + {{/* manually add time modal */}} + +
    + {{end}} + {{if .WorkingUsers}} +
    + {{ctx.Locale.Tr "repo.issues.time_spent_from_all_authors" ($.Issue.TotalTrackedTime | Sec2Time)}} +
    + {{range $user, $trackedtime := .WorkingUsers}} +
    + + {{ctx.AvatarUtils.Avatar $user}} + +
    + {{template "shared/user/authorlink" $user}} +
    + {{$trackedtime|Sec2Time}} +
    +
    +
    + {{end}} +
    +
    + {{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)}} +
    + + {{ctx.Locale.Tr "repo.pulls.still_in_progress"}} {{ctx.Locale.Tr "repo.pulls.add_prefix" (index .PullRequestWorkInProgressPrefixes 0)}} + +
    +{{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}} +
    +
    +
    + {{if .Issue.OriginalAuthor}} + + {{ctx.AvatarUtils.Avatar nil 40}} + + {{else}} + + {{ctx.AvatarUtils.Avatar .Issue.Poster 40}} + + {{end}} +
    +
    +
    + {{if .Issue.OriginalAuthor}} + + {{svg (MigrationIcon .Repository.GetOriginalURLHostname)}} + {{.Issue.OriginalAuthor}} + + + {{ctx.Locale.Tr "repo.issues.commented_at" .Issue.HashTag $createdStr}} + + + {{if .Repository.OriginalURL}} ({{ctx.Locale.Tr "repo.migrated_from" .Repository.OriginalURL .Repository.GetOriginalURLHostname}}){{end}} + + {{else}} + + {{ctx.AvatarUtils.Avatar .Issue.Poster 24}} + + + {{template "shared/user/authorlink" .Issue.Poster}} + {{ctx.Locale.Tr "repo.issues.commented_at" .Issue.HashTag $createdStr}} + + {{end}} +
    +
    + {{template "repo/issue/view_content/show_role" dict "ShowRole" .Issue.ShowRole "IgnorePoster" true}} + {{if not $.Repository.IsArchived}} + {{template "repo/issue/view_content/add_reaction" dict "ActionURL" (printf "%s/issues/%d/reactions" $.RepoLink .Issue.Index)}} + {{end}} + {{template "repo/issue/view_content/context_menu" dict "item" .Issue "delete" false "issue" true "diff" false "IsCommentPoster" $.IsIssuePoster}} +
    +
    +
    +
    + {{if .Issue.RenderedContent}} + {{.Issue.RenderedContent}} + {{else}} + {{ctx.Locale.Tr "repo.issues.no_content"}} + {{end}} +
    +
    {{.Issue.Content}}
    +
    + {{if .Issue.Attachments}} + {{template "repo/issue/view_content/attachments" dict "Attachments" .Issue.Attachments "RenderedContent" .Issue.RenderedContent}} + {{end}} +
    + {{$reactions := .Issue.Reactions.GroupByType}} + {{if $reactions}} + {{template "repo/issue/view_content/reactions" dict "ActionURL" (printf "%s/issues/%d/reactions" $.RepoLink .Issue.Index) "Reactions" $reactions}} + {{end}} +
    +
    + + {{template "repo/issue/view_content/comments" .}} + + {{if and .Issue.IsPull (not $.Repository.IsArchived)}} + {{template "repo/issue/view_content/pull".}} + {{end}} + + {{if .IsSigned}} + {{if and (or .IsRepoAdmin .HasIssuesOrPullsWritePermission (not .Issue.IsLocked)) (not .Repository.IsArchived)}} +
    + + {{ctx.AvatarUtils.Avatar .SignedUser 40}} + +
    +
    +
    + {{template "repo/issue/comment_tab" .}} + {{.CsrfTokenHtml}} + +
    +
    +
    +
    + {{else if .Repository.IsArchived}} +
    + {{if .Issue.IsPull}} + {{ctx.Locale.Tr "repo.archive.pull.nocomment"}} + {{else}} + {{ctx.Locale.Tr "repo.archive.issue.nocomment"}} + {{end}} +
    + {{end}} + {{else}} {{/* not .IsSigned */}} + {{if .Repository.IsArchived}} +
    + {{if .Issue.IsPull}} + {{ctx.Locale.Tr "repo.archive.pull.nocomment"}} + {{else}} + {{ctx.Locale.Tr "repo.archive.issue.nocomment"}} + {{end}} +
    + {{else}} +
    + {{ctx.Locale.Tr "repo.issues.sign_in_require_desc" .SignInLink}} +
    + {{end}} + {{end}}{{/* end if: .IsSigned */}} +
    +
    + + {{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"}} +
    + + 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)}} + + {{.Name}} + + {{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}} +
    + {{if .OriginalAuthor}} + + {{ctx.AvatarUtils.Avatar nil 40}} + + {{else}} + + {{ctx.AvatarUtils.Avatar .Poster 40}} + + {{end}} +
    +
    +
    + {{if .OriginalAuthor}} + + {{svg (MigrationIcon $.Repository.GetOriginalURLHostname)}} + {{.OriginalAuthor}} + + + {{ctx.Locale.Tr "repo.issues.commented_at" .HashTag $createdStr}} {{if $.Repository.OriginalURL}} + + + ({{ctx.Locale.Tr "repo.migrated_from" $.Repository.OriginalURL $.Repository.GetOriginalURLHostname}}){{end}} + + {{else}} + {{if gt .Poster.ID 0}} + + {{ctx.AvatarUtils.Avatar .Poster 24}} + + {{end}} + + {{template "shared/user/authorlink" .Poster}} + {{ctx.Locale.Tr "repo.issues.commented_at" .HashTag $createdStr}} + + {{end}} +
    +
    + {{template "repo/issue/view_content/show_role" dict "ShowRole" .ShowRole}} + {{if not $.Repository.IsArchived}} + {{template "repo/issue/view_content/add_reaction" dict "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID)}} + {{end}} + {{template "repo/issue/view_content/context_menu" dict "item" . "delete" true "issue" true "diff" false "IsCommentPoster" (and $.IsSigned (eq $.SignedUserID .PosterID))}} +
    +
    +
    +
    + {{if .RenderedContent}} + {{.RenderedContent}} + {{else}} + {{ctx.Locale.Tr "repo.issues.no_content"}} + {{end}} +
    +
    {{.Content}}
    +
    + {{if .Attachments}} + {{template "repo/issue/view_content/attachments" dict "Attachments" .Attachments "RenderedContent" .RenderedContent}} + {{end}} +
    + {{$reactions := .Reactions.GroupByType}} + {{if $reactions}} + {{template "repo/issue/view_content/reactions" dict "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID) "Reactions" $reactions}} + {{end}} +
    +
    + {{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}} + +
    + {{.RefIssueTitle ctx}} {{.RefIssueIdent ctx}} +
    +
    + {{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}} +
    + {{svg "octicon-plus"}} + + + {{if eq .DependentIssue.RepoID .Issue.RepoID}} + #{{.DependentIssue.Index}} {{.DependentIssue.Title}} + {{else}} + {{.DependentIssue.Repo.FullName}}#{{.DependentIssue.Index}} - {{.DependentIssue.Title}} + {{end}} + + +
    + {{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}} +
    + {{svg "octicon-trash"}} + + + {{if eq .DependentIssue.RepoID .Issue.RepoID}} + #{{.DependentIssue.Index}} {{.DependentIssue.Title}} + {{else}} + {{.DependentIssue.Repo.FullName}}#{{.DependentIssue.Index}} - {{.DependentIssue.Title}} + {{end}} + + +
    + {{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}} +
    +
    +
    +
    + {{if gt .Poster.ID 0}} + + {{ctx.AvatarUtils.Avatar .Poster 24}} + + {{end}} + + {{if .OriginalAuthor}} + + {{svg (MigrationIcon $.Repository.GetOriginalURLHostname)}} + {{.OriginalAuthor}} + + {{if $.Repository.OriginalURL}} + ({{ctx.Locale.Tr "repo.migrated_from" $.Repository.OriginalURL $.Repository.GetOriginalURLHostname}}){{end}} + {{else}} + {{template "shared/user/authorlink" .Poster}} + {{end}} + + {{ctx.Locale.Tr "repo.issues.review.left_comment"}} + +
    +
    + {{template "repo/issue/view_content/show_role" dict "ShowRole" .ShowRole}} + {{if not $.Repository.IsArchived}} + {{template "repo/issue/view_content/add_reaction" dict "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID)}} + {{template "repo/issue/view_content/context_menu" dict "item" . "delete" false "issue" true "diff" false "IsCommentPoster" (and $.IsSigned (eq $.SignedUserID .PosterID))}} + {{end}} +
    +
    +
    +
    + {{if .RenderedContent}} + {{.RenderedContent}} + {{else}} + {{ctx.Locale.Tr "repo.issues.no_content"}} + {{end}} +
    +
    {{.Content}}
    +
    + {{if .Attachments}} + {{template "repo/issue/view_content/attachments" dict "Attachments" .Attachments "RenderedContent" .RenderedContent}} + {{end}} +
    + {{$reactions := .Reactions.GroupByType}} + {{if $reactions}} + {{template "repo/issue/view_content/reactions" dict "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID) "Reactions" $reactions}} + {{end}} +
    +
    + {{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}} +
    +
    +
    + {{if gt .Poster.ID 0}} + + {{ctx.AvatarUtils.Avatar .Poster 24}} + + {{end}} + + {{ctx.Locale.Tr "action.review_dismissed_reason"}} + +
    +
    +
    + {{if .RenderedContent}} + {{.RenderedContent}} + {{else}} + {{ctx.Locale.Tr "repo.issues.no_content"}} + {{end}} +
    +
    +
    +
    + {{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)))}} + + + + {{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)}} +
    +
    +
    + {{$comment.TreePath}} + {{if $invalid}} + + {{ctx.Locale.Tr "repo.issues.review.outdated"}} + + {{end}} +
    +
    + {{if or $invalid $resolved}} + + + {{end}} +
    +
    + {{$diff := (CommentMustAsDiff ctx $comment)}} + {{if $diff}} + {{$file := (index $diff.Files 0)}} +
    +
    +
    + + + {{template "repo/diff/section_unified" dict "file" $file "root" $}} + +
    +
    +
    +
    + {{end}} +
    +
    + {{range .comments}} + {{$createdSubStr:= DateUtils.TimeSince .CreatedUnix}} +
    +
    +
    +
    + {{if not .OriginalAuthor}} + + {{ctx.AvatarUtils.Avatar .Poster 20}} + + {{end}} + + {{if .OriginalAuthor}} + + {{svg (MigrationIcon $.Repository.GetOriginalURLHostname)}} + {{.OriginalAuthor}} + + {{if $.Repository.OriginalURL}} + ({{ctx.Locale.Tr "repo.migrated_from" $.Repository.OriginalURL $.Repository.GetOriginalURLHostname}}) + {{end}} + {{else}} + {{template "shared/user/authorlink" .Poster}} + {{end}} + {{ctx.Locale.Tr "repo.issues.commented_at" .HashTag $createdSubStr}} + +
    +
    + {{template "repo/issue/view_content/show_role" dict "ShowRole" .ShowRole}} + {{if not $.Repository.IsArchived}} + {{template "repo/issue/view_content/add_reaction" dict "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID)}} + {{template "repo/issue/view_content/context_menu" dict "item" . "delete" true "issue" true "diff" true "IsCommentPoster" (and $.IsSigned (eq $.SignedUserID .PosterID))}} + {{end}} +
    +
    +
    +
    + {{if .RenderedContent}} + {{.RenderedContent}} + {{else}} + {{ctx.Locale.Tr "repo.issues.no_content"}} + {{end}} +
    +
    {{.Content}}
    +
    + {{if .Attachments}} + {{template "repo/issue/view_content/attachments" dict "Attachments" .Attachments "RenderedContent" .RenderedContent}} + {{end}} +
    + {{$reactions := .Reactions.GroupByType}} + {{if $reactions}} + {{template "repo/issue/view_content/reactions" dict "ActionURL" (printf "%s/comments/%d/reactions" $.RepoLink .ID) "Reactions" $reactions}} + {{end}} +
    +
    + {{end}} +
    +
    +
    + {{if $resolved}} +
    + {{svg "octicon-check" 16 "tw-mr-1"}} + {{$resolveDoer.Name}} {{ctx.Locale.Tr "repo.issues.review.resolved_by"}} +
    + {{end}} +
    +
    + {{if and $.CanMarkConversation $hasReview (not $isReviewPending)}} + + {{end}} + {{if and $.SignedUserID (not $.Repository.IsArchived)}} + + {{end}} +
    +
    + {{template "repo/diff/comment_form_datahandler" dict "hidden" true "reply" $comment.ReviewID "root" $ "comment" $comment}} +
    +
    +{{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}} +
    +
    {{svg "octicon-git-merge" 40}}
    +
    + {{if .LatestCommitStatus}} +
    + {{template "repo/pulls/status" (dict + "CommitStatus" .LatestCommitStatus + "CommitStatuses" .LatestCommitStatuses + "MissingRequiredChecks" .MissingRequiredChecks + "ShowHideChecks" true + "is_context_required" .is_context_required + )}} +
    + {{end}} + {{$showGeneralMergeForm := false}} +
    + {{if .Issue.PullRequest.HasMerged}} + {{if .IsPullBranchDeletable}} +
    +
    +

    + {{ctx.Locale.Tr "repo.pulls.merged_success"}} +

    + +
    +
    + +
    +
    + {{end}} + {{else if .Issue.IsClosed}} +
    +
    +

    {{ctx.Locale.Tr "repo.pulls.closed"}}

    + +
    + {{if and .IsPullBranchDeletable (not .IsPullRequestBroken)}} +
    + +
    + {{end}} +
    + {{else if .IsPullFilesConflicted}} +
    + {{svg "octicon-x"}} + {{ctx.Locale.Tr "repo.pulls.files_conflicted"}} +
    +
      + {{range .ConflictedFiles}} +
    • {{.}}
    • + {{end}} +
    + {{else if .IsPullRequestBroken}} +
    + {{svg "octicon-x"}} + {{ctx.Locale.Tr "repo.pulls.data_broken"}} +
    + {{else if .IsPullWorkInProgress}} +
    +
    + {{svg "octicon-x"}} + {{ctx.Locale.Tr "repo.pulls.cannot_merge_work_in_progress"}} +
    + {{if or .HasIssuesOrPullsWritePermission .IsIssuePoster}} + + {{end}} +
    + {{template "repo/issue/view_content/update_branch_by_merge" $}} + {{else if .Issue.PullRequest.IsChecking}} +
    + {{svg "octicon-sync"}} + {{ctx.Locale.Tr "repo.pulls.is_checking"}} +
    + {{else if .Issue.PullRequest.IsAncestor}} +
    + {{svg "octicon-alert"}} + {{ctx.Locale.Tr "repo.pulls.is_ancestor"}} +
    + {{else if or .Issue.PullRequest.CanAutoMerge .Issue.PullRequest.IsEmpty}} + {{if .IsBlockedByApprovals}} +
    + {{svg "octicon-x"}} + {{if .RequireApprovalsWhitelist}} + {{ctx.Locale.Tr "repo.pulls.blocked_by_approvals_whitelisted" .GrantedApprovals .ProtectedBranch.RequiredApprovals}} + {{else}} + {{ctx.Locale.Tr "repo.pulls.blocked_by_approvals" .GrantedApprovals .ProtectedBranch.RequiredApprovals}} + {{end}} +
    + {{else if .IsBlockedByRejection}} +
    + {{svg "octicon-x"}} + {{ctx.Locale.Tr "repo.pulls.blocked_by_rejection"}} +
    + {{else if .IsBlockedByOfficialReviewRequests}} +
    + {{svg "octicon-x"}} + {{ctx.Locale.Tr "repo.pulls.blocked_by_official_review_requests"}} +
    + {{else if .IsBlockedByOutdatedBranch}} +
    + {{svg "octicon-x"}} + {{ctx.Locale.Tr "repo.pulls.blocked_by_outdated_branch"}} +
    + {{else if .IsBlockedByChangedProtectedFiles}} +
    + {{svg "octicon-x"}} + {{ctx.Locale.TrN $.ChangedProtectedFilesNum "repo.pulls.blocked_by_changed_protected_files_1" "repo.pulls.blocked_by_changed_protected_files_n"}} +
    +
      + {{range .ChangedProtectedFiles}} +
    • {{.}}
    • + {{end}} +
    + {{else if and .EnableStatusCheck (or .RequiredStatusCheckState.IsError .RequiredStatusCheckState.IsFailure)}} +
    + {{svg "octicon-x"}} + {{ctx.Locale.Tr "repo.pulls.required_status_check_failed"}} +
    + {{else if and .EnableStatusCheck (not .RequiredStatusCheckState.IsSuccess)}} +
    + {{svg "octicon-x"}} + {{ctx.Locale.Tr "repo.pulls.required_status_check_missing"}} +
    + {{else if and .AllowMerge .RequireSigned (not .WillSign)}} +
    + {{svg "octicon-x"}} + {{ctx.Locale.Tr "repo.pulls.require_signed_wont_sign"}} +
    +
    + {{svg "octicon-unlock"}} + {{ctx.Locale.Tr (printf "repo.signing.wont_sign.%s" .WontSignReason)}} +
    + {{end}} + + {{$notAllOverridableChecksOk := or .IsBlockedByApprovals .IsBlockedByRejection .IsBlockedByOfficialReviewRequests .IsBlockedByOutdatedBranch .IsBlockedByChangedProtectedFiles (and .EnableStatusCheck (not .RequiredStatusCheckState.IsSuccess))}} + + {{/* admin can merge without checks, writer can merge when checks succeed */}} + {{$canMergeNow := and (or (and (not $.ProtectedBranch.BlockAdminMergeOverride) $.IsRepoAdmin) (not $notAllOverridableChecksOk)) (or (not .AllowMerge) (not .RequireSigned) .WillSign)}} + {{/* admin and writer both can make an auto merge schedule */}} + + {{if $canMergeNow}} + {{if $notAllOverridableChecksOk}} +
    + {{svg "octicon-dot-fill"}} + {{ctx.Locale.Tr "repo.pulls.required_status_check_administrator"}} +
    + {{else}} +
    + {{svg "octicon-check"}} + {{ctx.Locale.Tr "repo.pulls.can_auto_merge_desc"}} +
    + {{end}} + {{if .WillSign}} +
    + {{svg "octicon-lock" 16 "text green"}} + {{ctx.Locale.Tr "repo.signing.will_sign" .SigningKey}} +
    + {{else if .IsSigned}} +
    + {{svg "octicon-unlock"}} + {{ctx.Locale.Tr (printf "repo.signing.wont_sign.%s" .WontSignReason)}} +
    + {{end}} + {{end}} + {{template "repo/issue/view_content/update_branch_by_merge" $}} + {{if .Issue.PullRequest.IsEmpty}} +
    + +
    + {{svg "octicon-alert"}} + {{ctx.Locale.Tr "repo.pulls.is_empty"}} +
    + {{end}} + + {{if .AllowMerge}} {{/* user is allowed to merge */}} + {{$prUnit := .Repository.MustGetUnit ctx ctx.Consts.RepoUnitTypePullRequests}} + {{if or $prUnit.PullRequestsConfig.AllowMerge $prUnit.PullRequestsConfig.AllowRebase $prUnit.PullRequestsConfig.AllowRebaseMerge $prUnit.PullRequestsConfig.AllowSquash $prUnit.PullRequestsConfig.AllowFastForwardOnly}} + {{$hasPendingPullRequestMergeTip := ""}} + {{if .HasPendingPullRequestMerge}} + {{$createdPRMergeStr := DateUtils.TimeSince .PendingPullRequestMerge.CreatedUnix}} + {{$hasPendingPullRequestMergeTip = ctx.Locale.Tr "repo.pulls.auto_merge_has_pending_schedule" .PendingPullRequestMerge.Doer.Name $createdPRMergeStr}} + {{end}} +
    + + + {{$showGeneralMergeForm = true}} +
    + {{else}} + {{/* no merge style was set in repo setting: not or ($prUnit.PullRequestsConfig.AllowMerge ...) */}} +
    +
    + {{svg "octicon-x"}} + {{ctx.Locale.Tr "repo.pulls.no_merge_desc"}} +
    +
    + {{svg "octicon-info"}} + {{ctx.Locale.Tr "repo.pulls.no_merge_helper"}} +
    + {{end}} {{/* end if the repo was set to use any merge style */}} + {{else}} + {{/* user is not allowed to merge */}} +
    +
    + {{svg "octicon-info"}} + {{ctx.Locale.Tr "repo.pulls.no_merge_access"}} +
    + {{end}} {{/* end if user is allowed to merge or not */}} + {{else}} + {{/* Merge conflict without specific file. Suggest manual merge, only if all reviews and status checks OK. */}} + {{if .IsBlockedByApprovals}} +
    + {{svg "octicon-x"}} + {{ctx.Locale.Tr "repo.pulls.blocked_by_approvals" .GrantedApprovals .ProtectedBranch.RequiredApprovals}} +
    + {{else if .IsBlockedByRejection}} +
    + {{svg "octicon-x"}} + {{ctx.Locale.Tr "repo.pulls.blocked_by_rejection"}} +
    + {{else if .IsBlockedByOfficialReviewRequests}} +
    + {{svg "octicon-x"}} + {{ctx.Locale.Tr "repo.pulls.blocked_by_official_review_requests"}} +
    + {{else if .IsBlockedByOutdatedBranch}} +
    + {{svg "octicon-x"}} + {{ctx.Locale.Tr "repo.pulls.blocked_by_outdated_branch"}} +
    + {{else if .IsBlockedByChangedProtectedFiles}} +
    + {{svg "octicon-x"}} + {{ctx.Locale.TrN $.ChangedProtectedFilesNum "repo.pulls.blocked_by_changed_protected_files_1" "repo.pulls.blocked_by_changed_protected_files_n"}} +
    +
      + {{range .ChangedProtectedFiles}} +
    • {{.}}
    • + {{end}} +
    + {{else if and .EnableStatusCheck (not .RequiredStatusCheckState.IsSuccess)}} +
    + {{svg "octicon-x"}} + {{ctx.Locale.Tr "repo.pulls.required_status_check_failed"}} +
    + {{else if and .RequireSigned (not .WillSign)}} +
    + {{svg "octicon-x"}} + {{ctx.Locale.Tr "repo.pulls.require_signed_wont_sign"}} +
    + {{else}} +
    + {{svg "octicon-x"}} + {{ctx.Locale.Tr "repo.pulls.cannot_auto_merge_desc"}} +
    +
    + {{svg "octicon-info"}} + {{ctx.Locale.Tr "repo.pulls.cannot_auto_merge_helper"}} +
    + {{end}} + {{end}}{{/* end if: pull request status */}} + + {{/* + Manually Merged is not a well-known feature, it is used to mark a non-mergeable PR (already merged, conflicted) as merged + To test it: + * Enable "Manually Merged" feature in the Repository Settings + * Create a pull request, either: + * - Merge the pull request branch locally and push the merged commit to Gitea + * - Make some conflicts between the base branch and the pull request branch + * Then the Manually Merged form will be shown in the merge form + */}} + {{if and $.StillCanManualMerge (not $showGeneralMergeForm)}} +
    +
    {{/* another similar form is in PullRequestMergeForm.vue*/}} + {{.CsrfTokenHtml}} +
    + +
    + +
    + {{end}} + + {{if and .Issue.PullRequest.HeadRepo (not .Issue.PullRequest.HasMerged) (not .Issue.IsClosed)}} + {{template "repo/issue/view_content/pull_merge_instruction" dict "PullRequest" .Issue.PullRequest "ShowMergeInstructions" .ShowMergeInstructions}} + {{end}} +
    +
    +
    +{{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}} + + {{ReactionToEmoji $key}} + {{len $value}} + +{{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 @@ + 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}} + +
    + {{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 @@ +
    + + +
    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}} +
    +
    + {{$canEditIssueTitle := and (or .HasIssuesOrPullsWritePermission .IsIssuePoster) (not .Repository.IsArchived)}} +
    +

    + {{ctx.RenderUtils.RenderIssueTitle .Issue.Title ($.Repository.ComposeMetas ctx)}} + #{{.Issue.Index}} +

    +
    + {{if $canEditIssueTitle}} + + {{end}} + {{if not .Issue.IsPull}} + {{ctx.Locale.Tr "repo.issues.new"}} + {{end}} +
    +
    + {{if $canEditIssueTitle}} +
    +
    + +
    +
    + + +
    +
    + {{end}} +
    + {{if .HasMerged}} +
    {{svg "octicon-git-merge" 16 "tw-mr-1"}} {{if eq .Issue.PullRequest.Status 3}}{{ctx.Locale.Tr "repo.pulls.manually_merged"}}{{else}}{{ctx.Locale.Tr "repo.pulls.merged"}}{{end}}
    + {{else if .Issue.IsClosed}} +
    {{svg (Iif .Issue.IsPull "octicon-git-pull-request-closed" "octicon-issue-closed")}} {{ctx.Locale.Tr "repo.issues.closed_title"}}
    + {{else if .Issue.IsPull}} + {{if .IsPullWorkInProgress}} +
    {{svg "octicon-git-pull-request-draft"}} {{ctx.Locale.Tr "repo.issues.draft_title"}}
    + {{else}} +
    {{svg "octicon-git-pull-request"}} {{ctx.Locale.Tr "repo.issues.open_title"}}
    + {{end}} + {{else}} +
    {{svg "octicon-issue-opened"}} {{ctx.Locale.Tr "repo.issues.open_title"}}
    + {{end}} +
    + {{if .Issue.IsPull}} + {{$headHref := .HeadTarget}} + {{if .HeadBranchLink}} + {{$headHref = HTMLFormat `%s ` .HeadBranchLink $headHref (ctx.Locale.Tr "copy_branch") .HeadTarget (svg "octicon-copy" 14)}} + {{else}} + {{if .Issue.PullRequest.IsAgitFlow}} + {{$headHref = HTMLFormat `%s AGit` $headHref "https://docs.gitea.com/usage/agit" (ctx.Locale.Tr "repo.pull.agit_documentation")}} + {{else}} + {{$headHref = HTMLFormat `%s` (ctx.Locale.Tr "form.target_branch_not_exist") $headHref}} + {{end}} + {{end}} + {{$baseHref := .BaseTarget}} + {{if .BaseBranchLink}} + {{if .BaseBranchNotExist}} + {{$baseHref = HTMLFormat `%s` (ctx.Locale.Tr "form.target_branch_not_exist") $baseHref}} + {{else}} + {{$baseHref = HTMLFormat `%s` .BaseBranchLink $baseHref}} + {{end}} + {{end}} + {{if .Issue.PullRequest.HasMerged}} + {{$mergedStr:= DateUtils.TimeSince .Issue.PullRequest.MergedUnix}} + {{if .Issue.OriginalAuthor}} + {{.Issue.OriginalAuthor}} + {{ctx.Locale.Tr "repo.pulls.merged_title_desc" .NumCommits $headHref $baseHref $mergedStr}} + {{else}} + {{.Issue.PullRequest.Merger.GetDisplayName}} + {{ctx.Locale.Tr "repo.pulls.merged_title_desc" .NumCommits $headHref $baseHref $mergedStr}} + {{end}} + {{else}} + {{if .Issue.OriginalAuthor}} + {{.Issue.OriginalAuthor}} {{ctx.Locale.Tr "repo.pulls.title_desc" .NumCommits $headHref $baseHref}} + {{else}} + + {{.Issue.Poster.GetDisplayName}} + {{ctx.Locale.Tr "repo.pulls.title_desc" .NumCommits $headHref $baseHref}} + + {{end}} + + + {{svg "octicon-arrow-right"}} + + + {{end}} + {{else}} + {{$createdStr:= DateUtils.TimeSince .Issue.CreatedUnix}} + + {{if .Issue.OriginalAuthor}} + {{ctx.Locale.Tr "repo.issues.opened_by_fake" $createdStr .Issue.OriginalAuthor}} + {{else if gt .Issue.Poster.ID 0}} + {{ctx.Locale.Tr "repo.issues.opened_by" $createdStr .Issue.Poster.HomeLink .Issue.Poster.GetDisplayName}} + {{else}} + {{ctx.Locale.Tr "repo.issues.opened_by_fake" $createdStr .Issue.Poster.GetDisplayName}} + {{end}} + · + {{ctx.Locale.TrN .Issue.NumComments "repo.issues.num_comments_1" "repo.issues.num_comments" .Issue.NumComments}} + + {{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}} +

    + {{ctx.Locale.Tr "repo.migrate.migrate" .service.Title}} + +

    +
    + {{template "base/alert" .}} +
    + + + + {{ctx.Locale.Tr "repo.migrate.clone_address_desc"}}{{if .ContextUser.CanImportLocal}} {{ctx.Locale.Tr "repo.migrate.clone_local_path"}}{{end}} + +
    + +
    + + +
    +
    + + +
    + + {{template "repo/migrate/options" .}} + +
    +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + +
    + + +
    + +
    + + +
    +
    + +
    + {{if .IsForcedPrivate}} + + + {{else}} + + + {{end}} +
    +
    +
    + + +
    + +
    + + +
    +
    +
    +
    +
    +
    +{{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}} +

    + {{ctx.Locale.Tr "repo.migrate.migrate" .service.Title}} + +

    +
    + {{template "base/alert" .}} +
    + + + + {{ctx.Locale.Tr "repo.migrate.clone_address_desc"}}{{if .ContextUser.CanImportLocal}} {{ctx.Locale.Tr "repo.migrate.clone_local_path"}}{{end}} + +
    + +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    + + {{if not .DisableNewPullMirrors}} +
    + +
    + + +
    +
    + {{end}} + +
    +
    + +
    + + +
    +
    +
    + +
    + +
    + + +
    + +
    + + +
    +
    + +
    + {{if .IsForcedPrivate}} + + + {{else}} + + + {{end}} +
    +
    +
    + + +
    + +
    + + +
    +
    +
    +
    +
    +
    +{{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}} +

    + {{ctx.Locale.Tr "repo.migrate.migrate" .service.Title}} + +

    +
    + {{template "base/alert" .}} +
    + + + + {{ctx.Locale.Tr "repo.migrate.clone_address_desc"}}{{if .ContextUser.CanImportLocal}} {{ctx.Locale.Tr "repo.migrate.clone_local_path"}}{{end}} + +
    +
    + + +
    +
    + + +
    + + {{template "repo/migrate/options" .}} + +
    + +
    + + +
    + +
    + + +
    +
    + +
    + {{if .IsForcedPrivate}} + + + {{else}} + + + {{end}} +
    +
    +
    + + +
    + +
    + + +
    +
    +
    +
    +
    +
    +{{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}} +

    + {{ctx.Locale.Tr "repo.migrate.migrate" .service.Title}} + +

    +
    + {{template "base/alert" .}} +
    + + + + {{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.migrate_items_options"}} +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    +
    + +
    + +
    + + +
    + +
    + + +
    +
    + +
    + {{if .IsForcedPrivate}} + + + {{else}} + + + {{end}} +
    +
    +
    + + +
    + +
    + + +
    +
    +
    +
    +
    +
    +{{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}} +

    + {{ctx.Locale.Tr "repo.migrate.migrate" .service.Title}} + +

    +
    + {{template "base/alert" .}} +
    + + + + {{ctx.Locale.Tr "repo.migrate.clone_address_desc"}}{{if .ContextUser.CanImportLocal}} {{ctx.Locale.Tr "repo.migrate.clone_local_path"}}{{end}} + +
    + +
    + + + {{svg "octicon-question"}} +
    + + {{template "repo/migrate/options" .}} + +
    + +
    + + +
    +
    + +
    + {{ctx.Locale.Tr "repo.migrate.migrate_items_options"}} +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    +
    + +
    + +
    + + +
    + +
    + + +
    +
    + +
    + {{if .IsForcedPrivate}} + + + {{else}} + + + {{end}} +
    +
    +
    + + +
    + +
    + + +
    +
    +
    +
    +
    +
    +{{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}} +

    + {{ctx.Locale.Tr "repo.migrate.migrate" .service.Title}} + +

    +
    + {{template "base/alert" .}} +
    + + + + {{ctx.Locale.Tr "repo.migrate.clone_address_desc"}} + +
    + +
    + + + {{svg "octicon-question"}} + + {{ctx.Locale.Tr "repo.migrate.github_token_desc"}} + +
    + + {{template "repo/migrate/options" .}} + +
    + +
    + + +
    +
    +
    + {{ctx.Locale.Tr "repo.migrate.migrate_items_options"}} +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    +
    + +
    + +
    + + +
    + +
    + + +
    +
    + +
    + {{if .IsForcedPrivate}} + + + {{else}} + + + {{end}} +
    +
    +
    + + +
    + +
    + + +
    +
    +
    +
    +
    +
    +{{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}} +

    + {{ctx.Locale.Tr "repo.migrate.migrate" .service.Title}} + +

    +
    + {{template "base/alert" .}} +
    + + + + {{ctx.Locale.Tr "repo.migrate.clone_address_desc"}}{{if .ContextUser.CanImportLocal}} {{ctx.Locale.Tr "repo.migrate.clone_local_path"}}{{end}} + +
    + +
    + + + {{svg "octicon-question"}} +
    + + {{template "repo/migrate/options" .}} + +
    + +
    + + +
    +
    +
    + {{ctx.Locale.Tr "repo.migrate.migrate_items_options"}} +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    +
    + +
    + +
    + + +
    + +
    + + +
    +
    + +
    + {{if .IsForcedPrivate}} + + + {{else}} + + + {{end}} +
    +
    +
    + + +
    + +
    + + +
    +
    +
    +
    +
    +
    +{{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}} +

    + {{ctx.Locale.Tr "repo.migrate.migrate" .service.Title}} + +

    +
    + {{template "base/alert" .}} +
    + + + + {{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.migrate_items_options"}} +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    + +
    + +
    + +
    + + +
    + +
    + + +
    +
    + +
    + {{if .IsForcedPrivate}} + + + {{else}} + + + {{end}} +
    +
    +
    + + +
    + +
    + + +
    +
    +
    +
    +
    +
    +{{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 "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}} + + {{else}} + + {{end}} + +
    + {{end}} +
    +
    +
    +
    +
    +
    +
    + + + + + +{{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}} +

    + {{ctx.Locale.Tr "repo.migrate.migrate" .service.Title}} + +

    +
    + {{template "base/alert" .}} +
    + + + + {{ctx.Locale.Tr "repo.migrate.clone_address_desc"}}{{if .ContextUser.CanImportLocal}} {{ctx.Locale.Tr "repo.migrate.clone_local_path"}}{{end}} + +
    + +
    + + +
    +
    + + +
    + + {{template "repo/migrate/options" .}} + +
    +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + + +
    +
    + + +
    +
    +
    + +
    + +
    + + +
    + +
    + + +
    +
    + +
    + {{if .IsForcedPrivate}} + + + {{else}} + + + {{end}} +
    +
    +
    + + +
    + +
    + + +
    +
    +
    +
    +
    +
    +{{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}} +
    + +
    + + +
    +
    +{{end}} +{{if .LFSActive}} +
    + +
    + + +
    + ({{ctx.Locale.Tr "repo.settings.advanced_settings"}}) +
    +
    + {{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}} +
    + + +
    +
    +{{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}} +

    + {{ctx.Locale.Tr "new_fork"}} +

    +
    + {{template "base/alert" .}} +
    + + +
    + +
    + + {{.ForkRepo.FullName}} +
    +
    + + +
    +
    + +
    + + +
    + {{ctx.Locale.Tr "repo.fork_visibility_helper"}} +
    +
    + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    +
    +
    +{{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}} +
    +
    + {{if or (eq .CommitStatus.State "pending") (.MissingRequiredChecks)}} + {{ctx.Locale.Tr "repo.pulls.status_checking"}} + {{else if eq .CommitStatus.State "success"}} + {{ctx.Locale.Tr "repo.pulls.status_checks_success"}} + {{else if eq .CommitStatus.State "warning"}} + {{ctx.Locale.Tr "repo.pulls.status_checks_warning"}} + {{else if eq .CommitStatus.State "failure"}} + {{ctx.Locale.Tr "repo.pulls.status_checks_failure"}} + {{else if eq .CommitStatus.State "error"}} + {{ctx.Locale.Tr "repo.pulls.status_checks_error"}} + {{else}} + {{ctx.Locale.Tr "repo.pulls.status_checking"}} + {{end}} + + {{if .ShowHideChecks}} +
    + +
    + {{end}} +
    + +
    + {{range .CommitStatuses}} +
    + {{template "repo/commit_status" .}} +
    {{.Context}} {{.Description}}
    +
    + {{if $.is_context_required}} + {{if (call $.is_context_required .Context)}}
    {{ctx.Locale.Tr "repo.pulls.status_checks_requested"}}
    {{end}} + {{end}} + {{if .TargetURL}}{{ctx.Locale.Tr "repo.pulls.status_checks_details"}}{{end}} +
    +
    + {{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 @@ +

    + {{DateUtils.AbsoluteLong .DateFrom}} - {{DateUtils.AbsoluteLong .DateUntil}} + + +

    + +{{if (or (.Permission.CanRead ctx.Consts.RepoUnitTypeIssues) (.Permission.CanRead ctx.Consts.RepoUnitTypePullRequests))}} +

    {{ctx.Locale.Tr "repo.activity.overview"}}

    +
    + {{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}} +
    +
    + {{if .Permission.CanRead ctx.Consts.RepoUnitTypePullRequests}} + + {{svg "octicon-git-pull-request"}} {{.Activity.MergedPRCount}}
    + {{ctx.Locale.TrN .Activity.MergedPRCount "repo.activity.merged_prs_count_1" "repo.activity.merged_prs_count_n"}} +
    + + {{svg "octicon-git-branch"}} {{.Activity.OpenedPRCount}}
    + {{ctx.Locale.TrN .Activity.OpenedPRCount "repo.activity.opened_prs_count_1" "repo.activity.opened_prs_count_n"}} +
    + {{end}} + {{if .Permission.CanRead ctx.Consts.RepoUnitTypeIssues}} + + {{svg "octicon-issue-closed"}} {{.Activity.ClosedIssueCount}}
    + {{ctx.Locale.TrN .Activity.ClosedIssueCount "repo.activity.closed_issues_count_1" "repo.activity.closed_issues_count_n"}} +
    + + {{svg "octicon-issue-opened"}} {{.Activity.OpenedIssueCount}}
    + {{ctx.Locale.TrN .Activity.OpenedIssueCount "repo.activity.new_issues_count_1" "repo.activity.new_issues_count_n"}} +
    + {{end}} +
    +{{end}} + +{{if .Permission.CanRead ctx.Consts.RepoUnitTypeCode}} + {{if eq .Activity.Code.CommitCountInAllBranches 0}} +
    +

    {{ctx.Locale.Tr "repo.activity.no_git_activity"}}

    +
    + {{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) + }} +

    +
    + {{range .Activity.PublishedReleases}} +

    + {{ctx.Locale.Tr "repo.activity.published_release_label"}} + {{.TagName}} + {{if not .IsTag}} + {{.Title | ctx.RenderUtils.RenderIssueSimpleTitle}} + {{end}} + {{DateUtils.TimeSince .CreatedUnix}} +

    + {{end}} +
    +{{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) + }} +

    +
    + {{range .Activity.MergedPRs}} +

    + {{ctx.Locale.Tr "repo.activity.merged_prs_label"}} + #{{.Index}} {{.Issue.Title | ctx.RenderUtils.RenderIssueSimpleTitle}} + {{DateUtils.TimeSince .MergedUnix}} +

    + {{end}} +
    +{{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) + }} +

    +
    + {{range .Activity.OpenedPRs}} +

    + {{ctx.Locale.Tr "repo.activity.opened_prs_label"}} + #{{.Index}} {{.Issue.Title | ctx.RenderUtils.RenderIssueSimpleTitle}} + {{DateUtils.TimeSince .Issue.CreatedUnix}} +

    + {{end}} +
    +{{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) + }} +

    +
    + {{range .Activity.ClosedIssues}} +

    + {{ctx.Locale.Tr "repo.activity.closed_issue_label"}} + #{{.Index}} {{.Title | ctx.RenderUtils.RenderIssueSimpleTitle}} + {{DateUtils.TimeSince .ClosedUnix}} +

    + {{end}} +
    +{{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) + }} +

    +
    + {{range .Activity.OpenedIssues}} +

    + {{ctx.Locale.Tr "repo.activity.new_issue_label"}} + #{{.Index}} {{.Title | ctx.RenderUtils.RenderIssueSimpleTitle}} + {{DateUtils.TimeSince .CreatedUnix}} +

    + {{end}} +
    +{{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}} +

    +
    + {{range .Activity.UnresolvedIssues}} +

    + {{ctx.Locale.Tr "repo.activity.unresolved_conv_label"}} + #{{.Index}} + {{if .IsPull}} + {{.Title | ctx.RenderUtils.RenderIssueSimpleTitle}} + {{else}} + {{.Title | ctx.RenderUtils.RenderIssueSimpleTitle}} + {{end}} + {{DateUtils.TimeSince .UpdatedUnix}} +

    + {{end}} +
    +{{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" .}} + + + {{template "base/paginate" .}} +
    +
    + +{{if (and ($.Permission.CanWrite ctx.Consts.RepoUnitTypeCode) .PageIsTagList)}} + +{{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" .}} +
    +

    + {{if .PageIsEditRelease}} + {{ctx.Locale.Tr "repo.release.edit_release"}} +
    {{ctx.Locale.Tr "repo.release.edit_subheader"}}
    + {{else}} + {{ctx.Locale.Tr "repo.release.new_release"}} +
    {{ctx.Locale.Tr "repo.release.new_subheader"}}
    + {{end}} +

    + {{template "base/alert" .}} +
    + {{.CsrfTokenHtml}} +
    +
    + {{if .PageIsEditRelease}} + {{.tag_name}}@{{.tag_target}} + {{else}} + + +
    + @ + +
    +
    + {{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}} +
    +
    + + +
    +
    + {{else}} + + {{end}} +
    +
    + + +
    +
    + {{ctx.Locale.Tr "repo.release.prerelease_helper"}} +
    +
    + {{if .PageIsEditRelease}} + + {{ctx.Locale.Tr "repo.release.cancel"}} + + + {{ctx.Locale.Tr "repo.release.delete_release"}} + + {{if .IsDraft}} + + + {{else}} + + {{end}} + {{else}} + {{if not .tag_name}} + + {{end}} + + + {{end}} +
    +
    +
    +
    +
    +
    + +{{if .PageIsEditRelease}} + +{{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}} +
    +
    + +
    + {{if .EnableFeed}} + + {{svg "octicon-rss" 16}} {{ctx.Locale.Tr "rss_feed"}} + + {{end}} + {{if and (not .PageIsTagList) .CanCreateRelease}} + + {{ctx.Locale.Tr "repo.release.new_release"}} + + {{end}} +
    +
    +{{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.default_branch"}} +

    +
    +

    + {{ctx.Locale.Tr "repo.settings.default_branch_desc"}} +

    +
    + {{.CsrfTokenHtml}} + + + +
    +
    + +

    + {{ctx.Locale.Tr "repo.settings.protected_branch"}} + +

    + +
    +
    + {{range .ProtectedBranches}} +
    +
    + {{svg "octicon-grabber" 16}} +
    +
    +
    +
    {{.RuleName}}
    +
    +
    +
    + {{ctx.Locale.Tr "repo.settings.edit_protected_branch"}} + +
    +
    + {{else}} +
    + {{ctx.Locale.Tr "repo.settings.no_protected_branch"}} +
    + {{end}} +
    +
    + {{end}} +
    + + + +{{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")}} +
    +

    + {{ctx.Locale.Tr "repo.settings.collaboration"}} +

    + {{if .Collaborators}} +
    +
    + {{range .Collaborators}} +
    + +
    +
    + {{template "shared/user/name" .}} +
    +
    +
    +
    + {{svg "octicon-shield-lock"}} + +
    + +
    +
    + {{end}} +
    +
    + {{end}} +
    +
    + {{.CsrfTokenHtml}} + + +
    +
    + + {{if .RepoOwnerIsOrganization}} +

    + {{ctx.Locale.Tr "repo.settings.teams"}} +

    + {{$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}} +
    + +
    + {{end}} +
    + {{end}} +
    +
    + {{end}} +
    + {{if $allowedToChangeTeams}} +
    + {{.CsrfTokenHtml}} + + +
    + {{else}} +
    + {{ctx.Locale.Tr "repo.settings.change_team_access_not_allowed"}} +
    + {{end}} +
    + {{end}} +
    + + + +{{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")}} +
    +

    + {{ctx.Locale.Tr "repo.settings.deploy_keys"}} +
    + {{if not .DisableSSH}} + + {{else}} + + {{end}} +
    +

    +
    +
    +
    + {{.CsrfTokenHtml}} +
    + {{ctx.Locale.Tr "repo.settings.deploy_key_desc"}} +
    +
    + + +
    +
    + + +
    +
    +
    + + + {{ctx.Locale.Tr "repo.settings.is_writable_info"}} +
    +
    + + +
    +
    + {{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}} +
    +
    +
    + +
    +
    + {{end}} +
    + {{else}} + {{ctx.Locale.Tr "repo.settings.no_deploy_keys"}} + {{end}} +
    +
    + + + +{{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.githooks"}} +

    +
    +

    {{ctx.Locale.Tr "repo.settings.githook_edit_desc"}}

    +
    + {{.CsrfTokenHtml}} + {{with .Hook}} +
    + + {{.Name}} +
    +
    + + +
    +
    +
    + +
    + {{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"}} +

    +
    +
    +
    + {{ctx.Locale.Tr "repo.settings.githooks_desc"}} +
    + {{range .Hooks}} +
    + {{svg "octicon-dot-fill" 22}} + {{.Name}} + + {{svg "octicon-pencil"}} + +
    + {{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")}} +
    +

    + {{ctx.Locale.Tr "repo.settings.lfs_filelist"}} ({{ctx.Locale.Tr "admin.total" .Total}}) + +

    + + + {{range .LFSFiles}} + + + + + + + {{else}} + + + + {{end}} + +
    + + {{ShortSha .Oid}} + + {{FileSize .Size}}{{DateUtils.TimeSince .CreatedUnix}} + {{ctx.Locale.Tr "repo.settings.lfs_findcommits"}} + +
    {{ctx.Locale.Tr "repo.settings.lfs_no_lfs_files"}}
    + {{template "base/paginate" .}} + {{range .LFSFiles}} + + {{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")}} +
    +
    +

    + {{ctx.Locale.Tr "repo.settings.lfs"}} / {{.LFSFile.Oid}} + +

    +
    + {{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}} + + {{else if .IsAudioFile}} + + {{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")}} +
    +
    +

    + {{ctx.Locale.Tr "repo.settings.lfs"}} / {{.Oid}} +

    + + + {{range .Results}} + + + + + + + + {{else}} + + + + {{end}} + +
    + {{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}}
    {{ctx.Locale.Tr "repo.settings.lfs_lfs_file_no_commits"}}
    +
    +
    +{{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")}} +
    +
    +

    + {{ctx.Locale.Tr "repo.settings.lfs"}} / {{ctx.Locale.Tr "repo.settings.lfs_locks"}} ({{ctx.Locale.Tr "admin.total" .Total}}) +

    +
    +
    + {{$.CsrfTokenHtml}} +
    + + +
    +
    +
    + + + {{range $index, $lock := .LFSLocks}} + + + + + + + {{else}} + + + + {{end}} + +
    + {{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}} + +
    +
    {{ctx.Locale.Tr "repo.settings.lfs_locks_no_locks"}}
    + {{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.found" .NumPointers .NumAssociated .NumNotAssociated .NumNoExist}} + {{if gt .NumAssociatable 0}} +
    +
    + {{.CsrfTokenHtml}} + {{range .Pointers}} + {{if .Associatable}} + + {{end}} + {{end}} + +
    +
    + {{end}} +

    +
    + + + + + + + + + + + + + {{range .Pointers}} + + + + + + + + + {{end}} + +
    {{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"}}
    + + {{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"}} +
    +
    +
    +{{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")}} +
    +

    + {{ctx.Locale.Tr "repo.settings.basic_settings"}} +

    +
    +
    + {{template "base/disable_form_autofill"}} + {{.CsrfTokenHtml}} + +
    + + +
    +
    + + {{FileSize .Repository.Size}} +
    +
    + +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + +
    +
    + +
    +
    + {{.CsrfTokenHtml}} +
    + + +
    +
    + + +
    +
    +
    + + {{/* 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}} +

    + {{ctx.Locale.Tr "repo.settings.mirror_settings"}} +

    +
    + {{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}} + + + + + + + + + + {{if $modifyBrokenPullMirror}} + {{/* even if a repo is a pull mirror (IsMirror=true), the PullMirror might still be nil if the mirror migration is broken */}} + + + + + + {{else if $isWorkingPullMirror}} + + + + + + + + + + + + {{end}}{{/* end if: $modifyBrokenPullMirror / $isWorkingPullMirror */}} +
    {{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"}}
    +
    {{ctx.Locale.Tr "repo.settings.mirror_settings.direction.pull"}}: {{ctx.Locale.Tr "error.occurred"}}
    +
    {{.PullMirror.RemoteAddress}}{{ctx.Locale.Tr "repo.settings.mirror_settings.direction.pull"}}{{DateUtils.FullTime .PullMirror.UpdatedUnix}} +
    + {{.CsrfTokenHtml}} + + +
    +
    +
    + {{template "base/disable_form_autofill"}} + {{.CsrfTokenHtml}} + +
    + +
    + + +
    +
    +
    + + +
    + {{$address := MirrorRemoteAddress ctx .Repository .PullMirror.GetRemoteName}} +
    + + +

    {{ctx.Locale.Tr "repo.mirror_address_desc"}}

    +
    +
    + + {{ctx.Locale.Tr "repo.need_auth"}} + +
    +
    + + +
    +
    + + +
    +

    {{ctx.Locale.Tr "repo.mirror_password_help"}}

    +
    +
    + + {{if .LFSStartServer}} +
    + +
    + + +
    +
    +
    + + +

    {{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}} +
    + +
    +
    +
    + {{end}}{{/* end if .Repository.IsMirror */}} + + + + + + + + + + + + {{range .PushMirrors}} + + + + + + + {{else}} + + + + {{end}} + {{if (not .DisableNewPushMirrors)}} + + + + {{end}} + +
    {{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"}}
    {{.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}}
    + +
    + {{$.CsrfTokenHtml}} + + + +
    +
    + {{$.CsrfTokenHtml}} + + + +
    +
    {{ctx.Locale.Tr "repo.settings.mirror_settings.push_mirror.none"}}
    +
    + {{template "base/disable_form_autofill"}} + {{.CsrfTokenHtml}} + +
    + + +

    {{ctx.Locale.Tr "repo.mirror_address_desc"}}

    +
    +
    + + {{ctx.Locale.Tr "repo.need_auth"}} + +
    +
    + + +
    +
    + + +
    +
    +
    +
    +
    + + +
    +
    +
    + + +
    +
    + +
    +
    +
    + {{end}} +
    + {{end}} + +

    + {{ctx.Locale.Tr "repo.settings.advanced_settings"}} +

    +
    +
    + {{.CsrfTokenHtml}} + + + {{$isCodeEnabled := .Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypeCode}} + {{$isCodeGlobalDisabled := ctx.Consts.RepoUnitTypeCode.UnitGlobalDisabled}} +
    + +
    + + +
    +
    + + {{$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}} +
    + +
    + + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    + {{$unitInternalWiki := .Repository.MustGetUnit ctx ctx.Consts.RepoUnitTypeWiki}} + + +
    +
    +
    +
    + + +
    +
    +
    + + +

    {{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}} +
    + +
    + + +
    +
    +
    +
    +
    + + +
    +
    +
    + {{if .Repository.CanEnableTimetracker}} +
    +
    + + +
    +
    +
    +
    + + +
    +
    + {{end}} +
    +
    + + +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +

    {{ctx.Locale.Tr "repo.settings.external_tracker_url_desc"}}

    +
    +
    + + +

    {{ctx.Locale.Tr "repo.settings.tracker_url_format_desc"}}

    +
    +
    + +
    +
    + {{$externalTracker := (.Repository.MustGetUnit ctx ctx.Consts.RepoUnitTypeExternalTracker)}} + {{$externalTrackerStyle := $externalTracker.ExternalTrackerConfig.ExternalTrackerStyle}} + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +

    {{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.settings.projects_mode_desc"}} +

    + +
    + +
    + + {{$isReleasesEnabled := .Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypeReleases}} + {{$isReleasesGlobalDisabled := ctx.Consts.RepoUnitTypeReleases.UnitGlobalDisabled}} +
    + +
    + + +
    +
    + + {{$isPackagesEnabled := .Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypePackages}} + {{$isPackagesGlobalDisabled := ctx.Consts.RepoUnitTypePackages.UnitGlobalDisabled}} +
    + +
    + + +
    +
    + + {{if .EnableActions}} + {{$isActionsEnabled := .Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypeActions}} + {{$isActionsGlobalDisabled := ctx.Consts.RepoUnitTypeActions.UnitGlobalDisabled}} +
    + +
    + + +
    +
    + {{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.settings.merge_style_desc"}} +

    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    + +
    +

    + {{ctx.Locale.Tr "repo.settings.default_merge_style_desc"}} +

    + +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    + {{end}} + +
    +
    + +
    +
    +
    + +

    + {{ctx.Locale.Tr "repo.settings.signing_settings"}} +

    +
    +
    + {{.CsrfTokenHtml}} + +
    +
    +
    +
    + + +

    {{ctx.Locale.Tr "repo.settings.trust_model.default.desc"}}

    +
    +
    +
    +
    + + +

    {{ctx.Locale.Tr "repo.settings.trust_model.collaborator.desc"}}

    +
    +
    +
    +
    + + +

    {{ctx.Locale.Tr "repo.settings.trust_model.committer.desc"}}

    +
    +
    +
    +
    + + +

    {{ctx.Locale.Tr "repo.settings.trust_model.collaboratorcommitter.desc"}}

    +
    +
    +
    + +
    +
    + +
    +
    +
    + + {{if .IsAdmin}} +

    + {{ctx.Locale.Tr "repo.settings.admin_settings"}} +

    +
    +
    + {{.CsrfTokenHtml}} + +
    +
    + + +
    +
    + +
    + +
    +
    + +
    +
    + {{.CsrfTokenHtml}} + + {{if .IsRepoIndexerEnabled}} +

    {{ctx.Locale.Tr "repo.settings.admin_code_indexer"}}

    +
    + + + {{if .CodeIndexerStatus}} + + {{ShortSha .CodeIndexerStatus.CommitSha}} + + {{else}} + {{ctx.Locale.Tr "repo.settings.admin_indexer_unindexed"}} + {{end}} + +
    + +
    +
    + {{end}} +

    {{ctx.Locale.Tr "repo.settings.admin_stats_indexer"}}

    +
    + {{if and .StatsIndexerStatus .StatsIndexerStatus.CommitSha}} + + {{end}} + + {{if and .StatsIndexerStatus .StatsIndexerStatus.CommitSha}} + + {{ShortSha .StatsIndexerStatus.CommitSha}} + + {{else}} + {{ctx.Locale.Tr "repo.settings.admin_indexer_unindexed"}} + {{end}} + +
    + +
    +
    +
    +
    + {{end}} + + {{if .Permission.IsOwner}} +

    + {{ctx.Locale.Tr "repo.settings.danger_zone"}} +

    +
    +
    + {{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}} +
    +
    + +
    +
    + {{end}} + {{if .Repository.IsMirror}} +
    +
    +
    {{ctx.Locale.Tr "repo.settings.convert"}}
    +
    {{ctx.Locale.Tr "repo.settings.convert_desc"}}
    +
    +
    + +
    +
    + {{end}} + {{if and .Repository.IsFork .Repository.Owner.CanCreateRepo}} +
    +
    +
    {{ctx.Locale.Tr "repo.settings.convert_fork"}}
    +
    {{ctx.Locale.Tr "repo.settings.convert_fork_desc"}}
    +
    +
    + +
    +
    + {{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}} + + +
    + {{else}} + + {{end}} +
    +
    + {{if .Permission.CanRead ctx.Consts.RepoUnitTypeWiki}} +
    +
    +
    {{ctx.Locale.Tr "repo.settings.wiki_delete"}}
    +
    {{ctx.Locale.Tr "repo.settings.wiki_delete_desc"}}
    +
    +
    + +
    +
    + {{end}} +
    +
    +
    {{ctx.Locale.Tr "repo.settings.delete"}}
    +
    {{ctx.Locale.Tr "repo.settings.delete_desc"}}
    +
    +
    + +
    +
    + {{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}} +
    +
    + +
    +
    + {{end}} +
    +
    + {{end}} +
    +{{template "repo/settings/layout_footer" .}} + +{{if .Permission.IsOwner}} + {{if .Repository.IsMirror}} + + {{end}} + {{if and .Repository.IsFork .Repository.Owner.CanCreateRepo}} + + {{end}} + + + + + {{if not .Repository.IsFork}} + + {{end}} + + {{if .Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypeWiki}} + + {{end}} + + {{if not .Repository.IsMirror}} + + {{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.branch_protection" .Rule.RuleName}} +

    +
    +
    {{ctx.Locale.Tr "repo.settings.protect_patterns"}}
    +
    + + + +

    {{ctx.Locale.Tr "repo.settings.protect_branch_name_pattern_desc" "https://github.com/gobwas/glob"}}

    +
    +
    + + +

    {{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_desc" "https://pkg.go.dev/github.com/gobwas/glob#Compile" "github.com/gobwas/glob"}}

    +
    + + {{.CsrfTokenHtml}} +
    {{ctx.Locale.Tr "repo.settings.event_push"}}
    +
    +
    + + +

    {{ctx.Locale.Tr "repo.settings.protect_disable_push_desc"}}

    +
    +
    +
    +
    + + +

    {{ctx.Locale.Tr "repo.settings.protect_enable_push_desc"}}

    +
    +
    +
    +
    +
    + + +

    {{ctx.Locale.Tr "repo.settings.protect_whitelist_committers_desc"}}

    +
    +
    +
    +
    + + +
    + {{if .Owner.IsOrganization}} +
    + + +
    + {{end}} +
    +
    + + +
    +
    +
    +
    +
    +
    + + +

    {{ctx.Locale.Tr "repo.settings.require_signed_commits_desc"}}

    +
    +
    +
    {{ctx.Locale.Tr "repo.settings.event_force_push"}}
    +
    +
    + + +

    {{ctx.Locale.Tr "repo.settings.protect_disable_force_push_desc"}}

    +
    +
    +
    +
    + + +

    {{ctx.Locale.Tr "repo.settings.protect_enable_force_push_all_desc"}}

    +
    +
    +
    +
    +
    + + +

    {{ctx.Locale.Tr "repo.settings.protect_enable_force_push_allowlist_desc"}}

    +
    +
    +
    +
    + + +
    + {{if .Owner.IsOrganization}} +
    + + +
    + {{end}} +
    +
    + + +
    +
    +
    +
    +
    {{ctx.Locale.Tr "repo.settings.event_pull_request_approvals"}}
    +
    + + +

    {{ctx.Locale.Tr "repo.settings.protect_required_approvals_desc"}}

    +
    +
    +
    +
    + + +

    {{ctx.Locale.Tr "repo.settings.protect_approvals_whitelist_enabled_desc"}}

    +
    +
    +
    +
    + + +
    + {{if .Owner.IsOrganization}} +
    + + +
    + {{end}} +
    +
    +
    +
    + + +

    {{ctx.Locale.Tr "repo.settings.dismiss_stale_approvals_desc"}}

    +
    +
    +
    +
    + + +

    {{ctx.Locale.Tr "repo.settings.ignore_stale_approvals_desc"}}

    +
    +
    +
    +
    +
    + + +

    {{ctx.Locale.Tr "repo.settings.protect_check_status_contexts_desc"}}

    +
    +
    +
    + + +

    {{ctx.Locale.Tr "repo.settings.protect_status_check_patterns_desc"}}

    + + + + + + + + {{range $.recent_status_checks}} + + + + {{else}} + + {{end}} + +
    {{ctx.Locale.Tr "repo.settings.protect_check_status_contexts_list"}}
    + {{.}} + {{ctx.Locale.Tr "repo.settings.protect_status_check_matched"}} +
    -
    +
    +
    +
    {{ctx.Locale.Tr "repo.settings.event_pull_request_merge"}}
    +
    +
    +
    + + +

    {{ctx.Locale.Tr "repo.settings.protect_enable_merge_desc"}}

    +
    +
    +
    +
    + + +

    {{ctx.Locale.Tr "repo.settings.protect_merge_whitelist_committers_desc"}}

    +
    +
    +
    +
    + + +
    + {{if .Owner.IsOrganization}} +
    + + +
    + {{end}} +
    +
    +
    +
    + + +

    {{ctx.Locale.Tr "repo.settings.block_rejected_reviews_desc"}}

    +
    +
    +
    +
    + + +

    {{ctx.Locale.Tr "repo.settings.block_on_official_review_requests_desc"}}

    +
    +
    +
    +
    + + +

    {{ctx.Locale.Tr "repo.settings.block_outdated_branch_desc"}}

    +
    +
    +
    +
    + + +

    {{ctx.Locale.Tr "repo.settings.block_admin_merge_override_desc"}}

    +
    +
    +
    + +
    + +
    +
    +
    +
    +{{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 @@ + 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}} +

    + {{ctx.Locale.Tr "repo.settings.tags.protection"}} +

    + +
    +
    +
    +
    +
    + {{.CsrfTokenHtml}} +
    + + +
    +
    + + +
    + {{if .Owner.IsOrganization}} +
    + + +
    + {{end}} +
    + {{if .PageIsEditProtectedTag}} + + + {{ctx.Locale.Tr "cancel"}} + + {{else}} + + {{end}} +
    +
    +
    +
    + +
    + + + + + + + + {{range .ProtectedTags}} + + + + + + {{else}} + + {{end}} + +
    {{ctx.Locale.Tr "repo.settings.tags.protection.pattern"}}{{ctx.Locale.Tr "repo.settings.tags.protection.allowed"}}
    {{.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 "repo.settings.tags.protection.none"}}
    +
    +
    +
    + {{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 @@ +

    + {{.Title}} +
    + +
    +

    +
    +
    +
    + {{.Description}} +
    + {{range .Webhooks}} +
    + {{svg "octicon-dot-fill" 22}} +
    + {{.URL}} +
    + {{svg "octicon-pencil"}} + {{svg "octicon-trash"}} +
    + {{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 @@ + 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}} +
    + + +
    + {{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}} +
    + + +
    +
    + + +
    +
    + + +
    + {{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}} +
    + + +
    + {{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}} +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    + {{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}} +
    + + +
    +
    + + +
    +
    + + +
    + {{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}} +

    + {{ctx.Locale.Tr "repo.settings.recent_deliveries"}} + {{if .Permission.IsAdmin}} +
    + + + + +
    + {{end}} +

    +
    +
    + {{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}} +
    + + +
    +
    + + +
    +
    + + +
    + {{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}} +
    + + +
    + {{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}} +
    + + +
    +
    + + +
    +
    + + +
    + {{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_create_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{ctx.Locale.Tr "repo.settings.event_delete_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{ctx.Locale.Tr "repo.settings.event_fork_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{ctx.Locale.Tr "repo.settings.event_push_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{ctx.Locale.Tr "repo.settings.event_repository_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{ctx.Locale.Tr "repo.settings.event_release_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{ctx.Locale.Tr "repo.settings.event_package_desc"}} +
    +
    +
    + + +
    +
    +
    + + + {{ctx.Locale.Tr "repo.settings.event_wiki_desc"}} +
    +
    +
    + + +
    +
    +
    + + + {{ctx.Locale.Tr "repo.settings.event_statuses_desc"}} +
    +
    +
    + + +
    + +
    + +
    +
    +
    + + + {{ctx.Locale.Tr "repo.settings.event_issues_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{ctx.Locale.Tr "repo.settings.event_issue_assign_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{ctx.Locale.Tr "repo.settings.event_issue_label_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{ctx.Locale.Tr "repo.settings.event_issue_milestone_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{ctx.Locale.Tr "repo.settings.event_issue_comment_desc"}} +
    +
    +
    + + +
    + +
    + +
    +
    +
    + + + {{ctx.Locale.Tr "repo.settings.event_pull_request_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{ctx.Locale.Tr "repo.settings.event_pull_request_assign_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{ctx.Locale.Tr "repo.settings.event_pull_request_label_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{ctx.Locale.Tr "repo.settings.event_pull_request_milestone_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{ctx.Locale.Tr "repo.settings.event_pull_request_comment_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{ctx.Locale.Tr "repo.settings.event_pull_request_review_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{ctx.Locale.Tr "repo.settings.event_pull_request_sync_desc"}} +
    +
    +
    + +
    +
    +
    + + + {{ctx.Locale.Tr "repo.settings.event_pull_request_review_request_desc"}} +
    +
    +
    +
    +
    + + +
    + + + {{ctx.Locale.Tr "repo.settings.branch_filter_desc" "https://pkg.go.dev/github.com/gobwas/glob#Compile" "github.com/gobwas/glob"}} +
    + + +
    + + + {{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_helper"}} +
    +
    +
    + {{if $isNew}} + + {{else}} + + {{ctx.Locale.Tr "repo.settings.delete_webhook"}} + {{end}} +
    + +{{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}} +
    + + +
    +
    + + +
    + +
    + + +
    +
    + + +
    +
    + + +
    + {{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}} +
    + + +
    +
    + + +
    +
    + + +
    + {{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}} +
    + + +
    + {{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 @@ +
    + {{if .verification.Verified}} +
    + {{if ne .verification.SigningUser.ID 0}} + {{svg "gitea-lock"}} + {{ctx.AvatarUtils.Avatar .verification.SigningUser 16 "signature"}} + {{else}} + {{svg "gitea-lock-cog"}} + {{ctx.AvatarUtils.AvatarByEmail .verification.SigningEmail "" 16 "signature"}} + {{end}} +
    + {{else}} + {{svg "gitea-unlock"}} + {{end}} +
    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 @@ +
    +
    + {{$buttonText := ctx.Locale.Tr "repo.star"}} + {{if $.IsStaringRepo}}{{$buttonText = ctx.Locale.Tr "repo.unstar"}}{{end}} + + + {{CountFmt .Repository.NumStars}} + +
    +
    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" .}} +

    +
    + {{.TagCount}} {{ctx.Locale.Tr "repo.release.tags"}} +
    +

    + {{$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}} + + + {{range $idx, $release := .Releases}} + + + + {{end}} + +
    +

    + {{if $canReadReleases}} + {{.TagName}} + {{else}} + {{.TagName}} + {{end}} +

    +
    + {{if $.Permission.CanRead ctx.Consts.RepoUnitTypeCode}} + {{if .CreatedUnix}} + {{svg "octicon-clock" 16 "tw-mr-1"}}{{DateUtils.TimeSince .CreatedUnix}} + {{end}} + + {{svg "octicon-git-commit" 16 "tw-mr-1"}}{{ShortSha .Sha1}} + + {{if not $.DisableDownloadSourceArchives}} + {{svg "octicon-file-zip" 16 "tw-mr-1"}}ZIP + {{svg "octicon-file-zip" 16 "tw-mr-1"}}TAR.GZ + {{end}} + + {{if (and $canReadReleases $.CanCreateRelease $release.IsTag)}} + {{svg "octicon-tag" 16 "tw-mr-1"}}{{ctx.Locale.Tr "repo.release.new_release"}} + {{end}} + + {{if (and ($.Permission.CanWrite ctx.Consts.RepoUnitTypeCode) $release.IsTag)}} + + {{svg "octicon-trash" 16 "tw-mr-1"}}{{ctx.Locale.Tr "repo.release.delete_tag"}} + + {{end}} + + {{if and $canReadReleases (not $release.IsTag)}} + {{svg "octicon-tag" 16 "tw-mr-1"}}{{ctx.Locale.Tr "repo.release.detail"}} + {{end}} + {{end}} +
    +
    + {{else}} + {{if .NumTags}} +

    {{ctx.Locale.Tr "no_results_found"}}

    + {{end}} + {{end}} +
    + {{template "base/paginate" .}} +
    +
    + +{{if $.Permission.CanWrite ctx.Consts.RepoUnitTypeCode}} + +{{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}} +
    + +
    + {{ctx.Locale.Tr "repo.invisible_runes_header"}} +
    +

    {{ctx.Locale.Tr "repo.invisible_runes_description"}}

    + {{if .EscapeStatus.HasAmbiguous}} +

    {{ctx.Locale.Tr "repo.ambiguous_runes_description"}}

    + {{end}} +
    + {{else if .EscapeStatus.HasAmbiguous}} +
    + +
    + {{ctx.Locale.Tr "repo.ambiguous_runes_header"}} +
    +

    {{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}} +

    + {{.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}} +
    +
    {{.FileError}}
    +
    + {{end}} + {{- if .FileWarning}} +
    +
    {{.FileWarning}}
    +
    + {{end}} + + {{if not .ReadmeInList}} +
    +
    + {{template "repo/latest_commit" .}} +
    + {{if .LatestCommit}} + {{if .LatestCommit.Committer}} +
    + {{DateUtils.TimeSince .LatestCommit.Committer.When}} +
    + {{end}} + {{end}} +
    + {{end}} + +

    +
    + {{if .ReadmeInList}} + {{svg "octicon-book" 16 "tw-mr-2"}} + {{.FileName}} + {{else}} + {{template "repo/file_info" .}} + {{end}} +
    +
    + {{if .HasSourceRenderedToggle}} + + {{end}} + {{if not .ReadmeInList}} +
    + {{ctx.Locale.Tr "repo.file_raw"}} + {{if not .IsViewCommit}} + {{ctx.Locale.Tr "repo.file_permalink"}} + {{end}} + {{if .IsRepresentableAsText}} + {{ctx.Locale.Tr "repo.blame"}} + {{end}} + {{ctx.Locale.Tr "repo.file_history"}} + {{if .EscapeStatus.Escaped}} + + + {{end}} +
    + {{svg "octicon-download"}} + {{svg "octicon-copy"}} + {{if .EnableFeed}} + + {{svg "octicon-rss"}} + + {{end}} + {{if .Repository.CanEnableEditor}} + {{if .CanEditFile}} + {{svg "octicon-pencil"}} + {{else}} + {{svg "octicon-pencil"}} + {{end}} + {{if .CanDeleteFile}} + {{svg "octicon-trash"}} + {{else}} + {{svg "octicon-trash"}} + {{end}} + {{end}} + {{else if .EscapeStatus.Escaped}} + + + {{end}} + {{if and .ReadmeInList .CanEditReadmeFile}} + {{svg "octicon-pencil"}} + {{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}} + + {{else if .IsAudioFile}} + + {{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}} + + {{end}} + + + {{end}} + +
    {{if (index $.LineEscapeStatus $idx).Escaped}}{{end}}{{$code}}
    + + {{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 $entry.IsSubModule}} + {{svg "octicon-file-submodule"}} + {{$refURL := $subModuleFile.RefURL AppUrl $.Repository.FullName $.SSHDomain}} {{/* FIXME: the usage of AppUrl seems incorrect, it would be fixed in the future, use AppSubUrl instead */}} + {{if $refURL}} + {{$entry.Name}} @ {{ShortSha $subModuleFile.RefID}} + {{else}} + {{$entry.Name}} @ {{ShortSha $subModuleFile.RefID}} + {{end}} + {{else}} + {{if $entry.IsDir}} + {{$subJumpablePathName := $entry.GetSubJumpablePathName}} + {{svg "octicon-file-directory-fill"}} + + {{$subJumpablePathFields := StringUtils.Split $subJumpablePathName "/"}} + {{$subJumpablePathFieldLast := (Eval (len $subJumpablePathFields) "-" 1)}} + {{if eq $subJumpablePathFieldLast 0}} + {{$subJumpablePathName}} + {{else}} + {{$subJumpablePathPrefixes := slice $subJumpablePathFields 0 $subJumpablePathFieldLast}} + {{StringUtils.Join $subJumpablePathPrefixes "/"}}/{{index $subJumpablePathFields $subJumpablePathFieldLast}} + {{end}} + + {{else}} + {{svg (printf "octicon-%s" (EntryIcon $entry))}} + {{$entry.Name}} + {{end}} + {{end}} +
    +
    + {{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 @@ +
    +
    + {{$buttonText := ctx.Locale.Tr "repo.watch"}} + {{if $.IsWatchingRepo}}{{$buttonText = ctx.Locale.Tr "repo.unwatch"}}{{end}} + + + {{CountFmt .Repository.NumWatches}} + +
    +
    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" .}} +
    + {{ctx.Locale.Tr "repo.wiki.new_page"}} + {{if .PageIsWikiEdit}} + {{ctx.Locale.Tr "repo.wiki.new_page_button"}} + {{end}} +
    +
    + {{.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"}} + +
    +
    +
    +
    +{{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" .}} +
    +

    + {{ctx.Locale.Tr "repo.wiki.pages"}} + + {{if and .CanWriteWiki (not .Repository.IsMirror)}} + {{ctx.Locale.Tr "repo.wiki.new_page_button"}} + {{end}} + +

    + {{if .IsRepositoryAdmin}}
    {{ctx.Locale.Tr "repo.default_branch"}}: {{.Repository.DefaultWikiBranch}}
    {{end}} + + + {{range .Pages}} + + + {{$timeSince := DateUtils.TimeSince .UpdatedUnix}} + + + {{end}} + +
    + {{svg "octicon-file"}} + {{.Name}} + {{svg "octicon-chevron-right"}} + {{ctx.Locale.Tr "repo.wiki.last_updated" $timeSince}}
    +
    +
    +{{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}} +
    +
    +
    +
    + {{.revision}} {{svg "octicon-home"}} + {{$title}} +
    + {{$timeSince := DateUtils.TimeSince .Author.When}} + {{ctx.Locale.Tr "repo.wiki.last_commit_info" .Author.Name $timeSince}} +
    +
    +
    +
    + {{template "repo/clone_panel" .}} +
    +
    +

    {{ctx.Locale.Tr "repo.wiki.wiki_page_revisions"}}

    +
    +

    +
    +
    + {{.CommitCount}} {{ctx.Locale.Tr "repo.commits.commits"}} +
    +
    +

    + {{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" .}} +
    +
    + {{svg "octicon-book" 48}} +

    {{ctx.Locale.Tr "repo.wiki.welcome"}}

    +

    {{ctx.Locale.Tr "repo.wiki.welcome_desc"}}

    + {{if and .CanWriteWiki (not .Repository.IsMirror)}} + {{ctx.Locale.Tr "repo.wiki.create_first_page"}} + {{end}} +
    +
    +
    +{{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}} +
    +
    +
    + +
    + {{template "repo/clone_panel" .}} +
    +
    +
    +
    + {{.CommitCount}} {{svg "octicon-history"}} +
    + {{$title}} +
    + {{$timeSince := DateUtils.TimeSince .Author.When}} + {{ctx.Locale.Tr "repo.wiki.last_commit_info" .Author.Name $timeSince}} +
    +
    +
    + +
    +
    + {{if .FormatWarning}} +
    +

    {{.FormatWarning}}

    +
    + {{end}} + +
    + {{if .sidebarTocContent}} + + {{end}} + +
    + {{template "repo/unicode_escape_prompt" dict "EscapeStatus" .EscapeStatus "root" $}} + {{.content | SafeHTML}} +
    + + {{if .sidebarPresent}} + + {{end}} + +
    + + {{if .footerPresent}} + + {{end}} +
    +
    +
    + + + +{{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.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 @@ +
    +

    + {{ctx.Locale.Tr "actions.runners.runner_title"}} {{.Runner.ID}} {{.Runner.Name}} +

    +
    +
    + {{template "base/disable_form_autofill"}} + {{.CsrfTokenHtml}} +
    +
    + + {{.Runner.StatusLocaleName ctx.Locale}} +
    +
    + + {{if .Runner.LastOnline}}{{DateUtils.TimeSince .Runner.LastOnline}}{{else}}{{ctx.Locale.Tr "never"}}{{end}} +
    +
    + + + {{range .Runner.AgentLabels}} + {{.}} + {{end}} + +
    +
    + + {{.Runner.BelongsToOwnerType.LocaleString ctx.Locale}} +
    +
    + +
    + +
    + + +
    + +
    + +
    + + +
    +
    +
    + +

    + {{ctx.Locale.Tr "actions.runners.task_list"}} +

    +
    + + + + + + + + + + + + {{range .Tasks}} + + + + + + + + {{end}} + {{if not .Tasks}} + + + + {{end}} + +
    {{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"}}
    {{.ID}}{{.Status.LocaleString ctx.Locale}}{{.GetRepoName}} + {{ShortSha .CommitSHA}} + {{if .IsStopped}} + {{DateUtils.TimeSince .Stopped}} + {{else}}-{{end}}
    {{ctx.Locale.Tr "actions.runners.task_list.no_tasks"}}
    + {{template "base/paginate" .}} +
    + +
    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 @@ +
    + +

    + {{ctx.Locale.Tr "actions.runners.runner_manage_panel"}} ({{ctx.Locale.Tr "admin.total" .Total}}) +
    + + +
    +

    +
    +
    + {{template "shared/search/combo" dict "Value" .Keyword "Placeholder" (ctx.Locale.Tr "search.runner_kind")}} +
    +
    +
    + + + + + + + + + + + + + + + {{if .Runners}} + {{range .Runners}} + + + + + + + + + + + {{end}} + {{else}} + + + + {{end}} + +
    + {{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"}}
    + {{.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}} +
    {{ctx.Locale.Tr "actions.runners.none"}}
    +
    + + {{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"}} + +
    + {{if eq $previewMode "comment"}} +
    + {{svg "octicon-mention"}} + {{svg "octicon-cross-reference"}} +
    + {{end}} +
    + + {{if $supportEasyMDE}} + + {{end}} +
    +
    + + + + +
    +
    + {{ctx.Locale.Tr "loading"}} +
    +
    +
    + + x + + +
    +
    +
    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 @@ +
    + {{ctx.Locale.Tr "repo.file_too_large"}} + {{if .RawFileLink}}{{ctx.Locale.Tr "repo.file_view_raw"}}{{end}} +
    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" .}} +
    + +
    +
    +
    + {{.Title | ctx.RenderUtils.RenderIssueSimpleTitle}} + {{if .IsPull}} + {{if (index $.CommitStatuses .PullRequest.ID)}} + {{template "repo/commit_statuses" dict "Status" (index $.CommitLastStatus .PullRequest.ID) "Statuses" (index $.CommitStatuses .PullRequest.ID)}} + {{end}} + {{end}} + + {{range .Labels}} + {{ctx.RenderUtils.RenderLabel .}} + {{end}} + +
    + {{if or .TotalTrackedTime .Assignees .NumComments}} +
    + {{if .TotalTrackedTime}} +
    + {{svg "octicon-clock" 16}} + {{.TotalTrackedTime | Sec2Time}} +
    + {{end}} + {{if .Assignees}} +
    + {{range .Assignees}} + + {{ctx.AvatarUtils.Avatar . 20}} + + {{end}} +
    + {{end}} + {{if .NumComments}} + + {{end}} +
    + {{end}} +
    +
    + + {{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}} + + {{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 */}} + 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}} +
    + +{{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 */}} + 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}} + + + + + {{end}} + +
    + {{.Num}} + {{.FormattedContent}}
    +
    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 @@ +

    + {{ctx.Locale.Tr "secrets.management"}} +
    + +
    +

    +
    + {{if .Secrets}} +
    + {{range .Secrets}} +
    +
    + {{svg "octicon-key" 32}} +
    +
    +
    + {{.Name}} +
    +
    + ****** +
    +
    +
    + + {{ctx.Locale.Tr "settings.added_on" (DateUtils.AbsoluteShort .CreatedUnix)}} + + +
    +
    + {{end}} +
    + {{else}} + {{ctx.Locale.Tr "secrets.none"}} + {{end}} +
    + +{{/* Add secret dialog */}} + 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 @@ + 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.title"}} +

    +
    +

    {{ctx.Locale.Tr "user.block.info_1"}}

    + +
    +
    +
    + {{.CsrfTokenHtml}} + + +
    + + +

    {{ctx.Locale.Tr "user.block.note.info"}}

    +
    +
    +
    +

    + {{ctx.Locale.Tr "user.block.list"}} +

    +
    +
    + {{range .UserBlocks}} +
    +
    + {{ctx.AvatarUtils.Avatar .Blockee}} +
    +
    + + {{if .Note}} +
    + {{ctx.Locale.Tr "user.block.note"}}: {{.Note}} +
    + {{end}} +
    +
    + +
    + {{$.CsrfTokenHtml}} + + + +
    +
    +
    + {{else}} +
    {{ctx.Locale.Tr "user.block.list.none"}}
    + {{end}} +
    +
    + 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}} +
    +
    +
    +
    + {{ctx.AvatarUtils.Avatar . 100}} + {{.DisplayName}} + + {{if .Visibility.IsLimited}}
    {{ctx.Locale.Tr "org.settings.visibility.limited_shortname"}}
    {{end}} + {{if .Visibility.IsPrivate}}
    {{ctx.Locale.Tr "org.settings.visibility.private_shortname"}}
    {{end}} +
    +
    +
    +
    +
    +{{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 @@ +
    + +
    + {{if .ContextUser.FullName}}{{.ContextUser.FullName}}{{end}} + {{.ContextUser.Name}} {{if .IsAdmin}} + + {{svg "octicon-gear" 18}} + + {{end}} + +
    +
    +
      + {{if .UserBlocking}} +
    • {{svg "octicon-circle-slash"}} {{ctx.Locale.Tr "user.block.blocked"}}
    • + {{if .UserBlocking.Note}} +
    • {{ctx.Locale.Tr "user.block.note"}}: {{.UserBlocking.Note}}
    • + {{end}} + {{end}} + {{if .ContextUser.Location}} +
    • + {{svg "octicon-location"}} + {{.ContextUser.Location}} + {{if .ContextUserLocationMapURL}} + + {{svg "octicon-link-external"}} + + {{end}} +
    • + {{end}} + {{if (eq .SignedUserID .ContextUser.ID)}} +
    • + {{svg "octicon-mail"}} + {{.ContextUser.Email}} + + {{svg (Iif .ShowUserEmail "octicon-unlock" "octicon-lock")}} + +
    • + {{else}} + {{if .ShowUserEmail}} +
    • + {{svg "octicon-mail"}} + {{.ContextUser.Email}} +
    • + {{end}} + {{end}} + {{if .ContextUser.Website}} +
    • + {{svg "octicon-link"}} + {{.ContextUser.Website}} +
    • + {{end}} + {{if $.RenderedDescription}} +
    • +
      {{$.RenderedDescription}}
      +
    • + {{end}} + {{range .OpenIDs}} + {{if .Show}} +
    • + {{svg "fontawesome-openid"}} + {{.URI}} +
    • + {{end}} + {{end}} +
    • {{svg "octicon-calendar"}} {{ctx.Locale.Tr "user.joined_on" (DateUtils.AbsoluteShort .ContextUser.CreatedUnix)}}
    • + {{if and .Orgs .HasOrgsVisible}} +
    • +
        + {{range .Orgs}} + {{if (or .Visibility.IsPublic (and ($.SignedUser) (or .Visibility.IsLimited (and (.HasMemberWithUserID ctx $.SignedUserID) .Visibility.IsPrivate) ($.IsAdmin))))}} +
      • + + {{ctx.AvatarUtils.Avatar .}} + +
      • + {{end}} + {{end}} +
      +
    • + {{end}} + {{if .Badges}} +
    • +
        + {{range .Badges}} +
      • + {{.Description}} +
      • + {{end}} +
      +
    • + {{end}} + {{if and .IsSigned (ne .SignedUserID .ContextUser.ID)}} + {{if not .UserBlocking}} + + {{end}} +
    • + {{if not .UserBlocking}} + {{ctx.Locale.Tr "user.block.block.user"}} + {{else}} + {{ctx.Locale.Tr "user.block.unblock"}} + {{end}} +
    • + {{end}} +
    +
    +
    + +{{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 @@ +

    + {{ctx.Locale.Tr "actions.variables.management"}} +
    + +
    +

    +
    + {{if .Variables}} +
    + {{range .Variables}} +
    +
    + {{svg "octicon-pencil" 32}} +
    +
    +
    + {{.Name}} +
    +
    + {{.Data}} +
    +
    +
    + + {{ctx.Locale.Tr "settings.added_on" (DateUtils.AbsoluteShort .CreatedUnix)}} + + + +
    +
    + {{end}} +
    + {{else}} + {{ctx.Locale.Tr "actions.variables.none"}} + {{end}} +
    + +{{/** Edit variable dialog */}} + + 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}} +

    + {{ctx.Locale.Tr "auth.active_your_account"}} +

    +
    + {{template "base/alert" .}} + {{if .NeedVerifyLocalPassword}} +
    + + +
    +
    + +
    + + {{else}} +

    {{ctx.Locale.Tr "auth.has_unconfirmed_mail" .SignedUser.Name .SignedUser.Email}}

    +
    + {{ctx.Locale.Tr "auth.change_unconfirmed_mail_address"}} +
    + + +
    +
    +
    +
    + +
    + {{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" .}} +
    +
    +
    +

    + {{ctx.Locale.Tr "auth.active_your_account"}} +

    +
    + {{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}} +
    +
    + + +
    +{{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}} +

    + {{ctx.Locale.Tr "settings.change_password"}} +

    +
    +
    + {{.CsrfTokenHtml}} +
    + + +
    +
    + + +
    +
    + +
    +
    +
    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" .}} +

    + {{ctx.Locale.Tr "auth.login_userpass"}} +

    +
    +
    + {{.CsrfTokenHtml}} +
    + + +
    +
    + + +
    +
    + +
    + + +
    +
    + +
    + + + {{ctx.Locale.Tr "auth.forget_password"}} +
    + {{if .ShowRegistrationButton}} + + {{end}} +
    +
    +
    +
    +
    +
    +{{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}} +

    + {{ctx.Locale.Tr "auth.forgot_password_title"}} +

    +
    + {{template "base/alert" .}} + {{if .IsResetSent}} +

    {{ctx.Locale.Tr "auth.reset_password_mail_sent_prompt" .Email .ResetPwdCodeLives}}

    + {{else if .IsResetRequest}} +
    + + +
    +
    +
    + +
    + {{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" .}} +
    +
    +
    +

    + {{ctx.Locale.Tr "auth.authorize_title" .Application.Name}} +

    +
    + {{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}} + + + + + + + +
    +
    +
    +
    +
    +{{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}} +
    +
    +

    + {{ctx.Locale.Tr "auth.authorization_failed"}} +

    +

    {{.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" .}} + + +{{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"}} +

    +
    +

    {{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}} + +

    + {{ctx.Locale.Tr "auth.reset_password"}} +

    +
    + {{template "base/alert" .}} + {{if .user_email}} +
    + + +
    + {{end}} + {{if .IsResetForm}} +
    + + +
    + {{if not .user_signed_in}} +
    +
    + + +
    +
    + {{end}} + {{if .has_two_factor}} +

    + {{ctx.Locale.Tr "twofa"}} +

    +
    {{ctx.Locale.Tr "settings.twofa_is_enrolled"}}
    + {{if .scratch_code}} +
    + + +
    + + {{else}} +
    + + +
    + {{end}} + {{end}} +
    +
    + + {{if and .has_two_factor (not .scratch_code)}} + {{ctx.Locale.Tr "auth.use_scratch_code"}} + {{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 .LinkAccountMode}} + {{ctx.Locale.Tr "auth.oauth_signin_title"}} + {{else}} + {{ctx.Locale.Tr "auth.login_userpass"}} + {{end}} +

    +
    + {{if .EnablePasswordSignInForm}} +
    + {{.CsrfTokenHtml}} +
    + + +
    + {{if or (not .DisablePassword) .LinkAccountMode}} +
    + + + +
    + {{end}} + {{if not .LinkAccountMode}} +
    +
    + + +
    +
    + {{end}} + + {{template "user/auth/captcha" .}} + +
    + +
    +
    + {{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}} +
    +
    + {{if .EnablePasskeyAuth}} + {{template "user/auth/webauthn_error" .}} + + {{end}} + + {{if .ShowRegistrationButton}} +
    + {{ctx.Locale.Tr "auth.need_account"}} + {{ctx.Locale.Tr "auth.sign_up_now"}} +
    + {{end}} +
    +
    +{{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" .}} +
    +
    +
    + + {{ctx.Locale.Tr + + +
    + {{template "base/alert" .}} +

    + {{svg "fontawesome-openid"}} + OpenID +

    +
    +
    + {{.CsrfTokenHtml}} +
    + {{ctx.Locale.Tr "auth.openid_signin_desc"}} +
    +
    + + +
    +
    +
    + + +
    +
    +
    + +
    +
    +
    +
    + +
    + {{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 .LinkAccountMode}} + {{ctx.Locale.Tr "auth.oauth_signup_title"}} + {{else}} + {{ctx.Locale.Tr "sign_up"}} + {{end}} +

    +
    +
    + {{.CsrfTokenHtml}} + {{if or (not .LinkAccountMode) (and .LinkAccountMode .LinkAccountModeRegister)}} + {{template "base/alert" .}} + {{end}} + {{if .DisableRegistration}} +

    {{ctx.Locale.Tr "auth.disable_register_prompt"}}

    + {{else}} +
    + + +
    +
    + + +
    + + {{if not .DisablePassword}} +
    + + +
    +
    + + +
    + {{end}} + + {{template "user/auth/captcha" .}} + +
    + +
    + {{end}} + {{/* "oauth_container" contains not only "oauth2" methods, but also "OIDC" and "SSPI" methods */}} + {{/* TODO: it seems that "EnableSSPI" is only set in "sign-in" handlers, but it should use the same logic to control its display */}} + {{$showOAuth2Methods := or .OAuth2Providers .EnableOpenIDSignIn .EnableSSPI}} + {{if $showOAuth2Methods}} +
    {{ctx.Locale.Tr "sign_in_or"}}
    + {{template "user/auth/oauth_container" .}} + {{end}} +
    +
    +
    + +
    + {{if not .LinkAccountMode}} +
    +
    + {{ctx.Locale.Tr "auth.already_have_account"}} + {{ctx.Locale.Tr "auth.sign_in_now"}} +
    +
    + {{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" .}} +

    + {{ctx.Locale.Tr "auth.openid_connect_title"}} +

    +
    +

    + {{ctx.Locale.Tr "auth.openid_connect_desc"}} +

    +
    + {{.CsrfTokenHtml}} +
    + + +
    +
    + + +
    +
    + + +
    +
    + + + {{ctx.Locale.Tr "auth.forgot_password"}} +
    +
    +
    +
    +
    +{{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 @@ + +
    + + {{ctx.Locale.Tr "auth.openid_connect_title"}} + + {{if and .EnableOpenIDSignUp (not .AllowOnlyInternalRegistration)}} + + {{ctx.Locale.Tr "auth.openid_register_title"}} + + {{end}} +
    +
    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" .}} +

    + {{ctx.Locale.Tr "auth.openid_register_title"}} +

    +
    +

    + {{ctx.Locale.Tr "auth.openid_register_desc"}} +

    +
    + {{.CsrfTokenHtml}} +
    + + +
    +
    + + +
    + + {{template "user/auth/captcha" .}} + +
    + + +
    +
    + +
    +
    +
    +
    +
    +{{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}} +

    + {{ctx.Locale.Tr "twofa"}} +

    +
    + {{template "base/alert" .}} +
    + + +
    + +
    + + {{ctx.Locale.Tr "auth.use_scratch_code"}} +
    +
    +
    +
    +
    +
    +{{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}} +

    + {{ctx.Locale.Tr "twofa_scratch"}} +

    +
    + {{template "base/alert" .}} +
    + + +
    + +
    + +
    +
    +
    +
    +
    +
    +{{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" .}} +

    {{ctx.Locale.Tr "twofa"}}

    +
    + {{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_error"}}
    +
    +
    +
    {{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}} +
    +
    + + + +
    + {{if $.Labels}} + {{template "repo/issue/filter_item_label" dict "Labels" .Labels "QueryLink" $queryLinkWithFilter "SupportArchivedLabel" true}} + {{end}} + + {{/* at the moment there is no easy way to get poster candidates on this page, so only show a username input, search for what the end user enters */}} + {{if ne $.ViewType "created_by"}} + {{template "repo/issue/filter_item_user_fetch" dict + "QueryParamKey" "poster" + "QueryLink" $queryLinkWithFilter + "SelectedUsername" $.FilterPosterUsername + "TextFilterTitle" (ctx.Locale.Tr "repo.issues.filter_poster") + }} + {{end}} + + {{/* at the moment there is no easy way to get assignee candidates on this page, so only show a username input, search for what the end user enters */}} + {{if ne $.ViewType "assigned"}} + {{template "repo/issue/filter_item_user_fetch" dict + "QueryParamKey" "assignee" + "QueryLink" $queryLinkWithFilter + "SelectedUsername" $.FilterAssigneeUsername + "TextFilterTitle" (ctx.Locale.Tr "repo.issues.filter_assignee") + }} + {{end}} + + + +
    +
    + {{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}} +
  • +
    +

    + + {{.Repo.FullName}} + + {{svg "octicon-milestone" 16}} + {{.Name}} +

    +
    + {{.Completeness}}% + +
    +
    +
    +
    +
    + {{svg "octicon-issue-opened" 14}} + {{ctx.Locale.PrettyNumber .NumOpenIssues}} {{ctx.Locale.Tr "repo.issues.open_title"}} +
    +
    + {{svg "octicon-check" 14}} + {{ctx.Locale.PrettyNumber .NumClosedIssues}} {{ctx.Locale.Tr "repo.issues.closed_title"}} +
    + {{if .TotalTrackedTime}} +
    + {{svg "octicon-clock"}} + {{.TotalTrackedTime|Sec2Time}} +
    + {{end}} + {{if .UpdatedUnix}} +
    + {{svg "octicon-clock"}} + {{ctx.Locale.Tr "repo.milestones.update_ago" (DateUtils.TimeSince .UpdatedUnix)}} +
    + {{end}} +
    + {{if .IsClosed}} + {{$closedDate:= DateUtils.TimeSince .ClosedDateUnix}} + {{svg "octicon-clock" 14}} + {{ctx.Locale.Tr "repo.milestones.closed" $closedDate}} + {{else}} + {{if .DeadlineString}} + + {{svg "octicon-calendar" 14}} + {{DateUtils.AbsoluteShort (.DeadlineString|DateUtils.ParseLegacy)}} + + {{else}} + {{svg "octicon-calendar" 14}} + {{ctx.Locale.Tr "repo.milestones.no_due_date"}} + {{end}} + {{end}} +
    +
    + {{if and (or $.CanWriteIssues $.CanWritePulls) (not $.Repository.IsArchived)}} + + {{end}} +
    + {{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}} +
    + +
    +
    + {{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}} +
    +
    + {{if .Issue}} + {{template "shared/issueicon" .Issue}} + {{else}} + {{svg "octicon-repo" 16 "text grey"}} + {{end}} +
    + +
    + {{.Repository.FullName}} {{if .Issue}}#{{.Issue.Index}}{{end}} + {{if eq .Status 3}} + {{svg "octicon-pin" 13 "text blue tw-mt-0.5 tw-ml-1"}} + {{end}} +
    +
    + + {{if .Issue}} + {{.Issue.Title | ctx.RenderUtils.RenderIssueSimpleTitle}} + {{else}} + {{.Repository.FullName}} + {{end}} + +
    +
    +
    + {{if .Issue}} + {{DateUtils.TimeSince .Issue.UpdatedUnix}} + {{else}} + {{DateUtils.TimeSince .UpdatedUnix}} + {{end}} +
    +
    + {{if ne .Status 3}} +
    + {{$.CsrfTokenHtml}} + + + +
    + {{end}} + {{if or (eq .Status 1) (eq .Status 3)}} +
    + {{$.CsrfTokenHtml}} + + + + +
    + {{else if eq .Status 2}} +
    + {{$.CsrfTokenHtml}} + + + + +
    + {{end}} +
    +
    + {{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")}} +
    +

    + {{ctx.Locale.Tr "settings.password"}} +

    +
    + {{if and (not ($.UserDisabledFeatures.Contains "manage_credentials")) (or (.SignedUser.IsLocal) (.SignedUser.IsOAuth2))}} +
    + {{template "base/disable_form_autofill"}} + {{.CsrfTokenHtml}} + {{if .SignedUser.IsPasswordSet}} +
    + + +
    + {{end}} +
    + + +
    +
    + + +
    + +
    + + {{ctx.Locale.Tr "auth.forgot_password"}} +
    +
    + {{else}} +
    +

    {{ctx.Locale.Tr "settings.password_change_disabled"}}

    +
    + {{end}} +
    + + {{if not (and ($.UserDisabledFeatures.Contains "manage_credentials") (not $.EnableNotifyMail))}} +

    + {{ctx.Locale.Tr "settings.manage_emails"}} +

    +
    +
    + {{if $.EnableNotifyMail}} +
    +
    {{ctx.Locale.Tr "settings.email_desc"}}
    +
    + {{$.CsrfTokenHtml}} + +
    + + +
    +
    +
    + {{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}} + + {{if .CanBePrimary}} +
    + {{$.CsrfTokenHtml}} + + + +
    + {{end}} + {{end}} + {{if not .IsActivated}} +
    + {{$.CsrfTokenHtml}} + + + {{if $.ActivationsPending}} + + {{else}} + + {{end}} +
    + {{end}} +
    +
    + {{end}}{{/* range Emails */}} + {{end}}{{/* if manage_credentials */}} +
    +
    + {{end}} + + {{if not ($.UserDisabledFeatures.Contains "manage_credentials")}} +
    +
    + {{.CsrfTokenHtml}} +
    + + +
    + +
    + {{/* 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")}} +

    + {{ctx.Locale.Tr "settings.delete_account"}} +

    +
    +
    +

    {{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}} +
    + + +
    +
    + +
    +
    + +
    + {{end}} +
    + + + +{{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")}} +
    + + +

    + {{ctx.Locale.Tr "settings.manage_themes"}} +

    +
    +
    + {{.CsrfTokenHtml}} + +
    + + +
    +
    + +
    +
    +
    + + +

    + {{ctx.Locale.Tr "settings.language"}} +

    +
    +
    + {{.CsrfTokenHtml}} +
    + +
    +
    + +
    +
    +
    + + +

    + {{ctx.Locale.Tr "settings.hidden_comment_types"}} +

    +
    +

    + {{ctx.Locale.Tr "settings.hidden_comment_types_description"}} +

    +
    + {{.CsrfTokenHtml}} +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    + +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    + +
    +
    +
    +
    +{{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.manage_access_token"}} +

    +
    +
    +
    + {{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}} +
    +
    +
    + +
    +
    + {{end}} +
    +
    +
    +
    + {{ctx.Locale.Tr "settings.generate_new_token"}} +
    +
    + {{.CsrfTokenHtml}} +
    + + +
    +
    + + + +
    +
    + + {{ctx.Locale.Tr "settings.select_permissions"}} + +

    + {{ctx.Locale.Tr "settings.access_token_desc" (HTMLFormat `href="%s/api/swagger" target="_blank"` AppSubUrl) (`href="https://docs.gitea.com/development/oauth2-provider#scopes" target="_blank"`|SafeHTML)}} +

    +
    +
    +
    + +
    {{/* Fomantic ".ui.form .warning.message" is hidden by default, so put the warning message out of the form*/}} +
    + {{ctx.Locale.Tr "settings.at_least_one_permission"}} +
    +
    + + {{if .EnableOAuth2}} + {{template "user/settings/grants_oauth2" .}} + {{template "user/settings/applications_oauth2" .}} + {{end}} +
    + + + +{{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 @@ +

    + {{ctx.Locale.Tr "settings.manage_oauth2_applications"}} +

    + +{{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.edit_oauth2_application"}} +

    +
    +

    {{ctx.Locale.Tr "settings.oauth2_application_create_description"}}

    +
    +
    + {{.CsrfTokenHtml}} +
    + + +
    + {{if .ClientSecret}} +
    + + +
    + {{else}} +
    + + +
    + {{end}} +
    + +
    + {{.CsrfTokenHtml}} + {{ctx.Locale.Tr "settings.oauth2_regenerate_secret_hint"}} + +
    +
    +
    +
    +
    + {{.CsrfTokenHtml}} +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    + +
    +
    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)}} +
    + {{if $isBuiltin}} + {{ctx.Locale.Tr "locked"}} + {{else}} + + {{svg "octicon-pencil" 16 "tw-mr-1"}} + {{ctx.Locale.Tr "settings.oauth2_application_edit"}} + + + {{end}} +
    +
    + {{end}} +
    + + +
    + +
    +
    + {{ctx.Locale.Tr "settings.create_oauth2_application"}} +
    +
    + {{.CsrfTokenHtml}} +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    + +
    +
    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"}} +

    +
    +
    +
    + {{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)}} +
    +
    +
    + +
    +
    + {{end}} +
    + + +
    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 @@ +

    + {{ctx.Locale.Tr "settings.manage_gpg_keys"}} +
    + +
    +

    +
    +
    +
    + {{.CsrfTokenHtml}} + +
    + + +
    + {{if .Err_Signature}} +
    +

    {{ctx.Locale.Tr "settings.gpg_token_required"}}

    +
    +
    + + +
    +

    {{ctx.Locale.Tr "settings.gpg_token_help"}}

    +

    {{printf `echo "%s" | gpg -a --default-key %s --detach-sig` .TokenToSign .PaddedKeyID}}

    +
    +
    +
    + + +
    + {{end}} + + + +
    +
    +
    +
    +

    + {{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) (ne $.VerifyingID .KeyID)}} + {{ctx.Locale.Tr "settings.gpg_key_verify"}} + {{end}} +
    +
    + {{if and (not .Verified) (eq $.VerifyingID .KeyID)}} +
    +

    {{ctx.Locale.Tr "settings.gpg_token_required"}}

    +
    + {{$.CsrfTokenHtml}} + + + +
    + + +
    +

    {{ctx.Locale.Tr "settings.gpg_token_help"}}

    +

    {{printf `echo "%s" | gpg -a --default-key %s --detach-sig` $.TokenToSign .PaddedKeyID}}

    +
    +
    +
    +
    + + +
    + + + + {{ctx.Locale.Tr "settings.cancel"}} + +
    +
    + {{end}} + {{end}} +
    + +
    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.manage_ssh_principals"}} +
    + {{if not .DisableSSH}} + + {{else}} + + {{end}} +
    +

    +
    +
    +
    + {{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}} +
    +
    +
    + +
    +
    + {{end}} +
    +
    +
    + +
    +

    + {{ctx.Locale.Tr "settings.add_new_principal"}} +

    +
    +
    + {{.CsrfTokenHtml}} +
    + + +
    + + + +
    +
    +
    + + +{{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 @@ +

    + {{ctx.Locale.Tr "settings.manage_ssh_keys"}} +
    + +
    +

    +
    +
    +
    + {{.CsrfTokenHtml}} +
    + + +
    +
    + + +
    + + + +
    +
    +
    +
    +

    + {{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) (ne $.VerifyingFingerprint .Fingerprint)}} + {{ctx.Locale.Tr "settings.ssh_key_verify"}} + {{end}} +
    +
    + {{if and (not .Verified) (eq $.VerifyingFingerprint .Fingerprint)}} +
    +

    {{ctx.Locale.Tr "settings.ssh_token_required"}}

    +
    + {{$.CsrfTokenHtml}} + + + +
    + + +
    +

    {{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.cancel"}} + +
    +
    + {{end}} + {{end}} +
    + +
    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")}} +
    +

    + {{ctx.Locale.Tr "settings.orgs"}} + {{if .SignedUser.CanCreateOrganization}} + + {{end}} +

    +
    + {{if .Orgs}} +
    + {{range .Orgs}} +
    +
    + {{ctx.AvatarUtils.Avatar . 28 "mini"}} +
    +
    +
    {{template "shared/user/name" .}}
    +
    + {{.Description}} +
    +
    +
    +
    + {{$.CsrfTokenHtml}} + +
    +
    +
    + {{end}} +
    + {{template "base/paginate" .}} + {{else}} + {{ctx.Locale.Tr "settings.orgs_none"}} + {{end}} +
    +
    + + + +{{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" .}} + +

    + {{ctx.Locale.Tr "packages.owner.settings.chef.title"}} +

    +
    +
    +
    + +
    +
    + {{.CsrfTokenHtml}} + +
    +
    + +
    +
    +
    +
    +{{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.public_profile"}} +

    +
    +

    {{ctx.Locale.Tr "settings.profile_desc"}}

    +
    + {{.CsrfTokenHtml}} +
    + + + {{if or (not .SignedUser.IsLocal) ($.UserDisabledFeatures.Contains "change_username") .IsReverseProxy}} +

    {{ctx.Locale.Tr "settings.password_username_disabled"}}

    + {{end}} +
    +
    + + + {{if ($.UserDisabledFeatures.Contains "change_full_name")}} +

    {{ctx.Locale.Tr "settings.password_full_name_disabled"}}

    + {{end}} +
    +
    + +

    {{.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 "settings.avatar"}} +

    +
    +
    + {{.CsrfTokenHtml}} + {{if not .DisableGravatar}} +
    +
    + + +
    +
    +
    + + +
    + {{end}} + +
    +
    + + +
    +
    + +
    + + +
    + +
    +
    {{ctx.Locale.Tr "settings.cropper_prompt"}}
    +
    +
    + +
    + + +
    +
    +
    +
    +{{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")}} +
    +

    + {{ctx.Locale.Tr "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}} + + + {{end}} + {{if $.allowDelete}} + + + {{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}} +
    +
    + + + +{{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"}} + {{if .OrderedOAuth2Names}} +
    + +
    + {{end}} +

    + +
    +
    +
    + {{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}} +
    +
    + +
    +
    + {{end}} +
    + + +
    +{{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.manage_openid"}} +

    +
    +
    +
    + {{ctx.Locale.Tr "settings.openid_desc"}} +
    + {{range .OpenIDs}} +
    +
    + {{svg "fontawesome-openid" 20}} +
    +
    +
    {{.URI}}
    +
    +
    +
    + {{$.CsrfTokenHtml}} + + {{if .Show}} + + {{else}} + + {{end}} +
    + +
    +
    + {{end}} +
    +
    +
    +
    + {{.CsrfTokenHtml}} +
    + + +
    + +
    + + +
    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"}} +

    +
    +

    {{ctx.Locale.Tr "settings.twofa_desc"}}

    + {{if .TOTPEnrolled}} +

    {{ctx.Locale.Tr "settings.twofa_is_enrolled"}}

    +
    + {{.CsrfTokenHtml}} +

    {{ctx.Locale.Tr "settings.regenerate_scratch_token_desc"}}

    + +
    +
    + {{.CsrfTokenHtml}} +

    {{ctx.Locale.Tr "settings.twofa_disable_note"}}

    + +
    + {{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}} + + +
    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.twofa_enroll"}} +

    +
    +

    {{ctx.Locale.Tr "settings.scan_this_image"}}

    + {{.TwofaSecret}} +

    {{ctx.Locale.Tr "settings.or_enter_secret" .TwofaSecret}}

    +

    {{ctx.Locale.Tr "settings.then_enter_passcode"}}

    +
    + {{.CsrfTokenHtml}} +
    + + +
    +
    + + +
    +
    +
    +
    + +{{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"}}

    +
    +

    {{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)}} +
    +
    +
    + +
    +
    + {{end}} +
    +
    +
    + + +
    + +
    + +
    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 @@ +

    + {{.CustomHeaderTitle}} + +

    +
    + {{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}}