Show if deployment succeeded (#283)

Show which services deployed and if so, the urls

Co-authored-by: kevin <kevin@procolix.com>
Reviewed-on: Fediversity/Fediversity#283
Reviewed-by: kiara Grouwstra <kiara@procolix.eu>
Co-authored-by: lois <lois@procolix.eu>
Co-committed-by: lois <lois@procolix.eu>
This commit is contained in:
Lois Verheij 2025-03-28 13:36:02 +01:00 committed by Kevin Muller
parent e25ff10872
commit 88674c8efc
3 changed files with 42 additions and 11 deletions

View file

@ -9,7 +9,8 @@
hx-trigger="click" hx-trigger="click"
hx-indicator="#spinner-container" hx-indicator="#spinner-container"
hx-disabled-elt="this" hx-disabled-elt="this"
hx-swap="none" hx-target="#deployment-result"
hx-swap="innerHTML"
name="deploy"> name="deploy">
Deploy Deploy
</button> </button>
@ -19,5 +20,8 @@
<div id="spinner-container" class="htmx-indicator"> <div id="spinner-container" class="htmx-indicator">
<span class="loader"></span> <span class="loader"></span>
</div> </div>
<div id="deployment-result">
</div>
</form> </form>
{% endblock %} {% endblock %}

View file

@ -0,0 +1,13 @@
{% if deployment_status %}
<p>{{ deployment_status }}</p>
<ul>
{% for service, state in services.items %}
{% if state %}
<li>
✓ {{ service }}
</li>
{% endif %}
{% endfor %}
</ul>
{% endif %}

View file

@ -9,10 +9,11 @@ from django.contrib.auth.models import User
from django.views.generic import TemplateView, DetailView from django.views.generic import TemplateView, DetailView
from django.views.generic.edit import FormView from django.views.generic.edit import FormView
from django.shortcuts import render
from panel import models, settings from panel import models, settings
from panel import models
from panel.configuration import forms from panel.configuration import forms
class Index(TemplateView): class Index(TemplateView):
template_name = 'index.html' template_name = 'index.html'
@ -82,6 +83,7 @@ class ConfigurationForm(LoginRequiredMixin, FormView):
initial.update(self.convert_enums_to_names(config_dict)) initial.update(self.convert_enums_to_names(config_dict))
return initial return initial
class Save(ConfigurationForm): class Save(ConfigurationForm):
def form_valid(self, form): def form_valid(self, form):
obj = self.get_object() obj = self.get_object()
@ -90,6 +92,7 @@ class Save(ConfigurationForm):
return super().form_valid(form) return super().form_valid(form)
class DeploymentStatus(ConfigurationForm): class DeploymentStatus(ConfigurationForm):
def form_valid(self, form): def form_valid(self, form):
obj = self.get_object() obj = self.get_object()
@ -98,27 +101,38 @@ class DeploymentStatus(ConfigurationForm):
# Check for deploy button # Check for deploy button
if "deploy" in self.request.POST.keys(): if "deploy" in self.request.POST.keys():
self.deployment(obj) deployment_result, deployment_params = self.deployment(obj)
if deployment_result.returncode == 0:
deployment_status = "Deployment Succeeded"
else:
deployment_status = "Deployment Failed"
return super().form_valid(form) return render(self.request, "partials/deployment_result.html", {
"deployment_status": deployment_status,
"services": {
"peertube": deployment_params['peertube']['enable'],
"pixelfed": deployment_params['pixelfed']['enable'],
"mastodon": deployment_params['mastodon']['enable']
}
})
def deployment(self, obj): def deployment(self, obj):
submission = obj.parsed_value.model_dump_json() submission = obj.parsed_value.model_dump_json()
# FIXME: let the user specify these from the form (#190) # FIXME: let the user specify these from the form (#190)
dummy_user = { dummy_user = {
"initialUser": { "initialUser": {
"displayName": "Testy McTestface", "displayName": "Testy McTestface",
"username": "test", "username": "test",
"password": "testtest", "password": "testtest",
"email": "test@test.com", "email": "test@test.com",
}, },
} }
# serialize back and forth now we still need to manually inject the dummy user # serialize back and forth now we still need to manually inject the dummy user
deployment = json.dumps(dummy_user | json.loads(submission)) deployment_params = json.dumps(dummy_user | json.loads(submission))
env = { env = {
"PATH": settings.bin_path, "PATH": settings.bin_path,
# pass in form info to our deployment # pass in form info to our deployment
"DEPLOYMENT": deployment, "DEPLOYMENT": deployment_params,
} }
cmd = [ cmd = [
"nix", "nix",
@ -135,4 +149,4 @@ class DeploymentStatus(ConfigurationForm):
cwd=settings.repo_dir, cwd=settings.repo_dir,
env=env, env=env,
) )
return deployment_result return deployment_result, json.loads(deployment_params)