diff --git a/.env.sample b/.env.sample index 8627d06..615e134 100644 --- a/.env.sample +++ b/.env.sample @@ -1,4 +1,3 @@ -export TEAM_ID=$(cs list workspaces | grep $WORKSPACE_ID | awk '{print $2}') export UV_PYTHON_INSTALL_DIR=/home/user/app/.codesphere-internal/.uv-python-install export UV_PYTHON_BIN_DIR=/home/user/app/.codesphere-internal/.uv-python-bin export UV_CACHE_DIR=/home/user/app/.codesphere-internal/.uv diff --git a/README.md b/README.md index bfcc8f0..c9a54eb 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,5 @@ # python-demo test -before running any stage you will need to set up a 'CS_TOKEN' env var containing an Codesphere API key. - # open backend api docs `/api/docs` or `/api/redoc` diff --git a/ci.Qa.yml b/ci.Qa.yml index 3d0f976..06c3b43 100644 --- a/ci.Qa.yml +++ b/ci.Qa.yml @@ -1,56 +1,54 @@ schemaVersion: v0.2 prepare: steps: - - name: install Codesphere cli tool - command: mkdir -p $HOME/.local/bin && wget -qO- - 'https://api.github.com/repos/codesphere-cloud/cs-go/releases/latest' | - grep linux_amd64 | grep browser_download_url | sed s/.*https/https/ | - sed s/\".*$// | xargs wget -O $HOME/.local/bin/cs && chmod +x - $HOME/.local/bin/cs - name: install uv standalone version - command: curl -LsSf https://astral.sh/uv/install.sh | env - UV_INSTALL_DIR="$HOME/app" sh && chmod +x $HOME/app/uv - - command: cp -n .env.sample .env - - name: "set ev vars " - command: . .env && cs set-env -w $WORKSPACE_ID -t $TEAM_ID --env-var - UV_PYTHON_INSTALL_DIR=$PWD/.codesphere-internal/.uv-python-install - --env-var UV_PYTHON_BIN_DIR=$PWD/.codesphere-internal/.uv-python-bin - --env-var UV_CACHE_DIR=$PWD/.codesphere-internal/.uv --env-var - UV_PYTHON_CACHE_DIR=$PWD/.codesphere-internal/.uv-python + command: command -v uv >/dev/null 2>&1 || { curl -LsSf https://astral.sh/uv/install.sh + | env UV_INSTALL_DIR="$HOME/app" sh && chmod +x $HOME/app/uv; } - name: install frontend environment - command: . ./env && cd frontend && { [ ! -d ".venv" ] && uv venv; uv sync - --no-dev; } + command: UV=$(command -v uv 2>/dev/null || echo $HOME/app/uv) && cd frontend + && { [ ! -d ".venv" ] && UV_PYTHON_INSTALL_DIR=/home/user/app/.codesphere-internal/.uv-python-install UV_PYTHON_BIN_DIR=/home/user/app/.codesphere-internal/.uv-python-bin UV_CACHE_DIR=/home/user/app/.codesphere-internal/.uv UV_PYTHON_CACHE_DIR=/home/user/app/.codesphere-internal/.uv-python $UV venv; UV_PYTHON_INSTALL_DIR=/home/user/app/.codesphere-internal/.uv-python-install UV_PYTHON_BIN_DIR=/home/user/app/.codesphere-internal/.uv-python-bin UV_CACHE_DIR=/home/user/app/.codesphere-internal/.uv UV_PYTHON_CACHE_DIR=/home/user/app/.codesphere-internal/.uv-python $UV sync --no-dev; } - name: install backend environment - command: . ./env && cd backend && { [ ! -d ".venv" ] && uv venv; uv sync - --no-dev; } + command: UV=$(command -v uv 2>/dev/null || echo $HOME/app/uv) && cd backend + && { [ ! -d ".venv" ] && UV_PYTHON_INSTALL_DIR=/home/user/app/.codesphere-internal/.uv-python-install UV_PYTHON_BIN_DIR=/home/user/app/.codesphere-internal/.uv-python-bin UV_CACHE_DIR=/home/user/app/.codesphere-internal/.uv UV_PYTHON_CACHE_DIR=/home/user/app/.codesphere-internal/.uv-python $UV venv; UV_PYTHON_INSTALL_DIR=/home/user/app/.codesphere-internal/.uv-python-install UV_PYTHON_BIN_DIR=/home/user/app/.codesphere-internal/.uv-python-bin UV_CACHE_DIR=/home/user/app/.codesphere-internal/.uv UV_PYTHON_CACHE_DIR=/home/user/app/.codesphere-internal/.uv-python $UV sync --no-dev; } test: steps: [] run: frontend: steps: - name: start frontend application - command: ". ./env && cd frontend && uv run streamlit run main.py - --server.headless true --server.address 0.0.0.0 --server.port 3000 - --browser.gatherUsageStats false --logger.level info " + command: UV=$(command -v uv 2>/dev/null || echo $HOME/app/uv) && cd frontend + && $UV run streamlit run main.py --server.headless true --server.address + 0.0.0.0 --server.port 3000 --browser.gatherUsageStats false --logger.level + info plan: 20 replicas: 1 isPublic: true network: path: / stripPath: false + env: + UV_PYTHON_INSTALL_DIR: /home/user/app/.codesphere-internal/.uv-python-install + UV_PYTHON_BIN_DIR: /home/user/app/.codesphere-internal/.uv-python-bin + UV_CACHE_DIR: /home/user/app/.codesphere-internal/.uv + UV_PYTHON_CACHE_DIR: /home/user/app/.codesphere-internal/.uv-python backend: steps: - name: start backend application - command: . ./env && cd backend && uv run uvicorn app:app --port 3000 --host - 0.0.0.0 --workers 2 + command: UV=$(command -v uv 2>/dev/null || echo $HOME/app/uv) && cd backend + && $UV run uvicorn app:app --port 3000 --host 0.0.0.0 --workers 2 plan: 20 replicas: 1 isPublic: false + env: + UV_PYTHON_INSTALL_DIR: /home/user/app/.codesphere-internal/.uv-python-install + UV_PYTHON_BIN_DIR: /home/user/app/.codesphere-internal/.uv-python-bin + UV_CACHE_DIR: /home/user/app/.codesphere-internal/.uv + UV_PYTHON_CACHE_DIR: /home/user/app/.codesphere-internal/.uv-python api-docs: steps: - name: deploy docs - command: . ./env && cd backend && uv run uvicorn doc:app_docs --host 0.0.0.0 - --port 3000 --workers 2 + command: UV=$(command -v uv 2>/dev/null || echo $HOME/app/uv) && cd backend + && $UV run uvicorn doc:app_docs --host 0.0.0.0 --port 3000 --workers 2 plan: 20 replicas: 1 isPublic: true diff --git a/ci.dev.yml b/ci.dev.yml index b82cf69..caa9031 100644 --- a/ci.dev.yml +++ b/ci.dev.yml @@ -1,66 +1,64 @@ schemaVersion: v0.2 prepare: steps: - - name: install Codesphere cli tool - command: mkdir -p $HOME/.local/bin && wget -qO- - 'https://api.github.com/repos/codesphere-cloud/cs-go/releases/latest' | - grep linux_amd64 | grep browser_download_url | sed s/.*https/https/ | - sed s/\".*$// | xargs wget -O $HOME/.local/bin/cs && chmod +x - $HOME/.local/bin/cs - name: install uv standalone version - command: curl -LsSf https://astral.sh/uv/install.sh | env - UV_INSTALL_DIR="$HOME/app" sh && chmod +x $HOME/app/uv - - name: copy template .env file - command: cp -n .env.sample .env - - name: "set ev vars " - command: . .env && cs set-env -w $WORKSPACE_ID -t $TEAM_ID --env-var - UV_PYTHON_INSTALL_DIR=$PWD/.codesphere-internal/.uv-python-install - --env-var UV_PYTHON_BIN_DIR=$PWD/.codesphere-internal/.uv-python-bin - --env-var UV_CACHE_DIR=$PWD/.codesphere-internal/.uv --env-var - UV_PYTHON_CACHE_DIR=$PWD/.codesphere-internal/.uv-python + command: command -v uv >/dev/null 2>&1 || { curl -LsSf https://astral.sh/uv/install.sh + | env UV_INSTALL_DIR="$HOME/app" sh && chmod +x $HOME/app/uv; } - name: install frontend environment - command: . ./env && cd frontend && { [ ! -d ".venv" ] && uv venv; uv sync; } + command: UV=$(command -v uv 2>/dev/null || echo $HOME/app/uv) && cd frontend + && { [ ! -d ".venv" ] && UV_PYTHON_INSTALL_DIR=/home/user/app/.codesphere-internal/.uv-python-install UV_PYTHON_BIN_DIR=/home/user/app/.codesphere-internal/.uv-python-bin UV_CACHE_DIR=/home/user/app/.codesphere-internal/.uv UV_PYTHON_CACHE_DIR=/home/user/app/.codesphere-internal/.uv-python $UV venv; UV_PYTHON_INSTALL_DIR=/home/user/app/.codesphere-internal/.uv-python-install UV_PYTHON_BIN_DIR=/home/user/app/.codesphere-internal/.uv-python-bin UV_CACHE_DIR=/home/user/app/.codesphere-internal/.uv UV_PYTHON_CACHE_DIR=/home/user/app/.codesphere-internal/.uv-python $UV sync; } - name: install backend environment - command: . ./env && cd backend && { [ ! -d ".venv" ] && uv venv; uv sync; } + command: UV=$(command -v uv 2>/dev/null || echo $HOME/app/uv) && cd backend + && { [ ! -d ".venv" ] && UV_PYTHON_INSTALL_DIR=/home/user/app/.codesphere-internal/.uv-python-install UV_PYTHON_BIN_DIR=/home/user/app/.codesphere-internal/.uv-python-bin UV_CACHE_DIR=/home/user/app/.codesphere-internal/.uv UV_PYTHON_CACHE_DIR=/home/user/app/.codesphere-internal/.uv-python $UV venv; UV_PYTHON_INSTALL_DIR=/home/user/app/.codesphere-internal/.uv-python-install UV_PYTHON_BIN_DIR=/home/user/app/.codesphere-internal/.uv-python-bin UV_CACHE_DIR=/home/user/app/.codesphere-internal/.uv UV_PYTHON_CACHE_DIR=/home/user/app/.codesphere-internal/.uv-python $UV sync; } test: steps: - name: test frontend - command: . ./env && cd frontend && uv run pytest + command: UV=$(command -v uv 2>/dev/null || echo $HOME/app/uv) && cd frontend && $UV run pytest - name: test backend - command: ". ./env && cd backend && uv run pytest " + command: UV=$(command -v uv 2>/dev/null || echo $HOME/app/uv) && cd backend && $UV run pytest - name: security check frontend - command: '. ./env && cd frontend && uv run bandit -r . -c pyproject.toml - --format=custom --msg-template "{abspath}:{line}: {test_id}[{severity}]: - {msg}" -o bandit-results.txt' + command: 'UV=$(command -v uv 2>/dev/null || echo $HOME/app/uv) && cd frontend + && $UV run bandit -r . -c pyproject.toml --format=custom --msg-template + "{abspath}:{line}: {test_id}[{severity}]: {msg}" -o bandit-results.txt' - name: security check backend - command: '. ./env && cd backend && uv run bandit -r . -c pyproject.toml - --format=custom --msg-template "{abspath}:{line}: {test_id}[{severity}]: - {msg}" -o bandit-results.txt' + command: 'UV=$(command -v uv 2>/dev/null || echo $HOME/app/uv) && cd backend + && $UV run bandit -r . -c pyproject.toml --format=custom --msg-template + "{abspath}:{line}: {test_id}[{severity}]: {msg}" -o bandit-results.txt' run: frontend: steps: - name: start frontend application - command: . ./env && cd frontend && uv run streamlit run --server.address 0.0.0.0 - --server.port 3000 main.py + command: UV=$(command -v uv 2>/dev/null || echo $HOME/app/uv) && cd frontend + && $UV run streamlit run --server.address 0.0.0.0 --server.port 3000 main.py plan: 20 replicas: 1 isPublic: true network: path: / stripPath: false + env: + UV_PYTHON_INSTALL_DIR: /home/user/app/.codesphere-internal/.uv-python-install + UV_PYTHON_BIN_DIR: /home/user/app/.codesphere-internal/.uv-python-bin + UV_CACHE_DIR: /home/user/app/.codesphere-internal/.uv + UV_PYTHON_CACHE_DIR: /home/user/app/.codesphere-internal/.uv-python backend: steps: - name: start backend application - command: . ./env && cd backend && uv run uvicorn app:app --reload --port 3000 - --host 0.0.0.0 + command: UV=$(command -v uv 2>/dev/null || echo $HOME/app/uv) && cd backend + && $UV run uvicorn app:app --reload --port 3000 --host 0.0.0.0 plan: 20 replicas: 1 isPublic: false + env: + UV_PYTHON_INSTALL_DIR: /home/user/app/.codesphere-internal/.uv-python-install + UV_PYTHON_BIN_DIR: /home/user/app/.codesphere-internal/.uv-python-bin + UV_CACHE_DIR: /home/user/app/.codesphere-internal/.uv + UV_PYTHON_CACHE_DIR: /home/user/app/.codesphere-internal/.uv-python api-docs: steps: - name: deploy docs - command: . ./env && cd backend && uv run uvicorn doc:app_docs --host 0.0.0.0 - --port 3000 + command: UV=$(command -v uv 2>/dev/null || echo $HOME/app/uv) && cd backend + && $UV run uvicorn doc:app_docs --host 0.0.0.0 --port 3000 plan: 20 replicas: 1 isPublic: true diff --git a/ci.prod.yml b/ci.prod.yml index 2f51ae9..831b84e 100644 --- a/ci.prod.yml +++ b/ci.prod.yml @@ -1,52 +1,54 @@ schemaVersion: v0.2 prepare: steps: - - name: install Codesphere cli tool - command: mkdir -p $HOME/.local/bin && wget -qO- - 'https://api.github.com/repos/codesphere-cloud/cs-go/releases/latest' | - grep linux_amd64 | grep browser_download_url | sed s/.*https/https/ | - sed s/\".*$// | xargs wget -O $HOME/.local/bin/cs && chmod +x - $HOME/.local/bin/cs - name: install uv standalone version - command: nix-env -iA nixpkgs.uv - - name: "set ev vars " - command: . .env && cs set-env -w $WORKSPACE_ID -t $TEAM_ID --env-var - UV_PYTHON_INSTALL_DIR=$PWD/.codesphere-internal/.uv-python-install - --env-var UV_PYTHON_BIN_DIR=$PWD/.codesphere-internal/.uv-python-bin - --env-var UV_CACHE_DIR=$PWD/.codesphere-internal/.uv --env-var - UV_PYTHON_CACHE_DIR=$PWD/.codesphere-internal/.uv-python + command: command -v uv >/dev/null 2>&1 || { curl -LsSf https://astral.sh/uv/install.sh + | env UV_INSTALL_DIR="$HOME/app" sh && chmod +x $HOME/app/uv; } - name: install frontend environment - command: cd frontend && { [ ! -d ".venv" ] && uv venv; uv sync --no-dev; } + command: UV=$(command -v uv 2>/dev/null || echo $HOME/app/uv) && cd frontend + && { [ ! -d ".venv" ] && UV_PYTHON_INSTALL_DIR=/home/user/app/.codesphere-internal/.uv-python-install UV_PYTHON_BIN_DIR=/home/user/app/.codesphere-internal/.uv-python-bin UV_CACHE_DIR=/home/user/app/.codesphere-internal/.uv UV_PYTHON_CACHE_DIR=/home/user/app/.codesphere-internal/.uv-python $UV venv; UV_PYTHON_INSTALL_DIR=/home/user/app/.codesphere-internal/.uv-python-install UV_PYTHON_BIN_DIR=/home/user/app/.codesphere-internal/.uv-python-bin UV_CACHE_DIR=/home/user/app/.codesphere-internal/.uv UV_PYTHON_CACHE_DIR=/home/user/app/.codesphere-internal/.uv-python $UV sync --no-dev; } - name: install backend environment - command: cd backend && { [ ! -d ".venv" ] && uv venv; uv sync --no-dev; } + command: UV=$(command -v uv 2>/dev/null || echo $HOME/app/uv) && cd backend + && { [ ! -d ".venv" ] && UV_PYTHON_INSTALL_DIR=/home/user/app/.codesphere-internal/.uv-python-install UV_PYTHON_BIN_DIR=/home/user/app/.codesphere-internal/.uv-python-bin UV_CACHE_DIR=/home/user/app/.codesphere-internal/.uv UV_PYTHON_CACHE_DIR=/home/user/app/.codesphere-internal/.uv-python $UV venv; UV_PYTHON_INSTALL_DIR=/home/user/app/.codesphere-internal/.uv-python-install UV_PYTHON_BIN_DIR=/home/user/app/.codesphere-internal/.uv-python-bin UV_CACHE_DIR=/home/user/app/.codesphere-internal/.uv UV_PYTHON_CACHE_DIR=/home/user/app/.codesphere-internal/.uv-python $UV sync --no-dev; } test: steps: [] run: frontend: steps: - name: start frontend application - command: "cd frontend && uv run streamlit run main.py --server.headless true - --server.address 0.0.0.0 --server.port 3000 --browser.gatherUsageStats - false --logger.level info " + command: UV=$(command -v uv 2>/dev/null || echo $HOME/app/uv) && cd frontend + && $UV run streamlit run main.py --server.headless true --server.address + 0.0.0.0 --server.port 3000 --browser.gatherUsageStats false --logger.level + info plan: 8 replicas: 1 isPublic: true network: path: / stripPath: false + env: + UV_PYTHON_INSTALL_DIR: /home/user/app/.codesphere-internal/.uv-python-install + UV_PYTHON_BIN_DIR: /home/user/app/.codesphere-internal/.uv-python-bin + UV_CACHE_DIR: /home/user/app/.codesphere-internal/.uv + UV_PYTHON_CACHE_DIR: /home/user/app/.codesphere-internal/.uv-python backend: steps: - name: start backend application - command: cd backend && uv run uvicorn app:app --port 3000 --host 0.0.0.0 - --workers 2 + command: UV=$(command -v uv 2>/dev/null || echo $HOME/app/uv) && cd backend + && $UV run uvicorn app:app --port 3000 --host 0.0.0.0 --workers 2 plan: 8 replicas: 1 isPublic: false + env: + UV_PYTHON_INSTALL_DIR: /home/user/app/.codesphere-internal/.uv-python-install + UV_PYTHON_BIN_DIR: /home/user/app/.codesphere-internal/.uv-python-bin + UV_CACHE_DIR: /home/user/app/.codesphere-internal/.uv + UV_PYTHON_CACHE_DIR: /home/user/app/.codesphere-internal/.uv-python api-docs: steps: - name: deploy docs - command: cd backend && uv run uvicorn doc:app_docs --host 0.0.0.0 --port 3000 - --workers 2 + command: UV=$(command -v uv 2>/dev/null || echo $HOME/app/uv) && cd backend + && $UV run uvicorn doc:app_docs --host 0.0.0.0 --port 3000 --workers 2 plan: 8 replicas: 1 isPublic: true diff --git a/ci.yml b/ci.yml index 80289cc..831b84e 100644 --- a/ci.yml +++ b/ci.yml @@ -1,50 +1,54 @@ schemaVersion: v0.2 prepare: steps: - - name: install Codesphere cli tool - command: mkdir -p $HOME/.local/bin && wget -qO- - 'https://api.github.com/repos/codesphere-cloud/cs-go/releases/latest' | - grep linux_amd64 | grep browser_download_url | sed s/.*https/https/ | - sed s/\".*$// | xargs wget -O $HOME/.local/bin/cs && chmod +x - $HOME/.local/bin/cs - name: install uv standalone version - command: curl -LsSf https://astral.sh/uv/install.sh | env - UV_INSTALL_DIR="$HOME/app" sh && chmod +x $HOME/app/uv - - command: cp -n .env.sample .env + command: command -v uv >/dev/null 2>&1 || { curl -LsSf https://astral.sh/uv/install.sh + | env UV_INSTALL_DIR="$HOME/app" sh && chmod +x $HOME/app/uv; } - name: install frontend environment - command: . ./env && cd frontend && { [ ! -d ".venv" ] && uv venv; uv sync - --no-dev; } + command: UV=$(command -v uv 2>/dev/null || echo $HOME/app/uv) && cd frontend + && { [ ! -d ".venv" ] && UV_PYTHON_INSTALL_DIR=/home/user/app/.codesphere-internal/.uv-python-install UV_PYTHON_BIN_DIR=/home/user/app/.codesphere-internal/.uv-python-bin UV_CACHE_DIR=/home/user/app/.codesphere-internal/.uv UV_PYTHON_CACHE_DIR=/home/user/app/.codesphere-internal/.uv-python $UV venv; UV_PYTHON_INSTALL_DIR=/home/user/app/.codesphere-internal/.uv-python-install UV_PYTHON_BIN_DIR=/home/user/app/.codesphere-internal/.uv-python-bin UV_CACHE_DIR=/home/user/app/.codesphere-internal/.uv UV_PYTHON_CACHE_DIR=/home/user/app/.codesphere-internal/.uv-python $UV sync --no-dev; } - name: install backend environment - command: . ./env && cd backend && { [ ! -d ".venv" ] && uv venv; uv sync - --no-dev; } + command: UV=$(command -v uv 2>/dev/null || echo $HOME/app/uv) && cd backend + && { [ ! -d ".venv" ] && UV_PYTHON_INSTALL_DIR=/home/user/app/.codesphere-internal/.uv-python-install UV_PYTHON_BIN_DIR=/home/user/app/.codesphere-internal/.uv-python-bin UV_CACHE_DIR=/home/user/app/.codesphere-internal/.uv UV_PYTHON_CACHE_DIR=/home/user/app/.codesphere-internal/.uv-python $UV venv; UV_PYTHON_INSTALL_DIR=/home/user/app/.codesphere-internal/.uv-python-install UV_PYTHON_BIN_DIR=/home/user/app/.codesphere-internal/.uv-python-bin UV_CACHE_DIR=/home/user/app/.codesphere-internal/.uv UV_PYTHON_CACHE_DIR=/home/user/app/.codesphere-internal/.uv-python $UV sync --no-dev; } test: steps: [] run: frontend: steps: - name: start frontend application - command: ". ./env && cd frontend && uv run streamlit run main.py - --server.headless true --server.address 0.0.0.0 --server.port 3000 - --browser.gatherUsageStats false --logger.level info " + command: UV=$(command -v uv 2>/dev/null || echo $HOME/app/uv) && cd frontend + && $UV run streamlit run main.py --server.headless true --server.address + 0.0.0.0 --server.port 3000 --browser.gatherUsageStats false --logger.level + info plan: 8 replicas: 1 isPublic: true network: path: / stripPath: false + env: + UV_PYTHON_INSTALL_DIR: /home/user/app/.codesphere-internal/.uv-python-install + UV_PYTHON_BIN_DIR: /home/user/app/.codesphere-internal/.uv-python-bin + UV_CACHE_DIR: /home/user/app/.codesphere-internal/.uv + UV_PYTHON_CACHE_DIR: /home/user/app/.codesphere-internal/.uv-python backend: steps: - name: start backend application - command: . ./env && cd backend && uv run uvicorn app:app --port 3000 --host - 0.0.0.0 --workers 2 + command: UV=$(command -v uv 2>/dev/null || echo $HOME/app/uv) && cd backend + && $UV run uvicorn app:app --port 3000 --host 0.0.0.0 --workers 2 plan: 8 replicas: 1 isPublic: false + env: + UV_PYTHON_INSTALL_DIR: /home/user/app/.codesphere-internal/.uv-python-install + UV_PYTHON_BIN_DIR: /home/user/app/.codesphere-internal/.uv-python-bin + UV_CACHE_DIR: /home/user/app/.codesphere-internal/.uv + UV_PYTHON_CACHE_DIR: /home/user/app/.codesphere-internal/.uv-python api-docs: steps: - name: deploy docs - command: . ./env && cd backend && uv run uvicorn doc:app_docs --host 0.0.0.0 - --port 3000 --workers 2 + command: UV=$(command -v uv 2>/dev/null || echo $HOME/app/uv) && cd backend + && $UV run uvicorn doc:app_docs --host 0.0.0.0 --port 3000 --workers 2 plan: 8 replicas: 1 isPublic: true