Typically, when attempting to stop a container via `docker stop` or
`podman stop`, the container engine will send a stop signal (SIGTERM by
default) to the container's main process. There are two common ways this
can go wrong:
1. The main process is run as PID 1 and doesn't register a signal
handler for the stop signal and is consequently ignored
2. The main process is a shell script running a foreground process with
no `trap`s and is consequently ignored by the *shell*
In either case, because the graceful stop signal is ignored, the
container engine will then send a `SIGKILL` to the container process
after a default timeout of 10 seconds. This is why some containers can
be observed to "hang" when being stopped when they have no other reason
to do so. Unlike `SIGTERM` or `SIGINT`, `SIGKILL` is an immediate,
ungraceful stop that doesn't give the process time to clean up.
There is a fair bit of nuance in how `sh` and `bash` handle signals in
different circumstances. The behavior relevant to the second case above
and Dawarich's entrypoints in particular is that the shell ignores
signals like `SIGTERM` and `SIGINT` when waiting on a foreground job; in
this case, that would be: `bundle exec ${@}`. The reason that `SIGINT`
is not ignored after pressing `Ctrl+C` while running the docker compose
stack is because in that case the shell is **interactive** and the shell
*does* respond to `SIGINT` then (c.f. the aforementioned nuance).
Thankfully, the fix is simple: `exec` the main process, which causes the
server process to *replace* the shell process and directly receive any
signals sent. Additionally, the stop signal for the app process should
be set to `SIGINT`, as that is the expected signal for graceful
shutdown. Sidekiq is fine with either `SIGTERM` or `SIGINT`, which is
convenient.
* Add a plan to use MapLibre GL JS for the frontend map rendering, replacing Leaflet
* Implement phase 1
* Phases 1-3 + part of 4
* Fix e2e tests
* Phase 6
* Implement fog of war
* Phase 7
* Next step: fix specs, phase 7 done
* Use our own map tiles
* Extract v2 map logic to separate manager classes
* Update settings panel on v2 map
* Update v2 e2e tests structure
* Reimplement location search in maps v2
* Update speed routes
* Implement visits and places creation in v2
* Fix last failing test
* Implement visits merging
* Fix a routes e2e test and simplify the routes layer styling.
* Extract js to modules from maps_v2_controller.js
* Implement area creation
* Fix spec problem
* Fix some e2e tests
* Implement live mode in v2 map
* Update icons and panel
* Extract some styles
* Remove unused file
* Start adding dark theme to popups on MapLibre maps
* Make popups respect dark theme
* Move v2 maps to maplibre namespace
* Update v2 references to maplibre
* Put place, area and visit info into side panel
* Update API to use safe settings config method
* Fix specs
* Fix method name to config in SafeSettings and update usages accordingly
* Add missing public files
* Add handling for real time points
* Fix remembering enabled/disabled layers of the v2 map
* Fix lots of e2e tests
* Add settings to select map version
* Use maps/v2 as main path for MapLibre maps
* Update routing
* Update live mode
* fix: move foreman to global gems to fix startup crash (#1971)
* Update exporting code to stream points data to file in batches to red… (#1980)
* Update exporting code to stream points data to file in batches to reduce memory usage
* Update changelog
* Update changelog
---------
Co-authored-by: Robin Tuszik <mail@robin.gg>
* Implement OmniAuth GitHub authentication
* Fix omniauth GitHub scope to include user email access
* Remove margin-bottom
* Implement Google OAuth2 authentication
* Implement OIDC authentication for Dawarich using omniauth_openid_connect gem.
* Add patreon account linking and patron checking service
* Update docker-compose.yml to use boolean values instead of strings
* Add support for KML files
* Add tests
* Update changelog
* Remove patreon OAuth integration
* Move omniauthable to a concern
* Update an icon in integrations
* Update changelog
* Update app version
* Fix family location sharing toggle
* Move family location sharing to its own controller
* Update changelog
* Implement basic tagging functionality for places, allowing users to categorize and label places with custom tags.
* Add places management API and tags feature
* Add some changes related to places management feature
* Fix some tests
* Fix sometests
* Add places layer
* Update places layer to use Leaflet.Control.Layers.Tree for hierarchical layer control
* Rework tag form
* Add hashtag
* Add privacy zones to tags
* Add notes to places and manage place tags
* Update changelog
* Update e2e tests
* Extract tag serializer to its own file
* Fix some tests
* Fix tags request specs
* Fix some tests
* Fix rest of the tests
* Revert some changes
* Add missing specs
* Revert changes in place export/import code
* Fix some specs
* Fix PlaceFinder to only consider global places when finding existing places
* Fix few more specs
* Fix visits creator spec
* Fix last tests
* Update place creating modal
* Add home location based on "Home" tagged place
* Save enabled tag layers
* Some fixes
* Fix bug where enabling place tag layers would trigger saving enabled layers, overwriting with incomplete data
* Update migration to use disable_ddl_transaction! and add up/down methods
* Fix tag layers restoration and filtering logic
* Update OIDC auto-registration and email/password registration settings
* Fix potential xss