Container Releases
Warning
Container-Only Releases
This documentation covers container releases only. Many NL-BIOMERO containers depend on underlying libraries that have their own separate release cycles and repositories.
Before releasing containers, ensure all dependent libraries are released first:
BIOMERO Library - Release new version, then update
BIOMERO_VERSION
in.env
OMERO Plugins (OMERO.biomero, OMERO.forms, etc.) - Release plugin, then update Dockerfile references
OMERO ADI - Independent releases with own container builds
Other Dependencies - Update base image versions, library versions, etc.
Example workflow:
Release BIOMERO library v2.1.0
Update NL-BIOMERO
.env
withBIOMERO_VERSION=v2.1.0
Update relevant Dockerfiles (server, web) with new library versions or requirements
Release NL-BIOMERO containers to build and distribute the updated images
This section covers the release process for NL-BIOMERO containers, including versioning, building, and distribution.
Release Overview
NL-BIOMERO uses an automated GitHub Actions workflow to build and publish Docker containers to Docker Hub upon each release. The containers are published to the cellularimagingcf organization.
Release Workflow
Container Build Automation
- Main Repository (NL-BIOMERO)
Trigger: GitHub release creation via the GitHub web interface
Action: Automated Docker build and push to Docker Hub
Containers Built: Most NL-BIOMERO containers (omeroserver, omeroweb, biomeroworker, etc.)
Registry: Docker Hub - cellularimagingcf
- OMERO ADI Submodule
Repository: Separate repository (included as submodule)
Versioning: Independent release cycle
Action: Has its own GitHub Actions workflow
Coordination: Update submodule reference in NL-BIOMERO when needed
Typical Release Process
Update Dependencies
Update underlying library versions in relevant files:
# Example: Update BIOMERO version # Edit .env file: BIOMERO_VERSION=v2.1.0 # Example: Update other dependencies in Dockerfiles # server/Dockerfile, web/Dockerfile, etc.
Test Changes
Build and test locally before releasing:
# Build specific container docker-compose -f docker-compose-dev.yml build omeroserver # Test the full stack docker-compose -f docker-compose-dev.yml up -d
Create GitHub Release
Go to GitHub Releases page
Click “Create a new release”
Follow versioning guidelines (see below)
Write release notes describing changes
Mark as pre-release if applicable
Monitor Build Process
GitHub Actions will automatically trigger
Monitor the build process in the Actions tab
Verify containers are published to Docker Hub
Update Documentation
Update relevant documentation
Announce significant releases (see Communication section)
Versioning Guidelines
Semantic Versioning
NL-BIOMERO follows Semantic Versioning (MAJOR.MINOR.PATCH):
- MAJOR (e.g., 1.0.0 → 2.0.0)
Breaking changes that are not backward compatible
Significant architectural changes
API changes that require user intervention
- MINOR (e.g., 1.0.0 → 1.1.0)
New optional features
New functionality that doesn’t break existing workflows
New container services or plugins
- PATCH (e.g., 1.0.0 → 1.0.1)
Bug fixes
Security updates
Required feature updates that maintain compatibility
Pre-release Versions
For development and testing versions:
- Alpha Releases
Format:
1.0.0-alpha.1
,1.0.0-alpha.2
Early development, may have significant issues
Internal testing only
Mark as “Pre-release” in GitHub to prevent becoming “latest”
- Beta Releases
Format:
1.0.0-beta.1
,1.0.0-beta.2
Feature-complete but may have bugs
Ready for broader testing
Mark as “Pre-release” in GitHub to prevent becoming “latest”
- Release Candidates
No, beta is a release candidate
Release Examples
# Stable releases
v1.0.0 - Initial stable release
v1.1.0 - Added new BIOMERO workflows
v1.1.1 - Fixed import bug
v2.0.0 - Major UI overhaul (breaking changes)
# Pre-releases
v2.0.0-alpha.1 - Early development of v2.0
v2.0.0-beta.1 - Feature-complete v2.0 for testing
Dependency Management
Library Updates
- BIOMERO Library
BIOMERO releases new version (separate repository)
Update
BIOMERO_VERSION
in.env
fileTest integration with new BIOMERO version
Release new NL-BIOMERO version to build updated containers
- OMERO Plugins
Plugin releases new version (e.g., OMERO.biomero, OMERO.forms)
Update version in relevant Dockerfile
Test plugin integration
Release new NL-BIOMERO version
- Base Images
Monitor for security updates to base images (OMERO, PostgreSQL, etc.)
Update base image versions in Dockerfiles
Test compatibility
Release updated containers
Example Dependency Update
# 1. BIOMERO releases v2.1.0
# 2. Update NL-BIOMERO .env file:
BIOMERO_VERSION=v2.1.0
# 3. Test locally
docker-compose -f docker-compose-dev.yml build
docker-compose -f docker-compose-dev.yml up -d
# 4. Create release v1.2.0 on GitHub
# 5. GitHub Actions builds and publishes containers
OMERO ADI Submodule
Special Handling
The OMERO ADI component is managed as a Git submodule with independent versioning:
- Separate Repository
Repository: OMERO-Automated-Data-Import
Independent versioning and release cycle
Own GitHub Actions for container building
- Submodule Updates
OMERO ADI releases new version independently
Update submodule reference in NL-BIOMERO:
cd omeroadi git fetch origin git checkout v1.x.x # Latest ADI release cd .. git add omeroadi git commit -m "Update OMERO ADI to v1.x.x"
Release new NL-BIOMERO version if ADI changes affect the platform
- Coordination
Most releases don’t require ADI updates
Update ADI submodule only when necessary
Test integration when updating submodule reference
Docker Hub Management
Container Registry
Organization: cellularimagingcf
- Published Containers:
cellularimagingcf/omeroserver
cellularimagingcf/omeroworker
cellularimagingcf/omeroweb
cellularimagingcf/biomero
cellularimagingcf/omeroadi
(from separate repo)
- Tagging Strategy:
latest
- Latest stable release, but preferably use specific version tagsvX.Y.Z
- Specific version tags (e.g., v1.2.3)vX.Y
- Minor version tags, updated with latest patch (e.g., v1.2)Pre-releases do not update
latest
tag
Repository Management
- Automated Publishing
GitHub Actions handles all container publishing
No manual Docker Hub interactions needed
Credentials managed via GitHub Secrets
- Tag Management
Stable releases automatically tagged as
latest
Pre-releases (alpha, beta, rc) maintain separate tags
Version-specific tags are always created
Communication & Announcements
Release Communication
Significant Releases (major versions, important features):
NVVM Slack - Internal team communication
📢 NL-BIOMERO v2.0.0 Released! Major updates: • New React-based UI via OMERO.biomero plugin • Enhanced BIOMERO workflow integration • Breaking changes: see migration guide Release notes: https://github.com/Cellular-Imaging-Amsterdam-UMC/NL-BIOMERO/releases/tag/v2.0.0
Image.sc Forum - Community announcements
Post in appropriate categories: - Announcements Tag with e.g. - BIOMERO - OMERO - BIAFLOWS
- Patch Releases (bug fixes):
GitHub release notes sufficient
Internal notification if critical fixes
Release Notes Template
## What's Changed
### 🚀 New Features
- Added new BIOMERO workflow XYZ
- Enhanced web interface with React components
### 🐛 Bug Fixes
- Fixed import issue with large datasets
- Resolved Metabase dashboard loading
### 📚 Documentation
- Updated deployment guide
- Added developer container documentation
### ⚠️ Breaking Changes
- Configuration format changed (see migration guide)
- Deprecated old API endpoints
### 🔧 Dependencies
- Updated BIOMERO to v2.1.0
- Updated OMERO base images to 5.6.17
**Full Changelog**: https://github.com/.../compare/v1.0.0...v2.0.0
Troubleshooting Releases
Common Issues
- Build Failures
Check GitHub Actions logs
Verify Dockerfile syntax
Test local builds before releasing
- Dependency Conflicts
Update dependency versions incrementally
Test each dependency update separately
Use development environment for testing
- Docker Hub Issues
Verify GitHub Secrets are configured
Check Docker Hub organization permissions
Monitor Docker Hub service status
Emergency Releases
For critical security fixes or major bugs:
Create hotfix branch from latest stable tag
Apply minimal fix (avoid feature additions)
Test thoroughly but expedite process
Release as patch version (increment PATCH number)
Communicate urgency in release notes and announcements
Best Practices
Release Checklist
Before creating a release:
□ All dependencies updated and tested
□ Local build and testing completed
□ Documentation updated for new features
□ Migration guide written (if breaking changes)
□ Release notes prepared
□ Version number follows semantic versioning
□ Pre-release marked appropriately (if applicable)
Release Quality
Test thoroughly before releasing
Use development environment for pre-release testing
Coordinate with team for major releases
Monitor post-release for issues
Be prepared to create hotfix releases if needed