Skip to content
Merged

Atlas #2333

Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
38b0674
migrator, package atlas in dockerfile, fallback, set CGO in dockerfil…
breardon2011 Oct 22, 2025
8302ed3
correct go version back 1.24, downgrade argia/atlas to 1.24 compat
breardon2011 Oct 22, 2025
652be9a
adjust atlas loader, versions
breardon2011 Oct 23, 2025
3abefae
remove automigrate
breardon2011 Oct 23, 2025
30d74a7
Merge branch 'develop' of https://github.com/diggerhq/digger into fea…
breardon2011 Oct 23, 2025
5139db9
add migration workflow test
breardon2011 Oct 24, 2025
04ffe07
Added migrations files
breardon2011 Oct 24, 2025
30c9478
Change embed location
breardon2011 Oct 24, 2025
86ecc22
move migrations to where they can be embedded
breardon2011 Oct 24, 2025
b33fc03
add golang migrate
breardon2011 Oct 24, 2025
a8776d5
adjust for golang-migrate
breardon2011 Oct 24, 2025
9f44ecd
adjust test
breardon2011 Oct 24, 2025
888a5a8
adjust workflow
breardon2011 Oct 24, 2025
8cc4c3d
update test
breardon2011 Oct 24, 2025
100a0be
adjust test again
breardon2011 Oct 24, 2025
d86457f
remove checksums from repo
breardon2011 Oct 24, 2025
664a66f
update workflow to handle checksums correctly
breardon2011 Oct 24, 2025
e323cff
package atlas, remove go migrate from migrator
breardon2011 Oct 24, 2025
0fe2372
adjust workflow
breardon2011 Oct 24, 2025
8d34e96
switch to atlas like backend
breardon2011 Oct 25, 2025
f21f1c2
add workflow files
breardon2011 Oct 25, 2025
9d47515
update workflows
breardon2011 Oct 25, 2025
fa86205
fix workflow to generate hash
breardon2011 Oct 25, 2025
3135d2f
set query backend correctly
breardon2011 Oct 25, 2025
0c98181
adjust db name
breardon2011 Oct 25, 2025
c020c8f
change loader, sequence, handle syntax
breardon2011 Oct 25, 2025
67b6ad3
Merge branch 'develop' of https://github.com/diggerhq/digger into fea…
breardon2011 Oct 25, 2025
60a6cba
merge and regen
breardon2011 Oct 25, 2025
e59ebec
fix CGO, grep
breardon2011 Oct 25, 2025
e7d0e4c
adjust address of sqlite
breardon2011 Oct 25, 2025
1641f3a
adjust sqlite db envar for workflow
breardon2011 Oct 25, 2025
fed8032
add command, instructions
breardon2011 Oct 27, 2025
261d6cd
use gorm provider
breardon2011 Oct 27, 2025
4dfc6b0
multi dialect wip
breardon2011 Oct 28, 2025
703921d
Revert to fed8032a
breardon2011 Oct 28, 2025
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
11 changes: 9 additions & 2 deletions taco/Dockerfile_statesman
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,17 @@ COPY internal/ ./internal/
COPY pkg/sdk/ ./pkg/sdk/

# Download dependencies and build
# Note: CGO is required for SQLite support
RUN cd cmd/statesman && \
go mod tidy && \
CGO_ENABLED=0 GOOS=linux go build \
CGO_ENABLED=1 GOOS=linux go build \
-ldflags="-X 'main.Version=${COMMIT_SHA}' -s -w" \
-a -installsuffix cgo \
-a \
-o statesman .

# Install Atlas CLI for migrations
RUN go install ariga.io/atlas/cmd/atlas@latest

# Multi-stage build - use a minimal image for runtime
FROM ubuntu:24.04 AS runner
ARG COMMIT_SHA
Expand All @@ -31,6 +35,9 @@ RUN apt-get update && \

RUN echo "commit sha: ${COMMIT_SHA}"

# Copy Atlas CLI from builder
COPY --from=builder /go/bin/atlas /usr/local/bin/atlas

# Copy the binary from builder stage
COPY --from=builder /go/src/github.com/diggerhq/digger/taco/cmd/statesman/statesman /app/statesman

Expand Down
50 changes: 49 additions & 1 deletion taco/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -86,4 +86,52 @@ docker-clean: ## Clean Docker images and containers
docker rmi statesman:latest 2>/dev/null || true

help: ## Show this help
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}'
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}'

# ============================================================================
# Atlas Migration Targets
# ============================================================================

# Migration name variable (use with: make atlas-diff-all name=add_new_feature)
NAME ?= $(shell date +%Y%m%d%H%M%S)

.PHONY: atlas-install atlas-diff-all atlas-apply-all atlas-lint-all atlas-hash-all

# Install Atlas CLI and GORM provider
atlas-install: ## Install Atlas CLI and GORM provider
@echo "Installing Atlas CLI and GORM provider..."
@go install ariga.io/atlas/cmd/atlas@latest
@go install ariga.io/atlas-provider-gorm@latest
@echo "✅ Atlas tools installed successfully"

# Generate migrations for all database dialects
atlas-diff-all: ## Generate migrations for all databases (use: make atlas-diff-all name=my_change)
@echo "Generating migrations for all databases..."
@if [ -z "$(filter-out $(NAME),$(shell date +%Y%m%d%H%M%S))" ]; then \
echo "⚠️ Using auto-generated name: $(NAME)"; \
echo "💡 Tip: Use 'make atlas-diff-all name=descriptive_name' for better naming"; \
fi
@mkdir -p migrations/postgres migrations/mysql migrations/sqlite migrations/sqlserver
@echo "\n📊 PostgreSQL..." && atlas migrate diff $(NAME) --env postgres
@echo "\n📊 MySQL..." && atlas migrate diff $(NAME) --env mysql
@echo "\n📊 SQLite..." && atlas migrate diff $(NAME) --env sqlite
@echo "\n📊 SQL Server..." && atlas migrate diff $(NAME) --env sqlserver
@$(MAKE) atlas-hash-all
@echo "\n✅ All migrations generated successfully!"


# Validate and lint all migrations
atlas-lint-all: ## Validate and lint all migration files
@echo "Validating and linting migrations..."
@echo "PostgreSQL..." && atlas migrate validate --env postgres
@echo "MySQL..." && atlas migrate validate --env mysql
@echo "SQLite..." && atlas migrate validate --env sqlite
@echo "SQL Server..." && atlas migrate validate --env sqlserver
@echo "✅ All migrations validated successfully"

# Update migration directory hashes (called automatically by atlas-diff-all)
atlas-hash-all:
@atlas migrate hash --dir file://migrations/postgres 2>/dev/null || true
@atlas migrate hash --dir file://migrations/mysql 2>/dev/null || true
@atlas migrate hash --dir file://migrations/sqlite 2>/dev/null || true
@atlas migrate hash --dir file://migrations/sqlserver 2>/dev/null || true
87 changes: 87 additions & 0 deletions taco/atlas.hcl
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# SQLite configuration
data "external_schema" "gorm_sqlite" {
program = [
"sh",
"-c",
"cd internal && go run ./atlas_loader.go sqlite",
]
}

env "sqlite" {
src = data.external_schema.gorm_sqlite.url
dev = "sqlite://file?mode=memory"
migration {
dir = "file://internal/query/migration/atlas/migrations/sqlite"
}
format {
migrate {
diff = "{{ sql . \" \" }}"
}
}
}

# PostgreSQL configuration
data "external_schema" "gorm_postgres" {
program = [
"sh",
"-c",
"cd internal && go run ./atlas_loader.go postgres",
]
}

env "postgres" {
src = data.external_schema.gorm_postgres.url
dev = "docker://postgres/16.1"
migration {
dir = "file://internal/query/migration/atlas/migrations/postgres"
}
format {
migrate {
diff = "{{ sql . \" \" }}"
}
}
}

# MySQL configuration
data "external_schema" "gorm_mysql" {
program = [
"sh",
"-c",
"cd internal && go run ./atlas_loader.go mysql",
]
}

env "mysql" {
src = data.external_schema.gorm_mysql.url
dev = "docker://mysql/8"
migration {
dir = "file://internal/query/migration/atlas/migrations/mysql"
}
format {
migrate {
diff = "{{ sql . \" \" }}"
}
}
}

# SQL Server configuration
data "external_schema" "gorm_sqlserver" {
program = [
"sh",
"-c",
"cd internal && go run ./atlas_loader.go sqlserver",
]
}

env "sqlserver" {
src = data.external_schema.gorm_sqlserver.url
dev = "docker://sqlserver/2022-latest"
migration {
dir = "file://internal/query/migration/atlas/migrations/sqlserver"
}
format {
migrate {
diff = "{{ sql . \" \" }}"
}
}
}
32 changes: 22 additions & 10 deletions taco/cmd/statesman/go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module github.com/diggerhq/digger/opentaco/cmd/statesman

go 1.24
go 1.24.0

require (
github.com/diggerhq/digger/opentaco/internal v0.0.0
Expand All @@ -9,8 +9,12 @@ require (
)

require (
ariga.io/atlas v0.36.1 // indirect
ariga.io/atlas-go-sdk v0.7.2 // indirect
filippo.io/edwards25519 v1.1.0 // indirect
github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect
github.com/agext/levenshtein v1.2.3 // indirect
github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect
github.com/aws/aws-sdk-go-v2 v1.38.1 // indirect
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.0 // indirect
github.com/aws/aws-sdk-go-v2/config v1.31.2 // indirect
Expand All @@ -29,15 +33,19 @@ require (
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.33.2 // indirect
github.com/aws/aws-sdk-go-v2/service/sts v1.38.0 // indirect
github.com/aws/smithy-go v1.22.5 // indirect
github.com/bmatcuk/doublestar v1.3.4 // indirect
github.com/coreos/go-oidc/v3 v3.11.0 // indirect
github.com/go-jose/go-jose/v4 v4.0.2 // indirect
github.com/go-jose/go-jose/v4 v4.1.2 // indirect
github.com/go-openapi/inflect v0.19.0 // indirect
github.com/go-sql-driver/mysql v1.8.1 // indirect
github.com/golang-jwt/jwt v3.2.2+incompatible // indirect
github.com/golang-jwt/jwt/v5 v5.3.0 // indirect
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect
github.com/golang-sql/sqlexp v0.1.0 // indirect
github.com/google/go-cmp v0.7.0 // indirect
github.com/google/jsonapi v1.0.0 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/hashicorp/hcl/v2 v2.18.1 // indirect
github.com/jackc/pgpassfile v1.0.0 // indirect
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
github.com/jackc/pgx/v5 v5.6.0 // indirect
Expand All @@ -47,18 +55,22 @@ require (
github.com/labstack/gommon v0.4.2 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-sqlite3 v1.14.22 // indirect
github.com/mattn/go-sqlite3 v1.14.28 // indirect
github.com/microsoft/go-mssqldb v1.8.2 // indirect
github.com/mitchellh/go-wordwrap v1.0.1 // indirect
github.com/mr-tron/base58 v1.2.0 // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect
github.com/valyala/fasttemplate v1.2.2 // indirect
golang.org/x/crypto v0.32.0 // indirect
golang.org/x/net v0.34.0 // indirect
golang.org/x/oauth2 v0.24.0 // indirect
golang.org/x/sync v0.10.0 // indirect
golang.org/x/sys v0.29.0 // indirect
golang.org/x/text v0.21.0 // indirect
golang.org/x/time v0.7.0 // indirect
github.com/zclconf/go-cty v1.14.4 // indirect
github.com/zclconf/go-cty-yaml v1.1.0 // indirect
golang.org/x/crypto v0.41.0 // indirect
golang.org/x/net v0.43.0 // indirect
golang.org/x/oauth2 v0.30.0 // indirect
golang.org/x/sync v0.16.0 // indirect
golang.org/x/sys v0.35.0 // indirect
golang.org/x/text v0.28.0 // indirect
golang.org/x/time v0.12.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
gorm.io/driver/mysql v1.6.0 // indirect
gorm.io/driver/postgres v1.6.0 // indirect
gorm.io/driver/sqlite v1.6.0 // indirect
Expand Down
Loading
Loading