7 Commits

Author SHA1 Message Date
1b775a130b Release 26.1.14.post0
All checks were successful
Production deployment / Build (release) Successful in 1m58s
Staging deployment / Build (release) Successful in 2m0s
CI / Checks (push) Successful in 4m43s
Staging deployment / Deploy (release) Successful in 1m56s
Production deployment / Deploy (release) Successful in 2m25s
2026-01-14 21:24:09 +01:00
bcef0d2d09 BTHLABS-0000: Fixed DB host resolution post VPN migration 2026-01-14 21:23:15 +01:00
9f121a0ceb Release v26.1.14
Some checks failed
CI / Checks (push) Successful in 1m50s
Production deployment / Build (release) Successful in 58s
Staging deployment / Build (release) Successful in 59s
Staging deployment / Deploy (release) Successful in 1m45s
Production deployment / Deploy (release) Failing after 4m29s
2026-01-14 20:59:08 +01:00
d16f0cd957 BTHLABS-81: OG Properties on Share Association page
Co-authored-by: Tomek Wójcik <labs@tomekwojcik.pl>
Co-committed-by: Tomek Wójcik <labs@tomekwojcik.pl>
2026-01-14 20:53:46 +01:00
98e5e1891a Release v25.12.04
All checks were successful
CI / Checks (push) Successful in 2m14s
Production deployment / Build (release) Successful in 26s
Staging deployment / Build (release) Successful in 50s
Staging deployment / Deploy (release) Successful in 1m19s
Production deployment / Deploy (release) Successful in 2m17s
2025-12-04 20:57:48 +01:00
06343e6ed3 BTHLABS-0000: Tweaking association card's layout 2025-12-04 20:55:55 +01:00
82a3b612ec BTHLABS-0000: Fix YT embed code 2025-12-04 20:46:38 +01:00
12 changed files with 57 additions and 16 deletions

View File

@@ -8,7 +8,7 @@ hotpocket_app:
node: "home.vm.snakeweb.net"
docker:
extra_hosts:
- "home.vm:10.0.1.2"
- "home.vm:10.16.1.100"
backend:
image_tag: "{{ hotpocket_app_image_tag|default('deployment-v25.10.21-01') }}"
database:

View File

@@ -1,4 +1,4 @@
# -*- coding: utf-8 -*-
from __future__ import annotations
version = '25.11.26'
version = '26.1.14.post0'

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

View File

@@ -16,7 +16,7 @@
{% endif %}
</div>
<div class="card-footer d-flex align-items-center">
<a href="{{ association.target.url }}" target="_blank" rel="noopener noreferrer"><small>{{ association.target.url|render_url_domain }}</small></a>
<a href="{{ association.target.url }}" target="_blank" rel="noopener noreferrer"><small>{{ association.target.url|render_url_domain }} <i class="bi bi-box-arrow-up-right"></i></small></a>
<div class="ms-auto flex-shrink-0 d-flex align-items-center">
{% if not association.archived_at %}
<div class="spinner-border spinner-border-sm ui-htmx-indicator" role="status">

View File

@@ -2,10 +2,24 @@
{% load i18n static ui %}
{% block title %}{{ association.title }}{% endblock %}
{% block title %}{% if association.title %}{{ association.title }}{% else %}{{ association.target.url }}{% endif %}{% endblock %}
{% block button_bar_class %}d-none{% endblock %}
{% block page_head %}
{{ block.super}}
<meta property="og:title" content="{% if association.title %}{{ association.title }}{% else %}{{ association.target.url }}{% endif %}">
{% if association.description %}
<meta property="og:description" content="{{ association.description|truncatechars:125 }}">
{% endif %}
<meta property="og:image" content="{{ og_card_url }}">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:url" content="{{ share_url }}">
<meta property="og:type" content="website">
<meta property="og:site_name" content="{{ SITE_TITLE }}">
{% endblock %}
{% block page_body %}
<div id="ViewAssociationView" class="container pb-3">
<p class="display-3 mt-3 mb-0 text-center">

View File

@@ -3,11 +3,13 @@
{% if save.is_youtube_video %}
<div class="mb-0 d-flex justify-content-center">
<iframe
allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allow="accelerometer *; clipboard-write *; encrypted-media *; gyroscope *; picture-in-picture *; web-share *;"
allowfullscreen
class="ui-youtube-iframe"
frameborder="0"
height="200"
referrerpolicy="strict-origin"
scrolling="no"
src="{{ save|render_youtube_embed_url }}"
title="YouTube video player"
width="320"

View File

@@ -8,6 +8,7 @@ from django.contrib import messages
import django.db
from django.http import HttpRequest, HttpResponse, JsonResponse
from django.shortcuts import redirect, render
from django.templatetags.static import static
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from django.views.generic import FormView, View
@@ -198,12 +199,18 @@ def view(request: HttpRequest, pk: uuid.UUID) -> HttpResponse:
if is_share is True:
show_controls = show_controls and False
share_url = reverse(
'ui.associations.view',
args=(association.pk,),
query=[
('share', 'true'),
],
share_url = request.build_absolute_uri(
reverse(
'ui.associations.view',
args=(association.pk,),
query=[
('share', 'true'),
],
),
)
og_card_url = request.build_absolute_uri(
static('ui/img/og-card.png'),
)
return render(
@@ -213,6 +220,12 @@ def view(request: HttpRequest, pk: uuid.UUID) -> HttpResponse:
'association': association,
'show_controls': show_controls,
'share_url': share_url,
'is_share': is_share,
'og_card_url': (
og_card_url
if is_share is True
else None
),
},
)

View File

@@ -13,7 +13,7 @@ cat <<EOF
|_|
production
HotPocket v25.11.26 [${HOTPOCKET_BACKEND_IMAGE_ID}] (https://hotpocket.app/)
HotPocket v26.1.14.post0 [${HOTPOCKET_BACKEND_IMAGE_ID}] (https://hotpocket.app/)
Copyright 2025-present by BTHLabs. All rights reserved. (https://bthlabs.pl/)
Licensed under Apache-2.0
EOF

View File

@@ -1,6 +1,6 @@
{
"name": "hotpocket-backend",
"version": "25.11.26",
"version": "26.1.14.post0",
"description": "HotPocket Backend",
"main": "hotpocket_backend/apps/frontend/src/index.js",
"repository": "https://git.bthlabs.pl/tomekwojcik/hotpocket",

View File

@@ -1,6 +1,6 @@
[tool.poetry]
name = "hotpocket-backend"
version = "25.11.26"
version = "26.1.14.post0"
description = "HotPocket Backend"
authors = ["Tomek Wójcik <contact@bthlabs.pl>"]
license = "Apache-2.0"

View File

@@ -103,7 +103,7 @@ def ci(ctx: Context):
@task
def setup(ctx: Context):
ctx.run('python manage.py migrate')
ctx.run('python manage.py create_initial_account hotpocket hotpocketm4st3r')
ctx.run('python manage.py create_initial_account -u hotpocket -p hotpocketm4st3r')
if WORKSPACE_MODE == WorkspaceMode.METAL:
ctx.run('mkdir -p run/uploads')

View File

@@ -28,13 +28,15 @@ def test_authenticated_ok(authenticated_client: Client,
assert result.context['association'].target.pk == association_out.target.pk
assert result.context['show_controls'] is True
assert 'share_url' in result.context
assert result.context['is_share'] is False
assert result.context['og_card_url'] is None
expected_share_url = reverse(
'ui.associations.view',
args=(association_out.pk,),
query=[('share', 'true')],
)
assert result.context['share_url'] == expected_share_url
assert result.context['share_url'].endswith(expected_share_url)
@pytest.mark.django_db
@@ -126,6 +128,16 @@ def test_authenticated_share_ok(authenticated_client: Client,
assert hasattr(result.context['association'], 'target') is True
assert result.context['association'].target.pk == other_account_association_out.target.pk
assert result.context['show_controls'] is False
assert 'share_url' in result.context
assert result.context['is_share'] is True
assert result.context['og_card_url'] is not None
expected_share_url = reverse(
'ui.associations.view',
args=(other_account_association_out.pk,),
query=[('share', 'true')],
)
assert result.context['share_url'].endswith(expected_share_url)
@pytest.mark.django_db