diff --git a/flow b/flow index 50e37e7..00f4fec 100755 --- a/flow +++ b/flow @@ -20,133 +20,124 @@ env() { # If not set, try to get it from kubectl GITEA_TOKEN=$(kubectl get secret -n cellular gitea-git -o jsonpath='{.data.token}' | base64 --decode) if [ -z "$GITEA_TOKEN" ]; then - echo -e "โŒ ${RED}GITEA_TOKEN is not set and couldn't be retrieved from kubectl${RESET}" >&2 - exit 1 + error "GITEA_TOKEN is not set and couldn't be retrieved from kubectl" >&2 + return 2 fi export GITEA_TOKEN fi - echo -e "๐Ÿ’ฐ ${GREEN}Environment variables set${RESET}" + success "Environment variables set" } pgrx-prepare() { - echo -e "${BLUE}Initializing pgrx...${RESET}" + info "Initializing pgrx..." # Explicitly point to the postgresql@${POSTGRES_VERSION} pg_config, don't rely on 'which' local POSTGRES_CONFIG_PATH="/opt/homebrew/opt/postgresql@${POSTGRES_VERSION}/bin/pg_config" if [ ! -x "$POSTGRES_CONFIG_PATH" ]; then - echo -e "${RED}Error: pg_config not found or not executable at $POSTGRES_CONFIG_PATH.${RESET}" - echo -e "${YELLOW}Ensure postgresql@${POSTGRES_VERSION} is installed correctly via Homebrew.${RESET}" - exit 1 + error "pg_config not found or not executable at $POSTGRES_CONFIG_PATH." + warning "Ensure postgresql@${POSTGRES_VERSION} is installed correctly via Homebrew." + return 2 fi if cargo pgrx init --pg"$POSTGRES_VERSION"="$POSTGRES_CONFIG_PATH"; then - echo -e "${GREEN}pgrx initialized successfully.${RESET}" + success "pgrx initialized successfully." else - echo -e "${RED}Failed to initialize pgrx. Check PostgreSQL development packages are installed and $POSTGRES_CONFIG_PATH is valid.${RESET}" - exit 1 + error "Failed to initialize pgrx. Check PostgreSQL development packages are installed and $POSTGRES_CONFIG_PATH is valid." + return 2 fi } build() { local version - version=$(get-version) || return 1 + version=$(get-version) || return $? local package_dir="./package" local tarball_name="${GITEA_REPOSITORY}.tar.gz" local tarball_path="${package_dir}/${tarball_name}" - echo -e "๐Ÿ“ฆ Creating source tarball v$version for ${GITEA_REPOSITORY} in $package_dir..." + info "Creating source tarball v$version for ${GITEA_REPOSITORY} in $package_dir..." # Clean previous package dir rm -rf "${package_dir}" mkdir -p "${package_dir}" # Create the source tarball excluding specified patterns - echo -e " ${CYAN}Creating tarball: ${tarball_path}${RESET}" + info "Creating tarball: ${tarball_path}" if tar --exclude='.git*' --exclude='./target' --exclude='./package' --exclude='./flows' --exclude='./flow' -czf "${tarball_path}" .; then - echo -e "โœจ ${GREEN}Successfully created source tarball: ${tarball_path}${RESET}" + success "Successfully created source tarball: ${tarball_path}" else - echo -e "โŒ ${RED}Failed to create source tarball.${RESET}" >&2 - return 1 + error "Failed to create source tarball." + return 2 fi } install() { local version - version=$(get-version) || return 1 + version=$(get-version) || return $? # Propagate error - echo -e "๐Ÿ”ง ${CYAN}Building and installing PGRX extension v$version into local PostgreSQL...${RESET}" + info "Building and installing PGRX extension v$version into local PostgreSQL..." # Run the pgrx install command - # It implicitly uses --release unless --debug is passed - # It finds pg_config or you can add flags like --pg-config if needed if ! cargo pgrx install; then - echo -e "โŒ ${RED}cargo pgrx install command failed.${RESET}" >&2 - return 1 + error "cargo pgrx install command failed." + return 2 fi - echo -e "โœจ ${GREEN}PGRX extension v$version successfully built and installed.${RESET}" + success "PGRX extension v$version successfully built and installed." # Post-install modification to allow non-superuser usage - # Get the installation path dynamically using pg_config local pg_sharedir pg_sharedir=$("$POSTGRES_CONFIG_PATH" --sharedir) - if [ -z "$pg_sharedir" ]; then - echo -e "โŒ ${RED}Failed to determine PostgreSQL shared directory using pg_config.${RESET}" >&2 - return 1 + local pg_config_status=$? + if [ $pg_config_status -ne 0 ] || [ -z "$pg_sharedir" ]; then + error "Failed to determine PostgreSQL shared directory using pg_config." + return 2 fi local installed_control_path="${pg_sharedir}/extension/jspg.control" # Modify the control file if [ ! -f "$installed_control_path" ]; then - echo -e "โŒ ${RED}Installed control file not found: '$installed_control_path'${RESET}" >&2 - return 1 + error "Installed control file not found: '$installed_control_path'" + return 2 fi - echo -e "๐Ÿ”ง ${CYAN}Modifying control file for non-superuser access: ${installed_control_path}${RESET}" + info "Modifying control file for non-superuser access: ${installed_control_path}" # Use sed -i '' for macOS compatibility if sed -i '' '/^superuser = false/d' "$installed_control_path" && \ echo 'trusted = true' >> "$installed_control_path"; then - echo -e "โœจ ${GREEN}Control file modified successfully.${RESET}" + success "Control file modified successfully." else - echo -e "โŒ ${RED}Failed to modify control file: ${installed_control_path}${RESET}" >&2 - return 1 + error "Failed to modify control file: ${installed_control_path}" + return 2 fi } test() { - echo -e "๐Ÿงช ${CYAN}Running jspg tests...${RESET}" - cargo pgrx test "pg${POSTGRES_VERSION}" "$@" + info "Running jspg tests..." + cargo pgrx test "pg${POSTGRES_VERSION}" "$@" || return $? } clean() { - echo -e "๐Ÿงน ${CYAN}Cleaning build artifacts...${RESET}" - cargo clean # Use standard cargo clean + info "Cleaning build artifacts..." + cargo clean || return $? } jspg-usage() { - echo -e " ${CYAN}JSPG Commands:${RESET}" - echo -e " prepare Check OS, Cargo, and PGRX dependencies." - echo -e " install [opts] Run prepare, then build and install the extension locally." - echo -e " reinstall [opts] Run prepare, clean, then build and install the extension locally." - echo -e " test [opts] Run pgrx integration tests." - echo -e " clean Remove pgrx build artifacts." - echo -e " build Build release artifacts into ./package/ (called by release)." - echo -e " tag Tag the current version (called by release)." - echo -e " package Upload artifacts from ./package/ (called by release)." - echo -e " release Perform a full release (increments patch, builds, tags, pushes, packages)." + printf "prepare\tCheck OS, Cargo, and PGRX dependencies.\n" + printf "install\tBuild and install the extension locally (after prepare).\n" + printf "reinstall\tClean, build, and install the extension locally (after prepare).\n" + printf "test\t\tRun pgrx integration tests.\n" + printf "clean\t\tRemove pgrx build artifacts.\n" } jspg-flow() { case "$1" in - env) env; return 0;; - prepare) base prepare; cargo-prepare; pgrx-prepare; return 0;; - build) build; return 0;; - install) install; return 0;; - reinstall) clean; install; return 0;; - test) test; return 0;; - package) env; package; return 0;; - release) env; release; return 0;; - clean) clean; return 0;; + env) env; return $?;; + prepare) base-flow prepare && cargo-prepare && pgrx-prepare; return $?;; + build) build; return $?;; + install) install; return $?;; + reinstall) clean && install; return $?;; + test) test "${@:2}"; return $?;; + clean) clean; return $?;; *) return 1 ;; esac } diff --git a/flows b/flows index 9d758d5..da3038c 160000 --- a/flows +++ b/flows @@ -1 +1 @@ -Subproject commit 9d758d581eb2eeefaea3d3882ac6ca506a7e0b08 +Subproject commit da3038c73672b6f4fca2b694030c7cd9450bcd11