Releases
Releases allow you to distribute bundles to cohorts with support for versioning, ordering, required and disabled releases, and availability controls. They form the backbone of Peridio's progressive deployment capabilities.
Overview
Each release is associated with exactly one cohort, but each cohort can have zero to many releases. Within a cohort, releases form a release channel. Each release is associated with exactly one bundle, but each bundle can be associated with zero to many releases and bundle overrides.
Key Capabilities
- Version Management: Semantic versioning with requirements
- Flexible Ordering: Static or dynamic release progression
- Deployment Control: Required and disabled release states
- Phased Rollouts: Gradual deployment with scheduling and phasing
- Safety Mechanisms: Automatic rollback and failure thresholds
Versioning
Releases support optionally specifying a SemVer version and a SemVer version requirement. These fields are useful for your own informational purposes, but also impact dynamic ordering during bundle resolution via release version resolution.
If you ever wish to rely on dynamic ordering, it is strongly recommended to always specify version and version requirements on releases. Only releases that specify both fields are considered when performing bundle resolution via release version resolution.
Version Examples
{
"version": "2.1.0",
"version_requirement": ">= 2.0.0 and < 3.0.0"
}
Common version requirements:
">= 1.0.0"
- Minimum version"~> 2.1"
- Compatible with 2.1.x">= 1.0.0 and < 2.0.0"
- Range constraint"!= 1.2.3"
- Exclude specific version
Ordering
Releases support two ordering mechanisms that determine how devices progress through updates:
Static Ordering
Releases have a next release field that specifies an explicit path to be walked through a release channel during bundle resolution via release PRN resolution.
{
"prn": "prn:1:org-uuid:releases:release-1",
"next_release_prn": "prn:1:org-uuid:releases:release-2"
}
Use Cases:
- Mandatory update sequences
- Complex dependency chains
- Controlled migration paths
Dynamic Ordering
Releases use version and version requirement fields to specify an implicit path through a release channel during bundle resolution via release version resolution.
{
"version": "2.0.0",
"version_requirement": ">= 1.0.0"
}
Use Cases:
- Flexible update paths
- Skip intermediate versions
- Automatic compatibility resolution
Release States
Required Releases
A required release cannot be skipped during the update process. Devices must install required releases even if newer versions are available.
{
"required": true,
"description": "Critical security update - mandatory for all devices"
}
Common Use Cases:
- Security patches
- Breaking changes requiring migration
- License compliance updates
Disabled Releases
A disabled release cannot have its bundle selected during bundle resolution, but can be skipped so long as it is not required.
{
"disabled": true,
"description": "Known issue - disabled pending fix"
}
Common Use Cases:
- Problematic releases
- Temporary rollback scenarios
- Testing specific update paths
Availability Controls
The latest release in a release channel can optionally constrain its availability via scheduling and phasing for more precise and gradual rollouts.
Scheduling
Schedule releases for immediate or future deployment:
{
"schedule_date": "2024-02-01T00:00:00Z",
"description": "Scheduled for February maintenance window"
}
Scheduling States:
- Scheduled: Release date is in the future
- Available: Schedule date has passed
- Immediate: No schedule date specified
Phasing
Control gradual rollout to limit risk and monitor deployment health:
Tag-Based Phasing
Only devices with specific tags can receive the release:
{
"phase_mode": "tags",
"phase_tags": ["beta", "early-adopter"],
"description": "Beta testing phase"
}
Numeric Phasing
Limit the number or percentage of devices:
// Percentage-based (20% of cohort)
{
"phase_mode": "numeric",
"phase_value": 0.2,
"description": "20% canary deployment"
}
// Count-based (first 100 devices)
{
"phase_mode": "numeric",
"phase_value": 100,
"description": "Limited to 100 devices"
}
Phasing Rules:
- Decimal values
[0.0, 1.0]
are treated as percentages - Integer values
>= 2
are treated as device counts - Phase value of
1.0
or100%
means fully deployed
For details about how release availability can impact your ability to create new latest releases, see the only-sinks-constrain-availability release channel rule.
Creating Releases
Prerequisites
- Existing cohort with devices
- Bundle ready for deployment
- Appropriate permissions
Via Web Console
- Navigate to Cohorts > Select Cohort > Releases
- Click "Create Release"
- Select bundle to deploy
- Configure version and requirements
- Set availability options
- Review and create
Via CLI
# Basic release
peridio releases create \
--cohort-prn "prn:1:org-uuid:cohorts:cohort-123" \
--bundle-prn "prn:1:org-uuid:bundles:bundle-456" \
--version "2.1.0" \
--version-requirement ">= 2.0.0"
# Phased release
peridio releases create \
--cohort-prn "prn:1:org-uuid:cohorts:cohort-123" \
--bundle-prn "prn:1:org-uuid:bundles:bundle-456" \
--version "2.1.0" \
--phase-mode numeric \
--phase-value 0.1
Via API
curl -X POST https://api.peridio.com/v2/releases \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"cohort_prn": "prn:1:org-uuid:cohorts:cohort-123",
"bundle_prn": "prn:1:org-uuid:bundles:bundle-456",
"version": "2.1.0",
"version_requirement": ">= 2.0.0",
"phase_mode": "numeric",
"phase_value": 0.2,
"schedule_date": "2024-02-01T00:00:00Z"
}'
Deployment Strategies
Canary Deployment
- Create release with small phase value (5-10%)
- Monitor metrics and logs
- Gradually increase phase value
- Complete rollout at 100%
# Initial canary
peridio releases update \
--release-prn $RELEASE_PRN \
--phase-value 0.05
# Expand if successful
peridio releases update \
--release-prn $RELEASE_PRN \
--phase-value 0.25
# Continue expansion
peridio releases update \
--release-prn $RELEASE_PRN \
--phase-value 0.50
# Complete rollout
peridio releases update \
--release-prn $RELEASE_PRN \
--phase-value 1.0
Blue-Green Deployment
- Create "blue" cohort with current release
- Create "green" cohort with new release
- Move devices between cohorts
- Rollback by moving devices back if needed
Rolling Updates
- Use tag-based phasing for device groups
- Update tags progressively
- Monitor each group before proceeding
// Phase 1: Development devices
{
"phase_tags": ["dev"]
}
// Phase 2: Add staging
{
"phase_tags": ["dev", "staging"]
}
// Phase 3: Add production
{
"phase_tags": ["dev", "staging", "prod"]
}
Monitoring and Rollback
Health Monitoring
Track key metrics during deployment:
- Device check-in rates
- Update success/failure ratios
- Error logs and crash reports
- Performance metrics
- User feedback
Automatic Rollback
Configure failure thresholds:
{
"failure_threshold": 0.05, // 5% failure rate
"failure_count": 10, // Or 10 absolute failures
"auto_rollback": true
}
Manual Rollback
Options for reverting deployments:
- Disable the problematic release
- Create new release with previous bundle
- Use bundle override for affected devices
- Move devices to different cohort
Best Practices
Version Management
- Use Semantic Versioning: Follow SemVer principles consistently
- Document Requirements: Clear version requirements prevent conflicts
- Plan Upgrade Paths: Design clear progression through versions
- Test Compatibility: Verify version requirements work as expected
Phasing Strategy
- Start Small: Begin with 1-5% for critical updates
- Monitor Actively: Watch metrics before expanding
- Use Tags Wisely: Leverage tags for logical device groups
- Document Phases: Track what each phase represents
Release Planning
- Schedule Appropriately: Consider timezone and usage patterns
- Communicate Changes: Notify users of scheduled updates
- Maintain Rollback Plans: Always have a reversal strategy
- Track Dependencies: Document inter-release dependencies
Safety Measures
- Required Releases: Use sparingly for critical updates
- Gradual Rollouts: Default to phased deployments
- Health Checks: Implement device health reporting
- Audit Trails: Log all release operations
Troubleshooting
Common Issues
Devices Not Receiving Updates
- Verify device cohort membership
- Check release availability constraints
- Review version requirements
- Confirm bundle resolution path
Phasing Not Working
- Ensure phase mode is correctly set
- Verify phase value is valid
- Check device count in cohort
- Review device tags for tag-based phasing
Version Conflicts
- Validate version requirement syntax
- Check for circular dependencies
- Review release channel ordering
- Verify bundle compatibility
Rollback Issues
- Confirm previous release is not disabled
- Check version requirements allow rollback
- Verify devices can reach previous version
- Review required release constraints
Advanced Topics
Complex Version Requirements
// Multiple constraints
{
"version_requirement": ">= 2.0.0 and < 3.0.0 and != 2.5.0"
}
// Pre-release versions
{
"version": "3.0.0-beta.1",
"version_requirement": ">= 3.0.0-alpha"
}
Multi-Stage Deployments
Coordinate releases across multiple cohorts:
- Deploy to development cohort
- Promote to staging after validation
- Phase into production cohorts
- Maintain version synchronization
Release Automation
Integrate with CI/CD pipelines:
# Example GitHub Actions workflow
- name: Create Peridio Release
run: |
peridio releases create \
--cohort-prn ${{ secrets.COHORT_PRN }} \
--bundle-prn ${{ env.BUNDLE_PRN }} \
--version ${{ github.ref_name }} \
--phase-value 0.1
API Reference
For detailed API documentation, see: