diff --git a/gukyuin/label-send/.gradle/8.14/checksums/checksums.lock b/gukyuin/label-send/.gradle/8.14/checksums/checksums.lock index f939e90..795af93 100644 Binary files a/gukyuin/label-send/.gradle/8.14/checksums/checksums.lock and b/gukyuin/label-send/.gradle/8.14/checksums/checksums.lock differ diff --git a/gukyuin/label-send/.gradle/8.14/executionHistory/executionHistory.bin b/gukyuin/label-send/.gradle/8.14/executionHistory/executionHistory.bin index 28d4c16..0ac8fad 100644 Binary files a/gukyuin/label-send/.gradle/8.14/executionHistory/executionHistory.bin and b/gukyuin/label-send/.gradle/8.14/executionHistory/executionHistory.bin differ diff --git a/gukyuin/label-send/.gradle/8.14/executionHistory/executionHistory.lock b/gukyuin/label-send/.gradle/8.14/executionHistory/executionHistory.lock index aed6d30..be05a7d 100644 Binary files a/gukyuin/label-send/.gradle/8.14/executionHistory/executionHistory.lock and b/gukyuin/label-send/.gradle/8.14/executionHistory/executionHistory.lock differ diff --git a/gukyuin/label-send/.gradle/8.14/fileHashes/fileHashes.bin b/gukyuin/label-send/.gradle/8.14/fileHashes/fileHashes.bin index 257fba7..b19c366 100644 Binary files a/gukyuin/label-send/.gradle/8.14/fileHashes/fileHashes.bin and b/gukyuin/label-send/.gradle/8.14/fileHashes/fileHashes.bin differ diff --git a/gukyuin/label-send/.gradle/8.14/fileHashes/fileHashes.lock b/gukyuin/label-send/.gradle/8.14/fileHashes/fileHashes.lock index 5e4864f..a55a5e4 100644 Binary files a/gukyuin/label-send/.gradle/8.14/fileHashes/fileHashes.lock and b/gukyuin/label-send/.gradle/8.14/fileHashes/fileHashes.lock differ diff --git a/gukyuin/label-send/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/gukyuin/label-send/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 2642ad1..acf41ce 100644 Binary files a/gukyuin/label-send/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/gukyuin/label-send/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/gukyuin/label-send/.gradle/file-system.probe b/gukyuin/label-send/.gradle/file-system.probe index 660e380..f41f3e4 100644 Binary files a/gukyuin/label-send/.gradle/file-system.probe and b/gukyuin/label-send/.gradle/file-system.probe differ diff --git a/gukyuin/label-send/build.gradle b/gukyuin/label-send/build.gradle index 8ee2499..ca27d56 100644 --- a/gukyuin/label-send/build.gradle +++ b/gukyuin/label-send/build.gradle @@ -29,9 +29,20 @@ configurations { } } +//repositories { +// mavenCentral() +// maven { url "https://repo.osgeo.org/repository/release/" } +//} + +def repoUrl = System.getProperty("org.gradle.project.repoUrl") + ?: System.getenv("ORG_GRADLE_PROJECT_repoUrl") + ?: "http://172.16.4.56:18100/repository/maven-public/" + repositories { - mavenCentral() - maven { url "https://repo.osgeo.org/repository/release/" } + maven { + url = uri(repoUrl) + allowInsecureProtocol = true + } } dependencies { diff --git a/gukyuin/label-send/build/libs/label-send.jar b/gukyuin/label-send/build/libs/label-send.jar index 9e6e939..db532b7 100644 Binary files a/gukyuin/label-send/build/libs/label-send.jar and b/gukyuin/label-send/build/libs/label-send.jar differ diff --git a/gukyuin/label-send/build/reports/problems/problems-report.html b/gukyuin/label-send/build/reports/problems/problems-report.html index c67bd41..7d0c6ea 100644 --- a/gukyuin/label-send/build/reports/problems/problems-report.html +++ b/gukyuin/label-send/build/reports/problems/problems-report.html @@ -650,7 +650,7 @@ code + .copy-button { diff --git a/gukyuin/label-send/build/tmp/compileJava/previous-compilation-data.bin b/gukyuin/label-send/build/tmp/compileJava/previous-compilation-data.bin index e93cb0e..97da47b 100644 Binary files a/gukyuin/label-send/build/tmp/compileJava/previous-compilation-data.bin and b/gukyuin/label-send/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/gukyuin/label-send/build/tmp/spotless-register-dependencies b/gukyuin/label-send/build/tmp/spotless-register-dependencies deleted file mode 100644 index 56a6051..0000000 --- a/gukyuin/label-send/build/tmp/spotless-register-dependencies +++ /dev/null @@ -1 +0,0 @@ -1 \ No newline at end of file diff --git a/gukyuin/label-send/gradle/wrapper/gradle-wrapper.properties b/gukyuin/label-send/gradle/wrapper/gradle-wrapper.properties index ca025c8..ce3d66d 100644 --- a/gukyuin/label-send/gradle/wrapper/gradle-wrapper.properties +++ b/gukyuin/label-send/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip +#distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip +distributionUrl=http\://172.16.4.56:18100/repository/gradle-distributions/gradle-8.14-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gukyuin/label-send/make_seed_bundle_succ.sh b/gukyuin/label-send/make_seed_bundle_succ.sh new file mode 100644 index 0000000..024878f --- /dev/null +++ b/gukyuin/label-send/make_seed_bundle_succ.sh @@ -0,0 +1,293 @@ +#!/usr/bin/env bash +set -euo pipefail + +OUTDIR="${OUTDIR:-offline-seed}" +M2OUT="$OUTDIR/m2repo" +LOGDIR="$OUTDIR/logs" + +ARTIFACT_URLS="$OUTDIR/artifact-urls.txt" +FAILED_URLS="$OUTDIR/failed-urls.txt" +REAL_FAILED_URLS="$OUTDIR/real-failed-urls.txt" +IGNORED_FAILED_URLS="$OUTDIR/ignored-failed-urls.txt" +MISSING_URLS="$OUTDIR/missing-from-nexus.txt" +REAL_MISSING_URLS="$OUTDIR/real-missing-from-nexus.txt" +RETRY_URLS="$OUTDIR/retry-source-urls.txt" +REPO_CANDIDATES="$OUTDIR/repository-candidates.txt" +REPO_HINTS="$OUTDIR/repository-hints.txt" + +mkdir -p "$M2OUT" "$LOGDIR" +: > "$FAILED_URLS" +: > "$REAL_FAILED_URLS" +: > "$IGNORED_FAILED_URLS" +: > "$MISSING_URLS" +: > "$REAL_MISSING_URLS" +: > "$RETRY_URLS" +: > "$REPO_CANDIDATES" +: > "$REPO_HINTS" + +GRADLE_CMD=(./gradlew --no-daemon) + +SPRING_BOOT_PLUGIN_VERSION="${SPRING_BOOT_PLUGIN_VERSION:-3.5.7}" +DEPENDENCY_MGMT_PLUGIN_VERSION="${DEPENDENCY_MGMT_PLUGIN_VERSION:-1.1.7}" +SPOTLESS_PLUGIN_VERSION="${SPOTLESS_PLUGIN_VERSION:-6.25.0}" +QUERYDSL_VERSION="${QUERYDSL_VERSION:-5.0.0}" + +MAVEN_CENTRAL_BASE="${MAVEN_CENTRAL_BASE:-https://repo1.maven.org/maven2}" +GRADLE_PLUGIN_PORTAL_MAVEN_BASE="${GRADLE_PLUGIN_PORTAL_MAVEN_BASE:-https://plugins.gradle.org/m2}" +OSGEO_RELEASE_BASE="${OSGEO_RELEASE_BASE:-https://repo.osgeo.org/repository/release}" + +echo "[1/8] Running Gradle to trigger resolves..." +"${GRADLE_CMD[@]}" \ + clean compileJava testClasses spotlessCheck build \ + -x test \ + --refresh-dependencies \ + --debug \ + 2>&1 | tee "$LOGDIR/gradle-debug.log" || true + +echo "[2/8] Extracting resolved artifact URLs from Gradle debug log..." +grep -Eo 'https?://[^ ]+\.(pom|jar|module|aar|sha1|md5)(\?[^ ]+)?' "$LOGDIR/gradle-debug.log" \ + | sed -E 's/\?.*$//' \ + | sort -u \ + > "$ARTIFACT_URLS" + +echo " - URLs from log: $(wc -l < "$ARTIFACT_URLS")" + +echo "[3/8] Appending known required artifacts..." +cat >> "$ARTIFACT_URLS" < "$ARTIFACT_URLS.tmp" +mv "$ARTIFACT_URLS.tmp" "$ARTIFACT_URLS" +echo " - URLs after manual append: $(wc -l < "$ARTIFACT_URLS")" + +to_relative_path() { + local url="$1" + + if [[ "$url" == *"/maven2/"* ]]; then + printf '%s\n' "${url#*/maven2/}" + return 0 + fi + + if [[ "$url" == *"/m2/"* ]]; then + printf '%s\n' "${url#*/m2/}" + return 0 + fi + + if [[ "$url" =~ ^https?://[^/]+/repository/[^/]+/(.+)$ ]]; then + printf '%s\n' "${BASH_REMATCH[1]}" + return 0 + fi + + return 1 +} + +is_ignorable_url() { + local url="$1" + + case "$url" in + */org.springframework.boot.gradle.plugin-*.jar) + return 0 + ;; + */org.springframework.boot.gradle.plugin-*.module) + return 0 + ;; + */io.spring.dependency-management.gradle.plugin-*.jar) + return 0 + ;; + */io.spring.dependency-management.gradle.plugin-*.module) + return 0 + ;; + */com.diffplug.spotless.gradle.plugin-*.jar) + return 0 + ;; + */com.diffplug.spotless.gradle.plugin-*.module) + return 0 + ;; + */com/querydsl/querydsl-apt/*/querydsl-apt-*.module) + return 0 + ;; + */com/querydsl/querydsl-jpa/*/querydsl-jpa-*.module) + return 0 + ;; + *) + return 1 + ;; + esac +} + +map_upstream_url() { + local url="$1" + local rel + + if ! rel="$(to_relative_path "$url")"; then + return 1 + fi + + case "$rel" in + org/geotools/*|it/geosolutions/*|javax/media/*) + printf '%s/%s\n' "$OSGEO_RELEASE_BASE" "$rel" + ;; + io/spring/dependency-management/*|io/spring/gradle/dependency-management-plugin/*) + printf '%s/%s\n' "$GRADLE_PLUGIN_PORTAL_MAVEN_BASE" "$rel" + ;; + com/diffplug/spotless/*) + printf '%s/%s\n' "$GRADLE_PLUGIN_PORTAL_MAVEN_BASE" "$rel" + ;; + *) + printf '%s/%s\n' "$MAVEN_CENTRAL_BASE" "$rel" + ;; + esac +} + +echo "[4/8] Collecting artifacts that were missing in Nexus during Gradle resolve..." +grep 'Resource missing\.' "$LOGDIR/gradle-debug.log" \ + | sed -nE 's#.*\[HTTP (HEAD|GET): (https?://[^]]+)\]#\2#p' \ + | sort -u \ + > "$MISSING_URLS" || true + +while IFS= read -r url; do + [[ -z "$url" ]] && continue + if is_ignorable_url "$url"; then + printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS" + continue + fi + printf '%s\n' "$url" >> "$REAL_MISSING_URLS" + mapped="$(map_upstream_url "$url" || true)" + if [[ -n "${mapped:-}" ]] && ! is_ignorable_url "$mapped"; then + printf '%s\n' "$mapped" >> "$RETRY_URLS" + printf '%s\n' "${mapped%/*}" >> "$REPO_HINTS" + fi +done < "$MISSING_URLS" + +sort -u "$REAL_MISSING_URLS" -o "$REAL_MISSING_URLS" +sort -u "$IGNORED_FAILED_URLS" -o "$IGNORED_FAILED_URLS" +sort -u "$RETRY_URLS" -o "$RETRY_URLS" +sort -u "$REPO_HINTS" -o "$REPO_HINTS" + +cat "$RETRY_URLS" >> "$ARTIFACT_URLS" +sort -u "$ARTIFACT_URLS" -o "$ARTIFACT_URLS" + +echo " - Missing URLs in Nexus log: $(wc -l < "$MISSING_URLS")" +echo " - Real missing URLs: $(wc -l < "$REAL_MISSING_URLS")" +echo " - Ignored missing URLs: $(wc -l < "$IGNORED_FAILED_URLS")" + +download_one() { + local url="$1" + local rel + + if is_ignorable_url "$url"; then + printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS" + return 0 + fi + + if ! rel="$(to_relative_path "$url")"; then + echo " - [SKIP] unknown URL form: $url" + return 0 + fi + + local dest="$M2OUT/$rel" + mkdir -p "$(dirname "$dest")" + + if [[ -f "$dest" ]]; then + return 0 + fi + + echo " - [GET] $rel" + if ! curl -fSL "$url" -o "$dest"; then + echo "$url" >> "$FAILED_URLS" + rm -f "$dest" 2>/dev/null || true + if is_ignorable_url "$url"; then + printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS" + else + printf '%s\n' "$url" >> "$REAL_FAILED_URLS" + echo " !! failed: $url" + fi + fi +} + +export -f to_relative_path +export -f is_ignorable_url +export -f download_one +export M2OUT FAILED_URLS REAL_FAILED_URLS IGNORED_FAILED_URLS + +echo "[5/8] Downloading artifacts into m2 layout..." +while IFS= read -r url; do + [[ -z "$url" ]] && continue + download_one "$url" +done < "$ARTIFACT_URLS" + +sort -u "$FAILED_URLS" -o "$FAILED_URLS" +sort -u "$REAL_FAILED_URLS" -o "$REAL_FAILED_URLS" +sort -u "$IGNORED_FAILED_URLS" -o "$IGNORED_FAILED_URLS" + +echo "[6/8] Extracting repository candidates declared inside downloaded POMs..." +while IFS= read -r -d '' pom; do + awk -v pom="$pom" ' + // { in_repo=1; id=""; url=""; next } + /<\/repository>/ { + if (in_repo && url != "" && url !~ /^file:/) { + print url "\t" pom "\t" id + } + in_repo=0 + id="" + url="" + next + } + in_repo { + if (match($0, /([^<]+)<\/id>/, m)) { + id=m[1] + } + if (match($0, /([^<]+)<\/url>/, m)) { + url=m[1] + } + } + ' "$pom" +done < <(find "$M2OUT" -type f -name '*.pom' -print0) \ + | sort -u \ + > "$REPO_CANDIDATES" + +echo " - POM repository candidates: $(wc -l < "$REPO_CANDIDATES")" + +echo "[7/8] Packing seed bundle..." +tar -czf "$OUTDIR/m2repo-seed.tgz" -C "$OUTDIR" m2repo +ls -lh "$OUTDIR/m2repo-seed.tgz" + +echo "[8/8] Summary" +echo " seed bundle : $OUTDIR/m2repo-seed.tgz" +echo " artifact URLs : $ARTIFACT_URLS" +echo " raw missing : $MISSING_URLS" +echo " real missing : $REAL_MISSING_URLS" +echo " raw failed : $FAILED_URLS" +echo " real failed : $REAL_FAILED_URLS" +echo " ignored failed : $IGNORED_FAILED_URLS" +echo " retry source URLs : $RETRY_URLS" +echo " repository hints : $REPO_HINTS" +echo " POM repo candidates : $REPO_CANDIDATES" \ No newline at end of file diff --git a/gukyuin/label-send/offline_upload_to_nexus.sh b/gukyuin/label-send/offline_upload_to_nexus.sh new file mode 100644 index 0000000..36c1629 --- /dev/null +++ b/gukyuin/label-send/offline_upload_to_nexus.sh @@ -0,0 +1,98 @@ +#!/usr/bin/env bash +set -euo pipefail + +# ====== 여기만 네 환경에 맞게 ====== +NEXUS="http://localhost:18100" # 또는 http://localhost:18100 http://172.16.4.56:18100 +REPO="maven-releases" # 가능하면 seed 전용 repo로 바꿔라 (maven-seed) +USER="admin" +PASS="Kamco2026!" # 실제 비번 +# =================================== + +# 압축 풀기 +rm -rf m2repo offline-seed/m2repo +tar -xzf m2repo-seed.tgz + +ROOT="./m2repo" +[ -d "$ROOT" ] || ROOT="./offline-seed/m2repo" +[ -d "$ROOT" ] || { echo "m2repo not found"; exit 1; } + +LOGDIR="./upload-logs" +mkdir -p "$LOGDIR" +OKLOG="$LOGDIR/ok.txt" +FAILLOG="$LOGDIR/fail.txt" +RESP="$LOGDIR/resp.tmp" +LIST="$LOGDIR/version_dirs.txt" +: > "$OKLOG" +: > "$FAILLOG" + +# 핵심: "버전 디렉토리(끝이 숫자/버전)"만 잡기 = m2repo/**// +# depth 고정 대신: 'pom/jar/module'이 존재하는 디렉토리만 수집 +find "$ROOT" -type f \( -name "*.pom" -o -name "*.jar" -o -name "*.module" \) -print0 \ + | xargs -0 -n1 dirname \ + | sort -u > "$LIST" + +count="$(wc -l < "$LIST" | tr -d ' ')" +echo "Version dirs = $count" +[ "$count" -gt 0 ] || { echo "No version dirs found"; exit 1; } + +upload_dir() { + local verDir="$1" + local rel="${verDir#${ROOT}/}" + + # rel = group/path/artifact/version + local groupPath artifact version groupId + groupPath="$(echo "$rel" | awk -F/ '{for(i=1;i<=NF-2;i++) printf (i==NF-2? $i : $i "/")}')" + artifact="$(echo "$rel" | awk -F/ '{print $(NF-1)}')" + version="$(echo "$rel" | awk -F/ '{print $NF}')" + groupId="${groupPath//\//.}" + + local pom jar mod + pom="$(ls -1 "$verDir"/*.pom 2>/dev/null | head -n 1 || true)" + jar="$(ls -1 "$verDir"/*.jar 2>/dev/null | head -n 1 || true)" + mod="$(ls -1 "$verDir"/*.module 2>/dev/null | head -n 1 || true)" + + [ -z "$pom" ] && [ -z "$jar" ] && return 0 + + echo "UPLOAD: $groupId:$artifact:$version" + + args=( + -sS -u "$USER:$PASS" + -X POST "$NEXUS/service/rest/v1/components?repository=$REPO" + -F "maven2.groupId=$groupId" + -F "maven2.artifactId=$artifact" + -F "maven2.version=$version" + ) + + n=1 + if [ -n "$pom" ]; then + args+=( -F "maven2.asset${n}=@${pom}" -F "maven2.asset${n}.extension=pom" ); n=$((n+1)) + fi + if [ -n "$jar" ]; then + args+=( -F "maven2.asset${n}=@${jar}" -F "maven2.asset${n}.extension=jar" ); n=$((n+1)) + fi + if [ -n "$mod" ]; then + args+=( -F "maven2.asset${n}=@${mod}" -F "maven2.asset${n}.extension=module" ); n=$((n+1)) + fi + + http_code="$(curl -w "%{http_code}" -o "$RESP" "${args[@]}" || true)" + if [ "$http_code" = "204" ] || [ "$http_code" = "201" ]; then + echo "$groupId:$artifact:$version" >> "$OKLOG" + return 0 + else + echo "FAIL $http_code $groupId:$artifact:$version" >> "$FAILLOG" + sed -e 's/\r$//' "$RESP" >> "$FAILLOG" || true + echo >> "$FAILLOG" + return 1 + fi +} + +fails=0 +while IFS= read -r d; do + if ! upload_dir "$d"; then + fails=$((fails+1)) + fi +done < "$LIST" + +echo "DONE. ok=$(wc -l < "$OKLOG" | tr -d ' ') fail=$fails" +echo "OKLOG : $OKLOG" +echo "FAILLOG: $FAILLOG" diff --git a/gukyuin/label-send/settings.gradle b/gukyuin/label-send/settings.gradle index a7e87a5..78822b1 100644 --- a/gukyuin/label-send/settings.gradle +++ b/gukyuin/label-send/settings.gradle @@ -1,6 +1,17 @@ pluginManagement { - plugins { - id 'org.jetbrains.kotlin.jvm' version '2.2.20' +// plugins { +// id 'org.jetbrains.kotlin.jvm' version '2.2.20' +// } + + repositories { + maven { + url = uri( + System.getProperty("org.gradle.project.repoUrl") + ?: System.getenv("ORG_GRADLE_PROJECT_repoUrl") + ?: "http://172.16.4.56:18100/repository/maven-public/" + ) + allowInsecureProtocol = true + } } } rootProject.name = 'kamco-label-send-job' diff --git a/gukyuin/status-update/.gradle/8.14/checksums/checksums.lock b/gukyuin/status-update/.gradle/8.14/checksums/checksums.lock index f939e90..0c7ef78 100644 Binary files a/gukyuin/status-update/.gradle/8.14/checksums/checksums.lock and b/gukyuin/status-update/.gradle/8.14/checksums/checksums.lock differ diff --git a/gukyuin/status-update/.gradle/8.14/executionHistory/executionHistory.bin b/gukyuin/status-update/.gradle/8.14/executionHistory/executionHistory.bin index 25259f0..2093231 100644 Binary files a/gukyuin/status-update/.gradle/8.14/executionHistory/executionHistory.bin and b/gukyuin/status-update/.gradle/8.14/executionHistory/executionHistory.bin differ diff --git a/gukyuin/status-update/.gradle/8.14/executionHistory/executionHistory.lock b/gukyuin/status-update/.gradle/8.14/executionHistory/executionHistory.lock index ec42d57..dbac478 100644 Binary files a/gukyuin/status-update/.gradle/8.14/executionHistory/executionHistory.lock and b/gukyuin/status-update/.gradle/8.14/executionHistory/executionHistory.lock differ diff --git a/gukyuin/status-update/.gradle/8.14/fileHashes/fileHashes.bin b/gukyuin/status-update/.gradle/8.14/fileHashes/fileHashes.bin index 1b5b6ba..d1b5ec7 100644 Binary files a/gukyuin/status-update/.gradle/8.14/fileHashes/fileHashes.bin and b/gukyuin/status-update/.gradle/8.14/fileHashes/fileHashes.bin differ diff --git a/gukyuin/status-update/.gradle/8.14/fileHashes/fileHashes.lock b/gukyuin/status-update/.gradle/8.14/fileHashes/fileHashes.lock index 573640e..1e5ce6d 100644 Binary files a/gukyuin/status-update/.gradle/8.14/fileHashes/fileHashes.lock and b/gukyuin/status-update/.gradle/8.14/fileHashes/fileHashes.lock differ diff --git a/gukyuin/status-update/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/gukyuin/status-update/.gradle/buildOutputCleanup/buildOutputCleanup.lock index a90951f..a504c3c 100644 Binary files a/gukyuin/status-update/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/gukyuin/status-update/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/gukyuin/status-update/.gradle/file-system.probe b/gukyuin/status-update/.gradle/file-system.probe index 821a02f..3e830b6 100644 Binary files a/gukyuin/status-update/.gradle/file-system.probe and b/gukyuin/status-update/.gradle/file-system.probe differ diff --git a/gukyuin/status-update/build.gradle b/gukyuin/status-update/build.gradle index b0f630e..755469d 100644 --- a/gukyuin/status-update/build.gradle +++ b/gukyuin/status-update/build.gradle @@ -29,11 +29,22 @@ configurations { } } +def repoUrl = System.getProperty("org.gradle.project.repoUrl") + ?: System.getenv("ORG_GRADLE_PROJECT_repoUrl") + ?: "http://172.16.4.56:18100/repository/maven-public/" + repositories { - mavenCentral() - maven { url "https://repo.osgeo.org/repository/release/" } + maven { + url = uri(repoUrl) + allowInsecureProtocol = true + } } +//repositories { +// mavenCentral() +// maven { url "https://repo.osgeo.org/repository/release/" } +//} + dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' diff --git a/gukyuin/status-update/build/libs/status-update.jar b/gukyuin/status-update/build/libs/status-update.jar index d5ecf88..8a1e84e 100644 Binary files a/gukyuin/status-update/build/libs/status-update.jar and b/gukyuin/status-update/build/libs/status-update.jar differ diff --git a/gukyuin/status-update/build/reports/problems/problems-report.html b/gukyuin/status-update/build/reports/problems/problems-report.html index 5995716..7ca8b1b 100644 --- a/gukyuin/status-update/build/reports/problems/problems-report.html +++ b/gukyuin/status-update/build/reports/problems/problems-report.html @@ -650,7 +650,7 @@ code + .copy-button { diff --git a/gukyuin/status-update/build/tmp/compileJava/previous-compilation-data.bin b/gukyuin/status-update/build/tmp/compileJava/previous-compilation-data.bin index 3934d83..039850f 100644 Binary files a/gukyuin/status-update/build/tmp/compileJava/previous-compilation-data.bin and b/gukyuin/status-update/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/gukyuin/status-update/build/tmp/spotless-register-dependencies b/gukyuin/status-update/build/tmp/spotless-register-dependencies deleted file mode 100644 index 56a6051..0000000 --- a/gukyuin/status-update/build/tmp/spotless-register-dependencies +++ /dev/null @@ -1 +0,0 @@ -1 \ No newline at end of file diff --git a/gukyuin/status-update/gradle/wrapper/gradle-wrapper.properties b/gukyuin/status-update/gradle/wrapper/gradle-wrapper.properties index ca025c8..ce3d66d 100644 --- a/gukyuin/status-update/gradle/wrapper/gradle-wrapper.properties +++ b/gukyuin/status-update/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip +#distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip +distributionUrl=http\://172.16.4.56:18100/repository/gradle-distributions/gradle-8.14-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gukyuin/status-update/offline_upload_to_nexus.sh b/gukyuin/status-update/offline_upload_to_nexus.sh new file mode 100644 index 0000000..36c1629 --- /dev/null +++ b/gukyuin/status-update/offline_upload_to_nexus.sh @@ -0,0 +1,98 @@ +#!/usr/bin/env bash +set -euo pipefail + +# ====== 여기만 네 환경에 맞게 ====== +NEXUS="http://localhost:18100" # 또는 http://localhost:18100 http://172.16.4.56:18100 +REPO="maven-releases" # 가능하면 seed 전용 repo로 바꿔라 (maven-seed) +USER="admin" +PASS="Kamco2026!" # 실제 비번 +# =================================== + +# 압축 풀기 +rm -rf m2repo offline-seed/m2repo +tar -xzf m2repo-seed.tgz + +ROOT="./m2repo" +[ -d "$ROOT" ] || ROOT="./offline-seed/m2repo" +[ -d "$ROOT" ] || { echo "m2repo not found"; exit 1; } + +LOGDIR="./upload-logs" +mkdir -p "$LOGDIR" +OKLOG="$LOGDIR/ok.txt" +FAILLOG="$LOGDIR/fail.txt" +RESP="$LOGDIR/resp.tmp" +LIST="$LOGDIR/version_dirs.txt" +: > "$OKLOG" +: > "$FAILLOG" + +# 핵심: "버전 디렉토리(끝이 숫자/버전)"만 잡기 = m2repo/**// +# depth 고정 대신: 'pom/jar/module'이 존재하는 디렉토리만 수집 +find "$ROOT" -type f \( -name "*.pom" -o -name "*.jar" -o -name "*.module" \) -print0 \ + | xargs -0 -n1 dirname \ + | sort -u > "$LIST" + +count="$(wc -l < "$LIST" | tr -d ' ')" +echo "Version dirs = $count" +[ "$count" -gt 0 ] || { echo "No version dirs found"; exit 1; } + +upload_dir() { + local verDir="$1" + local rel="${verDir#${ROOT}/}" + + # rel = group/path/artifact/version + local groupPath artifact version groupId + groupPath="$(echo "$rel" | awk -F/ '{for(i=1;i<=NF-2;i++) printf (i==NF-2? $i : $i "/")}')" + artifact="$(echo "$rel" | awk -F/ '{print $(NF-1)}')" + version="$(echo "$rel" | awk -F/ '{print $NF}')" + groupId="${groupPath//\//.}" + + local pom jar mod + pom="$(ls -1 "$verDir"/*.pom 2>/dev/null | head -n 1 || true)" + jar="$(ls -1 "$verDir"/*.jar 2>/dev/null | head -n 1 || true)" + mod="$(ls -1 "$verDir"/*.module 2>/dev/null | head -n 1 || true)" + + [ -z "$pom" ] && [ -z "$jar" ] && return 0 + + echo "UPLOAD: $groupId:$artifact:$version" + + args=( + -sS -u "$USER:$PASS" + -X POST "$NEXUS/service/rest/v1/components?repository=$REPO" + -F "maven2.groupId=$groupId" + -F "maven2.artifactId=$artifact" + -F "maven2.version=$version" + ) + + n=1 + if [ -n "$pom" ]; then + args+=( -F "maven2.asset${n}=@${pom}" -F "maven2.asset${n}.extension=pom" ); n=$((n+1)) + fi + if [ -n "$jar" ]; then + args+=( -F "maven2.asset${n}=@${jar}" -F "maven2.asset${n}.extension=jar" ); n=$((n+1)) + fi + if [ -n "$mod" ]; then + args+=( -F "maven2.asset${n}=@${mod}" -F "maven2.asset${n}.extension=module" ); n=$((n+1)) + fi + + http_code="$(curl -w "%{http_code}" -o "$RESP" "${args[@]}" || true)" + if [ "$http_code" = "204" ] || [ "$http_code" = "201" ]; then + echo "$groupId:$artifact:$version" >> "$OKLOG" + return 0 + else + echo "FAIL $http_code $groupId:$artifact:$version" >> "$FAILLOG" + sed -e 's/\r$//' "$RESP" >> "$FAILLOG" || true + echo >> "$FAILLOG" + return 1 + fi +} + +fails=0 +while IFS= read -r d; do + if ! upload_dir "$d"; then + fails=$((fails+1)) + fi +done < "$LIST" + +echo "DONE. ok=$(wc -l < "$OKLOG" | tr -d ' ') fail=$fails" +echo "OKLOG : $OKLOG" +echo "FAILLOG: $FAILLOG" diff --git a/gukyuin/status-update/settings.gradle b/gukyuin/status-update/settings.gradle index 52a2704..b4325b9 100644 --- a/gukyuin/status-update/settings.gradle +++ b/gukyuin/status-update/settings.gradle @@ -1,6 +1,17 @@ pluginManagement { - plugins { - id 'org.jetbrains.kotlin.jvm' version '2.2.20' +// plugins { +// id 'org.jetbrains.kotlin.jvm' version '2.2.20' +// } + + repositories { + maven { + url = uri( + System.getProperty("org.gradle.project.repoUrl") + ?: System.getenv("ORG_GRADLE_PROJECT_repoUrl") + ?: "http://172.16.4.56:18100/repository/maven-public/" + ) + allowInsecureProtocol = true + } } } rootProject.name = 'kamco-status-update-job' diff --git a/gukyuin/stblt-check/.gradle/8.14/checksums/checksums.lock b/gukyuin/stblt-check/.gradle/8.14/checksums/checksums.lock index f939e90..abdbe6e 100644 Binary files a/gukyuin/stblt-check/.gradle/8.14/checksums/checksums.lock and b/gukyuin/stblt-check/.gradle/8.14/checksums/checksums.lock differ diff --git a/gukyuin/stblt-check/.gradle/8.14/executionHistory/executionHistory.bin b/gukyuin/stblt-check/.gradle/8.14/executionHistory/executionHistory.bin index 9acc31f..2fc6d95 100644 Binary files a/gukyuin/stblt-check/.gradle/8.14/executionHistory/executionHistory.bin and b/gukyuin/stblt-check/.gradle/8.14/executionHistory/executionHistory.bin differ diff --git a/gukyuin/stblt-check/.gradle/8.14/executionHistory/executionHistory.lock b/gukyuin/stblt-check/.gradle/8.14/executionHistory/executionHistory.lock index 9465e6c..6f947ab 100644 Binary files a/gukyuin/stblt-check/.gradle/8.14/executionHistory/executionHistory.lock and b/gukyuin/stblt-check/.gradle/8.14/executionHistory/executionHistory.lock differ diff --git a/gukyuin/stblt-check/.gradle/8.14/fileHashes/fileHashes.bin b/gukyuin/stblt-check/.gradle/8.14/fileHashes/fileHashes.bin index 9d9548e..bf8d5a7 100644 Binary files a/gukyuin/stblt-check/.gradle/8.14/fileHashes/fileHashes.bin and b/gukyuin/stblt-check/.gradle/8.14/fileHashes/fileHashes.bin differ diff --git a/gukyuin/stblt-check/.gradle/8.14/fileHashes/fileHashes.lock b/gukyuin/stblt-check/.gradle/8.14/fileHashes/fileHashes.lock index eaed0c6..5434746 100644 Binary files a/gukyuin/stblt-check/.gradle/8.14/fileHashes/fileHashes.lock and b/gukyuin/stblt-check/.gradle/8.14/fileHashes/fileHashes.lock differ diff --git a/gukyuin/stblt-check/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/gukyuin/stblt-check/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 23a3a85..1dcd578 100644 Binary files a/gukyuin/stblt-check/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/gukyuin/stblt-check/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/gukyuin/stblt-check/.gradle/file-system.probe b/gukyuin/stblt-check/.gradle/file-system.probe index a8df0b5..3a70efc 100644 Binary files a/gukyuin/stblt-check/.gradle/file-system.probe and b/gukyuin/stblt-check/.gradle/file-system.probe differ diff --git a/gukyuin/stblt-check/build.gradle b/gukyuin/stblt-check/build.gradle index 81f8ada..e332c62 100644 --- a/gukyuin/stblt-check/build.gradle +++ b/gukyuin/stblt-check/build.gradle @@ -29,9 +29,20 @@ configurations { } } +//repositories { +// mavenCentral() +// maven { url "https://repo.osgeo.org/repository/release/" } +//} + +def repoUrl = System.getProperty("org.gradle.project.repoUrl") + ?: System.getenv("ORG_GRADLE_PROJECT_repoUrl") + ?: "http://172.16.4.56:18100/repository/maven-public/" + repositories { - mavenCentral() - maven { url "https://repo.osgeo.org/repository/release/" } + maven { + url = uri(repoUrl) + allowInsecureProtocol = true + } } dependencies { diff --git a/gukyuin/stblt-check/build/libs/stblt-check.jar b/gukyuin/stblt-check/build/libs/stblt-check.jar index 1e0a582..5b50126 100644 Binary files a/gukyuin/stblt-check/build/libs/stblt-check.jar and b/gukyuin/stblt-check/build/libs/stblt-check.jar differ diff --git a/gukyuin/stblt-check/build/reports/problems/problems-report.html b/gukyuin/stblt-check/build/reports/problems/problems-report.html index 385c9a4..79090fa 100644 --- a/gukyuin/stblt-check/build/reports/problems/problems-report.html +++ b/gukyuin/stblt-check/build/reports/problems/problems-report.html @@ -650,7 +650,7 @@ code + .copy-button { diff --git a/gukyuin/stblt-check/build/tmp/compileJava/previous-compilation-data.bin b/gukyuin/stblt-check/build/tmp/compileJava/previous-compilation-data.bin index eff0b63..cedf6a3 100644 Binary files a/gukyuin/stblt-check/build/tmp/compileJava/previous-compilation-data.bin and b/gukyuin/stblt-check/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/gukyuin/stblt-check/build/tmp/spotless-register-dependencies b/gukyuin/stblt-check/build/tmp/spotless-register-dependencies deleted file mode 100644 index 56a6051..0000000 --- a/gukyuin/stblt-check/build/tmp/spotless-register-dependencies +++ /dev/null @@ -1 +0,0 @@ -1 \ No newline at end of file diff --git a/gukyuin/stblt-check/gradle/wrapper/gradle-wrapper.properties b/gukyuin/stblt-check/gradle/wrapper/gradle-wrapper.properties index ca025c8..ce3d66d 100644 --- a/gukyuin/stblt-check/gradle/wrapper/gradle-wrapper.properties +++ b/gukyuin/stblt-check/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip +#distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip +distributionUrl=http\://172.16.4.56:18100/repository/gradle-distributions/gradle-8.14-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gukyuin/stblt-check/make_seed_bundle_succ.sh b/gukyuin/stblt-check/make_seed_bundle_succ.sh new file mode 100644 index 0000000..024878f --- /dev/null +++ b/gukyuin/stblt-check/make_seed_bundle_succ.sh @@ -0,0 +1,293 @@ +#!/usr/bin/env bash +set -euo pipefail + +OUTDIR="${OUTDIR:-offline-seed}" +M2OUT="$OUTDIR/m2repo" +LOGDIR="$OUTDIR/logs" + +ARTIFACT_URLS="$OUTDIR/artifact-urls.txt" +FAILED_URLS="$OUTDIR/failed-urls.txt" +REAL_FAILED_URLS="$OUTDIR/real-failed-urls.txt" +IGNORED_FAILED_URLS="$OUTDIR/ignored-failed-urls.txt" +MISSING_URLS="$OUTDIR/missing-from-nexus.txt" +REAL_MISSING_URLS="$OUTDIR/real-missing-from-nexus.txt" +RETRY_URLS="$OUTDIR/retry-source-urls.txt" +REPO_CANDIDATES="$OUTDIR/repository-candidates.txt" +REPO_HINTS="$OUTDIR/repository-hints.txt" + +mkdir -p "$M2OUT" "$LOGDIR" +: > "$FAILED_URLS" +: > "$REAL_FAILED_URLS" +: > "$IGNORED_FAILED_URLS" +: > "$MISSING_URLS" +: > "$REAL_MISSING_URLS" +: > "$RETRY_URLS" +: > "$REPO_CANDIDATES" +: > "$REPO_HINTS" + +GRADLE_CMD=(./gradlew --no-daemon) + +SPRING_BOOT_PLUGIN_VERSION="${SPRING_BOOT_PLUGIN_VERSION:-3.5.7}" +DEPENDENCY_MGMT_PLUGIN_VERSION="${DEPENDENCY_MGMT_PLUGIN_VERSION:-1.1.7}" +SPOTLESS_PLUGIN_VERSION="${SPOTLESS_PLUGIN_VERSION:-6.25.0}" +QUERYDSL_VERSION="${QUERYDSL_VERSION:-5.0.0}" + +MAVEN_CENTRAL_BASE="${MAVEN_CENTRAL_BASE:-https://repo1.maven.org/maven2}" +GRADLE_PLUGIN_PORTAL_MAVEN_BASE="${GRADLE_PLUGIN_PORTAL_MAVEN_BASE:-https://plugins.gradle.org/m2}" +OSGEO_RELEASE_BASE="${OSGEO_RELEASE_BASE:-https://repo.osgeo.org/repository/release}" + +echo "[1/8] Running Gradle to trigger resolves..." +"${GRADLE_CMD[@]}" \ + clean compileJava testClasses spotlessCheck build \ + -x test \ + --refresh-dependencies \ + --debug \ + 2>&1 | tee "$LOGDIR/gradle-debug.log" || true + +echo "[2/8] Extracting resolved artifact URLs from Gradle debug log..." +grep -Eo 'https?://[^ ]+\.(pom|jar|module|aar|sha1|md5)(\?[^ ]+)?' "$LOGDIR/gradle-debug.log" \ + | sed -E 's/\?.*$//' \ + | sort -u \ + > "$ARTIFACT_URLS" + +echo " - URLs from log: $(wc -l < "$ARTIFACT_URLS")" + +echo "[3/8] Appending known required artifacts..." +cat >> "$ARTIFACT_URLS" < "$ARTIFACT_URLS.tmp" +mv "$ARTIFACT_URLS.tmp" "$ARTIFACT_URLS" +echo " - URLs after manual append: $(wc -l < "$ARTIFACT_URLS")" + +to_relative_path() { + local url="$1" + + if [[ "$url" == *"/maven2/"* ]]; then + printf '%s\n' "${url#*/maven2/}" + return 0 + fi + + if [[ "$url" == *"/m2/"* ]]; then + printf '%s\n' "${url#*/m2/}" + return 0 + fi + + if [[ "$url" =~ ^https?://[^/]+/repository/[^/]+/(.+)$ ]]; then + printf '%s\n' "${BASH_REMATCH[1]}" + return 0 + fi + + return 1 +} + +is_ignorable_url() { + local url="$1" + + case "$url" in + */org.springframework.boot.gradle.plugin-*.jar) + return 0 + ;; + */org.springframework.boot.gradle.plugin-*.module) + return 0 + ;; + */io.spring.dependency-management.gradle.plugin-*.jar) + return 0 + ;; + */io.spring.dependency-management.gradle.plugin-*.module) + return 0 + ;; + */com.diffplug.spotless.gradle.plugin-*.jar) + return 0 + ;; + */com.diffplug.spotless.gradle.plugin-*.module) + return 0 + ;; + */com/querydsl/querydsl-apt/*/querydsl-apt-*.module) + return 0 + ;; + */com/querydsl/querydsl-jpa/*/querydsl-jpa-*.module) + return 0 + ;; + *) + return 1 + ;; + esac +} + +map_upstream_url() { + local url="$1" + local rel + + if ! rel="$(to_relative_path "$url")"; then + return 1 + fi + + case "$rel" in + org/geotools/*|it/geosolutions/*|javax/media/*) + printf '%s/%s\n' "$OSGEO_RELEASE_BASE" "$rel" + ;; + io/spring/dependency-management/*|io/spring/gradle/dependency-management-plugin/*) + printf '%s/%s\n' "$GRADLE_PLUGIN_PORTAL_MAVEN_BASE" "$rel" + ;; + com/diffplug/spotless/*) + printf '%s/%s\n' "$GRADLE_PLUGIN_PORTAL_MAVEN_BASE" "$rel" + ;; + *) + printf '%s/%s\n' "$MAVEN_CENTRAL_BASE" "$rel" + ;; + esac +} + +echo "[4/8] Collecting artifacts that were missing in Nexus during Gradle resolve..." +grep 'Resource missing\.' "$LOGDIR/gradle-debug.log" \ + | sed -nE 's#.*\[HTTP (HEAD|GET): (https?://[^]]+)\]#\2#p' \ + | sort -u \ + > "$MISSING_URLS" || true + +while IFS= read -r url; do + [[ -z "$url" ]] && continue + if is_ignorable_url "$url"; then + printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS" + continue + fi + printf '%s\n' "$url" >> "$REAL_MISSING_URLS" + mapped="$(map_upstream_url "$url" || true)" + if [[ -n "${mapped:-}" ]] && ! is_ignorable_url "$mapped"; then + printf '%s\n' "$mapped" >> "$RETRY_URLS" + printf '%s\n' "${mapped%/*}" >> "$REPO_HINTS" + fi +done < "$MISSING_URLS" + +sort -u "$REAL_MISSING_URLS" -o "$REAL_MISSING_URLS" +sort -u "$IGNORED_FAILED_URLS" -o "$IGNORED_FAILED_URLS" +sort -u "$RETRY_URLS" -o "$RETRY_URLS" +sort -u "$REPO_HINTS" -o "$REPO_HINTS" + +cat "$RETRY_URLS" >> "$ARTIFACT_URLS" +sort -u "$ARTIFACT_URLS" -o "$ARTIFACT_URLS" + +echo " - Missing URLs in Nexus log: $(wc -l < "$MISSING_URLS")" +echo " - Real missing URLs: $(wc -l < "$REAL_MISSING_URLS")" +echo " - Ignored missing URLs: $(wc -l < "$IGNORED_FAILED_URLS")" + +download_one() { + local url="$1" + local rel + + if is_ignorable_url "$url"; then + printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS" + return 0 + fi + + if ! rel="$(to_relative_path "$url")"; then + echo " - [SKIP] unknown URL form: $url" + return 0 + fi + + local dest="$M2OUT/$rel" + mkdir -p "$(dirname "$dest")" + + if [[ -f "$dest" ]]; then + return 0 + fi + + echo " - [GET] $rel" + if ! curl -fSL "$url" -o "$dest"; then + echo "$url" >> "$FAILED_URLS" + rm -f "$dest" 2>/dev/null || true + if is_ignorable_url "$url"; then + printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS" + else + printf '%s\n' "$url" >> "$REAL_FAILED_URLS" + echo " !! failed: $url" + fi + fi +} + +export -f to_relative_path +export -f is_ignorable_url +export -f download_one +export M2OUT FAILED_URLS REAL_FAILED_URLS IGNORED_FAILED_URLS + +echo "[5/8] Downloading artifacts into m2 layout..." +while IFS= read -r url; do + [[ -z "$url" ]] && continue + download_one "$url" +done < "$ARTIFACT_URLS" + +sort -u "$FAILED_URLS" -o "$FAILED_URLS" +sort -u "$REAL_FAILED_URLS" -o "$REAL_FAILED_URLS" +sort -u "$IGNORED_FAILED_URLS" -o "$IGNORED_FAILED_URLS" + +echo "[6/8] Extracting repository candidates declared inside downloaded POMs..." +while IFS= read -r -d '' pom; do + awk -v pom="$pom" ' + // { in_repo=1; id=""; url=""; next } + /<\/repository>/ { + if (in_repo && url != "" && url !~ /^file:/) { + print url "\t" pom "\t" id + } + in_repo=0 + id="" + url="" + next + } + in_repo { + if (match($0, /([^<]+)<\/id>/, m)) { + id=m[1] + } + if (match($0, /([^<]+)<\/url>/, m)) { + url=m[1] + } + } + ' "$pom" +done < <(find "$M2OUT" -type f -name '*.pom' -print0) \ + | sort -u \ + > "$REPO_CANDIDATES" + +echo " - POM repository candidates: $(wc -l < "$REPO_CANDIDATES")" + +echo "[7/8] Packing seed bundle..." +tar -czf "$OUTDIR/m2repo-seed.tgz" -C "$OUTDIR" m2repo +ls -lh "$OUTDIR/m2repo-seed.tgz" + +echo "[8/8] Summary" +echo " seed bundle : $OUTDIR/m2repo-seed.tgz" +echo " artifact URLs : $ARTIFACT_URLS" +echo " raw missing : $MISSING_URLS" +echo " real missing : $REAL_MISSING_URLS" +echo " raw failed : $FAILED_URLS" +echo " real failed : $REAL_FAILED_URLS" +echo " ignored failed : $IGNORED_FAILED_URLS" +echo " retry source URLs : $RETRY_URLS" +echo " repository hints : $REPO_HINTS" +echo " POM repo candidates : $REPO_CANDIDATES" \ No newline at end of file diff --git a/gukyuin/stblt-check/offline_upload_to_nexus.sh b/gukyuin/stblt-check/offline_upload_to_nexus.sh new file mode 100644 index 0000000..36c1629 --- /dev/null +++ b/gukyuin/stblt-check/offline_upload_to_nexus.sh @@ -0,0 +1,98 @@ +#!/usr/bin/env bash +set -euo pipefail + +# ====== 여기만 네 환경에 맞게 ====== +NEXUS="http://localhost:18100" # 또는 http://localhost:18100 http://172.16.4.56:18100 +REPO="maven-releases" # 가능하면 seed 전용 repo로 바꿔라 (maven-seed) +USER="admin" +PASS="Kamco2026!" # 실제 비번 +# =================================== + +# 압축 풀기 +rm -rf m2repo offline-seed/m2repo +tar -xzf m2repo-seed.tgz + +ROOT="./m2repo" +[ -d "$ROOT" ] || ROOT="./offline-seed/m2repo" +[ -d "$ROOT" ] || { echo "m2repo not found"; exit 1; } + +LOGDIR="./upload-logs" +mkdir -p "$LOGDIR" +OKLOG="$LOGDIR/ok.txt" +FAILLOG="$LOGDIR/fail.txt" +RESP="$LOGDIR/resp.tmp" +LIST="$LOGDIR/version_dirs.txt" +: > "$OKLOG" +: > "$FAILLOG" + +# 핵심: "버전 디렉토리(끝이 숫자/버전)"만 잡기 = m2repo/**// +# depth 고정 대신: 'pom/jar/module'이 존재하는 디렉토리만 수집 +find "$ROOT" -type f \( -name "*.pom" -o -name "*.jar" -o -name "*.module" \) -print0 \ + | xargs -0 -n1 dirname \ + | sort -u > "$LIST" + +count="$(wc -l < "$LIST" | tr -d ' ')" +echo "Version dirs = $count" +[ "$count" -gt 0 ] || { echo "No version dirs found"; exit 1; } + +upload_dir() { + local verDir="$1" + local rel="${verDir#${ROOT}/}" + + # rel = group/path/artifact/version + local groupPath artifact version groupId + groupPath="$(echo "$rel" | awk -F/ '{for(i=1;i<=NF-2;i++) printf (i==NF-2? $i : $i "/")}')" + artifact="$(echo "$rel" | awk -F/ '{print $(NF-1)}')" + version="$(echo "$rel" | awk -F/ '{print $NF}')" + groupId="${groupPath//\//.}" + + local pom jar mod + pom="$(ls -1 "$verDir"/*.pom 2>/dev/null | head -n 1 || true)" + jar="$(ls -1 "$verDir"/*.jar 2>/dev/null | head -n 1 || true)" + mod="$(ls -1 "$verDir"/*.module 2>/dev/null | head -n 1 || true)" + + [ -z "$pom" ] && [ -z "$jar" ] && return 0 + + echo "UPLOAD: $groupId:$artifact:$version" + + args=( + -sS -u "$USER:$PASS" + -X POST "$NEXUS/service/rest/v1/components?repository=$REPO" + -F "maven2.groupId=$groupId" + -F "maven2.artifactId=$artifact" + -F "maven2.version=$version" + ) + + n=1 + if [ -n "$pom" ]; then + args+=( -F "maven2.asset${n}=@${pom}" -F "maven2.asset${n}.extension=pom" ); n=$((n+1)) + fi + if [ -n "$jar" ]; then + args+=( -F "maven2.asset${n}=@${jar}" -F "maven2.asset${n}.extension=jar" ); n=$((n+1)) + fi + if [ -n "$mod" ]; then + args+=( -F "maven2.asset${n}=@${mod}" -F "maven2.asset${n}.extension=module" ); n=$((n+1)) + fi + + http_code="$(curl -w "%{http_code}" -o "$RESP" "${args[@]}" || true)" + if [ "$http_code" = "204" ] || [ "$http_code" = "201" ]; then + echo "$groupId:$artifact:$version" >> "$OKLOG" + return 0 + else + echo "FAIL $http_code $groupId:$artifact:$version" >> "$FAILLOG" + sed -e 's/\r$//' "$RESP" >> "$FAILLOG" || true + echo >> "$FAILLOG" + return 1 + fi +} + +fails=0 +while IFS= read -r d; do + if ! upload_dir "$d"; then + fails=$((fails+1)) + fi +done < "$LIST" + +echo "DONE. ok=$(wc -l < "$OKLOG" | tr -d ' ') fail=$fails" +echo "OKLOG : $OKLOG" +echo "FAILLOG: $FAILLOG" diff --git a/gukyuin/stblt-check/settings.gradle b/gukyuin/stblt-check/settings.gradle index c9e42b8..6745a98 100644 --- a/gukyuin/stblt-check/settings.gradle +++ b/gukyuin/stblt-check/settings.gradle @@ -1,6 +1,16 @@ pluginManagement { - plugins { - id 'org.jetbrains.kotlin.jvm' version '2.2.20' +// plugins { +// id 'org.jetbrains.kotlin.jvm' version '2.2.20' +// } + repositories { + maven { + url = uri( + System.getProperty("org.gradle.project.repoUrl") + ?: System.getenv("ORG_GRADLE_PROJECT_repoUrl") + ?: "http://172.16.4.56:18100/repository/maven-public/" + ) + allowInsecureProtocol = true + } } } rootProject.name = 'kamco-stblt-check-job' diff --git a/imagery-make-dataset/.gradle/8.14/checksums/checksums.lock b/imagery-make-dataset/.gradle/8.14/checksums/checksums.lock index 16d7565..750933f 100644 Binary files a/imagery-make-dataset/.gradle/8.14/checksums/checksums.lock and b/imagery-make-dataset/.gradle/8.14/checksums/checksums.lock differ diff --git a/imagery-make-dataset/.gradle/8.14/executionHistory/executionHistory.bin b/imagery-make-dataset/.gradle/8.14/executionHistory/executionHistory.bin index 4a8f967..c2f4969 100644 Binary files a/imagery-make-dataset/.gradle/8.14/executionHistory/executionHistory.bin and b/imagery-make-dataset/.gradle/8.14/executionHistory/executionHistory.bin differ diff --git a/imagery-make-dataset/.gradle/8.14/executionHistory/executionHistory.lock b/imagery-make-dataset/.gradle/8.14/executionHistory/executionHistory.lock index eee7929..0cd3a78 100644 Binary files a/imagery-make-dataset/.gradle/8.14/executionHistory/executionHistory.lock and b/imagery-make-dataset/.gradle/8.14/executionHistory/executionHistory.lock differ diff --git a/imagery-make-dataset/.gradle/8.14/fileHashes/fileHashes.bin b/imagery-make-dataset/.gradle/8.14/fileHashes/fileHashes.bin index 41fa9d9..c4df6f1 100644 Binary files a/imagery-make-dataset/.gradle/8.14/fileHashes/fileHashes.bin and b/imagery-make-dataset/.gradle/8.14/fileHashes/fileHashes.bin differ diff --git a/imagery-make-dataset/.gradle/8.14/fileHashes/fileHashes.lock b/imagery-make-dataset/.gradle/8.14/fileHashes/fileHashes.lock index a933aca..a54fc38 100644 Binary files a/imagery-make-dataset/.gradle/8.14/fileHashes/fileHashes.lock and b/imagery-make-dataset/.gradle/8.14/fileHashes/fileHashes.lock differ diff --git a/imagery-make-dataset/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/imagery-make-dataset/.gradle/buildOutputCleanup/buildOutputCleanup.lock index fba4e95..1169aba 100644 Binary files a/imagery-make-dataset/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/imagery-make-dataset/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/imagery-make-dataset/.gradle/file-system.probe b/imagery-make-dataset/.gradle/file-system.probe index 8632153..95c758d 100644 Binary files a/imagery-make-dataset/.gradle/file-system.probe and b/imagery-make-dataset/.gradle/file-system.probe differ diff --git a/imagery-make-dataset/build.gradle b/imagery-make-dataset/build.gradle index 2d1088f..749a371 100755 --- a/imagery-make-dataset/build.gradle +++ b/imagery-make-dataset/build.gradle @@ -29,9 +29,20 @@ configurations { } } +//repositories { +// mavenCentral() +// maven { url "https://repo.osgeo.org/repository/release/" } +//} + +def repoUrl = System.getProperty("org.gradle.project.repoUrl") + ?: System.getenv("ORG_GRADLE_PROJECT_repoUrl") + ?: "http://172.16.4.56:18100/repository/maven-public/" + repositories { - mavenCentral() - maven { url "https://repo.osgeo.org/repository/release/" } + maven { + url = uri(repoUrl) + allowInsecureProtocol = true + } } dependencies { diff --git a/imagery-make-dataset/build/libs/imagery-make-dataset.jar b/imagery-make-dataset/build/libs/imagery-make-dataset.jar index 37207e7..057a52d 100644 Binary files a/imagery-make-dataset/build/libs/imagery-make-dataset.jar and b/imagery-make-dataset/build/libs/imagery-make-dataset.jar differ diff --git a/imagery-make-dataset/build/reports/problems/problems-report.html b/imagery-make-dataset/build/reports/problems/problems-report.html index 0428dc4..f0cb466 100644 --- a/imagery-make-dataset/build/reports/problems/problems-report.html +++ b/imagery-make-dataset/build/reports/problems/problems-report.html @@ -650,7 +650,7 @@ code + .copy-button { diff --git a/imagery-make-dataset/build/tmp/compileJava/previous-compilation-data.bin b/imagery-make-dataset/build/tmp/compileJava/previous-compilation-data.bin index a778f58..4b40727 100644 Binary files a/imagery-make-dataset/build/tmp/compileJava/previous-compilation-data.bin and b/imagery-make-dataset/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/imagery-make-dataset/build/tmp/spotless-register-dependencies b/imagery-make-dataset/build/tmp/spotless-register-dependencies deleted file mode 100644 index 56a6051..0000000 --- a/imagery-make-dataset/build/tmp/spotless-register-dependencies +++ /dev/null @@ -1 +0,0 @@ -1 \ No newline at end of file diff --git a/imagery-make-dataset/gradle/wrapper/gradle-wrapper.properties b/imagery-make-dataset/gradle/wrapper/gradle-wrapper.properties index ca025c8..ce3d66d 100755 --- a/imagery-make-dataset/gradle/wrapper/gradle-wrapper.properties +++ b/imagery-make-dataset/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip +#distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip +distributionUrl=http\://172.16.4.56:18100/repository/gradle-distributions/gradle-8.14-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/imagery-make-dataset/make_seed_bundle_succ.sh b/imagery-make-dataset/make_seed_bundle_succ.sh new file mode 100644 index 0000000..024878f --- /dev/null +++ b/imagery-make-dataset/make_seed_bundle_succ.sh @@ -0,0 +1,293 @@ +#!/usr/bin/env bash +set -euo pipefail + +OUTDIR="${OUTDIR:-offline-seed}" +M2OUT="$OUTDIR/m2repo" +LOGDIR="$OUTDIR/logs" + +ARTIFACT_URLS="$OUTDIR/artifact-urls.txt" +FAILED_URLS="$OUTDIR/failed-urls.txt" +REAL_FAILED_URLS="$OUTDIR/real-failed-urls.txt" +IGNORED_FAILED_URLS="$OUTDIR/ignored-failed-urls.txt" +MISSING_URLS="$OUTDIR/missing-from-nexus.txt" +REAL_MISSING_URLS="$OUTDIR/real-missing-from-nexus.txt" +RETRY_URLS="$OUTDIR/retry-source-urls.txt" +REPO_CANDIDATES="$OUTDIR/repository-candidates.txt" +REPO_HINTS="$OUTDIR/repository-hints.txt" + +mkdir -p "$M2OUT" "$LOGDIR" +: > "$FAILED_URLS" +: > "$REAL_FAILED_URLS" +: > "$IGNORED_FAILED_URLS" +: > "$MISSING_URLS" +: > "$REAL_MISSING_URLS" +: > "$RETRY_URLS" +: > "$REPO_CANDIDATES" +: > "$REPO_HINTS" + +GRADLE_CMD=(./gradlew --no-daemon) + +SPRING_BOOT_PLUGIN_VERSION="${SPRING_BOOT_PLUGIN_VERSION:-3.5.7}" +DEPENDENCY_MGMT_PLUGIN_VERSION="${DEPENDENCY_MGMT_PLUGIN_VERSION:-1.1.7}" +SPOTLESS_PLUGIN_VERSION="${SPOTLESS_PLUGIN_VERSION:-6.25.0}" +QUERYDSL_VERSION="${QUERYDSL_VERSION:-5.0.0}" + +MAVEN_CENTRAL_BASE="${MAVEN_CENTRAL_BASE:-https://repo1.maven.org/maven2}" +GRADLE_PLUGIN_PORTAL_MAVEN_BASE="${GRADLE_PLUGIN_PORTAL_MAVEN_BASE:-https://plugins.gradle.org/m2}" +OSGEO_RELEASE_BASE="${OSGEO_RELEASE_BASE:-https://repo.osgeo.org/repository/release}" + +echo "[1/8] Running Gradle to trigger resolves..." +"${GRADLE_CMD[@]}" \ + clean compileJava testClasses spotlessCheck build \ + -x test \ + --refresh-dependencies \ + --debug \ + 2>&1 | tee "$LOGDIR/gradle-debug.log" || true + +echo "[2/8] Extracting resolved artifact URLs from Gradle debug log..." +grep -Eo 'https?://[^ ]+\.(pom|jar|module|aar|sha1|md5)(\?[^ ]+)?' "$LOGDIR/gradle-debug.log" \ + | sed -E 's/\?.*$//' \ + | sort -u \ + > "$ARTIFACT_URLS" + +echo " - URLs from log: $(wc -l < "$ARTIFACT_URLS")" + +echo "[3/8] Appending known required artifacts..." +cat >> "$ARTIFACT_URLS" < "$ARTIFACT_URLS.tmp" +mv "$ARTIFACT_URLS.tmp" "$ARTIFACT_URLS" +echo " - URLs after manual append: $(wc -l < "$ARTIFACT_URLS")" + +to_relative_path() { + local url="$1" + + if [[ "$url" == *"/maven2/"* ]]; then + printf '%s\n' "${url#*/maven2/}" + return 0 + fi + + if [[ "$url" == *"/m2/"* ]]; then + printf '%s\n' "${url#*/m2/}" + return 0 + fi + + if [[ "$url" =~ ^https?://[^/]+/repository/[^/]+/(.+)$ ]]; then + printf '%s\n' "${BASH_REMATCH[1]}" + return 0 + fi + + return 1 +} + +is_ignorable_url() { + local url="$1" + + case "$url" in + */org.springframework.boot.gradle.plugin-*.jar) + return 0 + ;; + */org.springframework.boot.gradle.plugin-*.module) + return 0 + ;; + */io.spring.dependency-management.gradle.plugin-*.jar) + return 0 + ;; + */io.spring.dependency-management.gradle.plugin-*.module) + return 0 + ;; + */com.diffplug.spotless.gradle.plugin-*.jar) + return 0 + ;; + */com.diffplug.spotless.gradle.plugin-*.module) + return 0 + ;; + */com/querydsl/querydsl-apt/*/querydsl-apt-*.module) + return 0 + ;; + */com/querydsl/querydsl-jpa/*/querydsl-jpa-*.module) + return 0 + ;; + *) + return 1 + ;; + esac +} + +map_upstream_url() { + local url="$1" + local rel + + if ! rel="$(to_relative_path "$url")"; then + return 1 + fi + + case "$rel" in + org/geotools/*|it/geosolutions/*|javax/media/*) + printf '%s/%s\n' "$OSGEO_RELEASE_BASE" "$rel" + ;; + io/spring/dependency-management/*|io/spring/gradle/dependency-management-plugin/*) + printf '%s/%s\n' "$GRADLE_PLUGIN_PORTAL_MAVEN_BASE" "$rel" + ;; + com/diffplug/spotless/*) + printf '%s/%s\n' "$GRADLE_PLUGIN_PORTAL_MAVEN_BASE" "$rel" + ;; + *) + printf '%s/%s\n' "$MAVEN_CENTRAL_BASE" "$rel" + ;; + esac +} + +echo "[4/8] Collecting artifacts that were missing in Nexus during Gradle resolve..." +grep 'Resource missing\.' "$LOGDIR/gradle-debug.log" \ + | sed -nE 's#.*\[HTTP (HEAD|GET): (https?://[^]]+)\]#\2#p' \ + | sort -u \ + > "$MISSING_URLS" || true + +while IFS= read -r url; do + [[ -z "$url" ]] && continue + if is_ignorable_url "$url"; then + printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS" + continue + fi + printf '%s\n' "$url" >> "$REAL_MISSING_URLS" + mapped="$(map_upstream_url "$url" || true)" + if [[ -n "${mapped:-}" ]] && ! is_ignorable_url "$mapped"; then + printf '%s\n' "$mapped" >> "$RETRY_URLS" + printf '%s\n' "${mapped%/*}" >> "$REPO_HINTS" + fi +done < "$MISSING_URLS" + +sort -u "$REAL_MISSING_URLS" -o "$REAL_MISSING_URLS" +sort -u "$IGNORED_FAILED_URLS" -o "$IGNORED_FAILED_URLS" +sort -u "$RETRY_URLS" -o "$RETRY_URLS" +sort -u "$REPO_HINTS" -o "$REPO_HINTS" + +cat "$RETRY_URLS" >> "$ARTIFACT_URLS" +sort -u "$ARTIFACT_URLS" -o "$ARTIFACT_URLS" + +echo " - Missing URLs in Nexus log: $(wc -l < "$MISSING_URLS")" +echo " - Real missing URLs: $(wc -l < "$REAL_MISSING_URLS")" +echo " - Ignored missing URLs: $(wc -l < "$IGNORED_FAILED_URLS")" + +download_one() { + local url="$1" + local rel + + if is_ignorable_url "$url"; then + printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS" + return 0 + fi + + if ! rel="$(to_relative_path "$url")"; then + echo " - [SKIP] unknown URL form: $url" + return 0 + fi + + local dest="$M2OUT/$rel" + mkdir -p "$(dirname "$dest")" + + if [[ -f "$dest" ]]; then + return 0 + fi + + echo " - [GET] $rel" + if ! curl -fSL "$url" -o "$dest"; then + echo "$url" >> "$FAILED_URLS" + rm -f "$dest" 2>/dev/null || true + if is_ignorable_url "$url"; then + printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS" + else + printf '%s\n' "$url" >> "$REAL_FAILED_URLS" + echo " !! failed: $url" + fi + fi +} + +export -f to_relative_path +export -f is_ignorable_url +export -f download_one +export M2OUT FAILED_URLS REAL_FAILED_URLS IGNORED_FAILED_URLS + +echo "[5/8] Downloading artifacts into m2 layout..." +while IFS= read -r url; do + [[ -z "$url" ]] && continue + download_one "$url" +done < "$ARTIFACT_URLS" + +sort -u "$FAILED_URLS" -o "$FAILED_URLS" +sort -u "$REAL_FAILED_URLS" -o "$REAL_FAILED_URLS" +sort -u "$IGNORED_FAILED_URLS" -o "$IGNORED_FAILED_URLS" + +echo "[6/8] Extracting repository candidates declared inside downloaded POMs..." +while IFS= read -r -d '' pom; do + awk -v pom="$pom" ' + // { in_repo=1; id=""; url=""; next } + /<\/repository>/ { + if (in_repo && url != "" && url !~ /^file:/) { + print url "\t" pom "\t" id + } + in_repo=0 + id="" + url="" + next + } + in_repo { + if (match($0, /([^<]+)<\/id>/, m)) { + id=m[1] + } + if (match($0, /([^<]+)<\/url>/, m)) { + url=m[1] + } + } + ' "$pom" +done < <(find "$M2OUT" -type f -name '*.pom' -print0) \ + | sort -u \ + > "$REPO_CANDIDATES" + +echo " - POM repository candidates: $(wc -l < "$REPO_CANDIDATES")" + +echo "[7/8] Packing seed bundle..." +tar -czf "$OUTDIR/m2repo-seed.tgz" -C "$OUTDIR" m2repo +ls -lh "$OUTDIR/m2repo-seed.tgz" + +echo "[8/8] Summary" +echo " seed bundle : $OUTDIR/m2repo-seed.tgz" +echo " artifact URLs : $ARTIFACT_URLS" +echo " raw missing : $MISSING_URLS" +echo " real missing : $REAL_MISSING_URLS" +echo " raw failed : $FAILED_URLS" +echo " real failed : $REAL_FAILED_URLS" +echo " ignored failed : $IGNORED_FAILED_URLS" +echo " retry source URLs : $RETRY_URLS" +echo " repository hints : $REPO_HINTS" +echo " POM repo candidates : $REPO_CANDIDATES" \ No newline at end of file diff --git a/imagery-make-dataset/offline_upload_to_nexus.sh b/imagery-make-dataset/offline_upload_to_nexus.sh new file mode 100644 index 0000000..36c1629 --- /dev/null +++ b/imagery-make-dataset/offline_upload_to_nexus.sh @@ -0,0 +1,98 @@ +#!/usr/bin/env bash +set -euo pipefail + +# ====== 여기만 네 환경에 맞게 ====== +NEXUS="http://localhost:18100" # 또는 http://localhost:18100 http://172.16.4.56:18100 +REPO="maven-releases" # 가능하면 seed 전용 repo로 바꿔라 (maven-seed) +USER="admin" +PASS="Kamco2026!" # 실제 비번 +# =================================== + +# 압축 풀기 +rm -rf m2repo offline-seed/m2repo +tar -xzf m2repo-seed.tgz + +ROOT="./m2repo" +[ -d "$ROOT" ] || ROOT="./offline-seed/m2repo" +[ -d "$ROOT" ] || { echo "m2repo not found"; exit 1; } + +LOGDIR="./upload-logs" +mkdir -p "$LOGDIR" +OKLOG="$LOGDIR/ok.txt" +FAILLOG="$LOGDIR/fail.txt" +RESP="$LOGDIR/resp.tmp" +LIST="$LOGDIR/version_dirs.txt" +: > "$OKLOG" +: > "$FAILLOG" + +# 핵심: "버전 디렉토리(끝이 숫자/버전)"만 잡기 = m2repo/**// +# depth 고정 대신: 'pom/jar/module'이 존재하는 디렉토리만 수집 +find "$ROOT" -type f \( -name "*.pom" -o -name "*.jar" -o -name "*.module" \) -print0 \ + | xargs -0 -n1 dirname \ + | sort -u > "$LIST" + +count="$(wc -l < "$LIST" | tr -d ' ')" +echo "Version dirs = $count" +[ "$count" -gt 0 ] || { echo "No version dirs found"; exit 1; } + +upload_dir() { + local verDir="$1" + local rel="${verDir#${ROOT}/}" + + # rel = group/path/artifact/version + local groupPath artifact version groupId + groupPath="$(echo "$rel" | awk -F/ '{for(i=1;i<=NF-2;i++) printf (i==NF-2? $i : $i "/")}')" + artifact="$(echo "$rel" | awk -F/ '{print $(NF-1)}')" + version="$(echo "$rel" | awk -F/ '{print $NF}')" + groupId="${groupPath//\//.}" + + local pom jar mod + pom="$(ls -1 "$verDir"/*.pom 2>/dev/null | head -n 1 || true)" + jar="$(ls -1 "$verDir"/*.jar 2>/dev/null | head -n 1 || true)" + mod="$(ls -1 "$verDir"/*.module 2>/dev/null | head -n 1 || true)" + + [ -z "$pom" ] && [ -z "$jar" ] && return 0 + + echo "UPLOAD: $groupId:$artifact:$version" + + args=( + -sS -u "$USER:$PASS" + -X POST "$NEXUS/service/rest/v1/components?repository=$REPO" + -F "maven2.groupId=$groupId" + -F "maven2.artifactId=$artifact" + -F "maven2.version=$version" + ) + + n=1 + if [ -n "$pom" ]; then + args+=( -F "maven2.asset${n}=@${pom}" -F "maven2.asset${n}.extension=pom" ); n=$((n+1)) + fi + if [ -n "$jar" ]; then + args+=( -F "maven2.asset${n}=@${jar}" -F "maven2.asset${n}.extension=jar" ); n=$((n+1)) + fi + if [ -n "$mod" ]; then + args+=( -F "maven2.asset${n}=@${mod}" -F "maven2.asset${n}.extension=module" ); n=$((n+1)) + fi + + http_code="$(curl -w "%{http_code}" -o "$RESP" "${args[@]}" || true)" + if [ "$http_code" = "204" ] || [ "$http_code" = "201" ]; then + echo "$groupId:$artifact:$version" >> "$OKLOG" + return 0 + else + echo "FAIL $http_code $groupId:$artifact:$version" >> "$FAILLOG" + sed -e 's/\r$//' "$RESP" >> "$FAILLOG" || true + echo >> "$FAILLOG" + return 1 + fi +} + +fails=0 +while IFS= read -r d; do + if ! upload_dir "$d"; then + fails=$((fails+1)) + fi +done < "$LIST" + +echo "DONE. ok=$(wc -l < "$OKLOG" | tr -d ' ') fail=$fails" +echo "OKLOG : $OKLOG" +echo "FAILLOG: $FAILLOG" diff --git a/imagery-make-dataset/settings.gradle b/imagery-make-dataset/settings.gradle index e7deda1..609ef58 100755 --- a/imagery-make-dataset/settings.gradle +++ b/imagery-make-dataset/settings.gradle @@ -1,6 +1,16 @@ pluginManagement { - plugins { - id 'org.jetbrains.kotlin.jvm' version '2.2.20' +// plugins { +// id 'org.jetbrains.kotlin.jvm' version '2.2.20' +// } + repositories { + maven { + url = uri( + System.getProperty("org.gradle.project.repoUrl") + ?: System.getenv("ORG_GRADLE_PROJECT_repoUrl") + ?: "http://172.16.4.56:18100/repository/maven-public/" + ) + allowInsecureProtocol = true + } } } rootProject.name = 'kamco-map-sheet-image-job' diff --git a/kamco-make-dataset-generation/build.gradle b/kamco-make-dataset-generation/build.gradle index 7947e95..26f0639 100644 --- a/kamco-make-dataset-generation/build.gradle +++ b/kamco-make-dataset-generation/build.gradle @@ -19,8 +19,19 @@ configurations { } } +//repositories { +// mavenCentral() +//} + +def repoUrl = System.getProperty("org.gradle.project.repoUrl") + ?: System.getenv("ORG_GRADLE_PROJECT_repoUrl") + ?: "http://172.16.4.56:18100/repository/maven-public/" + repositories { - mavenCentral() + maven { + url = uri(repoUrl) + allowInsecureProtocol = true + } } dependencies { diff --git a/kamco-make-dataset-generation/gradle/wrapper/gradle-wrapper.properties b/kamco-make-dataset-generation/gradle/wrapper/gradle-wrapper.properties index d4081da..078b65d 100644 --- a/kamco-make-dataset-generation/gradle/wrapper/gradle-wrapper.properties +++ b/kamco-make-dataset-generation/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip +#distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip +distributionUrl=http\://172.16.4.56:18100/repository/gradle-distributions/gradle-8.14.3-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/kamco-make-dataset-generation/make_seed_bundle_succ_generation.sh b/kamco-make-dataset-generation/make_seed_bundle_succ_generation.sh new file mode 100644 index 0000000..41471b8 --- /dev/null +++ b/kamco-make-dataset-generation/make_seed_bundle_succ_generation.sh @@ -0,0 +1,293 @@ +#!/usr/bin/env bash +set -euo pipefail + +OUTDIR="${OUTDIR:-offline-seed}" +M2OUT="$OUTDIR/m2repo" +LOGDIR="$OUTDIR/logs" + +ARTIFACT_URLS="$OUTDIR/artifact-urls.txt" +FAILED_URLS="$OUTDIR/failed-urls.txt" +REAL_FAILED_URLS="$OUTDIR/real-failed-urls.txt" +IGNORED_FAILED_URLS="$OUTDIR/ignored-failed-urls.txt" +MISSING_URLS="$OUTDIR/missing-from-nexus.txt" +REAL_MISSING_URLS="$OUTDIR/real-missing-from-nexus.txt" +RETRY_URLS="$OUTDIR/retry-source-urls.txt" +REPO_CANDIDATES="$OUTDIR/repository-candidates.txt" +REPO_HINTS="$OUTDIR/repository-hints.txt" + +mkdir -p "$M2OUT" "$LOGDIR" +: > "$FAILED_URLS" +: > "$REAL_FAILED_URLS" +: > "$IGNORED_FAILED_URLS" +: > "$MISSING_URLS" +: > "$REAL_MISSING_URLS" +: > "$RETRY_URLS" +: > "$REPO_CANDIDATES" +: > "$REPO_HINTS" + +GRADLE_CMD=(./gradlew --no-daemon) + +SPRING_BOOT_PLUGIN_VERSION="${SPRING_BOOT_PLUGIN_VERSION:-3.5.7}" +DEPENDENCY_MGMT_PLUGIN_VERSION="${DEPENDENCY_MGMT_PLUGIN_VERSION:-1.1.7}" +SPOTLESS_PLUGIN_VERSION="${SPOTLESS_PLUGIN_VERSION:-6.25.0}" +QUERYDSL_VERSION="${QUERYDSL_VERSION:-5.0.0}" + +MAVEN_CENTRAL_BASE="${MAVEN_CENTRAL_BASE:-https://repo1.maven.org/maven2}" +GRADLE_PLUGIN_PORTAL_MAVEN_BASE="${GRADLE_PLUGIN_PORTAL_MAVEN_BASE:-https://plugins.gradle.org/m2}" +OSGEO_RELEASE_BASE="${OSGEO_RELEASE_BASE:-https://repo.osgeo.org/repository/release}" + +echo "[1/8] Running Gradle to trigger resolves..." +"${GRADLE_CMD[@]}" \ + clean compileJava testClasses build \ + -x test \ + --refresh-dependencies \ + --debug \ + 2>&1 | tee "$LOGDIR/gradle-debug.log" || true + +echo "[2/8] Extracting resolved artifact URLs from Gradle debug log..." +grep -Eo 'https?://[^ ]+\.(pom|jar|module|aar|sha1|md5)(\?[^ ]+)?' "$LOGDIR/gradle-debug.log" \ + | sed -E 's/\?.*$//' \ + | sort -u \ + > "$ARTIFACT_URLS" + +echo " - URLs from log: $(wc -l < "$ARTIFACT_URLS")" + +echo "[3/8] Appending known required artifacts..." +cat >> "$ARTIFACT_URLS" < "$ARTIFACT_URLS.tmp" +mv "$ARTIFACT_URLS.tmp" "$ARTIFACT_URLS" +echo " - URLs after manual append: $(wc -l < "$ARTIFACT_URLS")" + +to_relative_path() { + local url="$1" + + if [[ "$url" == *"/maven2/"* ]]; then + printf '%s\n' "${url#*/maven2/}" + return 0 + fi + + if [[ "$url" == *"/m2/"* ]]; then + printf '%s\n' "${url#*/m2/}" + return 0 + fi + + if [[ "$url" =~ ^https?://[^/]+/repository/[^/]+/(.+)$ ]]; then + printf '%s\n' "${BASH_REMATCH[1]}" + return 0 + fi + + return 1 +} + +is_ignorable_url() { + local url="$1" + + case "$url" in + */org.springframework.boot.gradle.plugin-*.jar) + return 0 + ;; + */org.springframework.boot.gradle.plugin-*.module) + return 0 + ;; + */io.spring.dependency-management.gradle.plugin-*.jar) + return 0 + ;; + */io.spring.dependency-management.gradle.plugin-*.module) + return 0 + ;; + */com.diffplug.spotless.gradle.plugin-*.jar) + return 0 + ;; + */com.diffplug.spotless.gradle.plugin-*.module) + return 0 + ;; + */com/querydsl/querydsl-apt/*/querydsl-apt-*.module) + return 0 + ;; + */com/querydsl/querydsl-jpa/*/querydsl-jpa-*.module) + return 0 + ;; + *) + return 1 + ;; + esac +} + +map_upstream_url() { + local url="$1" + local rel + + if ! rel="$(to_relative_path "$url")"; then + return 1 + fi + + case "$rel" in + org/geotools/*|it/geosolutions/*|javax/media/*) + printf '%s/%s\n' "$OSGEO_RELEASE_BASE" "$rel" + ;; + io/spring/dependency-management/*|io/spring/gradle/dependency-management-plugin/*) + printf '%s/%s\n' "$GRADLE_PLUGIN_PORTAL_MAVEN_BASE" "$rel" + ;; + com/diffplug/spotless/*) + printf '%s/%s\n' "$GRADLE_PLUGIN_PORTAL_MAVEN_BASE" "$rel" + ;; + *) + printf '%s/%s\n' "$MAVEN_CENTRAL_BASE" "$rel" + ;; + esac +} + +echo "[4/8] Collecting artifacts that were missing in Nexus during Gradle resolve..." +grep 'Resource missing\.' "$LOGDIR/gradle-debug.log" \ + | sed -nE 's#.*\[HTTP (HEAD|GET): (https?://[^]]+)\]#\2#p' \ + | sort -u \ + > "$MISSING_URLS" || true + +while IFS= read -r url; do + [[ -z "$url" ]] && continue + if is_ignorable_url "$url"; then + printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS" + continue + fi + printf '%s\n' "$url" >> "$REAL_MISSING_URLS" + mapped="$(map_upstream_url "$url" || true)" + if [[ -n "${mapped:-}" ]] && ! is_ignorable_url "$mapped"; then + printf '%s\n' "$mapped" >> "$RETRY_URLS" + printf '%s\n' "${mapped%/*}" >> "$REPO_HINTS" + fi +done < "$MISSING_URLS" + +sort -u "$REAL_MISSING_URLS" -o "$REAL_MISSING_URLS" +sort -u "$IGNORED_FAILED_URLS" -o "$IGNORED_FAILED_URLS" +sort -u "$RETRY_URLS" -o "$RETRY_URLS" +sort -u "$REPO_HINTS" -o "$REPO_HINTS" + +cat "$RETRY_URLS" >> "$ARTIFACT_URLS" +sort -u "$ARTIFACT_URLS" -o "$ARTIFACT_URLS" + +echo " - Missing URLs in Nexus log: $(wc -l < "$MISSING_URLS")" +echo " - Real missing URLs: $(wc -l < "$REAL_MISSING_URLS")" +echo " - Ignored missing URLs: $(wc -l < "$IGNORED_FAILED_URLS")" + +download_one() { + local url="$1" + local rel + + if is_ignorable_url "$url"; then + printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS" + return 0 + fi + + if ! rel="$(to_relative_path "$url")"; then + echo " - [SKIP] unknown URL form: $url" + return 0 + fi + + local dest="$M2OUT/$rel" + mkdir -p "$(dirname "$dest")" + + if [[ -f "$dest" ]]; then + return 0 + fi + + echo " - [GET] $rel" + if ! curl -fSL "$url" -o "$dest"; then + echo "$url" >> "$FAILED_URLS" + rm -f "$dest" 2>/dev/null || true + if is_ignorable_url "$url"; then + printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS" + else + printf '%s\n' "$url" >> "$REAL_FAILED_URLS" + echo " !! failed: $url" + fi + fi +} + +export -f to_relative_path +export -f is_ignorable_url +export -f download_one +export M2OUT FAILED_URLS REAL_FAILED_URLS IGNORED_FAILED_URLS + +echo "[5/8] Downloading artifacts into m2 layout..." +while IFS= read -r url; do + [[ -z "$url" ]] && continue + download_one "$url" +done < "$ARTIFACT_URLS" + +sort -u "$FAILED_URLS" -o "$FAILED_URLS" +sort -u "$REAL_FAILED_URLS" -o "$REAL_FAILED_URLS" +sort -u "$IGNORED_FAILED_URLS" -o "$IGNORED_FAILED_URLS" + +echo "[6/8] Extracting repository candidates declared inside downloaded POMs..." +while IFS= read -r -d '' pom; do + awk -v pom="$pom" ' + // { in_repo=1; id=""; url=""; next } + /<\/repository>/ { + if (in_repo && url != "" && url !~ /^file:/) { + print url "\t" pom "\t" id + } + in_repo=0 + id="" + url="" + next + } + in_repo { + if (match($0, /([^<]+)<\/id>/, m)) { + id=m[1] + } + if (match($0, /([^<]+)<\/url>/, m)) { + url=m[1] + } + } + ' "$pom" +done < <(find "$M2OUT" -type f -name '*.pom' -print0) \ + | sort -u \ + > "$REPO_CANDIDATES" + +echo " - POM repository candidates: $(wc -l < "$REPO_CANDIDATES")" + +echo "[7/8] Packing seed bundle..." +tar -czf "$OUTDIR/m2repo-seed.tgz" -C "$OUTDIR" m2repo +ls -lh "$OUTDIR/m2repo-seed.tgz" + +echo "[8/8] Summary" +echo " seed bundle : $OUTDIR/m2repo-seed.tgz" +echo " artifact URLs : $ARTIFACT_URLS" +echo " raw missing : $MISSING_URLS" +echo " real missing : $REAL_MISSING_URLS" +echo " raw failed : $FAILED_URLS" +echo " real failed : $REAL_FAILED_URLS" +echo " ignored failed : $IGNORED_FAILED_URLS" +echo " retry source URLs : $RETRY_URLS" +echo " repository hints : $REPO_HINTS" +echo " POM repo candidates : $REPO_CANDIDATES" \ No newline at end of file diff --git a/kamco-make-dataset-generation/offline_upload_to_nexus.sh b/kamco-make-dataset-generation/offline_upload_to_nexus.sh new file mode 100644 index 0000000..36c1629 --- /dev/null +++ b/kamco-make-dataset-generation/offline_upload_to_nexus.sh @@ -0,0 +1,98 @@ +#!/usr/bin/env bash +set -euo pipefail + +# ====== 여기만 네 환경에 맞게 ====== +NEXUS="http://localhost:18100" # 또는 http://localhost:18100 http://172.16.4.56:18100 +REPO="maven-releases" # 가능하면 seed 전용 repo로 바꿔라 (maven-seed) +USER="admin" +PASS="Kamco2026!" # 실제 비번 +# =================================== + +# 압축 풀기 +rm -rf m2repo offline-seed/m2repo +tar -xzf m2repo-seed.tgz + +ROOT="./m2repo" +[ -d "$ROOT" ] || ROOT="./offline-seed/m2repo" +[ -d "$ROOT" ] || { echo "m2repo not found"; exit 1; } + +LOGDIR="./upload-logs" +mkdir -p "$LOGDIR" +OKLOG="$LOGDIR/ok.txt" +FAILLOG="$LOGDIR/fail.txt" +RESP="$LOGDIR/resp.tmp" +LIST="$LOGDIR/version_dirs.txt" +: > "$OKLOG" +: > "$FAILLOG" + +# 핵심: "버전 디렉토리(끝이 숫자/버전)"만 잡기 = m2repo/**// +# depth 고정 대신: 'pom/jar/module'이 존재하는 디렉토리만 수집 +find "$ROOT" -type f \( -name "*.pom" -o -name "*.jar" -o -name "*.module" \) -print0 \ + | xargs -0 -n1 dirname \ + | sort -u > "$LIST" + +count="$(wc -l < "$LIST" | tr -d ' ')" +echo "Version dirs = $count" +[ "$count" -gt 0 ] || { echo "No version dirs found"; exit 1; } + +upload_dir() { + local verDir="$1" + local rel="${verDir#${ROOT}/}" + + # rel = group/path/artifact/version + local groupPath artifact version groupId + groupPath="$(echo "$rel" | awk -F/ '{for(i=1;i<=NF-2;i++) printf (i==NF-2? $i : $i "/")}')" + artifact="$(echo "$rel" | awk -F/ '{print $(NF-1)}')" + version="$(echo "$rel" | awk -F/ '{print $NF}')" + groupId="${groupPath//\//.}" + + local pom jar mod + pom="$(ls -1 "$verDir"/*.pom 2>/dev/null | head -n 1 || true)" + jar="$(ls -1 "$verDir"/*.jar 2>/dev/null | head -n 1 || true)" + mod="$(ls -1 "$verDir"/*.module 2>/dev/null | head -n 1 || true)" + + [ -z "$pom" ] && [ -z "$jar" ] && return 0 + + echo "UPLOAD: $groupId:$artifact:$version" + + args=( + -sS -u "$USER:$PASS" + -X POST "$NEXUS/service/rest/v1/components?repository=$REPO" + -F "maven2.groupId=$groupId" + -F "maven2.artifactId=$artifact" + -F "maven2.version=$version" + ) + + n=1 + if [ -n "$pom" ]; then + args+=( -F "maven2.asset${n}=@${pom}" -F "maven2.asset${n}.extension=pom" ); n=$((n+1)) + fi + if [ -n "$jar" ]; then + args+=( -F "maven2.asset${n}=@${jar}" -F "maven2.asset${n}.extension=jar" ); n=$((n+1)) + fi + if [ -n "$mod" ]; then + args+=( -F "maven2.asset${n}=@${mod}" -F "maven2.asset${n}.extension=module" ); n=$((n+1)) + fi + + http_code="$(curl -w "%{http_code}" -o "$RESP" "${args[@]}" || true)" + if [ "$http_code" = "204" ] || [ "$http_code" = "201" ]; then + echo "$groupId:$artifact:$version" >> "$OKLOG" + return 0 + else + echo "FAIL $http_code $groupId:$artifact:$version" >> "$FAILLOG" + sed -e 's/\r$//' "$RESP" >> "$FAILLOG" || true + echo >> "$FAILLOG" + return 1 + fi +} + +fails=0 +while IFS= read -r d; do + if ! upload_dir "$d"; then + fails=$((fails+1)) + fi +done < "$LIST" + +echo "DONE. ok=$(wc -l < "$OKLOG" | tr -d ' ') fail=$fails" +echo "OKLOG : $OKLOG" +echo "FAILLOG: $FAILLOG" diff --git a/label/label-to-review/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/label/label-to-review/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 8b68d23..a376965 100644 Binary files a/label/label-to-review/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/label/label-to-review/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/label/label-to-review/.gradle/file-system.probe b/label/label-to-review/.gradle/file-system.probe index e5ffdf6..f909200 100644 Binary files a/label/label-to-review/.gradle/file-system.probe and b/label/label-to-review/.gradle/file-system.probe differ diff --git a/label/label-to-review/build.gradle b/label/label-to-review/build.gradle index 9b3310e..1fceddf 100644 --- a/label/label-to-review/build.gradle +++ b/label/label-to-review/build.gradle @@ -20,9 +20,20 @@ configurations { } } +//repositories { +// mavenCentral() +// maven { url "https://repo.osgeo.org/repository/release/" } +//} + +def repoUrl = System.getProperty("org.gradle.project.repoUrl") + ?: System.getenv("ORG_GRADLE_PROJECT_repoUrl") + ?: "http://172.16.4.56:18100/repository/maven-public/" + repositories { - mavenCentral() - maven { url "https://repo.osgeo.org/repository/release/" } + maven { + url = uri(repoUrl) + allowInsecureProtocol = true + } } dependencies { diff --git a/label/label-to-review/build/reports/problems/problems-report.html b/label/label-to-review/build/reports/problems/problems-report.html index a3486fb..8452b3c 100644 --- a/label/label-to-review/build/reports/problems/problems-report.html +++ b/label/label-to-review/build/reports/problems/problems-report.html @@ -650,7 +650,7 @@ code + .copy-button { diff --git a/label/label-to-review/build/tmp/compileJava/previous-compilation-data.bin b/label/label-to-review/build/tmp/compileJava/previous-compilation-data.bin index 197cc62..0c6a899 100644 Binary files a/label/label-to-review/build/tmp/compileJava/previous-compilation-data.bin and b/label/label-to-review/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/label/label-to-review/build/tmp/spotless-register-dependencies b/label/label-to-review/build/tmp/spotless-register-dependencies deleted file mode 100644 index 56a6051..0000000 --- a/label/label-to-review/build/tmp/spotless-register-dependencies +++ /dev/null @@ -1 +0,0 @@ -1 \ No newline at end of file diff --git a/label/label-to-review/gradle/wrapper/gradle-wrapper.properties b/label/label-to-review/gradle/wrapper/gradle-wrapper.properties index d4081da..078b65d 100644 --- a/label/label-to-review/gradle/wrapper/gradle-wrapper.properties +++ b/label/label-to-review/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip +#distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip +distributionUrl=http\://172.16.4.56:18100/repository/gradle-distributions/gradle-8.14.3-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/label/label-to-review/make_seed_bundle_succ.sh b/label/label-to-review/make_seed_bundle_succ.sh new file mode 100644 index 0000000..024878f --- /dev/null +++ b/label/label-to-review/make_seed_bundle_succ.sh @@ -0,0 +1,293 @@ +#!/usr/bin/env bash +set -euo pipefail + +OUTDIR="${OUTDIR:-offline-seed}" +M2OUT="$OUTDIR/m2repo" +LOGDIR="$OUTDIR/logs" + +ARTIFACT_URLS="$OUTDIR/artifact-urls.txt" +FAILED_URLS="$OUTDIR/failed-urls.txt" +REAL_FAILED_URLS="$OUTDIR/real-failed-urls.txt" +IGNORED_FAILED_URLS="$OUTDIR/ignored-failed-urls.txt" +MISSING_URLS="$OUTDIR/missing-from-nexus.txt" +REAL_MISSING_URLS="$OUTDIR/real-missing-from-nexus.txt" +RETRY_URLS="$OUTDIR/retry-source-urls.txt" +REPO_CANDIDATES="$OUTDIR/repository-candidates.txt" +REPO_HINTS="$OUTDIR/repository-hints.txt" + +mkdir -p "$M2OUT" "$LOGDIR" +: > "$FAILED_URLS" +: > "$REAL_FAILED_URLS" +: > "$IGNORED_FAILED_URLS" +: > "$MISSING_URLS" +: > "$REAL_MISSING_URLS" +: > "$RETRY_URLS" +: > "$REPO_CANDIDATES" +: > "$REPO_HINTS" + +GRADLE_CMD=(./gradlew --no-daemon) + +SPRING_BOOT_PLUGIN_VERSION="${SPRING_BOOT_PLUGIN_VERSION:-3.5.7}" +DEPENDENCY_MGMT_PLUGIN_VERSION="${DEPENDENCY_MGMT_PLUGIN_VERSION:-1.1.7}" +SPOTLESS_PLUGIN_VERSION="${SPOTLESS_PLUGIN_VERSION:-6.25.0}" +QUERYDSL_VERSION="${QUERYDSL_VERSION:-5.0.0}" + +MAVEN_CENTRAL_BASE="${MAVEN_CENTRAL_BASE:-https://repo1.maven.org/maven2}" +GRADLE_PLUGIN_PORTAL_MAVEN_BASE="${GRADLE_PLUGIN_PORTAL_MAVEN_BASE:-https://plugins.gradle.org/m2}" +OSGEO_RELEASE_BASE="${OSGEO_RELEASE_BASE:-https://repo.osgeo.org/repository/release}" + +echo "[1/8] Running Gradle to trigger resolves..." +"${GRADLE_CMD[@]}" \ + clean compileJava testClasses spotlessCheck build \ + -x test \ + --refresh-dependencies \ + --debug \ + 2>&1 | tee "$LOGDIR/gradle-debug.log" || true + +echo "[2/8] Extracting resolved artifact URLs from Gradle debug log..." +grep -Eo 'https?://[^ ]+\.(pom|jar|module|aar|sha1|md5)(\?[^ ]+)?' "$LOGDIR/gradle-debug.log" \ + | sed -E 's/\?.*$//' \ + | sort -u \ + > "$ARTIFACT_URLS" + +echo " - URLs from log: $(wc -l < "$ARTIFACT_URLS")" + +echo "[3/8] Appending known required artifacts..." +cat >> "$ARTIFACT_URLS" < "$ARTIFACT_URLS.tmp" +mv "$ARTIFACT_URLS.tmp" "$ARTIFACT_URLS" +echo " - URLs after manual append: $(wc -l < "$ARTIFACT_URLS")" + +to_relative_path() { + local url="$1" + + if [[ "$url" == *"/maven2/"* ]]; then + printf '%s\n' "${url#*/maven2/}" + return 0 + fi + + if [[ "$url" == *"/m2/"* ]]; then + printf '%s\n' "${url#*/m2/}" + return 0 + fi + + if [[ "$url" =~ ^https?://[^/]+/repository/[^/]+/(.+)$ ]]; then + printf '%s\n' "${BASH_REMATCH[1]}" + return 0 + fi + + return 1 +} + +is_ignorable_url() { + local url="$1" + + case "$url" in + */org.springframework.boot.gradle.plugin-*.jar) + return 0 + ;; + */org.springframework.boot.gradle.plugin-*.module) + return 0 + ;; + */io.spring.dependency-management.gradle.plugin-*.jar) + return 0 + ;; + */io.spring.dependency-management.gradle.plugin-*.module) + return 0 + ;; + */com.diffplug.spotless.gradle.plugin-*.jar) + return 0 + ;; + */com.diffplug.spotless.gradle.plugin-*.module) + return 0 + ;; + */com/querydsl/querydsl-apt/*/querydsl-apt-*.module) + return 0 + ;; + */com/querydsl/querydsl-jpa/*/querydsl-jpa-*.module) + return 0 + ;; + *) + return 1 + ;; + esac +} + +map_upstream_url() { + local url="$1" + local rel + + if ! rel="$(to_relative_path "$url")"; then + return 1 + fi + + case "$rel" in + org/geotools/*|it/geosolutions/*|javax/media/*) + printf '%s/%s\n' "$OSGEO_RELEASE_BASE" "$rel" + ;; + io/spring/dependency-management/*|io/spring/gradle/dependency-management-plugin/*) + printf '%s/%s\n' "$GRADLE_PLUGIN_PORTAL_MAVEN_BASE" "$rel" + ;; + com/diffplug/spotless/*) + printf '%s/%s\n' "$GRADLE_PLUGIN_PORTAL_MAVEN_BASE" "$rel" + ;; + *) + printf '%s/%s\n' "$MAVEN_CENTRAL_BASE" "$rel" + ;; + esac +} + +echo "[4/8] Collecting artifacts that were missing in Nexus during Gradle resolve..." +grep 'Resource missing\.' "$LOGDIR/gradle-debug.log" \ + | sed -nE 's#.*\[HTTP (HEAD|GET): (https?://[^]]+)\]#\2#p' \ + | sort -u \ + > "$MISSING_URLS" || true + +while IFS= read -r url; do + [[ -z "$url" ]] && continue + if is_ignorable_url "$url"; then + printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS" + continue + fi + printf '%s\n' "$url" >> "$REAL_MISSING_URLS" + mapped="$(map_upstream_url "$url" || true)" + if [[ -n "${mapped:-}" ]] && ! is_ignorable_url "$mapped"; then + printf '%s\n' "$mapped" >> "$RETRY_URLS" + printf '%s\n' "${mapped%/*}" >> "$REPO_HINTS" + fi +done < "$MISSING_URLS" + +sort -u "$REAL_MISSING_URLS" -o "$REAL_MISSING_URLS" +sort -u "$IGNORED_FAILED_URLS" -o "$IGNORED_FAILED_URLS" +sort -u "$RETRY_URLS" -o "$RETRY_URLS" +sort -u "$REPO_HINTS" -o "$REPO_HINTS" + +cat "$RETRY_URLS" >> "$ARTIFACT_URLS" +sort -u "$ARTIFACT_URLS" -o "$ARTIFACT_URLS" + +echo " - Missing URLs in Nexus log: $(wc -l < "$MISSING_URLS")" +echo " - Real missing URLs: $(wc -l < "$REAL_MISSING_URLS")" +echo " - Ignored missing URLs: $(wc -l < "$IGNORED_FAILED_URLS")" + +download_one() { + local url="$1" + local rel + + if is_ignorable_url "$url"; then + printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS" + return 0 + fi + + if ! rel="$(to_relative_path "$url")"; then + echo " - [SKIP] unknown URL form: $url" + return 0 + fi + + local dest="$M2OUT/$rel" + mkdir -p "$(dirname "$dest")" + + if [[ -f "$dest" ]]; then + return 0 + fi + + echo " - [GET] $rel" + if ! curl -fSL "$url" -o "$dest"; then + echo "$url" >> "$FAILED_URLS" + rm -f "$dest" 2>/dev/null || true + if is_ignorable_url "$url"; then + printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS" + else + printf '%s\n' "$url" >> "$REAL_FAILED_URLS" + echo " !! failed: $url" + fi + fi +} + +export -f to_relative_path +export -f is_ignorable_url +export -f download_one +export M2OUT FAILED_URLS REAL_FAILED_URLS IGNORED_FAILED_URLS + +echo "[5/8] Downloading artifacts into m2 layout..." +while IFS= read -r url; do + [[ -z "$url" ]] && continue + download_one "$url" +done < "$ARTIFACT_URLS" + +sort -u "$FAILED_URLS" -o "$FAILED_URLS" +sort -u "$REAL_FAILED_URLS" -o "$REAL_FAILED_URLS" +sort -u "$IGNORED_FAILED_URLS" -o "$IGNORED_FAILED_URLS" + +echo "[6/8] Extracting repository candidates declared inside downloaded POMs..." +while IFS= read -r -d '' pom; do + awk -v pom="$pom" ' + // { in_repo=1; id=""; url=""; next } + /<\/repository>/ { + if (in_repo && url != "" && url !~ /^file:/) { + print url "\t" pom "\t" id + } + in_repo=0 + id="" + url="" + next + } + in_repo { + if (match($0, /([^<]+)<\/id>/, m)) { + id=m[1] + } + if (match($0, /([^<]+)<\/url>/, m)) { + url=m[1] + } + } + ' "$pom" +done < <(find "$M2OUT" -type f -name '*.pom' -print0) \ + | sort -u \ + > "$REPO_CANDIDATES" + +echo " - POM repository candidates: $(wc -l < "$REPO_CANDIDATES")" + +echo "[7/8] Packing seed bundle..." +tar -czf "$OUTDIR/m2repo-seed.tgz" -C "$OUTDIR" m2repo +ls -lh "$OUTDIR/m2repo-seed.tgz" + +echo "[8/8] Summary" +echo " seed bundle : $OUTDIR/m2repo-seed.tgz" +echo " artifact URLs : $ARTIFACT_URLS" +echo " raw missing : $MISSING_URLS" +echo " real missing : $REAL_MISSING_URLS" +echo " raw failed : $FAILED_URLS" +echo " real failed : $REAL_FAILED_URLS" +echo " ignored failed : $IGNORED_FAILED_URLS" +echo " retry source URLs : $RETRY_URLS" +echo " repository hints : $REPO_HINTS" +echo " POM repo candidates : $REPO_CANDIDATES" \ No newline at end of file diff --git a/label/label-to-review/offline_upload_to_nexus.sh b/label/label-to-review/offline_upload_to_nexus.sh new file mode 100644 index 0000000..36c1629 --- /dev/null +++ b/label/label-to-review/offline_upload_to_nexus.sh @@ -0,0 +1,98 @@ +#!/usr/bin/env bash +set -euo pipefail + +# ====== 여기만 네 환경에 맞게 ====== +NEXUS="http://localhost:18100" # 또는 http://localhost:18100 http://172.16.4.56:18100 +REPO="maven-releases" # 가능하면 seed 전용 repo로 바꿔라 (maven-seed) +USER="admin" +PASS="Kamco2026!" # 실제 비번 +# =================================== + +# 압축 풀기 +rm -rf m2repo offline-seed/m2repo +tar -xzf m2repo-seed.tgz + +ROOT="./m2repo" +[ -d "$ROOT" ] || ROOT="./offline-seed/m2repo" +[ -d "$ROOT" ] || { echo "m2repo not found"; exit 1; } + +LOGDIR="./upload-logs" +mkdir -p "$LOGDIR" +OKLOG="$LOGDIR/ok.txt" +FAILLOG="$LOGDIR/fail.txt" +RESP="$LOGDIR/resp.tmp" +LIST="$LOGDIR/version_dirs.txt" +: > "$OKLOG" +: > "$FAILLOG" + +# 핵심: "버전 디렉토리(끝이 숫자/버전)"만 잡기 = m2repo/**// +# depth 고정 대신: 'pom/jar/module'이 존재하는 디렉토리만 수집 +find "$ROOT" -type f \( -name "*.pom" -o -name "*.jar" -o -name "*.module" \) -print0 \ + | xargs -0 -n1 dirname \ + | sort -u > "$LIST" + +count="$(wc -l < "$LIST" | tr -d ' ')" +echo "Version dirs = $count" +[ "$count" -gt 0 ] || { echo "No version dirs found"; exit 1; } + +upload_dir() { + local verDir="$1" + local rel="${verDir#${ROOT}/}" + + # rel = group/path/artifact/version + local groupPath artifact version groupId + groupPath="$(echo "$rel" | awk -F/ '{for(i=1;i<=NF-2;i++) printf (i==NF-2? $i : $i "/")}')" + artifact="$(echo "$rel" | awk -F/ '{print $(NF-1)}')" + version="$(echo "$rel" | awk -F/ '{print $NF}')" + groupId="${groupPath//\//.}" + + local pom jar mod + pom="$(ls -1 "$verDir"/*.pom 2>/dev/null | head -n 1 || true)" + jar="$(ls -1 "$verDir"/*.jar 2>/dev/null | head -n 1 || true)" + mod="$(ls -1 "$verDir"/*.module 2>/dev/null | head -n 1 || true)" + + [ -z "$pom" ] && [ -z "$jar" ] && return 0 + + echo "UPLOAD: $groupId:$artifact:$version" + + args=( + -sS -u "$USER:$PASS" + -X POST "$NEXUS/service/rest/v1/components?repository=$REPO" + -F "maven2.groupId=$groupId" + -F "maven2.artifactId=$artifact" + -F "maven2.version=$version" + ) + + n=1 + if [ -n "$pom" ]; then + args+=( -F "maven2.asset${n}=@${pom}" -F "maven2.asset${n}.extension=pom" ); n=$((n+1)) + fi + if [ -n "$jar" ]; then + args+=( -F "maven2.asset${n}=@${jar}" -F "maven2.asset${n}.extension=jar" ); n=$((n+1)) + fi + if [ -n "$mod" ]; then + args+=( -F "maven2.asset${n}=@${mod}" -F "maven2.asset${n}.extension=module" ); n=$((n+1)) + fi + + http_code="$(curl -w "%{http_code}" -o "$RESP" "${args[@]}" || true)" + if [ "$http_code" = "204" ] || [ "$http_code" = "201" ]; then + echo "$groupId:$artifact:$version" >> "$OKLOG" + return 0 + else + echo "FAIL $http_code $groupId:$artifact:$version" >> "$FAILLOG" + sed -e 's/\r$//' "$RESP" >> "$FAILLOG" || true + echo >> "$FAILLOG" + return 1 + fi +} + +fails=0 +while IFS= read -r d; do + if ! upload_dir "$d"; then + fails=$((fails+1)) + fi +done < "$LIST" + +echo "DONE. ok=$(wc -l < "$OKLOG" | tr -d ' ') fail=$fails" +echo "OKLOG : $OKLOG" +echo "FAILLOG: $FAILLOG" diff --git a/label/label-to-review/settings.gradle b/label/label-to-review/settings.gradle index c96106d..c394640 100644 --- a/label/label-to-review/settings.gradle +++ b/label/label-to-review/settings.gradle @@ -1,6 +1,16 @@ pluginManagement { - plugins { - id 'org.jetbrains.kotlin.jvm' version '2.2.20' +// plugins { +// id 'org.jetbrains.kotlin.jvm' version '2.2.20' +// } + repositories { + maven { + url = uri( + System.getProperty("org.gradle.project.repoUrl") + ?: System.getenv("ORG_GRADLE_PROJECT_repoUrl") + ?: "http://172.16.4.56:18100/repository/maven-public/" + ) + allowInsecureProtocol = true + } } } rootProject.name = 'kamco-label-to-review' diff --git a/label/review-to-geojson/.gradle/9.3.1/checksums/checksums.lock b/label/review-to-geojson/.gradle/9.3.1/checksums/checksums.lock index 3a7a0e8..5ba300b 100644 Binary files a/label/review-to-geojson/.gradle/9.3.1/checksums/checksums.lock and b/label/review-to-geojson/.gradle/9.3.1/checksums/checksums.lock differ diff --git a/label/review-to-geojson/.gradle/9.3.1/checksums/md5-checksums.bin b/label/review-to-geojson/.gradle/9.3.1/checksums/md5-checksums.bin index b7b73b2..adbd4b4 100644 Binary files a/label/review-to-geojson/.gradle/9.3.1/checksums/md5-checksums.bin and b/label/review-to-geojson/.gradle/9.3.1/checksums/md5-checksums.bin differ diff --git a/label/review-to-geojson/.gradle/9.3.1/checksums/sha1-checksums.bin b/label/review-to-geojson/.gradle/9.3.1/checksums/sha1-checksums.bin index b6ba500..0e52fb5 100644 Binary files a/label/review-to-geojson/.gradle/9.3.1/checksums/sha1-checksums.bin and b/label/review-to-geojson/.gradle/9.3.1/checksums/sha1-checksums.bin differ diff --git a/label/review-to-geojson/.gradle/9.3.1/executionHistory/executionHistory.bin b/label/review-to-geojson/.gradle/9.3.1/executionHistory/executionHistory.bin index 49639f4..73f1293 100644 Binary files a/label/review-to-geojson/.gradle/9.3.1/executionHistory/executionHistory.bin and b/label/review-to-geojson/.gradle/9.3.1/executionHistory/executionHistory.bin differ diff --git a/label/review-to-geojson/.gradle/9.3.1/executionHistory/executionHistory.lock b/label/review-to-geojson/.gradle/9.3.1/executionHistory/executionHistory.lock index 6cb0965..cd4e690 100644 Binary files a/label/review-to-geojson/.gradle/9.3.1/executionHistory/executionHistory.lock and b/label/review-to-geojson/.gradle/9.3.1/executionHistory/executionHistory.lock differ diff --git a/label/review-to-geojson/.gradle/9.3.1/fileHashes/fileHashes.bin b/label/review-to-geojson/.gradle/9.3.1/fileHashes/fileHashes.bin index 4258e1b..bb84904 100644 Binary files a/label/review-to-geojson/.gradle/9.3.1/fileHashes/fileHashes.bin and b/label/review-to-geojson/.gradle/9.3.1/fileHashes/fileHashes.bin differ diff --git a/label/review-to-geojson/.gradle/9.3.1/fileHashes/fileHashes.lock b/label/review-to-geojson/.gradle/9.3.1/fileHashes/fileHashes.lock index f5daf89..1821bc9 100644 Binary files a/label/review-to-geojson/.gradle/9.3.1/fileHashes/fileHashes.lock and b/label/review-to-geojson/.gradle/9.3.1/fileHashes/fileHashes.lock differ diff --git a/label/review-to-geojson/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/label/review-to-geojson/.gradle/buildOutputCleanup/buildOutputCleanup.lock index a843204..2945c6d 100644 Binary files a/label/review-to-geojson/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/label/review-to-geojson/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/label/review-to-geojson/.gradle/file-system.probe b/label/review-to-geojson/.gradle/file-system.probe index 0cdbc16..205db27 100644 Binary files a/label/review-to-geojson/.gradle/file-system.probe and b/label/review-to-geojson/.gradle/file-system.probe differ diff --git a/label/review-to-geojson/build/reports/problems/problems-report.html b/label/review-to-geojson/build/reports/problems/problems-report.html index 0b4fd33..4fa61c6 100644 --- a/label/review-to-geojson/build/reports/problems/problems-report.html +++ b/label/review-to-geojson/build/reports/problems/problems-report.html @@ -646,7 +646,7 @@ code + .copy-button { diff --git a/label/review-to-geojson/build/tmp/compileJava/previous-compilation-data.bin b/label/review-to-geojson/build/tmp/compileJava/previous-compilation-data.bin index c660272..b37067c 100644 Binary files a/label/review-to-geojson/build/tmp/compileJava/previous-compilation-data.bin and b/label/review-to-geojson/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/label/review-to-geojson/make_seed_bundle.sh b/label/review-to-geojson/make_seed_bundle.sh new file mode 100644 index 0000000..d7e365b --- /dev/null +++ b/label/review-to-geojson/make_seed_bundle.sh @@ -0,0 +1,100 @@ +#!/usr/bin/env bash +set -euo pipefail + +# ===== 설정 ===== +OUTDIR="${OUTDIR:-offline-seed}" +M2OUT="$OUTDIR/m2repo" +LOGDIR="$OUTDIR/logs" +mkdir -p "$M2OUT" "$LOGDIR" + +# Gradle이 실제로 사용하는 repo (build.gradle과 동일하게 유지) +# - 네 build.gradle은 mavenCentral + osgeo release 를 사용 +# - seed를 만들 땐 이 repo들이 열려 있어야 함 +GRADLE_CMD=(./gradlew --no-daemon) + +# ===== 0) 깨끗하게 시작(선택) ===== +# 너무 오래된 캐시 오염 방지용. 필요 없으면 주석 처리. +# rm -rf "${GRADLE_USER_HOME:-$HOME/.gradle}/caches/modules-2" + +# ===== 1) 필요한 task로 "resolve를 전부" 트리거 ===== +# - spotlessCheck 포함 (google-java-format 받게) +# - testClasses 포함 (test deps + bom/parent 받게) +# - build 포함 (네 build는 spotlessCheck에 dependsOn) +# - 단, test 실행은 제외 +echo "[1/4] Running Gradle to trigger ALL resolves..." +"${GRADLE_CMD[@]}" \ + clean compileJava testClasses spotlessCheck build \ + -x test \ + --refresh-dependencies \ + --debug \ + 2>&1 | tee "$LOGDIR/gradle-debug.log" + +# ===== 2) debug 로그에서 실제 접근한 Maven artifact URL 추출 ===== +# Gradle은 내부적으로 "resource: " 같은 형태로 찍는 경우가 많아서 +# http/https URL 중 Maven2 레이아웃에 해당하는 확장자만 뽑는다. +echo "[2/4] Extracting artifact URLs from Gradle debug log..." + +grep -Eo 'https?://[^ ]+\.(pom|jar|module|aar|sha1|md5)(\?[^ ]+)?' "$LOGDIR/gradle-debug.log" \ + | sed -E 's/\?.*$//' \ + | sort -u \ + > "$OUTDIR/artifact-urls.txt" + +echo " - URLs: $(wc -l < "$OUTDIR/artifact-urls.txt")" +echo " - saved: $OUTDIR/artifact-urls.txt" + +# ===== 3) URL들을 m2 레이아웃으로 다운로드 ===== +# URL 형태가 .../repository/maven-public/... 이거나 MavenCentral/osgeo 일 수 있음 +# 공통점: Maven2 레이아웃(/groupId/artifactId/version/...)을 그대로 가지고 있음 +echo "[3/4] Downloading artifacts into m2 layout..." + +download_one() { + local url="$1" + # Maven2 레이아웃에서 groupId부터의 상대경로를 잡는다. + # 케이스: + # - https://repo1.maven.org/maven2/ + # - https://repo.osgeo.org/repository/release/ + # - http://.../repository/maven-public/ + local rel + + if [[ "$url" == *"/maven2/"* ]]; then + rel="${url#*/maven2/}" + elif [[ "$url" == *"/repository/"*"/"*"/"* ]]; then + # /repository// 이후를 상대경로로 + rel="$(echo "$url" | sed -E 's#^https?://[^/]+/repository/[^/]+/##')" + else + # 알 수 없는 형태면 스킵(대부분 없음) + echo " - [SKIP] unknown url form: $url" + return 0 + fi + + # 저장 경로 + local dest="$M2OUT/$rel" + mkdir -p "$(dirname "$dest")" + + if [[ -f "$dest" ]]; then + return 0 + fi + + echo " - [GET] $rel" + curl -fSL "$url" -o "$dest" || { + # sha1/md5 같은 건 서버에 없을 수 있음 → 무시 + echo " !! failed: $url" + rm -f "$dest" 2>/dev/null || true + return 0 + } +} + +export -f download_one +export M2OUT + +# 순차 다운로드(안정성). 병렬 원하면 xargs -P로 바꿀 수 있음. +while IFS= read -r url; do + [[ -z "$url" ]] && continue + download_one "$url" +done < "$OUTDIR/artifact-urls.txt" + +# ===== 4) tgz 생성 ===== +echo "[4/4] Packing seed..." +tar -czf "$OUTDIR/m2repo-seed.tgz" -C "$OUTDIR" m2repo +ls -lh "$OUTDIR/m2repo-seed.tgz" +echo "OK: $OUTDIR/m2repo-seed.tgz" \ No newline at end of file diff --git a/shp-exporter/build.gradle b/shp-exporter/build.gradle index ea1b96f..0a7d18d 100755 --- a/shp-exporter/build.gradle +++ b/shp-exporter/build.gradle @@ -14,16 +14,27 @@ java { } } +//repositories { +// mavenCentral() +// maven { +// url 'https://repo.osgeo.org/repository/release/' +// } +// maven { +// url 'https://repo.osgeo.org/repository/geotools-releases/' +// } +// maven { +// url 'https://repo.osgeo.org/repository/snapshot/' +// } +//} + +def repoUrl = System.getProperty("org.gradle.project.repoUrl") + ?: System.getenv("ORG_GRADLE_PROJECT_repoUrl") + ?: "http://172.16.4.56:18100/repository/maven-public/" + repositories { - mavenCentral() maven { - url 'https://repo.osgeo.org/repository/release/' - } - maven { - url 'https://repo.osgeo.org/repository/geotools-releases/' - } - maven { - url 'https://repo.osgeo.org/repository/snapshot/' + url = uri(repoUrl) + allowInsecureProtocol = true } } diff --git a/shp-exporter/gradle/wrapper/gradle-wrapper.properties b/shp-exporter/gradle/wrapper/gradle-wrapper.properties index d4081da..078b65d 100755 --- a/shp-exporter/gradle/wrapper/gradle-wrapper.properties +++ b/shp-exporter/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip +#distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip +distributionUrl=http\://172.16.4.56:18100/repository/gradle-distributions/gradle-8.14.3-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/shp-exporter/make_seed_bundle_succ.sh b/shp-exporter/make_seed_bundle_succ.sh new file mode 100644 index 0000000..024878f --- /dev/null +++ b/shp-exporter/make_seed_bundle_succ.sh @@ -0,0 +1,293 @@ +#!/usr/bin/env bash +set -euo pipefail + +OUTDIR="${OUTDIR:-offline-seed}" +M2OUT="$OUTDIR/m2repo" +LOGDIR="$OUTDIR/logs" + +ARTIFACT_URLS="$OUTDIR/artifact-urls.txt" +FAILED_URLS="$OUTDIR/failed-urls.txt" +REAL_FAILED_URLS="$OUTDIR/real-failed-urls.txt" +IGNORED_FAILED_URLS="$OUTDIR/ignored-failed-urls.txt" +MISSING_URLS="$OUTDIR/missing-from-nexus.txt" +REAL_MISSING_URLS="$OUTDIR/real-missing-from-nexus.txt" +RETRY_URLS="$OUTDIR/retry-source-urls.txt" +REPO_CANDIDATES="$OUTDIR/repository-candidates.txt" +REPO_HINTS="$OUTDIR/repository-hints.txt" + +mkdir -p "$M2OUT" "$LOGDIR" +: > "$FAILED_URLS" +: > "$REAL_FAILED_URLS" +: > "$IGNORED_FAILED_URLS" +: > "$MISSING_URLS" +: > "$REAL_MISSING_URLS" +: > "$RETRY_URLS" +: > "$REPO_CANDIDATES" +: > "$REPO_HINTS" + +GRADLE_CMD=(./gradlew --no-daemon) + +SPRING_BOOT_PLUGIN_VERSION="${SPRING_BOOT_PLUGIN_VERSION:-3.5.7}" +DEPENDENCY_MGMT_PLUGIN_VERSION="${DEPENDENCY_MGMT_PLUGIN_VERSION:-1.1.7}" +SPOTLESS_PLUGIN_VERSION="${SPOTLESS_PLUGIN_VERSION:-6.25.0}" +QUERYDSL_VERSION="${QUERYDSL_VERSION:-5.0.0}" + +MAVEN_CENTRAL_BASE="${MAVEN_CENTRAL_BASE:-https://repo1.maven.org/maven2}" +GRADLE_PLUGIN_PORTAL_MAVEN_BASE="${GRADLE_PLUGIN_PORTAL_MAVEN_BASE:-https://plugins.gradle.org/m2}" +OSGEO_RELEASE_BASE="${OSGEO_RELEASE_BASE:-https://repo.osgeo.org/repository/release}" + +echo "[1/8] Running Gradle to trigger resolves..." +"${GRADLE_CMD[@]}" \ + clean compileJava testClasses spotlessCheck build \ + -x test \ + --refresh-dependencies \ + --debug \ + 2>&1 | tee "$LOGDIR/gradle-debug.log" || true + +echo "[2/8] Extracting resolved artifact URLs from Gradle debug log..." +grep -Eo 'https?://[^ ]+\.(pom|jar|module|aar|sha1|md5)(\?[^ ]+)?' "$LOGDIR/gradle-debug.log" \ + | sed -E 's/\?.*$//' \ + | sort -u \ + > "$ARTIFACT_URLS" + +echo " - URLs from log: $(wc -l < "$ARTIFACT_URLS")" + +echo "[3/8] Appending known required artifacts..." +cat >> "$ARTIFACT_URLS" < "$ARTIFACT_URLS.tmp" +mv "$ARTIFACT_URLS.tmp" "$ARTIFACT_URLS" +echo " - URLs after manual append: $(wc -l < "$ARTIFACT_URLS")" + +to_relative_path() { + local url="$1" + + if [[ "$url" == *"/maven2/"* ]]; then + printf '%s\n' "${url#*/maven2/}" + return 0 + fi + + if [[ "$url" == *"/m2/"* ]]; then + printf '%s\n' "${url#*/m2/}" + return 0 + fi + + if [[ "$url" =~ ^https?://[^/]+/repository/[^/]+/(.+)$ ]]; then + printf '%s\n' "${BASH_REMATCH[1]}" + return 0 + fi + + return 1 +} + +is_ignorable_url() { + local url="$1" + + case "$url" in + */org.springframework.boot.gradle.plugin-*.jar) + return 0 + ;; + */org.springframework.boot.gradle.plugin-*.module) + return 0 + ;; + */io.spring.dependency-management.gradle.plugin-*.jar) + return 0 + ;; + */io.spring.dependency-management.gradle.plugin-*.module) + return 0 + ;; + */com.diffplug.spotless.gradle.plugin-*.jar) + return 0 + ;; + */com.diffplug.spotless.gradle.plugin-*.module) + return 0 + ;; + */com/querydsl/querydsl-apt/*/querydsl-apt-*.module) + return 0 + ;; + */com/querydsl/querydsl-jpa/*/querydsl-jpa-*.module) + return 0 + ;; + *) + return 1 + ;; + esac +} + +map_upstream_url() { + local url="$1" + local rel + + if ! rel="$(to_relative_path "$url")"; then + return 1 + fi + + case "$rel" in + org/geotools/*|it/geosolutions/*|javax/media/*) + printf '%s/%s\n' "$OSGEO_RELEASE_BASE" "$rel" + ;; + io/spring/dependency-management/*|io/spring/gradle/dependency-management-plugin/*) + printf '%s/%s\n' "$GRADLE_PLUGIN_PORTAL_MAVEN_BASE" "$rel" + ;; + com/diffplug/spotless/*) + printf '%s/%s\n' "$GRADLE_PLUGIN_PORTAL_MAVEN_BASE" "$rel" + ;; + *) + printf '%s/%s\n' "$MAVEN_CENTRAL_BASE" "$rel" + ;; + esac +} + +echo "[4/8] Collecting artifacts that were missing in Nexus during Gradle resolve..." +grep 'Resource missing\.' "$LOGDIR/gradle-debug.log" \ + | sed -nE 's#.*\[HTTP (HEAD|GET): (https?://[^]]+)\]#\2#p' \ + | sort -u \ + > "$MISSING_URLS" || true + +while IFS= read -r url; do + [[ -z "$url" ]] && continue + if is_ignorable_url "$url"; then + printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS" + continue + fi + printf '%s\n' "$url" >> "$REAL_MISSING_URLS" + mapped="$(map_upstream_url "$url" || true)" + if [[ -n "${mapped:-}" ]] && ! is_ignorable_url "$mapped"; then + printf '%s\n' "$mapped" >> "$RETRY_URLS" + printf '%s\n' "${mapped%/*}" >> "$REPO_HINTS" + fi +done < "$MISSING_URLS" + +sort -u "$REAL_MISSING_URLS" -o "$REAL_MISSING_URLS" +sort -u "$IGNORED_FAILED_URLS" -o "$IGNORED_FAILED_URLS" +sort -u "$RETRY_URLS" -o "$RETRY_URLS" +sort -u "$REPO_HINTS" -o "$REPO_HINTS" + +cat "$RETRY_URLS" >> "$ARTIFACT_URLS" +sort -u "$ARTIFACT_URLS" -o "$ARTIFACT_URLS" + +echo " - Missing URLs in Nexus log: $(wc -l < "$MISSING_URLS")" +echo " - Real missing URLs: $(wc -l < "$REAL_MISSING_URLS")" +echo " - Ignored missing URLs: $(wc -l < "$IGNORED_FAILED_URLS")" + +download_one() { + local url="$1" + local rel + + if is_ignorable_url "$url"; then + printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS" + return 0 + fi + + if ! rel="$(to_relative_path "$url")"; then + echo " - [SKIP] unknown URL form: $url" + return 0 + fi + + local dest="$M2OUT/$rel" + mkdir -p "$(dirname "$dest")" + + if [[ -f "$dest" ]]; then + return 0 + fi + + echo " - [GET] $rel" + if ! curl -fSL "$url" -o "$dest"; then + echo "$url" >> "$FAILED_URLS" + rm -f "$dest" 2>/dev/null || true + if is_ignorable_url "$url"; then + printf '%s\n' "$url" >> "$IGNORED_FAILED_URLS" + else + printf '%s\n' "$url" >> "$REAL_FAILED_URLS" + echo " !! failed: $url" + fi + fi +} + +export -f to_relative_path +export -f is_ignorable_url +export -f download_one +export M2OUT FAILED_URLS REAL_FAILED_URLS IGNORED_FAILED_URLS + +echo "[5/8] Downloading artifacts into m2 layout..." +while IFS= read -r url; do + [[ -z "$url" ]] && continue + download_one "$url" +done < "$ARTIFACT_URLS" + +sort -u "$FAILED_URLS" -o "$FAILED_URLS" +sort -u "$REAL_FAILED_URLS" -o "$REAL_FAILED_URLS" +sort -u "$IGNORED_FAILED_URLS" -o "$IGNORED_FAILED_URLS" + +echo "[6/8] Extracting repository candidates declared inside downloaded POMs..." +while IFS= read -r -d '' pom; do + awk -v pom="$pom" ' + // { in_repo=1; id=""; url=""; next } + /<\/repository>/ { + if (in_repo && url != "" && url !~ /^file:/) { + print url "\t" pom "\t" id + } + in_repo=0 + id="" + url="" + next + } + in_repo { + if (match($0, /([^<]+)<\/id>/, m)) { + id=m[1] + } + if (match($0, /([^<]+)<\/url>/, m)) { + url=m[1] + } + } + ' "$pom" +done < <(find "$M2OUT" -type f -name '*.pom' -print0) \ + | sort -u \ + > "$REPO_CANDIDATES" + +echo " - POM repository candidates: $(wc -l < "$REPO_CANDIDATES")" + +echo "[7/8] Packing seed bundle..." +tar -czf "$OUTDIR/m2repo-seed.tgz" -C "$OUTDIR" m2repo +ls -lh "$OUTDIR/m2repo-seed.tgz" + +echo "[8/8] Summary" +echo " seed bundle : $OUTDIR/m2repo-seed.tgz" +echo " artifact URLs : $ARTIFACT_URLS" +echo " raw missing : $MISSING_URLS" +echo " real missing : $REAL_MISSING_URLS" +echo " raw failed : $FAILED_URLS" +echo " real failed : $REAL_FAILED_URLS" +echo " ignored failed : $IGNORED_FAILED_URLS" +echo " retry source URLs : $RETRY_URLS" +echo " repository hints : $REPO_HINTS" +echo " POM repo candidates : $REPO_CANDIDATES" \ No newline at end of file diff --git a/shp-exporter/offline_upload_to_nexus.sh b/shp-exporter/offline_upload_to_nexus.sh new file mode 100644 index 0000000..36c1629 --- /dev/null +++ b/shp-exporter/offline_upload_to_nexus.sh @@ -0,0 +1,98 @@ +#!/usr/bin/env bash +set -euo pipefail + +# ====== 여기만 네 환경에 맞게 ====== +NEXUS="http://localhost:18100" # 또는 http://localhost:18100 http://172.16.4.56:18100 +REPO="maven-releases" # 가능하면 seed 전용 repo로 바꿔라 (maven-seed) +USER="admin" +PASS="Kamco2026!" # 실제 비번 +# =================================== + +# 압축 풀기 +rm -rf m2repo offline-seed/m2repo +tar -xzf m2repo-seed.tgz + +ROOT="./m2repo" +[ -d "$ROOT" ] || ROOT="./offline-seed/m2repo" +[ -d "$ROOT" ] || { echo "m2repo not found"; exit 1; } + +LOGDIR="./upload-logs" +mkdir -p "$LOGDIR" +OKLOG="$LOGDIR/ok.txt" +FAILLOG="$LOGDIR/fail.txt" +RESP="$LOGDIR/resp.tmp" +LIST="$LOGDIR/version_dirs.txt" +: > "$OKLOG" +: > "$FAILLOG" + +# 핵심: "버전 디렉토리(끝이 숫자/버전)"만 잡기 = m2repo/**// +# depth 고정 대신: 'pom/jar/module'이 존재하는 디렉토리만 수집 +find "$ROOT" -type f \( -name "*.pom" -o -name "*.jar" -o -name "*.module" \) -print0 \ + | xargs -0 -n1 dirname \ + | sort -u > "$LIST" + +count="$(wc -l < "$LIST" | tr -d ' ')" +echo "Version dirs = $count" +[ "$count" -gt 0 ] || { echo "No version dirs found"; exit 1; } + +upload_dir() { + local verDir="$1" + local rel="${verDir#${ROOT}/}" + + # rel = group/path/artifact/version + local groupPath artifact version groupId + groupPath="$(echo "$rel" | awk -F/ '{for(i=1;i<=NF-2;i++) printf (i==NF-2? $i : $i "/")}')" + artifact="$(echo "$rel" | awk -F/ '{print $(NF-1)}')" + version="$(echo "$rel" | awk -F/ '{print $NF}')" + groupId="${groupPath//\//.}" + + local pom jar mod + pom="$(ls -1 "$verDir"/*.pom 2>/dev/null | head -n 1 || true)" + jar="$(ls -1 "$verDir"/*.jar 2>/dev/null | head -n 1 || true)" + mod="$(ls -1 "$verDir"/*.module 2>/dev/null | head -n 1 || true)" + + [ -z "$pom" ] && [ -z "$jar" ] && return 0 + + echo "UPLOAD: $groupId:$artifact:$version" + + args=( + -sS -u "$USER:$PASS" + -X POST "$NEXUS/service/rest/v1/components?repository=$REPO" + -F "maven2.groupId=$groupId" + -F "maven2.artifactId=$artifact" + -F "maven2.version=$version" + ) + + n=1 + if [ -n "$pom" ]; then + args+=( -F "maven2.asset${n}=@${pom}" -F "maven2.asset${n}.extension=pom" ); n=$((n+1)) + fi + if [ -n "$jar" ]; then + args+=( -F "maven2.asset${n}=@${jar}" -F "maven2.asset${n}.extension=jar" ); n=$((n+1)) + fi + if [ -n "$mod" ]; then + args+=( -F "maven2.asset${n}=@${mod}" -F "maven2.asset${n}.extension=module" ); n=$((n+1)) + fi + + http_code="$(curl -w "%{http_code}" -o "$RESP" "${args[@]}" || true)" + if [ "$http_code" = "204" ] || [ "$http_code" = "201" ]; then + echo "$groupId:$artifact:$version" >> "$OKLOG" + return 0 + else + echo "FAIL $http_code $groupId:$artifact:$version" >> "$FAILLOG" + sed -e 's/\r$//' "$RESP" >> "$FAILLOG" || true + echo >> "$FAILLOG" + return 1 + fi +} + +fails=0 +while IFS= read -r d; do + if ! upload_dir "$d"; then + fails=$((fails+1)) + fi +done < "$LIST" + +echo "DONE. ok=$(wc -l < "$OKLOG" | tr -d ' ') fail=$fails" +echo "OKLOG : $OKLOG" +echo "FAILLOG: $FAILLOG" diff --git a/shp-exporter/src/main/java/com/kamco/makesample/service/GeoServerRegistrationService.java b/shp-exporter/src/main/java/com/kamco/makesample/service/GeoServerRegistrationService.java index 28be6f5..77389c4 100644 --- a/shp-exporter/src/main/java/com/kamco/makesample/service/GeoServerRegistrationService.java +++ b/shp-exporter/src/main/java/com/kamco/makesample/service/GeoServerRegistrationService.java @@ -259,7 +259,7 @@ public class GeoServerRegistrationService { // Construct file:// URL (must point to .shp file, not .zip) // String fileUrl = "file://" + shpFilePath; - String fileUrl = shpFilePath; + String fileUrl = shpFilePath; log.info("Using file URL: {}", fileUrl); // GeoServer REST API endpoint for external file reference