generated from krampus/template-godot4
	
		
			
	
	
		
			161 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			161 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|  | # DEVELOPMENT.md
 | ||
|  | 
 | ||
|  | This is a set of general guidelines for developers. | ||
|  | 
 | ||
|  | ## Dev Tools
 | ||
|  | 
 | ||
|  | This project uses `gdlint` and `gdformat` from | ||
|  | [Scony/godot-gdscript-toolkit](https://github.com/Scony/godot-gdscript-toolkit) | ||
|  | for linting & formatting, respectively. | ||
|  | 
 | ||
|  | These tools are integrated into our development workflow using Godot | ||
|  | plugins: | ||
|  | [ryan-haskell/gdformat-on-save](https://github.com/ryan-haskell/gdformat-on-save) | ||
|  | and | ||
|  | [krampus/gdlint-plugin](https://git.of.the.spectacle.lol/krampus/gdlint-plugin) | ||
|  | respectively. | ||
|  | 
 | ||
|  | When a script is saved in the Godot editor, it is automatically | ||
|  | formatted and checked for linting errors which are shown as warnings. | ||
|  | 
 | ||
|  | ### Setup on Linux Environment
 | ||
|  | 
 | ||
|  | `gdlint` and `gdformat` require Python >=3.8. On Ubuntu: | ||
|  | 
 | ||
|  | ```bash | ||
|  | $ sudo apt update | ||
|  | $ sudo apt install python3 python3-venv | ||
|  | ``` | ||
|  | 
 | ||
|  | Next, install `gdscript-toolkit` through `pip`: | ||
|  | 
 | ||
|  | ```bash | ||
|  | $ pip install --user -r requirements.txt | ||
|  | ``` | ||
|  | 
 | ||
|  | Then run `godot`. The plugins should be configured automatically. | ||
|  | 
 | ||
|  | (If you prefer to install `gdscript-toolkit` in a venv, just make sure | ||
|  | the plugins can find their required binaries.) | ||
|  | 
 | ||
|  | ### Setup on Windows Environment
 | ||
|  | 
 | ||
|  | Download and run the appropriate installer from the [Python website](https://www.python.org/downloads/windows/) | ||
|  | 
 | ||
|  | During installation, select the "Add python.exe to PATH" checkbox when prompted. | ||
|  | 
 | ||
|  | Open "Windows PowerShell" and run the following command to make sure pip is installed: | ||
|  | ``` | ||
|  | pip --version | ||
|  | ``` | ||
|  | 
 | ||
|  | Assuming pip is installed you should see a message like: | ||
|  | ``` | ||
|  | pip 24.0 from C:\Users\dummy\AppData\Local\Programs\Python\Python312\Lib\site-packages\pip (python 3.12) | ||
|  | ``` | ||
|  | 
 | ||
|  | If pip is installed, run the following command to install the toolkit for the linter and formatter: | ||
|  | ``` | ||
|  | install gdtoolkit==4.2.2 | ||
|  | ``` | ||
|  | 
 | ||
|  | Then run the following command to finish the installation process: | ||
|  | ``` | ||
|  | pip install setuptools==69.5.1 | ||
|  | ``` | ||
|  | 
 | ||
|  | Check that everything installed by running "gdlint -h" and you should see something like: | ||
|  | 
 | ||
|  | ``` | ||
|  | GDScript linter | ||
|  | 
 | ||
|  | A tool for diagnosing typical GDScript code problems. | ||
|  | On success and the exitcode is 0. | ||
|  | On failure, python exception or list of problems is shown and exitcode is non-zero. | ||
|  | ... | ||
|  | ``` | ||
|  | Also run "gdformat -h" and you should see something like: | ||
|  | 
 | ||
|  | ``` | ||
|  | GDScript formatter | ||
|  | 
 | ||
|  | Uncompromising GDScript code formatter. The only configurable thing is | ||
|  | max line length allowed and tabs/spaces indent. The rest will be taken | ||
|  | care of by gdformat in a one, consistent way. | ||
|  | ... | ||
|  | ``` | ||
|  | 
 | ||
|  | ### Git Hooks
 | ||
|  | 
 | ||
|  | If you like, you can use the included githooks to automatically check formatting & linting before making a commit. | ||
|  | 
 | ||
|  | You can enable our githooks like this: | ||
|  | 
 | ||
|  | ```bash | ||
|  | $ git config core.hooksPath .githooks | ||
|  | ``` | ||
|  | 
 | ||
|  | ## Standards & Practices
 | ||
|  | 
 | ||
|  | ### Style
 | ||
|  | 
 | ||
|  | Code should generally conform to the [GDScript style | ||
|  | guide](https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/gdscript_styleguide.html) | ||
|  | where possible. Use the provided [linter and formatter](#dev-tools) to | ||
|  | apply most style guidelines automatically. | ||
|  | 
 | ||
|  | ### Type Annotations
 | ||
|  | 
 | ||
|  | Use explicit type annotations wherever possible. Don't fret about it | ||
|  | too much, this is GDScript and there are a lot of situations where you | ||
|  | gotta do some freaky duck typing, but try to do as much explicit type | ||
|  | annotation as you can. | ||
|  | 
 | ||
|  | ### Organization
 | ||
|  | 
 | ||
|  | _NOTE update this section as we build out the project more_ | ||
|  | 
 | ||
|  | - All non-code assets go under `assets` | ||
|  |   - Graphical assets go under `assets/images` | ||
|  |     - Sprites go under `assets/images/sprites` | ||
|  |   - Audio assets go under `assets/audio` | ||
|  |     - Music goes under `assets/audio/music` | ||
|  |     - SFX assets go under `assets/audio/sfx` | ||
|  |   - Video assets go under `assets/video` | ||
|  | - Scenes and GDScript source files go under `src` | ||
|  | - Godot plugins go under `addons` | ||
|  | 
 | ||
|  | ## Git Workflow
 | ||
|  | 
 | ||
|  | We use a standard branching workflow. Here's the full process of getting something merged in: | ||
|  | 
 | ||
|  | 1. [Create an issue](../../../issues/new) for the feature you want to | ||
|  |    implement or the bug you want to fix, and assign it to | ||
|  |    yourself. Alternately, pick an existing issue you want to work on | ||
|  |    from the [issue tracker](../../../issues). | ||
|  | 2. In your local repo, create a new branch off of `main`. Your feature | ||
|  |    branch's name should include the issue number and a brief | ||
|  |    descriptive title, e.g. `37-immanentize-eschaton` or similar. | ||
|  | 3. Build the feature or fix the bug or whatever it is you're | ||
|  |    doing. Frequent, small commits are preferred, and it's a good idea | ||
|  |    to merge new changes from `main` often. | ||
|  | 4. Push your changes to the server and | ||
|  |    [create a pull request](../../../compare/main...main) to merge your | ||
|  |    feature branch into `main`. Your PR description should include the | ||
|  |    changes you made. If you include the phrase _"closes #[issue | ||
|  |    number]"_ in your PR description, the issue will automatically be | ||
|  |    closed when your PR is merged, which is nice. | ||
|  | 5. Request review from `intrusive/Owners`. If your patch touches | ||
|  |    something you think a specific dev needs to see, tag them for | ||
|  |    review explicitly. | ||
|  | 6. Once your PR gets approval from either 1 member of | ||
|  |    `intrusive/Owners` or from the specific developer who needs to see | ||
|  |    it, merge it into `main` yourself. There should be a button on the | ||
|  |    PR page to do this. If it says you can't merge automatically, you | ||
|  |    probably need to merge new changes from `main` | ||
|  | 7. If it wasn't done automatically, close the issue and delete the | ||
|  |    feature branch. | ||
|  | 
 | ||
|  | Try to stick to the above workflow as much as you can, but occasional | ||
|  | shortcuts for hotfixes etc aren't the end of the world. |