Implements weekly upstream rebase cadence automation: - GitLab CI scheduled pipeline (every 6 hours) - Automatic GitHub release detection - JIRA ticket creation via API - Spec file updates with changelog - Automated MR creation with OSCI Bot integration - TEST_MODE support for safe testing Scripts: - check-upstream-release.sh: Poll GitHub API for new releases - create-release-mr.sh: Main automation orchestrator - update-spec.py: Safe spec file updater - create-jira.sh: JIRA API client - test-workflow.sh: Local testing utility Documentation: - scripts/README.md: Technical documentation - AUTOMATION-SETUP.md: Step-by-step setup guide
66 lines
1.7 KiB
Bash
Executable File
66 lines
1.7 KiB
Bash
Executable File
#!/bin/bash
|
|
# Check for new bootc releases on GitHub
|
|
# Outputs release.env file with NEW_RELEASE, VERSION, and RELEASE_TAG variables
|
|
|
|
set -euo pipefail
|
|
|
|
readonly GITHUB_API="https://api.github.com/repos/containers/bootc/releases/latest"
|
|
readonly SPEC_FILE="bootc.spec"
|
|
|
|
log_info() {
|
|
echo "[INFO] $*"
|
|
}
|
|
|
|
log_error() {
|
|
echo "[ERROR] $*" >&2
|
|
}
|
|
|
|
# Fetch latest release from GitHub
|
|
log_info "Fetching latest release from GitHub..."
|
|
LATEST_RELEASE=$(curl -sL "$GITHUB_API" | jq -r '.tag_name')
|
|
|
|
if [[ -z "$LATEST_RELEASE" ]] || [[ "$LATEST_RELEASE" == "null" ]]; then
|
|
log_error "Failed to fetch latest release from GitHub"
|
|
exit 1
|
|
fi
|
|
|
|
# Strip 'v' prefix from tag (e.g., v1.5.2 -> 1.5.2)
|
|
LATEST_VERSION="${LATEST_RELEASE#v}"
|
|
log_info "Latest upstream release: $LATEST_VERSION ($LATEST_RELEASE)"
|
|
|
|
# Get current version from spec file
|
|
if [[ ! -f "$SPEC_FILE" ]]; then
|
|
log_error "Spec file not found: $SPEC_FILE"
|
|
exit 1
|
|
fi
|
|
|
|
CURRENT_VERSION=$(rpmspec -q --queryformat='%{version}\n' "$SPEC_FILE" 2>/dev/null | head -1)
|
|
|
|
if [[ -z "$CURRENT_VERSION" ]]; then
|
|
log_error "Failed to parse version from spec file"
|
|
exit 1
|
|
fi
|
|
|
|
log_info "Current spec version: $CURRENT_VERSION"
|
|
|
|
# Compare versions
|
|
if [[ "$LATEST_VERSION" != "$CURRENT_VERSION" ]]; then
|
|
log_info "New release detected: $CURRENT_VERSION -> $LATEST_VERSION"
|
|
cat > release.env <<EOF
|
|
NEW_RELEASE=true
|
|
VERSION=$LATEST_VERSION
|
|
RELEASE_TAG=$LATEST_RELEASE
|
|
CURRENT_VERSION=$CURRENT_VERSION
|
|
EOF
|
|
else
|
|
log_info "No new release (current: $CURRENT_VERSION)"
|
|
cat > release.env <<EOF
|
|
NEW_RELEASE=false
|
|
VERSION=$CURRENT_VERSION
|
|
RELEASE_TAG=$LATEST_RELEASE
|
|
CURRENT_VERSION=$CURRENT_VERSION
|
|
EOF
|
|
fi
|
|
|
|
cat release.env
|