podman to compile for debian

This commit is contained in:
Priec
2026-09-02 08:57:57 +02:00
parent b5a7860834
commit 0913d10885
3 changed files with 99 additions and 5 deletions

View File

@@ -48,6 +48,10 @@ RUN node --version \
&& test "$yarn_version" = 1.22.22 \ && test "$yarn_version" = 1.22.22 \
&& echo "yarn $yarn_version" && echo "yarn $yarn_version"
RUN apt-get update \
&& apt-get install -y --no-install-recommends lld \
&& rm -rf /var/lib/apt/lists/*
COPY container-build-debian.sh /usr/local/bin/build-komp-ac-debian COPY container-build-debian.sh /usr/local/bin/build-komp-ac-debian
RUN chmod 755 /usr/local/bin/build-komp-ac-debian RUN chmod 755 /usr/local/bin/build-komp-ac-debian

View File

@@ -59,7 +59,15 @@ The host source is mounted read-only and copied into the temporary container.
Cargo and Yarn caches use named Podman volumes, so neither Cargo target files Cargo and Yarn caches use named Podman volumes, so neither Cargo target files
nor frontend dependencies are written into the repository. The source snapshot nor frontend dependencies are written into the repository. The source snapshot
excludes build outputs, local environment files and generated runtime data such excludes build outputs, local environment files and generated runtime data such
as Tantivy indexes, dumps and embedded PostgreSQL data. as Tantivy indexes, dumps and embedded PostgreSQL data. It also omits profiling
captures, benchmark and mutation reports, old AppImages, frontend caches, logs,
and local editor or agent state. Cargo configuration, SQLx offline metadata,
migrations and all crate/frontend source inputs remain in the snapshot. The
container validates the completed snapshot and stops before compilation if a
known runtime, cache or private-data path survived the exclusions. Top-level
copying is allowlisted to workspace manifests, required crates, `client-gui2`
and the packaging layer, so unrelated future repository directories are omitted
by default.
The server feature is a required argument. Nothing implicitly chooses the The server feature is a required argument. Nothing implicitly chooses the
database implementation: database implementation:

View File

@@ -37,19 +37,91 @@ tar \
--exclude='*/.direnv' \ --exclude='*/.direnv' \
--exclude='./.env' \ --exclude='./.env' \
--exclude='*/.env' \ --exclude='*/.env' \
--exclude='./.env.*' \
--exclude='*/.env.*' \
--exclude='./.env_*' \
--exclude='*/.env_*' \
--exclude='*/.envrc' \
--exclude='*/.agents' \
--exclude='*/.claude' \
--exclude='*/.codex' \
--exclude='*/.codex-scheduled' \
--exclude='*/.forge' \
--exclude='*/.opencode' \
--exclude='*/.idea' \
--exclude='*/.vscode' \
--exclude='./.aider*' \
--exclude='*/tantivy_indexes' \ --exclude='*/tantivy_indexes' \
--exclude='*/dumps' \ --exclude='*/dumps' \
--exclude='*/.postgres-data' \ --exclude='*/.postgres-data' \
--exclude='*/benchmark-results' \ --exclude='*/benchmark-results' \
--exclude='*/.mutants-run' \ --exclude='*/.mutants-run' \
--exclude='./mutants*' \
--exclude='*/metrics_output' \
--exclude='*/metrics.json' \
--exclude='*/perf.data*' \
--exclude='*/flamegraph.svg' \
--exclude='*/__pycache__' \ --exclude='*/__pycache__' \
--exclude='./client-gui2/node_modules' \ --exclude='*/node_modules' \
--exclude='./client-gui2/dist' \ --exclude='./client-gui2/dist' \
--exclude='./client-gui2/dist-ssr' \
--exclude='./client-gui2/coverage' \
--exclude='./client-gui2/.vite' \
--exclude='./client-gui2/src-tauri/gen/schemas' \
--exclude='./client-gui2/scripts' \
--exclude='*.tsbuildinfo' \
--exclude='*.log' \
--exclude='*.swp' \
--exclude='*.swo' \
--exclude='*~' \
--exclude='*.local' \
--exclude='./server/docs-prod' \
--exclude='./testing' \
--exclude='./run_bins' \
--exclude='./corporate_erp' \
--exclude='./debian-dist' \ --exclude='./debian-dist' \
--exclude='./result' \ --exclude='./result' \
-C /source -cf - . \ --exclude='./result-*' \
-C /source -cf - \
Cargo.toml \
Cargo.lock \
.cargo \
.sqlx \
client \
client-gui2 \
common \
komp-app \
packaging \
search \
server \
tui-canvas \
tui-pages \
web \
| tar -C "$source_root" -xf - | tar -C "$source_root" -xf -
unexpected_snapshot_path="$(find "$source_root" \
\( \
-name target -o \
-name node_modules -o \
-name tantivy_indexes -o \
-name dumps -o \
-name .postgres-data -o \
-name .direnv -o \
-name .env -o \
-name '.env.*' -o \
-name '.env_*' -o \
-name .envrc -o \
-name benchmark-results -o \
-name metrics_output -o \
-name 'perf.data*' \
\) \
-print -quit)"
if [[ -n "$unexpected_snapshot_path" ]]; then
echo "Generated or private data entered the production snapshot: $unexpected_snapshot_path" >&2
exit 1
fi
echo "Source snapshot size: $(du -sh "$source_root" | cut -f1)"
cd "$source_root/client-gui2" cd "$source_root/client-gui2"
echo "+ yarn install --frozen-lockfile --non-interactive" echo "+ yarn install --frozen-lockfile --non-interactive"
yarn install --frozen-lockfile --non-interactive yarn install --frozen-lockfile --non-interactive
@@ -78,6 +150,16 @@ fi
install -Dm755 "$server_binary" /out/bin/server install -Dm755 "$server_binary" /out/bin/server
cd "$source_root/client-gui2" cd "$source_root/client-gui2"
appimage_bundle_dir=/cargo-target/release/bundle/appimage
case "$appimage_bundle_dir" in
/cargo-target/release/bundle/appimage)
rm -rf -- "$appimage_bundle_dir"
;;
*)
echo "Refusing to clear unexpected AppImage staging path: $appimage_bundle_dir" >&2
exit 1
;;
esac
echo "+ yarn tauri build --bundles appimage" echo "+ yarn tauri build --bundles appimage"
set +e set +e
APPIMAGE_EXTRACT_AND_RUN=1 \ APPIMAGE_EXTRACT_AND_RUN=1 \
@@ -87,7 +169,7 @@ tauri_status=$?
set -e set -e
shopt -s nullglob shopt -s nullglob
gui_appimages=(/cargo-target/release/bundle/appimage/*.AppImage) gui_appimages=("$appimage_bundle_dir"/*.AppImage)
gui_bundle="" gui_bundle=""
if [[ $tauri_status -eq 0 && ${#gui_appimages[@]} -gt 0 ]]; then if [[ $tauri_status -eq 0 && ${#gui_appimages[@]} -gt 0 ]]; then
gui_bundle="${gui_appimages[0]}" gui_bundle="${gui_appimages[0]}"
@@ -99,7 +181,7 @@ if [[ $tauri_status -eq 0 && ${#gui_appimages[@]} -gt 0 ]]; then
fi fi
if [[ -z "$gui_bundle" ]]; then if [[ -z "$gui_bundle" ]]; then
gui_appdir=/cargo-target/release/bundle/appimage/komp_ac.AppDir gui_appdir="$appimage_bundle_dir/komp_ac.AppDir"
if [[ -d "$gui_appdir" ]] \ if [[ -d "$gui_appdir" ]] \
&& cmp -s /cargo-target/release/client-gui2 "$gui_appdir/usr/bin/client-gui2"; then && cmp -s /cargo-target/release/client-gui2 "$gui_appdir/usr/bin/client-gui2"; then
gui_bundle="$gui_appdir" gui_bundle="$gui_appdir"