Thanks for your interest in contributing! DreadGOAD is a fork of GOAD and we welcome contributions that improve the labs, tooling, and documentation.
| Tool | Version | Notes |
|---|---|---|
| Go | 1.26+ | CLI lives in cli/ |
| Ansible | 2.x | Roles in ansible/, lint with ansible-lint |
| Terraform | 1.x | Modules in infra/, modules/ |
| Pre-commit | any | Install hooks: pre-commit install |
- Fork the repository
- Create a feature branch from
main - Make your changes
- Run tests locally (see below)
- Submit a pull request
# Go CLI tests
cd cli && go test ./...
# Ansible linting
ansible-lint ansible/
# Pre-commit checks (runs automatically on commit)
pre-commit run --all-files- New vulnerability scenarios or attack paths
- Improvements to existing Ansible roles
- Bug fixes in provisioning or the Go CLI
- New provider support or extension modules
- Documentation improvements
- Test coverage
- Follow the existing code style in each language (Go, Ansible/YAML)
- Ansible roles should include a
README.mddescribing the role's purpose and variables - Test your changes against at least one provider before submitting
- Place new roles under
ansible/roles/ - Use the collection namespace
dreadnode.goadfor module references - Include default variables in
defaults/main.yml
- Lab definitions live under
ad/<LAB_NAME>/ - Use
ad/TEMPLATE/as a starting point for new labs - Document the lab's topology, users, and intended vulnerabilities in its
README.md
- Write clear, descriptive commit messages
- Keep commits focused -- one logical change per commit
- Describe what changed and why
- Reference any related issues
- Include testing details (which provider, which lab)
Open an issue on GitHub with:
- What you expected to happen
- What actually happened
- Steps to reproduce
- Provider and OS details
By contributing, you agree that your contributions will be licensed under the GPL-3.0-or-later license.