- +
DISTRIBUTION CONTROL ROOM / LIVE CATALOG
-

Pakiety. Wersje.
Pełna kontrola.

-

Jedno miejsce dla wydań RustProxy na Linux, OPNsense i FreeBSD. Aktualne buildy, daty publikacji i gotowe instrukcje instalacji.

+

Packages. Versions.
Stay in control.

+

One place for RustProxy releases on Linux, OPNsense, and FreeBSD. Current builds, release dates, and ready-to-use install commands.

-
STATUS / LIVE DATA
ODCZYTYWANIE
Odświeżanie automatyczne co 60 sekund
+
STATUS / LIVE DATA
LOADING
Automatically refreshes every 60 seconds
-
NAJNOWSZE WYDANIE LINUXR / P — 01
+
LATEST RELEASE LINUXR / P — 01
RUSTPROXY / APPLICATION VERSION
—
-
ZBUDOWANO / OPUBLIKOWANOBrak informacji
+
BUILT / PUBLISHEDNot available
SOURCE COMMIT—
- +
BUILD PIPELINE READ ONLY
-

Od źródeł do gotowych paczek.

+

From source code to installable packages.

01Git / sourceRustProxy upstreamGIT ↗
02Build / packageRust + Go + FreeBSDCI ↗
-
03Signed repositoryAPT / RPM / PKGLIVE ●
+
03Repository publishAPT / RPM / PKGLIVE ●
- +
-
-
01 / PACZEK W KATALOGU—Wszystkie opublikowane artefakty
-
02 / AKTYWNE KANAŁY—Linux · OPNsense · FreeBSD
-
03 / OSTATNI BUILD—UTC / czas publikacji
-
04 / AKTUALNA WERSJA—Wersja aplikacji
+
+
01 / CATALOG PACKAGES—All published artifacts
+
02 / ACTIVE CHANNELS—Linux · OPNsense · FreeBSD
+
03 / LATEST BUILD—Latest publication time
+
04 / CURRENT VERSION—Application version
-
01 / RELEASE CHANNELS

Ostatnie buildy

-
Ładowanie kanałów…
+
01 / RELEASE CHANNELS

Latest builds

+
Loading channels…
-
02 / RECENT ARTIFACTS

Najnowsze paczki

+
02 / RECENT ARTIFACTS

Recent packages

-
PAKIETFORMAT / KANAŁWERSJA PACZKIDATA BUILDUPLIK
Ładowanie danych…
+
PACKAGEFORMAT / CHANNELPACKAGE VERSIONBUILD DATEFILE
Loading data…
RUSTPROXY / PACKAGE REGISTRYLive catalog · Python / Nginx · —
diff --git a/dashboard/web/style.css b/dashboard/web/style.css index af662e0..617c44e 100644 --- a/dashboard/web/style.css +++ b/dashboard/web/style.css @@ -246,6 +246,7 @@ h3{font-size:16px;font-weight:575;letter-spacing:-.3px} .code-window pre{color:var(--text);font:12px/1.9 var(--mono);overflow:auto;margin:0;padding:21px 24px;min-height:170px;tab-size:2;white-space:pre} .install-foot{display:flex;justify-content:space-between;gap:15px;margin-top:17px;color:var(--muted);font-size:11px} .install-extra-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:16px} +.install-extra-grid.single-card{grid-template-columns:1fr} .hint-card{padding:24px 26px} .hint-icon{display:grid;place-items:center;width:34px;height:34px;border:1px solid var(--pill-live-line);color:var(--green);font:11px var(--mono);margin-bottom:18px} .hint-card h3{margin-bottom:10px} diff --git a/tests/test_dashboard.py b/tests/test_dashboard.py index e7ca325..9b18e09 100644 --- a/tests/test_dashboard.py +++ b/tests/test_dashboard.py @@ -73,6 +73,17 @@ class CatalogTests(RepoFixture, unittest.TestCase): self.assertIn("/freebsd/FreeBSD%3A15%3Aamd64/",freebsd["download_url"]) self.assertEqual("2026-10-22T08:45:00Z",freebsd["built_at"]) + def test_discovery_agent_is_linux_only(self): + self.make_catalog() + self.make_file("opnsense/26.7/amd64/rustproxy-docker-agent-0.34.6_123.pkg") + self.make_file("freebsd/FreeBSD:15:amd64/rustproxy-docker-agent-0.34.6_123.pkg") + catalog = app.generate_catalog(self.repo) + self.assertEqual(6, catalog["summary"]["packages_count"]) + agents = [p for p in catalog["packages"] if p["name"] == "rustproxy-docker-agent"] + self.assertEqual(2, len(agents)) + self.assertEqual({"linux"}, {p["channel"] for p in agents}) + self.assertEqual({"DEB", "RPM"}, {p["format"] for p in agents}) + def test_mtime_backwards_compatibility(self): self.make_file("LINUX-BUILD-INFO.txt",contents="app_version=0.21.0\npackage_release=5\n") self.make_file("rpm/x86_64/rustproxy-0.21.0-5.x86_64.rpm") @@ -128,6 +139,19 @@ class HttpTests(RepoFixture, unittest.TestCase): self.addCleanup(self.server.shutdown) self.base = f"http://127.0.0.1:{self.server.server_port}" + def test_default_english_and_agent_markup(self): + with urlopen(self.base + "/freebsd/") as response: + html = response.read().decode("utf-8") + self.assertIn('Package catalog.', html) + self.assertIn('id="agent-card" hidden', html) + self.assertIn('data-site="freebsd"', html) + with urlopen(self.base + "/ui/app.js") as response: + js = response.read().decode("utf-8") + self.assertIn("new Intl.DateTimeFormat('en-GB'", js) + self.assertIn("el('agent-card').hidden = !hasDockerAgent", js) + self.assertIn("agent:null", js) + def test_http_catalog_page_assets_head(self): with urlopen(self.base + "/api/v1/packages") as response: self.assertIn("no-store",response.headers["Cache-Control"])