259 lines
6.4 KiB
Markdown
259 lines
6.4 KiB
Markdown
---
|
|
name: Get Release Dates
|
|
description: Fetch OpenShift release dates and metadata from Sippy API
|
|
---
|
|
|
|
# Get Release Dates
|
|
|
|
This skill provides functionality to fetch OpenShift release information including GA dates and development start dates from the Sippy API.
|
|
|
|
## When to Use This Skill
|
|
|
|
Use this skill when you need to:
|
|
|
|
- Get GA (General Availability) date for a specific OpenShift release
|
|
- Find when development started for a release
|
|
- Identify the previous release in the sequence
|
|
- Validate if a release exists in Sippy
|
|
- Determine if a release is in development or has GA'd
|
|
|
|
## Prerequisites
|
|
|
|
1. **Python 3 Installation**
|
|
|
|
- Check if installed: `which python3`
|
|
- Python 3.6 or later is required
|
|
- Comes pre-installed on most systems
|
|
|
|
2. **Network Access**
|
|
|
|
- The script requires network access to reach the Sippy API
|
|
- Ensure you can make HTTPS requests to `sippy.dptools.openshift.org`
|
|
|
|
## Implementation Steps
|
|
|
|
### Step 1: Verify Prerequisites
|
|
|
|
First, ensure Python 3 is available:
|
|
|
|
```bash
|
|
python3 --version
|
|
```
|
|
|
|
If Python 3 is not installed, guide the user through installation for their platform.
|
|
|
|
### Step 2: Locate the Script
|
|
|
|
The script is located at:
|
|
|
|
```
|
|
plugins/component-health/skills/get-release-dates/get_release_dates.py
|
|
```
|
|
|
|
### Step 3: Run the Script
|
|
|
|
Execute the script with the release parameter:
|
|
|
|
```bash
|
|
# Get dates for release 4.21
|
|
python3 plugins/component-health/skills/get-release-dates/get_release_dates.py \
|
|
--release 4.21
|
|
|
|
# Get dates for release 4.20
|
|
python3 plugins/component-health/skills/get-release-dates/get_release_dates.py \
|
|
--release 4.20
|
|
```
|
|
|
|
### Step 4: Process the Output
|
|
|
|
The script outputs JSON data with the following structure:
|
|
|
|
```json
|
|
{
|
|
"release": "4.21",
|
|
"found": true,
|
|
"ga": "2026-02-17T00:00:00Z",
|
|
"development_start": "2025-09-02T00:00:00Z",
|
|
"previous_release": "4.20"
|
|
}
|
|
```
|
|
|
|
**Field Descriptions**:
|
|
|
|
- `release`: The release identifier that was queried
|
|
- `found`: Boolean indicating if the release exists in Sippy
|
|
- `ga`: GA (General Availability) date. **If null, the release is still in development.**
|
|
- `development_start`: When development started for this release
|
|
- `previous_release`: The previous release in the sequence (empty string if none)
|
|
|
|
**If Release Not Found**:
|
|
|
|
```json
|
|
{
|
|
"release": "99.99",
|
|
"found": false
|
|
}
|
|
```
|
|
|
|
**Release Status - Development vs GA'd**:
|
|
|
|
- **In Development**: If `ga` is `null`, the release is still under active development
|
|
```json
|
|
{
|
|
"release": "4.21",
|
|
"found": true,
|
|
"development_start": "2025-09-02T00:00:00Z",
|
|
"previous_release": "4.20"
|
|
}
|
|
```
|
|
- **GA'd (Released)**: If `ga` has a timestamp, the release has reached General Availability
|
|
```json
|
|
{
|
|
"release": "4.17",
|
|
"found": true,
|
|
"ga": "2024-10-01T00:00:00Z",
|
|
"development_start": "2024-05-17T00:00:00Z",
|
|
"previous_release": "4.16"
|
|
}
|
|
```
|
|
|
|
### Step 5: Use the Information
|
|
|
|
Based on the release dates:
|
|
|
|
1. **Determine release status**: Check if release is in development or GA'd
|
|
- If `ga` is `null`: Release is still in development
|
|
- If `ga` has a timestamp: Release has reached General Availability
|
|
2. **Determine release timeline**: Use `development_start` and `ga` dates
|
|
- Calculate time in development: `ga` - `development_start`
|
|
- For in-development releases: Calculate time since `development_start`
|
|
3. **Find related releases**: Use `previous_release` to navigate the release sequence
|
|
4. **Validate release**: Check `found` field before using the release in other operations
|
|
|
|
## Error Handling
|
|
|
|
The script handles several error scenarios:
|
|
|
|
1. **Network Errors**: If unable to reach Sippy API
|
|
|
|
```
|
|
Error: URL Error: [reason]
|
|
```
|
|
|
|
2. **HTTP Errors**: If API returns an error status
|
|
|
|
```
|
|
Error: HTTP Error 404: Not Found
|
|
```
|
|
|
|
3. **Invalid Release**: Script returns exit code 1 with `found: false` in output
|
|
|
|
4. **Parsing Errors**: If API response is malformed
|
|
```
|
|
Error: Failed to fetch release dates: [details]
|
|
```
|
|
|
|
## Output Format
|
|
|
|
The script outputs JSON to stdout with:
|
|
|
|
- **Success**: Exit code 0, JSON with `found: true`
|
|
- **Release Not Found**: Exit code 1, JSON with `found: false`
|
|
- **Error**: Exit code 1, error message to stderr
|
|
|
|
## API Details
|
|
|
|
The script queries the Sippy releases API:
|
|
|
|
- **URL**: https://sippy.dptools.openshift.org/api/releases
|
|
- **Method**: GET
|
|
- **Response**: JSON containing all releases and their metadata
|
|
|
|
The full API response includes:
|
|
|
|
- `releases`: Array of all available release identifiers
|
|
- `ga_dates`: Simple mapping of release to GA date
|
|
- `dates`: Detailed mapping with GA and development_start dates
|
|
- `release_attrs`: Extended attributes including previous release
|
|
|
|
## Examples
|
|
|
|
### Example 1: Get Current Development Release
|
|
|
|
```bash
|
|
python3 plugins/component-health/skills/get-release-dates/get_release_dates.py \
|
|
--release 4.21
|
|
```
|
|
|
|
Output:
|
|
|
|
```json
|
|
{
|
|
"release": "4.21",
|
|
"found": true,
|
|
"development_start": "2025-09-02T00:00:00Z",
|
|
"previous_release": "4.20"
|
|
}
|
|
```
|
|
|
|
### Example 2: Get GA'd Release
|
|
|
|
```bash
|
|
python3 plugins/component-health/skills/get-release-dates/get_release_dates.py \
|
|
--release 4.17
|
|
```
|
|
|
|
Output:
|
|
|
|
```json
|
|
{
|
|
"release": "4.17",
|
|
"found": true,
|
|
"ga": "2024-10-01T00:00:00Z",
|
|
"development_start": "2024-05-17T00:00:00Z",
|
|
"previous_release": "4.16"
|
|
}
|
|
```
|
|
|
|
### Example 3: Query Non-Existent Release
|
|
|
|
```bash
|
|
python3 plugins/component-health/skills/get-release-dates/get_release_dates.py \
|
|
--release 99.99
|
|
```
|
|
|
|
Output:
|
|
|
|
```json
|
|
{
|
|
"release": "99.99",
|
|
"found": false
|
|
}
|
|
```
|
|
|
|
Exit code: 1
|
|
|
|
## Integration with Other Commands
|
|
|
|
This skill can be used in conjunction with other component-health skills:
|
|
|
|
1. **Before analyzing regressions**: Verify the release exists
|
|
2. **Timeline context**: Understand how long a release has been in development
|
|
3. **Release status**: Determine if a release is in development or has GA'd
|
|
4. **Release navigation**: Find previous/next releases in the sequence
|
|
|
|
## Notes
|
|
|
|
- The script uses Python's standard library only (no external dependencies)
|
|
- API responses are cached by Sippy, so repeated calls are fast
|
|
- Release identifiers are case-sensitive (use "4.21" not "4.21.0")
|
|
- OKD releases are suffixed with "-okd" (e.g., "4.21-okd")
|
|
- ARO releases have special identifiers (e.g., "aro-production")
|
|
- "Presubmits" is a special release for pull request data
|
|
|
|
## See Also
|
|
|
|
- Skill Documentation: `plugins/component-health/skills/list-regressions/SKILL.md`
|
|
- Sippy API: https://sippy.dptools.openshift.org/api/releases
|
|
- Component Health Plugin: `plugins/component-health/README.md`
|