Thank you for your interest in contributing to CodeOps Studio! By contributing, you agree to license your work under the GNU GPLv3 under same terms.
We value your input and strive to make the contribution process straightforward and transparent.
This project uses semantic version 2.0.0 spec in the format
major.minor.patch(-prerelease)(+buildmetadata). When bumping versionName in constants.gradle
file and when creating a tag for new releases on github, make sure to include the patch number as
well, like v1.1.0 instead of just v1.1. The build.gradle files for consistency.
You can contribute to CodeOps Studio in several ways:
- Reporting a bug
- Discussing the current state of the code
- Submitting a fix
- Proposing new features
- Becoming a maintainer
All these can be done by opening an issue
We use GitHub to host our codebase, track issues, and manage pull requests. All contributions are managed through GitHub's pull request system.
Branch Policy:
main: Stable releases (protected)dev: Active development
To contribute to CodeOps Studio, follow these steps:
-
Fork the Repository: Start by forking this repository to your GitHub account.
-
Create a Branch: Create a new branch from the
devbranch for your feature or bug fix. -
Implement Changes: Make your changes in the branch you created, ensuring each commit has a clear and descriptive message and must use Conventional Commits specs like:
- Added for new features.
- Changed for changes in existing functionality.
- Deprecated for soon-to-be removed features.
- Removed for now removed features.
- Fixed for any bug fixes.
- Security in case of vulnerabilities.
- Docs for updating documentation.
-
Submit a Pull Request: Open a pull request (PR) against the
devbranch of this repository. Provide a detailed description of the changes you've made and the problem they solve. -
License Notice: Ensure that any new files you add include the GPLv3 license header, you can use the automation script to add license headers to new files.
-
Code Review: Your PR will undergo review by maintainers. Address any feedback or requested changes promptly.
- If you've added code, ensure it is tested thoroughly.
- Update documentation for any changes in APIs or significant features.
- Ensure the code follows our style guidelines and passes linting checks.
We use GitHub issues to track bugs. If you encounter a bug, please report it by opening a new issue. Include detailed steps to reproduce the bug, expected behavior, actual behavior observed, and any relevant code snippets.
CodeOps Studio uses a strict, enforced variation of Semantic Versioning that is intentionally designed to support:
- deterministic update checks
- forced minimum-version enforcement
- Android
versionCodeconstraints - Git-based build traceability
- reliable client/server version comparison
This policy is not optional. Any deviation may cause update logic to fail silently or force incorrect downgrade/upgrade behavior.
The application version MUST follow this structure:
MAJOR.MINOR.PATCH [RELEASE_TYPE]
Examples:
1.0.51.0.5 beta1.2.0 rc2.0.0 stable
Internally, spaces are normalized and treated as - during comparison.
The core version:
MAJOR.MINOR.PATCH
- MUST contain exactly three numeric segments
- MUST be strictly numeric
- MUST NOT include prefixes (
v), suffixes, or metadata - MUST increase monotonically
Valid:
1.0.01.2.3
Invalid:
1.01.0.0.1v1.0.01.0.0-beta(labels are handled separately)
The core version is used for primary ordering during version comparison.
Release maturity is expressed using a single release-type label, mapped to a strict priority order.
| Release Type | Key | Priority |
|---|---|---|
| Alpha | alpha |
1 |
| Beta | beta |
2 |
| RC | rc |
3 |
| Pre-release | pr |
4 |
| Stable | stable |
5 |
Ordering rule:
alpha < beta < rc < pr < stable
Only these labels are recognized.
-
The release type:
- MUST be a single word
- MUST NOT contain punctuation
- MUST NOT contain dashes, commas, or numbers
-
Only one release type may be present
-
If omitted, the version is treated as STABLE
Valid:
1.0.5 beta1.0.5 rc1.0.5
Invalid:
1.0.5-beta-21.0.5 beta11.0.5 preview1.0.5 final
CodeOps Studio uses a custom version comparator to determine:
- update availability
- forced update requirements
- backward compatibility guarantees
The comparator works in two phases:
- Numeric comparison of
MAJOR.MINOR.PATCH - Priority comparison of release type
Because Android update logic depends on this ordering:
- malformed versions may appear newer than they are
- stable releases may be downgraded incorrectly
- forced updates may never trigger
- CI and Play Store builds may diverge
This is why:
- free-form SemVer prerelease identifiers are not allowed
- build metadata is intentionally ignored
- release types are finite and ordered
versionCodeis derived from Git commit count- A fallback monotonic value is used when Git is unavailable
- Contributors must not manually override
versionCode
This guarantees:
- Play Store–safe monotonic upgrades
- reproducible builds
- traceable releases
Only the following versioning fields may be modified when explicitly required:
baseVersion(core semantic version only)suffix(release type only)
Contributors must not:
- manually construct
versionName - append commit hashes themselves
- introduce additional version labels
- add formatting, symbols, or separators
Git tags MUST match the core version:
vMAJOR.MINOR.PATCH
Examples:
v1.0.5v2.1.0
Tags must not include release types or metadata.
Pull requests that:
- introduce unsupported version formats
- modify version comparison logic
- bypass version normalization
- add unrecognized release labels
will be rejected.
This policy exists to protect update correctness and user safety.
By contributing to CodeOps Studio, you agree that your contributions will be licensed under the GNU General Public License v3 (GPLv3). For any concerns about licensing, please reach out to the maintainers.
Report violations to the GNU GPLv3 Licence by opening an issue
This contribution guide draws inspiration from various open-source best practices. We aim to foster a welcoming and collaborative community where contributions are valued.
We look forward to your contributions to CodeOps Studio!