diff --git a/.env b/.env index a69b788c..c96b55cb 100644 --- a/.env +++ b/.env @@ -1,3 +1,6 @@ +# DEPRECATED: This file is a legacy reference file. +# For local builds: versions are no longer tracked, :latest is used automatically +# For GCP builds: use .gcp.env instead SENTRIUS_VERSION=1.1.62 SENTRIUS_SSH_VERSION=1.1.16 SENTRIUS_KEYCLOAK_VERSION=1.1.18 diff --git a/.gitignore b/.gitignore index 151dfcc5..a4848a7b 100644 --- a/.gitignore +++ b/.gitignore @@ -48,6 +48,8 @@ package-lock.json .settings/* .env.bak +.local.env.bak +.gcp.env.bak cp.env.bak .generated.env api/node_modules/ diff --git a/.local.env b/.local.env index 4eecd0ea..c0c970b9 100644 --- a/.local.env +++ b/.local.env @@ -1,4 +1,7 @@ -SENTRIUS_VERSION=1.1.523 +# DEPRECATED: This file is no longer used for local builds. +# Local builds now use :latest tag automatically. +# This file is kept for backward compatibility only. +SENTRIUS_VERSION=1.1.507 SENTRIUS_SSH_VERSION=1.1.45 SENTRIUS_KEYCLOAK_VERSION=1.1.64 SENTRIUS_AGENT_VERSION=1.1.51 diff --git a/docs/version-management.md b/docs/version-management.md new file mode 100644 index 00000000..551a433b --- /dev/null +++ b/docs/version-management.md @@ -0,0 +1,113 @@ +# Version Management Changes + +## Overview + +The version tracking system for Docker images has been simplified for local development. This document explains the changes and how to use the new system. + +## What Changed + +### Before +- `.local.env` file tracked version numbers for all Docker images +- Every local build incremented the version number +- Version numbers were stored and tracked in version control + +### After +- Local builds now always use `:latest` tag +- No version tracking needed for local development +- `.local.env` is deprecated for local builds (kept for backward compatibility) +- `.gcp.env` still tracks versions for GCP deployments + +## Benefits + +1. **Simplified Development**: No need to track version numbers during local development +2. **Cleaner Git History**: No more version number updates cluttering commits +3. **Easier Collaboration**: No conflicts from version number changes +4. **Consistent with Docker Best Practices**: Using `:latest` for local dev is standard + +## Usage + +### Building Images Locally + +```bash +# Build a single image (always uses :latest) +./ops-scripts/base/build-images.sh local --sentrius + +# Build all images (always uses :latest) +./ops-scripts/base/build-images.sh local --all +``` + +### Deploying Locally + +```bash +# Deploy to local Kubernetes (uses :latest tags) +./ops-scripts/local/deploy-helm.sh +``` + +### Building for GCP + +```bash +# Build for GCP (still uses version tracking from .gcp.env) +./ops-scripts/base/build-images.sh gcp --sentrius + +# Versions are automatically incremented and stored in .gcp.env +``` + +## Migration Guide + +If you have existing local deployments: + +1. **No action required** - The changes are backward compatible +2. Existing images with version tags will continue to work +3. New builds will create `:latest` tags alongside any existing versioned images +4. Next time you build, the `:latest` tag will be used + +## File Reference + +- `.env` - Legacy reference file (deprecated) +- `.local.env` - Local version tracking (deprecated, kept for compatibility) +- `.gcp.env` - GCP version tracking (still active and required for GCP deployments) +- `.env.bak`, `.local.env.bak`, `.gcp.env.bak` - Backup files (gitignored) + +## Technical Details + +### Build Script Changes + +The `build-images.sh` script now: +1. Only loads `.env` file when building for GCP +2. Sets version to "latest" for local builds before calling `build_image()` +3. Skips version increment and env file updates for local builds + +### Deploy Script Changes + +The `deploy-helm.sh` script now: +1. Sets all version variables to "latest" at startup +2. Does not source `.local.env` +3. Passes "latest" to all Helm `--set` commands for image tags + +## Troubleshooting + +### Images not found + +If you get "image not found" errors: +```bash +# Rebuild the images +./ops-scripts/base/build-images.sh local --all +``` + +### Want to use specific versions locally + +If you need specific versions for local testing, you can override via environment variables: +```bash +# Override a single service version +SENTRIUS_VERSION="1.2.3" ./ops-scripts/local/deploy-helm.sh + +# Override multiple service versions +SENTRIUS_VERSION="1.2.3" SENTRIUS_SSH_VERSION="1.1.5" ./ops-scripts/local/deploy-helm.sh +``` + +Or pass it directly to helm: +```bash +helm upgrade --install sentrius ./sentrius-chart \ + --set sentrius.image.tag=1.2.3 \ + ... +``` diff --git a/ops-scripts/base/build-images.sh b/ops-scripts/base/build-images.sh index 4a215b44..5e1ba651 100755 --- a/ops-scripts/base/build-images.sh +++ b/ops-scripts/base/build-images.sh @@ -15,10 +15,12 @@ if [[ "$1" == "local" || "$1" == "gcp" ]]; then shift fi -# --- Load and back up environment file --- -ENV_FILE=".$ENV_TARGET.env" -source "$ENV_FILE" -cp "$ENV_FILE" "$ENV_FILE.bak" +# --- Load environment file only for GCP (versions needed for registry) --- +if [[ "$ENV_TARGET" == "gcp" ]]; then + ENV_FILE=".$ENV_TARGET.env" + source "$ENV_FILE" + cp "$ENV_FILE" "$ENV_FILE.bak" +fi # --- Minikube Docker context --- if [[ "$ENV_TARGET" == "local" ]]; then @@ -65,6 +67,11 @@ build_image() { local version=$2 local context_dir=$3 + # For local builds, always use 'latest' tag + if [[ "$ENV_TARGET" == "local" ]]; then + version="latest" + fi + echo "Building $name:$version..." prepare_docker_context "$context_dir" @@ -97,7 +104,6 @@ build_image() { docker push "$REGISTRY/$name:$version" echo "✅ Pushed $REGISTRY/$name:$version" else - docker tag "$name:$version" "$name:latest" echo "✅ Built locally: $name:$version" fi @@ -109,6 +115,11 @@ build_keycloak_image() { local version=$2 local context_dir=$3 + # For local builds, always use 'latest' tag + if [[ "$ENV_TARGET" == "local" ]]; then + version="latest" + fi + echo "Building $name:$version..." prepare_docker_context "$context_dir" @@ -155,7 +166,6 @@ build_keycloak_image() { docker push "$REGISTRY/$name:$version" echo "✅ Pushed $REGISTRY/$name:$version" else - docker tag "$name:$version" "$name:latest" echo "✅ Built locally: $name:$version" fi @@ -204,38 +214,58 @@ fi # --- Build Steps --- if $update_sentrius; then cp api/target/sentrius-api-*.jar docker/sentrius/sentrius.jar - SENTRIUS_VERSION=$(increment_patch_version $SENTRIUS_VERSION) + if [[ "$ENV_TARGET" == "gcp" ]]; then + SENTRIUS_VERSION=$(increment_patch_version $SENTRIUS_VERSION) + update_env_var "SENTRIUS_VERSION" "$SENTRIUS_VERSION" + else + SENTRIUS_VERSION="latest" + fi build_image "sentrius" "$SENTRIUS_VERSION" "${SCRIPT_DIR}/../../docker/sentrius/" rm docker/sentrius/sentrius.jar - update_env_var "SENTRIUS_VERSION" "$SENTRIUS_VERSION" fi if $update_sentrius_ssh; then - SENTRIUS_SSH_VERSION=$(increment_patch_version $SENTRIUS_SSH_VERSION) + if [[ "$ENV_TARGET" == "gcp" ]]; then + SENTRIUS_SSH_VERSION=$(increment_patch_version $SENTRIUS_SSH_VERSION) + update_env_var "SENTRIUS_SSH_VERSION" "$SENTRIUS_SSH_VERSION" + else + SENTRIUS_SSH_VERSION="latest" + fi build_image "sentrius-ssh" "$SENTRIUS_SSH_VERSION" "${SCRIPT_DIR}/../../docker/fake-ssh" - update_env_var "SENTRIUS_SSH_VERSION" "$SENTRIUS_SSH_VERSION" fi if $update_sentrius_keycloak; then - SENTRIUS_KEYCLOAK_VERSION=$(increment_patch_version $SENTRIUS_KEYCLOAK_VERSION) + if [[ "$ENV_TARGET" == "gcp" ]]; then + SENTRIUS_KEYCLOAK_VERSION=$(increment_patch_version $SENTRIUS_KEYCLOAK_VERSION) + update_env_var "SENTRIUS_KEYCLOAK_VERSION" "$SENTRIUS_KEYCLOAK_VERSION" + else + SENTRIUS_KEYCLOAK_VERSION="latest" + fi build_keycloak_image "sentrius-keycloak" "$SENTRIUS_KEYCLOAK_VERSION" "${SCRIPT_DIR}/../../docker/keycloak" - update_env_var "SENTRIUS_KEYCLOAK_VERSION" "$SENTRIUS_KEYCLOAK_VERSION" fi if $update_sentrius_agent; then cp analytics/target/analytics-*.jar docker/sentrius-agent/agent.jar - SENTRIUS_AGENT_VERSION=$(increment_patch_version $SENTRIUS_AGENT_VERSION) + if [[ "$ENV_TARGET" == "gcp" ]]; then + SENTRIUS_AGENT_VERSION=$(increment_patch_version $SENTRIUS_AGENT_VERSION) + update_env_var "SENTRIUS_AGENT_VERSION" "$SENTRIUS_AGENT_VERSION" + else + SENTRIUS_AGENT_VERSION="latest" + fi build_image "sentrius-agent" "$SENTRIUS_AGENT_VERSION" "${SCRIPT_DIR}/../../docker/sentrius-agent" rm docker/sentrius-agent/agent.jar - update_env_var "SENTRIUS_AGENT_VERSION" "$SENTRIUS_AGENT_VERSION" fi if $update_sentrius_ai_agent; then cp ai-agent/target/ai-agent-*.jar docker/sentrius-ai-agent/agent.jar - SENTRIUS_AI_AGENT_VERSION=$(increment_patch_version $SENTRIUS_AI_AGENT_VERSION) + if [[ "$ENV_TARGET" == "gcp" ]]; then + SENTRIUS_AI_AGENT_VERSION=$(increment_patch_version $SENTRIUS_AI_AGENT_VERSION) + update_env_var "SENTRIUS_AI_AGENT_VERSION" "$SENTRIUS_AI_AGENT_VERSION" + else + SENTRIUS_AI_AGENT_VERSION="latest" + fi build_image "sentrius-ai-agent" "$SENTRIUS_AI_AGENT_VERSION" "${SCRIPT_DIR}/../../docker/sentrius-ai-agent" rm docker/sentrius-ai-agent/agent.jar - update_env_var "SENTRIUS_AI_AGENT_VERSION" "$SENTRIUS_AI_AGENT_VERSION" cp ai-agent/target/ai-agent-*.jar docker/sentrius-launchable-agent/agent.jar build_image "sentrius-launchable-agent" "$SENTRIUS_AI_AGENT_VERSION" "${SCRIPT_DIR}/../../docker/sentrius-launchable-agent" @@ -244,40 +274,60 @@ fi if $update_integrationproxy; then cp integration-proxy/target/sentrius-integration-proxy-*.jar docker/integrationproxy/llmproxy.jar - LLMPROXY_VERSION=$(increment_patch_version $LLMPROXY_VERSION) + if [[ "$ENV_TARGET" == "gcp" ]]; then + LLMPROXY_VERSION=$(increment_patch_version $LLMPROXY_VERSION) + update_env_var "LLMPROXY_VERSION" "$LLMPROXY_VERSION" + else + LLMPROXY_VERSION="latest" + fi build_image "sentrius-integration-proxy" "$LLMPROXY_VERSION" "${SCRIPT_DIR}/../../docker/integrationproxy" rm docker/integrationproxy/llmproxy.jar - update_env_var "LLMPROXY_VERSION" "$LLMPROXY_VERSION" fi if $update_launcher; then cp agent-launcher/target/agent-launcher-*.jar docker/sentrius-launcher-service/launcher.jar - LAUNCHER_VERSION=$(increment_patch_version $LAUNCHER_VERSION) + if [[ "$ENV_TARGET" == "gcp" ]]; then + LAUNCHER_VERSION=$(increment_patch_version $LAUNCHER_VERSION) + update_env_var "LAUNCHER_VERSION" "$LAUNCHER_VERSION" + else + LAUNCHER_VERSION="latest" + fi build_image "sentrius-launcher-service" "$LAUNCHER_VERSION" "${SCRIPT_DIR}/../../docker/sentrius-launcher-service" rm docker/sentrius-launcher-service/launcher.jar - update_env_var "LAUNCHER_VERSION" "$LAUNCHER_VERSION" fi if $update_agent_proxy; then cp agent-proxy/target/sentrius-agent-proxy-*.jar docker/agent-proxy/agentproxy.jar - AGENTPROXY_VERSION=$(increment_patch_version $AGENTPROXY_VERSION) + if [[ "$ENV_TARGET" == "gcp" ]]; then + AGENTPROXY_VERSION=$(increment_patch_version $AGENTPROXY_VERSION) + update_env_var "AGENTPROXY_VERSION" "$AGENTPROXY_VERSION" + else + AGENTPROXY_VERSION="latest" + fi build_image "sentrius-agent-proxy" "$AGENTPROXY_VERSION" "${SCRIPT_DIR}/../../docker/agent-proxy" rm docker/agent-proxy/agentproxy.jar - update_env_var "AGENTPROXY_VERSION" "$AGENTPROXY_VERSION" fi if $update_ssh_proxy; then cp ssh-proxy/target/ssh-proxy-*.jar docker/ssh-proxy/sshproxy.jar - SSHPROXY_VERSION=$(increment_patch_version $SSHPROXY_VERSION) + if [[ "$ENV_TARGET" == "gcp" ]]; then + SSHPROXY_VERSION=$(increment_patch_version $SSHPROXY_VERSION) + update_env_var "SSHPROXY_VERSION" "$SSHPROXY_VERSION" + else + SSHPROXY_VERSION="latest" + fi build_image "sentrius-ssh-proxy" "$SSHPROXY_VERSION" "${SCRIPT_DIR}/../../docker/ssh-proxy" rm docker/ssh-proxy/sshproxy.jar - update_env_var "SSHPROXY_VERSION" "$SSHPROXY_VERSION" fi if $update_rdp_proxy; then cp rdp-proxy/target/rdp-proxy-*.jar docker/rdp-proxy/rdpproxy.jar - RDPPROXY_VERSION=$(increment_patch_version $RDPPROXY_VERSION) + if [[ "$ENV_TARGET" == "gcp" ]]; then + RDPPROXY_VERSION=$(increment_patch_version $RDPPROXY_VERSION) + update_env_var "RDPPROXY_VERSION" "$RDPPROXY_VERSION" + else + RDPPROXY_VERSION="latest" + fi build_image "sentrius-rdp-proxy" "$RDPPROXY_VERSION" "${SCRIPT_DIR}/../../docker/rdp-proxy" rm docker/rdp-proxy/rdpproxy.jar - update_env_var "RDPPROXY_VERSION" "$RDPPROXY_VERSION" fi \ No newline at end of file diff --git a/ops-scripts/local/deploy-helm.sh b/ops-scripts/local/deploy-helm.sh index 7dfdb34f..ce75eaa9 100755 --- a/ops-scripts/local/deploy-helm.sh +++ b/ops-scripts/local/deploy-helm.sh @@ -4,7 +4,19 @@ SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) source ${SCRIPT_DIR}/base.sh source ${SCRIPT_DIR}/../base/base.sh -source ${SCRIPT_DIR}/../../.local.env + +# For local deployments, use 'latest' tag instead of versioned tags +# These can be overridden via environment variables if needed +SENTRIUS_VERSION="${SENTRIUS_VERSION:-latest}" +SENTRIUS_SSH_VERSION="${SENTRIUS_SSH_VERSION:-latest}" +SENTRIUS_KEYCLOAK_VERSION="${SENTRIUS_KEYCLOAK_VERSION:-latest}" +SENTRIUS_AGENT_VERSION="${SENTRIUS_AGENT_VERSION:-latest}" +SENTRIUS_AI_AGENT_VERSION="${SENTRIUS_AI_AGENT_VERSION:-latest}" +LLMPROXY_VERSION="${LLMPROXY_VERSION:-latest}" +LAUNCHER_VERSION="${LAUNCHER_VERSION:-latest}" +AGENTPROXY_VERSION="${AGENTPROXY_VERSION:-latest}" +SSHPROXY_VERSION="${SSHPROXY_VERSION:-latest}" +RDPPROXY_VERSION="${RDPPROXY_VERSION:-latest}" CERT_DIR="${SCRIPT_DIR}/../../docker/dev-certs" CERT_FILE="${CERT_DIR}/sentrius-ca.crt" @@ -18,11 +30,6 @@ CERT_DIR="${SCRIPT_DIR}/../../docker/dev-certs" DEPLOY_ADMINER=${DEPLOY_ADMINER:-false} ENABLE_RDP_CONTAINER=${ENABLE_RDP_CONTAINER:-true} -# --- Load and back up environment file --- -ENV_FILE="${SCRIPT_DIR}/../../.$ENV_TARGET.env" -source "$ENV_FILE" -cp "$ENV_FILE" "$ENV_FILE.bak" - (source ${SCRIPT_DIR}/../base/generate-secrets.sh) GENERATED_ENV_PATH="${SCRIPT_DIR}/../../.generated.env"