Skip to content

celestial_navigatin 2.8.16.0 - #1421

Merged
bdbcat merged 1 commit into
OpenCPN:masterfrom
rgleason:master
Oct 1, 2026
Merged

bdbcat merged 1 commit into
OpenCPN:masterfrom
rgleason:master

Conversation

@rgleason

@rgleason rgleason commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

aLSO REMOVED OLD ONES.

Dave, I need to have fetch-xml.sh added to the scripts, and I will have some others eventually to ease CI. How can I get that added?

@bdbcat

bdbcat commented Oct 1, 2026

Copy link
Copy Markdown
Member

what does fetch-xml.sh do?

@bdbcat
bdbcat merged commit 4e2255d into OpenCPN:master Oct 1, 2026
2 checks passed
@rgleason

rgleason commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor Author

Dave,
I have a series of scripts which will be strung together into a full CI app for publishing.
This first one Fetches all the XML's from Cloudsmith/[plugin] [version] [prod, beta, alpha] into master branch (or beta or alpha)
The other ones which I have not tested completely yet

Here is the orchestrater script, you can see what each sub-script does.
I have a better more sophisticated "Sync with upstream" which syncs all branches and allows the script files in master branch root to remain.

PS The problem is with a new Cloudsmith CLI (1.20) the old download_xml.sh does not work, (at least that is my experience)


#!/usr/bin/env bash
# =============================================================================
# run-metadata-pipeline.sh
# OpenCPN Full Metadata Pipeline Orchestrator
#
# Usage:
#   ./run-metadata-pipeline.sh <PACKAGE> <VERSION> <OWNER> <REPO>
#
# Or via environment variables:
#   PACKAGE=opencpn-plugin-foo VERSION=1.2.3 OWNER=myorg REPO=my-plugin \
#     ./run-metadata-pipeline.sh
#
# Override the scripts directory if it differs from this file's location:
#   SCRIPTS_DIR=/path/to/scripts ./run-metadata-pipeline.sh ...
# =============================================================================

set -euo pipefail

RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'
CYAN='\033[0;36m'; BOLD='\033[1m'; RESET='\033[0m'

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SCRIPTS_DIR="${SCRIPTS_DIR:-$SCRIPT_DIR}"

PACKAGE="${1:-${PACKAGE:-}}"
VERSION="${2:-${VERSION:-}}"
OWNER="${3:-${OWNER:-}}"
REPO="${4:-${REPO:-}}"

TOTAL_STEPS=12
STEP=0
FAILED_STEPS=()

log_step() { echo -e "\n${CYAN}${BOLD}[STEP $1/$TOTAL_STEPS] $2${RESET}\n${CYAN}$(printf '─%.0s' {1..70})${RESET}"; }
log_ok()   { echo -e "${GREEN}✔  $*${RESET}"; }
log_warn() { echo -e "${YELLOW}⚠  $*${RESET}"; }
log_err()  { echo -e "${RED}✘  $*${RESET}" >&2; }

run_script() {
    local script="$SCRIPTS_DIR/$1"; shift
    [[ -f "$script" ]] || { log_err "Script not found: $script"; exit 1; }
    [[ -x "$script" ]] || { log_warn "chmod +x $script"; chmod +x "$script"; }
    bash "$script" "$@"
}

safe_run() {
    local label="$1"; shift
    if run_script "$@"; then
        log_ok "$label completed."
    else
        log_err "$label FAILED."
        FAILED_STEPS+=("$label")
        [[ "${PIPELINE_ABORT_ON_ERROR:-false}" == "true" ]] && exit 1
    fi
}

# ── Banner ──────────────────────────────────────────────────────────────────
echo -e "\n${BOLD}╔══════════════════════════════════════════════════════════════════════╗"
echo -e "║         OpenCPN Metadata Pipeline — Full Orchestrator                ║"
echo -e "╚══════════════════════════════════════════════════════════════════════╝${RESET}"
printf "  %-10s : %s\n" "PACKAGE" "$PACKAGE" "VERSION" "$VERSION" \
                         "OWNER"   "$OWNER"   "REPO"    "$REPO" \
                         "SCRIPTS" "$SCRIPTS_DIR" "START" "$(date '+%Y-%m-%d %H:%M:%S %Z')"

# ── Preflight ────────────────────────────────────────────────────────────────
[[ -z "$PACKAGE" || -z "$VERSION" || -z "$OWNER" || -z "$REPO" ]] && {
    log_err "Missing required parameters."
    echo "Usage: $0 <PACKAGE> <VERSION> <OWNER> <REPO>"
    exit 1
}
export PACKAGE VERSION OWNER REPO

git rev-parse --git-dir &>/dev/null || { log_err "Not inside a git repository."; exit 1; }
GIT_ROOT="$(git rev-parse --show-toplevel)"
log_ok "Git root: $GIT_ROOT"

# ── STEP 1  Sync with upstream ───────────────────────────────────────────────
STEP=$(( STEP + 1 )); log_step $STEP "Sync with upstream"
CURRENT_BRANCH="$(git rev-parse --abbrev-ref HEAD)"
git fetch --prune upstream 2>/dev/null || git fetch --prune origin
git rebase upstream/master 2>/dev/null || git rebase origin/master \
    || log_warn "Rebase skipped — nothing to rebase or conflicts detected."
log_ok "Branch: $CURRENT_BRANCH"

# ── STEP 2  Fetch XML metadata ───────────────────────────────────────────────
STEP=$(( STEP + 1 )); log_step $STEP "Fetch XML metadata"
safe_run "fetch-xml" "fetch-xml.sh" "$PACKAGE" "$VERSION" "$OWNER" "$REPO"

# ── STEP 3  Metadata review ──────────────────────────────────────────────────
STEP=$(( STEP + 1 )); log_step $STEP "Metadata review"
safe_run "metadata-review" "metadata-review.sh" "$PACKAGE" "$VERSION"

# ── STEP 4  Metadata diff ────────────────────────────────────────────────────
STEP=$(( STEP + 1 )); log_step $STEP "Metadata diff"
safe_run "metadata-diff" "metadata-diff.sh" "$PACKAGE" "$VERSION"

# ── STEP 5  Plugin manifest validation ──────────────────────────────────────
STEP=$(( STEP + 1 )); log_step $STEP "Plugin manifest validation"
safe_run "plugin-manifest-validator" "plugin-manifest-validator.sh" "$PACKAGE" "$VERSION"

# ── STEP 6  Cloudsmith tarball check ────────────────────────────────────────
STEP=$(( STEP + 1 )); log_step $STEP "Cloudsmith tarball check"
safe_run "cloudsmith-tarball-check" "cloudsmith-tarball-check.sh" "$PACKAGE" "$VERSION" "$OWNER" "$REPO"

# ── STEP 7  Metadata XML lint ────────────────────────────────────────────────
STEP=$(( STEP + 1 )); log_step $STEP "Metadata XML lint"
safe_run "metadata-lint" "metadata-lint.sh" "$PACKAGE" "$VERSION"

# ── STEP 8  Archive older metadata to beta ───────────────────────────────────
STEP=$(( STEP + 1 )); log_step $STEP "Archive older metadata → beta"
safe_run "metadata-archive" "metadata-archive.sh" "$PACKAGE" "$VERSION"

# ── STEP 9  Pre-commit validation ────────────────────────────────────────────
STEP=$(( STEP + 1 )); log_step $STEP "Pre-commit validation"
safe_run "pre-commit-validate" "pre-commit-validate.sh"

# ── STEP 10  Commit ──────────────────────────────────────────────────────────
STEP=$(( STEP + 1 )); log_step $STEP "Commit updated metadata"
COMMIT_MSG="${COMMIT_MSG:-"chore: update ${PACKAGE} metadata to ${VERSION}"}"
if git diff --cached --quiet && git diff --quiet; then
    log_warn "No changes to commit."
else
    git add -A
    git commit -m "$COMMIT_MSG"
    log_ok "Committed: $COMMIT_MSG"
fi

# ── STEP 11  Push ────────────────────────────────────────────────────────────
STEP=$(( STEP + 1 )); log_step $STEP "Push to origin"
git push origin "$CURRENT_BRANCH" --set-upstream
log_ok "Pushed $CURRENT_BRANCH → origin."

# ── STEP 12  Create PR ───────────────────────────────────────────────────────
STEP=$(( STEP + 1 )); log_step $STEP "Create pull request → OpenCPN/plugins"
safe_run "pr-create" "pr-create.sh" "$PACKAGE" "$VERSION" "$OWNER" "$REPO"

# ── Summary ──────────────────────────────────────────────────────────────────
echo -e "\n${BOLD}╔══════════════════════════════════════════════════════════════════════╗"
echo -e "║                        Pipeline Complete                             ║"
echo -e "╚══════════════════════════════════════════════════════════════════════╝${RESET}"
echo -e "  FINISH : $(date '+%Y-%m-%d %H:%M:%S %Z')"

if [[ ${#FAILED_STEPS[@]} -eq 0 ]]; then
    echo -e "\n  ${GREEN}${BOLD}All $TOTAL_STEPS steps passed.${RESET}\n"; exit 0
else
    echo -e "\n  ${RED}${BOLD}${#FAILED_STEPS[@]} step(s) failed:${RESET}"
    printf "    ${RED}• %s${RESET}\n" "${FAILED_STEPS[@]}"
    echo -e "\n  ${YELLOW}Review the output above and re-run failing steps individually.${RESET}\n"
    exit 1
fi

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants