mirror of
https://github.com/hanzoai/o11y.git
synced 2026-11-03 02:04:48 +00:00
* debrand: signoz/SigNoz/SIGNOZ -> o11y/O11y/O11Y across the tree Rename all SigNoz *branding* to O11y in file contents, file/dir names, package names, env vars, config keys, comments, docs, SDK code, and the ClickHouse schema identifiers the querier reads. Collector dependency: - Repoint github.com/hanzoai/signoz-otel-collector -> github.com/hanzoai/otel-collector and bump v0.144.6 -> v0.144.7 (go.mod + go.sum reconciled via go mod tidy). Internal package paths also debranded upstream: signozschemamigrator -> o11yschemamigrator, signozlogspipelineprocessor -> o11ylogspipelineprocessor. - Fix: v0.144.7 dropped otelconst.DistributedFieldKeysTable from the collector's public constants; pin FieldKeysTable = "distributed_field_keys" locally in pkg/telemetrymetadata/tables.go. Package/dir renames (package decl + all importers): pkg/apiserver/signozapiserver -> o11yapiserver, plus signozalertmanager, signozauthzapi, signozglobal, signozquerier, signozruler, and pkg/signoz -> pkg/o11y. Schema (read plane): signoz_traces/metrics/logs/metadata/analytics/meter and signoz_index_v3/index_v2/error_index_v2/spans (+ distributed_*) -> o11y_*. Data-preserving cutover migration added: deploy/clickhouse/migrations/0001_rename_signoz_to_o11y.sql (metadata-only RENAME DATABASE/TABLE, no drop/recreate). Preserved (attribution / external / wire contracts): - LICENSE + NOTICE verbatim (incl. "software from SigNoz", "Copyright ... SigNoz Inc."). - Upstream github.com/SigNoz/* repo URLs + @SigNoz/* CODEOWNERS teams. - Billing resource-attribute regex "signoz.workspace.*" (external wire contract). go build ./pkg/... ./cmd/... = 0; gofmt clean; renamed+schema pkg tests pass. * o11y: bump collector to v0.144.8 (o11y_* physical schema writer) + lockstep deploy plan Collector v0.144.8's schema-migrator + exporters now CREATE/WRITE the same o11y_* physical databases/tables the querier reads and the RENAME migration (0001_rename_signoz_to_o11y.sql) targets. Cross-checked byte-identical: writer DB set == migration target DB set (6); writer prefixed-table set == migration target table set (8); o11y querier reads and cloud reads are subsets of that set. Zero table-name mismatches between writer, readers, and migration. Collector go.mod unchanged between v0.144.7 and v0.144.8 (identical go.mod hash) — pure source rename, no module-graph change. Adds deploy/clickhouse/DEPLOY_signoz_to_o11y_cutover.md: the lockstep order (collector v0.144.8 -> RENAME migration -> o11y+cloud readers) with a fresh/scratch-ClickHouse pre-flight (create via migrator, emit trace+metric, query back) and rollback. Ships together or telemetry blackholes. go build ./pkg/... ./cmd/community = 0.
126 lines
3.9 KiB
JavaScript
126 lines
3.9 KiB
JavaScript
/**
|
|
* Stylelint rule: local/no-unsupported-asset-url
|
|
*
|
|
* Disallows asset URLs in CSS `url()` declarations that are not base-path-safe.
|
|
* When O11y is served from a sub-path (e.g. /app/), absolute and public-dir
|
|
* relative paths break because they bypass Vite's module pipeline and don't get
|
|
* the runtime base-path prefix.
|
|
*
|
|
* Flagged patterns:
|
|
* - Absolute paths: url('/icons/logo.svg')
|
|
* - Public-relative paths: url('../public/icons/logo.svg')
|
|
* - Public-dir segments: url('Icons/logo.svg') (resolves from public/)
|
|
*
|
|
* Required pattern (base-path-safe):
|
|
* - src/assets ES import: import logo from '../../assets/icons/logo.svg'
|
|
* then reference via the imported variable in JS/TS.
|
|
* - Relative from src/assets in SCSS: url('../../assets/icons/logo.svg')
|
|
*
|
|
* See: https://vitejs.dev/guide/assets (Static Asset Handling)
|
|
*/
|
|
import stylelint from 'stylelint';
|
|
import {
|
|
containsAssetExtension,
|
|
isAbsolutePath,
|
|
isPublicRelative,
|
|
isRelativePublicDir,
|
|
} from '../plugins/rules/shared/asset-patterns.mjs';
|
|
|
|
const ruleName = 'local/no-unsupported-asset-url';
|
|
|
|
/**
|
|
* Extracts all url() inner path strings from a CSS declaration value.
|
|
* Handles single-quoted, double-quoted, and unquoted url() forms.
|
|
* e.g. "url('/a.svg') url('/b.png') repeat" → ['/a.svg', '/b.png']
|
|
*/
|
|
function extractUrlPaths(value) {
|
|
if (typeof value !== 'string') {
|
|
return [];
|
|
}
|
|
const paths = [];
|
|
const urlPattern = /url\(\s*['"]?([^'")\s]+)['"]?\s*\)/g;
|
|
let match = urlPattern.exec(value);
|
|
while (match !== null) {
|
|
paths.push(match[1]);
|
|
match = urlPattern.exec(value);
|
|
}
|
|
return paths;
|
|
}
|
|
|
|
const meta = {};
|
|
|
|
const messages = stylelint.utils.ruleMessages(ruleName, {
|
|
absolutePath: (urlPath) =>
|
|
`Absolute asset path "${urlPath}" in url() is not base-path-safe. ` +
|
|
`Use a relative path from src/assets/ instead: url('../../assets/...')`,
|
|
publicPath: () =>
|
|
`Assets in public/ bypass Vite's module pipeline — their URLs are not base-path-aware and will break when the app is served from a sub-path (e.g. /app/). ` +
|
|
`Use a relative path from src/assets/ instead: url('../../assets/...')`,
|
|
relativePath: (urlPath) =>
|
|
`Relative public-dir path "${urlPath}" in url() is not base-path-safe. ` +
|
|
`Use a relative path from src/assets/ instead: url('../../assets/...')`,
|
|
});
|
|
|
|
/**
|
|
* Rule implementation. Walks every CSS declaration in the file and checks
|
|
* each url() path against three forbidden patterns (absolute, public-relative,
|
|
* public-dir segment). Reports a violation with a fix hint for each match.
|
|
*
|
|
* `primaryOption` is the value from the stylelint config — the rule is a no-op
|
|
* when falsy (i.e. `"local/no-unsupported-asset-url": [false]`).
|
|
*
|
|
* @type {import('stylelint').Rule}
|
|
*/
|
|
const rule = (primaryOption) => {
|
|
return (root, result) => {
|
|
if (!primaryOption) {
|
|
return;
|
|
}
|
|
|
|
root.walkDecls((decl) => {
|
|
const urlPaths = extractUrlPaths(decl.value);
|
|
|
|
for (const urlPath of urlPaths) {
|
|
// Pattern #1: absolute path with asset extension
|
|
if (isAbsolutePath(urlPath) && containsAssetExtension(urlPath)) {
|
|
stylelint.utils.report({
|
|
message: messages.absolutePath(urlPath),
|
|
node: decl,
|
|
result,
|
|
ruleName,
|
|
});
|
|
continue;
|
|
}
|
|
|
|
// Pattern #2: relative path into public/ with asset extension
|
|
if (isPublicRelative(urlPath) && containsAssetExtension(urlPath)) {
|
|
stylelint.utils.report({
|
|
message: messages.publicPath(),
|
|
node: decl,
|
|
result,
|
|
ruleName,
|
|
});
|
|
continue;
|
|
}
|
|
|
|
// Pattern #3: relative public-dir segment, e.g. url('Icons/foo.svg')
|
|
if (isRelativePublicDir(urlPath) && containsAssetExtension(urlPath)) {
|
|
stylelint.utils.report({
|
|
message: messages.relativePath(urlPath),
|
|
node: decl,
|
|
result,
|
|
ruleName,
|
|
});
|
|
}
|
|
}
|
|
});
|
|
};
|
|
};
|
|
|
|
rule.ruleName = ruleName;
|
|
rule.messages = messages;
|
|
rule.meta = meta;
|
|
|
|
export { ruleName, rule, meta };
|
|
export default { ruleName, rule, meta };
|