Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
5ee1f32
Updates to docker-extension
jorgemoralespou Nov 14, 2025
9dab8bc
Refactored workshop_xxx and tunnel_xxx commands
jorgemoralespou Jan 19, 2026
8afd9bb
Refactored project_xxx commands
jorgemoralespou Jan 19, 2026
0b4228e
Refactored commands admin_diagnostics_xx and admin_lookup_xx
jorgemoralespou Jan 19, 2026
e8c366e
Refactored admin_platform_xx command
jorgemoralespou Jan 19, 2026
6708ee0
Refactored cluster_portal_xxx command
jorgemoralespou Jan 19, 2026
9f66495
Refactored cluster_portal_xxx command
jorgemoralespou Jan 19, 2026
da19ca0
Refactored cluster_session_xx command
jorgemoralespou Jan 19, 2026
d2feae6
Refactored cluster_workshop_xx commands
jorgemoralespou Jan 20, 2026
b0adcd0
Refactoring moves and cluster_workshop_xx command
jorgemoralespou Jan 20, 2026
8bb9401
Refactored docker_xxx commands
jorgemoralespou Jan 20, 2026
9552186
Refactored local_xxx commands
jorgemoralespou Jan 20, 2026
332d2e7
New local_mirror_list command
jorgemoralespou Jan 21, 2026
e866aeb
Refactored constants
jorgemoralespou Jan 21, 2026
2820d30
Improved local_mirror_list command
jorgemoralespou Jan 21, 2026
7866630
Refactor and extract function to print tables
jorgemoralespou Jan 21, 2026
3b0265f
Remove one dependency on ytt.ui
jorgemoralespou Jan 21, 2026
3fca40b
Refactored registry and mirror
jorgemoralespou Jan 22, 2026
af89e77
Refactored registry logic to remove duplicate code
jorgemoralespou Jan 22, 2026
0bdeb92
Merge origin/develop and new config edit functionality
jorgemoralespou Jan 23, 2026
7236db1
Adding selection of kubernetes-version to create cluster. Defaults to…
jorgemoralespou Jan 23, 2026
3171a8b
Enhancements to docker workshops, extension and bump go version
jorgemoralespou Jan 28, 2026
5f500f6
Adding labels to containers
jorgemoralespou Jan 28, 2026
dd7ef89
Missing flags to docker_workshop_deploy and allow port mapping for se…
jorgemoralespou Jan 31, 2026
bd04c8a
Adding multinode support, and labels/taints support for local clusters
jorgemoralespou Feb 1, 2026
6233ddb
Fix YesNoPrompt call signature in workshops/new.go
jorgemoralespou Feb 2, 2026
11d383a
Deleted files were restored on cherry-pick. Deleting again
jorgemoralespou Feb 2, 2026
3f123c1
Added Fixed ips for local registry and mirrors
jorgemoralespou Feb 2, 2026
4c522fc
Reverted packake.json and package-lock.json to the previous in develo…
jorgemoralespou Feb 3, 2026
f685508
Fixing mirror list
jorgemoralespou Feb 5, 2026
be61c73
Extracting OpenBrowser to it's own function
jorgemoralespou Feb 6, 2026
b23d5a1
Adding overlays capability to the installer
jorgemoralespou Feb 12, 2026
7318cd7
Remove options, which comes from us using kubectl command grouping
jorgemoralespou Feb 13, 2026
33c168b
Some CLI refactorings and uptades to Makefile for docker-extension
jorgemoralespou Feb 14, 2026
f386b3a
Fixup for exporting portal
jorgemoralespou Feb 15, 2026
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
57 changes: 46 additions & 11 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,18 @@
# Default: latest
# Examples: v1.0.0, dev, latest
#
# IMGPKG_IMAGE_REPOSITORY
# Description: Registry/repository used for image refs inside the installer bundle (kbld-images).
# Default: same as IMAGE_REPOSITORY
# Override when developing installer carvel-packages to use released images in the bundle
# instead of local images (e.g. IMGPKG_IMAGE_REPOSITORY=ghcr.io/educates).
#
# IMGPKG_PACKAGE_VERSION
# Description: Version tag used for image refs inside the installer bundle (kbld-images).
# Default: same as PACKAGE_VERSION
# Override when developing installer to pin bundle to a released version's images
# (e.g. IMGPKG_PACKAGE_VERSION=3.5.1).
#
# =============================================================================
# BUILD TARGETS
# =============================================================================
Expand Down Expand Up @@ -130,8 +142,16 @@ IMAGE_REPOSITORY = localhost:5001
PACKAGE_VERSION = latest
RELEASE_VERSION = 0.0.1

UNAME_SYSTEM := $(shell uname -s | tr '[:upper:]' '[:lower:]')
UNAME_MACHINE := $(shell uname -m)
# Export variables to recursive make invocations so CLI/env overrides
# (for example TARGET_PLATFORMS, PUSH_IMAGES, IMAGE_REPOSITORY) are inherited.
.EXPORT_ALL_VARIABLES:

# Installer bundle image refs: default to same as build repo/version; override to use released images when developing installer
IMGPKG_IMAGE_REPOSITORY ?= $(IMAGE_REPOSITORY)
IMGPKG_PACKAGE_VERSION ?= $(PACKAGE_VERSION)

UNAME_SYSTEM ?= $(shell uname -s | tr '[:upper:]' '[:lower:]')
UNAME_MACHINE ?= $(shell uname -m)

TARGET_SYSTEM = $(UNAME_SYSTEM)
TARGET_MACHINE = $(UNAME_MACHINE)
Expand All @@ -143,6 +163,8 @@ endif
TARGET_PLATFORM = $(TARGET_SYSTEM)-$(TARGET_MACHINE)
BUILDX_BUILDER = educates-multiarch-builder

TARGET_PLATFORMS := $(TARGET_PLATFORMS)

# Platform configuration - can be overridden by TARGET_PLATFORMS env var or make parameter
ifeq ($(TARGET_PLATFORMS),)
# Default to current platform when TARGET_PLATFORMS is not set
Expand All @@ -157,13 +179,26 @@ endif
# Push/Load configuration - can be overridden by PUSH_IMAGES env var or make parameter
ifeq ($(PUSH_IMAGES),false)
# Load images locally when PUSH_IMAGES is not true (default)
DOCKER_BUILDER =
DOCKER_BUILDER = --builder ${BUILDX_BUILDER} --load
MULTIARCH_PLATFORMS = $(DOCKER_PLATFORM)
else
# Push images to registry when PUSH_IMAGES is true
DOCKER_BUILDER = --builder ${BUILDX_BUILDER} --push
endif

print-vars:
@echo "--- Makefile Variables ---"
@echo "OS: $(UNAME_SYSTEM)"
@echo "Arch: $(UNAME_MACHINE)"
@echo "Shell: $(SHELL)"
@echo "TARGET_SYSTEM: $(TARGET_SYSTEM)"
@echo "TARGET_MACHINE: $(TARGET_MACHINE)"
@echo "TARGET_PLATFORM: $(TARGET_PLATFORM)"
@echo "DOCKER_PLATFORM: $(DOCKER_PLATFORM)"
@echo "MULTIARCH_PLATFORMS: $(MULTIARCH_PLATFORMS)"
@echo "DOCKER_BUILDER: $(DOCKER_BUILDER)"
@echo "PUSH_IMAGES: $(PUSH_IMAGES)"

all: build-all-images # deploy-installer deploy-workshop

# Multiarch build targets
Expand All @@ -173,7 +208,7 @@ build-all-images: setup-buildx build-session-manager build-training-portal \
build-conda-environment build-docker-registry \
build-pause-container build-secrets-manager build-tunnel-manager \
build-image-cache build-assets-server build-lookup-service \
build-cli-image
build-cli-image build-docker-extension

build-core-images: setup-buildx build-session-manager build-training-portal \
build-base-environment build-docker-registry build-pause-container \
Expand Down Expand Up @@ -291,7 +326,7 @@ else
endif

push-installer-bundle:
ytt -f carvel-packages/installer/config/images.yaml -f carvel-packages/installer/config/schema.yaml -v imageRegistry.host=$(IMAGE_REPOSITORY) -v version=$(PACKAGE_VERSION) > carvel-packages/installer/bundle/kbld/kbld-images.yaml
ytt -f carvel-packages/installer/config/images.yaml -f carvel-packages/installer/config/schema.yaml -v imageRegistry.host=$(IMGPKG_IMAGE_REPOSITORY) -v version=$(IMGPKG_PACKAGE_VERSION) > carvel-packages/installer/bundle/kbld/kbld-images.yaml
# For local development, we just need to lock educates images. Everything else can be referenced by tag from real origin.
cat carvel-packages/installer/bundle/kbld/kbld-images.yaml | kbld -f - --imgpkg-lock-output carvel-packages/installer/bundle/.imgpkg/images.yml
imgpkg push -b $(IMAGE_REPOSITORY)/educates-installer:$(RELEASE_VERSION) -f carvel-packages/installer/bundle
Expand Down Expand Up @@ -343,25 +378,25 @@ push-client-programs: build-client-programs
(cd client-programs; GOOS=linux GOARCH=arm64 go build -o bin/educates-linux-arm64 cmd/educates/main.go)
imgpkg push -i $(IMAGE_REPOSITORY)/educates-client-programs:$(PACKAGE_VERSION) -f client-programs/bin

build-cli-image:
build-cli-image: build-base-environment
docker build --progress plain --platform $(MULTIARCH_PLATFORMS) \
$(DOCKER_BUILDER) \
-t $(IMAGE_REPOSITORY)/educates-cli:$(PACKAGE_VERSION) \
client-programs

build-docker-extension : build-cli-image
$(MAKE) -C docker-extension build-extension REPOSITORY=$(IMAGE_REPOSITORY) TAG=$(PACKAGE_VERSION)
$(MAKE) -C docker-extension build-extension

install-docker-extension : build-docker-extension
$(MAKE) -C docker-extension install-extension REPOSITORY=$(IMAGE_REPOSITORY) TAG=$(PACKAGE_VERSION)
$(MAKE) -C docker-extension install-extension

update-docker-extension : build-docker-extension
$(MAKE) -C docker-extension update-extension REPOSITORY=$(IMAGE_REPOSITORY) TAG=$(PACKAGE_VERSION)
$(MAKE) -C docker-extension update-extension

project-docs/venv :
python3 -m venv project-docs/venv
project-docs/venv/bin/pip install -r project-docs/requirements.txt

build-project-docs : project-docs/venv
source project-docs/venv/bin/activate && make -C project-docs html

Expand Down Expand Up @@ -418,4 +453,4 @@ clean-buildx: ## Clean up builder

# Multiarch utility targets
list-platforms: ## List available platforms for multiarch builds
@echo "Supported platforms: $(MULTIARCH_PLATFORMS)"
@echo "Supported platforms: $(MULTIARCH_PLATFORMS)"
15 changes: 10 additions & 5 deletions assets-server/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
FROM golang:1.19-buster AS builder-image
FROM golang:1.25.6 AS builder-image

WORKDIR /app
COPY go.mod go.sum ./
RUN go mod tidy
RUN go mod download
COPY . .
ARG TARGETOS
ARG TARGETARCH
RUN GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build \
-o assets-server \
main.go

COPY . /app/

RUN go mod download && \
go build -o assets-server main.go

FROM fedora:42

Expand Down
2 changes: 1 addition & 1 deletion assets-server/go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module github.com/educates/educates-training-platform/assets-server

go 1.20
go 1.25.6

require (
github.com/inconshreveable/mousetrap v1.1.0 // indirect
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,5 @@ websiteStyling:
imagePuller:
#@overlay/remove
lookupService:
#@overlay/remove
installerImages:
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,5 @@ websiteStyling:
imagePuller:
#@overlay/remove
lookupService:
#@overlay/remove
installerImages:
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,5 @@ websiteStyling:
imagePuller:
#@overlay/remove
lookupService:
#@overlay/remove
installerImages:
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,5 @@ websiteStyling:
imagePuller:
#@overlay/remove
lookupService:
#@overlay/remove
installerImages:
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,5 @@ websiteStyling:
imagePuller:
#@overlay/remove
lookupService:
#@overlay/remove
installerImages:
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,5 @@ websiteStyling:
imagePuller:
#@overlay/remove
lookupService:
#@overlay/remove
installerImages:
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,5 @@ websiteStyling:
imagePuller:
#@overlay/remove
lookupService:
#@overlay/remove
installerImages:
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ clusterInfrastructure:
#@schema/title "AWS IAM IRSA Roles"
#@schema/desc "AWS IAM IRSA Roles for external-dns and cert-manager"
irsaRoles:
#@schema/example "arn:aws:iam::MY_IAM:role/external-dns"
#@schema/example "arn:aws:iam::MY_IAM:role/external-dns"
#@schema/validation ("irsaRole for external-dns is required for aws based providers",lambda v: len(v) >= 1)
external-dns: ""
#@schema/example "arn:aws:iam::MY_IAM:role/cert-manager"
Expand Down Expand Up @@ -122,6 +122,9 @@ localKindCluster: {}
#@schema/nullable
#@schema/type any=True
localDNSResolver: {}
#@schema/nullable
#@schema/type any=True
installerImages: {}
#!--------- educates training platform schema
#! NOTE: https://github.com/jorgemoralespou/educates-training-platform/blob/develop/carvel-packages/training-platform/bundle/config/00-schema.yaml#L21C1-L33
#! This is only so that the images generates are loaded from this registry. There's a pre-proccesing step that will generate a images file
Expand Down
11 changes: 5 additions & 6 deletions client-programs/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,17 @@ ARG TAG=latest
FROM ${REPOSITORY}/educates-base-environment:${TAG} AS themes-source

# Multi-stage build for client-programs
FROM golang:1.24.10-alpine AS builder

# Install build dependencies
RUN apk add --no-cache git ca-certificates tzdata
FROM golang:1.25.6 AS builder

# Set working directory
WORKDIR /src

# Copy go mod files
COPY go.mod go.sum ./

# Tidy up dependencies
RUN go mod tidy

# Download dependencies
RUN go mod download

Expand All @@ -40,9 +40,8 @@ RUN GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build \

# Runtime stage - minimal image with binaries
FROM scratch
# Build for multiple architectures
ARG TARGETOS
ARG TARGETARCH
# Copy binaries from builder
COPY --from=builder /src/bin/educates-${TARGETOS}-${TARGETARCH} /educates
ENTRYPOINT ["/educates"]
ENTRYPOINT ["/educates"]
Loading