Thank you for your interest in contributing to Rune-Admin! This document provides guidelines for contributing to the infrastructure and deployment tooling.
Be respectful, collaborative, and constructive in all interactions.
Before creating an issue:
- Check if the issue already exists
- Collect relevant information:
- Rune-Admin version
- Deployment platform (OCI/AWS/GCP)
- Python version
- Error messages and logs
- Steps to reproduce
Create issue at: https://github.com/CryptoLabInc/rune-admin/issues
Feature requests should include:
- Use case: What problem does this solve?
- Proposed solution: How should it work?
- Alternatives considered: What other approaches did you consider?
- Impact: Who benefits from this feature (administrators, deployment automation)?
CSP deployment only:
- Access to cloud provider (OCI/AWS/GCP)
- GitHub CLI (
gh) with GHCR push access to the CryptoLabInc organization
-
Clone repository
git clone https://github.com/CryptoLabInc/rune-admin.git cd rune-admin -
Install tools and bootstrap
mise install # Install Python 3.12, buf, ruff, terraform, cloud CLIs mise run setup # Create venv, install deps, generate proto stubs
-
Verify setup
mise run test:unit # Run unit tests to verify -
(Optional) Activate mise in your shell
eval "$(mise activate zsh)" # or bash
This adds mise-managed tools (
terraform,oci,gcloud, etc.) to your PATH for the current session. To make it permanent, add the line to your~/.zshrc(or~/.bashrc).
All commands must be run via mise run to ensure correct tool versions and venv activation.
| Command | Description |
|---|---|
mise run test |
Unit + integration tests |
mise run test:unit |
Unit tests only |
mise run test:cov |
Tests with coverage report |
mise run lint |
Ruff linter |
mise run lint:fix |
Ruff with auto-fix |
mise run format |
Ruff formatter |
mise run format:check |
Check formatting without modifying |
mise run check |
All checks: format + lint + unit tests |
mise run proto |
Regenerate protobuf/gRPC stubs |
mise run build |
Build Docker image locally |
mise run push |
Build and push multi-platform image to GHCR (requires GHCR access) |
mise run dev |
Start local Vault via Docker Compose |
mise run certs |
Generate self-signed TLS certificates |
tests/
├── unit/ # Fast, isolated tests per module
└── integration/ # End-to-end Vault API tests
All test commands must be run via mise run:
mise run test # Unit + integration tests
mise run test:unit # Unit tests only
mise run test:cov # Tests with coverage reportIntegration tests use GPG-encrypted fixtures containing FHE keys and ciphertext blobs. See tests/FIXTURES.md for the full update procedure, including passphrase rotation and re-encryption steps.
- Unit tests should be fast (< 2s per test)
- Use fixtures for crypto setup to avoid repeated key generation
- Mock external dependencies
- Test both success and error paths
- New gRPC methods need corresponding unit tests in
tests/unit/ - Token/auth changes must update
tests/unit/test_auth.py
- Follow PEP 8
- All public functions need type hints
- Keep functions focused and testable
- Format and lint with ruff:
mise run formatandmise run lint - Run
mise run checkbefore committing
- Use
#!/usr/bin/env bashfor portability - Include error handling (
set -e) - Add comments for complex logic
- Test on multiple platforms (macOS, Linux)
- English only in code, commit messages, PR descriptions, and issue bodies
- README.md: Quick start guide for administrators
- docs/ARCHITECTURE.md: Infrastructure architecture details
- CHANGELOG.md: Version changes
- Use clear, concise language
- Include code examples where helpful
- Keep diagrams up to date (ASCII art for architecture)
- Test all commands before documenting
mise run dev # Start local Vault via Docker Compose
mise run build # Build Docker image locallyUse scripts/install-dev.sh to test the full installation flow using local working tree files instead of downloading from GitHub.
sudo bash scripts/install-dev.shThis script behaves identically to install.sh but:
- Copies
docker-compose.yml, TLS scripts, and Terraform configs from the local repo - Uses a locally built Docker image (
mise run build) instead of pulling from GHCR - Requires no network access to GitHub
-
Create feature branch
git checkout -b worktree-issue-{N}-{description} -
Make changes
- Write code
- Add/update tests
- Update documentation
-
Test thoroughly
mise run check
-
Commit with clear message
git commit -m "feat: add monitoring dashboard support (#N)" -
Push and create PR
git push origin worktree-issue-{N}-{description} # Create PR on GitHub
<type>: <subject>
<body>
<footer>
Types:
feat: New featurefix: Bug fixdocs: Documentation onlytest: Adding or updating testsrefactor: Code change that neither fixes a bug nor adds a featurechore: Changes to build process or auxiliary tools
Example:
feat: Add Kubernetes deployment support
- Add k8s manifests for Vault deployment
- Update install scripts to detect k8s
- Add documentation for k8s deployment
Closes #123
- Update version in relevant files
- Update CHANGELOG.md with all changes
- Test deployment on all supported platforms
- Create git tag:
git tag -a v0.3.0 -m "Release v0.3.0" - Push tag:
git push origin v0.3.0
rune-admin/
├── vault/ # Rune-Vault gRPC server (see [Architecture](docs/ARCHITECTURE.md))
├── deployment/ # Terraform configs (OCI, AWS, GCP) + monitoring
├── scripts/
├── tests/ # Unit, integration tests
├── docs/ # Architecture docs
└── install.sh # Interactive installer
Core server code is in vault/. See docs/ARCHITECTURE.md for details.
- Secret key (
vault_keys/) must never be logged, returned in API responses, or leave the server process - Admin server binds to
127.0.0.1only — never expose externally - Never commit private keys (SecKey.json)
- Token secrets must come from environment variables, never hardcoded
- TLS is required for all cloud deployments
- Review security implications of changes
- Test authentication and authorization
- Issues: GitHub Issues for bugs and features
- Discussions: GitHub Discussions for questions
- Documentation: Check docs/ folder first
By contributing, you agree that your contributions will be licensed under the same license as the project.
Thank you for contributing to Rune-Admin!