YAML Configuration¶
Configuration Properties¶
When defining your project structure in the YAML configuration file, you can use various properties to control the behavior of the script. Here are the available properties:
- skip: If set to
true
, the file or folder will be skipped and not created. - skip_if_exists: If set to
true
, the file or folder will be skipped if it already exists. - permissions: Set custom file permissions using a string representation of the octal value (e.g.,
'0777'
). - content: Define the content of the file directly in the YAML configuration.
- file: Specify a local or remote file to include. Supported protocols include
file://
,http://
,https://
,github://
,githubhttps://
,githubssh://
,s3://
, andgs://
.
Note: For local
.yaml
files, thefile://
protocol is automatically added if not specified.
Example:
files:
- README.md:
skip: true
content: |
# {{@ project_name @}}
This is a template repository.
- script.sh:
skip_if_exists: true
permissions: '0777'
content: |
#!/bin/bash
echo "Hello, {{@ author_name @}}!"
- LICENSE:
file: https://raw.githubusercontent.com/nishanths/license/master/LICENSE
- remote_file.txt:
file: file:///path/to/local/file.txt
- github_file.py:
file: github://owner/repo/branch/path/to/file.py
- github_https_file.py:
file: githubhttps://owner/repo/branch/path/to/file.py
- github_ssh_file.py:
file: githubssh://owner/repo/branch/path/to/file.py
- s3_file.txt:
file: s3://bucket_name/key
- gcs_file.txt:
file: gs://bucket_name/key
- src/main.py:
content: |
print("Hello, World!")
folders:
- .devops/modules/mod1:
struct: terraform/module
- .devops/modules/mod2:
struct: terraform/module
with:
module_name: mymod2
- ./:
struct:
- docker-files
- project/go
variables:
- project_name:
description: "The name of the project"
default: "MyProject"
type: string
- author_name:
description: "The name of the author"
type: string
default: "John Doe"
These properties allow you to customize the behavior and content of the files and folders generated by the script, providing flexibility and control over your project structure.
Template Variables¶
You can use template variables in your configuration file by enclosing them in {{@
and @}}
. For example, {{@ project_name @}}
will be replaced with the value of the project_name
variable at runtime. If this are not set when running the script, it will prompt you to enter the value interactively.
If you need to define blocks you can use starting block notation {%@
and end block notation %@}
.
To define comments you can use the comment start notation {#@
and end comment notation @#}
.
Default template variables¶
file_name
: The name of the file being processed.file_directory
: The name of the directory of file that is being processed.
Interactive template variables¶
If you don't provide a default value for a variable, the script will prompt you to enter the value interactively.
The struct defined should define the variable on a specific section of the YAML file. For example:
as you can see, the author_name
variable is defined on the variables
section of the YAML file. it includes a description
, type
and default
value which is used if the user doesn't provide a value interactively.
Custom Jinja2 filters¶
latest_release
¶
This filter fetches the latest release version of a GitHub repository. It takes the repository name as an argument.
files:
- README.md:
content: |
# MyProject
Latest release: {{@ "httpdss/struct" | latest_release @}}
This uses PyGithub to fetch the latest release of the repository so setting the GITHUB_TOKEN
environment variable will give you access to private repositories.
If there is an error in the process, the filter will return LATEST_RELEASE_ERROR
.
NOTE: you can use this filter to get the latest release for a terraform provider. For example, to get the latest release of the aws
provider, you can use {{@ "hashicorp/terraform-provider-aws" | latest_release @}}
or datadog provider {{@ "DataDog/terraform-provider-datadog" | latest_release @}}
.
slugify
¶
This filter converts a string into a slug. It takes an optional argument to specify the separator character (default is -
).
files:
- README.md:
content: |
# {{@ project_name @}}
This is a template repository.
slugify project_name: {{@ project_name | slugify @}}
default_branch
¶
This filter fetches the default branch name of a GitHub repository. It takes the repository name as an argument.