Compare commits

...

2 Commits

Author SHA1 Message Date
Jenkins Bot
9329b49e88 Release: Merge develop to main 2026-01-05 21:24:33 +00:00
David Ali
374843574e fix: npm publish 2026-01-05 22:21:47 +01:00

35
Jenkinsfile vendored
View File

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