Repository files navigation

xtralink

xtralink synchronizes content from external sources into a local target directory. Currently supported package types:

  • GIT
  • OCI
  • S3

Main commands live under pkg:

  • pkg pull (synchronize configured packages)
  • pkg push (synchronize one package by id and push it as OCI artifact)
  • pkg inspect (analyze one package and print JSON report)

What does the tool do?

  • Reads a YAML control configuration (.xtralink.yml).
  • Processes all entries under packages.
  • Fetches/updates content depending on the remote type.
  • Mirrors the result into your target (targetDir + localPath).

Configuration schema

targetDir: .packages:
- type: GIT|OCI|S3id: "..."url: "..."tag: "..."# optional (e.g. branch/tag/ref)user: "..."# optionalpassword: "..."# optionalpath: "..."# optional, directory subpath onlylocalPath: "..."# optional, target path relative to targetDir (default: id)

Important fields

  • targetDir: Base target directory for all remotes.
  • localPath: Optional target path relative to targetDir.
    • Default: the package id.
  • path: optional subdirectory in the remote content.
    • Must point to a directory (not a single file).
  • id: Used to resolve matching credentials from env (USER_<ID>, PASSWORD_<ID>).

Credentials (GIT / OCI / S3)

For all three drivers (GIT, OCI, S3), the same precedence applies:

  1. user / password directly in the corresponding remote block (control config).
  2. If empty there: environment variables USER_<ID> / PASSWORD_<ID>.

Resolution of USER_<ID> / PASSWORD_<ID> is performed centrally while loading the configuration (app/settings.go). Drivers then only use already-resolved values in remote.user and remote.password.

Example for id: bplan:

  • USER_BPLAN
  • PASSWORD_BPLAN

If a .env file exists in the project directory, xtralink loads it automatically. So you can define credentials there (e.g. USER_BPLAN=...) without needing shell export commands.

Examples by type

GIT

targetDir: .packages:
- type: GITid: git-baseurl: https://github.com/example/repo.gittag: mainpath: configs/baselocalPath: config/synced/repo-base

OCI

targetDir: .packages:
- type: OCIid: talosurl: oci://ghcr.io/example/repotag: "0.9.3"user: "<github-user>"password: "<pat>"localPath: config/synced/oci-example-repo

S3

targetDir: .packages:
- type: S3id: bplanurl: https://s3.example.net/my-bucketpath: folder/subfolderlocalPath: config/synced/s3-data

S3 note: Access Key / Secret must be provided as user / password.

Run

--config is optional. If omitted, the default config file is .xtralink.yml.

Pull all configured packages (default config .xtralink.yml):

xtralink pkg pull

Pull only one package by id:

xtralink pkg pull bplan

Pull all packages with custom config:

xtralink --config config/exampleConfig.yaml pkg pull

Inspect one package and print a JSON report:

xtralink pkg inspect bplan

pkg inspect currently reports:

  • entities
    • service/provider type counts
  • substitutions
    • all detected ${...} placeholders in YAML files
    • includes file, path, name, and optional default
  • data-sources
    • detected sources from resources/features and db
    • usage detection based on provider configs under entities/instances/providers
    • source classes currently include GPKG, PGIS/DUMP, and PGIS/REF
    • when resolving data-source related values from YAML, substitution defaults are used if available

Push command (pkg push)

With pkg push, you select a package by id from the control configuration. That package is first synchronized locally (same as pkg pull). Then the local content is packaged as ZIP and pushed as an OCI artifact.

  • Target registry/repository is provided as positional <image> argument (e.g. ghcr.io/org/name)
  • Artifact Type: application/vnd.iide.xtrapkg

Example:

xtralink pkg push bplan ghcr.io/my-org/my-bplan:latest

Important: for pkg push, pass image as registry/path/name[:tag]withoutoci:// prefix. So use ghcr.io/org/repo:tag, not oci://ghcr.io/org/repo:tag.

Useful paths and test commands

Git cache directory:

echo"$TMPDIR"xtralink-cache/git

Run integration tests in drivers package:

go test ./lib/drivers -run TestIntegrationSync_ -v -count=1

Note: Push credentials are resolved the same way as in the drivers:

  1. user / password in the remote block
  2. otherwise USER_<ID> / PASSWORD_<ID> from env or .env

About

A cloud native glue tool

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

xtralink

xtralink synchronizes content from external sources into a local target directory. Currently supported package types:

  • GIT
  • OCI
  • S3

Main commands live under pkg:

  • pkg pull (synchronize configured packages)
  • pkg push (synchronize one package by id and push it as OCI artifact)
  • pkg inspect (analyze one package and print JSON report)

What does the tool do?

  • Reads a YAML control configuration (.xtralink.yml).
  • Processes all entries under packages.
  • Fetches/updates content depending on the remote type.
  • Mirrors the result into your target (targetDir + localPath).

Configuration schema

targetDir: .packages:
- type: GIT|OCI|S3id: "..."url: "..."tag: "..."# optional (e.g. branch/tag/ref)user: "..."# optionalpassword: "..."# optionalpath: "..."# optional, directory subpath onlylocalPath: "..."# optional, target path relative to targetDir (default: id)

Important fields

  • targetDir: Base target directory for all remotes.
  • localPath: Optional target path relative to targetDir.
    • Default: the package id.
  • path: optional subdirectory in the remote content.
    • Must point to a directory (not a single file).
  • id: Used to resolve matching credentials from env (USER_<ID>, PASSWORD_<ID>).

Credentials (GIT / OCI / S3)

For all three drivers (GIT, OCI, S3), the same precedence applies:

  1. user / password directly in the corresponding remote block (control config).
  2. If empty there: environment variables USER_<ID> / PASSWORD_<ID>.

Resolution of USER_<ID> / PASSWORD_<ID> is performed centrally while loading the configuration (app/settings.go). Drivers then only use already-resolved values in remote.user and remote.password.

Example for id: bplan:

  • USER_BPLAN
  • PASSWORD_BPLAN

If a .env file exists in the project directory, xtralink loads it automatically. So you can define credentials there (e.g. USER_BPLAN=...) without needing shell export commands.

Examples by type

GIT

targetDir: .packages:
- type: GITid: git-baseurl: https://github.com/example/repo.gittag: mainpath: configs/baselocalPath: config/synced/repo-base

OCI

targetDir: .packages:
- type: OCIid: talosurl: oci://ghcr.io/example/repotag: "0.9.3"user: "<github-user>"password: "<pat>"localPath: config/synced/oci-example-repo

S3

targetDir: .packages:
- type: S3id: bplanurl: https://s3.example.net/my-bucketpath: folder/subfolderlocalPath: config/synced/s3-data

S3 note: Access Key / Secret must be provided as user / password.

Run

--config is optional. If omitted, the default config file is .xtralink.yml.

Pull all configured packages (default config .xtralink.yml):

xtralink pkg pull

Pull only one package by id:

xtralink pkg pull bplan

Pull all packages with custom config:

xtralink --config config/exampleConfig.yaml pkg pull

Inspect one package and print a JSON report:

xtralink pkg inspect bplan

pkg inspect currently reports:

  • entities
    • service/provider type counts
  • substitutions
    • all detected ${...} placeholders in YAML files
    • includes file, path, name, and optional default
  • data-sources
    • detected sources from resources/features and db
    • usage detection based on provider configs under entities/instances/providers
    • source classes currently include GPKG, PGIS/DUMP, and PGIS/REF
    • when resolving data-source related values from YAML, substitution defaults are used if available

Push command (pkg push)

With pkg push, you select a package by id from the control configuration. That package is first synchronized locally (same as pkg pull). Then the local content is packaged as ZIP and pushed as an OCI artifact.

  • Target registry/repository is provided as positional <image> argument (e.g. ghcr.io/org/name)
  • Artifact Type: application/vnd.iide.xtrapkg

Example:

xtralink pkg push bplan ghcr.io/my-org/my-bplan:latest

Important: for pkg push, pass image as registry/path/name[:tag]withoutoci:// prefix. So use ghcr.io/org/repo:tag, not oci://ghcr.io/org/repo:tag.

Useful paths and test commands

Git cache directory:

echo"$TMPDIR"xtralink-cache/git

Run integration tests in drivers package:

go test ./lib/drivers -run TestIntegrationSync_ -v -count=1

Note: Push credentials are resolved the same way as in the drivers:

  1. user / password in the remote block
  2. otherwise USER_<ID> / PASSWORD_<ID> from env or .env

About

A cloud native glue tool

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

xtralink

xtralink synchronizes content from external sources into a local target directory. Currently supported package types:

  • GIT
  • OCI
  • S3

Main commands live under pkg:

  • pkg pull (synchronize configured packages)
  • pkg push (synchronize one package by id and push it as OCI artifact)
  • pkg inspect (analyze one package and print JSON report)

What does the tool do?

  • Reads a YAML control configuration (.xtralink.yml).
  • Processes all entries under packages.
  • Fetches/updates content depending on the remote type.
  • Mirrors the result into your target (targetDir + localPath).

Configuration schema

targetDir: .packages:
- type: GIT|OCI|S3id: "..."url: "..."tag: "..."# optional (e.g. branch/tag/ref)user: "..."# optionalpassword: "..."# optionalpath: "..."# optional, directory subpath onlylocalPath: "..."# optional, target path relative to targetDir (default: id)

Important fields

  • targetDir: Base target directory for all remotes.
  • localPath: Optional target path relative to targetDir.
    • Default: the package id.
  • path: optional subdirectory in the remote content.
    • Must point to a directory (not a single file).
  • id: Used to resolve matching credentials from env (USER_<ID>, PASSWORD_<ID>).

Credentials (GIT / OCI / S3)

For all three drivers (GIT, OCI, S3), the same precedence applies:

  1. user / password directly in the corresponding remote block (control config).
  2. If empty there: environment variables USER_<ID> / PASSWORD_<ID>.

Resolution of USER_<ID> / PASSWORD_<ID> is performed centrally while loading the configuration (app/settings.go). Drivers then only use already-resolved values in remote.user and remote.password.

Example for id: bplan:

  • USER_BPLAN
  • PASSWORD_BPLAN

If a .env file exists in the project directory, xtralink loads it automatically. So you can define credentials there (e.g. USER_BPLAN=...) without needing shell export commands.

Examples by type

GIT

targetDir: .packages:
- type: GITid: git-baseurl: https://github.com/example/repo.gittag: mainpath: configs/baselocalPath: config/synced/repo-base

OCI

targetDir: .packages:
- type: OCIid: talosurl: oci://ghcr.io/example/repotag: "0.9.3"user: "<github-user>"password: "<pat>"localPath: config/synced/oci-example-repo

S3

targetDir: .packages:
- type: S3id: bplanurl: https://s3.example.net/my-bucketpath: folder/subfolderlocalPath: config/synced/s3-data

S3 note: Access Key / Secret must be provided as user / password.

Run

--config is optional. If omitted, the default config file is .xtralink.yml.

Pull all configured packages (default config .xtralink.yml):

xtralink pkg pull

Pull only one package by id:

xtralink pkg pull bplan

Pull all packages with custom config:

xtralink --config config/exampleConfig.yaml pkg pull

Inspect one package and print a JSON report:

xtralink pkg inspect bplan

pkg inspect currently reports:

  • entities
    • service/provider type counts
  • substitutions
    • all detected ${...} placeholders in YAML files
    • includes file, path, name, and optional default
  • data-sources
    • detected sources from resources/features and db
    • usage detection based on provider configs under entities/instances/providers
    • source classes currently include GPKG, PGIS/DUMP, and PGIS/REF
    • when resolving data-source related values from YAML, substitution defaults are used if available

Push command (pkg push)

With pkg push, you select a package by id from the control configuration. That package is first synchronized locally (same as pkg pull). Then the local content is packaged as ZIP and pushed as an OCI artifact.

  • Target registry/repository is provided as positional <image> argument (e.g. ghcr.io/org/name)
  • Artifact Type: application/vnd.iide.xtrapkg

Example:

xtralink pkg push bplan ghcr.io/my-org/my-bplan:latest

Important: for pkg push, pass image as registry/path/name[:tag]withoutoci:// prefix. So use ghcr.io/org/repo:tag, not oci://ghcr.io/org/repo:tag.

Useful paths and test commands

Git cache directory:

echo"$TMPDIR"xtralink-cache/git

Run integration tests in drivers package:

go test ./lib/drivers -run TestIntegrationSync_ -v -count=1

Note: Push credentials are resolved the same way as in the drivers:

  1. user / password in the remote block
  2. otherwise USER_<ID> / PASSWORD_<ID> from env or .env

About

A cloud native glue tool

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

xtralink

xtralink synchronizes content from external sources into a local target directory. Currently supported package types:

  • GIT
  • OCI
  • S3

Main commands live under pkg:

  • pkg pull (synchronize configured packages)
  • pkg push (synchronize one package by id and push it as OCI artifact)
  • pkg inspect (analyze one package and print JSON report)

What does the tool do?

  • Reads a YAML control configuration (.xtralink.yml).
  • Processes all entries under packages.
  • Fetches/updates content depending on the remote type.
  • Mirrors the result into your target (targetDir + localPath).

Configuration schema

targetDir: .packages:
- type: GIT|OCI|S3id: "..."url: "..."tag: "..."# optional (e.g. branch/tag/ref)user: "..."# optionalpassword: "..."# optionalpath: "..."# optional, directory subpath onlylocalPath: "..."# optional, target path relative to targetDir (default: id)

Important fields

  • targetDir: Base target directory for all remotes.
  • localPath: Optional target path relative to targetDir.
    • Default: the package id.
  • path: optional subdirectory in the remote content.
    • Must point to a directory (not a single file).
  • id: Used to resolve matching credentials from env (USER_<ID>, PASSWORD_<ID>).

Credentials (GIT / OCI / S3)

For all three drivers (GIT, OCI, S3), the same precedence applies:

  1. user / password directly in the corresponding remote block (control config).
  2. If empty there: environment variables USER_<ID> / PASSWORD_<ID>.

Resolution of USER_<ID> / PASSWORD_<ID> is performed centrally while loading the configuration (app/settings.go). Drivers then only use already-resolved values in remote.user and remote.password.

Example for id: bplan:

  • USER_BPLAN
  • PASSWORD_BPLAN

If a .env file exists in the project directory, xtralink loads it automatically. So you can define credentials there (e.g. USER_BPLAN=...) without needing shell export commands.

Examples by type

GIT

targetDir: .packages:
- type: GITid: git-baseurl: https://github.com/example/repo.gittag: mainpath: configs/baselocalPath: config/synced/repo-base

OCI

targetDir: .packages:
- type: OCIid: talosurl: oci://ghcr.io/example/repotag: "0.9.3"user: "<github-user>"password: "<pat>"localPath: config/synced/oci-example-repo

S3

targetDir: .packages:
- type: S3id: bplanurl: https://s3.example.net/my-bucketpath: folder/subfolderlocalPath: config/synced/s3-data

S3 note: Access Key / Secret must be provided as user / password.

Run

--config is optional. If omitted, the default config file is .xtralink.yml.

Pull all configured packages (default config .xtralink.yml):

xtralink pkg pull

Pull only one package by id:

xtralink pkg pull bplan

Pull all packages with custom config:

xtralink --config config/exampleConfig.yaml pkg pull

Inspect one package and print a JSON report:

xtralink pkg inspect bplan

pkg inspect currently reports:

  • entities
    • service/provider type counts
  • substitutions
    • all detected ${...} placeholders in YAML files
    • includes file, path, name, and optional default
  • data-sources
    • detected sources from resources/features and db
    • usage detection based on provider configs under entities/instances/providers
    • source classes currently include GPKG, PGIS/DUMP, and PGIS/REF
    • when resolving data-source related values from YAML, substitution defaults are used if available

Push command (pkg push)

With pkg push, you select a package by id from the control configuration. That package is first synchronized locally (same as pkg pull). Then the local content is packaged as ZIP and pushed as an OCI artifact.

  • Target registry/repository is provided as positional <image> argument (e.g. ghcr.io/org/name)
  • Artifact Type: application/vnd.iide.xtrapkg

Example:

xtralink pkg push bplan ghcr.io/my-org/my-bplan:latest

Important: for pkg push, pass image as registry/path/name[:tag]withoutoci:// prefix. So use ghcr.io/org/repo:tag, not oci://ghcr.io/org/repo:tag.

Useful paths and test commands

Git cache directory:

echo"$TMPDIR"xtralink-cache/git

Run integration tests in drivers package:

go test ./lib/drivers -run TestIntegrationSync_ -v -count=1

Note: Push credentials are resolved the same way as in the drivers:

  1. user / password in the remote block
  2. otherwise USER_<ID> / PASSWORD_<ID> from env or .env

About

A cloud native glue tool

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

xtralink

xtralink synchronizes content from external sources into a local target directory. Currently supported package types:

  • GIT
  • OCI
  • S3

Main commands live under pkg:

  • pkg pull (synchronize configured packages)
  • pkg push (synchronize one package by id and push it as OCI artifact)
  • pkg inspect (analyze one package and print JSON report)

What does the tool do?

  • Reads a YAML control configuration (.xtralink.yml).
  • Processes all entries under packages.
  • Fetches/updates content depending on the remote type.
  • Mirrors the result into your target (targetDir + localPath).

Configuration schema

targetDir: .packages:
- type: GIT|OCI|S3id: "..."url: "..."tag: "..."# optional (e.g. branch/tag/ref)user: "..."# optionalpassword: "..."# optionalpath: "..."# optional, directory subpath onlylocalPath: "..."# optional, target path relative to targetDir (default: id)

Important fields

  • targetDir: Base target directory for all remotes.
  • localPath: Optional target path relative to targetDir.
    • Default: the package id.
  • path: optional subdirectory in the remote content.
    • Must point to a directory (not a single file).
  • id: Used to resolve matching credentials from env (USER_<ID>, PASSWORD_<ID>).

Credentials (GIT / OCI / S3)

For all three drivers (GIT, OCI, S3), the same precedence applies:

  1. user / password directly in the corresponding remote block (control config).
  2. If empty there: environment variables USER_<ID> / PASSWORD_<ID>.

Resolution of USER_<ID> / PASSWORD_<ID> is performed centrally while loading the configuration (app/settings.go). Drivers then only use already-resolved values in remote.user and remote.password.

Example for id: bplan:

  • USER_BPLAN
  • PASSWORD_BPLAN

If a .env file exists in the project directory, xtralink loads it automatically. So you can define credentials there (e.g. USER_BPLAN=...) without needing shell export commands.

Examples by type

GIT

targetDir: .packages:
- type: GITid: git-baseurl: https://github.com/example/repo.gittag: mainpath: configs/baselocalPath: config/synced/repo-base

OCI

targetDir: .packages:
- type: OCIid: talosurl: oci://ghcr.io/example/repotag: "0.9.3"user: "<github-user>"password: "<pat>"localPath: config/synced/oci-example-repo

S3

targetDir: .packages:
- type: S3id: bplanurl: https://s3.example.net/my-bucketpath: folder/subfolderlocalPath: config/synced/s3-data

S3 note: Access Key / Secret must be provided as user / password.

Run

--config is optional. If omitted, the default config file is .xtralink.yml.

Pull all configured packages (default config .xtralink.yml):

xtralink pkg pull

Pull only one package by id:

xtralink pkg pull bplan

Pull all packages with custom config:

xtralink --config config/exampleConfig.yaml pkg pull

Inspect one package and print a JSON report:

xtralink pkg inspect bplan

pkg inspect currently reports:

  • entities
    • service/provider type counts
  • substitutions
    • all detected ${...} placeholders in YAML files
    • includes file, path, name, and optional default
  • data-sources
    • detected sources from resources/features and db
    • usage detection based on provider configs under entities/instances/providers
    • source classes currently include GPKG, PGIS/DUMP, and PGIS/REF
    • when resolving data-source related values from YAML, substitution defaults are used if available

Push command (pkg push)

With pkg push, you select a package by id from the control configuration. That package is first synchronized locally (same as pkg pull). Then the local content is packaged as ZIP and pushed as an OCI artifact.

  • Target registry/repository is provided as positional <image> argument (e.g. ghcr.io/org/name)
  • Artifact Type: application/vnd.iide.xtrapkg

Example:

xtralink pkg push bplan ghcr.io/my-org/my-bplan:latest

Important: for pkg push, pass image as registry/path/name[:tag]withoutoci:// prefix. So use ghcr.io/org/repo:tag, not oci://ghcr.io/org/repo:tag.

Useful paths and test commands

Git cache directory:

echo"$TMPDIR"xtralink-cache/git

Run integration tests in drivers package:

go test ./lib/drivers -run TestIntegrationSync_ -v -count=1

Note: Push credentials are resolved the same way as in the drivers:

  1. user / password in the remote block
  2. otherwise USER_<ID> / PASSWORD_<ID> from env or .env

About

A cloud native glue tool

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

xtralink

xtralink synchronizes content from external sources into a local target directory. Currently supported package types:

  • GIT
  • OCI
  • S3

Main commands live under pkg:

  • pkg pull (synchronize configured packages)
  • pkg push (synchronize one package by id and push it as OCI artifact)
  • pkg inspect (analyze one package and print JSON report)

What does the tool do?

  • Reads a YAML control configuration (.xtralink.yml).
  • Processes all entries under packages.
  • Fetches/updates content depending on the remote type.
  • Mirrors the result into your target (targetDir + localPath).

Configuration schema

targetDir: .packages:
- type: GIT|OCI|S3id: "..."url: "..."tag: "..."# optional (e.g. branch/tag/ref)user: "..."# optionalpassword: "..."# optionalpath: "..."# optional, directory subpath onlylocalPath: "..."# optional, target path relative to targetDir (default: id)

Important fields

  • targetDir: Base target directory for all remotes.
  • localPath: Optional target path relative to targetDir.
    • Default: the package id.
  • path: optional subdirectory in the remote content.
    • Must point to a directory (not a single file).
  • id: Used to resolve matching credentials from env (USER_<ID>, PASSWORD_<ID>).

Credentials (GIT / OCI / S3)

For all three drivers (GIT, OCI, S3), the same precedence applies:

  1. user / password directly in the corresponding remote block (control config).
  2. If empty there: environment variables USER_<ID> / PASSWORD_<ID>.

Resolution of USER_<ID> / PASSWORD_<ID> is performed centrally while loading the configuration (app/settings.go). Drivers then only use already-resolved values in remote.user and remote.password.

Example for id: bplan:

  • USER_BPLAN
  • PASSWORD_BPLAN

If a .env file exists in the project directory, xtralink loads it automatically. So you can define credentials there (e.g. USER_BPLAN=...) without needing shell export commands.

Examples by type

GIT

targetDir: .packages:
- type: GITid: git-baseurl: https://github.com/example/repo.gittag: mainpath: configs/baselocalPath: config/synced/repo-base

OCI

targetDir: .packages:
- type: OCIid: talosurl: oci://ghcr.io/example/repotag: "0.9.3"user: "<github-user>"password: "<pat>"localPath: config/synced/oci-example-repo

S3

targetDir: .packages:
- type: S3id: bplanurl: https://s3.example.net/my-bucketpath: folder/subfolderlocalPath: config/synced/s3-data

S3 note: Access Key / Secret must be provided as user / password.

Run

--config is optional. If omitted, the default config file is .xtralink.yml.

Pull all configured packages (default config .xtralink.yml):

xtralink pkg pull

Pull only one package by id:

xtralink pkg pull bplan

Pull all packages with custom config:

xtralink --config config/exampleConfig.yaml pkg pull

Inspect one package and print a JSON report:

xtralink pkg inspect bplan

pkg inspect currently reports:

  • entities
    • service/provider type counts
  • substitutions
    • all detected ${...} placeholders in YAML files
    • includes file, path, name, and optional default
  • data-sources
    • detected sources from resources/features and db
    • usage detection based on provider configs under entities/instances/providers
    • source classes currently include GPKG, PGIS/DUMP, and PGIS/REF
    • when resolving data-source related values from YAML, substitution defaults are used if available

Push command (pkg push)

With pkg push, you select a package by id from the control configuration. That package is first synchronized locally (same as pkg pull). Then the local content is packaged as ZIP and pushed as an OCI artifact.

  • Target registry/repository is provided as positional <image> argument (e.g. ghcr.io/org/name)
  • Artifact Type: application/vnd.iide.xtrapkg

Example:

xtralink pkg push bplan ghcr.io/my-org/my-bplan:latest

Important: for pkg push, pass image as registry/path/name[:tag]withoutoci:// prefix. So use ghcr.io/org/repo:tag, not oci://ghcr.io/org/repo:tag.

Useful paths and test commands

Git cache directory:

echo"$TMPDIR"xtralink-cache/git

Run integration tests in drivers package:

go test ./lib/drivers -run TestIntegrationSync_ -v -count=1

Note: Push credentials are resolved the same way as in the drivers:

  1. user / password in the remote block
  2. otherwise USER_<ID> / PASSWORD_<ID> from env or .env

About

A cloud native glue tool

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

xtralink

xtralink synchronizes content from external sources into a local target directory. Currently supported package types:

  • GIT
  • OCI
  • S3

Main commands live under pkg:

  • pkg pull (synchronize configured packages)
  • pkg push (synchronize one package by id and push it as OCI artifact)
  • pkg inspect (analyze one package and print JSON report)

What does the tool do?

  • Reads a YAML control configuration (.xtralink.yml).
  • Processes all entries under packages.
  • Fetches/updates content depending on the remote type.
  • Mirrors the result into your target (targetDir + localPath).

Configuration schema

targetDir: .packages:
- type: GIT|OCI|S3id: "..."url: "..."tag: "..."# optional (e.g. branch/tag/ref)user: "..."# optionalpassword: "..."# optionalpath: "..."# optional, directory subpath onlylocalPath: "..."# optional, target path relative to targetDir (default: id)

Important fields

  • targetDir: Base target directory for all remotes.
  • localPath: Optional target path relative to targetDir.
    • Default: the package id.
  • path: optional subdirectory in the remote content.
    • Must point to a directory (not a single file).
  • id: Used to resolve matching credentials from env (USER_<ID>, PASSWORD_<ID>).

Credentials (GIT / OCI / S3)

For all three drivers (GIT, OCI, S3), the same precedence applies:

  1. user / password directly in the corresponding remote block (control config).
  2. If empty there: environment variables USER_<ID> / PASSWORD_<ID>.

Resolution of USER_<ID> / PASSWORD_<ID> is performed centrally while loading the configuration (app/settings.go). Drivers then only use already-resolved values in remote.user and remote.password.

Example for id: bplan:

  • USER_BPLAN
  • PASSWORD_BPLAN

If a .env file exists in the project directory, xtralink loads it automatically. So you can define credentials there (e.g. USER_BPLAN=...) without needing shell export commands.

Examples by type

GIT

targetDir: .packages:
- type: GITid: git-baseurl: https://github.com/example/repo.gittag: mainpath: configs/baselocalPath: config/synced/repo-base

OCI

targetDir: .packages:
- type: OCIid: talosurl: oci://ghcr.io/example/repotag: "0.9.3"user: "<github-user>"password: "<pat>"localPath: config/synced/oci-example-repo

S3

targetDir: .packages:
- type: S3id: bplanurl: https://s3.example.net/my-bucketpath: folder/subfolderlocalPath: config/synced/s3-data

S3 note: Access Key / Secret must be provided as user / password.

Run

--config is optional. If omitted, the default config file is .xtralink.yml.

Pull all configured packages (default config .xtralink.yml):

xtralink pkg pull

Pull only one package by id:

xtralink pkg pull bplan

Pull all packages with custom config:

xtralink --config config/exampleConfig.yaml pkg pull

Inspect one package and print a JSON report:

xtralink pkg inspect bplan

pkg inspect currently reports:

  • entities
    • service/provider type counts
  • substitutions
    • all detected ${...} placeholders in YAML files
    • includes file, path, name, and optional default
  • data-sources
    • detected sources from resources/features and db
    • usage detection based on provider configs under entities/instances/providers
    • source classes currently include GPKG, PGIS/DUMP, and PGIS/REF
    • when resolving data-source related values from YAML, substitution defaults are used if available

Push command (pkg push)

With pkg push, you select a package by id from the control configuration. That package is first synchronized locally (same as pkg pull). Then the local content is packaged as ZIP and pushed as an OCI artifact.

  • Target registry/repository is provided as positional <image> argument (e.g. ghcr.io/org/name)
  • Artifact Type: application/vnd.iide.xtrapkg

Example:

xtralink pkg push bplan ghcr.io/my-org/my-bplan:latest

Important: for pkg push, pass image as registry/path/name[:tag]withoutoci:// prefix. So use ghcr.io/org/repo:tag, not oci://ghcr.io/org/repo:tag.

Useful paths and test commands

Git cache directory:

echo"$TMPDIR"xtralink-cache/git

Run integration tests in drivers package:

go test ./lib/drivers -run TestIntegrationSync_ -v -count=1

Note: Push credentials are resolved the same way as in the drivers:

  1. user / password in the remote block
  2. otherwise USER_<ID> / PASSWORD_<ID> from env or .env

About

A cloud native glue tool

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

xtralink

xtralink synchronizes content from external sources into a local target directory. Currently supported package types:

  • GIT
  • OCI
  • S3

Main commands live under pkg:

  • pkg pull (synchronize configured packages)
  • pkg push (synchronize one package by id and push it as OCI artifact)
  • pkg inspect (analyze one package and print JSON report)

What does the tool do?

  • Reads a YAML control configuration (.xtralink.yml).
  • Processes all entries under packages.
  • Fetches/updates content depending on the remote type.
  • Mirrors the result into your target (targetDir + localPath).

Configuration schema

targetDir: .packages:
- type: GIT|OCI|S3id: "..."url: "..."tag: "..."# optional (e.g. branch/tag/ref)user: "..."# optionalpassword: "..."# optionalpath: "..."# optional, directory subpath onlylocalPath: "..."# optional, target path relative to targetDir (default: id)

Important fields

  • targetDir: Base target directory for all remotes.
  • localPath: Optional target path relative to targetDir.
    • Default: the package id.
  • path: optional subdirectory in the remote content.
    • Must point to a directory (not a single file).
  • id: Used to resolve matching credentials from env (USER_<ID>, PASSWORD_<ID>).

Credentials (GIT / OCI / S3)

For all three drivers (GIT, OCI, S3), the same precedence applies:

  1. user / password directly in the corresponding remote block (control config).
  2. If empty there: environment variables USER_<ID> / PASSWORD_<ID>.

Resolution of USER_<ID> / PASSWORD_<ID> is performed centrally while loading the configuration (app/settings.go). Drivers then only use already-resolved values in remote.user and remote.password.

Example for id: bplan:

  • USER_BPLAN
  • PASSWORD_BPLAN

If a .env file exists in the project directory, xtralink loads it automatically. So you can define credentials there (e.g. USER_BPLAN=...) without needing shell export commands.

Examples by type

GIT

targetDir: .packages:
- type: GITid: git-baseurl: https://github.com/example/repo.gittag: mainpath: configs/baselocalPath: config/synced/repo-base

OCI

targetDir: .packages:
- type: OCIid: talosurl: oci://ghcr.io/example/repotag: "0.9.3"user: "<github-user>"password: "<pat>"localPath: config/synced/oci-example-repo

S3

targetDir: .packages:
- type: S3id: bplanurl: https://s3.example.net/my-bucketpath: folder/subfolderlocalPath: config/synced/s3-data

S3 note: Access Key / Secret must be provided as user / password.

Run

--config is optional. If omitted, the default config file is .xtralink.yml.

Pull all configured packages (default config .xtralink.yml):

xtralink pkg pull

Pull only one package by id:

xtralink pkg pull bplan

Pull all packages with custom config:

xtralink --config config/exampleConfig.yaml pkg pull

Inspect one package and print a JSON report:

xtralink pkg inspect bplan

pkg inspect currently reports:

  • entities
    • service/provider type counts
  • substitutions
    • all detected ${...} placeholders in YAML files
    • includes file, path, name, and optional default
  • data-sources
    • detected sources from resources/features and db
    • usage detection based on provider configs under entities/instances/providers
    • source classes currently include GPKG, PGIS/DUMP, and PGIS/REF
    • when resolving data-source related values from YAML, substitution defaults are used if available

Push command (pkg push)

With pkg push, you select a package by id from the control configuration. That package is first synchronized locally (same as pkg pull). Then the local content is packaged as ZIP and pushed as an OCI artifact.

  • Target registry/repository is provided as positional <image> argument (e.g. ghcr.io/org/name)
  • Artifact Type: application/vnd.iide.xtrapkg

Example:

xtralink pkg push bplan ghcr.io/my-org/my-bplan:latest

Important: for pkg push, pass image as registry/path/name[:tag]withoutoci:// prefix. So use ghcr.io/org/repo:tag, not oci://ghcr.io/org/repo:tag.

Useful paths and test commands

Git cache directory:

echo"$TMPDIR"xtralink-cache/git

Run integration tests in drivers package:

go test ./lib/drivers -run TestIntegrationSync_ -v -count=1

Note: Push credentials are resolved the same way as in the drivers:

  1. user / password in the remote block
  2. otherwise USER_<ID> / PASSWORD_<ID> from env or .env

About

A cloud native glue tool

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages