diff --git a/.aidigestignore b/.aidigestignore index ccbd710..ded1d04 100644 --- a/.aidigestignore +++ b/.aidigestignore @@ -20,9 +20,12 @@ CHANGELOG.md docker-compose.build.yaml # env -.envrc .env.local +# devbox +devbox.lock +.devbox/ + # git .gitignore diff --git a/.envrc b/.envrc index 4c44ce7..ca3d242 100644 --- a/.envrc +++ b/.envrc @@ -1,22 +1,2 @@ -export PATH=$PWD/bin:$PWD/scripts:$PATH -export PROJECT_WORKINGDIR=$PWD - -# appli -export JAVA_HOME=${JAVA_HOME:-"/opt/android-studio/jbr"} -export ANDROID_HOME=$HOME/Android/Sdk -export PATH=$PATH:$ANDROID_HOME/emulator -export PATH=$PATH:$ANDROID_HOME/tools -export PATH=$PATH:$ANDROID_HOME/tools/bin -export PATH=$PATH:$ANDROID_HOME/platform-tools -export NODE_OPTIONS"=--openssl-legacy-provider" -export LOCAL_DEV=true - -# local pg -export PGHOST=localhost -export PGUSER=dev -export PGPASSWORD=dev -export PGPORT=${EXPOSE_PG_PORT:-4204} - -# dotenv -dotenv_if_exists .env.default -dotenv_if_exists .env.local \ No newline at end of file +# Automatically load the Devbox environment +eval "$(devbox generate direnv --print-envrc)" diff --git a/.gitignore b/.gitignore index 83580c9..fa574c7 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,8 @@ yarn-error.log .env.yaml .eslintcache +.devbox/ + .archive /.osm-files /osm-files diff --git a/DEVELOPER.md b/DEVELOPER.md index 14412c7..360cfd5 100644 --- a/DEVELOPER.md +++ b/DEVELOPER.md @@ -7,9 +7,9 @@ This document contains technical information for developers working on the Alert ### Requirements - Docker -- Direnv -- Node.js (>=20) -- Yarn (v4.6.0+) +- Devbox +- Android SDK (for mobile development) +- Java 8+ (for Android development) ### Installation @@ -19,12 +19,22 @@ git clone https://codeberg.org/alerte-secours/alerte-secours cd alerte-secours ``` -2. Install dependencies: +2. Install devbox if not already installed: +```sh +curl -fsSL https://get.jetpack.io/devbox | bash +``` + +3. Enter devbox shell (this will automatically install Node.js 20 and Yarn 4.6.0): +```sh +devbox shell +``` + +4. Install dependencies: ```sh yarn ``` -3. Set up environment variables: +5. Set up environment variables: ```sh cp .env.default .env ``` @@ -35,11 +45,43 @@ Start all services with: ```sh yarn dev:up ``` +Or using devbox scripts: +```sh +devbox run dev:up +``` View logs: ```sh yarn dev:logs ``` +Or using devbox: +```sh +devbox run dev:logs +``` + +### Using Devbox + +Once you're in the devbox shell, you have access to: +- Node.js 20 (automatically installed) +- Yarn 4.6.0 (automatically installed) +- All project scripts and environment variables +- PostgreSQL client tools + +To exit the devbox shell: +```sh +exit +``` + +To run commands from outside the shell: +```sh +devbox run +``` + +Available devbox scripts: +- `devbox run dev` - Start development environment +- `devbox run dev:up` - Start all services +- `devbox run dev:logs` - View development logs +- `devbox run console` - Open development console ### Public Staging Environment diff --git a/devbox.json b/devbox.json new file mode 100644 index 0000000..edfab52 --- /dev/null +++ b/devbox.json @@ -0,0 +1,52 @@ +{ + "$schema": "https://raw.githubusercontent.com/jetpack-io/devbox/0.13.6/.schema/devbox.schema.json", + "packages": [ + "nodejs_20", + "yarn", + "git", + "curl", + "jq" + ], + "shell": { + "init_hook": [ + "# Load environment variables from .env files", + "[ -f .env.default ] && export $(grep -v '^#' .env.default | xargs)", + "[ -f .env.local ] && export $(grep -v '^#' .env.local | xargs)", + "", + "# Project-specific PATH modifications", + "export PATH=$PWD/bin:$PWD/scripts:$PATH", + "export PROJECT_WORKINGDIR=$PWD", + "", + "# Node.js configuration", + "export NODE_OPTIONS=\"--openssl-legacy-provider\"", + "export LOCAL_DEV=true", + "", + "# Local PostgreSQL configuration", + "export PGHOST=localhost", + "export PGUSER=dev", + "export PGPASSWORD=dev", + "export PGPORT=${EXPOSE_PG_PORT:-4204}", + "", + "# Android development (system dependencies)", + "# Note: JAVA_HOME and ANDROID_HOME should be configured in your system", + "# These are kept as system dependencies as requested", + "if [ -n \"$ANDROID_HOME\" ]; then", + " export PATH=$PATH:$ANDROID_HOME/emulator", + " export PATH=$PATH:$ANDROID_HOME/tools", + " export PATH=$PATH:$ANDROID_HOME/tools/bin", + " export PATH=$PATH:$ANDROID_HOME/platform-tools", + "fi", + "" + ], + "scripts": { + "dev": "yarn dev", + "dev:up": "yarn dev:up", + "dev:logs": "yarn dev:logs", + "console": "scripts/console" + } + }, + "env": { + "NODE_ENV": "development", + "LOCAL_DEV": "true" + } +} \ No newline at end of file diff --git a/devbox.lock b/devbox.lock new file mode 100644 index 0000000..d22fef9 --- /dev/null +++ b/devbox.lock @@ -0,0 +1,92 @@ +{ + "lockfile_version": "1", + "packages": { + "curl": { + "resolved": "github:NixOS/nixpkgs/ca77296380960cd497a765102eeb1356eb80fed0?narHash=sha256-PgLSZDBEWUHpfTRfFyklmiiLBE1i1aGCtz4eRA3POao%3D#curl", + "source": "nixpkg", + "systems": { + "x86_64-linux": { + "outputs": [ + { + "name": "man", + "path": "/nix/store/bsga1570f0sxs832blngxcb7jcc706mw-curl-8.14.1-man", + "default": true + }, + { + "name": "bin", + "path": "/nix/store/vdl7fgasaimqnkr47xw8vq7alafv9zyx-curl-8.14.1-bin", + "default": true + } + ] + } + } + }, + "git": { + "resolved": "github:NixOS/nixpkgs/ca77296380960cd497a765102eeb1356eb80fed0?narHash=sha256-PgLSZDBEWUHpfTRfFyklmiiLBE1i1aGCtz4eRA3POao%3D#git", + "source": "nixpkg", + "systems": { + "x86_64-linux": { + "outputs": [ + { + "path": "/nix/store/zhv8ib8y1zfi76afddfnp8fmm562bgaa-git-2.50.1", + "default": true + } + ] + } + } + }, + "github:NixOS/nixpkgs/nixpkgs-unstable": { + "last_modified": "2025-09-05T01:14:44Z", + "resolved": "github:NixOS/nixpkgs/ca77296380960cd497a765102eeb1356eb80fed0?lastModified=1757034884&narHash=sha256-PgLSZDBEWUHpfTRfFyklmiiLBE1i1aGCtz4eRA3POao%3D" + }, + "jq": { + "resolved": "github:NixOS/nixpkgs/ca77296380960cd497a765102eeb1356eb80fed0?narHash=sha256-PgLSZDBEWUHpfTRfFyklmiiLBE1i1aGCtz4eRA3POao%3D#jq", + "source": "nixpkg", + "systems": { + "x86_64-linux": { + "outputs": [ + { + "name": "man", + "path": "/nix/store/xvv5ss0sb0y0bfi7m19smls37afsxmvi-jq-1.8.1-man", + "default": true + }, + { + "name": "bin", + "path": "/nix/store/zjl3cfsqvwiz2g943sm15n1gghv793m3-jq-1.8.1-bin", + "default": true + } + ] + } + } + }, + "nodejs_20": { + "plugin_version": "0.0.2", + "resolved": "github:NixOS/nixpkgs/ca77296380960cd497a765102eeb1356eb80fed0?narHash=sha256-PgLSZDBEWUHpfTRfFyklmiiLBE1i1aGCtz4eRA3POao%3D#nodejs_20", + "source": "nixpkg", + "systems": { + "x86_64-linux": { + "outputs": [ + { + "path": "/nix/store/4i5h4acwfks571bagg651zdp0fybv93s-nodejs-20.19.4", + "default": true + } + ] + } + } + }, + "yarn": { + "resolved": "github:NixOS/nixpkgs/ca77296380960cd497a765102eeb1356eb80fed0?narHash=sha256-PgLSZDBEWUHpfTRfFyklmiiLBE1i1aGCtz4eRA3POao%3D#yarn", + "source": "nixpkg", + "systems": { + "x86_64-linux": { + "outputs": [ + { + "path": "/nix/store/0wckc0rh5m1v74g0sb3xa9ax0rf1dfg5-yarn-1.22.22", + "default": true + } + ] + } + } + } + } +}