fix(pipeline): Exit full pipeline on a single error

This commit is contained in:
2025-11-23 09:11:39 +01:00
parent 287302bd0e
commit e769bfb011

View File

@@ -111,26 +111,39 @@ validate_environment() {
}
frontend_job() {
local exit_code=0
local log_file="$TEMP_DIR/frontend.log"
local use_prefix=$1
{
(
set +e
echo "==================== FRONTEND JOB ===================="
log_info "Starting frontend build..."
cd "$SCRIPT_DIR/legalconsenthub"
cd "$SCRIPT_DIR/legalconsenthub" || exit 1
log_info "Installing dependencies..."
pnpm install --frozen-lockfile
if [ $? -ne 0 ]; then
log_error "Dependencies installation failed"
exit 1
fi
log_success "Dependencies installed"
log_info "Running linting..."
pnpm lint
if [ $? -ne 0 ]; then
log_error "Linting failed"
exit 1
fi
log_success "Linting passed"
log_info "Running type checking..."
pnpm type-check
if [ $? -ne 0 ]; then
log_error "Type checking failed"
exit 1
fi
log_success "Type checking passed"
log_info "Building Docker image..."
@@ -141,40 +154,55 @@ frontend_job() {
--file ./Dockerfile \
--push \
..
if [ $? -ne 0 ]; then
log_error "Docker build failed"
exit 1
fi
log_success "Docker image built and pushed successfully"
log_info "Image: gitea.lugnas.de/denis/legalconsenthub:latest"
log_info "Image: gitea.lugnas.de/denis/legalconsenthub:$GIT_SHA"
echo "0" > "$TEMP_DIR/frontend_exit_code"
} 2>&1 | if [ "$use_prefix" = true ]; then prefix_output "FRONTEND" "$BLUE"; else cat; fi | tee "$log_file" || {
exit_code=$?
log_error "Frontend job failed with exit code $exit_code"
echo "$exit_code" > "$TEMP_DIR/frontend_exit_code"
}
exit 0
) 2>&1 | if [ "$use_prefix" = true ]; then prefix_output "FRONTEND" "$BLUE"; else cat; fi | tee "$log_file"
return ${PIPESTATUS[0]}
}
backend_job() {
local exit_code=0
local log_file="$TEMP_DIR/backend.log"
local use_prefix=$1
{
(
set +e
echo "==================== BACKEND JOB ===================="
log_info "Starting backend build..."
cd "$SCRIPT_DIR/legalconsenthub-backend"
cd "$SCRIPT_DIR/legalconsenthub-backend" || exit 1
log_info "Building application..."
./gradlew build -x test
if [ $? -ne 0 ]; then
log_error "Build failed"
exit 1
fi
log_success "Build completed"
log_info "Running ktlint check..."
./gradlew ktlintCheck
if [ $? -ne 0 ]; then
log_error "ktlint check failed"
exit 1
fi
log_success "ktlint check passed"
log_info "Running tests..."
./gradlew test
if [ $? -ne 0 ]; then
log_error "Tests failed"
exit 1
fi
log_success "Tests passed"
log_info "Building Docker image..."
@@ -185,17 +213,19 @@ backend_job() {
--file ./Dockerfile \
--push \
..
if [ $? -ne 0 ]; then
log_error "Docker build failed"
exit 1
fi
log_success "Docker image built and pushed successfully"
log_info "Image: gitea.lugnas.de/denis/legalconsenthub-backend:latest"
log_info "Image: gitea.lugnas.de/denis/legalconsenthub-backend:$GIT_SHA"
echo "0" > "$TEMP_DIR/backend_exit_code"
} 2>&1 | if [ "$use_prefix" = true ]; then prefix_output "BACKEND" "$GREEN"; else cat; fi | tee "$log_file" || {
exit_code=$?
log_error "Backend job failed with exit code $exit_code"
echo "$exit_code" > "$TEMP_DIR/backend_exit_code"
}
exit 0
) 2>&1 | if [ "$use_prefix" = true ]; then prefix_output "BACKEND" "$GREEN"; else cat; fi | tee "$log_file"
return ${PIPESTATUS[0]}
}
run_jobs() {
@@ -209,6 +239,9 @@ run_jobs() {
fi
echo ""
local frontend_exit=0
local backend_exit=0
if [ "$run_parallel" = true ]; then
frontend_job true &
local frontend_pid=$!
@@ -221,37 +254,39 @@ run_jobs() {
log_info "Waiting for jobs to complete..."
echo ""
set +e
wait $frontend_pid
frontend_exit=$?
wait $backend_pid
backend_exit=$?
set -e
else
if [ "$RUN_FRONTEND" = true ]; then
set +e
frontend_job false
frontend_exit=$?
set -e
fi
if [ "$RUN_BACKEND" = true ]; then
set +e
backend_job false
backend_exit=$?
set -e
fi
fi
local frontend_exit=0
local backend_exit=0
if [ "$RUN_FRONTEND" = true ]; then
frontend_exit=$(cat "$TEMP_DIR/frontend_exit_code" 2>/dev/null || echo "1")
fi
if [ "$RUN_BACKEND" = true ]; then
backend_exit=$(cat "$TEMP_DIR/backend_exit_code" 2>/dev/null || echo "1")
fi
echo ""
echo "==================== JOB SUMMARY ===================="
local has_failure=false
if [ "$RUN_FRONTEND" = true ]; then
if [ "$frontend_exit" -eq 0 ]; then
log_success "Frontend job completed successfully"
else
log_error "Frontend job failed with exit code $frontend_exit"
has_failure=true
fi
fi
@@ -260,10 +295,11 @@ run_jobs() {
log_success "Backend job completed successfully"
else
log_error "Backend job failed with exit code $backend_exit"
has_failure=true
fi
fi
if [ "$frontend_exit" -ne 0 ] || [ "$backend_exit" -ne 0 ]; then
if [ "$has_failure" = true ]; then
log_error "One or more jobs failed. Aborting pipeline."
exit 1
fi
@@ -281,7 +317,7 @@ deploy() {
echo "==================== DEPLOYMENT ===================="
log_info "Starting deployment to server..."
ssh -F ~/.ssh/config -i ~/.ssh/gitea_deploy -p 32766 -o StrictHostKeyChecking=accept-new deploy@ds218 "sudo /usr/local/bin/deployLegalconsenthub.sh"
ssh -i ~/.ssh/gitea_deploy -p 32766 -o StrictHostKeyChecking=accept-new deploy@ds218 "sudo /usr/local/bin/deployLegalconsenthub.sh"
log_success "Deployment triggered successfully"
log_success "Application is being deployed to production"