Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .env
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ package-lock.json

.settings/*
.env.bak
.local.env.bak
.gcp.env.bak
cp.env.bak
.generated.env
api/node_modules/
Expand Down
5 changes: 4 additions & 1 deletion .local.env
Original file line number Diff line number Diff line change
@@ -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
Expand Down
113 changes: 113 additions & 0 deletions docs/version-management.md
Original file line number Diff line number Diff line change
@@ -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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is telling people to manually override in the script the best idea?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right, that wasn't ideal. I've updated the approach to use environment variable overrides instead:

# Override versions without editing the script
SENTRIUS_VERSION="1.2.3" ./ops-scripts/local/deploy-helm.sh

The script now uses ${VAR:-default} pattern so users can override any version via environment variables. Updated in commit 7bb8e30.

# 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 \
...
```
102 changes: 76 additions & 26 deletions ops-scripts/base/build-images.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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"

Expand Down Expand Up @@ -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

Expand All @@ -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"

Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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"
Expand All @@ -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
19 changes: 13 additions & 6 deletions ops-scripts/local/deploy-helm.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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"
Expand Down