Thanks for your interest in our project. Contributions are welcome. Feel free to open an issue with questions or reporting ideas and bugs, or open pull requests to contribute code.
We are committed to fostering a welcoming, respectful, and harassment-free environment. Be kind!
Security Issues: Please report security vulnerabilities via our Security Policy instead of opening public issues.
- Fork the repository
- Install mise - it manages all project dependencies and tools
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Run
mise run buildlocally to ensure everything builds successfully - Commit your changes (
git commit -m 'Add amazing feature') - Push to your branch (
git push origin feature/amazing-feature) - Open a Pull Request
All contributions that add or modify functionality must include appropriate tests. This ensures code quality and prevents regressions.
Test Requirements:
- TypeScript/CDK changes: Add or update unit tests using Jest
- Go Lambda changes: Add or update unit tests using Go's testing package
- New features: Include both unit tests and integration tests where applicable
- Bug fixes: Add tests that verify the fix and prevent regression
Tests must pass in CI before pull requests can be merged. See the testing section below for how to run tests locally.
This project uses mise for task management and tool versioning.
Install mise:
On macOS using Homebrew:
brew install miseFor other platforms, follow the installation guide.
Tool versions (Node.js, Go, etc.) are automatically managed via mise.toml ([tools] section).
For the simplest development environment setup, use the included dev container configuration. This provides a pre-configured environment with all necessary tools:
- Open the project in VS Code (or any IDE that supports dev containers)
- When prompted, select "Reopen in Container" (or use the Command Palette: "Dev Containers: Reopen in Container")
- The dev container will automatically set up the environment with mise managing all required tools and dependencies
This approach ensures a consistent development environment across all contributors without manual tool installation.
mise run installBuild the complete project (includes lambda, TypeScript compilation, and tests):
mise run buildBuild only the Go lambda code:
mise run lambda:buildUse generic tasks (optionally set TEST to limit to one):
Deploy all:
mise run integ:deployDeploy single:
TEST=SECRET mise run integ:deployAssert:
mise run integ:assert
# or single
TEST=SECRET mise run integ:assertUpdate snapshots (failed only):
mise run integ:snapshotDestroy stacks:
mise run integ:destroy
# or single
TEST=SECRET mise run integ:destroyCombined workflow (deploy, assert, snapshot):
mise run integ:allRun TypeScript tests:
mise run testRun Go lambda unit tests (default set):
mise run lambda:testRun Go lambda integration tests (explicit only):
mise run lambda:test:integrationPackage for JavaScript/npm (default in CI):
mise run package:jsPackage for all targets (Java, Python, .NET, JavaScript):
mise run package:allYou can still use npm link if desired, but the recommended workflow is to rely on mise tasks directly for building and testing.
To build and watch during local development:
mise run build
mise run watchIf you need to link the package (optional):
npm link
npm link "cdk-sops-secrets"Format code:
mise run formatLint code:
mise run lintSee all available tasks:
mise tasks