Before marking a TODO done, run all tests. If they pass, mark it and the implementation plans as done. TODOs require an implementation plat and checklist in docs/{todo name}-checklist.md.
Investigate supporting Symmetric Keys for Git-Vault. Borrow inspiration from the open source project git-crypt by reviewing its documentation and code. git-crypt currently supports Symmetric Keys. Generate a TODO that documents the objective and what is needed to get feature parity with git-crypt in its usage of Symmetric Keys for encrypting and decrypting files. This TODO is to create another TODO.
If the add command detects a JSON or YAML file it will prompt a user to ask if they want to encrypt just the values of all fields in the file when storing it in the vault, or do a full file encryption.
- Objective: Provide automated CI/CD workflow templates for unsealing vaulted items in GitHub Actions.
- Create workflow templates that users can install to automatically unseal vaulted items in CI
- Support two authentication methods:
- File-based password/key stored as GitHub Secret
- 1Password integration using
1password/load-secrets-action@v2for seamless secret management
- Workflow should:
- Install
gvin the runner - Configure authentication (file-based or 1Password)
- Unseal specified vaulted items
- Clean up secrets after use
- Install
- Provide clear documentation and examples for both authentication methods
- Include security best practices and warnings about secret management
- Add tests that verify the workflow templates work in CI environment
- Consider adding a command like
gv workflow installthat helps users set up the CI integration
Add and remove command should accept glob patterns. config.json should handle mappings from archive back to paths.
To assist in CI usage (NOTE: See TODO #4 CI/CD Workflow Integration) we should allow decryption of repo assets using only a environment variable instead of a pwd file. You'll need to investigate an idiomatic pattern for passing potentially multiple passwords to support repos that have multiple file/folders encrypted.
It's not clear exactly what happens to the state (in vault.json, password files, 1password password records) if a user destroys or loses any of them. Investigate the simplest way this could be provided to our users and introduce a new CLI command that handles and implements that experience for them. Keep it simple and leverage the existing modules to help implement most of this feature in the command file itself rather than create new libraries or utils.
A full RFC describing the implementation can be found in docs/rfc-field-level-encryption.md. The objective would be to implement this in src/feild-encryption/ as a series of modules that the add/encrypt and decrypt commands could use to optionally offer to a user field-level encryption when only a single-file that is a supported format for field-level encryption is provided to the encrypt/add command (which the CLI will detect). This RFC does NOT concern itself with integration into this codebase, and only describes the general code needed. You will have to determine the full implementation and integration into this codebase, such as managing state for this in vault.json and storing keys in the repo for symmetric. Also ensure extending it later for potential Future Considerations mentioned in the RFC.
Once TODOs are fully implemented, tested, and documented, move them here for future reference. TODOs in this section no longer need to be implemented and are kept for historical reasons.
- Objective: For the user and within this codebase, completely change terminology from 'install' to 'init'.
- The install command is now 'init'
- Code comments and methods use 'init' instead of 'install'
- Documentation has been updated to reflect this
- The only time 'install' is used is when it comes to specific "install" commands of third parties or terminal commands for things that AREN'T git-vault.
- Objective: Support password flags for CLI automation and CI/CD usage, plus password recovery functionality.
- Added
--password/-pflag to decrypt command that overrides file and 1password-based passwords - Added
--write/-wflag that when used with--passwordwrites the password to storage after successful decryption - Added
--passwordflag support to add and encrypt commands to skip interactive password prompts - Includes confirmation prompts for overwriting existing passwords in both file and 1Password storage modes
- Full test coverage and documentation updates included
- Objective: Reduce clutter in the user's project by centralizing all things related to git-vault(except the git hooks) to a single folder.
- The single folder on the user's project stores: all
.shscripts that are installed,paths.list, the mainREADME.mdof git-vault, and a subfolder for storage. - Name the folder
.vaultand the storage subfolder.vault/storage. - Update all and tests/docs to reflect the new design.