diff --git a/packaging/README.md b/packaging/README.md
index 48fbbe830d9c3..5ce98f02ba5f3 100644
--- a/packaging/README.md
+++ b/packaging/README.md
@@ -22,4 +22,14 @@ This acts as base image for building `hasura/graphql-engine` image.
 It is generally published with format `hasura/graphql-engine-base:<SHA256>.<OS>.<ARCH>` where
 - `<SHA256>` is the `sha256sum` of the dockerfile used to build the image
 - `OS` is the operating system. It could be any of these values: `ubuntu`
-- `ARCH` is the architecture. It could be any of these values: `amd64`, `arm64`
\ No newline at end of file
+- `ARCH` is the architecture. It could be any of these values: `amd64`, `arm64`
+- `OS` is the operating system. It could be any of these values: `debian`, `ubuntu`, `centos`
+- `ARCH` is the architecture. It could be any of these values: `amd64`, `arm64`
+
+## Devfolio Specific
+
+### How to publish images
+
+```
+docker buildx build --build-arg BASE_IMAGE=hasura/graphql-engine:v2.20.1 --no-cache -t ghcr.io/devfolioco/graphql-engine:v2.20.1.cli-migrations-v3 --platform linux/amd64,linux/arm64 --push .
+```
diff --git a/packaging/cli-migrations/v3/.gitignore b/packaging/cli-migrations/v3/.gitignore
index 94df10e62602c..10fd06c472804 100644
--- a/packaging/cli-migrations/v3/.gitignore
+++ b/packaging/cli-migrations/v3/.gitignore
@@ -1,2 +1 @@
-cli-hasura-linux-amd64
-manifest.yaml
\ No newline at end of file
+manifest.yaml
diff --git a/packaging/cli-migrations/v3/Dockerfile b/packaging/cli-migrations/v3/Dockerfile
index 3d9371c3ecdfd..f27ad4bc42c38 100644
--- a/packaging/cli-migrations/v3/Dockerfile
+++ b/packaging/cli-migrations/v3/Dockerfile
@@ -1,6 +1,8 @@
 ARG BASE_IMAGE
 FROM ${BASE_IMAGE}
 
+ARG TARGETARCH
+
 # yum update uses --nobest option to tackle https://github.com/hasura/graphql-engine-mono/issues/4096
 RUN { apt-get update && apt-get install -y netcat; } \
   || { yum update -y --nobest && yum install -y nc; }
@@ -18,7 +20,7 @@ RUN mkdir -p /.hasura \
 ENV HASURA_GRAPHQL_SHOW_UPDATE_NOTIFICATION=false
 
 COPY docker-entrypoint.sh /bin/
-COPY hasura-cli /bin/hasura-cli
+COPY cli-hasura-linux-${TARGETARCH} /bin/hasura-cli
 
 RUN chmod +x /bin/hasura-cli 
 
@@ -30,4 +32,5 @@ ENV HGE_BINARY=${HGE_BINARY}
 
 ENTRYPOINT ["docker-entrypoint.sh"]
 
-CMD $HGE_BINARY serve
+# CMD $HGE_BINARY serve
+# CMD ["graphql-engine", "serve"]
diff --git a/packaging/cli-migrations/v3/cli-hasura-linux-amd64 b/packaging/cli-migrations/v3/cli-hasura-linux-amd64
new file mode 100644
index 0000000000000..3244315d70f4b
Binary files /dev/null and b/packaging/cli-migrations/v3/cli-hasura-linux-amd64 differ
diff --git a/packaging/cli-migrations/v3/cli-hasura-linux-arm64 b/packaging/cli-migrations/v3/cli-hasura-linux-arm64
new file mode 100644
index 0000000000000..9714c4f8fc855
Binary files /dev/null and b/packaging/cli-migrations/v3/cli-hasura-linux-arm64 differ
diff --git a/packaging/cli-migrations/v3/docker-entrypoint.sh b/packaging/cli-migrations/v3/docker-entrypoint.sh
index 6c8ad6fd9dc9e..02a99bbffcdac 100755
--- a/packaging/cli-migrations/v3/docker-entrypoint.sh
+++ b/packaging/cli-migrations/v3/docker-entrypoint.sh
@@ -11,6 +11,7 @@ log() {
 
 DEFAULT_MIGRATIONS_DIR="/hasura-migrations"
 DEFAULT_METADATA_DIR="/hasura-metadata"
+DEFAULT_SEEDS_DIR="/hasura-seeds"
 TEMP_PROJECT_DIR="/tmp/hasura-project"
 
 if [ -z ${HGE_BINARY+x} ]; then
@@ -67,6 +68,27 @@ if [ -z ${HASURA_GRAPHQL_METADATA_DIR+x} ]; then
     HASURA_GRAPHQL_METADATA_DIR="$DEFAULT_METADATA_DIR"
 fi
 
+# check if seeds directory is set, default otherwise
+if [ -z ${HASURA_GRAPHQL_SEEDS_DIR+x} ]; then
+    log "migrations-startup" "env var HASURA_GRAPHQL_SEEDS_DIR is not set, defaulting to $DEFAULT_SEEDS_DIR"
+    HASURA_GRAPHQL_SEEDS_DIR="$DEFAULT_SEEDS_DIR"
+fi
+
+# apply migrations if the directory exist
+if [ -d "$HASURA_GRAPHQL_MIGRATIONS_DIR" ]; then
+    log "migrations-apply" "applying migrations from $HASURA_GRAPHQL_MIGRATIONS_DIR"
+    mkdir -p "$TEMP_PROJECT_DIR"
+    cp -a "$HASURA_GRAPHQL_MIGRATIONS_DIR/." "$TEMP_PROJECT_DIR/migrations/"
+    cd "$TEMP_PROJECT_DIR"
+    echo "version: 3" > config.yaml
+    echo "endpoint: http://localhost:$HASURA_GRAPHQL_MIGRATIONS_SERVER_PORT" >> config.yaml
+    hasura-cli migrate apply --all-databases
+    log "migrations-apply" "reloading metadata"
+    hasura-cli metadata reload
+else
+    log "migrations-apply" "directory $HASURA_GRAPHQL_MIGRATIONS_DIR does not exist, skipping migrations"
+fi
+
 # apply metadata if the directory exist
 if [ -d "$HASURA_GRAPHQL_METADATA_DIR" ]; then
     rm -rf "TEMP_PROJECT_DIR"
@@ -82,19 +104,19 @@ else
     log "migrations-apply" "directory $HASURA_GRAPHQL_METADATA_DIR does not exist, skipping metadata"
 fi
 
-# apply migrations if the directory exist
-if [ -d "$HASURA_GRAPHQL_MIGRATIONS_DIR" ]; then
-    log "migrations-apply" "applying migrations from $HASURA_GRAPHQL_MIGRATIONS_DIR"
+# apply seeds if the directory exist
+if [ -d "$HASURA_GRAPHQL_SEEDS_DIR" ]; then
+    log "seeds-apply" "applying seeds from $HASURA_GRAPHQL_SEEDS_DIR"
     mkdir -p "$TEMP_PROJECT_DIR"
-    cp -a "$HASURA_GRAPHQL_MIGRATIONS_DIR/." "$TEMP_PROJECT_DIR/migrations/"
+    cp -a "$HASURA_GRAPHQL_SEEDS_DIR/." "$TEMP_PROJECT_DIR/seeds/"
     cd "$TEMP_PROJECT_DIR"
     echo "version: 3" > config.yaml
     echo "endpoint: http://localhost:$HASURA_GRAPHQL_MIGRATIONS_SERVER_PORT" >> config.yaml
-    hasura-cli migrate apply --all-databases
-    log "migrations-apply" "reloading metadata"
-    hasura-cli metadata reload
+    hasura-cli seed apply --database-name default
+    # log "seeds-apply" "reloading metadata"
+    # hasura-cli metadata reload
 else
-    log "migrations-apply" "directory $HASURA_GRAPHQL_MIGRATIONS_DIR does not exist, skipping migrations"
+    log "seeds-apply" "directory $HASURA_GRAPHQL_SEEDS_DIR does not exist, skipping seeds"
 fi
 
 # kill graphql engine that we started earlier