This document outlines the development workflow, versioning, and release procedures for the iolinki project.
We use a simplified Gitflow model.
main: Production code. Stable releases. Protected: All official version tags (vX.Y.Z) MUST be pushed from this branch.develop: Integration branch. Source forfeature/*and destination for verified features.feature/*: Feature branches. Created from and merged back todevelopvia PR.release/*: Release preparation. Source forvX.Y.Z-rcNtags. Merged tomainvia PR for official release.bugfix/*: Fixes for production bugs. Merged todevelopandmainvia PRs.
We use Semantic Versioning 2.0.0 (SemVer).
Format: MAJOR.MINOR.PATCH
- MAJOR: Incompatible API changes or significant protocol version updates.
- MINOR: Backward-compatible new functionality (e.g., new standard definitions).
- PATCH: Backward-compatible bug fixes.
Automated pipelines run on every push to main or develop.
- Code Formatting:
clang-formatcheck (enforces.clang-formatstyle). - Static Analysis:
cppcheckwith all checks enabled. - MISRA Check: Enforced in Docker via
cppcheck --addon=misra(MISRA C:2012 subset).IOLINKI_MISRA_ENFORCE=1is set in release Docker runs. - Unit Tests: All CMocka tests must pass.
- Integration Tests: Enforced - Virtual IO-Link Master conformance (V1.1.5).
- Build: CMake build for host (Linux).
- Test: Run all unit tests via
ctest. - Example Build: Verify example projects compile.
- Build verification on
native_simtarget. - Cross-compile verification for ARM targets.
Official releases are triggered ONLY from the main branch.
-
Tagging: Push a semantic version tag to
main:git checkout main && git pull git tag -a v1.0.0 -m "Release version 1.0.0" git push origin v1.0.0
-
Workflow: The GitHub Action automatically:
- Builds with Code Coverage.
- Generates Automated Release Notes.
- Packages binaries and creates a GitHub Release.
- Back-merges
maintodevelop.
RCs are used to verify the release workflow and quality before finalizing on main.
- RC Tagging: Push an RC tag from a
release/*branch:git checkout release/1.0.0 git tag -a v1.0.0-rc1 -m "Release Candidate 1" git push origin v1.0.0-rc1 - Verification: RC tags trigger the same build/test pipeline but do NOT update
mainor perform back-merges.
Tip
Use RC tags to "dry-run" the release notes and binary packaging without affecting the production baseline.
-
Prepare Release Branch:
git checkout develop git checkout -b release/x.y.z
-
Update Documentation:
- Update version in
CMakeLists.txt - Update
CHANGELOG.md - Update
ROADMAP.mdmilestones
- Update version in
-
Verify Quality Locally:
cmake -B build -DCMAKE_BUILD_TYPE=Release cmake --build build cd build && ctest --output-on-failure
-
Open Pull Requests:
- Push the
release/x.y.zbranch to remote. - Open a PR from
release/x.y.ztomain. - Wait for CI to pass and get approval.
- Merge the PR (this will update
main).
- Push the
-
Tag the Release:
- On the updated
mainbranch locally:git pull origin main git tag -a vx.y.z -m "Release vx.y.z" git push origin vx.y.z
- On the updated
-
Troubleshooting & Retries:
- Failed Release: If the CI fails on a tag, delete the tag on remote and local, fix the issue on
main, and re-tag:git tag -d v1.0.0 git push origin :v1.0.0 # Fix issue on main... git tag v1.0.0 git push origin v1.0.0 - Pre-commit Blocks: If hooks (e.g., branch name checks) block release housekeeping commits, use
--no-verify:git commit -m "chore(release): bump version" --no-verify
- Failed Release: If the CI fails on a tag, delete the tag on remote and local, fix the issue on
Each GitHub Release includes:
- Test Results: Test count and pass/fail summary
- Build Artifacts:
simple_device- Example executabletest_init- Unit test executable
- Documentation: Links to all project docs
- Source Code: Automatic archive by GitHub
- Source: GitHub releases provide the full source archive (automatic).
- Artifacts: Example/test binaries are provided for evaluation and verification.
- Checksums: Each release includes SHA256 checksums for all published artifacts.
- Access: Commercial customers receive a licensed SDK bundle via a private download link after purchase.
- Contents:
- Headers + libraries (platform-specific)
- Example binaries
- Test bundle (optional)
- Documentation snapshot
- License Delivery: License file and terms are delivered with the SDK bundle.
- Lead Time: Typical fulfillment within 2 business days.
- Pricing (see
LICENSE.COMMERCIAL):- Single Developer: €1,399 (one-time, royalty-free)
- Team (5 seats): €4,699 (one-time, royalty-free)
- Enterprise: Custom pricing
- Included Support: 12 months of updates and support are included in the commercial price.
- Integration Assistance: Up to 8 hours of integration effort are included.
- Signing: Release artifacts are signed or accompanied by checksums.