{"id":17877139,"url":"https://github.com/herrjulz/aviator","last_synced_at":"2025-10-12T00:36:55.669Z","repository":{"id":43324492,"uuid":"85934853","full_name":"herrjulz/aviator","owner":"herrjulz","description":"Merge YAML/JSON files in a in a convenient fashion based on a configuration file called aviator.yml","archived":false,"fork":false,"pushed_at":"2023-02-14T16:25:23.000Z","size":7685,"stargazers_count":60,"open_issues_count":8,"forks_count":8,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-18T07:51:46.146Z","etag":null,"topics":["concourse","fly","go","json","lang","merge","spruce","tool","wrapper","yaml"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/herrjulz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-03-23T10:06:23.000Z","updated_at":"2024-10-02T11:07:50.000Z","dependencies_parsed_at":"2024-06-19T00:03:13.274Z","dependency_job_id":"f21f4de5-a668-475f-beb8-d23569ec3308","html_url":"https://github.com/herrjulz/aviator","commit_stats":null,"previous_names":["julzdiverse/aviator"],"tags_count":30,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/herrjulz%2Faviator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/herrjulz%2Faviator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/herrjulz%2Faviator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/herrjulz%2Faviator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/herrjulz","download_url":"https://codeload.github.com/herrjulz/aviator/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244907420,"owners_count":20529850,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["concourse","fly","go","json","lang","merge","spruce","tool","wrapper","yaml"],"created_at":"2024-10-28T11:45:25.605Z","updated_at":"2025-10-12T00:36:50.611Z","avatar_url":"https://github.com/herrjulz.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Aviator\n\n[![GoDoc](https://godoc.org/github.com/JulzDiverse/aviator/cockpit?status.svg)](https://godoc.org/github.com/JulzDiverse/aviator/cockpit)\n\nAviator is a tool to template \u0026 merge YAML files in a convenient fashion based on a configuration file called `aviator.yml`. Aviator utilizes [Spruce](https://github.com/geofffranks/spruce) for templating and merging and therefore enables you to use all the Spruce operators in your YAML files.\n\nIf you have to handle rather complex YAML files (for Kubernetes, Concourse, or Bosh), you just provide the flight plan (`aviator.yml`), the Aviator flies you there.\n\n**Reads:**\n\n- [Using Aviator for Concourse Pipelines](https://medium.com/@julian.skupnjak/create-a-concourse-pipeline-for-your-cloud-foundry-apps-with-ease-98ceaa055be7)\n- [Using Aviator as a alternitive to Helm](https://medium.com/@julian.skupnjak/an-alternative-to-helm-aviator-7099d50f2d28)\n\n\n## Installation\n\n### OS X\n\n```\n$ wget -O /usr/local/bin/aviator https://github.com/JulzDiverse/aviator/releases/download/v1.9.0/aviator-darwin-amd64 \u0026\u0026 chmod +x /usr/local/bin/aviator\n```\n\n**Via Homebrew**\n\n```\n$ brew tap julzdiverse/tools  \n$ brew install aviator\n```\n\n### Linux\n\n```\n$ wget -O /usr/bin/aviator https://github.com/JulzDiverse/aviator/releases/download/v1.9.0/aviator-linux-amd64 \u0026\u0026 chmod +x /usr/bin/aviator\n```\n\n### Windows (NOT TESTED)\n\n```\nhttps://github.com/JulzDiverse/aviator/releases/download/v1.9.0/aviator-win\n```\n\n## Usage\n\nTo run Aviator navigate to a directory that contains an `aviator.yml` and run:\n\n```\n$ aviator\n```\n\nOR\n\nSpecify an AVIATOR YAML file  with the [--file|-f] option:\n\n```\n$ aviator -f myAviatorFile.yml\n```\n\n## Configure an `aviator.yml`\n\n- [Configure an `aviator.yml`](#configure-an-aviatoryml)\n\t- [Spruce Section](#spruce-section)\n\t\t- [Base (`string`)](#base-string)\n\t\t- [Prune (`Array`)](#prune-array)\n\t\t- [cherry_pick (`array`)](#cherrypick-array)\n\t\t- [go_patch (`bool`)](#gopatch-bool)\n\t\t- [Merge (`Array`)](#merge-array)\n\t\t- [skip_eval (`bool`)](#skipeval-bool)\n\t\t- [To (`string`)](#to-string)\n\t\t- [ForEach](#foreach)\n\t\t- [Read From and Write To Internal Data Store](#read-from-and-write-to-internal-datastore)\n\t\t- [Environment Variables](#environment-variables)\n\t\t- [Variables](#variables)\n\t\t- [Modifier](#modifier)\n\t- [Squash Section](#squash-section)\n\t\t- [Squashing specific files](#squashing-specific-files)\n\t\t- [Squash files from a directory](#squash-files-from-a-directory)\n\t- [Executors](#executors)\n\t\t- [The `kubectl` executor](#kubectl-executor)\n\t\t- [The `fly` executor](#fly-executor)\n\t\t- [The Generic Executor](#generic-executor)\n\t- [CLI Options](#cli-options)\n\t\t- [`--curly-braces`](#--curly-braces)\n\t\t- [`--silent`](#--silent)\n\t\t- [`--verbose`](#--verbose)\n\t\t- [`--dry-run`](#--dry-run)\n\t\t- [`--var`](#--var)\n- [Development](#development)\n\nAviator provides a verbose style of configuration. It is the result of configuring a spruce merge plan and optionally an execution plan (e.g `fly`).\n\nExample for a simple aviator file:\n\n```yaml\nspruce:\n- base: path/to/base.yml\n  merge:\n  - with:\n      files:\n      - top.yml\n  to: result.yml\n```\n\n### Spruce Section\n\nThe `spruce` section is an array of merge steps. It provides different parameters to provide high flexibility when merging YAML files. You can:\n\n- specify specific files to include into your merge\n- specify a specific directory to include into your merge\n- specify a specific directory including all subdirectories to include into your merge\n\nHowever, this is not enough. Additionally you can use *regular expressions*, *environment-variables*, and more. Read about all parameters and what they do in this section.\n\n#### Base (`string`)\n\nThe `base` property specifies the path to the base YAML file. All other YAML files will be merged on top of this YAML file.\n\n---\n\n#### Prune (`Array`)\n\n`prune` defines YAML properties which will be pruned during the merge. For more information check the `spruce` [merge semantics](https://github.com/geofffranks/spruce/blob/master/doc/merging.md#order-of-operations).\n\nExample:\n\n```yaml\nspruce:\n- base: base.yml\n  prune:\n  - meta\n  - properties\n  merge:\n  - with:\n      files:\n      - top.yml\n  to: result.yml\n```\n\nIn this case `meta` and `properties` will be pruned during merge.\n\n#### cherry_pick (`array`)\n\nEnables [Spruce](https://github.com/geofffranks/spruce/blob/master/doc/merging.md#order-of-operations) `cherry pick` option: With the `cherry_pick` property you can specify specific YAML subtrees you want to have in your restulting YAML file (opposite of `prune`)  \n\nExample:\n\n```yaml\nspruce:\n- base: path/to/base.yml\n  cherry_pick:\n  - properties\n  merge:\n  - with_in: path/to/dir/\n  - with:\n      files:\n      - top.yml\n  regexp: \".*.(yml)\"\n  skip_eval: true\n  to: result.yml\n```\n---\n\n#### go_patch (`bool`)\n\nTo use spruce in conjuction with the `go-patch` format it can be enabled within the aviator `spruce` section as a toplevel bool property:\n\n```\nspruce:\n- base: some.yml\n   go_patch: true\n   merge:\n   - with:\n        files:\n        - some/ops/file.yml\n   to: result.yml\n```\n\nRead more about it [here](https://github.com/geofffranks/spruce/blob/master/doc/merging-go-patch-files.md)\n\n---\n\n#### Merge (`Array`)\n\nYou can configure three different merge types inside the `merge` section: `with`, `with_in`, `with_all_in`:\n\n**with**\n\n`with` specifies specific files you want to include into the merge.\n\n- `files` (required): List of paths to YAML files\n\n- `in_dir` (optional): If all of the files you want to include into the merge are in one specific directory, you can specify the directoyr path and list only file names in the `files` list. _Note: Whenever a directory is defined, the path requires a trailing \"/\"!!!_\n\n- `skip_non_existing` (optional): Setting this property to `true` will skip non existing files that are specified in the `files` list rather then returning an error. This is useful, if a file is not necessarely there.\n\nExample:\n\n```yaml\nspruce:\n- base: path/to/base.yml\n  merge:\n  - with:\n      files:\n      - top.yml\n      - top2.yml\n      - top3.yml\n    in_dir: path/to/\n    skip_non_existing: true\n  to: result.yml\n```\n\n**with_in** (`string`)\n\n`with_in` specifies a path (do not forget the trailing \"/\") to a directory. All files  within this directory (but not subdirectories) will be included in the merge.\n\nExample:\n\n```yaml\nspruce:\n- base: path/to/base.yml\n  merge:\n  - with_in: path/to/dir/\n  to: result.yml\n```\n\n`except` (`array`)\n\nWith `except` you can specify a list of files you want to exclude from the path specified in `with_in`\n\nExample:\n\n```yaml\nspruce:\n- base: path/to/base.yml\n  merge:\n  - with_in: path/to/dir/\n    except:\n    - file1\n    - file2\n  to: result.yml\n```\n\nThis will exclude `path/to/dir/file1` and `path/to/dir/file2` from the merge.\n\n\n**with_all_in**\n\n`with_all_in` specifies a path (do not forget the trailing \"/\") to a directory. All files within this directory -including all subdirectories - will be included in the merge.\n\nExample:\n\n```yaml\nspruce:\n- base: path/to/base.yml\n  merge:\n  - with_all_in: path/to/dir/\n    except:\n    - someFiles.yml\n    - youWant.yml\n    - toExclude.yml\n  to: result.yml\n```\n\n*NOTE: `except` also works for `with_all_in`*\n\n**regexp** (`string`(quoted))\n\nOnly files matching the regular expression will be included in the merge. It can be specified for all three merge types `with`, `with_in`, and `with_all_in`. This could be required if the target directory contains other then only YAML files.\n\nExample:\n\n```yaml\nspruce:\n- base: path/to/base.yml\n  merge:\n  - with_in: path/to/dir/\n    regexp: \".*.(yml)\"\n  - with:\n      files:\n      - top.yml\n    regexp: \".*.(yml)\"\n  - with_all_in: path/to/another/dir/\n    regexp: \".*.(yml)\"\n  to: result.yml\n```\n\n---\n\n#### skip_eval (`bool`)\n\nEnabling this skip-eval will merge without resolve spruce expressions. For more information check [Spruce doc](https://github.com/geofffranks/spruce/blob/master/doc/merging.md#order-of-operations)\n\nExample:\n\n```yaml\nspruce:\n- base: path/to/base.yml\n  merge:\n  - with_in: path/to/dir/\n  - with:\n      files:\n      - top.yml\n  regexp: \".*.(yml)\"\n  skip_eval: true\n  to: result.yml\n```\n\n---\n#### To (`string`)\n\n\n`to` specifies the target file, where the merged files should be saved to. It can be used only in combination with the basic merge types `files`, `with_in`, and `with_all_in`.\n\n---\n\n#### ForEach\n\nOn top of the basic `merge` you can do more complex merges with `for_each`. More precisely, you can execute the basic `merge` for multiple files specified in `for_each`. When specifying files with `for_each` you need to use `to_dir` instead of `to` to specify a target directory instead of a target file.    \n\n**files**\n\n`files` specifies a list of files that will be included in your merge seperately.\n\nExample:\n\n```yaml\nspruce:\n- base: path/to/base.yml\n  merge:\n  - with:\n      files:\n      - top.yml\n    regexp: \".*.(yml)\"\n  for_each:\n    files:\n    - env.yml\n    - env2.yml\n  to_dir: results/\n```\n\nThis merge step will execute two merges and generate two files. It will merge `base.yml` and `top.yml` with `env.yml`, write it to `results/` and do the same with `env2.yml`.\n\n**in**\n\n`in` is basically the same as `files` with the difference that it will merge all files for a given path sperately\n\nExample:\n\n```yaml\nspruce:\n- base: path/to/base.yml\n  merge:\n  - with:\n      files:\n      - top.yml\n    regexp: \".*.(yml)\"\n  for_each:\n    in: path/to/dir/\n  to_dir: results/\n```\n\n**Except**\n\n`except` works in combination with `in`: list of files that you want to exclude from the merge.\n\nExample:\n\n```yaml\nspruce:\n- base: path/to/base.yml\n  merge:\n  - with:\n      files:\n      - top.yml\n  regexp: \".*.(yml)\"\n  for_each_in: path/to/dir/\n  except:\n  - some.yml\n  to_dir: results/\n```\n\n**include_sub_dirs**\n\n`include_sub_dirs` includes all files including files in all subdirectories of a directory into the merge seperately.\n\n```yaml\nspruce:\n- base: path/to/base.yml\n  merge:\n  - with:\n      files:\n      - top.yml\n  regexp: \".*.(yml)\"\n  for_each:\n    in: path/to/dir\n    include_sub_dirs: true\n    enable_matching: true\n    copy_parents: true\n  to_dir: results/\n```\n\nWhen `include_sub_dirs` is defined you can specify further properties:\n\n- `enable_matching`: this will only include files in the merge, that contains the same substring as the parent directory.\n\n- `copy_parents`: setting this property to `true` (default `false`) will copy the parent folder of a file to the target directory (in the above example `results/`)\n\n**regexp**\n\nThe `regexp` property can also be set in combination with `for_each`, `for_each_in`, and `walk_through` to only include files matching the regular expression.\n\n```yaml\nspruce:\n- base: path/to/base.yml\n  merge:\n  - with:\n      files:\n      - top.yml\n  regexp: \".*.(yml)\"\n  for_each:\n    in: path/to/dir\n    include_sub_dirs: true\n    enable_matching: true\n    copy_parents: true\n    regexp: \".*.(yml)\"\n  to_dir: results/\n```\n---\n\n#### Read From and Write To Internal Datatsore\n\nSometimes it is required to do more than one merge step, which creates intermediate YAML files. In this case you can save merge results to internal datastore/cache which you can write/read by surrounding your location with double courly braces `{{file|dir}}`. Internal cache also work as directories and can be used with `to_dir`.\n\nExample:\n\n```yaml\nspruce:\n- base: path/to/base.yml\n  merge:\n  - with_in: path/to/dir/\n  to: {{result}}\n\n- base: {{result}}\n  merge:\n  - with_in: another/path/\n  to: final.yml\n```\n\n#### Environment Variables\n\nAviator supports to read _Environment Variables_. Environment variables can be set with `$VAR` or `${VAR}` at an arbitrary place in the `aviator.yml`.\n\nExample:\n\n```yaml\nspruce:\n- base: $BASE_PATH/app-${NUMBER}.yml\n  merge:\n  - with_in: path/to/dir/\n  to: {{result}}\n\n- base: {{result}}\n  merge:\n  - with_in: $TARGET_PATH\n  to: $RESULT_YAML\n```\n\nExecuting `aviator` as follows:\n\n```\n$ BASE_PATH=/tmp/ NUMBER=1 RESULT_YAML=result.yml aviator\n```\n\nwill resolve:\n\n```yaml\nspruce:\n- base: /tmp/app-1.yml\n  merge:\n  - with_in: path/to/dir/\n  to: {{result}}\n\n- base: {{result}}\n  merge:\n  - with_in: $TARGET_PATH\n  to: result.yml\n```\n\n#### Variables\n\nYou can provide variables to aviator files using the `--var` flag. Basic CLI usage:\n\n`$ aviator --var key=value`\n\nIn you aviator file you need to specify the name of the variable you want to interpolate. The syntax for a variable is the following `(( varName ))` (note the space before and after the variable name!)\n\nExample:\n\n```yaml\n---\nspruce:\n- base: (( key ))\n  ...\n```\n\nIn this example the variable `key` will be replaced by the value `value`. So the result would look like this:\n\n```yaml\n---\nspruce:\n- base: value\n  ...\n```\n\nValues for aviator variables can be multi-line\n\n#### Modifier\n\nWith modifier you can modify the resulting (merged) YAML file. You can either delete, set, or update a property. The modifier will always be applied on the result. If you use `for_each` it will be applied on each `for_each` merge step.\n\nConsider a resulting YAML from a merge process `result.yml`, which has a property `person.name`:\n\n```yaml\n---\nperson:\n  name: Julz\n```\n\n1. the property can be deleted\n\n  ```yaml\n  spruce:\n  - base: base.yml\n    merge:\n    - with:\n        files:\n        - top.yml\n    modify:\n      delete:\n      - \"person.name\"\n    to: result.yml\n  ```\n\n  It deletes a property only if it exists. There will be no error if a proerty does NOT exist.\n\n2. the property can be updated:\n\n  ```yaml\n  spruce:\n  - base: base.yml\n    merge:\n    - with:\n        files:\n        - top.yml\n    modify:\n      update:\n      - path: person.name\n        value: newName\n    to: result.yml\n  ```\n\n  Using update will update existing properties only.\n\n3. Other properties can be added/updated with set:\n\n  ```yaml\n  spruce:\n  - base: base.yml\n    merge:\n    - with:\n        files:\n        - top.yml\n    modify:\n      set:\n      - path: person.name\n        value: NewName\n    to: result.yml\n  ```\n\n  Set updates or adds a property to an array. If a property exists it will be overwritten, if the property does not exist it will be added (works only for maps not arrays).\n\nAviator uses [goml](https://github.com/JulzDiverse/goml) as YAML modifier. If you want to read more about `update`, `delete`, and `set`, check the README.\n\n---\n\n### Squash Section\n\nYou can squash multiple files into one single YAML file using the `squash` section.\n\n\n#### Squashing specific files\n\n```yaml\nsquash:\n  contents:\n  - files:\n    - deployment.yml\n    - service.yml\n  to: app.yml\n```\n\n#### Squash files from a directory\n\n```yaml\nsquash:\n  contents:\n  - dir: my/dir/\n  to: app.yml\n```\n\n### Executors\n\nExecutors execute executables installed on the OS that Aviator is running on. The following three executors are currently supported by Aviator:\n\n- `kubectl` Executor\n- `fly` Executor\n- Generic Executor: Runs an any specified executable. \n\n#### `kubectl` executor \n\nExecute `kubectl apply` with the following options: \n\n*Supported flags*\n\n- **file**: Name of the file to `kubectl apply`\n- **force**: calls `kubectl apply` with the `--force` flag\n- **dry_run**: calls `kubectl apply` with the `--dry-run` flag\n- **overwrite**: calls `kubectl apply` with the `--overwrite` flag\n- **recursive**: calls the `kubectl apply` with the `--recursive` flag\n- **output**: calls the `kubectl apply` with the `--output=\u003cdesired-ouput\u003e` parameter\n- **kustomize**: calls the `kubectl apply` with the `--kustomazation/-k` flag rather than with `--filename/-f`.\n  - Read more about `kubectl apply` + kustomization [here](https://github.com/kubernetes-sigs/kustomize) and [here](https://kubectl.docs.kubernetes.io/pages/app_management/apply.html)\n\nYou can read about the details of the flags of `kubectl apply` [here](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#apply)\n\nExample:\n\n```yaml\nkubectl\n  apply:\n    file: deployment.yml\n    force: true\n    dry_run: true\n    overwrite: true\n    recursive: true\n    output: yaml\n```\n\n**Kustomize Example:**\n\nWhen `kustomize` flag in aviator is set to true it will call `kubectl apply` with the `--kustomization/-k` flag, which expects a directory path. The directory paht needs to be specified in the `file` property of `kubectl.apply`:\n\n```yaml\nkubectl:\n  apply:\n    file: kustomization/path/\n    kustomize: true\n```\n\n#### Fly Executor\n\nAn executor for the Concourse Fly CLI. The supported commands are `set-pipeline`, `validate-pipeline`, `format-pipeline`, and `expose-pipeline/hide-pipeline`.\nThe `set-pipeline` and `hide-pipeline` commands are executed by default. Here is the list of commands and flags that can be used with `aviator`:\n\n- **name**: Name of the pipeline\n- **target**: Target short name (`fly` target)\n- **config (string):** the pipeline config file (yml)\n- **load_vars_from (array):** List of all property files (-l)\n- **vars (map):** Map of variables (--var)\n- **non_interactive (bool):** Enables non-interactive mode (-n)\n- **expose (bool):** Exposes the pipeline (expose-pipeline)\n- **validate_pipeline (bool):** Validate local pipeline configuration (failes on errors)\n- **strict (bool):** causes `validate_pipeline` to fail on errors AND warnings\n- **format_pipeline (bool):** format a pipeline config in a \"canonical\" form (prints to stdout).\n- **write:** update the formatted pipeline config file in-place.\n- **team_name (string):** the team name to fly for set-pipeline\n\nMore detailed description of the flags can be found [here](https://concourse-ci.org/pipelines.html)\n\nExample - set-pipeline:\n\n```yaml\nfly:\n  name: myPipelineName\n  target: myFlyTarget\n  team_name: concourse-team\n  config: pipeline.yml\n  non_interactive: true\n  check_creds: true\n  load_vars_from:\n  - credentials.yml\n  vars:\n    var1: myvar\n    var2: myvar2\n  expose: true\n```\n\nExample - validate-pipeline:\n\n```yaml\nfly:\n  config: myconfig.yml\n  validate_pipeline: true\n  strict: true\n```\n\nExample - format-pipeline:\n\n```yaml\nfly:\n  config: myconfig.yml\n  format_pipeline: true\n  write: true\n```\n\n\n_NOTE: You will need to fly login first, before executing `aviator`_\n\n#### Generic Executor\n\nThe Generic Executor executes any specified executable. Here is how to define an Generic Executor in the `aviator.yml`:\n\n```yaml\nexec:\n- executable: some-executable # required\n  global_options: # optional\n  - name: --option\n    value: option-value\n  command: # optional\n    name: command-name\n    options:\n    - name: --command-option\n      value: command-option-value\n  args:\n  - arg1\n  - arg2\n```\n\nThis will executed as `$ some-executable --option option-value command-name --command-option command-option-value arg1 arg2`\n\nExample: `cp`\n\n```yaml\nexec:\n- executable: cp\n  global_options:\n  - name: -r\n  args:\n  - dir/\n  - destination/\n```\n\nThis calls `cp` as follows: `$ cp -r dir/ destination/`\n\n---\n\n### CLI Options\n\n#### `--curly-braces`\n\nSome YAML based tools (like concourse in the past) are using `{{}}` sytnax. This is not YAML conform. Using the `--curly-braces` option you can allow this syntax.\n\n#### `--silent`\n\nThis option will output no infromation to stdout.\n\n#### `--verbose`\n\nThis option prints which files are excluded from a merge.\n\n#### `--dry-run`\n\nThis option prints contents to `stdout` rather than writing it to files. This flag also omits any defined executor.\n\n#### `--var`\n\nYou can provide variables to the aviator file.\n\n---\n\n# Development\n\n```\n$ go get github.com/JulzDiverse/aviator\n```\n\n## Build Aviator\n\nTo build the aviator binary you can navigate to `cmd/aviator`:\n\n```\n$ cd ./cmd/aviator`\n```\n\nNow you can build with the go cli:\n\n```\n$ go build \n```\n\nFor more information on the `$ go build` command run `$ go help build`. \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fherrjulz%2Faviator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fherrjulz%2Faviator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fherrjulz%2Faviator/lists"}