This document describes the release process for the OpenSearch Index Manager plugin.
- Overview
- Versioning
- Release Process
- CI/CD Pipeline
- Manual Release
- GitHub Package Registry
- Troubleshooting
The plugin follows Semantic Versioning (SemVer) and supports multiple OpenSearch Dashboards (OSD) versions simultaneously. Each release produces plugin artifacts for all supported OSD versions (currently 2.19.0 through 2.19.4).
| OSD Version | Node.js Version | Status |
|---|---|---|
| 2.19.0 | 18.19.0 | ✅ Supported |
| 2.19.1 | 18.19.0 | ✅ Supported |
| 2.19.2 | 18.19.0 | ✅ Supported |
| 2.19.3 | 18.19.0 | ✅ Supported |
| 2.19.4 | 18.19.0 | ✅ Supported |
MAJOR.MINOR.PATCH[-prerelease][+build]
- MAJOR: Breaking changes
- MINOR: New features (backward compatible)
- PATCH: Bug fixes (backward compatible)
- prerelease: Pre-release versions (e.g.,
beta.1,rc.1)
| Version | Type | Description |
|---|---|---|
1.0.0 |
Stable | First stable release |
1.1.0 |
Stable | New features added |
1.1.1 |
Stable | Bug fixes |
2.0.0-beta.1 |
Pre-release | Beta version for v2.0.0 |
1.2.0-rc.1 |
Pre-release | Release candidate |
The recommended way to create a release is by pushing a git tag, which triggers the CI/CD pipeline:
# 1. Ensure you're on the main branch and up to date
git checkout main
git pull origin main
# 2. Update version in package.json (if not already done)
npm version 1.0.0 --no-git-tag-version
# 3. Commit version bump
git add opensearch_index_manager/package.json
git commit -m "chore(release): prepare v1.0.0"
# 4. Create and push a tag
git tag -a v1.0.0 -m "Release v1.0.0"
git push origin main
git push origin v1.0.0The CI/CD pipeline will:
- Build the plugin for all OSD versions
- Run integration tests
- Create a GitHub Release with all artifacts
- Generate release notes
For more control over the release process, use the provided scripts:
# 1. Prepare release artifacts
./scripts/ci/prepare-release.sh 1.0.0
# 2. This creates artifacts in ./release/ directory
# Review the generated files
# 3. Create a git tag
git tag -a v1.0.0 -m "Release v1.0.0"
git push origin v1.0.0
# 4. Upload artifacts to GitHub Release manually
# Or trigger the CI/CD pipeline# Create a draft release
./scripts/ci/prepare-release.sh 1.0.0 --draft
# Create a pre-release
./scripts/ci/prepare-release.sh 2.0.0-beta.1 --prerelease
# Use existing artifacts (skip build)
./scripts/ci/prepare-release.sh 1.0.0 --skip-build --artifacts-dir ./existing-builds
# Add custom release notes
./scripts/ci/prepare-release.sh 1.0.0 --notes "Added new features X, Y, Z"
# Sign artifacts with GPG
./scripts/ci/prepare-release.sh 1.0.0 --sign| Workflow | File | Trigger | Purpose |
|---|---|---|---|
| CI/CD | .github/workflows/ci-cd.yml |
Push, PR, Tags, Manual | Main pipeline: build, test, release |
| PR Checks | .github/workflows/pr-checks.yml |
Pull requests | Quick validation on PRs |
| Nightly | .github/workflows/nightly.yml |
Schedule (02:00 UTC), Manual | Nightly builds and security scans |
┌─────────────────────────────────────────────────────────────────┐
│ CI/CD Pipeline │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ │
│ │ Lint & Type │ │
│ │ Check │ │
│ └──────┬───────┘ │
│ │ │
│ ▼ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Build Matrix │───▶│ Integration │───▶│ Release │ │
│ │ (Parallel) │ │ Tests │ │ (Tags) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │
│ OSD Versions: 2.19.0, 2.19.1, 2.19.2, 2.19.3, 2.19.4 │
│ │
└─────────────────────────────────────────────────────────────────┘
Each OSD version is built in parallel:
| Job | OSD Version | Node.js | OS |
|---|---|---|---|
| build-2.19.0 | 2.19.0 | 18.19.0 | ubuntu-latest |
| build-2.19.1 | 2.19.1 | 18.19.0 | ubuntu-latest |
| build-2.19.2 | 2.19.2 | 18.19.0 | ubuntu-latest |
| build-2.19.3 | 2.19.3 | 18.19.0 | ubuntu-latest |
| build-2.19.4 | 2.19.4 | 18.19.0 | ubuntu-latest |
# Via GitHub CLI
gh workflow run ci-cd.yml --ref main
# With parameters
gh workflow run ci-cd.yml \
--ref main \
-f osd_version=2.19.0 \
-f skip_tests=false \
-f release_draft=true| Element | Format | Example |
|---|---|---|
| Package Name | opensearch_index_manager |
opensearch_index_manager |
| Version Tag | v{version}-osd-{osd_version} |
v1.0.0-osd-2.19.0 |
| Container | ghcr.io/OWNER/opensearch_index_manager |
ghcr.io/myorg/opensearch_index_manager |
To authenticate with GitHub Package Registry:
# Using personal access token
export CR_PAT=YOUR_GITHUB_TOKEN
echo $CR_PAT | podman login ghcr.io -u USERNAME --password-stdin# Install specific version
./bin/opensearch-dashboards-plugin install \
https://github.com/OWNER/REPO/releases/download/v1.0.0/opensearch_index_manager-1.0.0-osd-2.19.0.zipUse this checklist before creating a release:
- All tests passing locally
- Version updated in
package.json -
CHANGELOG.mdupdated with changes - Documentation updated (if needed)
- Breaking changes documented (if any)
- Version compatibility matrix checked
- No critical security vulnerabilities (
yarn audit) - Git tag follows format
v{version}
- Marked as pre-release in GitHub
- Version includes prerelease identifier (e.g.,
-beta.1) - Clearly documented as unstable/testing
- GitHub Release created with artifacts
- Release notes published
- Checksums verified
- Installation instructions tested
- Announcement sent (if applicable)
# Clear yarn cache
yarn cache clean
# Retry with verbose output
yarn osd bootstrap --verbose# Increase Node.js memory limit
export NODE_OPTIONS="--max-old-space-size=4096"# Verify artifacts exist
ls -la build/*.zip
# Check artifact size
find build -name "*.zip" -size +1M# Run tests locally with verbose output
./scripts/ci/run-integration-tests.sh --verbose --keep-containers
# Check container logs
podman logs opensearch-dashboardsIf the OSD version matrix needs updating:
- Edit
.github/osd-versions.json - Update version list and any related metadata
- Test builds for new versions
- Update this documentation
| Script | Purpose | Usage |
|---|---|---|
scripts/ci/build-for-version.sh |
Build for specific OSD version | ./build-for-version.sh 2.19.0 |
scripts/ci/run-integration-tests.sh |
Run integration tests | ./run-integration-tests.sh |
scripts/ci/prepare-release.sh |
Prepare release artifacts | ./prepare-release.sh 1.0.0 |
For issues with the release process:
- Check the CI/CD workflow logs
- Review this documentation
- Open an issue with:
- Release version
- Error messages
- Workflow run URL
- Steps to reproduce
Last updated: 2024