diff --git a/Jenkinsfile b/Jenkinsfile index 59a9626..1ffcc9a 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -59,56 +59,59 @@ pipeline { } steps { withCredentials([string(credentialsId: 'npm-token', variable: 'NPM_TOKEN')]) { - script { - echo '--- [MAIN] Start procedury publikacji ---' - - // 1. Pobierz wersję używając grep i cut (działa bez Node.js na hoście) - // Szuka linii "version": "x.x.x", wycina 4. pole (wersję) - def localVersion = sh(script: "grep '\"version\":' package.json | cut -d\\\" -f4", returnStdout: true).trim() - echo "Lokalna wersja w package.json: ${localVersion}" - - // 2. Przygotuj środowisko w kontenerze - // Tworzymy plik .npmrc lokalnie - sh 'echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > .npmrc' - - // WAŻNE: Przebudowujemy obraz 'app', aby wciągnął .npmrc i aktualny kod do środka - // (Rozwiązuje to problem montowania plików w Docker-outside-of-Docker) - sh 'docker compose -f docker-compose.test.yml build app' + script { + echo '--- [MAIN] Start procedury publikacji ---' + + // 1. Pobierz wersję (bez zmian) + def localVersion = sh(script: "grep '\"version\":' package.json | cut -d\\\" -f4", returnStdout: true).trim() + echo "Lokalna wersja w package.json: ${localVersion}" + + // 2. Utwórz plik .npmrc lokalnie + sh 'echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > .npmrc' + + // UWAGA: Nie musimy robić 'docker compose build', bo używamy obrazu z testów + // Jeśli chcesz mieć pewność, że obraz jest świeży, możesz zostawić build, + // ale kluczowe jest mapowanie w następnych krokach. - // 3. Sprawdź wersję w NPM (używając kontenera z Node) - def versionExists = false - try { - // Uruchamiamy npm view wewnątrz kontenera - // Jeśli wersja nie istnieje, npm zwróci błąd (exit 1), który złapiemy - sh "docker compose -f docker-compose.test.yml run --rm app npm view wc-timer@${localVersion} version" - versionExists = true - } catch (err) { - versionExists = false - } - - // 4. Decyzja - if (versionExists) { - echo "❌ BŁĄD: Wersja ${localVersion} jest już opublikowana w NPM!" - error("Przerwano publikację: Wersja ${localVersion} już istnieje.") - } else { - echo "🚀 Wersja ${localVersion} jest nowa. Publikuję z kontenera..." - - // Publikacja z wewnątrz kontenera - sh 'docker compose -f docker-compose.test.yml run --rm app npm publish --access public' - - echo "✅ SUKCES: Wersja ${localVersion} została opublikowana." - } + // 3. Sprawdź wersję w NPM + def versionExists = false + try { + // Dodajemy flagę -w (workdir) aby npm widział package.json + sh "docker compose -f docker-compose.test.yml run --rm -w /app/wc-timer app npm view wc-timer@${localVersion} version" + versionExists = true + } catch (err) { + versionExists = false } + + if (versionExists) { + echo "❌ BŁĄD: Wersja ${localVersion} jest już opublikowana w NPM!" + error("Przerwano publikację: Wersja ${localVersion} już istnieje.") + } else { + echo "🚀 Wersja ${localVersion} jest nowa. Publikuję z kontenera..." + + // NAPRAWA GŁÓWNA: + // -w /app/wc-timer : wchodzimy do folderu z plikiem package.json + // -v $(pwd)/.npmrc:/app/wc-timer/.npmrc : montujemy plik z tokenem + sh """ + docker compose -f docker-compose.test.yml run --rm \ + -w /app/wc-timer \ + -v \$(pwd)/.npmrc:/app/wc-timer/.npmrc \ + app \ + npm publish --access public + """ + + echo "✅ SUKCES: Wersja ${localVersion} została opublikowana." + } + } } - } - post { + } + post { always { echo '--- [MAIN] Sprzątanie ---' sh 'rm -f .npmrc' - // Czyścimy też obrazy dockerowe po publikacji - sh 'docker compose -f docker-compose.test.yml down -v --rmi local' + sh 'docker compose -f docker-compose.test.yml down -v' } - } } + } } } \ No newline at end of file