forked from Hostea/dashboard
Compare commits
11 Commits
Author | SHA1 | Date |
---|---|---|
Loïc Dachary | eaff09efd4 | |
Loïc Dachary | d07a644552 | |
Loïc Dachary | 93c38fc1f9 | |
Loïc Dachary | 788e025b98 | |
Loïc Dachary | 1c165fcea3 | |
Aravinth Manivannan | 2e36a186ee | |
Loïc Dachary | ad925cddfc | |
Loïc Dachary | 2725b9b1f6 | |
Loïc Dachary | 0f1003dbe8 | |
Aravinth Manivannan | 187d22118f | |
Hostea dashboard | 9b9fb8362d |
|
@ -3,5 +3,5 @@ export db=""
|
|||
export STRIPE_SECRET_KEY=""
|
||||
export STRIPE_PUBLIC_KEY=""
|
||||
export HOSTEA_INFRA_HOSTEA_REPO_REMOTE="ssh://git@localhost:22/hostea/fleet.git"
|
||||
export HOSTEA_META_GITEA_INSTANCE="http://localhost:3000"
|
||||
export HOSTEA_META_FORGEJO_INSTANCE="http://localhost:3000"
|
||||
export HOSTEA_INFRA_HOSTEA_REPO_SSH_KEY="$(realpath ./tests/fleet-deploy-key)"
|
||||
|
|
|
@ -4,8 +4,8 @@ pipeline:
|
|||
environment:
|
||||
- DATABSE_URL=postgres://postgres:password@database:5432/postgres
|
||||
- EMAIL_URL=smtp://admin:password@smtp:10025
|
||||
- HOSTEA_INFRA_HOSTEA_REPO_REMOTE=ssh://git@gitea:22/hostea/
|
||||
- HOSTEA_META_GITEA_INSTANCE=http://gitea:3000
|
||||
- HOSTEA_INFRA_HOSTEA_REPO_REMOTE=ssh://git@forgejo:22/hostea/
|
||||
- HOSTEA_META_FORGEJO_INSTANCE=http://forgejo:3000
|
||||
commands:
|
||||
- export HOSTEA_INFRA_HOSTEA_REPO_SSH_KEY="$(realpath ./tests/fleet-deploy-key)"
|
||||
- pip install virtualenv
|
||||
|
@ -21,9 +21,9 @@ services:
|
|||
environment:
|
||||
- POSTGRES_PASSWORD=password
|
||||
|
||||
gitea:
|
||||
image: gitea/gitea:1.16.5
|
||||
container_name: hostea-dash-gitea
|
||||
forgejo:
|
||||
image: codeberg.org/forgejo/forgejo:1.18.0-1
|
||||
container_name: hostea-dash-forgejo
|
||||
|
||||
smtp:
|
||||
image: maildev/maildev:latest
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
FROM python
|
||||
|
||||
LABEL org.opencontainers.image.source https://gitea.hostea.org/Hostea/dashboard
|
||||
LABEL org.opencontainers.image.source https://forgejo.hostea.org/Hostea/dashboard
|
||||
|
||||
RUN useradd -ms /bin/bash -u 1001 hostea
|
||||
RUN apt-get update && apt-get install -y ca-certificates git
|
||||
|
|
|
@ -6,13 +6,13 @@
|
|||
<main class="auth__main">
|
||||
<section class="main">
|
||||
<div class="title">
|
||||
<h1><a href="https://gitea.io">Gitea</a> hosting and <a href="/gitea-clinic/">service</a></h1>
|
||||
<h1><a href="https://forgejo.org">Forgejo</a> hosting and <a href="/forgejo-clinic/">service</a></h1>
|
||||
<p class="welcome">
|
||||
A free forge ecosystem for free developers.
|
||||
</p>
|
||||
<ul class="index-banner__features-list">
|
||||
<li class="index-banner__features">Dedicated <a href="https://hosteadashboard.gna.org/register/">Gitea hosting</a> and <a href="https://woodpecker-ci.org/">Woodpecker CI</a> from 10€/month</li>
|
||||
<li class="index-banner__features">Clinic to <a href="https://gna.org/gitea-clinic/">heal sick Gitea</a> instances</li>
|
||||
<li class="index-banner__features">Dedicated <a href="https://hosteadashboard.gna.org/register/">Forgejo hosting</a> and <a href="https://woodpecker-ci.org/">Woodpecker CI</a> from 10€/month</li>
|
||||
<li class="index-banner__features">Clinic to <a href="https://gna.org/forgejo-clinic/">heal sick Forgejo</a> instances</li>
|
||||
<li class="index-banner__features">100% <a href="https://www.gnu.org/philosophy/free-sw.html">Free Software</a></li>
|
||||
<li class="index-banner__features">Radically <a href="https://forum.gna.org/t/about-governance-and-decisions-in-hostea/55">Transparent</a></li>
|
||||
<li class="index-banner__features">Run by a <a href="https://forum.gna.org/t/about-governance-and-decisions-in-hostea/55">horizontal collective</a></li>
|
||||
|
|
|
@ -59,7 +59,7 @@ class Command(BaseCommand):
|
|||
sender = settings.DEFAULT_FROM_EMAIL
|
||||
|
||||
send_mail(
|
||||
subject="[Gna!] Payment receipt your Gna! VM",
|
||||
subject="[Gna!] Payment receipt for your Gna! VM",
|
||||
message=body,
|
||||
from_email=f"No reply Gna!<{sender}>", # TODO read from settings.py
|
||||
recipient_list=[email],
|
||||
|
|
|
@ -95,7 +95,7 @@ class BillingTest(TestCase):
|
|||
# sent when the invoice is generated and one after payment is made
|
||||
#
|
||||
# So we are first checking for the last email that was sent(receipt)
|
||||
# and then the Gitea instance credentials notification followed by the
|
||||
# and then the Forgejo instance credentials notification followed by the
|
||||
# invoice generation email.
|
||||
receipt_mail = mail.outbox.pop()
|
||||
print(receipt_mail.body)
|
||||
|
|
|
@ -128,7 +128,7 @@ def payment_success(request, payment_public_id):
|
|||
sender = settings.DEFAULT_FROM_EMAIL
|
||||
|
||||
send_mail(
|
||||
subject="[Gna!] Payment receipt your Gna! VM",
|
||||
subject="[Gna!] Payment receipt for your Gna! VM",
|
||||
message=body,
|
||||
from_email=f"No reply Gna!<{sender}>", # TODO read from settings.py
|
||||
recipient_list=[email],
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
</ul>
|
||||
|
||||
<p>Created On: {{ instance.created_at }}</p>
|
||||
<p><a href="{{gitea_uri}}">Gitea Instance</a>|<a href="{{woodpecker}}">Woodpecker CI</a></p>
|
||||
<p><a href="{{forgejo_uri}}">Forgejo Instance</a>|<a href="{{woodpecker}}">Woodpecker CI</a></p>
|
||||
|
||||
<form
|
||||
action="{% url 'dash.instances.delete' name=instance.name %}"
|
||||
|
|
|
@ -30,7 +30,7 @@ from payments import get_payment_model, RedirectNeeded, PaymentStatus
|
|||
from accounts.tests import login_util, register_util
|
||||
|
||||
from .models import InstanceConfiguration, Instance
|
||||
from .utils import create_instance, VmErrors, VmException
|
||||
from .utils import create_instance, sanitize_vm_name, VmErrors, VmException
|
||||
|
||||
|
||||
def create_configurations(t: TestCase):
|
||||
|
@ -171,7 +171,7 @@ class InstancesConfig(TestCase):
|
|||
"""
|
||||
Expects InstancesConfig titled "s1-2", "s1-4" and "s1-8"
|
||||
|
||||
ref: https://gitea.gna.org/Hostea/july-mvp/issues/10#issuecomment-639
|
||||
ref: https://forgejo.gna.org/Hostea/july-mvp/issues/10#issuecomment-639
|
||||
"""
|
||||
self.assertEqual(
|
||||
InstanceConfiguration.objects.filter(
|
||||
|
@ -198,11 +198,21 @@ class CreateInstance(TestCase):
|
|||
register_util(t=self, username="createinstance_user")
|
||||
create_configurations(t=self)
|
||||
|
||||
|
||||
def test_sanitize_vm_name(self):
|
||||
self.assertEqual(sanitize_vm_name(vm_name="LOWERname"), "lowername")
|
||||
|
||||
with self.assertRaises(VmException):
|
||||
sanitize_vm_name(vm_name="12345452131324234234234234")
|
||||
|
||||
with self.assertRaises(VmException):
|
||||
sanitize_vm_name(vm_name="122342$#34234")
|
||||
|
||||
|
||||
@override_settings(
|
||||
HOSTEA=infra_custom_config(test_name="test_create_instance_util")
|
||||
)
|
||||
def test_create_instance_util(self):
|
||||
vm_name = "test_create_instance_renders"
|
||||
configuration = self.instance_config[0].name
|
||||
|
||||
with self.assertRaises(VmException):
|
||||
|
@ -212,13 +222,6 @@ class CreateInstance(TestCase):
|
|||
user=self.user,
|
||||
)
|
||||
|
||||
with self.assertRaises(VmException):
|
||||
create_instance(
|
||||
vm_name="122342$#34234",
|
||||
configuration_name=configuration,
|
||||
user=self.user,
|
||||
)
|
||||
|
||||
@override_settings(
|
||||
HOSTEA=infra_custom_config(test_name="test_create_instance_renders")
|
||||
)
|
||||
|
|
|
@ -43,11 +43,13 @@ class VmException(Exception):
|
|||
return self.error
|
||||
|
||||
|
||||
def create_instance(vm_name: str, configuration_name: str, user: User) -> Instance:
|
||||
def sanitize_vm_name(vm_name: str) -> str:
|
||||
"""
|
||||
Create instance view
|
||||
Sanity checks and normalization of the vm name
|
||||
"""
|
||||
|
||||
vm_name = vm_name.lower()
|
||||
|
||||
if len(vm_name) > 20:
|
||||
raise VmException(code=VmErrors.NAME_TOO_LONG)
|
||||
if not str.isalnum(vm_name):
|
||||
|
@ -56,6 +58,16 @@ def create_instance(vm_name: str, configuration_name: str, user: User) -> Instan
|
|||
if Instance.objects.filter(name=vm_name).exists():
|
||||
raise VmException(code=VmErrors.NAME_EXISTS)
|
||||
|
||||
return vm_name
|
||||
|
||||
|
||||
def create_instance(vm_name: str, configuration_name: str, user: User) -> Instance:
|
||||
"""
|
||||
Create instance view
|
||||
"""
|
||||
|
||||
vm_name = sanitize_vm_name(vm_name)
|
||||
|
||||
if not InstanceConfiguration.objects.filter(name=configuration_name).exists():
|
||||
raise VmException(code=VmErrors.NO_CONFIG)
|
||||
|
||||
|
@ -77,7 +89,7 @@ def footer_ctx():
|
|||
"link": settings.HOSTEA["SOURCE_CODE"],
|
||||
}
|
||||
else:
|
||||
link = "https://gitea.gna.org/Hostea/dashboard"
|
||||
link = "https://forgejo.gna.org/Hostea/dashboard"
|
||||
source_code = {"text": "Source Code", "link": link}
|
||||
try:
|
||||
r = Repo(".")
|
||||
|
|
|
@ -117,12 +117,12 @@ def view_instance(request, name: str):
|
|||
instance = get_object_or_404(Instance, owned_by=user, name=name)
|
||||
ctx = default_ctx(title=PAGE_TITLE, username=user.username)
|
||||
instance.configuration = instance.configuration_id
|
||||
gitea_uri = Infra.get_gitea_uri(instance=instance)
|
||||
forgejo_uri = Infra.get_forgejo_uri(instance=instance)
|
||||
woodpecker = Infra.get_woodpecker_uri(instance=instance)
|
||||
|
||||
ctx["instance"] = instance
|
||||
ctx["woodpecker"] = woodpecker
|
||||
ctx["gitea_uri"] = gitea_uri
|
||||
ctx["forgejo_uri"] = forgejo_uri
|
||||
return render(request, "dash/instances/view/index.html", context=ctx)
|
||||
|
||||
|
||||
|
|
|
@ -44,8 +44,8 @@ PAYMENT_VARIANTS = {
|
|||
"stripe": (
|
||||
"payments.stripe.StripeProvider", # please don't change this
|
||||
{
|
||||
"secret_key": env.get_value("STRIPE_SECRET_KEY"),
|
||||
"public_key": env.get_value("STRIPE_PUBLIC_KEY"),
|
||||
"secret_key": env.get_value("STRIPE_SECRET_KEY", default="UNSET"),
|
||||
"public_key": env.get_value("STRIPE_PUBLIC_KEY", default="UNSET"),
|
||||
},
|
||||
)
|
||||
}
|
||||
|
@ -54,19 +54,19 @@ PAYMENT_VARIANTS = {
|
|||
### Dashbaord specific configuration options
|
||||
|
||||
HOSTEA = {
|
||||
"SOURCE_CODE": "https://gitea.gna.org/Hostea/dashboard",
|
||||
"SOURCE_CODE": "https://forgejo.gna.org/Hostea/dashboard",
|
||||
"INSTANCE_MAINTAINER_CONTACT": "contact@gna.example.org",
|
||||
"ACCOUNTS": {
|
||||
"MAX_VERIFICATION_TOLERANCE_PERIOD": 60 * 60 * 24, # in seconds
|
||||
"SUDO_TTL": 60 * 5,
|
||||
},
|
||||
"META": {
|
||||
"GITEA_INSTANCE": env.get_value(
|
||||
"HOSTEA_META_GITEA_INSTANCE"
|
||||
), # meta Gitea insatnce
|
||||
"GITEA_ORG_NAME": "Hostea", # Organisation name on Hostea meta instance
|
||||
"FORGEJO_INSTANCE": env.get_value(
|
||||
"HOSTEA_META_FORGEJO_INSTANCE"
|
||||
), # meta Forgejo insatnce
|
||||
"FORGEJO_ORG_NAME": "Hostea", # Organisation name on Hostea meta instance
|
||||
# Repository dedicated for handling support
|
||||
# ref: https://gitea.gna.org/Hostea/july-mvp/issues/17
|
||||
# ref: https://forgejo.gna.org/Hostea/july-mvp/issues/17
|
||||
"SUPPORT_REPOSITORY": "support",
|
||||
},
|
||||
"INFRA": {
|
||||
|
|
|
@ -53,17 +53,17 @@ PAYMENT_VARIANTS = {
|
|||
### Dashbaord specific configuration options
|
||||
|
||||
HOSTEA = {
|
||||
"SOURCE_CODE": "https://gitea.gna.org/Hostea/dashboard",
|
||||
"SOURCE_CODE": "https://forgejo.gna.org/Hostea/dashboard",
|
||||
"INSTANCE_MAINTAINER_CONTACT": "contact@gna.example.org",
|
||||
"ACCOUNTS": {
|
||||
"MAX_VERIFICATION_TOLERANCE_PERIOD": 60 * 60 * 24, # in seconds
|
||||
"SUDO_TTL": 60 * 5,
|
||||
},
|
||||
"META": {
|
||||
"GITEA_INSTANCE": "https://gitea.gna.org", # meta Gitea insatnce
|
||||
"GITEA_ORG_NAME": "Hostea", # Organisation name on Hostea meta instance
|
||||
"FORGEJO_INSTANCE": "https://forgejo.gna.org", # meta Forgejo insatnce
|
||||
"FORGEJO_ORG_NAME": "Hostea", # Organisation name on Hostea meta instance
|
||||
# Repository dedicated for handling support
|
||||
# ref: https://gitea.gna.org/Hostea/july-mvp/issues/17
|
||||
# ref: https://forgejo.gna.org/Hostea/july-mvp/issues/17
|
||||
"SUPPORT_REPOSITORY": "support",
|
||||
},
|
||||
"INFRA": {
|
||||
|
|
|
@ -171,7 +171,7 @@ PAYMENT_VARIANTS = {
|
|||
### Dashbaord specific configuration options
|
||||
|
||||
HOSTEA = {
|
||||
"SOURCE_CODE": "https://gitea.gna.org/Hostea/dashboard",
|
||||
"SOURCE_CODE": "https://forgejo.gna.org/Hostea/dashboard",
|
||||
"RESTRICT_NEW_INTEGRATION_INSTALLATION": True,
|
||||
"INSTANCE_MAINTAINER_CONTACT": "contact@gna.example.org",
|
||||
"ACCOUNTS": {
|
||||
|
@ -179,10 +179,10 @@ HOSTEA = {
|
|||
"SUDO_TTL": 60 * 5,
|
||||
},
|
||||
"META": {
|
||||
"GITEA_INSTANCE": "http://localhost:3000", # meta Gitea insatnce
|
||||
"GITEA_ORG_NAME": "Hostea", # Organisation name on Hostea meta instance
|
||||
"FORGEJO_INSTANCE": "http://localhost:3000", # meta Forgejo insatnce
|
||||
"FORGEJO_ORG_NAME": "Hostea", # Organisation name on Hostea meta instance
|
||||
# Repository dedicated for handling support
|
||||
# ref: https://gitea.gna.org/Hostea/july-mvp/issues/17
|
||||
# ref: https://forgejo.gna.org/Hostea/july-mvp/issues/17
|
||||
"SUPPORT_REPOSITORY": "support",
|
||||
},
|
||||
"INFRA": {
|
||||
|
|
|
@ -1,23 +1,23 @@
|
|||
version: "3"
|
||||
|
||||
#networks:
|
||||
# hostea-dash-gitea:
|
||||
# hostea-dash-forgejo:
|
||||
# external: false
|
||||
# hostea-dash-smtp:
|
||||
# external: false
|
||||
|
||||
|
||||
services:
|
||||
gitea:
|
||||
image: gitea/gitea:1.16.5
|
||||
container_name: hostea-dash-gitea
|
||||
forgejo:
|
||||
image: codeberg.org/forgejo/forgejo:1.18.0-1
|
||||
container_name: hostea-dash-forgejo
|
||||
network_mode: host
|
||||
environment:
|
||||
- USER_UID=1000
|
||||
- USER_GID=1000
|
||||
restart: always
|
||||
#networks:
|
||||
# - hostea-dash-gitea
|
||||
# - hostea-dash-forgejo
|
||||
volumes:
|
||||
- /etc/timezone:/etc/timezone:ro
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
1. Clone the project
|
||||
|
||||
```bash
|
||||
git clone https://gitea.gna.org/Hostea/dashboard.git && cd dashboard
|
||||
git clone https://forgejo.gna.org/Hostea/dashboard.git && cd dashboard
|
||||
```
|
||||
|
||||
2. Create `virtualenv` and activate environment
|
||||
|
|
|
@ -44,8 +44,8 @@ hence the current redundancy in configuration and cronjob duration.
|
|||
|
||||
## Support Platform Integration
|
||||
|
||||
Hostea Dashbaord delegates support to Hostea's meta Gitea instance, as
|
||||
discussed [here](https://gitea.gna.org/Hostea/july-mvp/issues/17).
|
||||
Hostea Dashbaord delegates support to Hostea's meta Forgejo instance, as
|
||||
discussed [here](https://forgejo.gna.org/Hostea/july-mvp/issues/17).
|
||||
|
||||
To configure support platform integration , please set the following
|
||||
attributes in `settings.py`:
|
||||
|
@ -55,10 +55,10 @@ HOSTEA = {
|
|||
# <--snip--->
|
||||
"META": {
|
||||
# <--snip--->
|
||||
"GITEA_INSTANCE": "https://gitea.gna.org", # meta Gitea insatnce
|
||||
"GITEA_ORG_NAME": "Hostea", # Organisation name on Hostea meta instance
|
||||
"FORGEJO_INSTANCE": "https://forgejo.gna.org", # meta Forgejo insatnce
|
||||
"FORGEJO_ORG_NAME": "Hostea", # Organisation name on Hostea meta instance
|
||||
# Repository dedicated for handling support
|
||||
# ref: https://gitea.gna.org/Hostea/july-mvp/issues/17
|
||||
# ref: https://forgejo.gna.org/Hostea/july-mvp/issues/17
|
||||
"SUPPORT_REPOSITORY": "support",
|
||||
},
|
||||
}
|
||||
|
|
|
@ -93,9 +93,9 @@ class Command(BaseCommand):
|
|||
instance = create_instance(
|
||||
vm_name=vm_name, configuration_name=size, user=user
|
||||
)
|
||||
(gitea_password, _commit) = create_vm_if_not_exists(instance)
|
||||
(forgejo_password, _commit) = create_vm_if_not_exists(instance)
|
||||
print("Instance created")
|
||||
print(f"Gitea admin password: {gitea_password}")
|
||||
print(f"Forgejo admin password: {forgejo_password}")
|
||||
except VmException as e:
|
||||
if e.code == VmErrors.NAME_EXISTS:
|
||||
instance = Instance.objects.get(name=vm_name)
|
||||
|
@ -104,9 +104,9 @@ class Command(BaseCommand):
|
|||
name=size
|
||||
)
|
||||
instance.save()
|
||||
(gitea_password, _commit) = create_vm_if_not_exists(instance)
|
||||
(forgejo_password, _commit) = create_vm_if_not_exists(instance)
|
||||
print("Instance created")
|
||||
print(f"Gitea admin password: {gitea_password}")
|
||||
print(f"Forgejo admin password: {forgejo_password}")
|
||||
|
||||
else:
|
||||
self.stderr.write(self.style.ERROR(f"error: {str(e)}"))
|
||||
|
|
|
@ -6,13 +6,13 @@ Your Gna! instance is being prepared, you will receive an email
|
|||
notification when it is ready.
|
||||
|
||||
You can use the following credentials to log into an admin account on
|
||||
your new Gna! Gitea instance. Great powers come with great
|
||||
your new Gna! Forgejo instance. Great powers come with great
|
||||
responsibilities, so use the admin credentials wisely. When in doubt,
|
||||
consult the Gitea docs or contact support!
|
||||
consult the Forgejo docs or contact support!
|
||||
|
||||
- username : root
|
||||
- password: {{ gitea_password }}
|
||||
- Gitea {{ gitea_uri }}
|
||||
- password: {{ forgejo_password }}
|
||||
- Forgejo {{ forgejo_uri }}
|
||||
|
||||
Cheers,
|
||||
Gna! team
|
|
@ -4,7 +4,7 @@ The deployment job has run to completion and your Gna! instance is now online!
|
|||
Credentials to admin account was sent in an earlier email, please contact
|
||||
support if didn't receive it.
|
||||
|
||||
Gitea: {{ gitea_uri }}
|
||||
Forgejo: {{ forgejo_uri }}
|
||||
Woodpecker CI: {{ woodpecker_uri }}
|
||||
|
||||
Cheers,
|
||||
|
|
|
@ -3,7 +3,7 @@ Hello {{ username }}!,
|
|||
|
||||
A customer has purchased a new instance. Please find the details below:
|
||||
|
||||
Gitea: {{ gitea_uri }}
|
||||
Forgejo: {{ forgejo_uri }}
|
||||
Woodpecker CI: {{ woodpecker_uri }}
|
||||
|
||||
Cheers,
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
{% extends 'dash/common/base.html' %} {% block dash %}
|
||||
<h1>{{ title }}</h1>
|
||||
|
||||
<h2>Gitea Admin Credentials</h2>
|
||||
<h2>Forgejo Admin Credentials</h2>
|
||||
|
||||
<ul>
|
||||
<li><b>Username:</b> root</li>
|
||||
<li><b>Password:</b> {{ gitea_password }}</li>
|
||||
<li><b>Password:</b> {{ forgejo_password }}</li>
|
||||
</ul>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
enough --domain $domain host create {{subdomain}}-host
|
||||
enough --domain $domain service create --host {{subdomain}}-host gitea
|
||||
enough --domain $domain service create --host {{subdomain}}-host forgejo
|
||||
|
|
|
@ -2,49 +2,49 @@
|
|||
#
|
||||
#######################################
|
||||
#
|
||||
# Public hostname of the Gitea instance
|
||||
# Public hostname of the Forgejo instance
|
||||
#
|
||||
#
|
||||
gitea_host: "{{ subdomain }}.{{ '{' }}{{ '{' }} domain {{ '}' }}{{ '}' }}"
|
||||
forgejo_host: "{{ subdomain }}.{{ '{' }}{{ '{' }} domain {{ '}' }}{{ '}' }}"
|
||||
#
|
||||
#######################################
|
||||
#
|
||||
# Mailer from
|
||||
#
|
||||
#
|
||||
gitea_mailer_from: "noreply@{{ '{' }}{{ '{' }} domain {{ '}' }}{{ '}' }}"
|
||||
forgejo_mailer_from: "noreply@{{ '{' }}{{ '{' }} domain {{ '}' }}{{ '}' }}"
|
||||
#
|
||||
#######################################
|
||||
#
|
||||
# SSH port of the Gitea instance
|
||||
# SSH port of the Forgejo instance
|
||||
#
|
||||
#
|
||||
gitea_ssh_port: "22"
|
||||
forgejo_ssh_port: "22"
|
||||
#
|
||||
#######################################
|
||||
#
|
||||
# Gitea version
|
||||
# Forgejo version
|
||||
#
|
||||
#
|
||||
#gitea_version: "1.16.8"
|
||||
#forgejo_version: "1.18.0-1"
|
||||
#
|
||||
#######################################
|
||||
#
|
||||
# Admin user name
|
||||
#
|
||||
gitea_user: root
|
||||
forgejo_user: root
|
||||
#
|
||||
#######################################
|
||||
#
|
||||
# Admin user password
|
||||
#
|
||||
gitea_password: "{{ gitea_password }}"
|
||||
forgejo_password: "{{ forgejo_password }}"
|
||||
#
|
||||
#######################################
|
||||
#
|
||||
# Admin user email
|
||||
#
|
||||
gitea_email: "{{ gitea_email }}"
|
||||
forgejo_email: "{{ forgejo_email }}"
|
||||
#
|
||||
#######################################
|
||||
#
|
||||
|
@ -60,9 +60,9 @@ woodpecker_host: "{{ '{' }}{{ '{' }} woodpecker_hostname {{ '}' }}{{ '}' }}.{{ '
|
|||
#
|
||||
#######################################
|
||||
#
|
||||
# Gitea users with admin rights on woodpecker
|
||||
# Forgejo users with admin rights on woodpecker
|
||||
#
|
||||
woodpecker_admins: "{{ '{' }}{{ '{' }} gitea_user {{ '}' }}{{ '}' }}"
|
||||
woodpecker_admins: "{{ '{' }}{{ '{' }} forgejo_user {{ '}' }}{{ '}' }}"
|
||||
#
|
||||
#######################################
|
||||
#
|
|
@ -1,4 +1,4 @@
|
|||
gitea-service-group:
|
||||
forgejo-service-group:
|
||||
hosts:
|
||||
{{ subdomain }}-host:
|
||||
ansible_port: 2222
|
||||
|
|
|
@ -54,8 +54,8 @@ class InfraUtilTest(TestCase):
|
|||
# )
|
||||
#
|
||||
# self.assertEqual(
|
||||
# base.joinpath(f"inventory/host_vars/{subdomain}-host/gitea.yml"),
|
||||
# infra._gitea_path(subdomain=subdomain),
|
||||
# base.joinpath(f"inventory/host_vars/{subdomain}-host/forgejo.yml"),
|
||||
# infra._forgejo_path(subdomain=subdomain),
|
||||
# )
|
||||
#
|
||||
# self.assertEqual(
|
||||
|
@ -156,7 +156,7 @@ class InfraUtilTest(TestCase):
|
|||
# call_command("vm", "delete", subdomain)
|
||||
#
|
||||
# def test_worker(self):
|
||||
# subdomain = "gitea" # yes, gitea.hostea.org exists. will use it till I
|
||||
# subdomain = "forgejo" # yes, forgejo.hostea.org exists. will use it till I
|
||||
# # figure out how to use requests_mock within django
|
||||
# c = Client()
|
||||
# login_util(self, c, "accounts.home")
|
||||
|
@ -166,8 +166,8 @@ class InfraUtilTest(TestCase):
|
|||
#
|
||||
# instance = Instance.objects.get(name=subdomain)
|
||||
# job = Job.objects.create(instance=instance, job_type=JobType.PING)
|
||||
# gitea_uri = Infra.get_gitea_uri(instance=instance)
|
||||
# print(f"mocking {gitea_uri}")
|
||||
# forgejo_uri = Infra.get_forgejo_uri(instance=instance)
|
||||
# print(f"mocking {forgejo_uri}")
|
||||
#
|
||||
# w = Worker(job=job)
|
||||
# w.start()
|
||||
|
@ -184,7 +184,7 @@ class InfraUtilTest(TestCase):
|
|||
Test if the dashboard generates invoices for a VM crated with a name
|
||||
matching a VM name that was deleted that existed.
|
||||
|
||||
ref: https://gitea.hostea.org/Hostea/dashboard/issues/38#issuecomment-1162
|
||||
ref: https://forgejo.hostea.org/Hostea/dashboard/issues/38#issuecomment-1162
|
||||
"""
|
||||
c = Client()
|
||||
login_util(self, c, "accounts.home")
|
||||
|
|
|
@ -43,12 +43,12 @@ class Worker(Thread):
|
|||
super().__init__()
|
||||
|
||||
def run(self):
|
||||
gitea_uri = Infra.get_gitea_uri(instance=self.job.instance)
|
||||
forgejo_uri = Infra.get_forgejo_uri(instance=self.job.instance)
|
||||
woodpecker = Infra.get_woodpecker_uri(instance=self.job.instance)
|
||||
while True:
|
||||
try:
|
||||
print(f"[ping] Trying to reach {gitea_uri}")
|
||||
resp = requests.get(gitea_uri)
|
||||
print(f"[ping] Trying to reach {forgejo_uri}")
|
||||
resp = requests.get(forgejo_uri)
|
||||
if resp.status_code == 200:
|
||||
break
|
||||
except Exception:
|
||||
|
@ -60,7 +60,7 @@ class Worker(Thread):
|
|||
email = job.instance.owned_by.email
|
||||
|
||||
ctx = {
|
||||
"gitea_uri": gitea_uri,
|
||||
"forgejo_uri": forgejo_uri,
|
||||
"woodpecker_uri": woodpecker,
|
||||
"username": job.instance.owned_by.username,
|
||||
}
|
||||
|
@ -82,18 +82,18 @@ class Worker(Thread):
|
|||
|
||||
def create_vm_if_not_exists(instance: Instance) -> (str, str):
|
||||
"""
|
||||
Create VM utility. Gitea password is returned
|
||||
Create VM utility. Forgejo password is returned
|
||||
"""
|
||||
|
||||
def notify_staff(instance: Instance):
|
||||
infra = Infra()
|
||||
User = get_user_model()
|
||||
gitea_uri = Infra.get_gitea_uri(instance=instance)
|
||||
forgejo_uri = Infra.get_forgejo_uri(instance=instance)
|
||||
woodpecker = Infra.get_woodpecker_uri(instance=instance)
|
||||
|
||||
for staff in User.objects.filter(is_staff=True):
|
||||
ctx = {
|
||||
"gitea_uri": gitea_uri,
|
||||
"forgejo_uri": forgejo_uri,
|
||||
"woodpecker_uri": woodpecker,
|
||||
"username": staff.username,
|
||||
}
|
||||
|
@ -113,12 +113,12 @@ def create_vm_if_not_exists(instance: Instance) -> (str, str):
|
|||
|
||||
infra = Infra()
|
||||
if not InstanceCreated.objects.filter(instance=instance).exists():
|
||||
(gitea_password, commit) = infra.add_vm(instance=instance)
|
||||
(forgejo_password, commit) = infra.add_vm(instance=instance)
|
||||
InstanceCreated.objects.create(instance=instance, created=True)
|
||||
notify_staff(instance=instance)
|
||||
job = Job.objects.create(instance=instance, job_type=str(JobType.PING))
|
||||
Worker(job=job).start()
|
||||
return (gitea_password, commit)
|
||||
return (forgejo_password, commit)
|
||||
else:
|
||||
if str.strip(infra.get_flavor(instance=instance)) != str.strip(
|
||||
infra.translate_size(instance=instance)
|
||||
|
@ -177,9 +177,9 @@ class Infra:
|
|||
return self._host_vars_dir(subdomain=subdomain).joinpath("provision.yml")
|
||||
|
||||
@classmethod
|
||||
def get_gitea_uri(cls, instance: Instance) -> str:
|
||||
def get_forgejo_uri(cls, instance: Instance) -> str:
|
||||
"""
|
||||
Get an instance's Gitea URI
|
||||
Get an instance's Forgejo URI
|
||||
"""
|
||||
base = settings.HOSTEA["INFRA"]["HOSTEA_DOMAIN"]
|
||||
return f"https://{instance.name}.{base}"
|
||||
|
@ -194,7 +194,7 @@ class Infra:
|
|||
@classmethod
|
||||
def get_woodpecker_uri(cls, instance: Instance) -> str:
|
||||
"""
|
||||
Get an instance's Gitea URI
|
||||
Get an instance's Forgejo URI
|
||||
"""
|
||||
base = settings.HOSTEA["INFRA"]["HOSTEA_DOMAIN"]
|
||||
return f"https://{cls._gen_woodpecker_hostname(instance=instance)}.{base}"
|
||||
|
@ -211,12 +211,12 @@ class Infra:
|
|||
return config["openstack_flavor"].split("{{ ")[1].split(" }}")[0]
|
||||
return None
|
||||
|
||||
def _gitea_path(self, subdomain: str) -> Path:
|
||||
def _forgejo_path(self, subdomain: str) -> Path:
|
||||
"""
|
||||
utility method: get gitea file for a subdomain
|
||||
utility method: get forgejo file for a subdomain
|
||||
"""
|
||||
|
||||
return self._host_vars_dir(subdomain=subdomain).joinpath("gitea.yml")
|
||||
return self._host_vars_dir(subdomain=subdomain).joinpath("forgejo.yml")
|
||||
|
||||
def _backup_path(self, subdomain: str) -> Path:
|
||||
"""
|
||||
|
@ -284,7 +284,7 @@ class Infra:
|
|||
"""
|
||||
Add new VM to infrastructure repository
|
||||
|
||||
The gitea user password is returned
|
||||
The forgejo user password is returned
|
||||
"""
|
||||
|
||||
subdomain = instance.name
|
||||
|
@ -298,22 +298,22 @@ class Infra:
|
|||
os.makedirs(hostscript_path)
|
||||
|
||||
woodpecker_agent_secret = get_random_string(64)
|
||||
gitea_password = get_random_string(20)
|
||||
forgejo_password = get_random_string(20)
|
||||
|
||||
ctx = {
|
||||
"woodpecker_agent_secret": woodpecker_agent_secret,
|
||||
"woodpecker_hostname": self._gen_woodpecker_hostname(instance=instance),
|
||||
"woodpecker_admins": f"{instance.owned_by.username}",
|
||||
"gitea_email": instance.owned_by.email,
|
||||
"gitea_password": gitea_password,
|
||||
"forgejo_email": instance.owned_by.email,
|
||||
"forgejo_password": forgejo_password,
|
||||
"subdomain": subdomain,
|
||||
}
|
||||
|
||||
gitea = self._gitea_path(subdomain)
|
||||
with open(gitea, "w+", encoding="utf-8") as f:
|
||||
forgejo = self._forgejo_path(subdomain)
|
||||
with open(forgejo, "w+", encoding="utf-8") as f:
|
||||
f.write(
|
||||
render_to_string(
|
||||
"infrastructure/yml/gitea.yml",
|
||||
"infrastructure/yml/forgejo.yml",
|
||||
context=ctx,
|
||||
)
|
||||
)
|
||||
|
@ -357,7 +357,7 @@ class Infra:
|
|||
)
|
||||
|
||||
commit = self._push(f"add vm {subdomain}")
|
||||
return (gitea_password, commit)
|
||||
return (forgejo_password, commit)
|
||||
|
||||
def remove_vm(self, instance: Instance):
|
||||
"""
|
||||
|
|
|
@ -53,23 +53,23 @@ def create_instance(request, instance_name: str):
|
|||
|
||||
res = create_vm_if_not_exists(instance=instance)
|
||||
if res is not None:
|
||||
(gitea_password, commit) = res
|
||||
(forgejo_password, commit) = res
|
||||
|
||||
ctx = {
|
||||
"username": request.user.username,
|
||||
"gitea_password": gitea_password,
|
||||
"gitea_uri": Infra.get_gitea_uri(instance=instance),
|
||||
"forgejo_password": forgejo_password,
|
||||
"forgejo_uri": Infra.get_forgejo_uri(instance=instance),
|
||||
}
|
||||
|
||||
body = render_to_string(
|
||||
"infrastructure/emails/gitea-creds.txt",
|
||||
"infrastructure/emails/forgejo-creds.txt",
|
||||
context=ctx,
|
||||
)
|
||||
|
||||
sender = settings.DEFAULT_FROM_EMAIL
|
||||
|
||||
send_mail(
|
||||
subject="[Gna!] Gitea admin credentials",
|
||||
subject="[Gna!] Forgejo admin credentials",
|
||||
message=body,
|
||||
from_email=f"No reply Gna!<{sender}>", # TODO read from settings.py
|
||||
recipient_list=[request.user.email],
|
||||
|
|
|
@ -16,7 +16,7 @@ init() {
|
|||
sleep 5
|
||||
# wait_for_env
|
||||
fi
|
||||
gitea_root
|
||||
forgejo_root
|
||||
support_repo_init
|
||||
fleet_repo_init
|
||||
}
|
||||
|
|
|
@ -3,10 +3,10 @@ import argparse
|
|||
from requests import Session
|
||||
|
||||
|
||||
def gitea_from_args(args, c: Session):
|
||||
from .gitea import Gitea
|
||||
def forgejo_from_args(args, c: Session):
|
||||
from .forgejo import Forgejo
|
||||
|
||||
return Gitea(
|
||||
return Forgejo(
|
||||
host=args.host,
|
||||
username=args.username,
|
||||
password=args.password,
|
||||
|
@ -15,7 +15,7 @@ def gitea_from_args(args, c: Session):
|
|||
)
|
||||
|
||||
|
||||
class Gitea:
|
||||
class Forgejo:
|
||||
def __init__(self, parser, c: Session):
|
||||
self.c = c
|
||||
self.parser = parser
|
||||
|
@ -29,56 +29,56 @@ class Gitea:
|
|||
|
||||
def __add_credentials_parser(self, parser):
|
||||
group = parser.add_argument_group("credentials", "User credentials")
|
||||
group.add_argument("username", type=str, help="Gitea user's username")
|
||||
group.add_argument("password", type=str, help="Gitea user's password")
|
||||
group.add_argument("email", type=str, help="Gitea user's email")
|
||||
group.add_argument("host", type=str, help="URI at which Gitea is running")
|
||||
group.add_argument("username", type=str, help="Forgejo user's username")
|
||||
group.add_argument("password", type=str, help="Forgejo user's password")
|
||||
group.add_argument("email", type=str, help="Forgejo user's email")
|
||||
group.add_argument("host", type=str, help="URI at which Forgejo is running")
|
||||
|
||||
def install(self):
|
||||
def run(args, c: Session):
|
||||
gitea = gitea_from_args(args, c=c)
|
||||
gitea.install()
|
||||
forgejo = forgejo_from_args(args, c=c)
|
||||
forgejo.install()
|
||||
|
||||
self.install_parser = self.subparser.add_parser(
|
||||
name="install", description="Install Gitea", help="Install Gitea"
|
||||
name="install", description="Install Forgejo", help="Install Forgejo"
|
||||
)
|
||||
self.__add_credentials_parser(self.install_parser)
|
||||
self.install_parser.set_defaults(func=run)
|
||||
|
||||
def register(self):
|
||||
def run(args, c: Session):
|
||||
gitea = gitea_from_args(args, c=c)
|
||||
gitea.register()
|
||||
forgejo = forgejo_from_args(args, c=c)
|
||||
forgejo.register()
|
||||
|
||||
self.register_parser = self.subparser.add_parser(
|
||||
name="register",
|
||||
description="Gitea user registration",
|
||||
help="Register a user on Gitea",
|
||||
description="Forgejo user registration",
|
||||
help="Register a user on Forgejo",
|
||||
)
|
||||
self.__add_credentials_parser(self.register_parser)
|
||||
self.register_parser.set_defaults(func=run)
|
||||
|
||||
def login(self):
|
||||
def run(args, c: Session):
|
||||
gitea = gitea_from_args(args, c=c)
|
||||
gitea.login()
|
||||
forgejo = forgejo_from_args(args, c=c)
|
||||
forgejo.login()
|
||||
|
||||
self.login_parser = self.subparser.add_parser(
|
||||
name="login", description="Gitea user login", help="Login on Gitea"
|
||||
name="login", description="Forgejo user login", help="Login on Forgejo"
|
||||
)
|
||||
self.__add_credentials_parser(self.login_parser)
|
||||
self.login_parser.set_defaults(func=run)
|
||||
|
||||
def create_repository(self):
|
||||
def run(args, c: Session):
|
||||
gitea = gitea_from_args(args, c=c)
|
||||
gitea.login()
|
||||
gitea.create_repository(name=args.repo_name)
|
||||
forgejo = forgejo_from_args(args, c=c)
|
||||
forgejo.login()
|
||||
forgejo.create_repository(name=args.repo_name)
|
||||
|
||||
self.create_repository_parser = self.subparser.add_parser(
|
||||
name="create_repo",
|
||||
description="Create repository on Gitea",
|
||||
help="Create repository on Gitea",
|
||||
description="Create repository on Forgejo",
|
||||
help="Create repository on Forgejo",
|
||||
)
|
||||
self.__add_credentials_parser(self.create_repository_parser)
|
||||
self.create_repository_parser.set_defaults(func=run)
|
||||
|
@ -88,10 +88,10 @@ class Gitea:
|
|||
|
||||
def install_sso(self):
|
||||
def run(args, c: Session):
|
||||
gitea = gitea_from_args(args, c=c)
|
||||
gitea.login()
|
||||
forgejo = forgejo_from_args(args, c=c)
|
||||
forgejo.login()
|
||||
print(f"CLIENT ID: {args.client_id}")
|
||||
gitea.install_sso(
|
||||
forgejo.install_sso(
|
||||
sso_name=args.sso_name,
|
||||
client_id=args.client_id,
|
||||
client_secret=args.client_secret,
|
||||
|
@ -100,8 +100,8 @@ class Gitea:
|
|||
|
||||
self.install_sso_parser = self.subparser.add_parser(
|
||||
name="install_sso",
|
||||
description="Install SSO on Gitea",
|
||||
help="Install SSO on Gitea",
|
||||
description="Install SSO on Forgejo",
|
||||
help="Install SSO on Forgejo",
|
||||
)
|
||||
self.__add_credentials_parser(self.install_sso_parser)
|
||||
self.install_sso_parser.add_argument(
|
||||
|
@ -123,14 +123,14 @@ class Gitea:
|
|||
|
||||
def add_deploy_key(self):
|
||||
def run(args, c: Session):
|
||||
gitea = gitea_from_args(args, c=c)
|
||||
gitea.login()
|
||||
gitea.add_deploy_key(repo=args.repo_name, key=args.key_file)
|
||||
forgejo = forgejo_from_args(args, c=c)
|
||||
forgejo.login()
|
||||
forgejo.add_deploy_key(repo=args.repo_name, key=args.key_file)
|
||||
|
||||
self.add_deploy_key_parser = self.subparser.add_parser(
|
||||
name="add_deploy_key",
|
||||
description="Create repository on Gitea",
|
||||
help="Add deploy key to a repository on Gitea",
|
||||
description="Create repository on Forgejo",
|
||||
help="Add deploy key to a repository on Forgejo",
|
||||
)
|
||||
self.__add_credentials_parser(self.add_deploy_key_parser)
|
||||
self.add_deploy_key_parser.add_argument(
|
||||
|
@ -203,21 +203,21 @@ class Hostea:
|
|||
|
||||
def support(self):
|
||||
def run(args, c: Session):
|
||||
from .gitea import GiteaSSO
|
||||
from .forgejo import ForgejoSSO
|
||||
|
||||
dash = dash_from_args(args, c=c)
|
||||
dash.login()
|
||||
|
||||
gitea = GiteaSSO(
|
||||
forgejo = ForgejoSSO(
|
||||
username=dash.username,
|
||||
email=dash.email,
|
||||
gitea_host=args.gitea_host,
|
||||
hostea_org=args.gitea_hostea_org,
|
||||
forgejo_host=args.forgejo_host,
|
||||
hostea_org=args.forgejo_hostea_org,
|
||||
support_repo=args.support_repo,
|
||||
c=c,
|
||||
)
|
||||
dash.new_ticket(gitea.new_issues_uri)
|
||||
gitea.new_issue()
|
||||
dash.new_ticket(forgejo.new_issues_uri)
|
||||
forgejo.new_issue()
|
||||
|
||||
self.support_parser = self.subparser.add_parser(
|
||||
name="support",
|
||||
|
@ -226,12 +226,12 @@ class Hostea:
|
|||
)
|
||||
self.__add_credentials_parser(self.support_parser)
|
||||
self.support_parser.add_argument(
|
||||
"gitea_host", type=str, help="URI at which Gitea is running"
|
||||
"forgejo_host", type=str, help="URI at which Forgejo is running"
|
||||
)
|
||||
self.support_parser.add_argument(
|
||||
"gitea_hostea_org",
|
||||
"forgejo_hostea_org",
|
||||
type=str,
|
||||
help="Hostea namespace(username/org) on Gitea, where support repository is hosted",
|
||||
help="Hostea namespace(username/org) on Forgejo, where support repository is hosted",
|
||||
)
|
||||
self.support_parser.add_argument(
|
||||
"support_repo", type=str, help="support repository name"
|
||||
|
@ -245,28 +245,28 @@ class Cli:
|
|||
c = Session()
|
||||
self.c = c
|
||||
self.parser = argparse.ArgumentParser(
|
||||
description="Install and Bootstrap Gitea and Hostea Dashboard"
|
||||
description="Install and Bootstrap Forgejo and Hostea Dashboard"
|
||||
)
|
||||
self.subparser = self.parser.add_subparsers()
|
||||
self.check_env()
|
||||
self.gitea()
|
||||
self.forgejo()
|
||||
self.hostea()
|
||||
|
||||
def __add_credentials_parser(self, parser):
|
||||
group = parser.add_argument_group("credentials", "User credentials")
|
||||
group.add_argument("username", type=str, help="Gitea user's username")
|
||||
group.add_argument("password", type=str, help="Gitea user's password")
|
||||
group.add_argument("email", type=str, help="Gitea user's email")
|
||||
group.add_argument("username", type=str, help="Forgejo user's username")
|
||||
group.add_argument("password", type=str, help="Forgejo user's password")
|
||||
group.add_argument("email", type=str, help="Forgejo user's email")
|
||||
|
||||
def check_env(self):
|
||||
def run(args, c: Session):
|
||||
from .gitea import Gitea
|
||||
from .forgejo import Forgejo
|
||||
from .hostea import Hostea
|
||||
|
||||
Hostea.check_online(
|
||||
dashboard_host=args.hostea_host, maildev_host=args.maildev_host
|
||||
)
|
||||
Gitea.check_online(host=args.gitea_host)
|
||||
Forgejo.check_online(host=args.forgejo_host)
|
||||
|
||||
self.check_env_parser = self.subparser.add_parser(
|
||||
name="check_env",
|
||||
|
@ -275,7 +275,7 @@ class Cli:
|
|||
)
|
||||
|
||||
self.check_env_parser.add_argument(
|
||||
"gitea_host", type=str, help="URI at which Gitea is running"
|
||||
"forgejo_host", type=str, help="URI at which Forgejo is running"
|
||||
)
|
||||
|
||||
self.check_env_parser.add_argument(
|
||||
|
@ -295,13 +295,13 @@ class Cli:
|
|||
)
|
||||
Hostea(parser=self.hostea, c=self.c)
|
||||
|
||||
def gitea(self):
|
||||
self.gitea = self.subparser.add_parser(
|
||||
name="gitea",
|
||||
description="Gitea",
|
||||
help="Gitea-related functionality",
|
||||
def forgejo(self):
|
||||
self.forgejo = self.subparser.add_parser(
|
||||
name="forgejo",
|
||||
description="Forgejo",
|
||||
help="Forgejo-related functionality",
|
||||
)
|
||||
Gitea(parser=self.gitea, c=self.c)
|
||||
Forgejo(parser=self.forgejo, c=self.c)
|
||||
|
||||
def parse(self):
|
||||
return self.parser.parse_args()
|
||||
|
|
|
@ -13,7 +13,7 @@ class ParseCSRF(HTMLParser):
|
|||
# return cls(name="csrfmiddlewaretoken")
|
||||
#
|
||||
# @classmethod
|
||||
# def gitea_parser(cls) -> "ParseCSRF":
|
||||
# def forgejo_parser(cls) -> "ParseCSRF":
|
||||
# return cls(name="_csrf")
|
||||
#
|
||||
def handle_starttag(self, tag: str, attrs: (str, str)):
|
||||
|
|
|
@ -10,15 +10,15 @@ import requests
|
|||
|
||||
from .csrf import ParseCSRF
|
||||
|
||||
# GITEA_USER = "root"
|
||||
# GITEA_EMAIL = "root@example.com"
|
||||
# GITEA_PASSWORD = "foobarpassword"
|
||||
# FORGEJO_USER = "root"
|
||||
# FORGEJO_EMAIL = "root@example.com"
|
||||
# FORGEJO_PASSWORD = "foobarpassword"
|
||||
# HOST = "http://localhost:8080"
|
||||
#
|
||||
# REPOS = []
|
||||
|
||||
|
||||
class Gitea:
|
||||
class Forgejo:
|
||||
def __init__(self, host: str, username: str, password: str, email: str, c: Session):
|
||||
self.host = host
|
||||
self.username = username
|
||||
|
@ -48,7 +48,7 @@ class Gitea:
|
|||
@staticmethod
|
||||
def check_online(host: str):
|
||||
"""
|
||||
Check if Gitea instance is online
|
||||
Check if Forgejo instance is online
|
||||
"""
|
||||
count = 0
|
||||
parsed = urlparse(host)
|
||||
|
@ -67,7 +67,7 @@ class Gitea:
|
|||
|
||||
def install(self):
|
||||
"""
|
||||
Install Gitea, first form that a user sees when a new instance is
|
||||
Install Forgejo, first form that a user sees when a new instance is
|
||||
deployed
|
||||
"""
|
||||
# cwd = os.environ.get("PWD")
|
||||
|
@ -77,12 +77,12 @@ class Gitea:
|
|||
"db_host": "localhost:3306",
|
||||
"db_user": "root",
|
||||
"db_passwd": "",
|
||||
"db_name": "gitea",
|
||||
"db_name": "forgejo",
|
||||
"ssl_mode": "disable",
|
||||
"db_schema": "",
|
||||
"charset": "utf8",
|
||||
"db_path": "/data/gitea/gitea.db",
|
||||
"app_name": "Gitea:+Git+with+a+cup+of+tea",
|
||||
"app_name": "Forgejo:+Beyond+Coding+We+Forge",
|
||||
"repo_root_path": "/data/git/repositories",
|
||||
"lfs_root_path": "/data/git/lfs",
|
||||
"run_user": "git",
|
||||
|
@ -316,26 +316,26 @@ class ParseSSOLogin(HTMLParser):
|
|||
return
|
||||
|
||||
|
||||
class GiteaSSO:
|
||||
class ForgejoSSO:
|
||||
def __init__(
|
||||
self,
|
||||
username: str,
|
||||
email: str,
|
||||
gitea_host: str,
|
||||
forgejo_host: str,
|
||||
hostea_org: str,
|
||||
support_repo: str,
|
||||
c: Session,
|
||||
):
|
||||
self.c = c
|
||||
self.username = username
|
||||
self.gitea_host = gitea_host
|
||||
self.forgejo_host = forgejo_host
|
||||
self.hostea_org = hostea_org
|
||||
self.support_repo = support_repo
|
||||
self.email = email
|
||||
|
||||
self.__csrf_key = "_csrf"
|
||||
|
||||
url = urlparse(self.gitea_host)
|
||||
url = urlparse(self.forgejo_host)
|
||||
repo = f"{self.hostea_org}/{self.support_repo}"
|
||||
issues = f"{repo}/issues"
|
||||
new_issues = f"{issues}/new"
|
||||
|
@ -371,8 +371,8 @@ class GiteaSSO:
|
|||
parser = ParseSSOLogin()
|
||||
parser.feed(resp.text)
|
||||
|
||||
url = urlparse(self.gitea_host)
|
||||
## SSO URL in Gitea login page
|
||||
url = urlparse(self.forgejo_host)
|
||||
## SSO URL in Forgejo login page
|
||||
sso = urlunparse((url.scheme, url.netloc, parser.url, "", "", ""))
|
||||
|
||||
# redirects are enabled to for a cleaner implementation. Commented out
|
|
@ -11,12 +11,12 @@ is_ci(){
|
|||
if is_ci
|
||||
then
|
||||
MAILDEV_URL="http://smtp:1080"
|
||||
GITEA_URL="http://gitea:3000"
|
||||
GITEA_SSH_URL="ssh://git@gitea:22"
|
||||
FORGEJO_URL="http://forgejo:3000"
|
||||
FORGEJO_SSH_URL="ssh://git@forgejo:22"
|
||||
else
|
||||
MAILDEV_URL="http://localhost:1080"
|
||||
GITEA_URL="http://localhost:3000"
|
||||
GITEA_SSH_URL="ssh://git@localhost:22"
|
||||
FORGEJO_URL="http://localhost:3000"
|
||||
FORGEJO_SSH_URL="ssh://git@localhost:22"
|
||||
fi
|
||||
|
||||
readonly DASHBOARD_URL="http://localhost:8000"
|
||||
|
@ -27,22 +27,22 @@ readonly DASHBOARD_OIDC_DISCOVERY_URL="$DASHBOARD_URL/o/.well-known/openid-confi
|
|||
readonly DASHBOARD_ADMIN_USERNAME=root
|
||||
readonly DASHBOARD_ADMIN_PASSWORD=supercomplicatedpassword
|
||||
readonly DASHBOARD_ADMIN_EMAIL="$DASHBOARD_ADMIN_USERNAME@dash.example.org"
|
||||
readonly DASHBOARD_OIDC_APP_NAME=hostea-gitea
|
||||
readonly DASHBOARD_OIDC_APP_NAME=hostea-forgejo
|
||||
|
||||
readonly GITEA_ROOT_USERNAME=root
|
||||
readonly GITEA_ROOT_EMAIL="$GITEA_ROOT_USERNAME@example.org"
|
||||
readonly GITEA_ROOT_PASSOWRD=supercomplicatedpassword
|
||||
readonly GITEA_HOSTEA_SSO_NAME=hostea-sso
|
||||
readonly GITEA_OIDC_CALLBACK="$GITEA_URL/user/oauth2/$GITEA_HOSTEA_SSO_NAME/callback"
|
||||
readonly GITEA_HOSTEA_FLEET_DEPLOY_KEY="$(realpath tests/fleet-deploy-key.pub)"
|
||||
readonly GITEA_HOSTEA_FLEET_DEPLOY_KEY_PRIVATE="$(realpath tests/fleet-deploy-key)"
|
||||
readonly FORGEJO_ROOT_USERNAME=root
|
||||
readonly FORGEJO_ROOT_EMAIL="$FORGEJO_ROOT_USERNAME@example.org"
|
||||
readonly FORGEJO_ROOT_PASSOWRD=supercomplicatedpassword
|
||||
readonly FORGEJO_HOSTEA_SSO_NAME=hostea-sso
|
||||
readonly FORGEJO_OIDC_CALLBACK="$FORGEJO_URL/user/oauth2/$FORGEJO_HOSTEA_SSO_NAME/callback"
|
||||
readonly FORGEJO_HOSTEA_FLEET_DEPLOY_KEY="$(realpath tests/fleet-deploy-key.pub)"
|
||||
readonly FORGEJO_HOSTEA_FLEET_DEPLOY_KEY_PRIVATE="$(realpath tests/fleet-deploy-key)"
|
||||
|
||||
readonly GITEA_HOSTEA_USERNAME=hostea
|
||||
readonly GITEA_HOSTEA_PASSWORD=supercomplicatedpassword
|
||||
readonly GITEA_HOSTEA_EMAIL="$GITEA_HOSTEA_USERNAME@example.org"
|
||||
readonly GITEA_HOSTEA_SUPPORT_REPO="support"
|
||||
readonly GITEA_HOSTEA_FLEET_REPO="fleet"
|
||||
readonly GITEA_HOSTEA_FLEET_REPO_REMOTE="$GITEA_SSH_URL/$GITEA_HOSTEA_USERNAME/$GITEA_HOSTEA_FLEET_REPO.git"
|
||||
readonly FORGEJO_HOSTEA_USERNAME=hostea
|
||||
readonly FORGEJO_HOSTEA_PASSWORD=supercomplicatedpassword
|
||||
readonly FORGEJO_HOSTEA_EMAIL="$FORGEJO_HOSTEA_USERNAME@example.org"
|
||||
readonly FORGEJO_HOSTEA_SUPPORT_REPO="support"
|
||||
readonly FORGEJO_HOSTEA_FLEET_REPO="fleet"
|
||||
readonly FORGEJO_HOSTEA_FLEET_REPO_REMOTE="$FORGEJO_SSH_URL/$FORGEJO_HOSTEA_USERNAME/$FORGEJO_HOSTEA_FLEET_REPO.git"
|
||||
|
||||
readonly HOSTEA_CUSTOMER_USERNAME=batman
|
||||
readonly HOSTEA_CUSTOMER_PASSWORD=supercomplicatedpassword
|
||||
|
@ -53,7 +53,7 @@ OIDC_CLIENT_SECRET=""
|
|||
|
||||
wait_for_env() {
|
||||
python -m integration \
|
||||
check_env $GITEA_URL $DASHBOARD_URL $MAILDEV_URL
|
||||
check_env $FORGEJO_URL $DASHBOARD_URL $MAILDEV_URL
|
||||
}
|
||||
|
||||
# create OIDC app on Hostea Dashboard
|
||||
|
@ -67,74 +67,74 @@ oidc_dashboard_init() {
|
|||
|
||||
resp=$(python manage.py create_oidc \
|
||||
$DASHBOARD_OIDC_APP_NAME $DASHBOARD_ADMIN_USERNAME \
|
||||
$GITEA_OIDC_CALLBACK)
|
||||
$FORGEJO_OIDC_CALLBACK)
|
||||
OIDC_CLIENT_ID=$(echo $resp | cut -d ":" -f 2 | cut -d " " -f 2)
|
||||
OIDC_CLIENT_SECRET=$(echo $resp | cut -d ":" -f 3 | cut -d " " -f 2)
|
||||
}
|
||||
|
||||
# register root user on Gitea to simulate Hoste admin and integrate SSO
|
||||
gitea_root(){
|
||||
# register root user on Forgejo to simulate Hoste admin and integrate SSO
|
||||
forgejo_root(){
|
||||
python -m integration \
|
||||
gitea install \
|
||||
$GITEA_ROOT_USERNAME $GITEA_ROOT_PASSOWRD \
|
||||
$GITEA_ROOT_EMAIL \
|
||||
$GITEA_URL
|
||||
forgejo install \
|
||||
$FORGEJO_ROOT_USERNAME $FORGEJO_ROOT_PASSOWRD \
|
||||
$FORGEJO_ROOT_EMAIL \
|
||||
$FORGEJO_URL
|
||||
python -m integration \
|
||||
gitea register \
|
||||
$GITEA_ROOT_USERNAME $GITEA_ROOT_PASSOWRD \
|
||||
$GITEA_ROOT_EMAIL \
|
||||
$GITEA_URL
|
||||
forgejo register \
|
||||
$FORGEJO_ROOT_USERNAME $FORGEJO_ROOT_PASSOWRD \
|
||||
$FORGEJO_ROOT_EMAIL \
|
||||
$FORGEJO_URL
|
||||
python -m integration \
|
||||
gitea login \
|
||||
$GITEA_ROOT_USERNAME $GITEA_ROOT_PASSOWRD \
|
||||
$GITEA_ROOT_EMAIL \
|
||||
$GITEA_URL
|
||||
forgejo login \
|
||||
$FORGEJO_ROOT_USERNAME $FORGEJO_ROOT_PASSOWRD \
|
||||
$FORGEJO_ROOT_EMAIL \
|
||||
$FORGEJO_URL
|
||||
# python -m integration \
|
||||
# gitea install_sso \
|
||||
# $GITEA_ROOT_USERNAME $GITEA_ROOT_PASSOWRD \
|
||||
# $GITEA_ROOT_EMAIL \
|
||||
# $GITEA_URL \
|
||||
# $GITEA_HOSTEA_SSO_NAME \
|
||||
# forgejo install_sso \
|
||||
# $FORGEJO_ROOT_USERNAME $FORGEJO_ROOT_PASSOWRD \
|
||||
# $FORGEJO_ROOT_EMAIL \
|
||||
# $FORGEJO_URL \
|
||||
# $FORGEJO_HOSTEA_SSO_NAME \
|
||||
# $OIDC_CLIENT_ID $OIDC_CLIENT_SECRET \
|
||||
# $DASHBOARD_OIDC_DISCOVERY_URL
|
||||
}
|
||||
|
||||
|
||||
# register user "Hostea" on Gitea and create support repository
|
||||
# register user "Hostea" on Forgejo and create support repository
|
||||
support_repo_init() {
|
||||
python -m integration \
|
||||
gitea register \
|
||||
$GITEA_HOSTEA_USERNAME $GITEA_HOSTEA_PASSWORD \
|
||||
$GITEA_HOSTEA_EMAIL \
|
||||
$GITEA_URL
|
||||
forgejo register \
|
||||
$FORGEJO_HOSTEA_USERNAME $FORGEJO_HOSTEA_PASSWORD \
|
||||
$FORGEJO_HOSTEA_EMAIL \
|
||||
$FORGEJO_URL
|
||||
python -m integration \
|
||||
gitea login \
|
||||
$GITEA_HOSTEA_USERNAME $GITEA_HOSTEA_PASSWORD \
|
||||
$GITEA_HOSTEA_EMAIL \
|
||||
$GITEA_URL
|
||||
forgejo login \
|
||||
$FORGEJO_HOSTEA_USERNAME $FORGEJO_HOSTEA_PASSWORD \
|
||||
$FORGEJO_HOSTEA_EMAIL \
|
||||
$FORGEJO_URL
|
||||
python -m integration \
|
||||
gitea create_repo \
|
||||
$GITEA_HOSTEA_USERNAME $GITEA_HOSTEA_PASSWORD \
|
||||
$GITEA_HOSTEA_EMAIL \
|
||||
$GITEA_URL \
|
||||
$GITEA_HOSTEA_SUPPORT_REPO
|
||||
forgejo create_repo \
|
||||
$FORGEJO_HOSTEA_USERNAME $FORGEJO_HOSTEA_PASSWORD \
|
||||
$FORGEJO_HOSTEA_EMAIL \
|
||||
$FORGEJO_URL \
|
||||
$FORGEJO_HOSTEA_SUPPORT_REPO
|
||||
}
|
||||
|
||||
new_fleet_repo_init() {
|
||||
python -m integration \
|
||||
gitea create_repo \
|
||||
$GITEA_HOSTEA_USERNAME $GITEA_HOSTEA_PASSWORD \
|
||||
$GITEA_HOSTEA_EMAIL \
|
||||
$GITEA_URL \
|
||||
forgejo create_repo \
|
||||
$FORGEJO_HOSTEA_USERNAME $FORGEJO_HOSTEA_PASSWORD \
|
||||
$FORGEJO_HOSTEA_EMAIL \
|
||||
$FORGEJO_URL \
|
||||
$1
|
||||
|
||||
python -m integration \
|
||||
gitea add_deploy_key \
|
||||
$GITEA_HOSTEA_USERNAME $GITEA_HOSTEA_PASSWORD \
|
||||
$GITEA_HOSTEA_EMAIL \
|
||||
$GITEA_URL \
|
||||
forgejo add_deploy_key \
|
||||
$FORGEJO_HOSTEA_USERNAME $FORGEJO_HOSTEA_PASSWORD \
|
||||
$FORGEJO_HOSTEA_EMAIL \
|
||||
$FORGEJO_URL \
|
||||
$1 \
|
||||
$GITEA_HOSTEA_FLEET_DEPLOY_KEY
|
||||
$FORGEJO_HOSTEA_FLEET_DEPLOY_KEY
|
||||
|
||||
tmp_dir=$(mktemp -d)
|
||||
pushd $tmp_dir
|
||||
|
@ -144,13 +144,13 @@ new_fleet_repo_init() {
|
|||
then
|
||||
git config user.email "hostea-dashobard-test@example.org"
|
||||
git config user.name "hoste-dashobard-test"
|
||||
chmod 600 $GITEA_HOSTEA_FLEET_DEPLOY_KEY_PRIVATE
|
||||
chmod 600 $FORGEJO_HOSTEA_FLEET_DEPLOY_KEY_PRIVATE
|
||||
fi
|
||||
git add README
|
||||
git commit -m "init"
|
||||
REMOTE="$GITEA_SSH_URL/$GITEA_HOSTEA_USERNAME/$1.git"
|
||||
REMOTE="$FORGEJO_SSH_URL/$FORGEJO_HOSTEA_USERNAME/$1.git"
|
||||
git remote add origin $REMOTE
|
||||
GIT_SSH_COMMAND="/usr/bin/ssh -oStrictHostKeyChecking=no -i $GITEA_HOSTEA_FLEET_DEPLOY_KEY_PRIVATE" \
|
||||
GIT_SSH_COMMAND="/usr/bin/ssh -oStrictHostKeyChecking=no -i $FORGEJO_HOSTEA_FLEET_DEPLOY_KEY_PRIVATE" \
|
||||
git push --set-upstream origin master
|
||||
popd
|
||||
rm -rf $tmp_dir
|
||||
|
@ -158,20 +158,20 @@ new_fleet_repo_init() {
|
|||
}
|
||||
|
||||
|
||||
# register user "Hostea" on Gitea and create support repository
|
||||
# register user "Hostea" on Forgejo and create support repository
|
||||
fleet_repo_init() {
|
||||
python -m integration \
|
||||
gitea register \
|
||||
$GITEA_HOSTEA_USERNAME $GITEA_HOSTEA_PASSWORD \
|
||||
$GITEA_HOSTEA_EMAIL \
|
||||
$GITEA_URL || true
|
||||
forgejo register \
|
||||
$FORGEJO_HOSTEA_USERNAME $FORGEJO_HOSTEA_PASSWORD \
|
||||
$FORGEJO_HOSTEA_EMAIL \
|
||||
$FORGEJO_URL || true
|
||||
python -m integration \
|
||||
gitea login \
|
||||
$GITEA_HOSTEA_USERNAME $GITEA_HOSTEA_PASSWORD \
|
||||
$GITEA_HOSTEA_EMAIL \
|
||||
$GITEA_URL
|
||||
forgejo login \
|
||||
$FORGEJO_HOSTEA_USERNAME $FORGEJO_HOSTEA_PASSWORD \
|
||||
$FORGEJO_HOSTEA_EMAIL \
|
||||
$FORGEJO_URL
|
||||
|
||||
new_fleet_repo_init $GITEA_HOSTEA_FLEET_REPO
|
||||
new_fleet_repo_init $FORGEJO_HOSTEA_FLEET_REPO
|
||||
|
||||
}
|
||||
|
||||
|
@ -192,8 +192,8 @@ hostea_customer_simulation() {
|
|||
$HOSTEA_CUSTOMER_USERNAME $HOSTEA_CUSTOMER_PASSWORD \
|
||||
$HOSTEA_CUSTOMER_EMAIL \
|
||||
$DASHBOARD_URL \
|
||||
$GITEA_URL \
|
||||
$GITEA_HOSTEA_USERNAME $GITEA_HOSTEA_SUPPORT_REPO
|
||||
$FORGEJO_URL \
|
||||
$FORGEJO_HOSTEA_USERNAME $FORGEJO_HOSTEA_SUPPORT_REPO
|
||||
}
|
||||
|
||||
setup_env() {
|
||||
|
|
|
@ -15,7 +15,7 @@ django-oauth-toolkit==2.0.0
|
|||
django-payments==1.0.0
|
||||
django-phonenumber-field==6.3.0
|
||||
djangorestframework==3.13.1
|
||||
greenlet==1.1.2
|
||||
greenlet==1.1.3.post0
|
||||
idna==3.3
|
||||
install==1.3.5
|
||||
isort==5.10.1
|
||||
|
|
|
@ -24,8 +24,8 @@ from .utils import IssueTracker
|
|||
|
||||
hostea_issue_tracker_settings = settings.HOSTEA
|
||||
hostea_issue_tracker_settings["META"] = {
|
||||
"GITEA_INSTANCE": "https://gitea.gna.org",
|
||||
"GITEA_ORG_NAME": "Hostea",
|
||||
"FORGEJO_INSTANCE": "https://forgejo.gna.org",
|
||||
"FORGEJO_ORG_NAME": "Hostea",
|
||||
"SUPPORT_REPOSITORY": "support",
|
||||
}
|
||||
|
||||
|
@ -41,8 +41,8 @@ class IssueTrackerTests(TestCase):
|
|||
Verify default credentials; all further tests are based on defaults set
|
||||
"""
|
||||
it = IssueTracker()
|
||||
self.assertEqual(it.config["GITEA_INSTANCE"], "https://gitea.gna.org")
|
||||
self.assertEqual(it.config["GITEA_ORG_NAME"], "Hostea")
|
||||
self.assertEqual(it.config["FORGEJO_INSTANCE"], "https://forgejo.gna.org")
|
||||
self.assertEqual(it.config["FORGEJO_ORG_NAME"], "Hostea")
|
||||
self.assertEqual(it.config["SUPPORT_REPOSITORY"], "support")
|
||||
|
||||
def test_uri_builders(self):
|
||||
|
@ -51,10 +51,10 @@ class IssueTrackerTests(TestCase):
|
|||
"""
|
||||
it = IssueTracker()
|
||||
self.assertEqual(
|
||||
it.get_issue_tracker(), "https://gitea.gna.org/Hostea/support/issues"
|
||||
it.get_issue_tracker(), "https://forgejo.gna.org/Hostea/support/issues"
|
||||
)
|
||||
self.assertEqual(
|
||||
it.open_issue(), "https://gitea.gna.org/Hostea/support/issues/new"
|
||||
it.open_issue(), "https://forgejo.gna.org/Hostea/support/issues/new"
|
||||
)
|
||||
|
||||
|
||||
|
|
|
@ -24,9 +24,9 @@ class IssueTracker:
|
|||
|
||||
def __init__(self):
|
||||
self.config = settings.HOSTEA["META"]
|
||||
self.instance = urlparse(self.config["GITEA_INSTANCE"])
|
||||
self.instance = urlparse(self.config["FORGEJO_INSTANCE"])
|
||||
self.repo = (
|
||||
f"{self.config['GITEA_ORG_NAME']}/{self.config['SUPPORT_REPOSITORY']}"
|
||||
f"{self.config['FORGEJO_ORG_NAME']}/{self.config['SUPPORT_REPOSITORY']}"
|
||||
)
|
||||
self.issues = f"{self.repo}/issues"
|
||||
|
||||
|
|
Loading…
Reference in New Issue