v0.27.0
This commit is contained in:
1 parent
a9f9450f80
commit
762eb9e28b
81 files changed
+1242
-1095
No files matched your search
+74
-38
@@ -24,7 +24,7 @@ def read_docker_agent_source() -> str:
|
||||
|
||||
preflight(root)
|
||||
manifest = tomllib.loads((root / "Cargo.toml").read_text())
|
||||
assert manifest["package"]["version"] == "0.26.7"
|
||||
assert manifest["package"]["version"] == "0.27.0"
|
||||
assert manifest["dependencies"]["quinn"]["version"] == "0.11.12"
|
||||
h3dep = manifest["dependencies"]["h3"]
|
||||
assert h3dep["package"] == "hpx-h3" and h3dep["version"] == "=2.5.19" and "quinn" in h3dep["features"]
|
||||
@@ -32,14 +32,14 @@ assert "h3-quinn" not in manifest["dependencies"]
|
||||
lock_path = root / "Cargo.lock"
|
||||
if lock_path.exists():
|
||||
lock = lock_path.read_text()
|
||||
assert 'name = "rust-proxy"\nversion = "0.26.7"' in lock
|
||||
assert 'name = "rust-proxy"\nversion = "0.27.0"' in lock
|
||||
assert 'name = "systemstat"' in lock and 'name = "metrics-process"' in lock and 'name = "sysinfo"' in lock, "Cargo.lock must be resolver-generated after adding cross-platform statistics libraries"
|
||||
for release_doc, marker in {
|
||||
"README.md": "# RustProxy 0.26.7",
|
||||
"CHANGELOG.md": "## 0.26.7",
|
||||
"ROADMAP.md": "## 0.26.7",
|
||||
"AGENTS.md": "Current source version: 0.26.7.",
|
||||
"docs/TEST_REPORT.md": "# Verification report - RustProxy 0.26.7",
|
||||
"README.md": "# RustProxy 0.27.0",
|
||||
"CHANGELOG.md": "## 0.27.0",
|
||||
"ROADMAP.md": "## 0.27.0",
|
||||
"AGENTS.md": "Current source version: 0.27.0.",
|
||||
"docs/TEST_REPORT.md": "# Verification report - RustProxy 0.27.0",
|
||||
}.items():
|
||||
assert marker in (root / release_doc).read_text(), f"stale release identity in {release_doc}"
|
||||
assert tomllib.loads((root / "rust-toolchain.toml").read_text())["toolchain"]["channel"] == "stable"
|
||||
@@ -73,7 +73,7 @@ for marker in [
|
||||
]:
|
||||
assert marker in update_check_source, marker
|
||||
assert 'pub last_error:' not in update_check_source, "update-check errors must not change dashboard/API state"
|
||||
for name in ["README.md", "ROADMAP.md", "AGENTS.md", "CHANGELOG.md", "UPDATE_CHECK.toml", "Dockerfile", ".dockerignore", "docs/TEST_REPORT.md", "docs/V0.24.8_AUDIT.md", "docs/V0.24.7_AUDIT.md", "docs/V0.24.6_AUDIT.md", "docs/V0.24.5_AUDIT.md", "docs/V0.24.1_AUDIT.md", "docs/V0.24.0_AUDIT.md", "docs/V0.23.2_AUDIT.md", "docs/V0.23.1_AUDIT.md", "docs/V0.22.3_AUDIT.md", "docs/LIVE_LOGS.md", "docs/README.md", "docs/API.md", "docs/ARCHITECTURE.md", "docs/WEB_SERVER.md", "docs/PHP_FPM.md", "docs/VHOSTS.md", "docs/STREAMS.md", "docs/REDIRECTS.md", "docs/CONTAINER.md", "docs/NPM_MIGRATION.md", "docs/DOCKER_DISCOVERY.md", "docker-agent/main.go", "docker-agent/main_test.go", "docker-agent/rustproxy-docker-agent.service", "docker-agent/docker-agent.env.example", "docker-agent/install.sh", "src/docker.rs", "src/admin/web/docker.js", "scripts/migrate_npm.py", "docs/CUSTOM_LOCATIONS.md", "nagios/README.md", "nagios/check_rustproxy.py", "nagios/check_rustproxy_api", "nagios/check_rustproxy_backends", "nagios/check_rustproxy_latency", "nagios/check_rustproxy_queues", "src/admin/web/error_401.html", "src/admin/web/error_404.html", "src/admin/web/streams.js", "src/admin/web/redirects.js", "src/admin/web/host404.js", "docs/NOT_FOUND_HOSTS.md", "debian/control", "debian/rules", "debian/rustproxy.service", "debian/rustproxy.logrotate", "debian/build-package.sh", "debian/build-repository.sh", "grafana/rustproxy-overview.json", "grafana/README.md"]:
|
||||
for name in ["README.md", "ROADMAP.md", "AGENTS.md", "CHANGELOG.md", "UPDATE_CHECK.toml", "Dockerfile", ".dockerignore", "docs/TEST_REPORT.md", "docs/V0.24.8_AUDIT.md", "docs/V0.24.7_AUDIT.md", "docs/V0.24.6_AUDIT.md", "docs/V0.24.5_AUDIT.md", "docs/V0.24.1_AUDIT.md", "docs/V0.24.0_AUDIT.md", "docs/V0.23.2_AUDIT.md", "docs/V0.23.1_AUDIT.md", "docs/V0.22.3_AUDIT.md", "docs/LIVE_LOGS.md", "docs/README.md", "docs/API.md", "docs/ARCHITECTURE.md", "docs/WEB_SERVER.md", "docs/PHP_FPM.md", "docs/VHOSTS.md", "docs/STREAMS.md", "docs/REDIRECTS.md", "docs/CONTAINER.md", "docs/NPM_MIGRATION.md", "docs/DOCKER_DISCOVERY.md", "docker-agent/main.go", "docker-agent/main_test.go", "docker-agent/rustproxy-docker-agent.service", "docker-agent/docker-agent.env.example", "docker-agent/install.sh", "src/docker.rs", "src/admin/web/docker.js", "scripts/migrate_npm.py", "docs/CUSTOM_LOCATIONS.md", "nagios/README.md", "nagios/check_rustproxy.py", "nagios/check_rustproxy_api", "nagios/check_rustproxy_backends", "nagios/check_rustproxy_latency", "nagios/check_rustproxy_queues", "src/admin/web/error_401.html", "src/admin/web/error_404.html", "src/admin/web/streams.js", "src/admin/web/redirects.js", "src/admin/web/host404.js", "docs/NOT_FOUND_HOSTS.md", "grafana/rustproxy-overview.json", "grafana/README.md"]:
|
||||
assert (root / name).is_file(), name
|
||||
npm_doc = (root / "docs/NPM_MIGRATION.md").read_text(encoding="utf-8")
|
||||
for marker in ["scripts/migrate_npm_core.py", "scripts/migrate_npm_api.py", '-v "$PWD/scripts:/rustproxy-scripts:ro"', "python /rustproxy-scripts/migrate_npm.py"]:
|
||||
@@ -104,7 +104,7 @@ for path in [root / "make_zip.py", *(root / "scripts").glob("*.py")]:
|
||||
ast.parse(path.read_text(), str(path))
|
||||
subprocess.run(["bash", "-n", str(root / "dev.sh")], check=True)
|
||||
subprocess.run(["bash", "-n", str(root / "upgrade.sh")], check=True)
|
||||
for name in ["install.sh", "install-debian13.sh", "update.sh", "debian/build-package.sh", "debian/build-repository.sh", "debian/rustproxy.postinst", "nagios/check_rustproxy_api", "nagios/check_rustproxy_backends", "nagios/check_rustproxy_latency", "nagios/check_rustproxy_queues", "docker-agent/install.sh"]:
|
||||
for name in ["install.sh", "install-debian13.sh", "update.sh", "nagios/check_rustproxy_api", "nagios/check_rustproxy_backends", "nagios/check_rustproxy_latency", "nagios/check_rustproxy_queues", "docker-agent/install.sh"]:
|
||||
subprocess.run(["bash", "-n", str(root / name)], check=True)
|
||||
bootstrap = (root / "install-debian13.sh").read_text()
|
||||
for marker in [
|
||||
@@ -124,7 +124,6 @@ assert dev.count('cargo generate-lockfile') == 1, "dev.sh must only create Cargo
|
||||
unit = (root / "deploy/rustproxy.service").read_text()
|
||||
assert "LogsDirectory=rustproxy" in unit and "/var/log/rustproxy" in unit
|
||||
assert "Environment=MALLOC_ARENA_MAX=2" in unit
|
||||
assert "Environment=MALLOC_ARENA_MAX=2" in (root / "debian/rustproxy.service").read_text()
|
||||
assert "Environment=MALLOC_ARENA_MAX=2" in read_deploy_source()
|
||||
assert not re.search(r"\b20\d{2}[-/]\d{1,2}[-/]\d{1,2}\b", (root / "CHANGELOG.md").read_text()), "changelog contains a release date"
|
||||
subprocess.run(["python3", str(root / "scripts/langs_check.py")], check=True)
|
||||
@@ -268,7 +267,7 @@ assert 'Opt-in health decisions based on ordinary user traffic. Defaults to disa
|
||||
assert '"force_ssl"' in openapi and '"forward_client_ip"' in openapi
|
||||
assert '"backend_header"' in openapi and '"backend_timing_header"' in openapi
|
||||
assert '"StreamMetrics"' in openapi and '"streams"' in openapi
|
||||
for marker in ['"version": "0.26.7"', '"/api/traffic"', '"capture_user_agent"', '"capture_country"', '"hot_auto_trim_enabled"', '"hot_auto_trim_after_seconds"', '"hot_auto_trim_target_percent"', '"/api/config/{section}"', '"ConfigSectionUpdate"', '"cold_on_idle"', '"cold_on_age"', '"cold_max_hot_seconds"', '"cold_on_lru"', '"cold_on_shutdown"', '"cold_gc_interval_seconds"', '"cold_gc_max_delete"', '"collapse_enabled"', '"collapse_wait_timeout_ms"', '"collapse_timeout_fallback"', '"stale_if_error_timeout"', '"stale_if_error_connection"', '"stale_if_error_dns"', '"stale_if_error_tls"', '"stale_if_error_statuses"', '"proactive_refresh_enabled"', '"proactive_refresh_before_expiry_seconds"', '"proactive_refresh_percent"', '"proactive_refresh_max_inflight"', '"TransformSettings"', '"TransformOverrides"', '"/api/cache/cold/cleanup"', '"/api/cache/invalidate"', '"/api/cache/bans"', '"/api/cache/bans/{id}"', '"CacheInvalidationRequest"', '"CacheInvalidationResponse"', '"ColdCleanupJob"', '"match_type"', '"regex_insensitive"', '"rewrite"', '"response"', '"covered_hosts"', '"default": true']:
|
||||
for marker in ['"version": "0.27.0"', '"/api/traffic"', '"capture_user_agent"', '"capture_country"', '"hot_auto_trim_enabled"', '"hot_auto_trim_after_seconds"', '"hot_auto_trim_target_percent"', '"/api/config/{section}"', '"ConfigSectionUpdate"', '"cold_on_idle"', '"cold_on_age"', '"cold_max_hot_seconds"', '"cold_on_lru"', '"cold_on_shutdown"', '"cold_gc_interval_seconds"', '"cold_gc_max_delete"', '"collapse_enabled"', '"collapse_wait_timeout_ms"', '"collapse_timeout_fallback"', '"stale_if_error_timeout"', '"stale_if_error_connection"', '"stale_if_error_dns"', '"stale_if_error_tls"', '"stale_if_error_statuses"', '"proactive_refresh_enabled"', '"proactive_refresh_before_expiry_seconds"', '"proactive_refresh_percent"', '"proactive_refresh_max_inflight"', '"TransformSettings"', '"TransformOverrides"', '"/api/cache/cold/cleanup"', '"/api/cache/invalidate"', '"/api/cache/bans"', '"/api/cache/bans/{id}"', '"CacheInvalidationRequest"', '"CacheInvalidationResponse"', '"ColdCleanupJob"', '"match_type"', '"regex_insensitive"', '"rewrite"', '"response"', '"covered_hosts"', '"default": true']:
|
||||
assert marker in openapi, marker
|
||||
for marker in ['"NotFoundHost"', '"not_found_hosts"', '"PrometheusSettings"', '"allow_trusted_network_without_token"', '"include_docker_vhosts"', '"include_streams"', '"include_logging"']:
|
||||
assert marker in openapi, marker
|
||||
@@ -395,7 +394,7 @@ for marker in ['effectiveCacheMemory', 'cacheMemoryHeadroom', 'cachePresetValues
|
||||
for marker in ['selectedTransformPreset', 'transformPresetValues', 'applyTransformPreset', 'updateTransformResourceSizing', 'memory_budget_bytes', 'max_inflight']:
|
||||
assert marker in js, marker
|
||||
assert 'envelope?.config.cache?.enabled === true && cacheToggle.value !== "off"' in vhosts_js
|
||||
for marker in ['transform: { enabled: false }', 'vhTransform', 'collectTransform']:
|
||||
for marker in ['transform: { enabled: false }', 'vhTransform', 'collectTransform', 'compression: { enabled: null, gzip: null, br: null, zstd: null, deflate: null }', 'vh-compression-enabled', 'vh-compression-zstd', 'vh-compression-br', 'vh-compression-gzip', 'vh-compression-deflate', 'collectCompression']:
|
||||
assert marker in vhosts_js, marker
|
||||
docker_js = (root / 'src/admin/web/docker.js').read_text()
|
||||
assert 'transform_enabled' in docker_js
|
||||
@@ -406,6 +405,9 @@ for marker in ['cp-hot-entries-meter', 'cp-memory', 'cp-cold-entries-meter', 'cp
|
||||
assert marker in html and marker in cache_panel_js, marker
|
||||
for marker in ['data.settings?.max_entries', 'data.settings?.cold_max_entries', 'data.settings?.cold_max_bytes', 'setMeter(']:
|
||||
assert marker in cache_panel_js, marker
|
||||
compact_css = css.replace(" ", "")
|
||||
for marker in ['progress::-webkit-progress-bar', 'progress::-webkit-progress-value', 'progress::-moz-progress-bar', '-webkit-appearance:none']:
|
||||
assert marker in compact_css, marker
|
||||
transform_panel_js = (root / 'src/admin/web/transform-panel.js').read_text()
|
||||
for marker in ['/api/transform', 'tp-cache-hits', 'transform-reason-list']:
|
||||
assert marker in transform_panel_js, marker
|
||||
@@ -752,21 +754,10 @@ assert 'minimal_welcome' in proxy_source and 'cache-control' in proxy_source
|
||||
make_zip = (root / "make_zip.py").read_text()
|
||||
for marker in ["SOURCE_DATE_EPOCH", "ZipInfo", "deterministic_mode", "compresslevel=9"]:
|
||||
assert marker in make_zip, marker
|
||||
assert "'debian'" in make_zip and "'grafana'" in make_zip and "'docker-agent'" in make_zip
|
||||
assert "'debian'" not in make_zip and "'grafana'" in make_zip and "'docker-agent'" in make_zip
|
||||
assert "'UPDATE_CHECK.toml'" in make_zip
|
||||
# Debian package contracts.
|
||||
debian_service = (root / 'debian/rustproxy.service').read_text()
|
||||
for marker in ['User=rustproxy', 'AmbientCapabilities=CAP_NET_BIND_SERVICE', 'StateDirectory=rustproxy', 'LogsDirectory=rustproxy', 'ProtectSystem=strict', 'RUST_PROXY_ADMIN_LISTEN']:
|
||||
if marker.startswith('RUST_PROXY_'):
|
||||
assert marker in (root / 'debian/rustproxy.environment').read_text(), marker
|
||||
else:
|
||||
assert marker in debian_service, marker
|
||||
logrotate = (root / 'debian/rustproxy.logrotate').read_text()
|
||||
for marker in ['daily', 'rotate 3', 'maxage 3', 'compresscmd /usr/bin/gzip', 'compressoptions -9', 'copytruncate', 'su rustproxy rustproxy']:
|
||||
assert marker in logrotate, marker
|
||||
repo_script = (root / 'debian/build-repository.sh').read_text()
|
||||
for marker in ['dpkg-scanpackages', 'apt-ftparchive', 'Packages.gz', 'RUSTPROXY_REPO_GPG_KEY', 'rustproxy.linuxiarz.pl']:
|
||||
assert marker in repo_script, marker
|
||||
# Debian packaging is maintained outside this source tree.
|
||||
assert not (root / 'debian').exists()
|
||||
grafana = json.loads((root / 'grafana/rustproxy-overview.json').read_text())
|
||||
assert grafana['uid'] == 'rustproxy-0170' and grafana['schemaVersion'] >= 39
|
||||
expressions = '\n'.join(target.get('expr','') for panel in grafana['panels'] for target in panel.get('targets',[]))
|
||||
@@ -776,7 +767,7 @@ assert any(variable.get('name') == 'traffic_vhost' for variable in grafana['temp
|
||||
assert any(panel.get('title') == 'Traffic analytics and Web Server' for panel in grafana['panels'])
|
||||
assert any(panel.get('title') == 'Traffic capture state' for panel in grafana['panels'])
|
||||
assert any(panel.get('title') == 'Top configured routes' for panel in grafana['panels'])
|
||||
# 0.19.0 compression/protocol/dashboard UX regressions.
|
||||
# 0.27.0 compression/protocol/dashboard UX regressions.
|
||||
compression_source = rust_source(root, "src/compression.rs")
|
||||
metrics_source = rust_source(root, "src/metrics.rs")
|
||||
admin_source = rust_source(root, "src/admin/mod.rs")
|
||||
@@ -784,21 +775,61 @@ style_source = (root / "src/admin/web/style.css").read_text()
|
||||
docker_ui = (root / "src/admin/web/docker.js").read_text()
|
||||
for marker in ["pub enum AppliedEncoding", "AppliedEncoding::Gzip", "AppliedEncoding::Brotli", "AppliedEncoding::Zstd", "AppliedEncoding::Deflate"]:
|
||||
assert marker in compression_source, marker
|
||||
assert "quality_weights_can_select_each_enabled_codec" in compression_source
|
||||
for marker in [
|
||||
"pub struct AllowCookie",
|
||||
'response.extensions().get::<AllowCookie>().is_none()',
|
||||
"cache_safe_cookie_marker_allows_compression_without_weakening_default_guard",
|
||||
"gzip: true", "br: true", "zstd: true", "deflate: false",
|
||||
"const PREFERENCE: [Self; 4] = [Self::Zstd, Self::Brotli, Self::Gzip, Self::Deflate]",
|
||||
"fn preferred_encoding", "pub struct Overrides", "pub fn scoped", "pub fn resolve",
|
||||
"defaults_enable_modern_compression_without_deflate",
|
||||
"equal_quality_uses_zstd_then_br_then_gzip_then_deflate",
|
||||
"quality_weights_win_before_server_priority",
|
||||
"cookies_authorization_and_private_cache_policy_do_not_disable_compression",
|
||||
"existing_content_encoding_is_never_recompressed",
|
||||
"no_transform_range_and_sse_are_not_compressed",
|
||||
"age_header_survives_downstream_compression",
|
||||
]:
|
||||
assert marker in compression_source, marker
|
||||
for forbidden in ["pub struct AllowCookie", "private_or_no_transform"]:
|
||||
assert forbidden not in compression_source, forbidden
|
||||
compression_finalize_source = rust_source(root, "src/proxy/upstream_helpers.rs")
|
||||
for marker in [
|
||||
'exchange.cache_status.load(Ordering::Relaxed) == 1',
|
||||
'response.extensions().get::<StaticSourceResponse>().is_some()',
|
||||
'.insert(crate::compression::AllowCookie)',
|
||||
"let global_compression = &snapshot.envelope.config.compression",
|
||||
"frontend.compression.resolve(global_compression, &compression)",
|
||||
"service.compression.resolve(global_compression, &compression)",
|
||||
]:
|
||||
assert marker in compression_finalize_source, marker
|
||||
assert "AllowCookie" not in compression_finalize_source
|
||||
openapi_0270 = json.loads((root / "src/admin/openapi.json").read_text())
|
||||
compression_override_properties = openapi_0270["components"]["schemas"]["CompressionOverrides"]["properties"]
|
||||
for prop in ["enabled", "zstd", "br", "gzip", "deflate"]:
|
||||
assert prop in compression_override_properties, prop
|
||||
docker_assignment_properties = openapi_0270["components"]["schemas"]["DockerAssignment"]["properties"]
|
||||
for prop in ["compression_enabled", "compression_zstd", "compression_br", "compression_gzip", "compression_deflate"]:
|
||||
assert prop in docker_assignment_properties, prop
|
||||
web_service_ui_0270 = (root / "src/admin/web/web-server.js").read_text()
|
||||
for marker in [
|
||||
'vh-compression-options',
|
||||
'compressionOptions.hidden = disabled',
|
||||
'input.disabled = disabled',
|
||||
]:
|
||||
assert marker in vhosts_js, marker
|
||||
for marker in [
|
||||
'const compressionFields = [[labeled("compressionZstd"',
|
||||
'field.hidden = disabled; control.disabled = disabled',
|
||||
]:
|
||||
assert marker in docker_ui, marker
|
||||
assert 'id="web-service-compression-options"' in html
|
||||
for marker in [
|
||||
'function syncCompression()',
|
||||
'$("web-service-compression-options").hidden = disabled',
|
||||
'$( `web-service-compression-${name}` ).disabled = disabled',
|
||||
'$("web-service-compression").addEventListener("change", syncCompression)',
|
||||
]:
|
||||
assert marker in web_service_ui_0270, marker
|
||||
settings_source_0270 = rust_source(root, "src/settings.rs")
|
||||
config_model_0270 = rust_source(root, "src/config/model.rs")
|
||||
for marker in ['mode: ServerMode::Custom', 'value: "RustProxy".into()', 'legacy_compat_default']:
|
||||
assert marker in settings_source_0270, marker
|
||||
assert 'default = "legacy_server_header_default"' in config_model_0270
|
||||
headers_source_0267 = rust_source(root, "src/headers.rs")
|
||||
vhost_core_0267 = (root / "src/admin/web/vhosts/core.js").read_text()
|
||||
for marker in [
|
||||
@@ -833,10 +864,15 @@ assert "dockerOpenApp" in docker_ui and "proxiedUrl(agent, hostname)" in docker_
|
||||
# 0.19.0 Docker-vhost controls: chip aliases, default agent ACL, redirect/WebSockets/cache.
|
||||
docker_source = rust_source(root, "src/docker.rs")
|
||||
management_ui = (root / "src/admin/web/management.js").read_text()
|
||||
for marker in ["function aliasEditor(", "host-chip-editor docker-alias-editor", ".docker-force-ssl", ".docker-websockets", ".docker-cache-enabled", ".docker-agent-acl-profile"]:
|
||||
for marker in ["function aliasEditor(", "host-chip-editor docker-alias-editor", ".docker-force-ssl", ".docker-websockets", ".docker-cache-enabled", ".docker-compression-enabled", ".docker-compression-zstd", ".docker-compression-br", ".docker-compression-gzip", ".docker-compression-deflate", ".docker-agent-acl-profile"]:
|
||||
assert marker in docker_ui, marker
|
||||
for marker in ['"force_ssl": assignment.force_ssl.unwrap_or(false)', '"websockets": assignment.websockets', '"cache": {"enabled": assignment.cache_enabled}', 'assignment.acl_profile_id.clone().or_else(|| agent.acl_profile_id.clone())']:
|
||||
for marker in ['"force_ssl": assignment.force_ssl.unwrap_or(false)', '"websockets": assignment.websockets', '"enabled": assignment.compression_enabled', '"zstd": assignment.compression_zstd', '"br": assignment.compression_br', '"gzip": assignment.compression_gzip', '"deflate": assignment.compression_deflate', '"cache": {"enabled": assignment.cache_enabled}', 'assignment.acl_profile_id.clone().or_else(|| agent.acl_profile_id.clone())', 'host.transient_unavailable = target.is_none()', 'inventory: previous_inventory']:
|
||||
assert marker in docker_source, marker
|
||||
for marker in ["published_assignment_stays_routable_as_503_when_service_is_missing", "failed_agent_observation_with_last_inventory_keeps_backend_materialized", "disabling_agent_stops_discovery_but_keeps_published_hostname_as_503"]:
|
||||
assert marker in docker_source, marker
|
||||
route_cache_0270 = rust_source(root, "src/proxy/forward/route_cache.rs")
|
||||
for marker in ['if route.unavailable', 'StatusCode::SERVICE_UNAVAILABLE', 'published Docker service is currently unavailable', 'retry-after']:
|
||||
assert marker in route_cache_0270, marker
|
||||
assert "agent.acl_profile_id === profile.id" in management_ui
|
||||
assert 'payload["backend_pool_domains"]' in admin_source and "status.backend_pool_domains" in vhosts_js
|
||||
assert 'body[data-density="compact"]' in style_source and '--ui-control: 22px' in style_source
|
||||
@@ -1285,7 +1321,7 @@ assert '"error_log" => {' not in admin_0241 and 'request("/api/config/error_log"
|
||||
assert '"error_log"' in openapi and 'logging, error_log, forwarding' not in openapi
|
||||
assert 'logging_section_persists_error_log_settings_atomically' in admin_0241 and 'error_log_is_not_a_standalone_configuration_section' in admin_0241
|
||||
assert 'location.pathname === "/logging"' in settings_js_0241
|
||||
assert '"RuntimeInformation"' in openapi and '"version": "0.26.7"' in openapi
|
||||
assert '"RuntimeInformation"' in openapi and '"version": "0.27.0"' in openapi
|
||||
|
||||
# 0.24.1 compiler and hostname-cardinality regressions.
|
||||
tls_0241 = rust_source(root, "src/tls.rs")
|
||||
@@ -1330,5 +1366,5 @@ for schema_name in ["RedirectHost", "NotFoundHost"]:
|
||||
node = openapi_0241["components"]["schemas"][schema_name]["properties"]["frontend"]["properties"]["hosts"]
|
||||
assert "maxItems" not in node, schema_name
|
||||
|
||||
print("PASS: 0.26.7 manifest/package, shared system-statistics/runtime metadata, Settings logging, retained H2, Debian/Grafana/Prometheus/404-host/custom-location/path/cache/dashboard/Nagios UI/source contracts, stopped legacy-renewal removal, session/admin/transport contracts, deterministic package source and embedded SQLite schema-v8 migrations.")
|
||||
print("PASS: 0.27.0 manifest/package, shared system-statistics/runtime metadata, Settings logging, retained H2, external-packaging/Grafana/Prometheus/404-host/custom-location/path/cache/dashboard/Nagios UI/source contracts, stopped legacy-renewal removal, session/admin/transport contracts, deterministic package source and embedded SQLite schema-v8 migrations.")
|
||||
print("NOT VERIFIED: Rust parsing, types, compilation, linking or runtime behavior. Run ./dev.sh test.")
|
||||
Reference in new issue
Block a user