From 22407bd9b22b2e40b0b11813ba15c32904c1cccc Mon Sep 17 00:00:00 2001 From: isUnknown Date: Wed, 8 Oct 2025 14:47:21 +0200 Subject: [PATCH] improve CI --- .gitlab-ci.yml | 73 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 59 insertions(+), 14 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 35f4c9e..cf749df 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,13 +2,38 @@ stages: - build - deploy -build: +variables: + COMPOSER_ALLOW_SUPERUSER: '1' + +build_prod: stage: build + only: + - prod image: composer:2 script: - apk add --no-cache nodejs npm - npm install - - if [ "$CI_COMMIT_REF_NAME" = "preprod" ]; then npm run build:preprod; else npm run build; fi + - npm run build + - cd dist + - composer install --no-dev --optimize-autoloader --ignore-platform-req=ext-gd + - cd .. + artifacts: + paths: + - dist/ + cache: + key: ${CI_COMMIT_REF_SLUG} + paths: + - node_modules/ + +build_preprod: + stage: build + only: + - preprod + image: composer:2 + script: + - apk add --no-cache nodejs npm + - npm install + - npm run build:preprod - cd dist - composer install --no-dev --optimize-autoloader --ignore-platform-req=ext-gd - cd .. @@ -23,31 +48,51 @@ build: deploy_prod: stage: deploy image: node:latest - needs: ['build'] only: - main before_script: - apt-get update -qq && apt-get install -y rsync sshpass script: - cd dist - - if [ ! -d "vendor" ]; then echo "Error: vendor/ not found"; exit 1; fi - - sshpass -p "$PASSWORD" rsync -az --delete -O --exclude 'accounts/' --exclude 'cache/' --exclude 'sessions/' -e "ssh -p 2244 -o StrictHostKeyChecking=no" site/ $USERNAME@$HOST:$PROD_PATH/site/ - - sshpass -p "$PASSWORD" rsync -az --delete -O -e "ssh -p 2244 -o StrictHostKeyChecking=no" vendor/ $USERNAME@$HOST:$PROD_PATH/vendor/ - - sshpass -p "$PASSWORD" rsync -az --delete -O -e "ssh -p 2244 -o StrictHostKeyChecking=no" kirby/ $USERNAME@$HOST:$PROD_PATH/kirby/ - - sshpass -p "$PASSWORD" rsync -az --delete -O --exclude 'tiles/' -e "ssh -p 2244 -o StrictHostKeyChecking=no" assets/ $USERNAME@$HOST:$PROD_PATH/assets/ + - | + rsync_deploy() { + local src=$1 + local dst=$2 + local exclude=$3 + cmd="sshpass -p \"$PASSWORD\" rsync -az --delete -O" + [[ -n $exclude ]] && cmd="$cmd $exclude" + cmd="$cmd -e 'ssh -p 2244 -o StrictHostKeyChecking=no' $src $USERNAME@$HOST:$dst" + echo "$cmd" + eval $cmd + } + + rsync_deploy site/ "$PROD_PATH/site/" "--exclude 'accounts/' --exclude 'cache/' --exclude 'sessions/'" + rsync_deploy vendor/ "$PROD_PATH/vendor/" + rsync_deploy kirby/ "$PROD_PATH/kirby/" + rsync_deploy assets/ "$PROD_PATH/assets/" "--exclude 'tiles/'" deploy_preprod: stage: deploy image: node:latest - needs: ['build'] only: - preprod before_script: - apt-get update -qq && apt-get install -y rsync sshpass script: - cd dist - - if [ ! -d "vendor" ]; then echo "Error: vendor/ not found"; exit 1; fi - - sshpass -p "$PASSWORD" rsync -az --delete -O --exclude 'accounts/' --exclude 'cache/' --exclude 'sessions/' -e "ssh -p 2244 -o StrictHostKeyChecking=no" site/ $USERNAME@$HOST:$PREPROD_PATH/site/ - - sshpass -p "$PASSWORD" rsync -az --delete -O -e "ssh -p 2244 -o StrictHostKeyChecking=no" vendor/ $USERNAME@$HOST:$PREPROD_PATH/vendor/ - - sshpass -p "$PASSWORD" rsync -az --delete -O -e "ssh -p 2244 -o StrictHostKeyChecking=no" kirby/ $USERNAME@$HOST:$PREPROD_PATH/kirby/ - - sshpass -p "$PASSWORD" rsync -az --delete -O --exclude 'tiles/' -e "ssh -p 2244 -o StrictHostKeyChecking=no" assets/ $USERNAME@$HOST:$PREPROD_PATH/assets/ + - | + rsync_deploy() { + local src=$1 + local dst=$2 + local exclude=$3 + cmd="sshpass -p \"$PASSWORD\" rsync -az --delete -O" + [[ -n $exclude ]] && cmd="$cmd $exclude" + cmd="$cmd -e 'ssh -p 2244 -o StrictHostKeyChecking=no' $src $USERNAME@$HOST:$dst" + echo "$cmd" + eval $cmd + } + + rsync_deploy site/ "$PREPROD_PATH/site/" "--exclude 'accounts/' --exclude 'cache/' --exclude 'sessions/'" + rsync_deploy vendor/ "$PREPROD_PATH/vendor/" + rsync_deploy kirby/ "$PREPROD_PATH/kirby/" + rsync_deploy assets/ "$PREPROD_PATH/assets/" "--exclude 'tiles/'"