splent-feature-github 0.4.0__tar.gz → 0.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. {splent_feature_github-0.4.0/src/splent_feature_github.egg-info → splent_feature_github-0.5.0}/PKG-INFO +2 -1
  2. {splent_feature_github-0.4.0 → splent_feature_github-0.5.0}/pyproject.toml +3 -31
  3. {splent_feature_github-0.4.0 → splent_feature_github-0.5.0/src/splent_feature_github.egg-info}/PKG-INFO +2 -1
  4. {splent_feature_github-0.4.0 → splent_feature_github-0.5.0}/src/splent_feature_github.egg-info/SOURCES.txt +2 -0
  5. splent_feature_github-0.5.0/src/splent_feature_github.egg-info/requires.txt +1 -0
  6. {splent_feature_github-0.4.0 → splent_feature_github-0.5.0}/src/splent_io/splent_feature_github/__init__.py +0 -3
  7. splent_feature_github-0.5.0/src/splent_io/splent_feature_github/config.py +15 -0
  8. {splent_feature_github-0.4.0 → splent_feature_github-0.5.0}/src/splent_io/splent_feature_github/hooks.py +2 -2
  9. {splent_feature_github-0.4.0 → splent_feature_github-0.5.0}/src/splent_io/splent_feature_github/templates/hooks/github_login_button.html +1 -1
  10. splent_feature_github-0.5.0/src/splent_io/splent_feature_github/templates/hooks/github_profile_row.html +36 -0
  11. splent_feature_github-0.5.0/src/splent_io/splent_feature_github/translations/es/LC_MESSAGES/messages.mo +0 -0
  12. {splent_feature_github-0.4.0 → splent_feature_github-0.5.0}/src/splent_io/splent_feature_github/translations/es/LC_MESSAGES/messages.po +10 -4
  13. splent_feature_github-0.5.0/src/splent_io/splent_feature_github/translations/messages.pot +40 -0
  14. splent_feature_github-0.4.0/src/splent_io/splent_feature_github/config.py +0 -27
  15. splent_feature_github-0.4.0/src/splent_io/splent_feature_github/templates/hooks/github_profile_row.html +0 -43
  16. splent_feature_github-0.4.0/src/splent_io/splent_feature_github/translations/es/LC_MESSAGES/messages.mo +0 -0
  17. {splent_feature_github-0.4.0 → splent_feature_github-0.5.0}/COPYING +0 -0
  18. {splent_feature_github-0.4.0 → splent_feature_github-0.5.0}/COPYING.LESSER +0 -0
  19. {splent_feature_github-0.4.0 → splent_feature_github-0.5.0}/MANIFEST.in +0 -0
  20. {splent_feature_github-0.4.0 → splent_feature_github-0.5.0}/README.md +0 -0
  21. {splent_feature_github-0.4.0 → splent_feature_github-0.5.0}/setup.cfg +0 -0
  22. {splent_feature_github-0.4.0 → splent_feature_github-0.5.0}/src/splent_feature_github.egg-info/dependency_links.txt +0 -0
  23. {splent_feature_github-0.4.0 → splent_feature_github-0.5.0}/src/splent_feature_github.egg-info/top_level.txt +0 -0
  24. {splent_feature_github-0.4.0 → splent_feature_github-0.5.0}/src/splent_io/splent_feature_github/assets/css/github.css +0 -0
  25. {splent_feature_github-0.4.0 → splent_feature_github-0.5.0}/src/splent_io/splent_feature_github/migrations/alembic.ini +0 -0
  26. {splent_feature_github-0.4.0 → splent_feature_github-0.5.0}/src/splent_io/splent_feature_github/migrations/env.py +0 -0
  27. {splent_feature_github-0.4.0 → splent_feature_github-0.5.0}/src/splent_io/splent_feature_github/migrations/script.py.mako +0 -0
  28. {splent_feature_github-0.4.0 → splent_feature_github-0.5.0}/src/splent_io/splent_feature_github/migrations/versions/7ace6050fb3f_splent_feature_github.py +0 -0
  29. {splent_feature_github-0.4.0 → splent_feature_github-0.5.0}/src/splent_io/splent_feature_github/migrations/versions/github0002_into_ext_identity.py +0 -0
  30. {splent_feature_github-0.4.0 → splent_feature_github-0.5.0}/src/splent_io/splent_feature_github/models.py +0 -0
  31. {splent_feature_github-0.4.0 → splent_feature_github-0.5.0}/src/splent_io/splent_feature_github/routes.py +0 -0
  32. {splent_feature_github-0.4.0 → splent_feature_github-0.5.0}/src/splent_io/splent_feature_github/services.py +0 -0
@@ -1,11 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: splent_feature_github
3
- Version: 0.4.0
3
+ Version: 0.5.0
4
4
  License-Expression: LGPL-3.0-or-later
5
5
  Requires-Python: >=3.13
6
6
  Description-Content-Type: text/markdown
7
7
  License-File: COPYING
8
8
  License-File: COPYING.LESSER
9
+ Requires-Dist: splent_framework>=1.30.0
9
10
  Dynamic: license-file
10
11
 
11
12
  # splent_feature_github
@@ -4,14 +4,14 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "splent_feature_github"
7
- version = "0.4.0"
7
+ version = "0.5.0"
8
8
  readme = "README.md"
9
9
  requires-python = ">=3.13"
10
10
  license = "LGPL-3.0-or-later"
11
11
  license-files = ["COPYING", "COPYING.LESSER"]
12
12
 
13
13
  dependencies = [
14
-
14
+ "splent_framework>=1.30.0",
15
15
  ]
16
16
 
17
17
  [tool.setuptools]
@@ -25,16 +25,9 @@ exclude = ["*.tests", "*.tests.*"]
25
25
  [tool.splent]
26
26
  cli_version = "1.25.1"
27
27
 
28
- # ── Feature Contract (auto-generated) ────────────────────────────────────────
29
- # Run `splent feature:contract --write` to refresh it from the source.
30
- # A refresh keeps description, category, tags, env,
31
- # requires.features_manual (dependencies invisible to static analysis),
32
- # requires.features_optional (what the scan infers is added to it)
33
- # and provides.routes_manual (routes built from configuration at
34
- # registration time, which have no literal path to find in source).
35
28
  [tool.splent.contract]
36
29
  description = "Sign in and sign up with GitHub, and connect a GitHub account to an account from its profile"
37
- archetype = "light"
30
+ archetype = "full"
38
31
 
39
32
  [tool.splent.contract.provides]
40
33
  routes = ["/account/connect/github", "/github/authorize", "/github/login"]
@@ -61,20 +54,6 @@ models = []
61
54
  hooks = ["auth.login.providers", "layout.head.css", "profile.edit.sections", "signup.providers"]
62
55
  routes = true
63
56
 
64
- # ── Configuration ─────────────────────────────────────────────────────────────
65
- # What this feature reads from the environment, and what it falls back to.
66
- # One line per variable, the value being the default.
67
- #
68
- # This is where a default belongs, whether or not the feature ships a
69
- # container: docker/.env.example only exists for features that bring a
70
- # service, and a setting is not infrastructure. A product overrides any of
71
- # these in its own [tool.splent.config]; it never copies the ones it agrees
72
- # with. `splent product:env --merge` and `splent product:build` both read
73
- # this, so dev and deploy see the same values.
74
- #
75
- # Types map to what an env file can hold: true becomes "true", a list
76
- # becomes a comma separated string. Keys ending in _HOST_PORT get the
77
- # product's port offset, so two products can run at once.
78
57
  [tool.splent.config]
79
58
  # The OAuth app registered at https://github.com/settings/developers.
80
59
  # Without both values GitHub sign-in is off: the app logs a warning at start,
@@ -86,13 +65,6 @@ GITHUB_CLIENT_SECRET = ""
86
65
  # address, which then has to be confirmed by mail.
87
66
  GITHUB_SCOPE = "user:email"
88
67
 
89
- # ── Parameters ────────────────────────────────────────────────────────────────
90
- # The type of each key above, which product:validate checks a product's
91
- # value against and the framework (1.22.0 and later) resolves at boot:
92
- # default < product < environment. An older framework ignores it. deploy:
93
- # the deployment's .env decides it; derivation: the product decides it, and
94
- # an environment that changes it is drift. A secret never goes in a
95
- # committed file: product:validate refuses it in the product's pyproject.
96
68
  [tool.splent.config_schema]
97
69
  GITHUB_CLIENT_ID = { type = "str", bind = "deploy", help = "The client ID of the OAuth app registered at https://github.com/settings/developers." }
98
70
  GITHUB_CLIENT_SECRET = { type = "secret", help = "The client secret of that OAuth app." }
@@ -1,11 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: splent_feature_github
3
- Version: 0.4.0
3
+ Version: 0.5.0
4
4
  License-Expression: LGPL-3.0-or-later
5
5
  Requires-Python: >=3.13
6
6
  Description-Content-Type: text/markdown
7
7
  License-File: COPYING
8
8
  License-File: COPYING.LESSER
9
+ Requires-Dist: splent_framework>=1.30.0
9
10
  Dynamic: license-file
10
11
 
11
12
  # splent_feature_github
@@ -6,6 +6,7 @@ pyproject.toml
6
6
  src/splent_feature_github.egg-info/PKG-INFO
7
7
  src/splent_feature_github.egg-info/SOURCES.txt
8
8
  src/splent_feature_github.egg-info/dependency_links.txt
9
+ src/splent_feature_github.egg-info/requires.txt
9
10
  src/splent_feature_github.egg-info/top_level.txt
10
11
  src/splent_io/splent_feature_github/__init__.py
11
12
  src/splent_io/splent_feature_github/config.py
@@ -21,5 +22,6 @@ src/splent_io/splent_feature_github/migrations/versions/7ace6050fb3f_splent_feat
21
22
  src/splent_io/splent_feature_github/migrations/versions/github0002_into_ext_identity.py
22
23
  src/splent_io/splent_feature_github/templates/hooks/github_login_button.html
23
24
  src/splent_io/splent_feature_github/templates/hooks/github_profile_row.html
25
+ src/splent_io/splent_feature_github/translations/messages.pot
24
26
  src/splent_io/splent_feature_github/translations/es/LC_MESSAGES/messages.mo
25
27
  src/splent_io/splent_feature_github/translations/es/LC_MESSAGES/messages.po
@@ -0,0 +1 @@
1
+ splent_framework>=1.30.0
@@ -7,9 +7,6 @@ github_bp = create_blueprint(__name__)
7
7
 
8
8
 
9
9
  def init_feature(app):
10
- from splent_io.splent_feature_github.config import inject_config
11
-
12
- inject_config(app)
13
10
  # GitHub on identities' registry: identities runs the sign-in, the
14
11
  # callback, the connect and the opening of new accounts.
15
12
  register_github(app)
@@ -0,0 +1,15 @@
1
+ """github feature configuration.
2
+
3
+ The OAuth app registered at https://github.com/settings/developers.
4
+ Without both values GitHub sign-in is off: the app logs a warning at start,
5
+ and whoever tries is told it is not available.
6
+
7
+ [tool.splent.config_schema] in pyproject.toml declares every key, the
8
+ secret among them, and the framework resolves each one into app.config,
9
+ typed, right after inject_config: the default, the product's
10
+ [tool.splent.config], then the environment.
11
+ """
12
+
13
+
14
+ def inject_config(app):
15
+ """Nothing to derive: the framework resolves every declared key."""
@@ -25,7 +25,7 @@ ORDER = 10
25
25
 
26
26
 
27
27
  def github_login_button():
28
- from splent_io.splent_feature_auth.routes import safe_next_url
28
+ from splent_framework.urls import safe_next_url
29
29
 
30
30
  # The login and the sign-up both carry where the reader was heading, in
31
31
  # the query string and, after a failed post, in their form.
@@ -52,7 +52,7 @@ def github_profile_row():
52
52
 
53
53
  def github_stylesheet():
54
54
  href = url_for("github.assets", subfolder="css", filename="github.css")
55
- return Markup(f'<link rel="stylesheet" href="{href}">')
55
+ return Markup('<link rel="stylesheet" href="{}">').format(href)
56
56
 
57
57
 
58
58
  register_template_hook("auth.login.providers", github_login_button, order=ORDER)
@@ -3,5 +3,5 @@
3
3
  GitHub's in any shell. #}
4
4
  <a href="{{ url_for('github.login', next=next_url) if next_url else url_for('github.login') }}"
5
5
  class="btn btn-github d-flex align-items-center">
6
- GitHub
6
+ {{ _("Continue with GitHub") }}
7
7
  </a>
@@ -0,0 +1,36 @@
1
+ {# A section of profile's edit page (profile.edit.sections), below the
2
+ profile form. The login links to the account on GitHub. The disconnect
3
+ button opens identities' modal, which posts the provider and account id
4
+ it carries; for the only way the account signs in, a link to set a
5
+ password comes first. The colours are in assets/css/github.css, and the
6
+ mark is simple-icons' (icon(set='brands')), drawn in currentColor. #}
7
+ {% if identity %}
8
+ <div class="mb-4 profile-identity" data-identity="github">
9
+ <label class="form-label fw-semibold">GitHub</label>
10
+ <div class="form-control d-flex align-items-center gap-2 github-identity__field">
11
+ {{ icon('github', set='brands', class_='github-mark') }}
12
+ {% if github_url %}
13
+ <a class="github-identity__value" href="{{ github_url }}" target="_blank" rel="noopener noreferrer">{{ identity.provider_username }}</a>
14
+ {% else %}
15
+ <span class="github-identity__value">{{ identity.provider_id }}</span>
16
+ {% endif %}
17
+ {% if can_disconnect %}
18
+ <button type="button" class="btn btn-sm p-0 github-identity__disconnect" title="{{ _('Disconnect') }}" aria-label="{{ _('Disconnect') }}" data-bs-toggle="modal" data-bs-target="#disconnectModal" data-provider="github" data-provider-id="{{ identity.provider_id }}">
19
+ {{ icon('x') }}
20
+ </button>
21
+ {% else %}
22
+ {# The only way the account signs in: a password of its own comes
23
+ first, on My account, and then it can be disconnected. #}
24
+ <a class="ms-auto small github-identity__set-password" href="{{ url_for('auth.my_account', _anchor='password') }}" data-set-password-first>{{ _('Set a password to disconnect it') }}</a>
25
+ {% endif %}
26
+ </div>
27
+ </div>
28
+ {% else %}
29
+ <div class="mb-4 profile-identity" data-identity="github">
30
+ <label class="form-label fw-semibold">GitHub</label>
31
+ <a href="{{ url_for('github.connect_github') }}" class="form-control text-decoration-none d-flex align-items-center gap-2 github-identity__field github-identity__connect">
32
+ {{ icon('github', set='brands', class_='github-mark') }}
33
+ <span>{{ _('Connect GitHub') }}</span>
34
+ </a>
35
+ </div>
36
+ {% endif %}
@@ -7,7 +7,7 @@ msgid ""
7
7
  msgstr ""
8
8
  "Project-Id-Version: PROJECT VERSION\n"
9
9
  "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
10
- "POT-Creation-Date: 2026-10-23 14:28+0000\n"
10
+ "POT-Creation-Date: 2026-10-31 02:14+0000\n"
11
11
  "PO-Revision-Date: 2026-10-21 00:18+0200\n"
12
12
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
13
  "Language: es\n"
@@ -18,18 +18,24 @@ msgstr ""
18
18
  "Content-Transfer-Encoding: 8bit\n"
19
19
  "Generated-By: Babel 2.18.0\n"
20
20
 
21
- #: src/splent_io/splent_feature_github/services.py:50
21
+ #: src/splent_io/splent_feature_github/services.py:53
22
22
  #, python-format
23
23
  msgid "%(provider)s did not say who you are. Please try again."
24
24
  msgstr "%(provider)s no dijo quién eres. Inténtalo de nuevo."
25
25
 
26
+ #: src/splent_io/splent_feature_github/templates/hooks/github_login_button.html:6
27
+ msgid "Continue with GitHub"
28
+ msgstr "Continuar con GitHub"
29
+
26
30
  #: src/splent_io/splent_feature_github/templates/hooks/github_profile_row.html:18
27
31
  msgid "Disconnect"
28
32
  msgstr "Desconectar"
29
33
 
34
+ #: src/splent_io/splent_feature_github/templates/hooks/github_profile_row.html:24
35
+ msgid "Set a password to disconnect it"
36
+ msgstr "Establece una contraseña para desconectarla"
37
+
30
38
  #: src/splent_io/splent_feature_github/templates/hooks/github_profile_row.html:33
31
39
  msgid "Connect GitHub"
32
40
  msgstr "Conectar GitHub"
33
41
 
34
- msgid "Set a password to disconnect it"
35
- msgstr "Establece una contraseña para desconectarla"
@@ -0,0 +1,40 @@
1
+ # Translations template for PROJECT.
2
+ # Copyright (C) 2026 ORGANIZATION
3
+ # This file is distributed under the same license as the PROJECT project.
4
+ # FIRST AUTHOR <EMAIL@ADDRESS>, 2026.
5
+ #
6
+ #, fuzzy
7
+ msgid ""
8
+ msgstr ""
9
+ "Project-Id-Version: PROJECT VERSION\n"
10
+ "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
11
+ "POT-Creation-Date: 2026-10-31 02:14+0000\n"
12
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
+ "Language-Team: LANGUAGE <LL@li.org>\n"
15
+ "MIME-Version: 1.0\n"
16
+ "Content-Type: text/plain; charset=utf-8\n"
17
+ "Content-Transfer-Encoding: 8bit\n"
18
+ "Generated-By: Babel 2.18.0\n"
19
+
20
+ #: src/splent_io/splent_feature_github/services.py:53
21
+ #, python-format
22
+ msgid "%(provider)s did not say who you are. Please try again."
23
+ msgstr ""
24
+
25
+ #: src/splent_io/splent_feature_github/templates/hooks/github_login_button.html:6
26
+ msgid "Continue with GitHub"
27
+ msgstr ""
28
+
29
+ #: src/splent_io/splent_feature_github/templates/hooks/github_profile_row.html:18
30
+ msgid "Disconnect"
31
+ msgstr ""
32
+
33
+ #: src/splent_io/splent_feature_github/templates/hooks/github_profile_row.html:24
34
+ msgid "Set a password to disconnect it"
35
+ msgstr ""
36
+
37
+ #: src/splent_io/splent_feature_github/templates/hooks/github_profile_row.html:33
38
+ msgid "Connect GitHub"
39
+ msgstr ""
40
+
@@ -1,27 +0,0 @@
1
- """
2
- github feature configuration.
3
-
4
- The OAuth app registered at https://github.com/settings/developers.
5
- Without both values GitHub sign-in is off: the app logs a warning at start,
6
- and whoever tries is told it is not available.
7
-
8
- [tool.splent.config_schema] in pyproject.toml declares each one's type, the
9
- secret among them. A framework that reads it (1.22.0 and later) resolves
10
- them itself right after inject_config, and the product's value reaches
11
- app.config as written, so services.py reads the scope with its default. An
12
- older one leaves them to this module.
13
- """
14
-
15
- import os
16
-
17
- from splent_io.splent_feature_github.services import DEFAULT_SCOPE
18
-
19
-
20
- def inject_config(app):
21
- app.config.update(
22
- {
23
- "GITHUB_CLIENT_ID": os.getenv("GITHUB_CLIENT_ID", ""),
24
- "GITHUB_CLIENT_SECRET": os.getenv("GITHUB_CLIENT_SECRET", ""),
25
- "GITHUB_SCOPE": os.getenv("GITHUB_SCOPE", "").strip() or DEFAULT_SCOPE,
26
- }
27
- )
@@ -1,43 +0,0 @@
1
- {# A section of profile's edit page (profile.edit.sections), below the
2
- profile form. The login links to the account on GitHub. The disconnect
3
- button opens identities' modal, which posts the provider and account id
4
- it carries; for the only way the account signs in, a link to set a
5
- password comes first. The colours are in assets/css/github.css, and the
6
- mark is drawn in currentColor. #}
7
- {% if identity %}
8
- <div class="mb-4 profile-identity" data-identity="github">
9
- <label class="form-label fw-semibold">GitHub</label>
10
- <div class="form-control d-flex align-items-center gap-2 github-identity__field">
11
- <svg class="github-mark" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
12
- <path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v 3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/>
13
- </svg>
14
- {% if github_url %}
15
- <a class="github-identity__value" href="{{ github_url }}" target="_blank" rel="noopener noreferrer">{{ identity.provider_username }}</a>
16
- {% else %}
17
- <span class="github-identity__value">{{ identity.provider_id }}</span>
18
- {% endif %}
19
- {% if can_disconnect %}
20
- <button type="button" class="btn btn-sm p-0 github-identity__disconnect" title="{{ _('Disconnect') }}" aria-label="{{ _('Disconnect') }}" data-bs-toggle="modal" data-bs-target="#disconnectModal" data-provider="github" data-provider-id="{{ identity.provider_id }}">
21
- <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
22
- <line x1="18" y1="6" x2="6" y2="18"></line>
23
- <line x1="6" y1="6" x2="18" y2="18"></line>
24
- </svg>
25
- </button>
26
- {% else %}
27
- {# The only way the account signs in: a password of its own comes
28
- first, on My account, and then it can be disconnected. #}
29
- <a class="ms-auto small github-identity__set-password" href="{{ url_for('auth.my_account', _anchor='password') }}" data-set-password-first>{{ _('Set a password to disconnect it') }}</a>
30
- {% endif %}
31
- </div>
32
- </div>
33
- {% else %}
34
- <div class="mb-4 profile-identity" data-identity="github">
35
- <label class="form-label fw-semibold">GitHub</label>
36
- <a href="{{ url_for('github.connect_github') }}" class="form-control text-decoration-none d-flex align-items-center gap-2 github-identity__field github-identity__connect">
37
- <svg class="github-mark" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
38
- <path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v 3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/>
39
- </svg>
40
- <span>{{ _('Connect GitHub') }}</span>
41
- </a>
42
- </div>
43
- {% endif %}