diff --git a/README.md b/README.md index 5c6948c..3795006 100644 --- a/README.md +++ b/README.md @@ -54,10 +54,9 @@ To run a more complete system, you also need to have docker compose installed. To hack on diachron itself, you need the following: +- bash - docker and docker compose - [fd](https://github.com/sharkdp/fd) - golang, version 1.23.6 or greater - shellcheck - shfmt - - diff --git a/framework/shims/node b/framework/shims/node index 090bb9a..5ac98a8 100755 --- a/framework/shims/node +++ b/framework/shims/node @@ -5,10 +5,8 @@ set -eu node_shim_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -export node_shim_DIR - -source "$node_shim_DIR"/../versions +# shellcheck source=node.common source "$node_shim_DIR"/node.common exec "$nodejs_binary_dir/node" "$@" diff --git a/framework/shims/node.common b/framework/shims/node.common index c3253e1..3745766 100644 --- a/framework/shims/node.common +++ b/framework/shims/node.common @@ -2,23 +2,19 @@ # shellcheck shell=bash node_common_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +project_root="$node_common_DIR/../.." -# FIXME this shouldn't be hardcoded here of course -nodejs_binary_dir="$node_common_DIR/../binaries/node-v22.15.1-linux-x64/bin" +# shellcheck source=../versions +source "$node_common_DIR"/../versions + +nodejs_binary_dir="$project_root/$nodejs_bin_dir" # This might be too restrictive. Or not restrictive enough. PATH="$nodejs_binary_dir":/bin:/usr/bin -project_root="$node_common_DIR/../.." +node_dist_dir="$project_root/$nodejs_dist_dir" -node_dir="$project_root/$nodejs_binary_dir" - -export NPM_CONFIG_PREFIX="$node_dir/npm" -export NPM_CONFIG_CACHE="$node_dir/cache" -export NPM_CONFIG_TMP="$node_dir/tmp" -export NODE_PATH="$node_dir/node_modules" - -# echo $NPM_CONFIG_PREFIX -# echo $NPM_CONFIG_CACHE -# echo $NPM_CONFIG_TMP -# echo $NODE_PATH +export NPM_CONFIG_PREFIX="$node_dist_dir/npm" +export NPM_CONFIG_CACHE="$node_dist_dir/cache" +export NPM_CONFIG_TMP="$node_dist_dir/tmp" +export NODE_PATH="$node_dist_dir/node_modules" diff --git a/framework/versions b/framework/versions new file mode 100644 index 0000000..de9fbd4 --- /dev/null +++ b/framework/versions @@ -0,0 +1,19 @@ +# shellcheck shell=bash + +# This file belongs to the framework. You are not expected to modify it. + +# https://nodejs.org/dist +nodejs_binary_linux_x86_64=https://nodejs.org/dist/v24.12.0/node-v24.12.0-linux-x64.tar.xz +nodejs_checksum_linux_x86_64=bdebee276e58d0ef5448f3d5ac12c67daa963dd5e0a9bb621a53d1cefbc852fd +nodejs_dist_dir=framework/binaries/node-v22.15.1-linux-x64 +nodejs_bin_dir="$nodejs_dist_dir/bin" + +caddy_binary_linux_x86_64=fixme +caddy_checksum_linux_x86_64=fixmetoo + +# https://github.com/pnpm/pnpm/releases +pnpm_binary_linux_x86_64=https://github.com/pnpm/pnpm/releases/download/v10.28.0/pnpm-linux-x64 +pnpm_checksum_linux_x86_64=sha256:348e863d17a62411a65f900e8d91395acabae9e9237653ccc3c36cb385965f28 + + +golangci_lint=v2.7.2-alpine \ No newline at end of file diff --git a/sync.sh b/sync.sh new file mode 100755 index 0000000..5aa223d --- /dev/null +++ b/sync.sh @@ -0,0 +1,66 @@ +#!/bin/bash + +# Note: This is kind of AI slop and needs to be more carefully reviewed. + +set -eu + +DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# shellcheck source=framework/versions +source "$DIR/framework/versions" + +# Ensure correct node version is installed +node_installed_checksum_file="$DIR/framework/binaries/.node.checksum" +node_installed_checksum="" +if [ -f "$node_installed_checksum_file" ]; then + node_installed_checksum=$(cat "$node_installed_checksum_file") +fi + +if [ "$node_installed_checksum" != "$nodejs_checksum_linux_x86_64" ]; then + echo "Downloading Node.js..." + node_archive="$DIR/framework/downloads/node.tar.xz" + curl -fsSL "$nodejs_binary_linux_x86_64" -o "$node_archive" + + echo "Verifying checksum..." + echo "$nodejs_checksum_linux_x86_64 $node_archive" | sha256sum -c - + + echo "Extracting Node.js..." + tar -xf "$node_archive" -C "$DIR/framework/binaries" + rm "$node_archive" + + echo "$nodejs_checksum_linux_x86_64" >"$node_installed_checksum_file" +fi + +# Ensure correct pnpm version is installed +pnpm_binary="$DIR/framework/binaries/pnpm" +pnpm_installed_checksum_file="$DIR/framework/binaries/.pnpm.checksum" +pnpm_installed_checksum="" +if [ -f "$pnpm_installed_checksum_file" ]; then + pnpm_installed_checksum=$(cat "$pnpm_installed_checksum_file") +fi + +# pnpm checksum includes "sha256:" prefix, strip it for sha256sum +pnpm_checksum="${pnpm_checksum_linux_x86_64#sha256:}" + +if [ "$pnpm_installed_checksum" != "$pnpm_checksum" ]; then + echo "Downloading pnpm..." + curl -fsSL "$pnpm_binary_linux_x86_64" -o "$pnpm_binary" + + echo "Verifying checksum..." + echo "$pnpm_checksum $pnpm_binary" | sha256sum -c - + + chmod +x "$pnpm_binary" + + echo "$pnpm_checksum" >"$pnpm_installed_checksum_file" +fi + +# Get golang binaries in place +cd "$DIR/master" +go build + +cd "$DIR/logger" +go build + +# Update framework code +cd "$DIR/express" +../cmd pnpm install