feat: Use caching in pipeline
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -64,3 +64,6 @@ legalconsenthub/.api-client-middleware
|
|||||||
### TestContainers persistent data ###
|
### TestContainers persistent data ###
|
||||||
legalconsenthub-backend/postgres-data/
|
legalconsenthub-backend/postgres-data/
|
||||||
|
|
||||||
|
### Docker BuildKit cache ###
|
||||||
|
.buildx-cache/
|
||||||
|
|
||||||
|
|||||||
79
pipeline.sh
79
pipeline.sh
@@ -116,15 +116,15 @@ validate_environment() {
|
|||||||
frontend_job() {
|
frontend_job() {
|
||||||
local log_file="$TEMP_DIR/frontend.log"
|
local log_file="$TEMP_DIR/frontend.log"
|
||||||
local use_prefix=$1
|
local use_prefix=$1
|
||||||
|
|
||||||
(
|
(
|
||||||
set +e
|
set +e
|
||||||
|
|
||||||
echo "==================== FRONTEND JOB ===================="
|
echo "==================== FRONTEND JOB ===================="
|
||||||
log_info "Starting frontend build..."
|
log_info "Starting frontend build..."
|
||||||
|
|
||||||
cd "$SCRIPT_DIR/legalconsenthub" || exit 1
|
cd "$SCRIPT_DIR/legalconsenthub" || exit 1
|
||||||
|
|
||||||
log_info "Installing dependencies..."
|
log_info "Installing dependencies..."
|
||||||
pnpm install --frozen-lockfile
|
pnpm install --frozen-lockfile
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
@@ -132,7 +132,7 @@ frontend_job() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
log_success "Dependencies installed"
|
log_success "Dependencies installed"
|
||||||
|
|
||||||
log_info "Running linting..."
|
log_info "Running linting..."
|
||||||
pnpm lint
|
pnpm lint
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
@@ -140,7 +140,7 @@ frontend_job() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
log_success "Linting passed"
|
log_success "Linting passed"
|
||||||
|
|
||||||
log_info "Running type checking..."
|
log_info "Running type checking..."
|
||||||
pnpm type-check
|
pnpm type-check
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
@@ -148,42 +148,44 @@ frontend_job() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
log_success "Type checking passed"
|
log_success "Type checking passed"
|
||||||
|
|
||||||
log_info "Building Docker image..."
|
log_info "Building Docker image..."
|
||||||
docker buildx build \
|
docker buildx build \
|
||||||
--platform linux/amd64 \
|
--platform linux/amd64 \
|
||||||
--tag "gitea.lugnas.de/denis/legalconsenthub:latest" \
|
--tag "gitea.lugnas.de/denis/legalconsenthub:latest" \
|
||||||
--tag "gitea.lugnas.de/denis/legalconsenthub:$GIT_SHA" \
|
--tag "gitea.lugnas.de/denis/legalconsenthub:$GIT_SHA" \
|
||||||
--file ./Dockerfile \
|
--file ./Dockerfile \
|
||||||
|
--cache-from type=local,src="$SCRIPT_DIR/.buildx-cache/frontend" \
|
||||||
|
--cache-to type=local,dest="$SCRIPT_DIR/.buildx-cache/frontend",mode=max \
|
||||||
--push \
|
--push \
|
||||||
..
|
..
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
log_error "Docker build failed"
|
log_error "Docker build failed"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log_success "Docker image built and pushed successfully"
|
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:latest"
|
||||||
log_info "Image: gitea.lugnas.de/denis/legalconsenthub:$GIT_SHA"
|
log_info "Image: gitea.lugnas.de/denis/legalconsenthub:$GIT_SHA"
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
) 2>&1 | if [ "$use_prefix" = true ]; then prefix_output "FRONTEND" "$BLUE"; else cat; fi | tee "$log_file"
|
) 2>&1 | if [ "$use_prefix" = true ]; then prefix_output "FRONTEND" "$BLUE"; else cat; fi | tee "$log_file"
|
||||||
|
|
||||||
return ${PIPESTATUS[0]}
|
return ${PIPESTATUS[0]}
|
||||||
}
|
}
|
||||||
|
|
||||||
backend_job() {
|
backend_job() {
|
||||||
local log_file="$TEMP_DIR/backend.log"
|
local log_file="$TEMP_DIR/backend.log"
|
||||||
local use_prefix=$1
|
local use_prefix=$1
|
||||||
|
|
||||||
(
|
(
|
||||||
set +e
|
set +e
|
||||||
|
|
||||||
echo "==================== BACKEND JOB ===================="
|
echo "==================== BACKEND JOB ===================="
|
||||||
log_info "Starting backend build..."
|
log_info "Starting backend build..."
|
||||||
|
|
||||||
cd "$SCRIPT_DIR/legalconsenthub-backend" || exit 1
|
cd "$SCRIPT_DIR/legalconsenthub-backend" || exit 1
|
||||||
|
|
||||||
log_info "Building application..."
|
log_info "Building application..."
|
||||||
./gradlew build -x test
|
./gradlew build -x test
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
@@ -191,7 +193,7 @@ backend_job() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
log_success "Build completed"
|
log_success "Build completed"
|
||||||
|
|
||||||
log_info "Running ktlint check..."
|
log_info "Running ktlint check..."
|
||||||
./gradlew ktlintCheck
|
./gradlew ktlintCheck
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
@@ -199,7 +201,7 @@ backend_job() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
log_success "ktlint check passed"
|
log_success "ktlint check passed"
|
||||||
|
|
||||||
log_info "Running tests..."
|
log_info "Running tests..."
|
||||||
./gradlew test
|
./gradlew test
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
@@ -207,33 +209,36 @@ backend_job() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
log_success "Tests passed"
|
log_success "Tests passed"
|
||||||
|
|
||||||
log_info "Building Docker image..."
|
log_info "Building Docker image..."
|
||||||
|
mkdir -p "$SCRIPT_DIR/.buildx-cache/backend"
|
||||||
docker buildx build \
|
docker buildx build \
|
||||||
--platform linux/amd64 \
|
--platform linux/amd64 \
|
||||||
--tag "gitea.lugnas.de/denis/legalconsenthub-backend:latest" \
|
--tag "gitea.lugnas.de/denis/legalconsenthub-backend:latest" \
|
||||||
--tag "gitea.lugnas.de/denis/legalconsenthub-backend:$GIT_SHA" \
|
--tag "gitea.lugnas.de/denis/legalconsenthub-backend:$GIT_SHA" \
|
||||||
--file ./Dockerfile \
|
--file ./Dockerfile \
|
||||||
|
--cache-from type=local,src="$SCRIPT_DIR/.buildx-cache/backend" \
|
||||||
|
--cache-to type=local,dest="$SCRIPT_DIR/.buildx-cache/backend",mode=max \
|
||||||
--push \
|
--push \
|
||||||
..
|
..
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
log_error "Docker build failed"
|
log_error "Docker build failed"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log_success "Docker image built and pushed successfully"
|
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:latest"
|
||||||
log_info "Image: gitea.lugnas.de/denis/legalconsenthub-backend:$GIT_SHA"
|
log_info "Image: gitea.lugnas.de/denis/legalconsenthub-backend:$GIT_SHA"
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
) 2>&1 | if [ "$use_prefix" = true ]; then prefix_output "BACKEND" "$GREEN"; else cat; fi | tee "$log_file"
|
) 2>&1 | if [ "$use_prefix" = true ]; then prefix_output "BACKEND" "$GREEN"; else cat; fi | tee "$log_file"
|
||||||
|
|
||||||
return ${PIPESTATUS[0]}
|
return ${PIPESTATUS[0]}
|
||||||
}
|
}
|
||||||
|
|
||||||
run_jobs() {
|
run_jobs() {
|
||||||
local run_parallel=false
|
local run_parallel=false
|
||||||
|
|
||||||
if [ "$RUN_FRONTEND" = true ] && [ "$RUN_BACKEND" = true ]; then
|
if [ "$RUN_FRONTEND" = true ] && [ "$RUN_BACKEND" = true ]; then
|
||||||
run_parallel=true
|
run_parallel=true
|
||||||
log_info "Starting parallel jobs..."
|
log_info "Starting parallel jobs..."
|
||||||
@@ -241,22 +246,22 @@ run_jobs() {
|
|||||||
log_info "Starting job..."
|
log_info "Starting job..."
|
||||||
fi
|
fi
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
local frontend_exit=0
|
local frontend_exit=0
|
||||||
local backend_exit=0
|
local backend_exit=0
|
||||||
|
|
||||||
if [ "$run_parallel" = true ]; then
|
if [ "$run_parallel" = true ]; then
|
||||||
frontend_job true &
|
frontend_job true &
|
||||||
local frontend_pid=$!
|
local frontend_pid=$!
|
||||||
|
|
||||||
backend_job true &
|
backend_job true &
|
||||||
local backend_pid=$!
|
local backend_pid=$!
|
||||||
|
|
||||||
log_info "Frontend PID: $frontend_pid"
|
log_info "Frontend PID: $frontend_pid"
|
||||||
log_info "Backend PID: $backend_pid"
|
log_info "Backend PID: $backend_pid"
|
||||||
log_info "Waiting for jobs to complete..."
|
log_info "Waiting for jobs to complete..."
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
set +e
|
set +e
|
||||||
wait $frontend_pid
|
wait $frontend_pid
|
||||||
frontend_exit=$?
|
frontend_exit=$?
|
||||||
@@ -270,7 +275,7 @@ run_jobs() {
|
|||||||
frontend_exit=$?
|
frontend_exit=$?
|
||||||
set -e
|
set -e
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$RUN_BACKEND" = true ]; then
|
if [ "$RUN_BACKEND" = true ]; then
|
||||||
set +e
|
set +e
|
||||||
backend_job false
|
backend_job false
|
||||||
@@ -281,9 +286,9 @@ run_jobs() {
|
|||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "==================== JOB SUMMARY ===================="
|
echo "==================== JOB SUMMARY ===================="
|
||||||
|
|
||||||
local has_failure=false
|
local has_failure=false
|
||||||
|
|
||||||
if [ "$RUN_FRONTEND" = true ]; then
|
if [ "$RUN_FRONTEND" = true ]; then
|
||||||
if [ "$frontend_exit" -eq 0 ]; then
|
if [ "$frontend_exit" -eq 0 ]; then
|
||||||
log_success "Frontend job completed successfully"
|
log_success "Frontend job completed successfully"
|
||||||
@@ -292,7 +297,7 @@ run_jobs() {
|
|||||||
has_failure=true
|
has_failure=true
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$RUN_BACKEND" = true ]; then
|
if [ "$RUN_BACKEND" = true ]; then
|
||||||
if [ "$backend_exit" -eq 0 ]; then
|
if [ "$backend_exit" -eq 0 ]; then
|
||||||
log_success "Backend job completed successfully"
|
log_success "Backend job completed successfully"
|
||||||
@@ -301,25 +306,25 @@ run_jobs() {
|
|||||||
has_failure=true
|
has_failure=true
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$has_failure" = true ]; then
|
if [ "$has_failure" = true ]; then
|
||||||
log_error "One or more jobs failed. Aborting pipeline."
|
log_error "One or more jobs failed. Aborting pipeline."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log_success "All jobs completed successfully"
|
log_success "All jobs completed successfully"
|
||||||
}
|
}
|
||||||
|
|
||||||
launch_in_iterm() {
|
launch_in_iterm() {
|
||||||
log_info "Launching pipeline in new iTerm window..."
|
log_info "Launching pipeline in new iTerm window..."
|
||||||
|
|
||||||
local script_path="$0"
|
local script_path="$0"
|
||||||
local args=""
|
local args=""
|
||||||
|
|
||||||
for arg in "$@"; do
|
for arg in "$@"; do
|
||||||
args="$args $arg"
|
args="$args $arg"
|
||||||
done
|
done
|
||||||
|
|
||||||
osascript <<EOF
|
osascript <<EOF
|
||||||
tell application "iTerm"
|
tell application "iTerm"
|
||||||
create window with default profile
|
create window with default profile
|
||||||
@@ -329,7 +334,7 @@ tell application "iTerm"
|
|||||||
activate
|
activate
|
||||||
end tell
|
end tell
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
log_success "Pipeline launched in iTerm window"
|
log_success "Pipeline launched in iTerm window"
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
@@ -352,7 +357,7 @@ deploy() {
|
|||||||
|
|
||||||
main() {
|
main() {
|
||||||
local original_args=("$@")
|
local original_args=("$@")
|
||||||
|
|
||||||
while [[ $# -gt 0 ]]; do
|
while [[ $# -gt 0 ]]; do
|
||||||
case $1 in
|
case $1 in
|
||||||
--deploy)
|
--deploy)
|
||||||
|
|||||||
Reference in New Issue
Block a user