diff --git a/scripts/release-stable.sh b/scripts/release-stable.sh index 7c6807d..32da184 100755 --- a/scripts/release-stable.sh +++ b/scripts/release-stable.sh @@ -29,11 +29,31 @@ CYAN='\033[0;36m' NC='\033[0m' # Configuration -GITEA_REMOTE="gitea" -GITHUB_REMOTE="origin" +GITEA_REMOTE_DEFAULT="gitea" +GITHUB_REMOTE_DEFAULT="origin" GITEA_API_URL="https://git.sovransystems.com/api/v1" CHANGELOG_FILE="CHANGELOG.md" +# Auto-detect remotes +detect_remote() { + local preferred="$1" + local keyword="$2" + if git remote | grep -q -x "$preferred"; then + echo "$preferred" + return + fi + local found + found=$(git remote -v | grep -i "$keyword" | head -n 1 | awk '{print $1}') + if [[ -n "$found" ]]; then + echo "$found" + return + fi + echo "$preferred" +} + +GITEA_REMOTE=$(detect_remote "$GITEA_REMOTE_DEFAULT" "sovransystems\|gitea") +GITHUB_REMOTE=$(detect_remote "$GITHUB_REMOTE_DEFAULT" "github") + echo -e "${BLUE}╔════════════════════════════════════════════════════════════╗${NC}" echo -e "${BLUE}║ Sovran_SystemsOS Automated Stable Release Script ║${NC}" echo -e "${BLUE}╚════════════════════════════════════════════════════════════╝${NC}" @@ -135,11 +155,16 @@ if [[ ! "$confirm" =~ ^[Yy]$ ]]; then fi # ───────────────────────────────────────────────────────────────────────────── -# Step 1: Push main to stable +# Step 1: Push tested code to Gitea (stable & staging-dev) # ───────────────────────────────────────────────────────────────────────────── echo -echo -e "${BLUE}Step 1: Pushing main → stable on Gitea...${NC}" -git push "${GITEA_REMOTE}" main:stable --force-with-lease +echo -e "${BLUE}Step 1: Pushing tested code to Gitea (stable & staging-dev)...${NC}" +if git remote | grep -q -x "${GITEA_REMOTE}"; then + git push "${GITEA_REMOTE}" HEAD:stable --force-with-lease || echo -e " ${YELLOW}⚠ Push to ${GITEA_REMOTE} (stable) failed.${NC}" + git push "${GITEA_REMOTE}" HEAD:staging-dev --force-with-lease || echo -e " ${YELLOW}⚠ Push to ${GITEA_REMOTE} (staging-dev) failed.${NC}" +else + echo -e " ${YELLOW}⚠ Remote '${GITEA_REMOTE}' not found in git — skipping Gitea push.${NC}" +fi # ───────────────────────────────────────────────────────────────────────────── # Step 2: Create annotated tag @@ -149,9 +174,17 @@ echo -e "${BLUE}Step 2: Creating annotated tag ${TAG}...${NC}" git tag -a "${TAG}" -m "${RELEASE_MESSAGE} - Stable release of Sovran_SystemsOS -- See CHANGELOG.md for full details" +- See CHANGELOG.md for full details" || true -git push "${GITEA_REMOTE}" "${TAG}" +if git remote | grep -q -x "${GITEA_REMOTE}"; then + git push "${GITEA_REMOTE}" "${TAG}" || echo -e " ${YELLOW}⚠ Tag push to ${GITEA_REMOTE} failed.${NC}" +else + echo -e " ${YELLOW}⚠ Remote '${GITEA_REMOTE}' not found in git — skipping Gitea tag push.${NC}" +fi + +if git remote | grep -q -x "${GITHUB_REMOTE}"; then + git push "${GITHUB_REMOTE}" "${TAG}" || echo -e " ${YELLOW}⚠ Tag push to ${GITHUB_REMOTE} failed.${NC}" +fi # Update VERSION file for ISO builds echo "${VERSION}" > VERSION @@ -199,6 +232,7 @@ if [ -f "$CHANGELOG_FILE" ]; then } { print } ' "$CHANGELOG_FILE" > "${CHANGELOG_FILE}.tmp" && mv "${CHANGELOG_FILE}.tmp" "$CHANGELOG_FILE" + rm -f "${CHANGELOG_FILE}.bak" echo -e " ${GREEN}✓${NC} CHANGELOG.md updated with new section for ${TAG}" else @@ -215,11 +249,24 @@ else # Ask if user wants to push echo - read -rp "Push the changelog commit to GitHub now? (y/N): " push_confirm + read -rp "Push the changelog commit to GitHub (main) and Gitea (staging-dev) now? (y/N): " push_confirm if [[ "$push_confirm" =~ ^[Yy]$ ]]; then - echo -e "${BLUE}Pushing changelog commit...${NC}" - git push "${GITHUB_REMOTE}" main - echo -e " ${GREEN}✓${NC} Changelog pushed to GitHub" + if git remote | grep -q -x "${GITHUB_REMOTE}"; then + echo -e "${BLUE}Pushing changelog commit to GitHub main...${NC}" + if git push "${GITHUB_REMOTE}" HEAD:main; then + echo -e " ${GREEN}✓${NC} Changelog pushed to GitHub main (${GITHUB_REMOTE})" + else + echo -e " ${YELLOW}⚠ Push to GitHub main failed — verify credentials or remote name.${NC}" + fi + fi + if git remote | grep -q -x "${GITEA_REMOTE}"; then + echo -e "${BLUE}Pushing changelog commit to Gitea staging-dev...${NC}" + if git push "${GITEA_REMOTE}" HEAD:staging-dev; then + echo -e " ${GREEN}✓${NC} Changelog pushed to Gitea staging-dev (${GITEA_REMOTE})" + else + echo -e " ${YELLOW}⚠ Push to Gitea staging-dev failed.${NC}" + fi + fi else echo " (Changelog commit left local — remember to push later)" fi @@ -296,7 +343,7 @@ echo -e "${GREEN}╚════════════════════ echo echo "Next manual steps (recommended):" echo " • Review and enhance the new section in CHANGELOG.md" -echo " • Push the changelog commit: git push origin main" +echo " • Push changes: git push ${GITHUB_REMOTE} HEAD:main && git push ${GITEA_REMOTE} HEAD:staging-dev" echo " • Verify releases on both GitHub and Gitea" echo echo -e "${CYAN}Tag created: ${TAG}${NC}"