image: python:3.13 stages: # - lint - test - deploy variables: UV_CACHE_DIR: "$CI_PROJECT_DIR/.uv-cache" cache: paths: - .uv-cache/ .uv_setup: &uv_setup - curl -LsSf https://astral.sh/uv/install.sh | sh - export PATH="$HOME/.cargo/bin:$PATH" - source $HOME/.local/bin/env workflow: rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH - if: $CI_COMMIT_TAG #lint: # stage: lint # before_script: # - *uv_setup # script: # - uv sync # - uv run ruff check . # --- Data platform --- test:cli: stage: test before_script: - *uv_setup script: - uv sync - uv run pytest tests rules: - changes: - src/**/* - tests/**/* - pyproject.toml test:sqlmesh: stage: test before_script: - *uv_setup script: - uv sync - cd transform/sqlmesh_materia && uv run sqlmesh test rules: - changes: - transform/**/* # --- Web app --- test:web: stage: test before_script: - *uv_setup script: - uv sync - cd web && uv run pytest tests/ -x -q - cd web && uv run ruff check src/ tests/ rules: - changes: - web/**/* deploy:web: stage: deploy image: alpine:latest needs: [test:web] rules: - if: $CI_COMMIT_BRANCH == "master" before_script: - apk add --no-cache openssh-client - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - - mkdir -p ~/.ssh - chmod 700 ~/.ssh - echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts script: - | ssh "$DEPLOY_USER@$DEPLOY_HOST" "cat > /opt/beanflows/web/.env" << ENVEOF APP_NAME=$APP_NAME SECRET_KEY=$SECRET_KEY BASE_URL=$BASE_URL DEBUG=false DATABASE_PATH=data/app.db MAGIC_LINK_EXPIRY_MINUTES=$MAGIC_LINK_EXPIRY_MINUTES SESSION_LIFETIME_DAYS=$SESSION_LIFETIME_DAYS RESEND_API_KEY=$RESEND_API_KEY EMAIL_FROM=$EMAIL_FROM RESEND_AUDIENCE_WAITLIST=$RESEND_AUDIENCE_WAITLIST ADMIN_EMAILS=$ADMIN_EMAILS WAITLIST_MODE=$WAITLIST_MODE RATE_LIMIT_REQUESTS=$RATE_LIMIT_REQUESTS RATE_LIMIT_WINDOW=$RATE_LIMIT_WINDOW PADDLE_API_KEY=$PADDLE_API_KEY PADDLE_WEBHOOK_SECRET=$PADDLE_WEBHOOK_SECRET PADDLE_ENVIRONMENT=$PADDLE_ENVIRONMENT PADDLE_PRICE_STARTER=$PADDLE_PRICE_STARTER PADDLE_PRICE_PRO=$PADDLE_PRICE_PRO UMAMI_SCRIPT_URL=$UMAMI_SCRIPT_URL UMAMI_WEBSITE_ID=$UMAMI_WEBSITE_ID SERVING_DUCKDB_PATH=$SERVING_DUCKDB_PATH ENVEOF - ssh "$DEPLOY_USER@$DEPLOY_HOST" "chmod 600 /opt/beanflows/web/.env" - ssh "$DEPLOY_USER@$DEPLOY_HOST" "cd /opt/beanflows && git pull origin master && cd web && bash deploy.sh"