Skip to main content

Locators

info

Locators are a part of the Kurtosis packaging system. To read about the package system in detail, see here.

A locator is how resources are identified when being imported in a Starlark script - namely by import_module and read_file. There are two types of locators: absolute and relative.

Absolute Locators​

Absolute locators unambiguously identify a resource using a URL-like syntax. For example, this locator:

github.com/package-author/package-repo/path/to/directory-with-kurtosis.yml/some-file.star

references a file inside a GitHub repo called package-repo, owned by package-author, that lives at the path /path/to/directory-with-kurtosis.yml/some-file.star relative to the root of the repo.

caution

A GitHub URL is not a valid locator, because GitHub adds extra /blob/main paths to the URL that don't reflect the file's path in the repo. For example, a GitHub URL of:

https://github.com/kurtosis-tech/kurtosis/blob/main/starlark/test.star

would be the following as a Kurtosis locator (dropping the https:// and /blob/main part):

github.com/kurtosis-tech/kurtosis/starlark/test.star
info

Locators can point to public or private GitHub repositories. Read the Running Private Packages guide to learn how to enable private locators.

Important Package Restriction​

If your Starlark script relies on local resources, such as files or packages available on your filesystem, then those resources must be part of a Kurtosis package.

For example, suppose we had a Kurtosis package like so:

/
package-repo/
my-package/
kurtosis.yml
main.star
helpers/
random-script.star
not-a-package/
random-script.star

with a kurtosis.yml file like so:

name: github.com/package-author/package-repo/my-package

In your main.star file, you would be able to import the random-script.star from the helpers subdirectory of my-package like so:

# Valid
helpers = import_module("github.com/package-author/package-repo/my-package/helpers/random-script.star")

However, if you try to import package-repo/not-a-package/random-script.star, then it will not work because package-repo/not-a-package/random-script.star is not part of a package. In essence, the import statement below will not succeed, because main.star cannot import from non-packages (see how import works for more information):

# Invalid
helpers = import_module("github.com/package-author/package-repo/not-a-package/random-script.star")

Relative Locators​

Relative locators like ./helper.star are allowed as a short alternative to the full absolute locator. However, a relative locator cannot be used to reference files outside the package. In other words, you cannot use a relative locator to reference files above the directory containing the kurtosis.yml file.

Suppose we had a Kurtosis package like so:

/
package-repo/
main.star
src/
lib.star

with a kurtosis.yml file like so:

name: github.com/package-author/package-repo

The main.star can refer to the lib.star file using either relative or absolute imports:

# valid relative import
lib_via_relative_import = import_module("./src/lib.star")

# valid absolute import
lib_via_absolute_import = import_module("github.com/kurtosis-tech/package-repo/src/lib.star")