Remove references to vendor/aprs directory since the app uses GitHub
dependency {:aprs, github: "aprsme/aprs", branch: "main"} instead.
This was causing build failures when trying to compile non-existent
local vendor code.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Previously, the deployment timestamp was set to DateTime.utc_now() when
the application started, which meant it would always show as recent in
k8s environments where pods are recreated on each deployment.
This commit:
- Updates Release.init() to check for DEPLOYED_AT environment variable
- Falls back to current time if env var is not set (backwards compatible)
- Adds proper ISO8601 timestamp parsing with error handling
- Updates GitHub Actions deploy workflow to set DEPLOYED_AT during deployment
- Creates k8s patch file for future manual deployments
The deployment timestamp will now persist across pod restarts in k8s,
showing the actual deployment time rather than pod startup time.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Convert Gleam encoding module to Elixir implementation
- Remove all Gleam dependencies from mix.exs
- Remove Gleam configuration files (gleam.toml, src directory)
- Update Dockerfile to remove mix_gleam installation
- Update EncodingUtils to use Elixir module instead of Gleam
- Remove Gleam references from documentation
- Clean up all Gleam-related build configuration
This simplifies the build process and removes the compilation issues
that were preventing successful Docker builds.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add src directory to Dockerfile (contains Gleam source files)
- Add gleam.toml to Dockerfile (Gleam configuration)
- The mix compile alias already handles gleam_compile
This minimal change ensures Gleam files are available during the build
without modifying the compilation process.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add src directory to Dockerfile COPY commands
- Include gleam.toml in Docker build
- Add mix gleam.compile step before mix compile
- Fixes UndefinedFunctionError for :aprsme@encoding:sanitize_string/1
The Gleam source files weren't being included in the Docker build,
causing the encoding module to be missing at runtime.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Create deployed_at.txt before switching to elixir user
- Set proper ownership on the file
- This fixes the 'Permission denied' error during build
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove BuildKit advanced features that were slowing builds
- Remove multi-platform builds (only build for amd64)
- Remove security scanning stage
- Remove complex caching mounts
- Simplify to basic 2-stage build
- Use registry cache instead of GitHub Actions cache
This should reduce build time from 10+ minutes to 2-3 minutes.
Co-Authored-By: Claude <noreply@anthropic.com>
- Phoenix uses standalone ESBuild and Tailwind binaries
- No npm dependencies needed (package.json was empty)
- Removes ~150MB from Docker image
- Speeds up build time by removing Node.js installation step
Co-Authored-By: Claude <noreply@anthropic.com>
The vendored dependency wasn't being found in the expected location.
This approach manually compiles it and copies the compiled files to
the correct location before running the main compilation.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Use compile.protocols and compile.elixir to avoid dependency checking.
Also add debug output to see if aprs is being compiled properly.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
The issue is that mix compile alias includes gleam_compile which fails.
This workaround temporarily comments out the compile alias in mix.exs,
runs the standard mix compile, then manually copies Gleam BEAM files.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
The mix compile task includes dependency checking which fails for vendored deps.
Using compile.elixir directly compiles only the Elixir source files.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
The gleam_compile mix task fails in CI due to dependency checking issues.
This workaround copies the pre-compiled BEAM files directly and uses
mix compile without the custom alias.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
The vendored aprs dependency is properly compiled by mix deps.compile
without needing a separate compilation step.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
The vendored aprs dependency wasn't being compiled properly in the Docker build.
Added explicit compilation step to ensure the dependency is built before mix deps.compile.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add Node.js installation to Dockerfile
- Run npm install to get dependencies
- Build vendor bundle during Docker build
- Remove unnecessary assets.deploy.prod alias
This ensures all JavaScript dependencies are available during the build process.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add new mix alias 'assets.deploy.prod' that skips vendor bundling
- Copy pre-bundled vendor.js and vendor.css files in Dockerfile
- Prevents esbuild errors when npm packages aren't available during build
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
The Docker build was failing because vendor CSS files (leaflet.css, etc.)
were not available during the assets compilation step. Since vendor files
are in .gitignore, they need to be downloaded during the Docker build.
Added steps to the Dockerfile to:
- Copy the download-vendor-files.sh script into the build container
- Execute the script to download all vendor JS and CSS files
- This ensures vendor files are present before mix assets.deploy runs
This fixes the "Can't resolve '../vendor/leaflet.css'" error during
production deployments.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Mark gleam_stdlib and gleeunit with compile: false in mix.exs
- Copy pre-compiled Gleam BEAM files in Dockerfile
- Add explicit mix gleam_compile step before asset compilation
- Ensure priv/gleam directory is included in Docker build
This fixes the "Could not compile :gleam_stdlib" error during deployment.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Update gleam_compile task to handle missing mix_gleam/gleam binary
- Add fallback to use pre-compiled BEAM files from priv/gleam
- Include pre-compiled aprsme@encoding.beam for Docker builds
- Update both Dockerfiles to ensure priv/gleam directory exists
- Fix module name filter from "aprs@" to "aprsme@" in fallback logic
This ensures Docker builds work without requiring gleam or mix_gleam
to be installed in the production container.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>