Thank you for your interest in contributing to Conceal! This document provides guidelines for contributing to our cross-platform secret management tool.
- Getting Started
- Development Environment
- Cross-Platform Development
- Testing
- Pull Request Process
- Code Style
- Code of Conduct
When contributing to this repository, please first discuss the change you wish to make via issue, email, or any other method with the maintainers before making a change.
- Go: Version 1.21 or later
- Git: For version control
- Platform Access:
- macOS with Xcode Command Line Tools (for Keychain testing)
- Windows 10+ (for Credential Manager testing)
-
Clone the repository:
git clone https://github.com/infamousjoeg/conceal.git cd conceal -
Install dependencies:
go mod download
-
Build for your platform:
go build . -
Run tests:
go test -v ./...
Conceal supports multiple platforms with platform-specific implementations:
- macOS: Full support via Keychain Access
- Windows: Full support via Credential Manager
- Linux: Not currently supported
We use Go build tags to separate platform-specific code:
//go:build windows
// +build windows
//go:build darwin
// +build darwin
//go:build !darwin && !windows
// +build !darwin,!windows# Test current platform
go test ./...
# Cross-compile (build only, won't run)
GOOS=windows GOARCH=amd64 go build .
GOOS=darwin GOARCH=amd64 go build .Our GitHub Actions automatically test on:
- Ubuntu (latest)
- Windows (latest)
- macOS (latest)
-
Create platform-specific files:
pkg/conceal/keychain/keychain_newplatform.go -
Implement the interface:
func SecretExists(secretID string) bool func ListSecrets() []QueryResult func AddSecret(secretID string, secret []byte) error func DeleteSecret(secretID string) error func GetSecret(secretID string, delivery string) error func UpdateSecret(secretID string, secret []byte) error
-
Add build tags:
//go:build newplatform // +build newplatform
-
Update documentation and platform support matrix
# All tests
go test -v ./...
# With race detection
go test -race ./...
# With coverage
go test -coverprofile=coverage.out ./...macOS Testing:
- Tests use actual Keychain Access APIs
- Requires user permission for keychain access
- Cannot fully automate in CI (requires user interaction)
Windows Testing:
- Tests use actual Credential Manager APIs
- Requires Windows environment
- Cannot fully automate in CI (requires user interaction)
Cross-Platform Testing:
- Interface compatibility tests run on all platforms
- Build verification tests ensure compilation succeeds
- Unit tests: Test individual functions
- Integration tests: Test credential store interactions
- Platform compatibility tests: Verify interfaces work across platforms
-
Run all tests:
go test ./... go test -race ./...
-
Run linting:
golangci-lint run
-
Format code:
go fmt ./...
-
Check go.mod:
go mod tidy
-
Code Quality:
- All tests pass
- Linting passes
- Code is formatted with
go fmt go mod tidyhas been run
-
Documentation:
- Update README.md if adding new features
- Add/update function documentation
- Update platform support matrix if needed
-
Version:
- Bump version in
pkg/conceal/version.gofollowing SemVer - Major: Breaking changes
- Minor: New features (like new platform support)
- Patch: Bug fixes
- Bump version in
-
Cross-Platform:
- Ensure changes work on all supported platforms
- Add appropriate build tags
- Test compilation on all platforms
- Automated Checks: All CI/CD checks must pass
- Code Review: Maintainer review required
- Testing: Platform-specific testing as applicable
- Merge: Squash and merge preferred
- Follow Effective Go
- Use
go fmtfor formatting - Follow Go Code Review Comments
- Use build tags consistently
- Maintain consistent interfaces across platforms
- Handle platform differences gracefully
- Provide meaningful error messages for unsupported platforms
- Never log secrets or sensitive data
- Use secure random generation when needed
- Follow platform security best practices
- Validate all inputs
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
Examples of behavior that contributes to creating a positive environment include:
- Using welcoming and inclusive language
- Being respectful of differing viewpoints and experiences
- Gracefully accepting constructive criticism
- Focusing on what is best for the community
- Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
- The use of sexualized language or imagery and unwelcome sexual attention or advances
- Trolling, insulting/derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information, such as a physical or electronic address, without explicit permission
- Other conduct which could reasonably be considered inappropriate in a professional setting
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at joe dot garcia at cyberark dot com. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
This Code of Conduct is adapted from the Contributor Covenant, version 1.4, available at http://contributor-covenant.org/version/1/4