mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-10-31 15:45:23 +00:00
chore: stop pushing the release- docker tag
This commit is contained in:
1 parent
0f5c2ac862
commit
0b41672a3c
4 files changed
+1
-109
No files matched your search
@@ -81,7 +81,7 @@ jobs:
|
|||||||
ALL_TAGS=()
|
ALL_TAGS=()
|
||||||
|
|
||||||
if [ "$BUILD_TYPE" = "Production" ]; then
|
if [ "$BUILD_TYPE" = "Production" ]; then
|
||||||
TAGS+=("release-$VERSION" "$VERSION" "latest")
|
TAGS+=("$VERSION" "latest")
|
||||||
elif [ "$BUILD_TYPE" = "Beta" ]; then
|
elif [ "$BUILD_TYPE" = "Beta" ]; then
|
||||||
TAGS+=("beta" "$VERSION")
|
TAGS+=("beta" "$VERSION")
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
const DONATION_MODAL_DELAY_MS = 30 * 24 * 60 * 60 * 1000;
|
|
||||||
|
|
||||||
export function shouldShowDonationModal(
|
|
||||||
registeredAt: string,
|
|
||||||
donationModalDismissed: boolean,
|
|
||||||
now: number = Date.now(),
|
|
||||||
): boolean {
|
|
||||||
if (donationModalDismissed) return false;
|
|
||||||
const registeredAtMs = Date.parse(registeredAt);
|
|
||||||
if (Number.isNaN(registeredAtMs)) return false;
|
|
||||||
return now - registeredAtMs >= DONATION_MODAL_DELAY_MS;
|
|
||||||
}
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
import { describe, it, expect } from "vitest";
|
|
||||||
import { shouldShowDonationModal } from "../../../database/routes/donation-modal-utils.js";
|
|
||||||
|
|
||||||
describe("shouldShowDonationModal", () => {
|
|
||||||
const now = Date.parse("2026-07-17T00:00:00.000Z");
|
|
||||||
|
|
||||||
it("returns false when the user already dismissed it", () => {
|
|
||||||
const registeredAt = new Date(now - 60 * 24 * 60 * 60 * 1000).toISOString();
|
|
||||||
expect(shouldShowDonationModal(registeredAt, true, now)).toBe(false);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("returns false before the 30 day mark", () => {
|
|
||||||
const registeredAt = new Date(now - 29 * 24 * 60 * 60 * 1000).toISOString();
|
|
||||||
expect(shouldShowDonationModal(registeredAt, false, now)).toBe(false);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("returns true at exactly 30 days", () => {
|
|
||||||
const registeredAt = new Date(now - 30 * 24 * 60 * 60 * 1000).toISOString();
|
|
||||||
expect(shouldShowDonationModal(registeredAt, false, now)).toBe(true);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("returns true well past the 30 day mark", () => {
|
|
||||||
const registeredAt = new Date(
|
|
||||||
now - 200 * 24 * 60 * 60 * 1000,
|
|
||||||
).toISOString();
|
|
||||||
expect(shouldShowDonationModal(registeredAt, false, now)).toBe(true);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("returns false for an unparseable registeredAt", () => {
|
|
||||||
expect(shouldShowDonationModal("not-a-date", false, now)).toBe(false);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("treats a backdated registeredAt for pre-existing users as immediately eligible", () => {
|
|
||||||
const registeredAt = new Date(now - 31 * 24 * 60 * 60 * 1000).toISOString();
|
|
||||||
expect(shouldShowDonationModal(registeredAt, false, now)).toBe(true);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
import React from "react";
|
|
||||||
import { useTranslation } from "react-i18next";
|
|
||||||
import {
|
|
||||||
Dialog,
|
|
||||||
DialogContent,
|
|
||||||
DialogDescription,
|
|
||||||
DialogFooter,
|
|
||||||
DialogHeader,
|
|
||||||
DialogTitle,
|
|
||||||
} from "@/components/dialog.tsx";
|
|
||||||
import { Button } from "@/components/button.tsx";
|
|
||||||
|
|
||||||
const DONATE_URL = "https://donate.termix.site/donate/";
|
|
||||||
|
|
||||||
interface DonationReminderModalProps {
|
|
||||||
open: boolean;
|
|
||||||
onDismiss: () => void;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function DonationReminderModal({
|
|
||||||
open,
|
|
||||||
onDismiss,
|
|
||||||
}: DonationReminderModalProps) {
|
|
||||||
const { t } = useTranslation();
|
|
||||||
|
|
||||||
const handleDonate = () => {
|
|
||||||
window.open(DONATE_URL, "_blank", "noopener,noreferrer");
|
|
||||||
onDismiss();
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Dialog
|
|
||||||
open={open}
|
|
||||||
onOpenChange={(next) => {
|
|
||||||
if (!next) onDismiss();
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<DialogContent>
|
|
||||||
<DialogHeader>
|
|
||||||
<DialogTitle>{t("donation.title")}</DialogTitle>
|
|
||||||
<DialogDescription>{t("donation.body")}</DialogDescription>
|
|
||||||
<DialogDescription>{t("donation.milestones")}</DialogDescription>
|
|
||||||
</DialogHeader>
|
|
||||||
<DialogFooter>
|
|
||||||
<Button variant="outline" onClick={onDismiss}>
|
|
||||||
{t("donation.dismiss")}
|
|
||||||
</Button>
|
|
||||||
<Button
|
|
||||||
variant="outline"
|
|
||||||
onClick={handleDonate}
|
|
||||||
className="border-accent-brand/40 text-accent-brand hover:bg-accent-brand/10 hover:text-accent-brand dark:border-accent-brand/40 dark:bg-transparent dark:hover:bg-accent-brand/10"
|
|
||||||
>
|
|
||||||
{t("donation.cta")}
|
|
||||||
</Button>
|
|
||||||
</DialogFooter>
|
|
||||||
</DialogContent>
|
|
||||||
</Dialog>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
Reference in new issue
Block a user