fix: npm publish
This commit is contained in:
89
Jenkinsfile
vendored
89
Jenkinsfile
vendored
@@ -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'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user