Thank you for your interest in contributing! This document provides guidelines and instructions for contributing to this project.
- Use the GitHub issue tracker
- Check if the issue already exists
- Provide detailed information:
- Steps to reproduce
- Expected vs actual behavior
- Tool versions
- Error messages/logs
- Open an issue with the "enhancement" label
- Clearly describe the feature
- Explain the use case and benefits
- Provide examples if possible
-
Fork the repository
-
Create a feature branch
git checkout -b feature/your-feature-name
-
Make your changes
- Follow the coding standards
- Update documentation
- Add tests if applicable
-
Test your changes
bash tests/validate-tools.sh bash tests/integration-test.sh
-
Commit your changes
git commit -m "feat: add new feature"Use conventional commit messages:
feat:New featurefix:Bug fixdocs:Documentation changeschore:Maintenance tasksrefactor:Code refactoringtest:Test additions/changes
-
Push to your fork
git push origin feature/your-feature-name
-
Create a Pull Request
-
Create installation script
files/scripts/install-<tool-name>.sh
-
Follow the template:
#!/bin/bash set -e VERSION=${1:-"<default-version>"} echo "Installing <tool> version ${VERSION}..." # Download with checksum validation curl -LO "<download-url>" curl -LO "<checksum-url>" sha256sum -c <checksum-file> # Install # ... installation steps ... # Verify <tool> --version echo "<tool> ${VERSION} installed successfully"
-
Update Dockerfile
- Add ARG for version
- Add RUN command to install script
- Update in correct order (least to most likely to change)
-
Add to validation script
validate_tool "<tool>" "<tool> --version" || ((FAILURES++))
-
Update README.md with tool information
- Update version ARGs in Dockerfile
- Update version in devcontainer.json build args
- Test the build thoroughly
- Update CHANGELOG.md
Always test in the actual devcontainer:
- Switch
.devcontainer/devcontainer.jsonto the local build - comment out the"image"line and uncomment the"build"block. It pulls the published image by default, which would not contain your changes. - Rebuild the container
- Run validation:
bash tests/validate-tools.sh - Run integration tests:
bash tests/integration-test.sh - Test common workflows manually
Take care not to commit that switch. CI builds from the Dockerfile regardless,
so leaving "image" active is correct for everyone who is not changing the
image itself.
Opening a pull request runs the lint job (bash -n and shellcheck over
every script, a JSON parse over every JSON file, hadolint over the
Dockerfile), then builds linux/amd64 and linux/arm64 and runs
tests/run-all-tests.sh inside each image. Nothing is published from a pull
request.
You can run the lint checks locally before pushing:
shellcheck -x -S warning .devcontainer/files/install/*.sh tests/*.sh scripts/*.sh
hadolint --config .hadolint.yaml .devcontainer/DockerfileThe image builds for two architectures, so never hardcode one. Source
_arch.sh in any install script that downloads an architecture-specific
artefact - see the README's "Adding New Tools".
- Keep README.md up to date
- Document new features in detail
- Update CHANGELOG.md
- Add inline comments for complex logic
- Use
#!/bin/bashshebang - Always use
set -efor error handling - Add descriptive comments
- Use meaningful variable names
- Quote variables:
"${VARIABLE}" - Validate inputs
- One logical action per RUN command when possible
- Combine related commands to reduce layers
- Clean up in the same layer as installation
- Use multi-line format for readability
- Comment each section
- Use 2-space indentation
- Validate syntax before committing
- Keep alphabetically organized where logical
- Installation script must include version pinning
- Checksum validation required
- Add to validation script
- Add basic integration test
- Reproduce the bug
- Add test to prevent regression
- Verify fix in clean container
- Add appropriate tests
- Update documentation
- Ensure backward compatibility
- Code follows project style guidelines
- Tests pass locally
- Documentation updated
- CHANGELOG.md updated
- Commit messages follow conventional commits
- No merge conflicts
- Tested in actual devcontainer
- All new scripts are executable (
chmod +x)
- Automated checks run on PR
- Maintainers review code
- Feedback addressed
- Approved and merged
- Be respectful and inclusive
- Welcome newcomers
- Accept constructive criticism
- Focus on what's best for the project
- Use GitHub issues for bugs and features
- Be clear and concise
- Provide context and examples
- Be patient and respectful
Contributors will be recognized in:
- GitHub contributors list
- CHANGELOG.md for significant contributions
Thank you for contributing! 🚀