Puja artefactes a Nexus


#!/bin/bash
# ============================================================
# Pujar artefactes Maven a Nexus 3 utilitzant la API REST
# ============================================================

URL_NEXUS="https://xxxxx.xxxxx.xx"
REPO_DESTI="maven-releases"
USUARI="admin"
TOKEN="xx-x-xx-x"
CARPETA_BASE="/data/nexus"

# ------------------------------------------------------------
# Dependència: jq
# ------------------------------------------------------------
if ! command -v jq &>/dev/null; then
  echo "❌ Necessites instal·lar jq (sudo apt install jq)"
  exit 1
fi

# ------------------------------------------------------------
# Funció per pujar un artefacte Maven (jar/pom) amb els metadades
# ------------------------------------------------------------
pujar_artefacte() {
  local grupId="$1"
  local artefacteId="$2"
  local versio="$3"
  local fitxer="$4"

  EXT="${fitxer##*.}"

  echo "⬆️  Pujant: ${grupId}:${artefacteId}:${versio} → $(basename "$fitxer")"

  curl -s -u "$USUARI:$TOKEN" \
    -X POST "$URL_NEXUS/service/rest/v1/components?repository=$REPO_DESTI" \
    -F "maven2.groupId=$grupId" \
    -F "maven2.artifactId=$artefacteId" \
    -F "maven2.version=$versio" \
    -F "maven2.asset1=@$fitxer" \
    -F "maven2.asset1.extension=$EXT" \
    >/dev/null

  if [ $? -eq 0 ]; then
    echo "✅ Pujat: $artefacteId-$versio.$EXT"
  else
    echo "⚠️  Error al pujar $fitxer"
  fi
}

# ------------------------------------------------------------
# Recorrem tots els artefactes descarregats
# Estructura esperada: grup/artefacte/versio/*.*
# ------------------------------------------------------------
cd "$CARPETA_BASE" || exit 1

echo "🚀 Pujant artefactes des de $CARPETA_BASE al repositori $REPO_DESTI ..."

find . -type f \( -name "*.jar" -o -name "*.pom" -o -name "*.war" -o -name "*.zip" \) | while read -r fitxer; do
  REL_PATH="${fitxer#./}"                   # treure prefix "./"
  DIR_PATH=$(dirname "$REL_PATH")           # ex: acegisecurity/acegi-security/0.9.0
  grupId=$(echo "$DIR_PATH" | cut -d/ -f1 | tr '/' '.')
  artefacteId=$(echo "$DIR_PATH" | cut -d/ -f2)
  versio=$(echo "$DIR_PATH" | cut -d/ -f3)

  # comprovem que existeix tot
  if [ -n "$grupId" ] && [ -n "$artefacteId" ] && [ -n "$versio" ]; then
    pujar_artefacte "$grupId" "$artefacteId" "$versio" "$fitxer"
  else
    echo "⚠️  No s'ha pogut determinar GAV per: $fitxer"
  fi
done

echo "🎯 Procés completat."