Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/uselagoon/lagoon-scaffold
https://github.com/uselagoon/lagoon-scaffold
Last synced: about 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/uselagoon/lagoon-scaffold
- Owner: uselagoon
- License: mit
- Created: 2023-03-19T06:13:27.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-08-26T00:44:25.000Z (5 months ago)
- Last Synced: 2024-08-26T23:32:09.757Z (5 months ago)
- Language: Go
- Size: 48.8 KB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# Lagoon Scaffold
Lagoon Scaffold is a utility allowing for the quick setup of new projects on Lagoon.
It is a simple script that points to a number of git repos that contain scaffolding information.
## Usage example
### Lagoonizing a new Laravel 10 project
Install Laravel (see [installation docs](https://laravel.com/docs/10.x/installation#getting-started-on-linux)).
If your installation is installed at, say, `/home/myaccount/projects/example-app` you can run the following```
lagoon-scaffold --scaffold=laravel --targetdir=/home/myaccount/projects/example-app
```Running the above will attempt to install the files required by a Laravel project into the target directory.
Your Laravel project should now be ready to be pushed up to Lagoon.Omitting the `--scaffold` option will prompt you to select a scaffold from a list.
## Providing scaffolds
### Primary scaffold manifest
The primary scaffold manifest is located in the main branch of the [lagoon-scaffold repo](https://raw.githubusercontent.com/uselagoon/lagoon-scaffold/main/internal/assets/scaffolds.yml).
At build time, the file is embedded in the lagoon-scaffold binary, which provides a fallback if the scaffolds.yml file cannot be downloaded from the repo.
### Scaffold structure
Minimally a scaffold _must_ contain a `.lagoon` directory and a `.lagoon/flow.yml` file.
All other files are optional.Given a selected scaffold, we check out the latest commit of the scaffold's branch and clone it into the target directory into a temporary directory (which is removed post lagoonization).
The `.lagoon/flow.yml` file is then opened and, if in interactive mode, the user is asked a series of questions.
#### `.lagoon/flow.yml`
Flow files contain three kinds of question types, `test`, `select`, and `conditional`, these are demonstrated below:
```
questions: # Marks the start of a list of questions
- name: aSelectList # "name" fields should be simple, no spaces, no special characters - these are used in filling out templates
help: Help text goes here
options:
- option1
- option2
- option3
type: select # The type of question
required: true # Whether the question is required
prompt: Select one of these options # The prompt to show the user
default: option1 # The default value
- name: firstConditional
help: This is a conditional question, under which we can have subquestions
prompt: This is a conditional question
type: conditional
questions:
- name: conditional1Text
type: text
required: true
prompt: This is a sub text question
default: default value
- name: anotherConditional
type: conditional
required: true
prompt: This is a sub question
default: default value
questions:
- name: conditional_question3
type: text
required: true
prompt: This is a sub question
default: default value
```Once the questions have been answered, we recursively search through the cloned scaffolding and apply the values to any `.lgtmpl` files we find.
The flow file above will produce a data structure suitable for processing by template files, which would look like this:```
{
"aSelectList": "option1",
"firstConditional": {
"answer": false,
"conditional1Text": "some text",
"anotherConditional": {
"answer": false,
"conditional_question3": "default value"
}
}
}
```Importantly, the values generated by "conditionals" contain a special field `answer` which contains the user's response to the conditional itself.
We then strip the `.lgtmpl` from the file name and copy the concretized data to disk.
Once this is done, we copy all the files from the scaffold directory into the target directory.If there is a `.lagoon/post-message.txt` file, this is shown to the user.
Finally, the temporary directory with the scaffolding is removed.