Compiler
Moved
Compiler documentation has moved to Compile.
- **[Test](https://doc.log10x.com/compile/test/)**, run the compiler locally on sample inputs
- **[Deploy](https://doc.log10x.com/compile/deploy/)**, deploy via Helm or CI/CD
- **[Stages](https://doc.log10x.com/compile/)**: Bootstrap, Pull, Scan, Link, Push, Console, Monitor
- **[FAQ](https://doc.log10x.com/compile/faq/)**, questions about symbol generation
The @apps/compiler runtime identity remains unchanged. The docs are organized under the top-level Compile section since the compiler is a setup/build-time task rather than a runtime value-delivering app.
Config Files
To configure the Compiler app, Edit these files:
Main Config
Main Config
The main config file loads the Compiler app's required modules.
Uncomment selected modules at: compiler/config.yaml.
#
# 🔟❎ Compiler app main config
# The compile app produces symbol library files which enable 10x apps to
# transform log/trace events into well-defined TenXObjects at runtime.
# To learn more see https://doc.log10x.com/compile
# =========================== Bootstrap Compiler ==============================
# To learn more see https://doc.log10x.com/compile/bootstrap
tenx: compile
runtimeName: $=TenXEnv.get("TENX_RUNTIME_NAME", "myCompiler")
# ============================ Load App Modules ===============================
# Uncomment and edit selected config.yaml files in the folders below (e.g., compile/scanners/config.yaml)
include:
# ------------------------------ App settings ---------------------------------
# Load general app settings:
- compiler
# Load gitops settings for pulling additional assets from Github.
# Edit the gitops/config.yaml file with specific config
#
# For additional info see - https://doc.log10x.com/config/github
- gitops
# --------------------------- Process Inputs --------------------------------
# Process input source code and binary files on disk.
- compile/scanners # https://doc.log10x.com/compile/scan
# ---------------------------- Pull Inputs ----------------------------------
# This application can fetch source/binary files from remote inputs
# Uncomment and edit config files (e.g. compile/pull/github/config.yaml) to remote pull
#
- compile/pull/github # https://doc.log10x.com/compile/pull/github
- compile/pull/docker # https://doc.log10x.com/compile/pull/docker
- compile/pull/helm # https://doc.log10x.com/compile/pull/helm
# - compile/pull/artifactory # https://doc.log10x.com/compile/pull/artifactory
# ---------------------------- Link Output ----------------------------------
# Link output files into a single symbol library artifact for runtime use
- compile/link # https://doc.log10x.com/compile/link
# ---------------------------- Push Output ----------------------------------
# Push output files to GitHub for use by subsequent compile and run instances
# - compile/push # https://doc.log10x.com/compile/push
Pull
Pull
Activate a Repo Fetcher to pull input source code/binary files from remote repositories.
github
Configure GitHub repositories to pull folders from GitHub repositories to scan for symbol content.
Below is the default configuration from: github/config.yaml (* Required Fields).
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiZ2l0aHViUHVsbCIgOiB7CiAgICAgICJ0eXBlIiA6ICJhcnJheSIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICJyZXBvcyIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTmFtZXMgb2YgcmVwbyhzKSB0byBwdWxsXG5cbklkZW50aWZpZXMgR2l0SHViIHJlcG9zaXRvcmllcyB0byBwdWxsIGluIHRoZSBmb3JtIG9mIHVzZXJuYW1lL293bmVyIChlLmcuLCBvcGVuc2VhcmNoLXByb2plY3QvT3BlblNlYXJjaCkiLAogICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAidG9rZW4iIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJHaXRIdWIgQVBJIGFjY2VzcyB0b2tlblxuXG5EZWZpbmVzIGFuIGFjY2VzcyB0b2tlbiBmb3IgYWNjZXNzaW5nIEdpdGh1YiByZXBvcy4gVG8gbGVhcm4gbW9yZSBzZWUgW0dpdEh1YiB0b2tlbnNdKGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2F1dGhlbnRpY2F0aW9uL2tlZXBpbmcteW91ci1hY2NvdW50LWFuZC1kYXRhLXNlY3VyZS9tYW5hZ2luZy15b3VyLXBlcnNvbmFsLWFjY2Vzcy10b2tlbnMpLiAgIFRoaXMgdmFsdWUgc2hvdWxkIGJlIHNldCB2aWEgYW4gW2Vudmlyb25tZW50IHZhcmlhYmxlXShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9qcy8jVGVuWEVudi5nZXQpOiAgYGBgIHlhbWwgZ2l0aHViUHVsbFRva2VuOiAkPVRlblhFbnYuZ2V0KFwiR0hfVE9LRU5cIikgYGBgIgogICAgICAgICAgfSwKICAgICAgICAgICJicmFuY2giIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJUYXJnZXQgYnJhbmNoXG5cblNwZWNpZmllcyB0aGUgYnJhbmNoIHRvIHVzZSB3aGVuIHB1bGxpbmcgZnJvbSBbZ2l0aHViUHVsbFJlcG9zXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvcHVsbC9naXRodWIvI2dpdGh1YnB1bGxyZXBvcykuIElmIG9taXR0ZWQsIHVzZSB0aGUgcmVwb3NpdG9yeSdzIGRlZmF1bHQgYnJhbmNoLiIKICAgICAgICAgIH0sCiAgICAgICAgICAiZm9sZGVycyIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUmVwbyBmb2xkZXJzIHRvIHB1bGxcblxuSWRlbnRpZmllcyBmb2xkZXIocykgd2l0aGluIFtnaXRodWJQdWxsUmVwb3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9wdWxsL2dpdGh1Yi8jZ2l0aHVicHVsbHJlcG9zKSB0byBwdWxsLiBpZiBvbWl0dGVkLCB0aGUgZW50aXJlIHJlcG8gaXMgcHVsbGVkLiIsCiAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmVkIiA6IFsKICAgICAgICAgICJ0b2tlbiIKICAgICAgICBdCiAgICAgIH0KICAgIH0KICB9LAogICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZQp9
# 🔟❎ 'compile' GitHub pull sources configuration
# Configures GitHub repositories folders to pull to disk to scan its contents.
# To learn more see https://doc.log10x.com/compile/pull/github
# For a reference list of industry-standard frameworks, see:
# modules/pipelines/compile/modules/pull/github/library.yaml
# Set the 10x pipeline to 'compile'
tenx: compile
# ============================== GitHub Options ===============================
githubPull:
# 'token' specifies the access token for this repo using a shell variable (recommended) or inline
# See https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens
- token: $=TenXEnv.get("GH_TOKEN") # (❗ EnvVar REQUIRED)
# 'repo' specifies the repo names to pull from Github (e.g., apache/spark)
repos: [
#owner/project
]
# 'branch' specifies the branch to pull within 'repos'. If not set, pulls each repo's default branch
branch: null
# 'repoFolders' defines folders within 'repos' to pull. If not specified, pull the entire repo
folders: [
# src/main
]
docker
Configure the Docker image to pull Docker image files to scan for symbol content.
Below is the default configuration from: docker/config.yaml (* Required Fields).
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiZG9ja2VyIiA6IHsKICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICJpbWFnZXMiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkRvY2tlciBpbWFnZSBmaWxlcyB0byBwdWxsXG5cblNwZWNpZmllcyB0aGUgVVJMcyBmb3IgdGhlIHJlbW90ZSBEb2NrZXIgaW1hZ2VzIHRvIHB1bGwgaW4gdGhlIGZvcm0gb2Y6IGA8Y29udGFpbmVyLXJlcG9zaXRvcnk+LzxpbWFnZT4vPHZlcnNpb24+YC4gRm9yIGV4YW1wbGU6ICBgYGAgeWFtbCAgZG9ja2VySW1hZ2VzOiAtIGRvY2tlci5pby9ncmFmYW5hL2dyYWZhbmE6MTEuMS4wIGBgYCIsCiAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgInVzZXJuYW1lIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJEb2NrZXIgdXNlciBuYW1lXG5cblNwZWNpZmllcyB0aGUgW3VzZXIgbmFtZV0oaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vcmVmZXJlbmNlL2NsaS9kb2NrZXIvbG9naW4vI3VzZXJuYW1lKSBmb3IgYXV0aGVudGljYXRpbmcgdGhlIGRvY2tlciBjbGllbnQuIElmIHRoaXMgdmFsdWUgaXMgbm90IHNldCwgdGhlIGRvY2tlciBjbGllbnQgaXMgYXNzdW1lZCB0byBiZSBwcmUtYXV0aGVudGljYXRlZC4gIFRoaXMgdmFsdWUgc2hvdWxkIGJlIHNldCB2aWEgYW4gW2Vudmlyb25tZW50IHZhcmlhYmxlXShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9qcy8jVGVuWEVudi5nZXQpOiAgYGBgIHlhbWwgZG9ja2VyVXNlcm5hbWU6ICQ9VGVuWEVudi5nZXQoXCJET0NLRVJfVVNFUk5BTUVcIikgYGBgIgogICAgICAgIH0sCiAgICAgICAgInBhc3N3b3JkIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJEb2NrZXIgcGFzc3dvcmRcblxuU3BlY2lmaWVzIHRoZSBwYXNzd29yZCBmb3IgYXV0aGVudGljYXRpbmcgdGhlIGRvY2tlciBjbGllbnQgaW4gY29uanVuY3Rpb24gd2l0aCBbZG9ja2VyVXNlcm5hbWVdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9wdWxsL2RvY2tlci8jZG9ja2VydXNlcm5hbWUpLiBUaGlzIHZhbHVlIGlzIHdyaXR0ZW4gaW50byB0aGUgZG9ja2VyIGNsaWVudCdzIHN0ZCBpbnB1dCB2aWEgdGhlIGxvZ2luIGNvbW1hbmQncyBbcGFzc3dvcmQtc3RkaW5dKGh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL3JlZmVyZW5jZS9jbGkvZG9ja2VyL2xvZ2luLyNwYXNzd29yZC1zdGRpbikgYXJndW1lbnQuICBUaGlzIHZhbHVlIHNob3VsZCBiZSBzZXQgdmlhIGFuIFtlbnZpcm9ubWVudCB2YXJpYWJsZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvanMvI1RlblhFbnYuZ2V0KTogIGBgYCB5YW1sIGRvY2tlclBhc3N3b3JkOiAkPVRlblhFbnYuZ2V0KFwiRE9DS0VSX1RPS0VOXCIpIGBgYCIKICAgICAgICB9LAogICAgICAgICJyZW1vdmUiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAiYm9vbGVhbiIsCiAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAibnVsbCIKICAgICAgICAgIF0sCiAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUmVtb3ZlIGltYWdlIGFmdGVyIHNjYW5cblxuU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmVtb3ZlIFtkb2NrZXJJbWFnZXNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9wdWxsL2RvY2tlci8jZG9ja2VyaW1hZ2VzKSB1c2luZyBbZG9ja2VyIHJtaSAtZl0oaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vcmVmZXJlbmNlL2NsaS9kb2NrZXIvaW1hZ2Uvcm0vKSAoQWNjZXB0cyBib29sZWFuIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogdHJ1ZSkiLAogICAgICAgICAgImRlZmF1bHQiIDogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgImdpdGh1YlJlcG9Ub2tlbiIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAibnVsbCIKICAgICAgICAgIF0sCiAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiR2l0SHViIEFQSSB0b2tlbiBmb3IgcHVsbGluZyBpbWFnZSBzb3VyY2UgY29kZSByZXBvc2l0b3JpZXNcblxuRGVmaW5lcyBhbiBhY2Nlc3MgdG9rZW4gZm9yIHB1bGxpbmcgW0dpdGh1YiByZXBvc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3B1bGwvZ2l0aHViLykgcmVmZXJlbmNlZCBieSBhIHRhcmdldCBpbWFnZSdzIFtvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2Uuc291cmNlXShodHRwczovL2dpdGh1Yi5jb20vb3BlbmNvbnRhaW5lcnMvaW1hZ2Utc3BlYy9ibG9iL3YxLjAuMS9hbm5vdGF0aW9ucy5tZCNwcmUtZGVmaW5lZC1hbm5vdGF0aW9uLWtleXMpIHByb3BlcnR5LiAgSWYgdGhpcyBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlIHdpdGhpbiB0aGUgW2ltYWdlIG1hbmlmZXN0XShodHRwczovL2RvY3MuZG9ja2VyLmNvbS9yZWZlcmVuY2UvY2xpL2RvY2tlci9tYW5pZmVzdC9pbnNwZWN0KSwgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGluZmVyIGEgdmFsaWQgR2l0SHViIHJlcG8gbmFtZSBmcm9tIHRoZSBpbWFnZSBuYW1lLiBGb3IgZXhhbXBsZSwgZm9yIHRoZSB0aGUgdGFyZ2V0IGltYWdlIG5hbWU6IGBkb2NrZXIuaW8vZ3JhZmFuYS9ncmFmYW5hOjExLjEuMGAsIHRoZSBbZ3JhZmFuYS9ncmFmYW5hXShodHRwczovL2dpdGh1Yi5jb20vZ3JhZmFuYS9ncmFmYW5hKSBHaXRIdWIgcmVwbyBpcyBpbmZlcnJlZC4gIElmIG5vdCBhbiBBUEkgdG9rZW4gaXMgbm90IHNwZWNpZmllZCwgR2l0SHViIHJlcG9zIHJlZmVyZW5jZWQgd2l0aGluIGltYWdlIG1hbmlmZXN0cyBvciBpbmZlcnJlZCBmcm9tIGltYWdlIG5hbWVzIGFyZSBub3QgcHVsbGVkLiBUbyBsZWFybiBtb3JlIHNlZSBbR2l0SHViIHRva2Vuc10oaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYXV0aGVudGljYXRpb24va2VlcGluZy15b3VyLWFjY291bnQtYW5kLWRhdGEtc2VjdXJlL21hbmFnaW5nLXlvdXItcGVyc29uYWwtYWNjZXNzLXRva2VucykuIgogICAgICAgIH0sCiAgICAgICAgImNvbW1hbmQiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlBhdGggdG8gZG9ja2VyIGNvbW1hbmRcblxuRGVmaW5lcyB0aGUgcGF0aCB0byB0aGUgW2RvY2tlcl0oaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vcmVmZXJlbmNlL2NsaS9kb2NrZXIvKSBwcm9ncmFtIHVzZWQgcHVsbGluZyBhbmQgZXhwb3J0aW5nIGltYWdlcy4gKERlZmF1bHQ6ICpOSVg6IC91c3IvbG9jYWwvYmluL2RvY2tlciwgV2luOiBDOi9Qcm9ncmFtIEZpbGVzL0RvY2tlci9Eb2NrZXIvcmVzb3VyY2VzL2Jpbi9kb2NrZXIuZXhlKSIsCiAgICAgICAgICAiZGVmYXVsdCIgOiAiKk5JWDogL3Vzci9sb2NhbC9iaW4vZG9ja2VyLCBXaW46IEM6L1Byb2dyYW0gRmlsZXMvRG9ja2VyL0RvY2tlci9yZXNvdXJjZXMvYmluL2RvY2tlci5leGUiCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# 🔟❎ 'compile' Docker configuration
# Pull docker images files using the Docker CLI client from container registries to
# scan for symbol values. To learn more see https://doc.log10x.com/compile/pull/docker
# Set the 10x pipeline to 'compile'
tenx: compile
# ============================= Docker Options ================================
docker:
# 'username' specifies the user name for authenticating the docker client.
# If not set, the docker client is assumed to be pre-authenticated.
# To learn more see https://docs.docker.com/reference/cli/docker/login/#username
username: $=TenXEnv.get("DOCKER_USERNAME") # (❗ EnvVar REQUIRED)
# 'password' specifies the password argument for authenticating the docker client login command.
# This value is written into the docker client's std input via the --password-stdin argument.
# To learn more see https://docs.docker.com/reference/cli/docker/login/#password-stdin.
password: $=TenXEnv.get("DOCKER_TOKEN") # (❗ EnvVar REQUIRED)
# 'command' specifies the location of docker cli https://docs.docker.com/reference/cli/docker/ program
#command: $=TenXString.includes(TenXEnv.get("os.name"), "Windows") ? "C:/Program Files/Docker/Docker/resources/bin/docker.exe":"/usr/local/bin/docker"
# 'images' specify images to pull and export to matching .tar files to scan
images: [
# docker.io/grafana/grafana:11.1.0
]
# 'remove' specifies whether to remove exported images once their contents are extracted.
# To learn more see https://docs.docker.com/reference/cli/docker/image/rm
remove: false
# 'githubRepoToken' defines an access token for pulling Github repos referenced
# by a target image's 'org.opencontainers.image.source' property.
githubRepoToken: $=TenXEnv.get("GH_TOKEN") # (❗ EnvVar REQUIRED)
helm
Configure the Helm chart to pull GitHub repositories and Docker images to scan for symbol content from Helm charts.
Below is the default configuration from: helm/config.yaml (* Required Fields).
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiaGVsbSIgOiB7CiAgICAgICJ0eXBlIiA6ICJvYmplY3QiLAogICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UsCiAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAiY2hhcnROYW1lcyIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAibnVsbCIKICAgICAgICAgIF0sCiAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTGlzdCBvZiBjaGFydHMgdG8gcHVsbFxuXG5TcGVjaWZpZXMgYSBsaXN0IG9mIGNoYXJ0IG5hbWVzIChlLmcuLCBvcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWRlbW8pIHRvIHBhc3MgdG8gW2hlbG1Db21tYW5kXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvcHVsbC9oZWxtLyNoZWxtY29tbWFuZCkuIFRoZSBzY2FubmVyIHdpbGwgaW52b2tlIHRoZSBbdGVtcGxhdGVdKGh0dHBzOi8vaGVsbS5zaC9kb2NzL2hlbG0vaGVsbV90ZW1wbGF0ZS8pIGFuZCBbc2hvdyBjaGFydF0oaHR0cHM6Ly9oZWxtLnNoL2RvY3MvaGVsbS9oZWxtX3Nob3dfY2hhcnQvKSBjb21tYW5kcyB0byBwdWxsIGl0cyB2YWx1ZXMueWFtbCBhbmQgY2hhcnQueWFtbCBmaWxlcyB0byBzY2FuIGZvciBEb2NrZXIgY29udGFpbmVyIGltYWdlcyBhbmQgR2l0SHViIHJlcG8gZmlsZXMuIiwKICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiY2hhcnRGaWxlcyIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAibnVsbCIKICAgICAgICAgIF0sCiAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTGlzdCBvZiBjaGFydHMgdGVtcGxhdGVzIGFuZCB2YWx1ZSBmaWxlcyB0byBzY2FuXG5cblNwZWNpZmllcyBhIGxpc3Qgb2YgY2hhcnQgdmFsdWUgYW5kIHRlbXBsYXRlcyBmaWxlcyB0byBzY2FuLiBUaGVzZSBmaWxlIHBhdGhzIG1heSBiZSByZWxhdGl2ZSB0byB0aGUgaW5jbHVkZSBwYXRocyBsaXN0LiBJZiBmaWxlIHBhdGhzIGFyZSBjYW5vbmljYWwsIHRoZWlyIGVuY2xvc2luZyBmb2xkZXJzIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIGluY2x1ZGVQYXRocyBhcmd1bWVudC4iLAogICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJwdWxsIiA6IHsKICAgICAgICAgICJ0eXBlIiA6ICJvYmplY3QiLAogICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICAgICAiZ2l0aHViIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgICAgICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UsCiAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICAgICAgICAgInJlcG9zIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAgICJib29sZWFuIiwKICAgICAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlB1bGwgR2l0SHViIHJlcG9zXG5cblNwZWNpZmllcyB3aGV0aGVyIHRvIHB1bGwgW0dpdEh1YiByZXBvc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3B1bGwvZ2l0aHViLykgcmVmZXJlbmNlZCBieSBhbiBpbnB1dCBIZWxtIHRlbXBsYXRlIGZpbGVzLiAoQWNjZXB0cyBib29sZWFuIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAidG9rZW4iIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJHaXRIdWIgQVBJIHRva2VuIGZvciBwdWxsaW5nIHJlcG9zaXRvcmllc1xuXG5EZWZpbmVzIGFuIGFjY2VzcyB0b2tlbiBmb3IgcHVsbGluZyBbR2l0aHViIHJlcG9zXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvcHVsbC9naXRodWIvKSByZWZlcmVuY2VkIGJ5IEhlbG0gY2hhcnRzLiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkb2NrZXJJbWFnZXMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICJib29sZWFuIiwKICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUHVsbCBkb2NrZXIgY29udGFpbmVyIGltYWdlc1xuXG5TcGVjaWZpZXMgd2hldGhlciB0byBwdWxsIFtEb2NrZXIgaW1hZ2VzXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvcHVsbC9kb2NrZXIvKSByZWZlcmVuY2VkIGJ5IGFuIGlucHV0IEhlbG0gdmFsdWVzIGFuZCB0ZW1wbGF0ZSBmaWxlcy4gKEFjY2VwdHMgYm9vbGVhbiBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikgKERlZmF1bHQ6IHRydWUpIiwKICAgICAgICAgICAgICAiZGVmYXVsdCIgOiB0cnVlCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJjb21tYW5kIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJQYXRoIHRvIEhlbG0gY29tbWFuZFxuXG5EZWZpbmVzIHRoZSBwYXRoIHRvIHRoZSBbSGVsbV0oaHR0cHM6Ly9oZWxtLnNoLykgcHJvZ3JhbSB1c2VkIGZvciBxdWVyeWluZyBjaGFydCB0ZW1wbGF0ZXMgYW5kIHZhbHVlcy4gVGhpcyB2YWx1ZSBtdXN0IGJlIHNldCBpZiBbaGVsbUNoYXJ0TmFtZXNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9wdWxsL2hlbG0vI2hlbG1jaGFydG5hbWVzKSBpcyBzZXQuIChEZWZhdWx0OiAqTklYOiAvdXNyL2xvY2FsL2Jpbi9oZWxtLCBXaW46IEM6L1Byb2dyYW0gRmlsZXMvaGVsbS9oZWxtLmV4ZSkiLAogICAgICAgICAgImRlZmF1bHQiIDogIipOSVg6IC91c3IvbG9jYWwvYmluL2hlbG0sIFdpbjogQzovUHJvZ3JhbSBGaWxlcy9oZWxtL2hlbG0uZXhlIgogICAgICAgIH0sCiAgICAgICAgImdpdEh1YlJlcG9QYXRocyIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAibnVsbCIKICAgICAgICAgIF0sCiAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiWUFNTCBET00gcGF0aHMgZm9yIGV4dHJhY3RpbmcgR2l0SHViIHJlcG9zXG5cblNwZWNpZmllcyBwYXRocyB3aXRoaW4gYSBZQU1MIGZpbGUgdG8gdHJlYXQgYXMgaG9sZGVycyBmb3IgR2l0SHViIHJlcG8gbmFtZXMuIEZvciBleGFtcGxlLCBmb3IgdGhlIGZvbGxvd2luZyBzZWN0aW9uIGZyb20gYW4gaW5wdXQgY2hhcnQueWFtbCBmaWxlOiBgYGB5YW1sIHNvdXJjZXM6ICAgLSBodHRwczovL2dpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1kZW1vICMgY2FwdHVyZSB0aGlzIEdpdEh1YiByZXBvIHJlZmVyZW5jZSBgYGAgKERlZmF1bHQ6IFttZXRhZGF0YS5yZXBvc2l0b3J5LCBzcGVjLnNvdXJjZS5naXQsIGNoYXJ0LnJlcG9zaXRvcnldKSIsCiAgICAgICAgICAiZGVmYXVsdCIgOiAiW21ldGFkYXRhLnJlcG9zaXRvcnksIHNwZWMuc291cmNlLmdpdCwgY2hhcnQucmVwb3NpdG9yeV0iCiAgICAgICAgfSwKICAgICAgICAiZG9ja2VySW1hZ2VQYXRocyIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAibnVsbCIKICAgICAgICAgIF0sCiAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiWUFNTCBET00gcGF0aHMgZm9yIGV4dHJhY3RpbmcgRG9ja2VyIHJlcG8gcmVmZXJlbmNlc1xuXG5TcGVjaWZpZXMgcGF0aHMgd2l0aGluIGEgaGVsbSBZQU1MIGZpbGUgdG8gdHJlYXQgYXMgaG9sZGVycyBmb3IgRG9ja2VyIGltYWdlIG5hbWVzLiBGb3IgZXhhbXBsZSwgZm9yIHRoZSBmb2xsb3dpbmcgc2VjdGlvbiBmcm9tIGFuIGlucHV0IHZhbHVlcy55YW1sIGZpbGU6IGBgYHlhbWwgICAgIHNwZWM6ICAgc2VydmljZUFjY291bnROYW1lOiBvcGVudGVsZW1ldHJ5LWRlbW8gICBjb250YWluZXJzOiAgIC0gbmFtZTogYWNjb3VudGluZ3NlcnZpY2UgICAgICBpbWFnZTogJ2RvY2tlci5pby9ncmFmYW5hL2dyYWZhbmE6MTEuMS4wJyAjIGNhcHR1cmUgdGhpcyBkb2NrZXIgaW1hZ2UgcmVmZXJlbmNlIGBgYCAoRGVmYXVsdDogW3NwZWMudGVtcGxhdGUuc3BlYy5jb250YWluZXJzLmltYWdlLCB2YWx1ZXMuaW1hZ2UsIHNwZWMuY29udGFpbmVycy5pbWFnZSwgc291cmNlc10pIiwKICAgICAgICAgICJkZWZhdWx0IiA6ICJbc3BlYy50ZW1wbGF0ZS5zcGVjLmNvbnRhaW5lcnMuaW1hZ2UsIHZhbHVlcy5pbWFnZSwgc3BlYy5jb250YWluZXJzLmltYWdlLCBzb3VyY2VzXSIKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9LAogICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZQp9
# 🔟❎ 'compile' k8s Helm scanner configuration
# Configures the k8s Helm chart symbol scanner which pulls referenced GitHub source repositories and
# Docker container images to scan for symbol values.
# To learn more see https://doc.log10x.com/compile/pull/helm
# For a reference list of common infrastructure charts, see:
# modules/pipelines/compile/modules/pull/helm/library.yaml
# Set the 10x pipeline to 'compile'
tenx: compile
# =============================== Helm Options ===============================
helm:
# Charts can be specified as Helm chart names OR as local chart files.
# 'chartNames' specifies a list of remote chart names to scan for values and template files.
chartNames: [
# open-telemetry/opentelemetry-demo,
# ingress-nginx/ingress-nginx,
]
# 'chartFiles' specifies a list of local chart template and values.yaml files on disk.
# File paths may be relative to the 'includePaths' list. If canonical, enclosing folders must added to 'includePaths'.
chartFiles: [
# charts/opentelemetry-demo/values.yaml
]
pull:
# 'dockerImages' specifies whether to pull docker container images referenced by input charts
# To learn more see https://doc.log10x.com/compile/pull/docker
dockerImages: true
github:
# 'repos' specifies whether to pull GitHub repos referenced by 'org.opencontainers.image.source' annotations
# To learn more see https://github.com/opencontainers/image-spec/blob/v1.0.1/annotations.md#pre-defined-annotation-keys
repos: true
# 'token' specifies the GitHub access token for pulling from referenced repos
# To learn more see: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens
token: $=TenXEnv.get("GH_TOKEN") # (❗ EnvVar REQUIRED)
artifactory
Configure Artifactory repositories to pull files from Artifactory repositories to scan for symbol content.
Below is the default configuration from: artifactory/config.yaml (* Required Fields).
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiYXJ0aWZhY3RvcnkiIDogewogICAgICAidHlwZSIgOiAiYXJyYXkiLAogICAgICAiaXRlbXMiIDogewogICAgICAgICJ0eXBlIiA6ICJvYmplY3QiLAogICAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgICAiaW5zdGFuY2UiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBcnRpZmFjdG9yeSByZXBvc2l0b3J5IFVSTFxuXG5VUkwgZm9yIHRoZSByZW1vdGUgQXJ0aWZhY3RvcnkgaW5zdGFuY2UgKGUuZy4sIGh0dHBzOi8vbXl1c2VybmFtZS5qZnJvZy5pby9hcnRpZmFjdG9yeSkiCiAgICAgICAgICB9LAogICAgICAgICAgInRva2VuIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiQXJ0aWZhY3RvcnkgaW5zdGFuY2UgYWNjZXNzIHRva2VuXG5cbkFydGlmYWN0b3J5IFthY2Nlc3MgdG9rZW5dKGh0dHBzOi8vamZyb2cuY29tL2hlbHAvci9qZnJvZy1wbGF0Zm9ybS1hZG1pbmlzdHJhdGlvbi1kb2N1bWVudGF0aW9uL2FjY2Vzcy10b2tlbnMpIGZvciB0aGlzIHJlbW90ZSBpbnN0YW5jZS4gVGhpcyB2YWx1ZSBzaG91bGQgYmUgc2V0IHZpYSBhbiBbZW52aXJvbm1lbnQgdmFyaWFibGVdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vYXBpL2pzLyNUZW5YRW52LmdldCk6ICBgYGAgeWFtbCBhcnRpZmFjdG9yeVRva2VuOiAkPVRlblhFbnYuZ2V0KFwiQVJUSUZBQ1RPUllfVE9LRU5cIikgYGBgIgogICAgICAgICAgfSwKICAgICAgICAgICJyZXBvIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiQXJ0aWZhY3RvcnkgcmVwb3NpdG9yeSBuYW1lXG5cbk5hbWUgb2YgdGhlIFtyZXBvc2l0b3J5XShodHRwczovL2pmcm9nLmNvbS9oZWxwL3IvamZyb2ctYXJ0aWZhY3RvcnktZG9jdW1lbnRhdGlvbi9yZXBvc2l0b3J5LW1hbmFnZW1lbnQpIHdpdGhpbiB0aGUgdGFyZ2V0IEFydGlmYWN0b3J5IGluc3RhbmNlIGZyb20gd2hpY2ggdG8gcHVsbCB0aGUgc3BlY2lmaWVkIGZpbGUuIgogICAgICAgICAgfSwKICAgICAgICAgICJmaWxlcyIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUmVtb3RlIHJlcG9zaXRvcnkgZmlsZSBwYXRoc1xuXG5QYXRocyBvZiBmaWxlcyB3aXRoaW4gdGhlIHRhcmdldCBBcnRpZmFjdG9yeSBpbnN0YW5jZSByZXBvc2l0b3J5IHRvIHB1bGwiLAogICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiZm9sZGVycyIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUmVtb3RlIHJlcG9zaXRvcnkgZm9sZGVyIHBhdGhzXG5cblBhdGhzIG9mIGZvbGRlcnMgd2l0aGluIHRoZSB0YXJnZXQgQXJ0aWZhY3RvcnkgaW5zdGFuY2UgcmVwb3NpdG9yeSB0byBwdWxsIiwKICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgInJlY3Vyc2l2ZSIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAiYm9vbGVhbiIsCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJQdWxsIGZpbGVzIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkgZm9sZGVycyByZWN1cnNpdmVseVxuXG5TcGVjaWZpZXMgd2hldGhlciB0byBwdWxsIGZpbGVzIGZyb20gW2FydGlmYWN0b3J5Rm9sZGVyc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3B1bGwvYXJ0aWZhY3RvcnkvI2FydGlmYWN0b3J5Zm9sZGVycykgcmVjdXJzaXZlbHkgKGkuZS4sIHB1bGwgc3ViLWZvbGRlcnMgYXMgd2VsbCkuIChBY2NlcHRzIGJvb2xlYW4gb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIChEZWZhdWx0OiBmYWxzZSkiLAogICAgICAgICAgICAiZGVmYXVsdCIgOiBmYWxzZQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmVkIiA6IFsKICAgICAgICAgICJpbnN0YW5jZSIsCiAgICAgICAgICAidG9rZW4iLAogICAgICAgICAgInJlcG8iCiAgICAgICAgXQogICAgICB9CiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# 🔟❎ 'compile' Artifactory configuration
# Pull artifacts (e.g., Java archives, .NET assemblies) from remote Artifactory instances to
# scan for symbol values. To learn more see https://doc.log10x.com/compile/pull/artifactory
# Set the 10x pipeline to 'compile'
tenx: compile
# ============================= Artifactory Options ===========================
artifactory:
# 'token' specifies an Artifactory API access token.
# To learn more see https://jfrog.com/help/r/jfrog-platform-administration-documentation/access-tokens
- token: $=TenXEnv.get("ARTIFACTORY_TOKEN") # (❗ REQUIRED)
# 'instance' specifies the of location of the remote Artifactory instance (e.g., https://demo.jfrog.io/artifactory)
instance: "" # (❗ REQUIRED)
# 'repo' specifies the target Artifactory repository (e.g., pypi-local)
repo: "" # (❗ REQUIRED)
# 'files' specifies files to pull from the target Artifactory repository # (❗ REQUIRED)
files: [
# dist/jfrog-pypi-example-1.0.0.tar.gz
]
# 'folders' specifies folders paths within the target Artifactory instance repository to pull # (❗ REQUIRED)
folders: [
]
# 'recursive' specifies whether to pull folders recursively (i.e., pull sub-folders as well).
recursive: true
Scan
Scan
Configure the Input Scanner to capture symbol values from source code/binary files and link to an output symbol library.
Below is the default configuration from: scanners/config.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiaW5wdXRQYXRocyIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAiYXJyYXkiLAogICAgICAgICJzdHJpbmciLAogICAgICAgICJudWxsIgogICAgICBdLAogICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiSW5wdXQgZm9sZGVycyB0byBzY2FuXG5cblByb3ZpZGVzIGEgbGlzdCBvZiBmb2xkZXJzIHRoYXQgYXJlIHRyYXZlcnNlZCBpbiBzZWFyY2ggb2Ygc291cmNlIGNvZGUgKGUuZy4gLmpzLCAuY3BwKSwgYmluYXJ5IChlLmcuLCAuc28sIC5qYXIsIC56aXApIGFuZCB0ZXh0IChlLmcuLCAuanNvbiwgLnhtbCkgZmlsZXMgdG8gY2FwdHVyZSBzeW1ib2wgdmFsdWVzIGZyb20gYW5kIG91dHB1dCB0byBzeW1ib2wgdW5pdCBmaWxlcy4gSW5wdXQgZm9sZGVycyBtYXkgY29udGFpbiBmaWxlcyBhbmQgZm9sZGVycyBwdWxsZWQgZnJvbSBbR2l0SHViXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvcHVsbC9naXRodWIvKSBvciAgYW5kIFtBcnRpZmFjdG9yeV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL2FydGlmYWN0b3J5KS4iLAogICAgICAiaXRlbXMiIDogewogICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgIH0KICAgIH0sCiAgICAib3V0cHV0U3ltYm9sRm9sZGVyIiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJzdHJpbmciLAogICAgICAgICJudWxsIgogICAgICBdLAogICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTG9jYXRpb24gb2Ygb3V0cHV0IHN5bWJvbCBmb2xkZXJcblxuU3BlY2lmaWVzIHRoZSByb290IGZvbGRlciBpbiB3aGljaCB0byB3cml0ZSBvdXRwdXQgc3ltYm9sIHVuaXQgZmlsZXMuIFRoaXMgY29tcGlsZXIgW3NjYW4gcGhhc2VdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FuLykgbWlycm9ycyB0aGUgc3RydWN0dXJlIG9mIHRoZSBbaW5wdXRQYXRoc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW4vI2lucHV0cGF0aHMpIGFyZ3VtZW50LCBwbGFjaW5nIGVhY2ggb3V0cHV0IHN5bWJvbCB1bml0IGluIHRoZSBzYW1lIHJlbGF0aXZlIHBhdGggdW5kZXIgW291dHB1dFN5bWJvbEZvbGRlcl0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW4vI291dHB1dHN5bWJvbGZvbGRlcikgYXMgaXRzIHNvdXJjZS9iaW5hcnkgaW5wdXQgZmlsZSB1bmRlciBpdHMgcmVzcGVjdGl2ZSBgaW5wdXRQYXRoc2AgZm9sZGVyIGVudHJ5LiAgRm9yIGV4YW1wbGUsIGlmIFtpbnB1dFBhdGhzXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbi8jaW5wdXRwYXRocykgaXMgYH4vZGV2YCBhbmQgaXQgY29udGFpbnMgdGhlIGZpbGUgYH4vZGV2L2FwcC9mb28uanNgLCBhbmQgdGhpcyB2YWx1ZSBpcyBgfi9zeW1ib2xzYCwgdGhlIHJlc3BlY3RpdmUgb3V0cHV0IHN5bWJvbCB1bml0IGZpbGUgaXM6IGB+L3N5bWJvbHMvYXBwL2Zvby5qcy4xMHguanNvbmAuIgogICAgfSwKICAgICJzY2FuIiA6IHsKICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICJmb3JjZSIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJib29sZWFuIiwKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDb250cm9sIHdoZXRoZXIgdG8gc2NhbiBpbnB1dCBmaWxlcyBldmVuIGlmIGEgbWF0Y2hpbmcgZXhpc3Rpbmcgc3ltYm9sIGZpbGUgZXhpc3RzXG5cbkNvbnRyb2xzIHdoZXRoZXIgdG8gcmV1c2UgbWF0Y2hpbmcgc3ltYm9sIGZpbGVzIHdpdGhpbiBbaW5wdXRQYXRoc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW4vI2lucHV0cGF0aHMpLiBUaGlzIG9wdGlvbiBpcyBwcmltYXJpbHkgdXNlZnVsIHdoZW4gZGVidWdnaW5nIGEgbmV3IHNjYW5uZXIgbW9kdWxlIGNvbmZpZ3VyYXRpb24gKGUuZy4sIEFOVExSIGdyYW1tYXIpICBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBbc2Nhbm5lciBkZWJ1Z2dpbmddKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FuKSBvcHRpb25zLiAoQWNjZXB0cyBib29sZWFuIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogZmFsc2UpIiwKICAgICAgICAgICJkZWZhdWx0IiA6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiaW5Qcm9jZXNzIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImJvb2xlYW4iLAogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkNvbnRyb2xzIHdoZXRoZXIgdG8gc2NhbiBzb3VyY2UvYmluYXJ5IGlucHV0IGZpbGVzIHVzaW5nIHN1Yi1wcm9jZXNzKGVzKVxuXG5UaGUgc2Nhbm5lciBjYW4gbGF1bmNoIFtzdWJwcm9jZXNzZXNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FuLyNzdWJwcm9jZXNzXzEpIHRvIGNhcHR1cmUgW3N5bWJvbF0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N0cnVjdHVyZS8jc3ltYm9scykgaW5mb3JtYXRpb24gZnJvbSBzcGVjaWZpYyB0YXJnZXQgc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlcy4gICBHZW5lcmF0aW5nIGlucHV0IGZpbGUgW0FTVHNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Fic3RyYWN0X3N5bnRheF90cmVlKSB0byBzY2FuIGZvciBzeW1ib2xzIHZhbHVlcyBmb3IgY29tcGxleCBzeW50YXhlcyBjYW4gYmUgYSBsZW5ndGh5LCByZXNvdXJjZS1jb25zdW1pbmcgb3BlcmF0aW9uLCB3aGljaCBpbiB0aGUgY2FzZSBvZiAgW0FOVExSIHN5bnRheGVzXShodHRwczovL3RvbWFzc2V0dGkubWUvaW1wcm92aW5nLXRoZS1wZXJmb3JtYW5jZS1vZi1hbi1hbnRsci1wYXJzZXIvKSBtYXkgdGltZW91dCBvciBydW4gb3V0IG9mIG1lbW9yeS4gICAgIFByb2Nlc3MgW2lzb2xhdGlvbl0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUHJvY2Vzc19pc29sYXRpb24pIGFsbG93cyBmb3IgdGVybWluYXRpbmcgc2NhbiBvcGVyYXRpb25zIHRoYXQgdGltZW91dCBmb3Igc3BlY2lmaWMgZmlsZXMsIHdoaWxlIGFsbG93aW5nIG90aGVycyB0byBwcm9jZWVkLiAoQWNjZXB0cyBib29sZWFuIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogZmFsc2UpIiwKICAgICAgICAgICJkZWZhdWx0IiA6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAidGhyZWFkUG9vbFNpemUiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bWJlciIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJNYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzIHRvIHVzZSBjb25jdXJyZW50bHkgcHJvY2VzcyBpbnB1dCBzb3VyY2UgY29kZSAvYmluYXJ5IGZpbGVzXG5cbkNvbnRyb2xzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzIHRvIHByb2Nlc3MgaW5wdXQgc291cmNlIGNvZGUvYmluYXJ5IGZpbGVzIGNvbmN1cnJlbnRseTogLSBJZiB0aGUgdmFsdWUgaXMgYmV0d2VlbiAwIGFuZCAxLCB0aGUgbnVtYmVyIGNhbGN1bGF0ZXMgYSBwZXJjZW50YWdlIG9mIGF2YWlsYWJsZSBjb3JlcyAoZS5nLiwgMC41ID0gdXNlIHVwIHRvIDUwJSBvZiBhdmFpbGFibGUgY29yZXMpLiAgIC0gSWYgdGhlIHZhbHVlIGlzID49IDEsIHRoZSB2YWx1ZSBzZXRzIGEgZml4ZWQgbnVtYmVyIG9mIHRocmVhZHMgKGUuZy4sIDEwID0gMTAgdGhyZWFkcykuICAgLSBJZiB0aGUgdmFsdWUgaXMgMSwgYWxsb2NhdGUgYSBzaW5nbGUgdGhyZWFkIHRvIHByb2Nlc3MgaW5wdXQgZmlsZXMuIChEZWZhdWx0OiAwLjUpIiwKICAgICAgICAgICJkZWZhdWx0IiA6ICIwLjUiCiAgICAgICAgfSwKICAgICAgICAidW5pdFRpbWVvdXQiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlRpbWVvdXQgaW50ZXJ2YWwgZm9yIHNjYW5uaW5nIGEgc291cmNlIGNvZGUgL2JpbmFyeSBpbnB1dCBmaWxlXG5cblNldHMgdGhlIHRpbWVvdXQgaW50ZXJ2YWwgd2hlbiBzY2FubmluZyBhIHNvdXJjZSBjb2RlIC9iaW5hcnkgaW5wdXQgZmlsZSBiZWZvcmUgZHJvcHBpbmcgaXQuIFNldCB0byBudWxsIHRvIGlnbm9yZS4gKERlZmF1bHQ6IDIwcykiLAogICAgICAgICAgImRlZmF1bHQiIDogIjIwcyIKICAgICAgICB9LAogICAgICAgICJvcGVyYXRpb25UaW1lb3V0IiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJUaW1lb3V0IGludGVydmFsIGZvciB0aGUgZW50aXJlIHNjYW5uaW5nIG9wZXJhdGlvblxuXG5TZXRzIHRoZSB0aW1lb3V0IGludGVydmFsIGZvciB0aGUgZW50aXJlIHNjYW5uaW5nIG9wZXJhdGlvbiBiZWZvcmUgdGVybWluYXRpbmcgaXQuIFNldCB0byBudWxsIHRvIGlnbm9yZS4gKERlZmF1bHQ6IDEwbSkiLAogICAgICAgICAgImRlZmF1bHQiIDogIjEwbSIKICAgICAgICB9LAogICAgICAgICJkZWJ1ZyIgOiB7CiAgICAgICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICAgIm9yaWdpbnMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgaW5wdXQgZmlsZSBuYW1lcyBmb3Igd2hpY2ggdG8gbG9nIGluZm9ybWF0aW9uXG5cblNwZWNpZmllcyBhIGxpc3Qgb2YgaW5wdXQgZmlsZSBuYW1lcyAoZS5nLiwgbXkuc2NhbGEsIGZvby5qYXZhKSB0byBsb2cgaW5mb3JtYXRpb24gcmVsYXRpbmcgdG8gd2hpY2ggc3ltYm9scyB3ZXJlIGNhcHR1cmVkL3NraXBwZWQuIFNwZWNpZnkgJyonIGZvciBhbGwgZmlsZXMuIiwKICAgICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzeW1ib2xzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIG5vZGUgdHlwZXMgd2l0aGluIGEgc2Nhbm5lciBBU1QgdHJlZSBmb3Igd2hpY2ggdG8gbG9nIGluZm9ybWF0aW9uXG5cbkxpc3Qgb2Ygbm9kZXMgd2l0aGluIGFuIGlucHV0IEFTVCB0cmVlLCBzdWNoIGFzIGNsYXNzIGFuZCBtZXRob2QgbmFtZXMoZS5nLiwgJ015Q2xhc3MnLCAnZm9vJykgZm9yIHdoaWNoIHRvIGxvZyBpbmZvcm1hdGlvbiByZWxhdGluZyB0byB0aGUgY29udGV4dCBpbiB3aGljaCB0aGV5IHdlcmUgY2FwdHVyZWQvc2tpcHBlZCBhcyBzeW1ib2xzLiAgU3BlY2lmeSAnKicgZm9yIGFsbCBub2Rlcy4iLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImxvZ2dlck5hbWUiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiRGVidWcgbG9nZ2VyIG5hbWVcblxuU3BlY2lmaWVzIHRoZSBsb2c0aiBsb2dnZXIgZm9yIGxvZ2dpbmcgdmFsdWVzIGZvciBzeW1ib2xzL2ZpbGVzIG1hdGNoaW5nICdkZWJ1Z09yaWdpbnMnIGFuZCAnZGVidWdTeW1ib2xzJy4gKERlZmF1bHQ6IFtjb25zb2xlT3V0XShodHRwczovL2dpdGh1Yi5jb20vbG9nLTEweC9jb25maWcvYmxvYi9tYWluL2xvZzRqMi55YW1sI0w2NikpIiwKICAgICAgICAgICAgICAiZGVmYXVsdCIgOiAiW2NvbnNvbGVPdXRdKGh0dHBzOi8vZ2l0aHViLmNvbS9sb2ctMTB4L2NvbmZpZy9ibG9iL21haW4vbG9nNGoyLnlhbWwjTDY2KSIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJwcmludE91dHB1dCIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAiYm9vbGVhbiIsCiAgICAgICAgInN0cmluZyIsCiAgICAgICAgIm51bGwiCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDb250cm9scyB3aGV0aGVyIHRvIGVtaXQgb3V0cHV0IHNjYW4gb3BlcmF0aW9ucyBwcm9ncmVzcyB0byB0aGUgY29uc29sZVxuXG5Db250cm9scyB3aGV0aGVyIGluZm9ybWF0aW9uIHJlbGF0aW5nIHRvIHN5bWJvbCB1bml0cyBzY2FubmluZyBpcyBlbWl0dGVkIHRvIHRoZSBzdGRvdXQgc3RyZWFtLiBUaGlzIHZhbHVlIHNob3VsZCBiZSBzZXQgdG8gdHJ1ZSB3aGVuIHRoZSBjdXJyZW50IDEweCBwcm9jZXNzIGlzICBzcGF3bmVkIGJ5IGEgcGFyZW50IDEweCAnY29tcGlsZScgcGlwZWxpbmUgdG8gcmVwb3J0IGl0cyBwcm9ncmVzcy4gKEFjY2VwdHMgYm9vbGVhbiBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikgKERlZmF1bHQ6IGZhbHNlKSIsCiAgICAgICJkZWZhdWx0IiA6IGZhbHNlCiAgICB9LAogICAgInVuaXRzVG9TY2FuUGVyQmF0Y2giIDogewogICAgICAidHlwZSIgOiBbCiAgICAgICAgIm51bWJlciIsCiAgICAgICAgInN0cmluZyIsCiAgICAgICAgIm51bGwiCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJNYXhpbXVtIG51bWJlciBvZiBpbnB1dCBmaWxlcyB0byBzY2FuIHBlciBzdWItcHJvY2Vzcy5cblxuU2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlcyB0byBzY2FuIGJ5IGEgc2luZ2xlICdjb21waWxlJyBzdWItcHJvY2Vzcy4gU2V0IHRvIDAgdG8gdW5saW1pdGVkLiAoQWNjZXB0cyBudW1iZXIgb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIChEZWZhdWx0OiA0MCkiLAogICAgICAiZGVmYXVsdCIgOiA0MAogICAgfSwKICAgICJ0b2tlbkRlbGltcyIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAic3RyaW5nIiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlRva2VuIGRlbGltaXRlcnNcblxuRGVmaW5lcyB3aGljaCBjaGFyYWN0ZXJzIGJyZWFrIGEgc3RyaW5nIG9mIGV2ZW50IGNoYXJhY3RlcnMgaW50byB0b2tlbnMgdG8gY2xhc3NpZnkgYXMgc3ltYm9scyBvciB2YXJpYWJsZXMuIChEZWZhdWx0OiA8PnwuIF1bOi0rLyo9XFxcXCx7fV8oKTsnXFxcIiRcXHRcXG5AKSIsCiAgICAgICJkZWZhdWx0IiA6ICI8PnwuIF1bOi0rLyo9XFxcXCx7fV8oKTsnXFxcIiRcXHRcXG5AIgogICAgfSwKICAgICJmaWxlRXh0U3RyaW5nRm9ybWF0cyIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAiYXJyYXkiLAogICAgICAgICJzdHJpbmciLAogICAgICAgICJudWxsIgogICAgICBdLAogICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiU3RyaW5nIGZvcm1hdCBzcGVjaWZpZXIgY2hhcmFjdGVyc1xuXG5Db250cm9scyB3aGljaCBjaGFyYWN0ZXJzIGlkZW50aWZ5IHRoZSBzdGFydCBvZiBhIFtmb3JtYXQgc3BlY2lmaWVyXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QcmludGYjRm9ybWF0X3NwZWNpZmllcikgZm9yIGVhY2ggcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgZXh0ZW5zaW9uIGluIHRoZSBmb3JtIG9mIDxleHQ+Ojxmb3JtYXRQcmVmaXg+IChlLmcuLCBgLmphdmE6JWApLiAgSXQgaXMgYSBzdGFuZGFyZCBwcm9ncmFtbWluZyBwcmFjdGljZSB0byB1c2Ugc3RyaW5nIGZvcm1hdHMgdG8gbG9nIG1lc3NhZ2VzIGluIHRoZSBmb3JtIG9mOiAgYGBgIGphdmEgbG9nLmVycm9yKFwiY291bGQgbm90IGNvbm5lY3QgdG8ge30gd2l0aCBzdGF0dXMge31cIiwgaG9zdCwgc3RhdHVzKTsgYGBgICBXaGVuIGFuIFRlblhUZW1wbGF0ZSB0b2tlbml6ZXIgcHJvY2Vzc2luZyBhbiBldmVudCBpZGVudGlmaWVzIGEgZm9ybWF0IHByZWZpeCAoZS5nLiwgYCVgKSBpdCBza2lwcyBpdCBhbmQgYXBwZW5kcyBzdWJzZXF1ZW50IHN5bWJvbCB0b2tlbnMgKGUuZy4sIGB3aXRoIHN0YXR1c2ApIHRvIHRoZSBzeW1ib2wgc2VxdWVuY2UgcHJlY2VkaW5nIHRoZW0gKGUuZy4sIGBjb3VsZCBub3QgY29ubmVjdCB0b2ApLiIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgfQogICAgfSwKICAgICJtYXhTeW1ib2wiIDogewogICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgInVuaXRTZWN0aW9uU2l6ZSIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJudW1iZXIiLAogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1heGltdW0gbnVtYmVyIG9mIHN5bWJvbCB0b2tlbnMgdG8gc3RvcmUgaW4gYSBzaW5nbGUgc3ltYm9sIHVuaXQgZmlsZVxuXG5Db250cm9scyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc3ltYm9sIHRva2VucyB0byBzdG9yZSBpbiBhIHN5bWJvbCB1bml0IGJlZm9yZSBzcGxpdHRpbmcgaXQuIFRoaXMgb3B0aW9uIHN1cHBvcnRzIGxhcmdlIHNvdXJjZSBjb2RlIC9iaW5hcnkgaW5wdXQgZmlsZXMgdGhhdCBtYXkgaGF2ZSB0aG91c2FuZHMgb2YgdGV4dCBzeW1ib2xzIHRvIGF2b2lkICBjcmVhdGluZyBzaXplYWJsZSBpbmRpdmlkdWFsIHN5bWJvbCB1bml0IGZpbGVzLiAgICAgICAgIFNldCB0byBudWxsIHRvIGlnbm9yZS4gKEFjY2VwdHMgbnVtYmVyIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogNTAwKSIsCiAgICAgICAgICAiZGVmYXVsdCIgOiA1MDAKICAgICAgICB9LAogICAgICAgICJ1bml0c1BlclRva2VuIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgIm51bWJlciIsCiAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAibnVsbCIKICAgICAgICAgIF0sCiAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTnVtYmVyIG9mIHN5bWJvbCB1bml0cyB0byByZXRyaWV2ZSB3aGVuIHNlYXJjaGluZyBmb3IgdGhlIG9yaWdpbiBvZiBhbiBUZW5YVGVtcGxhdGUgc3ltYm9sIHNlcXVlbmNlXG5cbkNvbnRyb2xzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzeW1ib2wgdW5pdHMgdG8gbG9hZCBmcm9tIHRoZSBwaXBlbGluZSdzIHN5bWJvbCBsaWJyYXJ5IHdoZW4gc2VhcmNoaW5nIGZvciB0aGUgb3JpZ2luIG9mIGEgc3BlY2lmaWMgW1RlblhUZW1wbGF0ZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdGVtcGxhdGUvKSBzeW1ib2wuICAgVGhlIFtzeW1ib2xTZXF1ZW5jZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvanMvI1RlblhPYmplY3Qrc3ltYm9sU2VxdWVuY2UpIGZ1bmN0aW9uIHF1ZXJpZXMgdGhlIHNvdXJjZSBjb2RlL2JpbmFyeSBvcmlnaW4gb2Ygc3ltYm9sIHNlcXVlbmNlcyBpbiBhIHRhcmdldCBUZW5YVGVtcGxhdGUgdG8gaWRlbnRpZnkgdGhlIGxvZ2ljYWwgW21lc3NhZ2VdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL2luaXRpYWxpemUvbWVzc2FnZS8pIHBvcnRpb24gb2YgYSB0YXJnZXQgYXBwL2luZnJhIGV2ZW50cyB2cy4gdmFyaWFibGUgYW5kIGNvbnRleHQgaW5mb3JtYXRpb24gKGUuZy4sIHVzZXIsIGhvc3QsIHNldmVyaXR5KS4gICBTaW5jZSBhIFtzeW1ib2xdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zdHJ1Y3R1cmUvI3N5bWJvbHMpIHZhbHVlIG1heSBhcHBlYXIgaW4gaHVuZHJlZHMgb3IgbW9yZSBsb2NhdGlvbnMgYWNyb3NzIGEgY29kZSBiYXNlLCAgbGltaXRpbmcgdGhlIG51bWJlciBvZiBzeW1ib2wgdW5pdHMgdG8gbG9hZCBpcyBuZWNlc3NhcnkgdG8gcmVkdWNlIG1lbW9yeSBjb25zdW1wdGlvbi4gICBBIHNlY29uZCBjb25zaWRlcmF0aW9uIGlzIHBsYWNpbmcgYW4gdXBwZXIgbGltaXQgb24gdGhlIG51bWJlciBvZiB1bml0cyB0byBsb2FkIGZyb20gdGhlIHN5bWJvbCBsaWJyYXJ5LCAgd2hpY2ggaXMgdGhlIG1vcmUgZnJlcXVlbnQgYSBzeW1ib2wgaXMsIHRoZSBsb3dlciB0aGUgcHJvYmFiaWxpdHkgb2Ygc2VsZWN0aW5nIHRoZSBjb3JyZWN0IG9yaWdpbi4gKEFjY2VwdHMgbnVtYmVyIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogMTI4KSIsCiAgICAgICAgICAiZGVmYXVsdCIgOiAxMjgKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9LAogICJyZXF1aXJlZCIgOiBbCiAgICAiaW5wdXRQYXRocyIKICBdLAogICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZQp9
# 🔟❎ 'compile' symbol scanner config
# Configure input and output options for the compile pipeline.
# To learn more see https://doc.log10x.com/compile/scan
tenx: compile
# ========================== Configure I/O Paths ==============================
# 'inputPaths' lists folders on disk containing source code and binary files to scan.
# To learn more see https://doc.log10x.com/compile/scan/#inputpaths
inputPaths:
- $=path("data/compile/sources", "") # Default to none ("") if source folder not found
# - <path-to-input-files> # uncomment to specify additional input paths
# 'outputSymbolFolder' specifies the folder for output symbol unit files.
# To learn more see https://doc.log10x.com/compile/scan/#outputsymbolfolder
outputSymbolFolder: $=TenXEnv.get("TENX_OUTPUT_SYMBOL_FOLDER", path("data/shared/symbols", "<tenx.io.tmpdir>")) # Default to 10x temp dir
Link
Link
Configure the Symbol library linker to link symbol unit files to an output symbol library file.
Below is the default configuration from: link/config.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAib3V0cHV0U3ltYm9sTGlicmFyeUZpbGUiIDogewogICAgICAidHlwZSIgOiBbCiAgICAgICAgInN0cmluZyIsCiAgICAgICAgIm51bGwiCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMb2NhdGlvbiBvZiBvdXRwdXQgc3ltYm9sIGxpYnJhcnkgZmlsZVxuXG5TcGVjaWZpZXMgYW4gb3V0cHV0IHN5bWJvbCBsaWJyYXJ5IGZpbGUgbWVyZ2luZyB0aGUgc3ltYm9sIHVuaXQgZmlsZXMgcHJvZHVjZWQgZm9yIFtpbnB1dFBhdGhzXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbi8jaW5wdXRwYXRocykuIFRoZSBzeW1ib2wgbGlicmFyeSBmaWxlIHByb3ZpZGVzIGEgc2luZ2xlIGFydGlmYWN0IHRvIHNldCBhcyB0aGUgW3N5bWJvbFBhdGhzXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi9zeW1ib2wvI3N5bWJvbHBhdGhzKSBhdCBydW4gdGltZS4iCiAgICB9LAogICAgIm1heFN5bWJvbFVuaXRGaWxlU2l6ZSIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAic3RyaW5nIiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1heCBmaWxlIHNpemUgZm9yICdvdXRwdXRTeW1ib2xMaWJyYXJ5RmlsZScgYmVmb3JlIGl0IGlzIHNwbGl0IGludG8gY2h1bmtzXG5cblNldHMgdGhlIG1heGltdW0gZmlsZSBzaXplIChlLmcuLCA0ME1CKSBmb3IgW291dHB1dFN5bWJvbExpYnJhcnlGaWxlXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvbGluay8jb3V0cHV0c3ltYm9sbGlicmFyeWZpbGUpIGJlZm9yZSBzcGxpdHRpbmcgaW50byBjaHVua3MsIGVhY2ggd2VpZ2hpbmcgbm8gbW9yZSB0aGFuIHRoaXMgdmFsdWUuIFRoaXMgb3B0aW9uIGVuYWJsZXMgbGFyZ2UgIGFydGlmYWN0cyB0byByZW1haW4gW0dpdEh1YiBjb21taXR0YWJsZV0oaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vcmVwb3NpdG9yaWVzL3dvcmtpbmctd2l0aC1maWxlcy9tYW5hZ2luZy1sYXJnZS1maWxlcy9hYm91dC1sYXJnZS1maWxlcy1vbi1naXRodWIpLiAoRGVmYXVsdDogNDBNQikiLAogICAgICAiZGVmYXVsdCIgOiAiNDBNQiIKICAgIH0sCiAgICAic3ltYm9sIiA6IHsKICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICJ0eXBlcyIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAibnVsbCIKICAgICAgICAgIF0sCiAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiVG9rZW4gdHlwZXMgcmVhZCBmcm9tIGlucHV0IHNvdXJjZS9iaW5hcnkgZmlsZXMgd3JpdHRlbiB0byBvdXRwdXRcblxuRmlsdGVyIHN5bWJvbCB2YWx1ZXMgdG8gd3JpdGUgdG8gW291dHB1dFN5bWJvbExpYnJhcnlGaWxlXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvbGluay8jb3V0cHV0c3ltYm9sbGlicmFyeWZpbGUpIGJhc2VkIG9uIHRoZWlyIFtjb250ZXh0XShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNjb250ZXh0cykuIFRoaXMgb3B0aW9uIHJlZHVjZXMgdGhlIHNpemUgb2YgdGhlIG91dHB1dCBzeW1ib2wgbGlicmFyeSBmaWxlIGJ5IG9taXR0aW5nIHN5bWJvbCB0eXBlcyBub3QgcmVxdWlyZWQgYXQgcnVuIHRpbWUuICBGb3IgcG9zc2libGUgdmFsdWVzLCBzZWU6IFtjb250ZXh0c10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jY29udGV4dHMpLiAoRGVmYXVsdDogW1wicGFja2FnZVwiLFwiY2xhc3NcIixcImVudW1cIixcImxvZ1wiLFwidGV4dFwiLFwiZXhlY1wiXSkiLAogICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgIH0sCiAgICAgICAgICAiZGVmYXVsdCIgOiBbCiAgICAgICAgICAgICJwYWNrYWdlIiwKICAgICAgICAgICAgImNsYXNzIiwKICAgICAgICAgICAgImVudW0iLAogICAgICAgICAgICAibG9nIiwKICAgICAgICAgICAgInRleHQiLAogICAgICAgICAgICAiZXhlYyIKICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgICJmaWxlTmFtZUZpbHRlcnMiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlJlZ2V4IHBhdHRlcm5zIHRvIGV4Y2x1ZGUgc3ltYm9sIGZpbGVzIGZyb20gb3V0cHV0IHN5bWJvbCBsaWJyYXJ5XG5cbkZpbHRlcnMgc3ltYm9sIGZpbGVzIHRvIGV4Y2x1ZGUgZnJvbSBbb3V0cHV0U3ltYm9sTGlicmFyeUZpbGVdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9saW5rLyNvdXRwdXRzeW1ib2xsaWJyYXJ5ZmlsZSkgdXNpbmcgcmVnZXggcGF0dGVybnMuIFRoaXMgb3B0aW9uIGlzIHR5cGljYWxseSB1c2VkIHRvIGV4Y2x1ZGUgdGVzdCBmaWxlcyBmcm9tIHRoZSBzeW1ib2wgbGlicmFyeSwgcmVkdWNpbmcgb3V0cHV0IHNpemUgYW5kIGZvY3VzaW5nIG9uIHByb2R1Y3Rpb24gY29kZSBzeW1ib2xzLiAgQ29tbW9uIHBhdHRlcm5zIGZvciBleGNsdWRpbmcgdGVzdCBmaWxlcyBhY3Jvc3MgbGFuZ3VhZ2VzOiAtIEphdmE6IGBeLiooVGVzdHxUZXN0c3xUZXN0Q2FzZSlcXC5qYXZhJGAgKEpVbml0L1Rlc3RORyB0ZXN0IGZpbGVzKSAtIEphdmFTY3JpcHQvVHlwZVNjcmlwdDogYF4uKlxcLih0ZXN0fHNwZWMpXFwuKGpzfGpzeHx0c3x0c3h8bWpzfGNqcykkYCAoSmVzdC9Nb2NoYS9WaXRlc3QgdGVzdCBmaWxlcykgLSBQeXRob246IGBedGVzdF8uK1xcLnB5JGAgb3IgYF4uK190ZXN0XFwucHkkYCAocHl0ZXN0L3VuaXR0ZXN0IHRlc3QgZmlsZXMpIC0gU2NhbGE6IGBeLiooU3BlY3xUZXN0KVxcLnNjYWxhJGAgKFNjYWxhVGVzdC9TcGVjczIgdGVzdCBmaWxlcykgLSBDIzogYF4uKihUZXN0fFRlc3RzKVxcLmNzJGAgKHhVbml0L05Vbml0L01TVGVzdCB0ZXN0IGZpbGVzKSAtIEdvOiBgXi4qX3Rlc3RcXC5nbyRgIChidWlsdC1pbiB0ZXN0aW5nIGZyYW1ld29yayB0ZXN0IGZpbGVzKSAtIEMrKzogYF4uKihfdGVzdHxUZXN0KXM/XFwuKGNwcHxjY3xjeHh8aHBwfGh8aHh4KSRgIChHb29nbGVUZXN0L0NhdGNoMi9Cb29zdC5UZXN0IHRlc3QgZmlsZXMpIiwKICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiZm9sZGVyRmlsdGVycyIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAibnVsbCIKICAgICAgICAgIF0sCiAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUGF0dGVybnMgdG8gZXhjbHVkZSBzeW1ib2wgZmlsZXMgYnkgZm9sZGVyIGZyb20gb3V0cHV0IHN5bWJvbCBsaWJyYXJ5XG5cbkZpbHRlcnMgc3ltYm9sIGZpbGVzIHRvIGV4Y2x1ZGUgZnJvbSBbb3V0cHV0U3ltYm9sTGlicmFyeUZpbGVdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9saW5rLyNvdXRwdXRzeW1ib2xsaWJyYXJ5ZmlsZSkgYmFzZWQgb24gZm9sZGVyIGxvY2F0aW9uLiBUaGlzIG9wdGlvbiBjb21wbGVtZW50cyBbc3ltYm9sRmlsZU5hbWVGaWx0ZXJzXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvbGluay8jc3ltYm9sZmlsZW5hbWVmaWx0ZXJzKSBieSBleGNsdWRpbmcgZmlsZXMgYmFzZWQgb24gdGhlaXIgY29udGFpbmluZyBmb2xkZXIuICAqKlBsYWluIGZvbGRlciBuYW1lKiogKGUuZy4sIGB0ZXN0YCkgLSBtYXRjaGVzIHdoZW4gdGhlIGZpbGUncyBkaXJlY3QgcGFyZW50IGZvbGRlciBoYXMgdGhpcyBuYW1lLiBPbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLCB1bmRlcnNjb3JlcywgYW5kIGh5cGhlbnMgYXJlIHRyZWF0ZWQgYXMgcGxhaW4gbmFtZXMuICAqKlJlZ2V4IHBhdHRlcm4qKiAoYW55dGhpbmcgZWxzZSkgLSBtYXRjaGVkIGFnYWluc3QgdGhlIGZ1bGwgZmlsZSBwYXRoIChjYXNlLWluc2Vuc2l0aXZlKS4gVXNlIGBbL1xcXFxdYCBmb3IgY3Jvc3MtcGxhdGZvcm0gcGF0aCBzZXBhcmF0b3JzIChVbml4IGAvYCBhbmQgV2luZG93cyBgXFxgKS4gICoqRXhhbXBsZXM6KiogLSBgdGVzdGAgLSBGaWxlcyBkaXJlY3RseSBpbnNpZGUgYSBgdGVzdGAgZm9sZGVyIC0gYF9fdGVzdHNfX2AgLSBGaWxlcyBkaXJlY3RseSBpbnNpZGUgYF9fdGVzdHNfX2AgKEplc3QgY29udmVudGlvbikgLSBgWy9cXFxcXXZlbmRvclsvXFxcXF1gIC0gRmlsZXMgYW55d2hlcmUgdW5kZXIgYSBgdmVuZG9yYCBmb2xkZXIgKEdvIHZlbmRvcmVkIGRlcHMpIC0gYFsvXFxcXF1ub2RlX21vZHVsZXNbL1xcXFxdYCAtIEZpbGVzIGFueXdoZXJlIHVuZGVyIGBub2RlX21vZHVsZXNgIiwKICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# 🔟❎ 'compile' merge configuration
# Combine symbol units into a single output symbol library file.
# To learn more see https://doc.log10x.com/compile/link/
# Set the 10x pipeline to 'compile'
tenx: compile
# ============================ Symbol Library Output ==========================
# 'outputSymbolLibraryFile' specifies location of output symbol library file which
# links the contents of 'outputSymbolFolder' to a single .json artifact and a
# compressed .zip version for use at run time by 10x 'run' pipelines.
# If a local output dir exists write to it, otherwise use the pipeline's temp folder.
# To learn more see https://doc.log10x.com/compile/link
outputSymbolLibraryFile: $=TenXEnv.get("TENX_OUTPUT_SYMBOL_LIBRARY_FILE", path("data/shared/symbols", "<tenx.io.tmpdir>") + "/" + TenXEnv.get("runtimeName", "symbols") + ".10x.tar")
# ============================ Symbol Filter options ==========================
# The options below control which symbol files and values are merged into 'outputSymbolLibraryFile'
symbol:
# 'fileNameFilters': exclude test files from symbol library
fileNameFilters:
# ── Java ───────────────────────────────────────
- ^.*(Test|Tests|TestCase|TestSuite)\.java$ # *Test.java, *TestCase.java, *TestSuite.java
- ^Test.*\.java$ # TestFoo.java (legacy)
# ── JavaScript / TypeScript ────────────────────
- ^.*\.(test|spec)\.(js|jsx|ts|tsx|mjs|cjs)$ # *.test.js, *.spec.tsx
# ── Python ─────────────────────────────────────
- ^test_.+\.py$ # test_utils.py
- ^.+_test\.py$ # utils_test.py
- ^test(s|case|cases|suite|suites)?\.py$ # test.py, tests.py, testcase.py, testcases.py, testsuite.py
# ── Scala ──────────────────────────────────────
- ^.*(Spec|Test|Suite)\.scala$ # *Spec.scala, *Test.scala, *Suite.scala
# ── C# ─────────────────────────────────────────
- ^.*(Test|Tests|TestCase|TestSuite)\.cs$ # *Test.cs, *TestCase.cs, *TestSuite.cs
# ── Go ─────────────────────────────────────────
- ^.*_test\.go$ # *_test.go
# Note: testdata.go is usually a data file, not test code → not filtered here
# ── C++ ───────────────────────────────────────
- ^.*(_test|Test|Tests)s?\.(cpp|cc|cxx|hpp|h|hxx)$ # *_test.cpp, *Test.hpp, *Tests.cpp
# 'folderFilters': patterns to exclude files by folder
# Plain name (e.g., "test") → matches direct parent folder only
# Regex (e.g., "[/\\]vendor[/\\]") → matches anywhere in full path
folderFilters:
- test # direct parent is "test"
- tests # direct parent is "tests"
- __tests__ # Jest convention
- spec # RSpec/Jasmine convention
- specs # RSpec/Jasmine convention
- unit # unit test folder
- integration # integration test folder
- e2e # e2e tests (Cypress, Playwright)
- end-to-end # alternate e2e naming
- acceptance # acceptance test folder
- testdata # Go test data folder
- fixtures # test fixtures folder
- mocks # mock implementations folder
- "[/\\\\]vendor[/\\\\][a-z]+\\.[a-z]" # Go vendored deps (vendor/domain.tld pattern)
# 'types' controls the types of symbols written into 'outputSymbolLibraryFile'
# for reflective use at runtime.
# Narrowing the this list reduces the size of the output 10x symbols file. Possible values:
types:
- class # source code class/interface name (e.g. 'AcmeLogic')
- enum # source code enum/literal name (e.g. 'severity: {error,warn,debug}')
- log # source code print format passed to a logging method/stream (e.g. 'err("could not connect to %s",..');
- exec # string value extracted from a binary executable input file (e.g. via 'strings' nix command)
# - method # code method/function name (e.g. 'foo')
# - const # string constant assigned into a variable or method arg (e.g. 'greeting = "hello world"')
# - text # string value, usually read from a config file (e.g. JSON/XML/YAML field name)
# - package # source code package/namespace/module name (e.g. 'com.acme.core')
Push
Push
Configure GitHub push committers to push output symbol unit files to GitHub.
Below is the default configuration from: push/config.yaml (* Required Fields).
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiZ2l0aHViUHVzaCIgOiB7CiAgICAgICJ0eXBlIiA6ICJhcnJheSIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICJyZXBvIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiVGFyZ2V0IEdpdEh1YiByZXBvXG5cbklkZW50aWZpZXMgYSBHaXRIdWIgcmVwb3NpdG9yeSB0byBwdXNoIGZpbGVzIHRvIGluY2x1ZGluZyB0aGUgdXNlcm5hbWUgb2YgdGhlIG93bmVyIChlLmcuLCAnc29tZS11c2VyL3JlcG8tbmFtZScpIgogICAgICAgICAgfSwKICAgICAgICAgICJ0b2tlbiIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkdpdEh1YiBBUEkgYWNjZXNzIHRva2VuXG5cbkRlZmluZXMgYW4gYWNjZXNzIHRva2VuIGZvciBhY2Nlc3NpbmcgR2l0aHViIHJlcG9zLiBUbyBsZWFybiBtb3JlIHNlZSBbR2l0SHViIHRva2Vuc10oaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYXV0aGVudGljYXRpb24va2VlcGluZy15b3VyLWFjY291bnQtYW5kLWRhdGEtc2VjdXJlL21hbmFnaW5nLXlvdXItcGVyc29uYWwtYWNjZXNzLXRva2VucykuIgogICAgICAgICAgfSwKICAgICAgICAgICJicmFuY2giIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJUYXJnZXQgYnJhbmNoIHRvIHB1c2ggdG9cblxuU3BlY2lmaWVzIHRoZSBicmFuY2ggdG8gdXNlIHdoZW4gcHVzaGluZyB0byB0aGlzIHJlcG8uIElmIG9taXR0ZWQsIHVzZSB0aGUgcmVwb3NpdG9yeSdzIGRlZmF1bHQgYnJhbmNoLiIKICAgICAgICAgIH0sCiAgICAgICAgICAiZm9sZGVyIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiRm9sZGVyIHdpdGhpbiB0aGUgdGFyZ2V0IEdpdEh1YiByZXBvIGluIHdoaWNoIHRvIHB1c2ggZmlsZXNcblxuSWRlbnRpZmllcyBhIGZvbGRlciB3aXRoaW4gdGhlIHRhcmdldCBHaXRIdWIgcmVwbyB0byBwdXNoIG91dHB1dCBzeW1ib2wgZmlsZXMgdG8iCiAgICAgICAgICB9LAogICAgICAgICAgImZpbHRlciIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkEgcmVnZXggcGF0dGVybiBhIGZpbGUgb24gZGlzayBtdXN0IG1hdGNoIHRvIHB1c2hcblxuU3BlY2lmaWVzIGEgYSByZWdleCBwYXR0ZXJuIGEgZmlsZSBvbiBkaXNrIG11c3QgbWF0Y2ggdG8gYmUgcHVzaGVkIHRvIHRoZSB0YXJnZXQgcmVwby4gVGhpcyBvcHRpb24gcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yICdyb3V0aW5nJyBvdXRwdXQgc3ltYm9sIGZpbGVzIHRvIGRpZmZlcmVudCByZXBvc2l0b3JpZXMgYmFzZWQgb24gdGhlaXIgZmlsZSBleHRlbnNpb24gKGUuZy4sIGBcXC5qc1xcLmpzb24kYCkgb3IgbG9jYXRpb24gd2l0aGluIHRoZSBvdXRwdXQgZm9sZGVyIHRyZWUgKGUuZy4sIGAoXnwvfFxcXFwpYWNtZSgvfFxcXFx8JGApIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmVkIiA6IFsKICAgICAgICAgICJyZXBvIgogICAgICAgIF0KICAgICAgfQogICAgfQogIH0sCiAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlCn0=
# 🔟❎ 'compile' GitHub configuration
# Push output symbol unit files for reuse by subsequent compile cycles.
# To learn more see https://doc.log10x.com/compile/push/
# Set the 10x pipeline to 'compile'
tenx: compile
# =============================== GitHub Options ==============================
githubPush:
# 'token' specifies the access token for pushing files to the target repo, read from env or set inline.
# To learn more see: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens
- token: $=TenXEnv.get("GH_TOKEN") # (❗ EnvVar REQUIRED)
# 'repo' specifies the repo name to pull in Github
# including the username of the owner (e.g., apache/spark)
repo: null # (❗ REQUIRED)
# 'branch' specifies the branch to use when pushing into this repo.
# If not specified, push to the default repo branch
branch: null
# 'folder' specifies a folder within the target repo to push files, if not specified push to root
folder: null
# 'filter' specifies a a regex pattern a file on disk must match to be pushed to the target repo.
filter: null
Advanced Config Files
To configure advanced options (optional) for the Compiler app, Edit these files:
Bootstrap
Bootstrap
Configure the Pipeline Bootstrapper to authenticate the log10x account and launch a target pipeline.
Below is the default configuration from: bootstrap/config.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJzdHJpbmciLAogICAgICAgICJudWxsIgogICAgICBdLAogICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTmFtZSBvZiBwaXBlbGluZSB0byBleGVjdXRlXG5cblRhcmdldCBbcGlwZWxpbmVdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vZW5naW5lL3BpcGVsaW5lLykgdG8gZXhlY3V0ZS4gRm9yIGV4YW1wbGUsIHRvIHNwZWNpZnkgdGhlIFtydW5dKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuLykgcGlwZWxpbmUgYW5kIGEgW1lBTUxdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29uZmlnL3lhbWwvKSBjb25maWcgZmlsZSBjb250YWluaW5nIGxhdW5jaCBhcmd1bWVudHMsIHVzZTogIGBgYCBjb25zb2xlICQgdGVueCBydW4gQH4vbXkueWFtbCBgYGAgVGhlIFlBTUwgZmlsZSBtYXkgc3BlY2lmeSB0aGUgcGlwZWxpbmUgbmFtZSB2aWEgYSAndGVueCcgZW50cnksIGFsbG93aW5nIHRoZSAncGlwZWxpbmUnIGFyZ3VtZW50IHRvIGJlIG9taXR0ZWQgZnJvbSB0aGUgY29tbWFuZCBsaW5lLiAgRm9yIGV4YW1wbGUgKG15LnlhbWwpOiAgYGBgIHlhbWwgdGVueDogcnVuICMgc2V0IHRoZSBwaXBlbGluZSB0byAncnVuJyBhcGlLZXk6IDxteS1rZXk+IC4uLiBgYGAgIEFsbG93cyBmb3IgbGF1bmNoaW5nIHRoZSBydW4gcGlwZWxpbmUgdmlhOiBgYGAgY29uc29sZSAkIHRlbnggQH4vbXkueWFtbCBgYGAiCiAgICB9LAogICAgImxpY2Vuc2UiIDogewogICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgImZpbGUiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlBhdGggdG8gYSBmaWxlIGNvbnRhaW5pbmcgdGhlIDEweCBsaWNlbnNlIEpXVFxuXG5QYXRoIHRvIGEgZmlsZSBjb250YWluaW5nIHRoZSBzaWduZWQgMTB4IGxpY2Vuc2UgSldULiBQcmVmZXJyZWQgb3ZlciBgbGljZW5zZUtleWAgZm9yIHByb2R1Y3Rpb246IHRoZSB0b2tlbiBpcyBub3QgdmlzaWJsZSBpbiBgcHNgIG91dHB1dCBhbmQgaXMgZWFzeSB0byByb3RhdGUgYnkgcmVwbGFjaW5nIHRoZSBmaWxlLiAgRG93bmxvYWQgYSBsaWNlbnNlIGZyb20geW91ciBbYWNjb3VudF0oaHR0cHM6Ly9jb25zb2xlLmxvZzEweC5jb20pLiAgSWYgYm90aCBgbGljZW5zZUZpbGVgIGFuZCBgbGljZW5zZUtleWAgYXJlIHByb3ZpZGVkLCB0aGUgZmlsZSB3aW5zLiIKICAgICAgICB9LAogICAgICAgICJrZXkiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIjEweCBsaWNlbnNlIEpXVCAoaW5saW5lKVxuXG5UaGUgc2lnbmVkIDEweCBsaWNlbnNlIEpXVCwgcGFzc2VkIGlubGluZS4gRGlzY291cmFnZWQgb24gdGhlIGNvbW1hbmQgbGluZSBiZWNhdXNlIHRoZSB2YWx1ZSBpcyB2aXNpYmxlIGluIGBwc2Agb3V0cHV0OyBwcmVmZXIgYGxpY2Vuc2VGaWxlYCBpbiBwcm9kdWN0aW9uLiAgRG93bmxvYWQgYSBsaWNlbnNlIGZyb20geW91ciBbYWNjb3VudF0oaHR0cHM6Ly9jb25zb2xlLmxvZzEweC5jb20pLiIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiYWlyZ2FwcGVkIiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJib29sZWFuIiwKICAgICAgICAic3RyaW5nIiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlJ1biB3aXRob3V0IGNvbnRhY3RpbmcgdGhlIDEweCBzZXJ2aWNlXG5cbldoZW4gYHRydWVgLCB0aGUgbGljZW5zZSBpcyB2ZXJpZmllZCBsb2NhbGx5IChzaWduYXR1cmUgKyBjbGFpbXMpIGFuZCBubyBjYWxscyBhcmUgbWFkZSB0byB0aGUgMTB4IHNlcnZpY2Ug4oCUIG5vIHN0YXJ0dXAgdmFsaWRhdGlvbiwgbm8gbWV0cmljcyByZXBvcnRpbmcsIG5vIHVzZXItYXR0cmlidXRlIGVucmljaG1lbnQuIFN1aXRhYmxlIGZvciBmdWxseSBhaXJnYXBwZWQgZGVwbG95bWVudHMgd2hlcmUgdGhlIGVuZ2luZSBoYXMgbm8gcGF0aCB0byB0aGUgdmVuZG9yIFNhYVMuICBXaGVuIGBmYWxzZWAgKGRlZmF1bHQpLCB0aGUgZW5naW5lIGFkZGl0aW9uYWxseSB2YWxpZGF0ZXMgdGhlIGxpY2Vuc2UgYWdhaW5zdCB0aGUgMTB4IHNlcnZpY2UgYXQgc3RhcnR1cDsgYSBub24tMnh4IHJlc3BvbnNlIHJlZnVzZXMgdG8gc3RhcnQuICBgZGVtb2AgYW5kIGBsaW1pdGVkYCBsaWNlbnNlIHR5cGVzIGNhbm5vdCBydW4gYWlyZ2FwcGVkIOKAlCBpZiBgYWlyZ2FwcGVkOiB0cnVlYCBpcyBzZXQgd2l0aCBvbmUgb2YgdGhlc2UgbGljZW5zZSB0eXBlcywgYSB3YXJuaW5nIGlzIGxvZ2dlZCBhbmQgdGhlIGVuZ2luZSBydW5zIGluIG9ubGluZSBtb2RlIGFueXdheS4gKEFjY2VwdHMgYm9vbGVhbiBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikgKERlZmF1bHQ6IGZhbHNlKSIsCiAgICAgICJkZWZhdWx0IiA6IGZhbHNlCiAgICB9LAogICAgIm1ldHJpY0VuZHBvaW50IiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJzdHJpbmciLAogICAgICAgICJudWxsIgogICAgICBdLAogICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiMTB4IHNlcnZpY2UgUHJvbWV0aGV1cyBtZXRyaWNzIGVuZHBvaW50XG5cblNwZWNpZmllcyB0aGUgYWRkcmVzcyBvZiB0aGUgUHJvbWV0aGV1cyByZW1vdGUgd3JpdGUgZW5kcG9pbnQgdG8gd3JpdGUgcGlwZWxpbmUgdXNhZ2UgYW5kIGhlYWx0aCBtZXRyaWNzLiAgISEhIG5vdGUgXCJcIiAgICAgIFRoaXMgYXJndW1lbnQgaXMgb25seSBzZXR0YWJsZSBpbiB0aGUgMTB4ICdvbi1wcmVtaXNlcycgYnVpbGQuIChEZWZhdWx0OiBodHRwczovL3Byb21ldGhldXMubG9nMTB4LmNvbS9hcGkvdjEvd3JpdGUpIiwKICAgICAgImRlZmF1bHQiIDogImh0dHBzOi8vcHJvbWV0aGV1cy5sb2cxMHguY29tL2FwaS92MS93cml0ZSIKICAgIH0sCiAgICAicnVudGltZSIgOiB7CiAgICAgICJ0eXBlIiA6ICJvYmplY3QiLAogICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UsCiAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAibmFtZSIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAibnVsbCIKICAgICAgICAgIF0sCiAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTmFtZSB0byByZXBvcnQgdG8gdGhlIDEweCBzZXJ2aWNlIGVuZHBvaW50IGZvciB0aGlzIHJ1bnRpbWUgaW5zdGFuY2VcblxuU3BlY2lmaWVzIGEgbG9naWNhbCBuYW1lIHVzZWQgYXMgYSBbdGFnIHZhbHVlXShodHRwczovL3d3dy5iYWVsZHVuZy5jb20vbWljcm9tZXRlciM0LW1ldGVycykgZm9yIHBpcGVsaW5lIG1ldHJpY3MuIFRoaXMgdmFsdWUgaWRlbnRpZmllcyBpbnN0YW5jZXMgb2YgdGhlIDEweCBydW4vY29tcGlsZSBwaXBlbGluZXMgd2hlbiByZXBvcnRpbmcgdG8gdGhlIDEweCBzZXJ2aWNlLiBGb3IgZXhhbXBsZSwgZm9yIGEgMTB4IFtSZWNlaXZlcl0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcHBzL3JlY2VpdmVyLykgd2l0aCBvcHRpbWl6YXRpb24gZW5hYmxlZCBmb3IgRmx1ZW50IEJpdCBmb3J3YXJkZXJzIGNvbGxlY3RpbmcgZXZlbnRzIGZyb20gYSBgYnJva2VyYCB1c2VyLWFwcCwgdGhpcyB2YWx1ZSBjYW4gYmUgc2V0IHRvOiBgcmVjZWl2ZV9mbHVlbnRiaXRfYnJva2VyYCIKICAgICAgICB9LAogICAgICAgICJhdHRyaWJ1dGVzIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIGF0dHJpYnV0ZXMgdG8gYWRkIHRvIGFsbCBtZXRyaWNzIHJlcG9ydGluZ1xuXG5TcGVjaWZpZXMgYSBsaXN0IG9mIGtleS12YWx1ZSBwYWlycyBpbiB0aGUgZm9ybWF0IGBrZXk6dmFsdWVgIHRvIGJlIGFkZGVkIGFzIHRhZ3MgdG8gcGlwZWxpbmUgbWV0cmljcyByZXBvcnRlZCB0byB0aGUgMTB4IHNlcnZpY2UuIFRoZXNlIHRhZ3MgZW5hYmxlIGZpbmVyLWdyYWluZWQgZmlsdGVyaW5nIGFuZCBhbmFseXNpcyBpbiBtb25pdG9yaW5nIHN5c3RlbXMgbGlrZSBQcm9tZXRoZXVzLiBNdWx0aXBsZSBhdHRyaWJ1dGVzIGNhbiBiZSBjb21iaW5lZCBpbnRvIGEgc2luZ2xlIHN0cmluZyB1c2luZyBhIHNlbWljb2xvbiAoYDtgKSwgZS5nLiwgYGtleTE6dmFsMTtrZXkyOnZhbDJgLiAgSWYgYSBrZXkgZG9lcyBub3Qgc3RhcnQgd2l0aCB0ZW54XywgdGhlIHByZWZpeCB0ZW54XyBpcyBhdXRvbWF0aWNhbGx5IHByZXBlbmRlZCB0byBlbnN1cmUgY29uc2lzdGVuY3kgaW4gdGFnIG5hbWluZyBjb252ZW50aW9ucy4gRm9yIGV4YW1wbGUsIGEgcHJvdmlkZWQgYXR0cmlidXRlIGFwcDpteS1hcHAgd2lsbCBiZSByZXBvcnRlZCBhcyB0ZW54X2FwcDpteS1hcHAgIGBgYCB5YW1sICAgcnVudGltZUF0dHJpYnV0ZXM6ICAgICAtIGFwcDpyZXBvcnRlciAgICAgLSBlbnY6ZWRnZSBgYGAiLAogICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiaW5jbHVkZVBhdGhzIiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJhcnJheSIsCiAgICAgICAgInN0cmluZyIsCiAgICAgICAgIm51bGwiCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJQaXBlbGluZSBpbmNsdWRlIGZvbGRlcnNcblxuU3BlY2lmaWVzIGZvbGRlcnMgb24gZGlzayBmb3IgcmVzb2xpbmcgcmVsYXRpdmUgcmVmZXJlbmNlcyB3aXRoaW4gW2luY2x1ZGUgZGlyZWN0aXZlc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb25maWcveWFtbC8jaW5jbHVkZS1kaXJlY3RpdmVzKS4gKERlZmF1bHQ6IFtcIndvcmtpbmcgZGlyZWN0b3J5IG9mIGN1cnJlbnQgcHJvY2Vzc1wiXSkiLAogICAgICAiaXRlbXMiIDogewogICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgIH0sCiAgICAgICJkZWZhdWx0IiA6IFsKICAgICAgICAid29ya2luZyBkaXJlY3Rvcnkgb2YgY3VycmVudCBwcm9jZXNzIgogICAgICBdCiAgICB9LAogICAgImphckZpbGVzIiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJhcnJheSIsCiAgICAgICAgInN0cmluZyIsCiAgICAgICAgIm51bGwiCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJKYXIgZmlsZXMgdG8gbG9hZFxuXG5TcGVjaWZpZXMgYSBsaXN0IG9mIC5qYXIgZmlsZXMgdG8gbG9hZCBpbnRvIHRoZSBob3N0IEpWTSBmb3IgdXNlIGJ5IFtjb21waWxlXShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9jb21waWxlLyksIFtpbnB1dF0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvaW5wdXQvKSBhbmQgW291dHB1dF0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvb3V0cHV0LykgQVBJIGV4dGVuc2lvbnMuICAhISEgbm90ZSBcIlwiICAgICAgVGhpcyBhcmd1bWVudCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBbZWRnZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9lbmdpbmUvZmxhdm9ycy8jZWRnZSkgcnVudGltZSBmbGF2b3IuIiwKICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICB9CiAgICB9LAogICAgInF1aWV0IiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJib29sZWFuIiwKICAgICAgICAic3RyaW5nIiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkRpc2FibGUgcHJpbnRpbmcgYmluYXJ5IHZlcnNpb24gaW5mb3JtYXRpb24gdG8gdGhlIGNvbnNvbGVcblxuRGlzYWJsZSBwcmludGluZyBidWlsZC92ZXJzaW9uIGluZm9ybWF0aW9uIHRvIHRoZSBjb25zb2xlIHVwb24gbGF1bmNoIChBY2NlcHRzIGJvb2xlYW4gb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIChEZWZhdWx0OiBmYWxzZSkiLAogICAgICAiZGVmYXVsdCIgOiBmYWxzZQogICAgfSwKICAgICJkaXNhYmxlZEFyZ3MiIDogewogICAgICAidHlwZSIgOiBbCiAgICAgICAgImFycmF5IiwKICAgICAgICAic3RyaW5nIiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpbWl0IGFyZ3VtZW50IHZhbHVlcyB0aGF0IGNhbiBiZSBzZXQgYnkgdXNlcnNcblxuU3BlY2lmaWVzIGEgbGlzdCBvZiBsYXVuY2ggYXJndW1lbnRzIHRoYXQgYXJlIGRpc2FsbG93ZWQgZnJvbSBlaXRoZXIgY29tbWFuZCBsaW5lIG9yIHVzZXIgY29uZmlnIGZpbGVzLiBUaGlzIGFyZ3VtZW50IHByb3ZpZGVzIGEgbWV0aG9kIG9mIGxpbWl0aW5nIHRoZSB0YXJnZXQgW3BpcGVsaW5lXShodHRwczovL2RvYy5sb2cxMHguY29tL3NoYXJlZC9ib290c3RyYXAvI3BpcGVsaW5lKSwgW3NvdXJjZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb25maWcvI3NvdXJjZXMpIGFuZCBhbmQgW2NvbW1hbmQgbGluZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb25maWcvY2xpLykgc2V0dGFibGUgYnkgdGhlIHVzZXIuICBUaGlzIG1lY2hhbmlzbSBlbmFibGVzIHBpcGVsaW5lIGxhdW5jaGVycyBzdWNoIGFzIHRoZSBbUXVhcmt1cyBsYXVuY2hlcl0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvbGF1bmNoLyNxdWFya3VzKSB0byBsaW1pdCB1c2VyIGlucHV0IHJlY2VpdmVkIHZpYSBSRVNUIHJlcXVlc3RzIHRvIGEgdGFyZ2V0IHN1YnNldCBvZiAnc2FmZScgYXJndW1lbnRzLiAgRm9yIGV4YW1wbGUsIGFkZGluZyBbcHJvY091dENvbW1hbmRdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL291dHB1dC9ldmVudC9wcm9jZXNzLyNwcm9jb3V0Y29tbWFuZCkgdG8gdGhpcyBsaXN0IGVuc3VyZXMgdGhhdCBubyBleHRlcm5hbCBwcm9jZXNzIG91dHB1dHMgY2FuIGJlIGxhdW5jaGVkIGJ5IHRoZSBydW50aW1lLiAgQW4gb3B0aW9uYWwgcmVnZXggcGF0dGVybiBjYW4gbGltaXQgYXJndW1lbnRzIHRvIGEgY2VydGFpbiBzdWJzZXQgb2YgdmFsdWVzIGluIHRoZSBmb3JtIG9mOiBgPGFyZy1uYW1lPls6cGF0dGVybl1gIChlLmcuLCBzcGVjaWZpYyBwcm9jZXNzIG5hbWVzKS4gTXVsdGlwbGUgcGF0dGVybnMgY2FuIGJlIHNwZWNpZmllZCBwZXIgYXJndW1lbnQuICBNYXRjaGluZyB0aGUgYHNvdXJjZWAgYXJndW1lbnQgZGV0ZXJtaW5lcyB3aGljaCBzb3VyY2UgbG9jYXRpb25zIHRvIGluc3BlY3QgKGUuZy4sIGZvbGRlcnMsIGZpbGVzLCBHaXRIdWIgcmVwb3MpLiBGb3IgZXhhbXBsZSwgYW4gYWRtaW4gbWF5IHBsYWNlIC55YW1sIGNvbmZpZyBmaWxlcyBjb250YWluaW5nIHByZXNldCBGbHVlbnQgQml0IG91dHB1dHMgaW4gYC9ldGMvbG9nMTB4L2AsIGV4Y2x1ZGluZyB0aGVpciBlbmNsb3NlZCBhcmd1bWVudHMgZnJvbSBsaW1pdHMgc2V0IGJ5IHRoaXMgbGlzdCwgd2hpbGUgZGlzYWxsb3dpbmcgdXNlcnMgdG8gZGlyZWN0bHkgc2V0IHRoZW0gdmlhIHRoZSBjb21tYW5kLWxpbmUgb3IgYnkgc291cmNpbmcgdGhlbSBmcm9tIHRoZWlyIGxvY2FsL0dpdEh1YiBjb25maWcgZmlsZXMgKHNlZSBleGFtcGxlIGJlbG93KS4gIFRvIGxpbWl0OiAgVGhlIHRhcmdldCBwaXBlbGluZSAoZS5nLiwgW3J1bl0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vKSwgW2NvbXBpbGVdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS8pKTogIGBgYCB5YW1sICAgZGlzYWJsZWRBcmdzOiAgIC0gXCJwaXBlbGluZTpecnVuXCIgIyBkaXNhbGxvdyBjb21waWxlIGBgYCAgVGFyZ2V0IGFyZ3VtZW50cyAoZS5nLiwgW3Byb2Nlc3Mgb3V0cHV0c10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vb3V0cHV0L2V2ZW50L3Byb2Nlc3MvKSk6ICBgYGAgeWFtbCAgIC0gXCJwcm9jT3V0Q29tbWFuZDpeZmx1ZW50LWJpdCRcIiAgICMgbGltaXQgdG8gRmx1ZW50IEJpdCBvbmx5ICAgIyAtIHByb2NPdXRBcmdzOiA8c3BlY2lmeS1yZWdleD4gICMgZnVydGhlciBsaW1pdCBhcmdzIGZvciBGbHVlbnQgQml0IGBgYCAgQ29udHJvbCB3aGljaCBhcmd1bWVudCBbc291cmNlc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb25maWcvI3NvdXJjZXMpIHRvIGluc3BlY3Q6ICBgYGAgeWFtbCAgIC0gXCJzb3VyY2U6XmdpdGh1Yi4qXCIgICAgICAgICAgICAgIyBpbnNwZWN0IG9mIGFsbCBhcmd1bWVudHMgc291cmNlZCBmcm9tIEdpdEh1YiBhZ2FpbnN0IHRoaXMgbGlzdCAgIC0gXCJzb3VyY2U6Xig/IS9ldGMvbG9nMTB4LykuKlwiICAgIyBpbnNwZWN0IG9mIGFsbCBhcmd1bWVudHMgc291cmNlZCBmcm9tIGNvbmZpZyBmaWxlcyBOT1QgY29udGFpbmVkIGluOiAvZXRjL2xvZzEweC8gYGBgIiwKICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICB9CiAgICB9LAogICAgImRlYnVnRW52VmFycyIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAiYXJyYXkiLAogICAgICAgICJzdHJpbmciLAogICAgICAgICJudWxsIgogICAgICBdLAogICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTGlzdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gZGVidWdcblxuU3BlY2lmaWVzIGEgbGlzdCBvZiBlbnYgdmFyIG5hbWVzIGZvciB3aGljaCB0byBsb2cgaW5mb3JtYXRpb24gcmVsYXRpbmcgdG8gaG93IHRoZXkgYXJlIHJlc29sdmVkLiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjYWxsOiBgTDFFbnYuZ2V0KFwibXlWYXJcIiwgXCJteURlZmF1bHRcIilgIGNhbiBiZSByZXNvbHZlZCBmcm9tIGEgbnVtYmVyIG9mIFtzb3VyY2VzXShodHRwczovL2RvYy5sb2cxMHguY29tL2FwaS9qcy8jVGVuWEVudi5nZXQpIHJhbmdpbmcgZnJvbSBsYXVuY2ggYXJndW1lbnRzLCB0byBPUy9KVk0gcHJvcGVydGllcyBhbmQgYSBkZWZhdWx0IHZhbHVlIChlLmcuLCBteURlZmF1bHQpLiAgU2V0dGluZyB0aGlzIHZhbHVlIHRvIGBteVZhcmAgd2lsbCBsb2cgSU5GTyBsZXZlbCBpbmZvcm1hdGlvbiBkZXRhaWxpbmcgaG93IHRoZSB2YWx1ZSBvZiB0aGUgYG15VmFyYCB3YXMgcmVzb2x2ZWQuIiwKICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICB9CiAgICB9CiAgfSwKICAicmVxdWlyZWQiIDogWwogICAgInRlbngiCiAgXSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# 🔟❎ compile bootstrap configuration
# This config file specifies bootstrap options for the compile pipeline.
# To learn more see https://doc.log10x.com/compile/bootstrap
# To learn more see https://doc.log10x.com/config/
tenx: compile
# =============================== Launch Settings ==============================
# 'licenseKey' specifies a signed JWT license token used for authenticating against the 10x service
licenseKey: $=TenXEnv.get("TENX_LICENSE_KEY", "NO-LICENSE")
# 'licenseFile' specifies a path to a file containing the signed JWT license token.
# Preferred over 'licenseKey' on production hosts: the token does not appear in 'ps' output.
licenseFile: $=TenXEnv.get("TENX_LICENSE_FILE")
# 'airgapped' suppresses every call to the 10x SaaS gateway: the license is verified locally against the embedded
# public key, and ALL outbound calls to the 10x SaaS gateway are suppressed (no DNS, no TCP).
airgapped: $=TenXEnv.get("TENX_AIRGAPPED", "false")
# 'includePaths' specifies folders on disk for resolving relative config file/folder references in addition to the working folder
includePaths: []
# 'quiet' disables printing version information to the console.
# quiet: true
# 'jarFiles' specifies .jar files to dynamically load for use by compile, input and output API extensions.
jarFiles: []
# 'metricEndpoint' specifies the Prometheus endpoint to report usage/health metrics (enterprise version only).
# metricEndpoint: https://prometheus.log10x.com/api/v1/write
# specifies a list of launch arguments that are disallowed from either command line or user config files.
disabledArgs: []
Github Sync
Github Sync
Below is the default configuration from: gitops/config.yaml.
ewogICIkc2NoZW1hIjogImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIyIsCiAgInRpdGxlIjogIkdpdE9wcyBDb25maWd1cmF0aW9uIiwKICAiZGVzY3JpcHRpb24iOiAiQ29uZmlndXJhdGlvbiBmb3IgcHVsbGluZyBzeW1ib2wsIGNvbmZpZyBhbmQgbG9va3VwIGZpbGVzIGZyb20gYSByZW1vdGUgR2l0SHViIHJlcG8gdG8gZW5hYmxlIGNlbnRyYWxpemVkIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCIsCiAgInR5cGUiOiAib2JqZWN0IiwKICAicHJvcGVydGllcyI6IHsKICAgICJ0ZW54IjogewogICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIHRhcmdldCAxMHggcGlwZWxpbmUgdG8gcnVuIChlLmcuLCBydW4sIGNvbXBpbGUpIgogICAgfSwKICAgICJpbmNsdWRlIjogewogICAgICAidHlwZSI6ICJhcnJheSIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJMaXN0IG9mIGluY2x1ZGUgc291cmNlcyIsCiAgICAgICJpdGVtcyI6IHsKICAgICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAgICJwcm9wZXJ0aWVzIjogewogICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICAgImNvbnN0IjogImdpdGh1YiIsCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgc291cmNlIHR5cGUgZm9yIHRoaXMgaW5jbHVkZSIKICAgICAgICAgIH0sCiAgICAgICAgICAib3B0aW9ucyI6IHsKICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9QaXBlbGluZUxhdW5jaEdpdEh1Yk9wdGlvbnMiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAicmVxdWlyZWQiOiBbInNvdXJjZSIsICJvcHRpb25zIl0KICAgICAgfQogICAgfQogIH0sCiAgImRlZmluaXRpb25zIjogewogICAgIlBpcGVsaW5lTGF1bmNoR2l0SHViT3B0aW9ucyI6IHsKICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgImRlc2NyaXB0aW9uIjogIkdpdEh1YiBwdWxsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyIsCiAgICAgICJwcm9wZXJ0aWVzIjogewogICAgICAgICJlbmFibGVkIjogewogICAgICAgICAgInR5cGUiOiAiYm9vbGVhbiIsCiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ29udHJvbHMgd2hldGhlciB0byBlbmFibGUgdGhpcyBwdWxsIGNvbmZpZyIsCiAgICAgICAgICAiZGVmYXVsdCI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAidG9rZW4iOiB7CiAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgImRlc2NyaXB0aW9uIjogIkFjY2VzcyB0b2tlbiBmb3IgYWNjZXNzaW5nIHRoZSBHaXRIdWIgcmVwby4gU2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2F1dGhlbnRpY2F0aW9uL2tlZXBpbmcteW91ci1hY2NvdW50LWFuZC1kYXRhLXNlY3VyZS9tYW5hZ2luZy15b3VyLXBlcnNvbmFsLWFjY2Vzcy10b2tlbnMiCiAgICAgICAgfSwKICAgICAgICAicmVwbyI6IHsKICAgICAgICAgICJ0eXBlIjogWyJzdHJpbmciLCAibnVsbCJdLAogICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBHaXRIdWIgdXNlci9yZXBvIGZyb20gd2hpY2ggdG8gcHVsbCAoZS5nLiwgJ293bmVyL3JlcG8nKSIKICAgICAgICB9LAogICAgICAgICJicmFuY2giOiB7CiAgICAgICAgICAidHlwZSI6IFsic3RyaW5nIiwgIm51bGwiXSwKICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJCcmFuY2ggb24gcmVwby4gSWYgbnVsbCwgdXNlcyB0aGUgcmVwbydzIGRlZmF1bHQgYnJhbmNoIiwKICAgICAgICAgICJkZWZhdWx0IjogbnVsbAogICAgICAgIH0sCiAgICAgICAgInBhdGhzIjogewogICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAogICAgICAgICAgImRlc2NyaXB0aW9uIjogIkdsb2IgcGF0dGVybnMgd2l0aGluICdyZXBvJyB0byBwdWxsIGFuZCBleHRyYWN0IHRvIGEgdGVtcCBmb2xkZXIiLAogICAgICAgICAgIml0ZW1zIjogewogICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciCiAgICAgICAgICB9LAogICAgICAgICAgImV4YW1wbGVzIjogWwogICAgICAgICAgICBbImNvbmZpZy8qLnlhbWwiLCAic3ltYm9scy8qLjEweC50YXIiLCAibG9va3Vwcy8qLmNzdiIsICJzY3JpcHRzLyouanMiXQogICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgInN5bmNJbnRlcnZhbCI6IHsKICAgICAgICAgICJ0eXBlIjogWyJzdHJpbmciLCAibnVsbCJdLAogICAgICAgICAgImRlc2NyaXB0aW9uIjogIkludGVydmFsIHRvIGNoZWNrIHRoZSByZW1vdGUgYnJhbmNoIGZvciB1cGRhdGVzIChlLmcuLCAnNW1pbicpLiBTZXQgdG8gbnVsbCB0byBkaXNhYmxlIHN5bmMiLAogICAgICAgICAgImRlZmF1bHQiOiBudWxsLAogICAgICAgICAgImV4YW1wbGVzIjogWyI1bWluIiwgIjFoIiwgIjMwcyJdCiAgICAgICAgfQogICAgICB9LAogICAgICAicmVxdWlyZWQiOiBbImVuYWJsZWQiLCAicmVwbyJdLAogICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiOiBmYWxzZQogICAgfQogIH0KfQo=
# 🔟❎ GitOps configuration
# This config file pulls symbol, config and lookup files from a remote repo to
# enable centralized configuration management via GitHub.
# To learn more see https://doc.log10x.com/config/github
# The target 10x pipeline to run (e.g., run, compile) is specified in the config files pulled from the repo
tenx: any
include:
- source: github
options:
# Env-var overrides: GH_ENABLED, GH_REPO, GH_BRANCH, GH_PATH, GH_SYNC_INTERVAL.
# Defaults below are for the compact-receiver GitOps reload test:
# they pull test/compact-lookup.csv from talwgx/test every 30s.
# For a real deployment, set GH_ENABLED=false OR override the repo.
enabled: $=TenXEnv.get("GH_ENABLED", false)
# 'token' specifies an access token for accessing the Github repo.
token: $=TenXEnv.get("GH_TOKEN")
# 'repo' specifies the GitHub user/repo from which to pull
repo: $=TenXEnv.get("GH_REPO", "talwgx/test")
# 'branch' on 'repo' (if null, uses default repo default branch)
branch: $=TenXEnv.get("GH_BRANCH", "main")
# 'paths' specifies Glob patterns within 'repo' to pull and extract to a temp folder.
# (List items don't honor $= expressions; hardcoded glob. Override repo+branch
# to target a different repo layout. Compact lookup must live as test/*.csv.)
paths:
- test/*.csv
# 'syncInterval' specifies an interval by which check to check the remote branch for updates (null to disable).
# This interval works in conjunction with: https://doc.log10x.com/run/reload
syncInterval: $=TenXEnv.get("GH_SYNC_INTERVAL", "30s")
Scan
Scan
Configure the Input Scanner to capture symbol values from source code/binary files and link to an output symbol library.
advanced
Configure the Input Scanner to capture symbol values from source code/binary files and link to an output symbol library.
Below is the default configuration from: advanced/config.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiaW5wdXRQYXRocyIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAiYXJyYXkiLAogICAgICAgICJzdHJpbmciLAogICAgICAgICJudWxsIgogICAgICBdLAogICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiSW5wdXQgZm9sZGVycyB0byBzY2FuXG5cblByb3ZpZGVzIGEgbGlzdCBvZiBmb2xkZXJzIHRoYXQgYXJlIHRyYXZlcnNlZCBpbiBzZWFyY2ggb2Ygc291cmNlIGNvZGUgKGUuZy4gLmpzLCAuY3BwKSwgYmluYXJ5IChlLmcuLCAuc28sIC5qYXIsIC56aXApIGFuZCB0ZXh0IChlLmcuLCAuanNvbiwgLnhtbCkgZmlsZXMgdG8gY2FwdHVyZSBzeW1ib2wgdmFsdWVzIGZyb20gYW5kIG91dHB1dCB0byBzeW1ib2wgdW5pdCBmaWxlcy4gSW5wdXQgZm9sZGVycyBtYXkgY29udGFpbiBmaWxlcyBhbmQgZm9sZGVycyBwdWxsZWQgZnJvbSBbR2l0SHViXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvcHVsbC9naXRodWIvKSBvciAgYW5kIFtBcnRpZmFjdG9yeV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL2FydGlmYWN0b3J5KS4iLAogICAgICAiaXRlbXMiIDogewogICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgIH0KICAgIH0sCiAgICAib3V0cHV0U3ltYm9sRm9sZGVyIiA6IHsKICAgICAgInR5cGUiIDogWwogICAgICAgICJzdHJpbmciLAogICAgICAgICJudWxsIgogICAgICBdLAogICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTG9jYXRpb24gb2Ygb3V0cHV0IHN5bWJvbCBmb2xkZXJcblxuU3BlY2lmaWVzIHRoZSByb290IGZvbGRlciBpbiB3aGljaCB0byB3cml0ZSBvdXRwdXQgc3ltYm9sIHVuaXQgZmlsZXMuIFRoaXMgY29tcGlsZXIgW3NjYW4gcGhhc2VdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FuLykgbWlycm9ycyB0aGUgc3RydWN0dXJlIG9mIHRoZSBbaW5wdXRQYXRoc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW4vI2lucHV0cGF0aHMpIGFyZ3VtZW50LCBwbGFjaW5nIGVhY2ggb3V0cHV0IHN5bWJvbCB1bml0IGluIHRoZSBzYW1lIHJlbGF0aXZlIHBhdGggdW5kZXIgW291dHB1dFN5bWJvbEZvbGRlcl0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW4vI291dHB1dHN5bWJvbGZvbGRlcikgYXMgaXRzIHNvdXJjZS9iaW5hcnkgaW5wdXQgZmlsZSB1bmRlciBpdHMgcmVzcGVjdGl2ZSBgaW5wdXRQYXRoc2AgZm9sZGVyIGVudHJ5LiAgRm9yIGV4YW1wbGUsIGlmIFtpbnB1dFBhdGhzXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbi8jaW5wdXRwYXRocykgaXMgYH4vZGV2YCBhbmQgaXQgY29udGFpbnMgdGhlIGZpbGUgYH4vZGV2L2FwcC9mb28uanNgLCBhbmQgdGhpcyB2YWx1ZSBpcyBgfi9zeW1ib2xzYCwgdGhlIHJlc3BlY3RpdmUgb3V0cHV0IHN5bWJvbCB1bml0IGZpbGUgaXM6IGB+L3N5bWJvbHMvYXBwL2Zvby5qcy4xMHguanNvbmAuIgogICAgfSwKICAgICJzY2FuIiA6IHsKICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICJmb3JjZSIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJib29sZWFuIiwKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDb250cm9sIHdoZXRoZXIgdG8gc2NhbiBpbnB1dCBmaWxlcyBldmVuIGlmIGEgbWF0Y2hpbmcgZXhpc3Rpbmcgc3ltYm9sIGZpbGUgZXhpc3RzXG5cbkNvbnRyb2xzIHdoZXRoZXIgdG8gcmV1c2UgbWF0Y2hpbmcgc3ltYm9sIGZpbGVzIHdpdGhpbiBbaW5wdXRQYXRoc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW4vI2lucHV0cGF0aHMpLiBUaGlzIG9wdGlvbiBpcyBwcmltYXJpbHkgdXNlZnVsIHdoZW4gZGVidWdnaW5nIGEgbmV3IHNjYW5uZXIgbW9kdWxlIGNvbmZpZ3VyYXRpb24gKGUuZy4sIEFOVExSIGdyYW1tYXIpICBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBbc2Nhbm5lciBkZWJ1Z2dpbmddKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FuKSBvcHRpb25zLiAoQWNjZXB0cyBib29sZWFuIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogZmFsc2UpIiwKICAgICAgICAgICJkZWZhdWx0IiA6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAiaW5Qcm9jZXNzIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImJvb2xlYW4iLAogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkNvbnRyb2xzIHdoZXRoZXIgdG8gc2NhbiBzb3VyY2UvYmluYXJ5IGlucHV0IGZpbGVzIHVzaW5nIHN1Yi1wcm9jZXNzKGVzKVxuXG5UaGUgc2Nhbm5lciBjYW4gbGF1bmNoIFtzdWJwcm9jZXNzZXNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FuLyNzdWJwcm9jZXNzXzEpIHRvIGNhcHR1cmUgW3N5bWJvbF0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N0cnVjdHVyZS8jc3ltYm9scykgaW5mb3JtYXRpb24gZnJvbSBzcGVjaWZpYyB0YXJnZXQgc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlcy4gICBHZW5lcmF0aW5nIGlucHV0IGZpbGUgW0FTVHNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Fic3RyYWN0X3N5bnRheF90cmVlKSB0byBzY2FuIGZvciBzeW1ib2xzIHZhbHVlcyBmb3IgY29tcGxleCBzeW50YXhlcyBjYW4gYmUgYSBsZW5ndGh5LCByZXNvdXJjZS1jb25zdW1pbmcgb3BlcmF0aW9uLCB3aGljaCBpbiB0aGUgY2FzZSBvZiAgW0FOVExSIHN5bnRheGVzXShodHRwczovL3RvbWFzc2V0dGkubWUvaW1wcm92aW5nLXRoZS1wZXJmb3JtYW5jZS1vZi1hbi1hbnRsci1wYXJzZXIvKSBtYXkgdGltZW91dCBvciBydW4gb3V0IG9mIG1lbW9yeS4gICAgIFByb2Nlc3MgW2lzb2xhdGlvbl0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUHJvY2Vzc19pc29sYXRpb24pIGFsbG93cyBmb3IgdGVybWluYXRpbmcgc2NhbiBvcGVyYXRpb25zIHRoYXQgdGltZW91dCBmb3Igc3BlY2lmaWMgZmlsZXMsIHdoaWxlIGFsbG93aW5nIG90aGVycyB0byBwcm9jZWVkLiAoQWNjZXB0cyBib29sZWFuIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogZmFsc2UpIiwKICAgICAgICAgICJkZWZhdWx0IiA6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAidGhyZWFkUG9vbFNpemUiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bWJlciIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJNYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzIHRvIHVzZSBjb25jdXJyZW50bHkgcHJvY2VzcyBpbnB1dCBzb3VyY2UgY29kZSAvYmluYXJ5IGZpbGVzXG5cbkNvbnRyb2xzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzIHRvIHByb2Nlc3MgaW5wdXQgc291cmNlIGNvZGUvYmluYXJ5IGZpbGVzIGNvbmN1cnJlbnRseTogLSBJZiB0aGUgdmFsdWUgaXMgYmV0d2VlbiAwIGFuZCAxLCB0aGUgbnVtYmVyIGNhbGN1bGF0ZXMgYSBwZXJjZW50YWdlIG9mIGF2YWlsYWJsZSBjb3JlcyAoZS5nLiwgMC41ID0gdXNlIHVwIHRvIDUwJSBvZiBhdmFpbGFibGUgY29yZXMpLiAgIC0gSWYgdGhlIHZhbHVlIGlzID49IDEsIHRoZSB2YWx1ZSBzZXRzIGEgZml4ZWQgbnVtYmVyIG9mIHRocmVhZHMgKGUuZy4sIDEwID0gMTAgdGhyZWFkcykuICAgLSBJZiB0aGUgdmFsdWUgaXMgMSwgYWxsb2NhdGUgYSBzaW5nbGUgdGhyZWFkIHRvIHByb2Nlc3MgaW5wdXQgZmlsZXMuIChEZWZhdWx0OiAwLjUpIiwKICAgICAgICAgICJkZWZhdWx0IiA6ICIwLjUiCiAgICAgICAgfSwKICAgICAgICAidW5pdFRpbWVvdXQiIDogewogICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlRpbWVvdXQgaW50ZXJ2YWwgZm9yIHNjYW5uaW5nIGEgc291cmNlIGNvZGUgL2JpbmFyeSBpbnB1dCBmaWxlXG5cblNldHMgdGhlIHRpbWVvdXQgaW50ZXJ2YWwgd2hlbiBzY2FubmluZyBhIHNvdXJjZSBjb2RlIC9iaW5hcnkgaW5wdXQgZmlsZSBiZWZvcmUgZHJvcHBpbmcgaXQuIFNldCB0byBudWxsIHRvIGlnbm9yZS4gKERlZmF1bHQ6IDIwcykiLAogICAgICAgICAgImRlZmF1bHQiIDogIjIwcyIKICAgICAgICB9LAogICAgICAgICJvcGVyYXRpb25UaW1lb3V0IiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJUaW1lb3V0IGludGVydmFsIGZvciB0aGUgZW50aXJlIHNjYW5uaW5nIG9wZXJhdGlvblxuXG5TZXRzIHRoZSB0aW1lb3V0IGludGVydmFsIGZvciB0aGUgZW50aXJlIHNjYW5uaW5nIG9wZXJhdGlvbiBiZWZvcmUgdGVybWluYXRpbmcgaXQuIFNldCB0byBudWxsIHRvIGlnbm9yZS4gKERlZmF1bHQ6IDEwbSkiLAogICAgICAgICAgImRlZmF1bHQiIDogIjEwbSIKICAgICAgICB9LAogICAgICAgICJkZWJ1ZyIgOiB7CiAgICAgICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICAgIm9yaWdpbnMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgaW5wdXQgZmlsZSBuYW1lcyBmb3Igd2hpY2ggdG8gbG9nIGluZm9ybWF0aW9uXG5cblNwZWNpZmllcyBhIGxpc3Qgb2YgaW5wdXQgZmlsZSBuYW1lcyAoZS5nLiwgbXkuc2NhbGEsIGZvby5qYXZhKSB0byBsb2cgaW5mb3JtYXRpb24gcmVsYXRpbmcgdG8gd2hpY2ggc3ltYm9scyB3ZXJlIGNhcHR1cmVkL3NraXBwZWQuIFNwZWNpZnkgJyonIGZvciBhbGwgZmlsZXMuIiwKICAgICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzeW1ib2xzIiA6IHsKICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIG5vZGUgdHlwZXMgd2l0aGluIGEgc2Nhbm5lciBBU1QgdHJlZSBmb3Igd2hpY2ggdG8gbG9nIGluZm9ybWF0aW9uXG5cbkxpc3Qgb2Ygbm9kZXMgd2l0aGluIGFuIGlucHV0IEFTVCB0cmVlLCBzdWNoIGFzIGNsYXNzIGFuZCBtZXRob2QgbmFtZXMoZS5nLiwgJ015Q2xhc3MnLCAnZm9vJykgZm9yIHdoaWNoIHRvIGxvZyBpbmZvcm1hdGlvbiByZWxhdGluZyB0byB0aGUgY29udGV4dCBpbiB3aGljaCB0aGV5IHdlcmUgY2FwdHVyZWQvc2tpcHBlZCBhcyBzeW1ib2xzLiAgU3BlY2lmeSAnKicgZm9yIGFsbCBub2Rlcy4iLAogICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImxvZ2dlck5hbWUiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiRGVidWcgbG9nZ2VyIG5hbWVcblxuU3BlY2lmaWVzIHRoZSBsb2c0aiBsb2dnZXIgZm9yIGxvZ2dpbmcgdmFsdWVzIGZvciBzeW1ib2xzL2ZpbGVzIG1hdGNoaW5nICdkZWJ1Z09yaWdpbnMnIGFuZCAnZGVidWdTeW1ib2xzJy4gKERlZmF1bHQ6IFtjb25zb2xlT3V0XShodHRwczovL2dpdGh1Yi5jb20vbG9nLTEweC9jb25maWcvYmxvYi9tYWluL2xvZzRqMi55YW1sI0w2NikpIiwKICAgICAgICAgICAgICAiZGVmYXVsdCIgOiAiW2NvbnNvbGVPdXRdKGh0dHBzOi8vZ2l0aHViLmNvbS9sb2ctMTB4L2NvbmZpZy9ibG9iL21haW4vbG9nNGoyLnlhbWwjTDY2KSIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJwcmludE91dHB1dCIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAiYm9vbGVhbiIsCiAgICAgICAgInN0cmluZyIsCiAgICAgICAgIm51bGwiCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJDb250cm9scyB3aGV0aGVyIHRvIGVtaXQgb3V0cHV0IHNjYW4gb3BlcmF0aW9ucyBwcm9ncmVzcyB0byB0aGUgY29uc29sZVxuXG5Db250cm9scyB3aGV0aGVyIGluZm9ybWF0aW9uIHJlbGF0aW5nIHRvIHN5bWJvbCB1bml0cyBzY2FubmluZyBpcyBlbWl0dGVkIHRvIHRoZSBzdGRvdXQgc3RyZWFtLiBUaGlzIHZhbHVlIHNob3VsZCBiZSBzZXQgdG8gdHJ1ZSB3aGVuIHRoZSBjdXJyZW50IDEweCBwcm9jZXNzIGlzICBzcGF3bmVkIGJ5IGEgcGFyZW50IDEweCAnY29tcGlsZScgcGlwZWxpbmUgdG8gcmVwb3J0IGl0cyBwcm9ncmVzcy4gKEFjY2VwdHMgYm9vbGVhbiBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikgKERlZmF1bHQ6IGZhbHNlKSIsCiAgICAgICJkZWZhdWx0IiA6IGZhbHNlCiAgICB9LAogICAgInVuaXRzVG9TY2FuUGVyQmF0Y2giIDogewogICAgICAidHlwZSIgOiBbCiAgICAgICAgIm51bWJlciIsCiAgICAgICAgInN0cmluZyIsCiAgICAgICAgIm51bGwiCiAgICAgIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJNYXhpbXVtIG51bWJlciBvZiBpbnB1dCBmaWxlcyB0byBzY2FuIHBlciBzdWItcHJvY2Vzcy5cblxuU2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlcyB0byBzY2FuIGJ5IGEgc2luZ2xlICdjb21waWxlJyBzdWItcHJvY2Vzcy4gU2V0IHRvIDAgdG8gdW5saW1pdGVkLiAoQWNjZXB0cyBudW1iZXIgb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIChEZWZhdWx0OiA0MCkiLAogICAgICAiZGVmYXVsdCIgOiA0MAogICAgfSwKICAgICJ0b2tlbkRlbGltcyIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAic3RyaW5nIiwKICAgICAgICAibnVsbCIKICAgICAgXSwKICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlRva2VuIGRlbGltaXRlcnNcblxuRGVmaW5lcyB3aGljaCBjaGFyYWN0ZXJzIGJyZWFrIGEgc3RyaW5nIG9mIGV2ZW50IGNoYXJhY3RlcnMgaW50byB0b2tlbnMgdG8gY2xhc3NpZnkgYXMgc3ltYm9scyBvciB2YXJpYWJsZXMuIChEZWZhdWx0OiA8PnwuIF1bOi0rLyo9XFxcXCx7fV8oKTsnXFxcIiRcXHRcXG5AKSIsCiAgICAgICJkZWZhdWx0IiA6ICI8PnwuIF1bOi0rLyo9XFxcXCx7fV8oKTsnXFxcIiRcXHRcXG5AIgogICAgfSwKICAgICJmaWxlRXh0U3RyaW5nRm9ybWF0cyIgOiB7CiAgICAgICJ0eXBlIiA6IFsKICAgICAgICAiYXJyYXkiLAogICAgICAgICJzdHJpbmciLAogICAgICAgICJudWxsIgogICAgICBdLAogICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiU3RyaW5nIGZvcm1hdCBzcGVjaWZpZXIgY2hhcmFjdGVyc1xuXG5Db250cm9scyB3aGljaCBjaGFyYWN0ZXJzIGlkZW50aWZ5IHRoZSBzdGFydCBvZiBhIFtmb3JtYXQgc3BlY2lmaWVyXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QcmludGYjRm9ybWF0X3NwZWNpZmllcikgZm9yIGVhY2ggcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgZXh0ZW5zaW9uIGluIHRoZSBmb3JtIG9mIDxleHQ+Ojxmb3JtYXRQcmVmaXg+IChlLmcuLCBgLmphdmE6JWApLiAgSXQgaXMgYSBzdGFuZGFyZCBwcm9ncmFtbWluZyBwcmFjdGljZSB0byB1c2Ugc3RyaW5nIGZvcm1hdHMgdG8gbG9nIG1lc3NhZ2VzIGluIHRoZSBmb3JtIG9mOiAgYGBgIGphdmEgbG9nLmVycm9yKFwiY291bGQgbm90IGNvbm5lY3QgdG8ge30gd2l0aCBzdGF0dXMge31cIiwgaG9zdCwgc3RhdHVzKTsgYGBgICBXaGVuIGFuIFRlblhUZW1wbGF0ZSB0b2tlbml6ZXIgcHJvY2Vzc2luZyBhbiBldmVudCBpZGVudGlmaWVzIGEgZm9ybWF0IHByZWZpeCAoZS5nLiwgYCVgKSBpdCBza2lwcyBpdCBhbmQgYXBwZW5kcyBzdWJzZXF1ZW50IHN5bWJvbCB0b2tlbnMgKGUuZy4sIGB3aXRoIHN0YXR1c2ApIHRvIHRoZSBzeW1ib2wgc2VxdWVuY2UgcHJlY2VkaW5nIHRoZW0gKGUuZy4sIGBjb3VsZCBub3QgY29ubmVjdCB0b2ApLiIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgfQogICAgfSwKICAgICJtYXhTeW1ib2wiIDogewogICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgInVuaXRTZWN0aW9uU2l6ZSIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJudW1iZXIiLAogICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1heGltdW0gbnVtYmVyIG9mIHN5bWJvbCB0b2tlbnMgdG8gc3RvcmUgaW4gYSBzaW5nbGUgc3ltYm9sIHVuaXQgZmlsZVxuXG5Db250cm9scyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc3ltYm9sIHRva2VucyB0byBzdG9yZSBpbiBhIHN5bWJvbCB1bml0IGJlZm9yZSBzcGxpdHRpbmcgaXQuIFRoaXMgb3B0aW9uIHN1cHBvcnRzIGxhcmdlIHNvdXJjZSBjb2RlIC9iaW5hcnkgaW5wdXQgZmlsZXMgdGhhdCBtYXkgaGF2ZSB0aG91c2FuZHMgb2YgdGV4dCBzeW1ib2xzIHRvIGF2b2lkICBjcmVhdGluZyBzaXplYWJsZSBpbmRpdmlkdWFsIHN5bWJvbCB1bml0IGZpbGVzLiAgICAgICAgIFNldCB0byBudWxsIHRvIGlnbm9yZS4gKEFjY2VwdHMgbnVtYmVyIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogNTAwKSIsCiAgICAgICAgICAiZGVmYXVsdCIgOiA1MDAKICAgICAgICB9LAogICAgICAgICJ1bml0c1BlclRva2VuIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgIm51bWJlciIsCiAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAibnVsbCIKICAgICAgICAgIF0sCiAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTnVtYmVyIG9mIHN5bWJvbCB1bml0cyB0byByZXRyaWV2ZSB3aGVuIHNlYXJjaGluZyBmb3IgdGhlIG9yaWdpbiBvZiBhbiBUZW5YVGVtcGxhdGUgc3ltYm9sIHNlcXVlbmNlXG5cbkNvbnRyb2xzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzeW1ib2wgdW5pdHMgdG8gbG9hZCBmcm9tIHRoZSBwaXBlbGluZSdzIHN5bWJvbCBsaWJyYXJ5IHdoZW4gc2VhcmNoaW5nIGZvciB0aGUgb3JpZ2luIG9mIGEgc3BlY2lmaWMgW1RlblhUZW1wbGF0ZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdGVtcGxhdGUvKSBzeW1ib2wuICAgVGhlIFtzeW1ib2xTZXF1ZW5jZV0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9hcGkvanMvI1RlblhPYmplY3Qrc3ltYm9sU2VxdWVuY2UpIGZ1bmN0aW9uIHF1ZXJpZXMgdGhlIHNvdXJjZSBjb2RlL2JpbmFyeSBvcmlnaW4gb2Ygc3ltYm9sIHNlcXVlbmNlcyBpbiBhIHRhcmdldCBUZW5YVGVtcGxhdGUgdG8gaWRlbnRpZnkgdGhlIGxvZ2ljYWwgW21lc3NhZ2VdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL2luaXRpYWxpemUvbWVzc2FnZS8pIHBvcnRpb24gb2YgYSB0YXJnZXQgYXBwL2luZnJhIGV2ZW50cyB2cy4gdmFyaWFibGUgYW5kIGNvbnRleHQgaW5mb3JtYXRpb24gKGUuZy4sIHVzZXIsIGhvc3QsIHNldmVyaXR5KS4gICBTaW5jZSBhIFtzeW1ib2xdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zdHJ1Y3R1cmUvI3N5bWJvbHMpIHZhbHVlIG1heSBhcHBlYXIgaW4gaHVuZHJlZHMgb3IgbW9yZSBsb2NhdGlvbnMgYWNyb3NzIGEgY29kZSBiYXNlLCAgbGltaXRpbmcgdGhlIG51bWJlciBvZiBzeW1ib2wgdW5pdHMgdG8gbG9hZCBpcyBuZWNlc3NhcnkgdG8gcmVkdWNlIG1lbW9yeSBjb25zdW1wdGlvbi4gICBBIHNlY29uZCBjb25zaWRlcmF0aW9uIGlzIHBsYWNpbmcgYW4gdXBwZXIgbGltaXQgb24gdGhlIG51bWJlciBvZiB1bml0cyB0byBsb2FkIGZyb20gdGhlIHN5bWJvbCBsaWJyYXJ5LCAgd2hpY2ggaXMgdGhlIG1vcmUgZnJlcXVlbnQgYSBzeW1ib2wgaXMsIHRoZSBsb3dlciB0aGUgcHJvYmFiaWxpdHkgb2Ygc2VsZWN0aW5nIHRoZSBjb3JyZWN0IG9yaWdpbi4gKEFjY2VwdHMgbnVtYmVyIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSAoRGVmYXVsdDogMTI4KSIsCiAgICAgICAgICAiZGVmYXVsdCIgOiAxMjgKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9LAogICJyZXF1aXJlZCIgOiBbCiAgICAiaW5wdXRQYXRocyIKICBdLAogICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZQp9
# 🔟❎ 'compile' symbol scanner advanced config
# Configure input and output options for the compile pipeline.
# To learn more see https://doc.log10x.com/compile/scan/
# Set the 10x pipeline to 'compile'
tenx: compile
inputPaths: []
# ============================ Advanced options ===============================
# ----------------------------- Tokenizer options -----------------------------
# Tokenization options provide control over how the symbol scanners parse source and config file input.
# To learn more https://doc.log10x.com/compile/scan/#tokenize
# 'tokenDelims' defines which characters break a string of event characters into tokens to
# classify as symbols or variables.
tokenDelims: "<>|. ][:-+/*=\\,{}_();'\"$\t\n@"
# 'fileExtStringFormats' controls which characters identify the start of a format specifier (https://en.wikipedia.org/wiki/Printf#Format_specifier).
fileExtStringFormats:
- .java:%
- .py:{
- .js:${
- .php:$
- .swift:\(
- .kt:$
- .rb:#{
- .ex:#{
- .c:%
- .cpp:%
- .cs:{
- .go:%
- .rs:{
- .ts:${
- .pl:$
- .sh:$
- .r:%
- .m:%
- .scala:$
maxSymbol:
# 'unitsPerToken' controls the maximum number of symbol units to load from the
# pipeline's symbol library when searching for the origin of a specific TenXTemplate symbol.
unitsPerToken: 128
# ----------------------------- Subprocess options ----------------------------
# Subprocess options control whether scanners execute in the current 10x Engine instance
# or via a sub-process to provide better isolation over parsing of complex source code ASTs.
# To learn more https://doc.log10x.com/compile/scan/#subprocess_1
# 'unitsToScanPerBatch' sets the maximum number of input files to scan per subprocess instance.
# When this threshold is exceeded the current subprocess terminated and a new one is spawned until scan is complete.
unitsToScanPerBatch: 200
scan:
# ----------------------------- Threading options ----------------------------
# 'threadPoolSize'controls the maximum number of threads to concurrently
# process input source/binary files. If the value is between 0 and 1, the number calculates
# a percentage of available cores (e.g., 0.5 = use up to 50% of available cores).
# If the value is >= 1, the value sets a fixed number of threads (e.g., 10 = 10 threads).
# If the value is 1, allocate a single thread to process input files.
# To learn more see https://doc.log10x.com/compile/scan/#parallel
threadPoolSize: "0.5"
# 'scanUnitTimeout' sets the timeout interval when scanning a source/binary input
# file before dropping it.
unitTimeout: 30s
# 'scanOperationTimeout' sets the timeout interval for the entire scanning operation
# before terminating it.
operationTimeout: 10m
# -------------------------------- Debug Option -------------------------------
# The settings below provide control over what information is logged
# to console/file when scanning input source code/text/binary files for symbol values.
# These options are primarily used when adding support for a new programming language
# syntax via the 'ANTLR' scanner, text file formats via the Jackson 'text' scanner
# or an external command using the 'executable' scanner.
debug:
# 'origins' lists names of input source/binary files
# (e.g. .class, .js, .yaml, .exe) for which debug information
# is printed to the console via 'consoleOut' log4j logger.
# Printed output is dependent on the scanner assigned to process the input file
# and usually includes the AST of the input file from which tokens are selected.
# This information can be used when debugging which symbols are extracted
# from an input file in the context of an 'antlr', 'text' or 'executable' scanner.
# Set to '*' to match all input files.
origins: [
# '*'
]
# 'symbols' lists the values of nodes within the AST of a
# target input file (e.g. MyClass, MyEnum, myFunc, ..) for which
# debug information is printed to the console via the 'consoleOut' logger.
# This includes source context (e.g. class, enum) and path within the AST
# in which the node was detected. Set to '*' to match all AST nodes.
symbols: [
#'*'
]
# 'inProcess' controls whether to scan source/binary input files from within the current
# 10x process or launch a sequential series subprocesses for better isolation
# inProcess: true
# 'force' enables scanning of source/binary input files even if a matching
# symbol unit was found in 'inputPaths'. This flag is useful when debugging
# an Antlr/text/exec scanner using 'debugOrigins' and 'debugSymbols'
# to ensure a scan takes place even if a matching symbol unit is found.
# force: false
pattern
Configure Regex pattern scanners to extract symbol values from a files using regular expressions.
Below is the default configuration from: pattern/config.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAicGF0dGVybiIgOiB7CiAgICAgICJ0eXBlIiA6ICJhcnJheSIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICJmaWxlRmlsdGVyIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiRmlsZSBuYW1lIGZpbHRlciByZWd4IHBhdHRlcm5cblxuRGVmaW5lcyBhIHJlZ2V4IHBhdHRlcm4gYSBmaWxlIG5hbWUgbXVzdCBtYXRjaCBmb3IgdGhpcyBzY2FubmVyIHRvIGJlIGFwcGxpZWQgdG8gaXRzIGNvbnRlbnRzIgogICAgICAgICAgfSwKICAgICAgICAgICJsaW5lRmlsdGVyIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiRmlsZSBsaW5lIGZpbHRlciByZWd4IHBhdHRlcm5cblxuRGVmaW5lcyBhIHJlZ2V4IHBhdHRlcm4gYXBwbGllZCB0byBlYWNoIGxpbmUgd2l0aGluIGEgdGFyZ2V0IGZpbGUgd2hlcmUgZWFjaCBtYXRjaGluZyByZWdpb24gd2lsbCBiZSBleHRyYWN0ZWQgYXMgc3ltYm9sIHZhbHVlLiBOT1RFOiBUYWtlIGludG8gY29uc2lkZXJhdGlvbiBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGlucHV0IGV4cHJlc3Npb24gdG8gYXZvaWQgbG9uZyBwcm9jZXNzaW5nIHRpbWUgYW5kL29yIGVycm9ycy4iCiAgICAgICAgICB9LAogICAgICAgICAgImV4dHJhY3RRdW90ZXMiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgImJvb2xlYW4iLAogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiRXh0cmFjdCBzaW5nbGUgYW5kIGRvdWJsZSBxdW90ZWQgdmFsdWVzXG5cbkRlZmluZXMgd2hldGhlciB0byBleHRyYWN0IHNpbmdsZSBhbmQgZG91YmxlIHF1b3RlZCB2YWx1ZXMgZnJvbSBpbnB1dCBsaW5lcywgdGFraW5nIGludG8gY29uc2lkZXJhdGlvbiBlc2NhcGluZyBhbmQgaW1wcm9wZXJseSBjbG9zZWQgcXVvdGF0aW9ucy4gVGhpcyBvcHRpb25zIHByb3ZpZGVzIGFtIGVmZmljaWVudCBtZXRob2QgZm9yIGV4dHJhY3Rpbmcgc3RyaW5nIGNvbnN0YW50cyBmcm9tIGlucHV0IGZpbGVzIHdpdGhvdXQgcmVseWluZyBvbiByZWdleCBiYWNrdHJhY2tpbmcuIFRvIGxlYXJuIG1vcmUgc2VlIFtwc2V1ZG8gY29kZV0gKGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3RhbHdneC9kMzExMzNmNjI3OGJiOGI2NDBiYWYwNTBmNzgwNDdkNSkuIChBY2NlcHRzIGJvb2xlYW4gb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIgogICAgICAgICAgfSwKICAgICAgICAgICJtYXRjaENvbnRleHQiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJPdXRwdXQgc3ltYm9sIGNvbnRleHRcblxuU2V0cyB0aGUgc291cmNlIGNvbnRleHQgdG8gYXNzaWduIGFueSBzeW1ib2xzIGNvbGxlY3RlZCB1c2luZyB0aGlzIHRoaXMgcGF0dGVybiBzZWxlY3Rvci4gRm9yIHBvc3NpYmxlIHZhbHVlcywgc2VlIHN5bWJvbCBbY29udGV4dHNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI2NvbnRleHRzKS4gICBJZiBhIHRhcmdldCBpbnB1dCBsaW5lIGNvbnRhaW5zIG1hdGNoZXMgZm9yIFtwYXR0ZXJuTGluZUZpbHRlcl0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW5uZXIvcGF0dGVybi8jcGF0dGVybmxpbmVmaWx0ZXIpIEFORCB0aGlzIHZhbHVlIGlzIHNldCB0byBbbWV0aG9kXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNtZXRob2QpIEFORCB0aGUgbWF0Y2hpbmcgbGluZSBjb250YWlucyB2YWx1ZXMgc3BlY2lmaWVkIGFzIFtsb2dtZXRob2RzXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbm5lci9sb2dNZXRob2RzLyNsb2dtZXRob2RzKSBvciBbbG9nc3RyZWFtc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW5uZXIvbG9nTWV0aG9kcy8jbG9nc3RyZWFtcykgb3V0c2lkZSBvZiBtYXRjaCBib3VuZHMgdGhlbiB0aGUgY29udGV4dCB3aWxsIGJlIHNldCBhcyBbbG9nXShodHRwczovL2RvYy5sb2cxMHguY29tL3J1bi90cmFuc2Zvcm0vc3ltYm9sLyNsb2cpLiAgRm9yIGV4YW1wbGUsIGZvciB0aGUgZm9sbG93aW5nIGlucHV0IGxpbmUsIGEgcGF0dGVybiBzY2FubmVyIHNldCB0byBgbWV0aG9kYCB0aGF0IGV4dHJhY3RzIHF1b3RlZCBzdHJpbmdzIHdpbGwgYXNzaWduZWQgdGhlIGV4dHJhY3RlZCB2YWx1ZSdzIGNvbnRleHQgYXMgYGxvZ2AgZ2l2ZW4gdGhlIHByZXNlbmNlIG9mIHRoZSBgQ29uc29sZWAgdmFsdWUgd2hpY2ggaXMgZGVmaW5lZCBhcyBsb2dnaW5nIHN0cmVhbSBpZGVudGlmaWVyLiAgYGBgIGNzIENvbnNvbGUuV3JpdGVMaW5lKFwiQWNjb3VudGluZyBcXFwic2VydmljZSBzdGFydGVkXCIpOyBgYGAiCiAgICAgICAgICB9LAogICAgICAgICAgInVuZXNjYXBlU2NoZW1lIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiVW5lc2NhcGUgc2NoZW1lIHRvIGFwcGx5IHRvIG1hdGNoaW5nIHNlcXVlbmNlc1xuXG5TcGVjaWZpZXMgYW4gdW5lc2NhcGUgYWxnb3JpdGhtIHRvIGFwcGx5IHRvIG1hdGNoaW5nIHNlcXVlbmNlcyBvZiBbcGF0dGVybkxpbmVGaWx0ZXJdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL3BhdHRlcm4vI3BhdHRlcm5saW5lZmlsdGVyKS4gU3VwcG9ydGVkIHZhbHVlczogW2pzb24samF2YSx4bWwsaHRtbCxqYXZhU2NyaXB0XS4gICBJZiBub3Qgc3BlY2lmaWVkLCBjaGFyYWN0ZXJzIGFyZSB0cmVhdGVkIGFzIG5vdCBlc2NhcGVkLiAgVG8gbGVhcm4gbW9yZSBzZWUgW1VuZXNjYXBlIGFsZ29yaXRobXNdKGh0dHBzOi8vd3d3LnVuYmVzY2FwZS5vcmcvdXNpbmd1bmJlc2NhcGUuaHRtbCkuIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmVkIiA6IFsKICAgICAgICAgICJmaWxlRmlsdGVyIiwKICAgICAgICAgICJleHRyYWN0UXVvdGVzIgogICAgICAgIF0KICAgICAgfQogICAgfQogIH0sCiAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlCn0=
# 🔟❎ 'compile' pattern quoted strings configuration
# This pattern symbol scanner extracts single and double quoted string values
# from target files. This pattern is used a default for capturing symbol values
# from source files for which no ANTLR grammar or built-in scanner is available.
# Set the 10x pipeline to 'compile'
tenx: compile
# ============================== Pattern Options ==============================
pattern:
# 'fileFilter' is set as a sink for prominent source code files. Available built-in and ANTLR
# scanners will take precedence over this pattern scanner
- fileFilter: \b\w+\.(java|cs|php|cpp|cxx|c|h|H|hxx|cc|hh|py|go|js|rs|bash|scala|sc|ts|rb|kt|lua|groovy|swift)\b
extractQuotes: true
# 'lineFilter' defines a regex pattern applied to each line within a target file.
# Each matching region will be extracted as symbol value
lineFilter: null
# 'matchContext' sets the source context to assign any symbols collected using this this pattern selector.
# For possible values, see https://doc.log10x.com/run/transform/symbol/#contexts
matchContext: method_invoke
# 'unescapeScheme' specifies an unescape algorithm to apply to matching sequences of patternLineFilter.
# Supported values: [json,java,xml,html,javaScript].
unescapeScheme: java
Cpp
Configure the ANTLR scanner to extract symbols from any programming language using the ANTLR framework.
Below is the default configuration from: antlr/cpp.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiYW50bHJQYXJzZVVuaXRUaW1lb3V0IiA6IHsKICAgICAgInR5cGUiIDogWyAic3RyaW5nIiwgIm51bGwiIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJTb3VyY2UgZmlsZSBwYXJzZSB0aW1lb3V0XG5cbkRlZmluZXMgdGhlIHRpbWVvdXQgaW50ZXJ2YWwgZm9yIHBhcnNpbmcgYW5kIHNjYW5uaW5nIGEgc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlIGJlZm9yZSBhYm9ydGluZy4gZGVmYXVsdCB2YWx1ZTogNjBzZWMiCiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# 🔟❎ 'compile' C++ ANTLR symbol scanner configuration
# The 'cpp' configuration instructs the ANTLR scanner which symbol values (e.g. class/func names, code constants)
# to extract from c++ source files.
# Set the 10x pipeline to 'compile'
tenx: compile
# ============================== ANTLR Options ================================
antlr:
# The 'antlrLang' module is defined in: https://doc.log10x.com/compile/scanner/antlr/langs
# These values define the ANTLR grammar .g4 file used to
# to tokenize and construct an AST for the target cpp file
lang: cpp
fileExt:
- .cpp
- .cxx
- .c++
- .c
- .h
- .H
- .hpp
- .hxx
- .h++
- .cc
- .hh
grammarFile: grammar/CPP14Parser.g4
lexerFile: grammar/CPP14Lexer.g4
rootRule: translationUnit
reserved:
- '::'
- '<<'
- inline
- namespace
- <
- class
- '>'
# 'lineFilters' specifies a list of regex patterns for skipping input lines
lineFilters:
- ^\s*(//.*|/\*.*\*/)$
- ^.*\bnew\(\);\b.*$
# The 'rule' list defines the nodes within a cpp AST tree that are captured
# and added to the output symbol unit.
# To learn more see: https://doc.log10x.com/compile/scanner/antlr/rules/
rule:
- name: enumerator
lang: cpp
context: enum
recursive: false
capture: allSymbols
- name: blockDeclaration
lang: cpp
context: method_invoke
recursive: true
capture: literalsOnly
- name: enumbase
lang: cpp
context: enum
recursive: true
capture: literalsOnly
- name: classHeadName
lang: cpp
context: class
recursive: true
capture: allSymbols
- name: enumSpecifier
lang: cpp
context: class
recursive: false
capture: literalsOnly
condition: ^enumHead$
tag: EnumHead
- name: enumHead
lang: cpp
context: class
recursive: false
capture: allSymbols
ifTag: EnumHead
- name: functionDefinition
lang: cpp
context: method_decl
recursive: false
capture: allSymbols
condition: ^functionDefinition$
tag: FunctionDefinition
- name: declaratorid
lang: cpp
context: method_decl
recursive: true
capture: allSymbols
ifTag: FunctionDefinition
- name: jumpStatement
lang: cpp
context: var_assign
recursive: true
capture: literalsOnly
- name: functionBody
lang: cpp
context: method_invoke
recursive: false
capture: literalsOnly
# condition: ^functionBody$
# tag: FunctionBody
- name: statement
lang: cpp
context: method_invoke
recursive: true
capture: literalsOnly
- name: classSpecifier
lang: cpp
context: class
recursive: false
capture: literalsOnly
subRule: memberSpecification
- name: staticAssertDeclaration
lang: cpp
context: var_assign
recursive: true
capture: literalsOnly
- name: parameterDeclarationList
lang: cpp
context: method_invoke
recursive: false
capture: literalsOnly
# condition: ^parameterDeclarationList$
# tag: ParameterDeclarationList
- name: enumeratorDefinition
lang: cpp
context: enum
recursive: false
capture: allSymbols
- name: namespaceDefinition
lang: cpp
context: package
recursive: false
capture: allSymbols
- name: constantExpression
lang: cpp
context: var_assign
recursive: true
capture: literalsOnly
- name: templateArgumentList
lang: cpp
context: method_invoke
recursive: false
capture: literalsOnly
# condition: ^templateArgumentList$
# tag: TemplateArgumentList
Csharp
Configure the ANTLR scanner to extract symbols from any programming language using the ANTLR framework.
Below is the default configuration from: antlr/csharp.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiYW50bHJQYXJzZVVuaXRUaW1lb3V0IiA6IHsKICAgICAgInR5cGUiIDogWyAic3RyaW5nIiwgIm51bGwiIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJTb3VyY2UgZmlsZSBwYXJzZSB0aW1lb3V0XG5cbkRlZmluZXMgdGhlIHRpbWVvdXQgaW50ZXJ2YWwgZm9yIHBhcnNpbmcgYW5kIHNjYW5uaW5nIGEgc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlIGJlZm9yZSBhYm9ydGluZy4gZGVmYXVsdCB2YWx1ZTogNjBzZWMiCiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# 🔟❎ 'compile' C# ANTLR symbol scanner configuration
# The 'csharp' configuration instructs the ANTLR scanner which symbol values (e.g. class/func names, code constants)
# to extract from c# source files.
# Set the 10x pipeline to 'compile'
tenx: compile
# ============================== ANTLR Options ================================
antlr:
# The 'antlrLang' module is defined in: https://doc.log10x.com/compile/scanner/antlr/langs
# These values define the ANTLR-generated parser class used to
# to tokenize and construct an AST for the target c# file.
lang: csharp
fileExt:
- .csx
- .cs
parserClass: com.log10x.antlr.generated.csharp.CSharpParser
lexerClass: com.log10x.antlr.generated.csharp.CSharpLexer
# 'charStreamClass' is set to remove language elements introduced later than V6.0 which is the latest release supported by this grammar.
# To learn more see https://github.com/antlr/grammars-v4/tree/master/csharp#readme
charStreamClass: com.log10x.antlr.parsers.CSharpDowngrader
rootRule: compilation_unit
reserved:
- namespace
- interface
- class
- enum
# 'lineFilters' specifies a list of regex patterns for skipping input lines
lineFilters:
- ^\s*(//.*|/\*.*\*/)$
# Remove unsupported C# v10 File scoped namespaces
- ^namespace.*;$
# Remove unsupported C# v9 Target-typed new operator
# - "(?<!\\w)new\\s*\\(\\s*\\)\\s*;"
- ".*new\\(.*"
# The 'rule' list defines the nodes within a csharp AST tree that are captured
# and added to the output symbol unit.
# To learn more see: https://doc.log10x.com/compile/scanner/antlr/rules/
rule:
- name: interface_definition
lang: csharp
context: class
recursive: false
capture: allSymbols
subRule: identifier
- name: enum_member_declaration
lang: csharp
context: enum
recursive: true
capture: allSymbols
- name: enum_definition
lang: csharp
context: class
recursive: false
capture: allSymbols
subRule: identifier
- name: namespace_body
lang: csharp
context: package
recursive: true
capture: literalsOnly
- name: method_invocation
lang: csharp
context: method_invoke
recursive: true
capture: literalsOnly
- name: object_creation_expression
lang: csharp
context: method_invoke
recursive: true
capture: literalsOnly
- name: interpolated_regular_string_part
lang: csharp
context: method_invoke
recursive: false
capture: allSymbols
subRule: interpolated_regular_string_part
- name: namespace_declaration
lang: csharp
context: package
recursive: true
capture: allSymbols
- name: statement_list
lang: csharp
context: method_invoke
recursive: true
capture: literalsOnly
- name: constant_declaration
lang: csharp
context: var_assign
recursive: true
capture: literalsOnly
- name: method_declaration
lang: csharp
context: method_decl
recursive: true
capture: allSymbols
subRule: identifier
- name: method_body
lang: csharp
context: method_decl
recursive: false
capture: literalsOnly
#- name: method_member_name
# lang: csharp
# context: method_decl
# recursive: true
# capture: allSymbols
- name: local_variable_initializer
lang: csharp
context: var_assign
recursive: true
capture: literalsOnly
- name: returnStatement
lang: csharp
context: var_assign
recursive: true
capture: literalsOnly
- name: class_definition
lang: csharp
context: class
recursive: false
capture: allSymbols
subRule: identifier
- name: attribute_argument
lang: csharp
context: annotation_invoke
recursive: true
capture: literalsOnly
pythonAST
Configure the CPython AST scanner to scan Python source code for symbol values.
Below is the default configuration from: pythonAST/default.yaml.
# 🔟❎ 'compile' python symbol scanner settings
# The Python AST symbol scanner leverages the Python native .py parsing engine.
# to launch the 'astpretty' script from https://github.com/asottile/astpretty
# to parse the contents of an input .py file.
# If a python runtime is unavailable when executing the 'compile' pipeline,
# the 'pythonASTPath' value can be set to null or empty string to default
# to the ANTLR symbol scanner defined in 'python.yaml'
# 'pythonPath' specifies the command for launching a Python run-time.
# A test script verifies a Python run-time is available. If the test script is unsuccessful,
# the scanner is disabled.
pythonPath: python3
archive
Configure the Archive scanner to scan compressed archives for enclosed files containing symbol values.
Below is the default configuration from: archive/default.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiYXJjaGl2ZUV4dGVuc2lvbnMiIDogewogICAgICAidHlwZSIgOiBbICJhcnJheSIsICJudWxsIiBdLAogICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiU3VwcG9ydGVkIGFyY2hpdmUgZXh0ZW5zaW9uc1xuXG5EZWZpbmVzIHRoZSBmaWxlIGV4dGVuc2lvbnMgb2YgYXJjaGl2ZSB6aXAgZmlsZXMgdG8gc2NhbiBmb3Igc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlcy4gKERlZmF1bHQ6IFtcIi56aXBcIixcIi5qYXJcIixcIi53YXJcIixcIi5lYXJcIixcIi43c1wiLFwiLmd6XCIsXCIuYnJcIixcIi5sejRcIixcIi5sem1hXCIsXCIudGFyXCIsXCIudGFyLmJyXCIsXCIudGFyLmd6XCIsXCIudGFyLmJ6MlwiLFwiLnRhci5sejRcIixcIi50YXIubHptYVwiXSkiLAogICAgICAiaXRlbXMiIDogewogICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgIH0sCiAgICAgICJkZWZhdWx0IiA6IFsgIi56aXAiLCAiLmphciIsICIud2FyIiwgIi5lYXIiLCAiLjdzIiwgIi5neiIsICIuYnIiLCAiLmx6NCIsICIubHptYSIsICIudGFyIiwgIi50YXIuYnIiLCAiLnRhci5neiIsICIudGFyLmJ6MiIsICIudGFyLmx6NCIsICIudGFyLmx6bWEiIF0KICAgIH0KICB9LAogICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZQp9
# 🔟❎ 'compile' archive symbol scanner config
# The archive'scanner iterates through the contents of file archives
# to seek source/binary files whose contents to scan into
# the output symbol files.
# Set the 10x pipeline to 'compile'
tenx: compile
archiveExtensions:
- .zip
- .jar
- .war
- .ear
- .7s
- .gz
- .br
- .lz4
- .lzma
- .tar
- .tar.br
- .tar.gz
- .tar.bz2
- .tar.lz4
- .tar.lzma
logMethods
Configure the Log method/stream definitions to define logger method and output stream names.
Below is the default configuration from: logMethods/default.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAibG9nIiA6IHsKICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICJtZXRob2RzIiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJOYW1lcyBvZiBzb3VyY2UgY29kZSBtZXRob2RzIHRvIG1hcmsgYXMgJ2xvZ2dpbmcnXG5cbkxpc3RzICdsb2dnaW5nJyBtZXRob2QgbmFtZXMgd2hvc2UgaW52b2NhdGlvbnMgdG8gbWFyayAnbG9nZ2luZycuIExvZ2dpbmcgZnJhbWV3b3JrcyBjb21tb25seSBkZWZpbmUgc3RhbmRhcmQgbWV0aG9kcyB0byBlbWl0IGV2ZW50IGluZm9ybWF0aW9uIHRvIHByb2dyYW0gb3V0cHV0IChlLmcuLCAnd2FybicsICdlcnJvcicpLiIsCiAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgIm1ldGhvZFJlZ2V4IiA6IHsKICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICJudWxsIgogICAgICAgICAgXSwKICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIHBhdHRlcm4gdGhhdCBzb3VyY2UgY29kZSBtZXRob2RzIG5hbWVzIG11c3QgbWF0Y2ggdG8gcXVhbGlmeSBhcyAnbG9nZ2luZycgbWV0aG9kc1xuXG5TcGVjaWZpZXMgYSBwYXR0ZXJuIGZvciBzeW1ib2wgc2Nhbm5lcnMgdG8gYXBwbHkgdG8gc291cmNlIGNvZGUgbWV0aG9kL2Z1bmN0aW9uIG5hbWVzIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIG1hcmsgdGhlbSBhcyAnbG9nZ2luZycuIEZvciBleGFtcGxlOiBeKGxvZ3xMb2cpfChMb2d8bG9nKSQiCiAgICAgICAgfSwKICAgICAgICAic3RyZWFtcyIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAibnVsbCIKICAgICAgICAgIF0sCiAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTmFtZXMgb2Ygc291cmNlIGNvZGUgdmFyaWFibGVzIHRvIG1hcmsgYXMgJ2xvZ2dpbmcnXG5cbkxpc3RzICdsb2dnaW5nJyBtZW1iZXIgbmFtZXMgd2hvc2UgYXNzaWdubWVudHMgdG8gbWFyayAnbG9nZ2luZycuIFByb2dyYW1taW5nIGxhbmd1YWdlcyBjb21tb25seSBkZWZpbmUgc3RhbmRhcmQgbWVtYmVycyB0byBlbWl0IGV2ZW50cyB0byBvdXRwdXQgKGUuZy4sICdvdXQnLCAnY2VycicpLiIsCiAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sCiAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlCn0=
# 🔟❎ 'compile' log methods configuration
# Set the 10x pipeline to 'compile'
tenx: compile
# ============================ Log Options =============================
log:
# 'methods' lists known method names collected from common logging
# frameworks used to indicate source code logging events to stream at runtime.
# Identifying those points in source code that perform logging operations
# and marking them within an output symbol unit file (*.json)
# allows the 'run' pipeline to correlate each TenXObject structured from the event
# data back to its origin in the codebase.
# To learn more about symbol contexts and their use, see https://doc.log10x.com/run/transform/symbol/#contexts
methods:
# Assertions are not enabled by default as they are less likely to appear in prod logs
# - Assert
# - assert
# - assertEquals
# - assertEqual
- exception
- Log
- LOG
- log
- BOOST_LOG_TRIVIAL
- trace
- Trace
- log_trace
- logTrace
- TRACE
- LOG_TRACE
- debug
- Debug
- logDebug
- log_debug
- DEBUG
- LOG_DEBUG
- Debugf
- info
- Info
- log_info
- logInfo
- INFO
- LOG_INFO
- information
- LogInformation
- InfoF
- warn
- Warn
- log_warn
- logWarn
- WARN
- LOG_WARN
- WarnF
- warning
- logWarning
- LOG_WARNING
- error
- Error
- logError
- log_error
- ERROR
- LOG_ERROR
- ErrorF
- err
- fatal
- Fatal
- log_fatal
- logFatal
- FATAL
- LOG_FATAL
- FatalF
- critical
- Panic
# 'methodRegex' specifies an optional regex that will be applied
# to a scanned source code method/function name. If matched, the method
# will be considered to be a 'logging method' (see above).
# For example: ^(log|Log)|(Log|log)$
methodRegex: null
# 'streams' defines which source code variables within
# this ANTLR syntax are treated as output streams (e.g. stdout, stderr, cerr).
# Literal constants (e.g. "error connecting to {}") passed to a variable
# listed below (e.g. 'cout') will be assigned a 'logger_method_invoke'
# symbol source context.
streams:
# - assert
- cout
- cerr
- Error
- Debug
- err
- out
- Console
Go
Configure the ANTLR scanner to extract symbols from any programming language using the ANTLR framework.
Below is the default configuration from: antlr/go.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiYW50bHJQYXJzZVVuaXRUaW1lb3V0IiA6IHsKICAgICAgInR5cGUiIDogWyAic3RyaW5nIiwgIm51bGwiIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJTb3VyY2UgZmlsZSBwYXJzZSB0aW1lb3V0XG5cbkRlZmluZXMgdGhlIHRpbWVvdXQgaW50ZXJ2YWwgZm9yIHBhcnNpbmcgYW5kIHNjYW5uaW5nIGEgc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlIGJlZm9yZSBhYm9ydGluZy4gZGVmYXVsdCB2YWx1ZTogNjBzZWMiCiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# 🔟❎ 'compile' Go ANTLR symbol scanner configuration
# The 'go' configuration instructs the ANTLR scanner which symbol values (e.g. class/func names, code constants)
# to extract from GO source files.
# Set the 10x pipeline to 'compile'
tenx: compile
# ============================== ANTLR Options ================================
antlr:
# The 'antlrLang' module is defined in: https://doc.log10x.com/compile/scanner/antlr/langs
# These values define the ANTLR-generated parser class used to
# to tokenize and construct an AST for the target go file.
lang: go
fileExt:
- .go
parserClass: com.log10x.antlr.generated.golang.GoParser
lexerClass: com.log10x.antlr.generated.golang.GoLexer
rootRule: sourceFile
reserved:
- package
- func
# 'lineFilters' specifies a list of regex patterns for skipping input lines
lineFilters:
- ^\s*(//.*|/\*.*\*/)$
# The 'rule' list defines the nodes within a go AST tree that are captured
# and added to the output symbol unit.
# To learn more see: https://doc.log10x.com/compile/scanner/antlr/rules/
rule:
- name: constSpec
lang: go
context: enum
recursive: false
capture: allSymbols
subRule: identifierList
- name: returnStmt
lang: go
context: var_assign
recursive: true
capture: literalsOnly
- name: assignment
lang: go
context: var_assign
recursive: true
capture: literalsOnly
- name: expressionStmt
lang: go
context: method_invoke
recursive: true
capture: literalsOnly
- name: packageClause
lang: go
context: package
recursive: false
capture: allSymbols
- name: arguments
lang: go
context: method_invoke
recursive: true
capture: literalsOnly
- name: typeSpec
lang: go
context: class
recursive: false
capture: allSymbols
- name: functionDecl
lang: go
context: method_decl
recursive: false
capture: allSymbols
- name: methodDecl
lang: go
context: method_decl
recursive: false
capture: allSymbols
Jackson
Configure Text file scanners to scan text/binary files for symbol values using the Jackson library.
Below is the default configuration from: text/jackson.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAidGV4dCIgOiB7CiAgICAgICJ0eXBlIiA6ICJhcnJheSIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICJwYXJzZXJOYW1lIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUGFyc2VyIGxvZ2ljYWwgbmFtZVxuXG5EZWZpbmVzIGEgbG9naWNhbCB1bmlxdWUgbmFtZSBmb3IgdGhpcyBwYXJzZXIgKGUuZy4sICdsb2dzJykiCiAgICAgICAgICB9LAogICAgICAgICAgImZpbGVOYW1lRmlsdGVyIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUGF0dGVybiB0byBtYXRjaCBmb3IgdGFyZ2V0IGlucHV0IGZpbGUgbmFtZVxuXG5EZWZpbmVzIGEgcmVnZXggcGF0dGVybiBhIGZpbGUgbXVzdCBtYXRjaCBhZ2FpbnN0IGZvciB0aGlzIHNjYW5uZXIgdG8gYXBwbHkgdG8gaXQuIgogICAgICAgICAgfSwKICAgICAgICAgICJwYXJzZXJGYWN0b3J5Q2xhc3MiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJQYXJzZXIgZmFjdG9yeSBjbGFzc1xuXG5Qcm92aWRlcyBhbiBvcHRpb25hbCBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiBhIGNsYXNzIG5hbWUgZGVyaXZlZCBmcm9tIGEgW0pzb25GYWN0b3J5XShodHRwczovL2Zhc3RlcnhtbC5naXRodWIuaW8vamFja3Nvbi1jb3JlL2phdmFkb2MvMi42L2NvbS9mYXN0ZXJ4bWwvamFja3Nvbi9jb3JlL0pzb25GYWN0b3J5Lmh0bWwpLiAgSWYgc3BlY2lmaWVkLCB0aGUgc2Nhbm5lciBpbnN0YW50aWF0ZXMgdGhlIGZhY3RvcnkgdXNpbmcgYSBwYXJhbWV0ZXJsZXNzIGNvbnN0cnVjdG9yICBhbmQgaW52b2tlcyBpdHMgW2NyZWF0ZVBhcnNlcl0oaHR0cHM6Ly9mYXN0ZXJ4bWwuZ2l0aHViLmlvL2phY2tzb24tY29yZS9qYXZhZG9jLzIuNi9jb20vZmFzdGVyeG1sL2phY2tzb24vY29yZS9Kc29uRmFjdG9yeS5odG1sI2NyZWF0ZVBhcnNlcihqYXZhLmlvLklucHV0U3RyZWFtKSkgbWV0aG9kIHRvIGdlbmVyYXRlIGEgcGFyc2VyIGluc3RhbmNlLiBUaGUgc2Nhbm5lciB1c2VzIHRoZSBwYXJzZXIgdG8gcmVhZCB0b2tlbiB2YWx1ZXMgZnJvbSB0aGUgZmlsZS4gIGlmICd0ZXh0UGFyc2VyRmFjdG9yeUFyZ3MnIGlzIHNwZWNpZmllZCwgYSBjb25zdHJ1Y3RvciByZWNlaXZpbmcgYSBzdHJpbmdbXSBtdXN0ICBiZSBkZWZpbmVkIGJ5IHRoaXMgY2xhc3MgdG8gcmVjZWl2ZSBvcHRpb25hbCBjb25maWcgcGFyYW1ldGVycyIKICAgICAgICAgIH0sCiAgICAgICAgICAicGFyc2VyRmFjdG9yeUFyZ3MiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkFyZ3VtZW50cyBmb3IgJ3RleHRQYXJzZXJGYWN0b3J5JyBjdG9yXG5cblNwZWNpZmllcyBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgcGFyc2VyIGZhY3RvcnkgaW5zdGFuY2UgY29uc3RydWN0b3IuIFRoaXMgb3B0aW9uIG9ubHkgYXBwbGllcyBpZiAndGV4dFBhcnNlckZhY3RvcnlDbGFzcycgaXMgc2V0LiIsCiAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJzY2FuRmllbGRWYWx1ZXMiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgImJvb2xlYW4iLAogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiQ29udHJvbHMgd2hldGhlciB0byBjYXB0dXJlIEphY2tzb24gcGFyc2VyIGZpZWxkIHZhbHVlc1xuXG5Db250cm9scyB3aGV0aGVyIHRvIGNhcHR1cmUgYSBKYWNrc29uIHBhcnNlcidzIFtWQUxVRV9TVFJJTkddKGh0dHBzOi8vZmFzdGVyeG1sLmdpdGh1Yi5pby9qYWNrc29uLWNvcmUvamF2YWRvYy8yLjgvY29tL2Zhc3RlcnhtbC9qYWNrc29uL2NvcmUvSnNvblRva2VuLmh0bWwjVkFMVUVfU1RSSU5HKSB0b2tlbnMgYXJlIHNjYW5uZWQgZm9yIGVudHJpZXMgb3IganVzdCB2YWx1ZXMgb2YgW0ZJRUxEX05BTUVdKGh0dHBzOi8vZmFzdGVyeG1sLmdpdGh1Yi5pby9qYWNrc29uLWNvcmUvamF2YWRvYy8yLjgvY29tL2Zhc3RlcnhtbC9qYWNrc29uL2NvcmUvSnNvblRva2VuLmh0bWwjRklFTERfTkFNRSkgdG9rZW5zLiAgICBUaGlzIG9wdGlvbiBvbmx5IGFwcGxpZXMgaWYgJ3RleHRQYXJzZXJGYWN0b3J5Q2xhc3MnIGlzIHNldC4gKEFjY2VwdHMgYm9vbGVhbiBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikiCiAgICAgICAgICB9LAogICAgICAgICAgIm1heExpbmVzIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJudW1iZXIiLAogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTWF4IG51bWJlciBvZiBsaW5lcyB0byBzY2FuXG5cbkNvbnRyb2xzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0byBzY2FuIGZvciBzeW1ib2wgdmFsdWVzIGZyb20gdGhlIGlucHV0IGZpbGUuIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIHNjYW5uaW5nIGV4aXN0aW5nIGxvZyBmaWxlcyBhcyAndGVtcGxhdGVzJyBmb3IgcGFyc2luZyBmdXR1cmUgbG9ncyBmcm9tIGEgc2ltaWxhciBpbnB1dCBzdHJlYW0uIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikiCiAgICAgICAgICB9LAogICAgICAgICAgImxpbmVPZmZzZXQiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgIm51bWJlciIsCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaW5lIG51bWJlciBmcm9tIHdoaWNoIHRvIHN0YXJ0IHNjYW5cblxuU3BlY2lmaWVzIHRoZSBsaW5lIG51bWJlciBmcm9tIHdoaWNoIHRvIHN0YXJ0IHNjYW5uaW5nIGZvciBzeW1ib2xzLiBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiBzY2FubmluZyBhIHNwZWNpZmljIHBvcnRpb24gb2YgYSB0ZXh0IGZpbGUuIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikiCiAgICAgICAgICB9LAogICAgICAgICAgImFsbG93RGlnaXRzIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJib29sZWFuIiwKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkNvbnRyb2xzIHdoZXRoZXIgdG8gY2FwdHVyZSB0b2tlbnMgY29udGFpbmluZyBudW1lcmljIGFzIHN5bWJvbCB0b2tlbnNcblxuQ29udHJvbHMgd2hldGhlciB0b2tlbnMgY29udGFpbiBudW1lcmljIGNoYXJzIChlLmcuLCAwLTkpIGFyZSBhY2NlcHRlZCBhcyBzeW1ib2wgdG9rZW5zLiBBcyBhbHBoYW51bWVyaWMgY29tYmluYXRpb25zIHRlbmQgdG8gaGF2ZSBoaWdoIGNhcmRpbmFsaXR5IChlLmcuLCBHVUlELCB0cmFjZV9pZCksIGl0IGlzIG5vdCBnZW5lcmFsbHkgYWR2aXNlZCAgdG8gYWRkIHRoZW0gdG8gc3ltYm9sIHVuaXRzIHVubGVzcyBzcGVjaWZpY2FsbHkga25vd24gdG8gYmUgJ2NvbnN0YW50JyAvIGxvdyBjYXJkaW5hbGl0eSB2YWx1ZXMgKEFjY2VwdHMgYm9vbGVhbiBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikiCiAgICAgICAgICB9LAogICAgICAgICAgIm1pbkxlbmd0aCIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAibnVtYmVyIiwKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk1pbiBjaGFyYWN0ZXIgbGVuZ3RoIGZvciBhIHRva2VuIHRvIGJlIGNvbnNpZGVyZWQgYSBzeW1ib2wgdmFsdWVcblxuU2V0cyB0aGUgbWluaW1hbCBjaGFyYWN0ZXIgbGVuZ3RoIGEgdG9rZW4gbXVzdCBoYXZlIHRvIGNvbnN0aXR1dGUgYSBzeW1ib2wgdmFsdWUuIFZlcnkgc2hvcnQgdG9rZW5zIChlLmcuLCBsZW4gPCAzKSBoYXZlIGEgaGlnaCBwcm9iYWJpbGl0eSBvZiBiZWluZyBkeW5hbWljIHZhbHVlcyB3aXRoIGhpZ2ggY2FyZGluYWxpdHkgYW5kLCBhcyBzdWNoLCBzaG91bGQgbm90ICBiZSBjYXB0dXJlZCBhcyBzeW1ib2wgdmFsdWVzLiAoQWNjZXB0cyBudW1iZXIgb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIgogICAgICAgICAgfSwKICAgICAgICAgICJtYXhMZW5ndGgiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgIm51bWJlciIsCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJNYXggY2hhcmFjdGVyIGxlbmd0aCBmb3IgYSB0b2tlbiB0byBiZSBjb25zaWRlcmVkIGEgc3ltYm9sIHZhbHVlXG5cblNldHMgdGhlIG1heGltdW0gY2hhcmFjdGVyIGxlbmd0aCBhIHRva2VuIG11c3QgaGF2ZSB0byBjb25zdGl0dXRlIGEgc3ltYm9sIHZhbHVlLiBWZXJ5IGxvbmcgdG9rZW5zIChlLmcuLCBsZW4gPiAxMDApIGhhdmUgYSBoaWdoIHByb2JhYmlsaXR5IG9mIGJlaW5nIGR5bmFtaWMgdmFsdWVzIHdpdGggaGlnaCBjYXJkaW5hbGl0eSBhbmQsIGFzIHN1Y2gsIHNob3VsZCBub3QgIGJlIGNhcHR1cmVkIGFzIHN5bWJvbCB2YWx1ZXMuIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAicmVxdWlyZWQiIDogWwogICAgICAgICAgInBhcnNlck5hbWUiLAogICAgICAgICAgImZpbGVOYW1lRmlsdGVyIgogICAgICAgIF0KICAgICAgfQogICAgfQogIH0sCiAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlCn0=
# 🔟❎ 'compile' text symbol scanner configuration
# The 'text' scanner parses text files for symbol values. It utilizes
# the Jackson parser library to parse any text/binary format it supports.
# This includes formats such json, yaml, xml, ini, protobuf and more.
# The configuration below is added by default to the 10x 'compile' pipeline.
# Even so, if another text scanner is defined via the 'textScanners' options group
# whose 'fileNameFilter' matches that of the current target input file,
# it will take precedence over the text scanners defined below.
# To learn more about text scanner options below, see:
# https://doc.log10x.com/compile/scanner/text
# Set the 10x pipeline to 'compile'
tenx: compile
# =============================== Text Options ================================
text:
- parserName: text
fileNameFilter: '^.*\.(csv|txt|properties|csv|tsv|ini|conf|sh|log|out)$'
maxLines: 500
lineOffset: 0
allowDigits: false
minLength: 2
maxLength: 50
- parserName: json
fileNameFilter: '^.*\.(json)$'
parserFactoryClass: com.fasterxml.jackson.core.JsonFactory
scanFieldValues: true
- parserName: yaml
fileNameFilter: '^.*\.(yml|yaml)$'
parserFactoryClass: com.log10x.eng.scanner.text.TextYamlFactory
scanFieldValues: true
- parserName: xml
fileNameFilter: '^.*\.(xml|xsd)$'
parserFactoryClass: com.fasterxml.jackson.dataformat.xml.XmlFactory
scanFieldValues: true
Java
Configure the ANTLR scanner to extract symbols from any programming language using the ANTLR framework.
Below is the default configuration from: antlr/java.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiYW50bHJQYXJzZVVuaXRUaW1lb3V0IiA6IHsKICAgICAgInR5cGUiIDogWyAic3RyaW5nIiwgIm51bGwiIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJTb3VyY2UgZmlsZSBwYXJzZSB0aW1lb3V0XG5cbkRlZmluZXMgdGhlIHRpbWVvdXQgaW50ZXJ2YWwgZm9yIHBhcnNpbmcgYW5kIHNjYW5uaW5nIGEgc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlIGJlZm9yZSBhYm9ydGluZy4gZGVmYXVsdCB2YWx1ZTogNjBzZWMiCiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# 🔟❎ 'compile' Java ANTLR symbol scanner configuration
# The 'java' configuration instructs the ANTLR scanner which symbol values (e.g. class/func names, code constants)
# to extract from Java source files.
# IMPORTANT: while set to enabled by default, the dedicated java scanner utilizes
# takes precedence over this scanner unless disabled.
# To learn more see https://doc.log10x.com/compile/scanner/javaParser
# Set the 10x pipeline to 'compile'
tenx: compile
# ============================== ANTLR Options ================================
antlr:
# The 'antlrLang' module is defined in: https://doc.log10x.com/compile/scanner/antlr/langs
# These values define the ANTLR-generated parser class used to
# to tokenize and construct an AST for the target Java file.
lang: java
fileExt:
- .java
parserClass: com.log10x.antlr.generated.java.Java9Parser
lexerClass: com.log10x.antlr.generated.java.Java9Lexer
rootRule: compilationUnit
reserved:
- package
- interface
- class
- enum
# 'lineFilters' specifies a list of regex patterns for skipping input lines
lineFilters:
- ^\s*(//.*|/\*.*\*/)$
# The 'rule' list defines the nodes within a Java AST tree that are captured
# and added to the output symbol unit.
# To learn more see: https://doc.log10x.com/compile/scanner/antlr/rules/
rule:
- name: packageDeclaration
lang: java
context: package
recursive: false
capture: allSymbols
- name: methodInvocation
lang: java
context: method_invoke
recursive: true
capture: literalsOnly
- name: enumDeclaration
lang: java
context: class
recursive: false
capture: allSymbols
- name: annotation
lang: java
context: annotation_invoke
recursive: true
capture: literalsOnly
- name: normalClassDeclaration
lang: java
context: class
recursive: false
capture: allSymbols
- name: variableInitializer
lang: java
context: var_assign
recursive: true
capture: literalsOnly
- name: enumConstant
lang: java
context: enum
recursive: false
capture: allSymbols
- name: returnStatement
lang: java
context: var_assign
recursive: true
capture: literalsOnly
- name: methodDeclaration
lang: java
context: method_decl
recursive: false
capture: literalsOnly
- name: argumentList
lang: java
context: method_invoke
recursive: true
capture: literalsOnly
- name: methodInvocation_lfno_primary
lang: java
context: method_invoke
recursive: true
capture: literalsOnly
- name: methodDeclarator
lang: java
context: method_decl
recursive: false
capture: allSymbols
- name: methodInvocation_lf_primary
lang: java
context: method_invoke
recursive: true
capture: literalsOnly
- name: normalInterfaceDeclaration
lang: java
context: class
recursive: false
capture: allSymbols
Javascript
Configure the ANTLR scanner to extract symbols from any programming language using the ANTLR framework.
Below is the default configuration from: antlr/javascript.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiYW50bHJQYXJzZVVuaXRUaW1lb3V0IiA6IHsKICAgICAgInR5cGUiIDogWyAic3RyaW5nIiwgIm51bGwiIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJTb3VyY2UgZmlsZSBwYXJzZSB0aW1lb3V0XG5cbkRlZmluZXMgdGhlIHRpbWVvdXQgaW50ZXJ2YWwgZm9yIHBhcnNpbmcgYW5kIHNjYW5uaW5nIGEgc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlIGJlZm9yZSBhYm9ydGluZy4gZGVmYXVsdCB2YWx1ZTogNjBzZWMiCiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# 🔟❎ 'compile' JavaScript ANTLR symbol scanner configuration
# The 'javascript' configuration instructs the ANTLR scanner which symbol values (e.g. class/func names, code constants)
# to extract from JavaScript source files.
# Set the 10x pipeline to 'compile'
tenx: compile
# ============================== ANTLR Options ================================
antlr:
# The 'antlrLang' module is defined in: https://doc.log10x.com/compile/scanner/antlr/langs
# These values define the ANTLR-generated parser class used to
# to tokenize and construct an AST for the target JavaScript file.
lang: javascript
fileExt:
- .js
parserClass: com.log10x.antlr.parsers.JavaScriptDecoratedParser
lexerClass: com.log10x.antlr.generated.javascript.JavaScriptLexer
rootRule: program2
reserved:
- function
- constructor
- class
maxLineLength: 4096
# 'lineFilters' specifies a list of regex patterns for skipping input lines
lineFilters:
- ^\s*(//.*|/\*.*\*/)$
# The 'rule' list defines the nodes within a js AST tree that are captured
# and added to the output symbol unit.
# To learn more see: https://doc.log10x.com/compile/scanner/antlr/rules/
rule:
- name: functionDeclaration
lang: javascript
context: method_decl
recursive: false
capture: allSymbols
subRule: identifier
- name: returnStatement
lang: javascript
context: var_assign
recursive: true
capture: literalsOnly
- name: classDeclaration
lang: javascript
context: class
recursive: false
capture: allSymbols
subRule: identifier
- name: methodDefinition
lang: javascript
context: method_decl
recursive: true
capture: allSymbols
subRule: identifier
- name: formalParameterList
lang: javascript
context: method_decl
recursive: false
capture: literalsOnly
- name: functionBody
lang: javascript
context: method_invoke
recursive: false
capture: literalsOnly
- name: functionDecl
lang: javascript
context: method_decl
recursive: false
capture: allSymbols
- name: anoymousFunctionDecl
lang: javascript
context: method_decl
recursive: false
capture: allSymbols
- name: argumentsExpression
lang: javascript
context: method_invoke
recursive: true
capture: literalsOnly
- name: variableDeclaration
lang: javascript
context: var_assign
recursive: true
capture: literalsOnly
- name: assignmentExpression
lang: javascript
context: var_assign
recursive: true
capture: literalsOnly
Python
Configure the ANTLR scanner to extract symbols from any programming language using the ANTLR framework.
Below is the default configuration from: antlr/python.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiYW50bHJQYXJzZVVuaXRUaW1lb3V0IiA6IHsKICAgICAgInR5cGUiIDogWyAic3RyaW5nIiwgIm51bGwiIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJTb3VyY2UgZmlsZSBwYXJzZSB0aW1lb3V0XG5cbkRlZmluZXMgdGhlIHRpbWVvdXQgaW50ZXJ2YWwgZm9yIHBhcnNpbmcgYW5kIHNjYW5uaW5nIGEgc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlIGJlZm9yZSBhYm9ydGluZy4gZGVmYXVsdCB2YWx1ZTogNjBzZWMiCiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# 🔟❎ 'compile' Python symbol scanner configuration
# The 'python' configuration instructs the ANTLR scanner which symbol values (e.g. class/func names, code constants)
# to extract from Python source files.
# NOTE: while set to enabled by default, the 'pythonAST' scanner which utilizes
# the python run-time's built-in AST parser takes precedence over this scanner
# unless a python run-time is not installed or the 'pythonAST' scanner is disabled.
# To learn see https://doc.log10x.com/compile/scanner/pythonAST
# Set the 10x pipeline to 'compile'
tenx: compile
# ============================== ANTLR Options ================================
antlr:
# The 'antlrLang' module is defined in: https://doc.log10x.com/compile/scanner/antlr/langs
# These values define the ANTLR-generated parser class used to
# to tokenize and construct an AST for the target Python file.
lang: python
fileExt:
- .py
parserClass: com.log10x.antlr.generated.python.PythonParser
lexerClass: com.log10x.antlr.generated.python.PythonLexer
rootRule: root
reserved:
- def
- __str__
- __init__
- class
# 'lineFilters' specifies a list of regex patterns for skipping input lines
lineFilters:
- ^\s*(//.*|/\*.*\*/)$
# The 'rule' list defines the nodes within a Python AST tree that are captured
# and added to the output symbol unit.
# To learn more see: https://doc.log10x.com/compile/scanner/antlr/rules/
rule:
- name: classdef
lang: python
context: class
recursive: false
capture: allSymbols
subRule: name
condition: (^Enum$|^enum$)
tag: enumLiteral
- name: testlist_star_expr
lang: python
context: enum
recursive: true
capture: allSymbolsIfMatchCond
ifTag: enumLiteral
- name: trailer
lang: python
context: method_invoke
recursive: true
capture: literalsOnly
subRule: name
- name: return_stmt
lang: python
context: var_assign
recursive: true
capture: literalsOnly
- name: decorator
lang: python
context: annotation_invoke
recursive: true
capture: literalsOnly
subRule: arglist
- name: arglist
lang: python
context: method_invoke
recursive: true
capture: literalsOnly
- name: funcdef
lang: python
context: method_decl
recursive: false
capture: allSymbols
subRule: name
- name: assign_part
lang: python
context: var_assign
recursive: true
capture: literalsOnly
- name: dictorsetmaker
lang: python
context: var_assign
recursive: true
capture: literalsOnly
Scala
Configure the ANTLR scanner to extract symbols from any programming language using the ANTLR framework.
Below is the default configuration from: antlr/scala.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiYW50bHJQYXJzZVVuaXRUaW1lb3V0IiA6IHsKICAgICAgInR5cGUiIDogWyAic3RyaW5nIiwgIm51bGwiIF0sCiAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJTb3VyY2UgZmlsZSBwYXJzZSB0aW1lb3V0XG5cbkRlZmluZXMgdGhlIHRpbWVvdXQgaW50ZXJ2YWwgZm9yIHBhcnNpbmcgYW5kIHNjYW5uaW5nIGEgc291cmNlL2JpbmFyeSBpbnB1dCBmaWxlIGJlZm9yZSBhYm9ydGluZy4gZGVmYXVsdCB2YWx1ZTogNjBzZWMiCiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# 🔟❎ 'compile' Scala symbol scanner configuration
# The 'scala' configuration instructs the ANTLR scanner which symbol values (e.g. class/func names, code constants)
# to extract from Scala source files.
# IMPORTANT: while set to enabled by default, the dedicated scala scanner utilizes
# takes precedence over this scanner unless disabled.
# To learn more see https://doc.log10x.com/compile/scanner/scalameta
# Set the 10x pipeline to 'compile'
tenx: compile
# ============================== ANTLR Options ================================
antlr:
# The 'antlrLang' module is defined in: https://doc.log10x.com/compile/scanner/antlr/langs
# These values define the ANTLR grammar .g4 file used to
# to tokenize and construct an AST for the target .Scala file.
lang: scala
fileExt:
- .scala
- .sc
grammarFile: grammar/scala.g4
rootRule: compilationUnit
reserved:
- interface
- class
- enum
- this
# 'lineFilters' specifies a list of regex patterns for skipping input lines
lineFilters:
- ^\s*(//.*|/\*.*\*/)$
# The 'rule' list defines the nodes within a scala AST tree that are captured
# and added to the output symbol unit.
# To learn more see: https://doc.log10x.com/compile/scanner/antlr/rules/
rule:
- name: classParamClauses
lang: scala
context: class
recursive: false
capture: literalsOnly
- name: patVarDef
lang: scala
context: var_assign
recursive: true
capture: literalsOnly
- name: argumentExprs
lang: scala
context: method_invoke
recursive: true
capture: literalsOnly
- name: annotation
lang: scala
context: annotation_invoke
recursive: true
capture: literalsOnly
- name: objectDef
lang: scala
context: class
recursive: true
capture: allSymbols
- name: paramClauses
lang: scala
context: class
recursive: false
capture: literalsOnly
- name: classTemplateOpt
lang: scala
context: class
recursive: false
capture: literalsOnly
- name: funDcl
lang: scala
context: method_decl
recursive: false
capture: allSymbols
- name: classDef
lang: scala
context: class
recursive: true
capture: allSymbols
- name: qualId
lang: scala
context: package
recursive: true
capture: allSymbols
- name: traitDef
lang: scala
context: class
recursive: true
capture: allSymbols
- name: funDef
lang: scala
context: method_decl
recursive: true
capture: allSymbols
subRule: funSig
- name: type_
lang: scala
context: method_decl
recursive: false
capture: literalsOnly
- name: blockStat
lang: scala
context: var_assign
recursive: true
capture: literalsOnly
- name: templateStat
lang: scala
context: method_invoke
recursive: true
capture: literalsOnly
Strings-nix
Configure Executable scanners to launch a target process from which to read symbol values via its stdout.
Below is the default configuration from: executable/strings-nix.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiZXhlYyIgOiB7CiAgICAgICJ0eXBlIiA6ICJhcnJheSIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICJuYW1lIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiQSBsb2dpY2FsIG5hbWUgZm9yIHRoaXMgZXhlYyBzY2FubmVyXG5cbkEgbG9naWNhbCBuYW1lIGZvciB0aGlzIGV4ZWMgc2Nhbm5lciB1bmlxdWUgYW1vbmdzdCBhbGwgc3BlY2lmaWVkIHNjYW5uZXIgb3B0aW9uIGdyb3VwcyAoZS5nLiwgJ3N0cmluZ3NOSVgnKSIKICAgICAgICAgIH0sCiAgICAgICAgICAib3NGaWx0ZXIiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIHBhdHRlcm4gdGhhdCBtdXN0IG1hdGNoIHRoZSBuYW1lIG9mIHRoZSBob3N0IE9TIHRvIGFwcGx5IHRoaXMgc2Nhbm5lci5cblxuRGVmaW5lcyBhIHBhdHRlcm4gdG8gbWF0Y2ggYWdhaW5zdCB0aGUgbmFtZSBvZiB0aGUgaG9zdCBPUyB0byBkZXRlcm1pbmUgd2hldGhlciB0byBhcHBseSB0aGlzIHNjYW5uZXIuIgogICAgICAgICAgfSwKICAgICAgICAgICJleHRlbnNpb25zIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIGxpc3Qgb2YgZmlsZSBleHRlbnNpb25zIGEgdGFyZ2V0IGZpbGUgbXVzdCBtYXRjaCB0byBhcHBseSB0aGlzIHNjYW5uZXJcblxuQW4gYXJyYXkgb2YgZmlsZSBleHRlbnNpb25zIHRvIHRlc3QgYSBmaWxlIGNhbmRpZGF0ZSBhZ2FpbnN0LiBJZiB0aGUgY2FuZGlkYXRlIG1hdGNoZXMgYW55IGV4dGVuc2lvbnMsIGFwcGx5IHRoaXMgc2Nhbm5lci4iLAogICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiZmlsZU5hbWVGaWx0ZXIiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIHBhdHRlcm4gdGhhdCB0aGUgdGFyZ2V0IGlucHV0IGZpbGUgbXVzdCBtYXRjaCB0byBhcHBseSB0aGlzIHNjYW5uZXJcblxuU2V0cyBhIHJlZ2V4IHBhdHRlcm4gdG8gdGVzdCBhIGZpbGUgY2FuZGlkYXRlIG5hbWUgYWdhaW5zdC4gSWYgdGhlIGNhbmRpZGF0ZSBtYXRjaGVzIGFueSBvZiB0aGUgZXh0ZW5zaW9ucywgYXBwbHkgdGhpcyBzY2FubmVyLiIKICAgICAgICAgIH0sCiAgICAgICAgICAic2VsZWN0b3IiIDogewogICAgICAgICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgICAgICAgInByb2Nlc3MiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk5hbWUgb2YgYSBwcm9jZXNzIHRvIGxhdW5jaCB3aG9zZSBvdXRwdXQgd2hldGhlciB0byBhcHBseSB0aGlzIGlucHV0XG5cbkRlZmluZSBhIHByb2Nlc3MgbmFtZSB0byBsYXVuY2ggdG8gb2J0YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbnB1dCBmaWxlLiBJbiBzb21lIE9TcyAoZS5nLiwgTGludXgvVW5peCksIGV4ZWN1dGFibGUgZmlsZXMgZG8gbm90IG5lY2Vzc2FyaWx5IGhhdmUgYSBrbm93biBleHRlbnNpb24uIEZvciB0aGlzLCBhbiBPUyB1dGlsaXR5IHN1Y2ggYXMgTklYIFtmaWxlXShodHRwczovL21hbjcub3JnL2xpbnV4L21hbi1wYWdlcy9tYW4xL2ZpbGUuMS5odG1sKSBjYW4gb2J0YWluIGluZm9ybWF0aW9uIG9uIHRoZSBhY3R1YWwgZmlsZSBjb250ZW50cy4gIElmIGEgc2VsZWN0b3IgcHJvY2VzcyBpcyBub3QgcHJvdmlkZWQgdGhlIGZpbGUncyBFTEYvUEUvT1NYIGJpbmFyeSBoZWFkZXIgaXMgdGVzdGVkIGZvciBhIHBvc3NpYmxlIG1hdGNoLiIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJ3b3JrRGlyIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJUaGUgcGF0aCBvZiB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlbiBydW5uaW5nICdleGVjU2VsZWN0b3JQcm9jZXNzJ1xuXG5EZWZpbmVzIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVuIHJ1bm5pbmcgW2V4ZWNTZWxlY3RvclByb2Nlc3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL2V4ZWN1dGFibGUvI2V4ZWNzZWxlY3RvcnByb2Nlc3MpLiBJZiBvbWl0dGVkLCB3aWxsIHVzZSB0aGUgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LiIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJhcmdzIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIGFyZ3VtZW50cyBwYXNzZWQgdG8gJ2V4ZWNTZWxlY3RvclByb2Nlc3MnXG5cbkRlZmluZXMgYXJndW1lbnRzIGZvciB0aGUgc2VsZWN0b3IgcHJvY2VzcywgaWYgcHJvdmlkZWQuIFRoZSBgZmlsZWAgbWFjcm8gdGFrZXMgdGhlIHZhbHVlIG9mIHRoZSB0YXJnZXQgZXhlYyBmaWxlIHRvIGxhdW5jaC4iLAogICAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJ0aW1lb3V0IiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJUaW1lb3V0IHBlcmlvZCBhZnRlciB3aGljaCB0byB0ZXJtaW5hdGUgJ2V4ZWNTZWxlY3RvclByb2Nlc3MgcHJvY2Vzc1xuXG5TZXRzIGhvdyBsb25nIHRvIGFsbG93IHRoZSBzZWxlY3RvciBwcm9jZXNzIHRvIHJ1biBiZWZvcmUgdGVybWluYXRpb24gKGUuZy4gJzEwcycpIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgIm91dHB1dEZpbHRlciIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiQSBmaWx0ZXIgcGF0dGVybiB0aGF0IG11c3QgbWF0Y2ggdGhlIG91dHB1dCBvZiAnZXhlY1NlbGVjdG9yUHJvY2VzcycgdG8gYXBwbHkgdGhpcyBzY2FubmVyXG5cbkRlZmluZXMgYSByZWdleCBwYXR0ZXJuIHRvIG1hdGNoIGFnYWluc3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdGRvdXQgc3RyZWFtIHJlYWQgZnJvbSB0aGUgW2V4ZWNTZWxlY3RvclByb2Nlc3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL2V4ZWN1dGFibGUvI2V4ZWNzZWxlY3RvcnByb2Nlc3MpIHByb2Nlc3MuIElmIG1hdGNoZWQsIGFwcGx5IHRoaXMgc2Nhbm5lciB0byB0aGUgaW5wdXQgZmlsZS4iCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgInByb2Nlc3MiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJQcm9jZXNzIHRvIGxhdW5jaCBmb3IgZXh0cmFjdGluZyBzeW1ib2wgdmFsdWVzXG5cbkRlZmluZXMgYSBwcm9jZXNzIHRvIGxhdW5jaCBhbmQgd2hvc2Ugc3Rkb3V0IHBpcGUgdG8gcGFyc2UgZm9yIHN5bWJvbCB2YWx1ZXMuIgogICAgICAgICAgfSwKICAgICAgICAgICJ3b3JrRGlyIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiVGhlIHBhdGggb2YgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZW4gcnVubmluZyAnZXhlY1Byb2Nlc3MnXG5cbkRlZmluZXMgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZW4gcnVubmluZyBbZXhlY1Byb2Nlc3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL2V4ZWN1dGFibGUvI2V4ZWNwcm9jZXNzKS4gSWYgb21pdHRlZCwgdXNlcyB0aGUgd29ya2luZyBkaXJlY3RvcnkuIgogICAgICAgICAgfSwKICAgICAgICAgICJhcmdzIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIGFyZ3VtZW50cyBwYXNzZWQgdG8gJ2V4ZWNQcm9jZXNzJyAoJ2ZpbGUnIGlzIHJlcGxhY2VkIGJ5IHNjYW4gdGFyZ2V0KVxuXG5EZWZpbmVzIGxhdW5jaCBhcmd1bWVudHMgW2V4ZWNQcm9jZXNzXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbm5lci9leGVjdXRhYmxlLyNleGVjcHJvY2VzcykuIFRoZSBgZmlsZWAgbWFjcm8gZXhwYW5kcyBpbnRvIHRoZSBpbnB1dCBmaWxlIHBhdGgiLAogICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAidGltZW91dCIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlRpbWVvdXQgcGVyaW9kIGFmdGVyIHdoaWNoIHRvIHRlcm1pbmF0ZSAnZXhlY1Byb2Nlc3MnIHByb2Nlc3NcblxuRGVmaW5lcyBob3cgbG9uZyBbZXhlY1Byb2Nlc3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL2V4ZWN1dGFibGUvI2V4ZWNwcm9jZXNzKSBpcyBhbGxvd2VkIHRvIHJ1biBiZWZvcmUgdGVybWluYXRpb24iCiAgICAgICAgICB9LAogICAgICAgICAgInN5bWJvbCIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6ICJvYmplY3QiLAogICAgICAgICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UsCiAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICAgICAibWluTGVuZ3RoIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICAgIm51bWJlciIsCiAgICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTWluaW1hbCBsZW5ndGggb2YgdGhlIHN0cmluZyByZWFkIGZyb20gJ2V4ZWNQcm9jZXNzJyB0byByZWFkIGFzIGEgc3ltYm9sXG5cblNldHMgdGhlIG1pbmltYWwgbGVuZ3RoIGEgc3RyaW5nIHJlYWQgZnJvbSB0aGUgc2Nhbm5lciBwcm9jZXNzIHN0ZG91dCBtdXN0IGJlIHRvIGJlIGNvbnNpZGVyZWQgYSBzeW1ib2wgKEFjY2VwdHMgbnVtYmVyIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJtYXhMZW5ndGgiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAibnVtYmVyIiwKICAgICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJNYXggbGVuZ3RoIHRoZSBzdHJpbmcgcmVhZCBmcm9tICdleGVjUHJvY2VzcycgdG8gcmVhZCBhcyBhIHN5bWJvbFxuXG5TZXRzIHRoZSBtYXhpbXVtIGxlbmd0aCBhIHN0cmluZyByZWFkIGZyb20gdGhlIHNjYW5uZXIgcHJvY2VzcyBzdGRvdXQgbXVzdCBiZSB0byBiZSBjb25zaWRlcmVkIGEgc3ltYm9sIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAiZmlsdGVycyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUGF0dGVybnMgYSBsaW5lIHJlYWQgZnJvbSAnZXhlY1Byb2Nlc3MnIG11c3QgTk9UIG1hdGNoXG5cbkRlZmluZXMgcmVnZXggcGF0dGVybnMgYXBwbGllZCB0byBlYWNoIGxpbmUgcmVhZCBmcm9tIHRoZSBzY2FubmVyIHByb2Nlc3MnIHN0ZG91dCB0aGF0IG11c3QgTk9UIG1hdGNoIGZvciB0aGUgbGluZSB2YWx1ZSB0byBiZSBjYXB0dXJlZCBhcyBhIHN5bWJvbC4gICBGb3IgZXhhbXBsZSwgdG8gYXZvaWQgW0FXQVYgYmluYXJ5XShodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zOTMyMjU1Mi9tZWFuaW5nLW9mLWEtY29tbW9uLXN0cmluZy1pbi1leGVjdXRhYmxlcykgd2hlbiB1c2luZyB0aGUgYHN0cmluZ3NgIE9TIHV0aWxpdHksIHNwZWNpZnk6ICBgYGAgeWFtbCBleGVjU3ltYm9sRmlsdGVyczogICAtICBeQVdBViAgICAgIGBgYGAiLAogICAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJzZXRTZWxlY3RvcnMiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlJlZ2V4IHBhdHRlcm5zIHRvIGRldGVybWluZXMgd2hldGhlciB0byB0cmVhdCBhbiBpbnB1dCB2YWx1ZSBhcyBzZXQgb2YgdG9rZW5zXG5cbkRlZmluZXMgcmVnZXggcGF0dGVybnMgbXVzdCBBTEwgbWF0YyB0byB0cmVhdCBhbiBpbnB1dCB2YWx1ZSBhcyBhIGxpbmUgKGUuZy4sICdlcnJvciBjb25uZWN0aW5nIHRvIHt9JyksIG9yIGFzIGEgc2VyaWVzIG9mIGluZGVwZW5kZW50IHRva2VucyAoZS5nLiwgJ2Vycm9yJywgJ2Nvbm5lY3RpbmcnLCAndG8nKSB0byByZWR1Y2UgdGhlIGNhcmRpbmFsaXR5IGFuZCBzaXplIG9mIHRoZSBvdXRwdXQgc3ltYm9sIGZpbGUuICAgRm9yIGV4YW1wbGUsIHdoZW4gcHJvY2Vzc2luZyBmaWxlcyB0aGF0IGNvbnRhaW4gdmFsdWVzIEdPIGNvbXBpbGUgc3ltYm9scyBzdWNoIGFzOiAgIGBgYCBnaXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktY29sbGVjdG9yLWNvbnRyaWIvZXhwb3J0ZXIvZmlsZWV4cG9ydGVyLmdyb3VwW2dvLnNoYXBlLnN0cnVjdCBgYGAgIFNwZWNpZnkgdGhlIHBhdHRlcm4gYmVsb3cgdG8gYnJlYWsgdGhlIHN0cmluZyBpbnRvIHNlcGFyYXRlIHN5bWJvbCB0b2tlbnMgKGUuZy4sIHNoYXBlLCBzdHJ1Y3QsLi4pOiAgIGBgYCB5YW1sIHNldFNlbGVjdG9yczogIC0gXig/OmdpdGh1YlxcLmNvbXxnb2xhbmdcXC5vcmd8dHlwZTpcXC5lcVxcLig/OmdpdGh1YlxcLmNvbXxnb2xhbmdcXC5vcmcpKSgvW2EtekEtWjAtOV8tXSspKiQgLSBeW2EtekEtWjAtOV8vOlxcLlxcW1xcXVxcKiwtXSooPzpcXC5bYS16QS1aMC05XSt8XFxbW2EtekEtWjAtOSxcXC5cXCovOl8tXStcXF18LWZtKT8kIGBgYCIsCiAgICAgICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpc1N0cnVjdHVyZWQiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJTZXRzIHdoZXRoZXIgb3V0cHV0IGxpbmVzIHJlYWQgZnJvbSAnZXhlY1Byb2Nlc3MnIGFyZSByZWFkIGFzIHBsYWluIHRleHQgb3Igc3RydWN0dXJlZCBKU09OXG5cbkNvbnRyb2xzIHdoZXRoZXIgdG8gcmVhZCB0aGUgW2V4ZWNQcm9jZXNzXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbm5lci9leGVjdXRhYmxlLyNleGVjcHJvY2Vzcykgc3Rkb3V0IGFzIHBsYWluIHRleHQgb3IgYXMgYSBKU09OIG9iamVjdCBjb250YWluaW5nIHNvdXJjZSBjb250ZXh0IGluZm9ybWF0aW9uLiBJZiBmYWxzZSAoZGVmYXVsdCksIHN5bWJvbCB2YWx1ZXMgcmVhZCBmcm9tIHRoZSBwcm9jZXNzJyBvdXRwdXQgYXJlIG1hcmtlZCBhcyBoYXZpbmcgYW4gW2V4ZWNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI2V4ZWMpIGNvbnRleHQuIFRvIGxlYXJuIG1vcmUgYWJvdXQgcHJvZHVjaW5nIHN0cnVjdHVyZWQgc3ltYm9sIHZhbHVlcywgc2VlIFtTeW1ib2xVbml0LmphdmFdKGh0dHBzOi8vZ2l0aHViLmNvbS9sb2ctMTB4L3BpcGVsaW5lLWV4dGVuc2lvbnMvYmxvYi9tYWluL2Nsb3VkLWV4dGVuc2lvbnMvc3JjL21haW4vamF2YS9jb20vbG9nMTB4L2V4dC9jbG91ZC9jb21waWxlL3N5bWJvbC9TeW1ib2xVbml0LmphdmEpIgogICAgICAgICAgfSwKICAgICAgICAgICJzeW1ib2xzUHJlZml4IiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJib29sZWFuIiwKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkEgcHJlZml4IGxpbmVzIHJlYWQgZnJvbSAnZXhlY1Byb2Nlc3MnIG11c3QgbWF0Y2ggdG8gcGFyc2UgYXMgc3RydWN0dXJlZCBKU09OIHN5bWJvbHNcblxuU2V0cyBhIHByZWZpeCB0aGF0IG11c3QgcHJlY2VkZSBsaW5lcyByZWFkIGZyb20gdGhlIHNjYW4gcHJvY2Vzcycgc3Rkb3V0IHRvIHBhcnNlIGFzIHN0cnVjdHVyZWQgSlNPTiBzeW1ib2wgdHJlZXMuIE9ubHkgYXBwbGllcyB3aGVuIFtleGVjSXNTdHJ1Y3R1cmVkXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbm5lci9leGVjdXRhYmxlLyNleGVjaXNzdHJ1Y3R1cmVkKSBpcyB0cnVlIChBY2NlcHRzIGJvb2xlYW4gb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmVkIiA6IFsKICAgICAgICAgICJuYW1lIiwKICAgICAgICAgICJvc0ZpbHRlciIKICAgICAgICBdCiAgICAgIH0KICAgIH0KICB9LAogICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZQp9
# # 🔟❎ 'compile' executable 'strings' configuration
# This executable symbol scanner configuration uses OS-specific utilities to extract
# constant string values from pre-compiled binaries (e.g. programs, shared libraries).
# Any matching text values are added to the output symbol files.
# The following configuration is added by default to the 10x 'compile' pipeline.
# If another 'executable' scanner is defined whose 'osFilter' matches that of the
# current target input file, it will take precedence over the scanners defined below.
# To learn more about the 'executable' scanner,
# see: https://doc.log10x.com/compile/scanner/executable
# Set the 10x pipeline to 'compile'
tenx: compile
# =============================== Exec Options ================================
exec:
# This scanner uses the Linux built-in 'strings' (https://linux.die.net/man/1/file)
# command to extract symbol values from a target binary executable file
- name: stringsNIX
# This configuration targets NIX OSs
osFilter: (nix|nux|lux|mac)
# try for known extensions before invoking a 'selectorProcess'
extensions:
- .so
- .dynlib
# 'selector' processes provide a method for determining whether a file is an executable binary.
# If a selector process is not provided the file's ELF/PE/OSX binary header is tested.
# Since on NIX, executables do not have a known extension,
# the 'selector' process uses the built-in 'file' command whose
# output is used to verify the target file is a NIX executable file.
selector:
process: file
args:
- file # this macro value is replaced at run-time by the actual input file name
timeout: 5s
outputFilter: ".*?\\bexecutable\\b.*?" # select 'executable' files
process: strings
args:
- -a # scan the whole file, not just initialized and loaded sections
- file # This macro value is replaced at run-time by the actual text/binary input file
timeout: 100s
symbol:
# 'minLength' specifies the min number of chars a value extracted via strings must be to
# in order to qualify as a symbol.
minLength: 4
# 'maxLength' specifies the max number of chars a value extracted via strings must be to
# in order to qualify as a symbol.
maxLength: 1024
# 'filters' defines regex patterns applied to each line read from the scanner process' stdout
# that must NOT match for the line value to be considered a symbol.
filters:
- AWAV. # https://stackoverflow.com/questions/39322552/meaning-of-a-common-string-in-executables
- "^(?=^.{0,7}$)(?=.*[^a-zA-Z]).*$" # Matches any string that is shorter than 8 characters (0 to 7 chars) and contains at least one non-alphabetic character.
# 'setSelector' specifies regex patterns that determines whether to treat an input value as set of tokens
setSelectors:
- '^[0-9].*$' # Starts with digit
- '^\*.*$' # Starts with *
- '^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}(?:/[^\s]*)?$' # Domain + optional path (e.g., github.com/user/repo)
- '^type:\\..*$' # Go land metadata starts with "type:." (any suffix)
Strings-win
Configure Executable scanners to launch a target process from which to read symbol values via its stdout.
Below is the default configuration from: executable/strings-win.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiZXhlYyIgOiB7CiAgICAgICJ0eXBlIiA6ICJhcnJheSIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICJuYW1lIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiQSBsb2dpY2FsIG5hbWUgZm9yIHRoaXMgZXhlYyBzY2FubmVyXG5cbkEgbG9naWNhbCBuYW1lIGZvciB0aGlzIGV4ZWMgc2Nhbm5lciB1bmlxdWUgYW1vbmdzdCBhbGwgc3BlY2lmaWVkIHNjYW5uZXIgb3B0aW9uIGdyb3VwcyAoZS5nLiwgJ3N0cmluZ3NOSVgnKSIKICAgICAgICAgIH0sCiAgICAgICAgICAib3NGaWx0ZXIiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIHBhdHRlcm4gdGhhdCBtdXN0IG1hdGNoIHRoZSBuYW1lIG9mIHRoZSBob3N0IE9TIHRvIGFwcGx5IHRoaXMgc2Nhbm5lci5cblxuRGVmaW5lcyBhIHBhdHRlcm4gdG8gbWF0Y2ggYWdhaW5zdCB0aGUgbmFtZSBvZiB0aGUgaG9zdCBPUyB0byBkZXRlcm1pbmUgd2hldGhlciB0byBhcHBseSB0aGlzIHNjYW5uZXIuIgogICAgICAgICAgfSwKICAgICAgICAgICJleHRlbnNpb25zIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIGxpc3Qgb2YgZmlsZSBleHRlbnNpb25zIGEgdGFyZ2V0IGZpbGUgbXVzdCBtYXRjaCB0byBhcHBseSB0aGlzIHNjYW5uZXJcblxuQW4gYXJyYXkgb2YgZmlsZSBleHRlbnNpb25zIHRvIHRlc3QgYSBmaWxlIGNhbmRpZGF0ZSBhZ2FpbnN0LiBJZiB0aGUgY2FuZGlkYXRlIG1hdGNoZXMgYW55IGV4dGVuc2lvbnMsIGFwcGx5IHRoaXMgc2Nhbm5lci4iLAogICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiZmlsZU5hbWVGaWx0ZXIiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIHBhdHRlcm4gdGhhdCB0aGUgdGFyZ2V0IGlucHV0IGZpbGUgbXVzdCBtYXRjaCB0byBhcHBseSB0aGlzIHNjYW5uZXJcblxuU2V0cyBhIHJlZ2V4IHBhdHRlcm4gdG8gdGVzdCBhIGZpbGUgY2FuZGlkYXRlIG5hbWUgYWdhaW5zdC4gSWYgdGhlIGNhbmRpZGF0ZSBtYXRjaGVzIGFueSBvZiB0aGUgZXh0ZW5zaW9ucywgYXBwbHkgdGhpcyBzY2FubmVyLiIKICAgICAgICAgIH0sCiAgICAgICAgICAic2VsZWN0b3IiIDogewogICAgICAgICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgICAgICAgInByb2Nlc3MiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk5hbWUgb2YgYSBwcm9jZXNzIHRvIGxhdW5jaCB3aG9zZSBvdXRwdXQgd2hldGhlciB0byBhcHBseSB0aGlzIGlucHV0XG5cbkRlZmluZSBhIHByb2Nlc3MgbmFtZSB0byBsYXVuY2ggdG8gb2J0YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbnB1dCBmaWxlLiBJbiBzb21lIE9TcyAoZS5nLiwgTGludXgvVW5peCksIGV4ZWN1dGFibGUgZmlsZXMgZG8gbm90IG5lY2Vzc2FyaWx5IGhhdmUgYSBrbm93biBleHRlbnNpb24uIEZvciB0aGlzLCBhbiBPUyB1dGlsaXR5IHN1Y2ggYXMgTklYIFtmaWxlXShodHRwczovL21hbjcub3JnL2xpbnV4L21hbi1wYWdlcy9tYW4xL2ZpbGUuMS5odG1sKSBjYW4gb2J0YWluIGluZm9ybWF0aW9uIG9uIHRoZSBhY3R1YWwgZmlsZSBjb250ZW50cy4gIElmIGEgc2VsZWN0b3IgcHJvY2VzcyBpcyBub3QgcHJvdmlkZWQgdGhlIGZpbGUncyBFTEYvUEUvT1NYIGJpbmFyeSBoZWFkZXIgaXMgdGVzdGVkIGZvciBhIHBvc3NpYmxlIG1hdGNoLiIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJ3b3JrRGlyIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJUaGUgcGF0aCBvZiB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlbiBydW5uaW5nICdleGVjU2VsZWN0b3JQcm9jZXNzJ1xuXG5EZWZpbmVzIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVuIHJ1bm5pbmcgW2V4ZWNTZWxlY3RvclByb2Nlc3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL2V4ZWN1dGFibGUvI2V4ZWNzZWxlY3RvcnByb2Nlc3MpLiBJZiBvbWl0dGVkLCB3aWxsIHVzZSB0aGUgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LiIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJhcmdzIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIGFyZ3VtZW50cyBwYXNzZWQgdG8gJ2V4ZWNTZWxlY3RvclByb2Nlc3MnXG5cbkRlZmluZXMgYXJndW1lbnRzIGZvciB0aGUgc2VsZWN0b3IgcHJvY2VzcywgaWYgcHJvdmlkZWQuIFRoZSBgZmlsZWAgbWFjcm8gdGFrZXMgdGhlIHZhbHVlIG9mIHRoZSB0YXJnZXQgZXhlYyBmaWxlIHRvIGxhdW5jaC4iLAogICAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJ0aW1lb3V0IiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJUaW1lb3V0IHBlcmlvZCBhZnRlciB3aGljaCB0byB0ZXJtaW5hdGUgJ2V4ZWNTZWxlY3RvclByb2Nlc3MgcHJvY2Vzc1xuXG5TZXRzIGhvdyBsb25nIHRvIGFsbG93IHRoZSBzZWxlY3RvciBwcm9jZXNzIHRvIHJ1biBiZWZvcmUgdGVybWluYXRpb24gKGUuZy4gJzEwcycpIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgIm91dHB1dEZpbHRlciIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiQSBmaWx0ZXIgcGF0dGVybiB0aGF0IG11c3QgbWF0Y2ggdGhlIG91dHB1dCBvZiAnZXhlY1NlbGVjdG9yUHJvY2VzcycgdG8gYXBwbHkgdGhpcyBzY2FubmVyXG5cbkRlZmluZXMgYSByZWdleCBwYXR0ZXJuIHRvIG1hdGNoIGFnYWluc3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdGRvdXQgc3RyZWFtIHJlYWQgZnJvbSB0aGUgW2V4ZWNTZWxlY3RvclByb2Nlc3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL2V4ZWN1dGFibGUvI2V4ZWNzZWxlY3RvcnByb2Nlc3MpIHByb2Nlc3MuIElmIG1hdGNoZWQsIGFwcGx5IHRoaXMgc2Nhbm5lciB0byB0aGUgaW5wdXQgZmlsZS4iCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgInByb2Nlc3MiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJQcm9jZXNzIHRvIGxhdW5jaCBmb3IgZXh0cmFjdGluZyBzeW1ib2wgdmFsdWVzXG5cbkRlZmluZXMgYSBwcm9jZXNzIHRvIGxhdW5jaCBhbmQgd2hvc2Ugc3Rkb3V0IHBpcGUgdG8gcGFyc2UgZm9yIHN5bWJvbCB2YWx1ZXMuIgogICAgICAgICAgfSwKICAgICAgICAgICJ3b3JrRGlyIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiVGhlIHBhdGggb2YgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZW4gcnVubmluZyAnZXhlY1Byb2Nlc3MnXG5cbkRlZmluZXMgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZW4gcnVubmluZyBbZXhlY1Byb2Nlc3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL2V4ZWN1dGFibGUvI2V4ZWNwcm9jZXNzKS4gSWYgb21pdHRlZCwgdXNlcyB0aGUgd29ya2luZyBkaXJlY3RvcnkuIgogICAgICAgICAgfSwKICAgICAgICAgICJhcmdzIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIGFyZ3VtZW50cyBwYXNzZWQgdG8gJ2V4ZWNQcm9jZXNzJyAoJ2ZpbGUnIGlzIHJlcGxhY2VkIGJ5IHNjYW4gdGFyZ2V0KVxuXG5EZWZpbmVzIGxhdW5jaCBhcmd1bWVudHMgW2V4ZWNQcm9jZXNzXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbm5lci9leGVjdXRhYmxlLyNleGVjcHJvY2VzcykuIFRoZSBgZmlsZWAgbWFjcm8gZXhwYW5kcyBpbnRvIHRoZSBpbnB1dCBmaWxlIHBhdGgiLAogICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAidGltZW91dCIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlRpbWVvdXQgcGVyaW9kIGFmdGVyIHdoaWNoIHRvIHRlcm1pbmF0ZSAnZXhlY1Byb2Nlc3MnIHByb2Nlc3NcblxuRGVmaW5lcyBob3cgbG9uZyBbZXhlY1Byb2Nlc3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL2V4ZWN1dGFibGUvI2V4ZWNwcm9jZXNzKSBpcyBhbGxvd2VkIHRvIHJ1biBiZWZvcmUgdGVybWluYXRpb24iCiAgICAgICAgICB9LAogICAgICAgICAgInN5bWJvbCIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6ICJvYmplY3QiLAogICAgICAgICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UsCiAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICAgICAibWluTGVuZ3RoIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICAgIm51bWJlciIsCiAgICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTWluaW1hbCBsZW5ndGggb2YgdGhlIHN0cmluZyByZWFkIGZyb20gJ2V4ZWNQcm9jZXNzJyB0byByZWFkIGFzIGEgc3ltYm9sXG5cblNldHMgdGhlIG1pbmltYWwgbGVuZ3RoIGEgc3RyaW5nIHJlYWQgZnJvbSB0aGUgc2Nhbm5lciBwcm9jZXNzIHN0ZG91dCBtdXN0IGJlIHRvIGJlIGNvbnNpZGVyZWQgYSBzeW1ib2wgKEFjY2VwdHMgbnVtYmVyIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJtYXhMZW5ndGgiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAibnVtYmVyIiwKICAgICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJNYXggbGVuZ3RoIHRoZSBzdHJpbmcgcmVhZCBmcm9tICdleGVjUHJvY2VzcycgdG8gcmVhZCBhcyBhIHN5bWJvbFxuXG5TZXRzIHRoZSBtYXhpbXVtIGxlbmd0aCBhIHN0cmluZyByZWFkIGZyb20gdGhlIHNjYW5uZXIgcHJvY2VzcyBzdGRvdXQgbXVzdCBiZSB0byBiZSBjb25zaWRlcmVkIGEgc3ltYm9sIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAiZmlsdGVycyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUGF0dGVybnMgYSBsaW5lIHJlYWQgZnJvbSAnZXhlY1Byb2Nlc3MnIG11c3QgTk9UIG1hdGNoXG5cbkRlZmluZXMgcmVnZXggcGF0dGVybnMgYXBwbGllZCB0byBlYWNoIGxpbmUgcmVhZCBmcm9tIHRoZSBzY2FubmVyIHByb2Nlc3MnIHN0ZG91dCB0aGF0IG11c3QgTk9UIG1hdGNoIGZvciB0aGUgbGluZSB2YWx1ZSB0byBiZSBjYXB0dXJlZCBhcyBhIHN5bWJvbC4gICBGb3IgZXhhbXBsZSwgdG8gYXZvaWQgW0FXQVYgYmluYXJ5XShodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zOTMyMjU1Mi9tZWFuaW5nLW9mLWEtY29tbW9uLXN0cmluZy1pbi1leGVjdXRhYmxlcykgd2hlbiB1c2luZyB0aGUgYHN0cmluZ3NgIE9TIHV0aWxpdHksIHNwZWNpZnk6ICBgYGAgeWFtbCBleGVjU3ltYm9sRmlsdGVyczogICAtICBeQVdBViAgICAgIGBgYGAiLAogICAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJzZXRTZWxlY3RvcnMiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlJlZ2V4IHBhdHRlcm5zIHRvIGRldGVybWluZXMgd2hldGhlciB0byB0cmVhdCBhbiBpbnB1dCB2YWx1ZSBhcyBzZXQgb2YgdG9rZW5zXG5cbkRlZmluZXMgcmVnZXggcGF0dGVybnMgbXVzdCBBTEwgbWF0YyB0byB0cmVhdCBhbiBpbnB1dCB2YWx1ZSBhcyBhIGxpbmUgKGUuZy4sICdlcnJvciBjb25uZWN0aW5nIHRvIHt9JyksIG9yIGFzIGEgc2VyaWVzIG9mIGluZGVwZW5kZW50IHRva2VucyAoZS5nLiwgJ2Vycm9yJywgJ2Nvbm5lY3RpbmcnLCAndG8nKSB0byByZWR1Y2UgdGhlIGNhcmRpbmFsaXR5IGFuZCBzaXplIG9mIHRoZSBvdXRwdXQgc3ltYm9sIGZpbGUuICAgRm9yIGV4YW1wbGUsIHdoZW4gcHJvY2Vzc2luZyBmaWxlcyB0aGF0IGNvbnRhaW4gdmFsdWVzIEdPIGNvbXBpbGUgc3ltYm9scyBzdWNoIGFzOiAgIGBgYCBnaXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktY29sbGVjdG9yLWNvbnRyaWIvZXhwb3J0ZXIvZmlsZWV4cG9ydGVyLmdyb3VwW2dvLnNoYXBlLnN0cnVjdCBgYGAgIFNwZWNpZnkgdGhlIHBhdHRlcm4gYmVsb3cgdG8gYnJlYWsgdGhlIHN0cmluZyBpbnRvIHNlcGFyYXRlIHN5bWJvbCB0b2tlbnMgKGUuZy4sIHNoYXBlLCBzdHJ1Y3QsLi4pOiAgIGBgYCB5YW1sIHNldFNlbGVjdG9yczogIC0gXig/OmdpdGh1YlxcLmNvbXxnb2xhbmdcXC5vcmd8dHlwZTpcXC5lcVxcLig/OmdpdGh1YlxcLmNvbXxnb2xhbmdcXC5vcmcpKSgvW2EtekEtWjAtOV8tXSspKiQgLSBeW2EtekEtWjAtOV8vOlxcLlxcW1xcXVxcKiwtXSooPzpcXC5bYS16QS1aMC05XSt8XFxbW2EtekEtWjAtOSxcXC5cXCovOl8tXStcXF18LWZtKT8kIGBgYCIsCiAgICAgICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpc1N0cnVjdHVyZWQiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJTZXRzIHdoZXRoZXIgb3V0cHV0IGxpbmVzIHJlYWQgZnJvbSAnZXhlY1Byb2Nlc3MnIGFyZSByZWFkIGFzIHBsYWluIHRleHQgb3Igc3RydWN0dXJlZCBKU09OXG5cbkNvbnRyb2xzIHdoZXRoZXIgdG8gcmVhZCB0aGUgW2V4ZWNQcm9jZXNzXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbm5lci9leGVjdXRhYmxlLyNleGVjcHJvY2Vzcykgc3Rkb3V0IGFzIHBsYWluIHRleHQgb3IgYXMgYSBKU09OIG9iamVjdCBjb250YWluaW5nIHNvdXJjZSBjb250ZXh0IGluZm9ybWF0aW9uLiBJZiBmYWxzZSAoZGVmYXVsdCksIHN5bWJvbCB2YWx1ZXMgcmVhZCBmcm9tIHRoZSBwcm9jZXNzJyBvdXRwdXQgYXJlIG1hcmtlZCBhcyBoYXZpbmcgYW4gW2V4ZWNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI2V4ZWMpIGNvbnRleHQuIFRvIGxlYXJuIG1vcmUgYWJvdXQgcHJvZHVjaW5nIHN0cnVjdHVyZWQgc3ltYm9sIHZhbHVlcywgc2VlIFtTeW1ib2xVbml0LmphdmFdKGh0dHBzOi8vZ2l0aHViLmNvbS9sb2ctMTB4L3BpcGVsaW5lLWV4dGVuc2lvbnMvYmxvYi9tYWluL2Nsb3VkLWV4dGVuc2lvbnMvc3JjL21haW4vamF2YS9jb20vbG9nMTB4L2V4dC9jbG91ZC9jb21waWxlL3N5bWJvbC9TeW1ib2xVbml0LmphdmEpIgogICAgICAgICAgfSwKICAgICAgICAgICJzeW1ib2xzUHJlZml4IiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJib29sZWFuIiwKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkEgcHJlZml4IGxpbmVzIHJlYWQgZnJvbSAnZXhlY1Byb2Nlc3MnIG11c3QgbWF0Y2ggdG8gcGFyc2UgYXMgc3RydWN0dXJlZCBKU09OIHN5bWJvbHNcblxuU2V0cyBhIHByZWZpeCB0aGF0IG11c3QgcHJlY2VkZSBsaW5lcyByZWFkIGZyb20gdGhlIHNjYW4gcHJvY2Vzcycgc3Rkb3V0IHRvIHBhcnNlIGFzIHN0cnVjdHVyZWQgSlNPTiBzeW1ib2wgdHJlZXMuIE9ubHkgYXBwbGllcyB3aGVuIFtleGVjSXNTdHJ1Y3R1cmVkXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbm5lci9leGVjdXRhYmxlLyNleGVjaXNzdHJ1Y3R1cmVkKSBpcyB0cnVlIChBY2NlcHRzIGJvb2xlYW4gb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmVkIiA6IFsKICAgICAgICAgICJuYW1lIiwKICAgICAgICAgICJvc0ZpbHRlciIKICAgICAgICBdCiAgICAgIH0KICAgIH0KICB9LAogICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZQp9
# # 🔟❎ 'compile' executable 'strings' configuration
# This executable symbol scanner configuration uses OS-specific utilities to extract
# constant string values from pre-compiled binaries (e.g. programs, shared libraries).
# Any matching text values are added to the output symbol files.
# The following configuration is added by default to the 10x 'compile' pipeline.
# If another 'executable' scanner is defined whose 'osFilter' matches that of the
# current target input file, it will take precedence over the scanners defined below.
# To learn more about the 'executable' scanner,
# see: https://doc.log10x.com/compile/scanner/executable/
# Set the 10x pipeline to 'compile'
tenx: compile
# =============================== Exec Options ================================
exec:
# This configuration provides a similar capability for scanning Windows executable files.
# *IMPORTANT*: On Windows, the 'strings' command is not installed by default and
# should be downloaded from: https://docs.microsoft.com/en-us/sysinternals/downloads/strings
# and added to 'PATH'
- name: stringsWin
# target Win
osFilter: win
extensions:
- .so
- .dll
process: strings
args:
- file # This macro value is replaced at run-time by the actual input file name
timeout: 10s
This app is defined in compiler/app.yaml.