Girish Ramakrishnan
01d0c738bc
replace debug() with our custom logger
...
mostly we want trace() and log(). trace() can be enabled whenever
we want by flipping a flag and restarting box
2026-03-12 23:08:35 +05:30
Johannes Zellner
2a6d385cea
Support and prefer Dockerfile.cloudron in local builds
2026-03-02 12:06:27 +01:00
Girish Ramakrishnan
cd89883dbb
apps: move to error state if a volume is unavailable
2026-02-28 01:02:22 +01:00
Girish Ramakrishnan
f4598f81c9
debug: add CLOUDRON_DEBUG=1 env var
2026-02-23 10:53:06 +01:00
Girish Ramakrishnan
812d471573
add backupCommand, restoreCommand, persistentDirs
2026-02-21 19:42:52 +01:00
Girish Ramakrishnan
4ed6fbbd74
eslint: add no-shadow
2026-02-18 08:18:37 +01:00
Girish Ramakrishnan
e9f96593c3
reorder functions for no-use-before-define
2026-02-14 16:34:34 +01:00
Girish Ramakrishnan
36aa641cb9
migrate to "export default"
...
also, set no-use-before-define in linter
2026-02-14 15:43:24 +01:00
Girish Ramakrishnan
96dc79cfe6
Migrate codebase from CommonJS to ES Modules
...
- Convert all require()/module.exports to import/export across 260+ files
- Add "type": "module" to package.json to enable ESM by default
- Add migrations/package.json with "type": "commonjs" to keep db-migrate compatible
- Convert eslint.config.js to ESM with sourceType: "module"
- Replace __dirname/__filename with import.meta.dirname/import.meta.filename
- Replace require.main === module with process.argv[1] === import.meta.filename
- Remove 'use strict' directives (implicit in ESM)
- Convert dynamic require() in switch statements to static import lookup maps
(dns.js, domains.js, backupformats.js, backupsites.js, network.js)
- Extract self-referencing exports.CONSTANT patterns into standalone const
declarations (apps.js, services.js, locks.js, users.js, mail.js, etc.)
- Lazify SERVICES object in services.js to avoid circular dependency TDZ issues
- Add clearMailQueue() to mailer.js for ESM-safe queue clearing in tests
- Add _setMockApp() to ldapserver.js for ESM-safe test mocking
- Add _setMockResolve() wrapper to dig.js for ESM-safe DNS mocking in tests
- Convert backupupload.js to use dynamic imports so --check exits before
loading the module graph (which requires BOX_ENV)
- Update check-install to use ESM import for infra_version.js
- Convert scripts/ (hotfix, release, remote_hotfix.js, find-unused-translations)
- All 1315 tests passing
Migration stats (AI-assisted using Cursor with Claude):
- Wall clock time: ~3-4 hours
- Assistant completions: ~80-100
- Estimated token usage: ~1-2M tokens
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-14 15:11:45 +01:00
Johannes Zellner
fd0d65b8ce
Keep the app source archive with the app instance data dir
2026-01-27 22:01:18 +01:00
Johannes Zellner
ef2a94c2c8
use local/id:version-ts as docker image tag for locally built apps
2026-01-27 22:01:18 +01:00
Johannes Zellner
b43daf2f08
Use the uploaded app source tarball to build a local docker image
2026-01-27 22:01:18 +01:00
Johannes Zellner
89baa3cabf
Set the default locale to C.UTF-8 in 2026
2026-01-07 13:46:10 +01:00
Girish Ramakrishnan
da726ecd15
dockerregistry: do not use auth with explicit registry for appstore images
2026-01-02 10:24:51 +01:00
Girish Ramakrishnan
a8f61878ca
docker: add comments
2026-01-01 11:18:40 +01:00
Girish Ramakrishnan
45d68c4da8
shell: set utf8 encoding explicity for spawn and as the default for sudo
2025-10-13 13:14:50 +02:00
Girish Ramakrishnan
4381809959
docker: container id cannot be null
2025-08-27 08:33:25 +02:00
Girish Ramakrishnan
12e073e8cf
use node: prefix for requires
...
mostly because code is being autogenerated by all the AI stuff using
this prefix. it's also used in the stack trace.
2025-08-14 12:55:35 +05:30
Girish Ramakrishnan
8bf8c278f0
system: add tests for fs usage route
2025-07-17 01:42:28 +02:00
Girish Ramakrishnan
9f35801f64
docker: add options to getStats
2025-07-03 23:56:03 +02:00
Girish Ramakrishnan
6b8b69d324
metrics: rename functions
2025-07-01 11:10:21 +02:00
Girish Ramakrishnan
594a2e759a
Fix typo in 3770f07720
2025-05-27 17:47:36 +02:00
Johannes Zellner
6adf26f4d9
Improve waiting for dns screen
2025-05-27 13:55:36 +02:00
Girish Ramakrishnan
3770f07720
docker: rename function
2025-05-21 15:37:31 +02:00
Girish Ramakrishnan
1bbdabc42f
registry config: create table and migrate existing setting
2025-05-07 15:56:13 +02:00
Girish Ramakrishnan
dca9266697
isValidHostname is gone
2025-03-17 15:54:24 +01:00
Girish Ramakrishnan
5d88e86462
sendmail: add requiresValidCertificate
...
some apps really want a valid certificate to send mail and upstream
authors won't add support to skip self-signed certs or skip host name
check in cert. In our case, the issue is that we use 'mail' as the
server name despite having valid certs.
this flag will set the server name to the full mail server fqdn and
also reconfigure the app as needed when the mail server name changes.
we also set up the mail server name to resolve to internal IP because
no mail port is exposed when we are not receiving emails!
2025-03-08 13:15:53 +01:00
Girish Ramakrishnan
3ebb41c5ad
docker: include error.message
2025-02-05 16:23:31 +01:00
Girish Ramakrishnan
e161c26c35
docker: validate serverAddress
2025-02-05 10:37:01 +01:00
Girish Ramakrishnan
73e1e6881e
docker: fix parsing of imageRef if no namespace
2025-01-03 10:10:06 +01:00
Girish Ramakrishnan
3d8ffcd0f7
another typo
2024-12-14 23:28:00 +01:00
Girish Ramakrishnan
8e6890b4d6
docker: rework image pruning
...
with our new retagging approach, the Digest ID remains <null> because
this is only set by docker if truly fetched from the registry.
this means that redis container always gets removed...
2024-12-14 20:47:35 +01:00
Girish Ramakrishnan
96b715de8e
apptask: try install via ipv4
...
our ci app images are not pushed to quay and the tests fail on
ipv6 servers
2024-12-14 18:55:55 +01:00
Girish Ramakrishnan
6b7edbd552
docker: fallback to quay if docker hub does not work
2024-12-14 15:22:12 +01:00
Girish Ramakrishnan
12f19299a8
docker: only send credentials when registry matches
2024-12-14 14:21:15 +01:00
Girish Ramakrishnan
0008e5a83b
docker: parse registry also
2024-12-14 14:10:29 +01:00
Girish Ramakrishnan
0bd1aac0ef
refactor
2024-12-14 14:05:53 +01:00
Girish Ramakrishnan
5145344987
docker: do not use auth for cloudron namespace
2024-12-14 14:04:40 +01:00
Girish Ramakrishnan
5ce82d6794
docker: parseImageRef
2024-12-14 14:00:05 +01:00
Johannes Zellner
8493022f75
Allow apps to specify custom devices
2024-12-05 14:21:07 +01:00
Johannes Zellner
18e5365104
Fix typo
2024-11-05 14:24:40 +01:00
Girish Ramakrishnan
61341b8380
boxerror: always pass second error string
2024-10-30 17:32:12 +01:00
Girish Ramakrishnan
6c3ca9c364
shell: rework code to use shell.spawn
...
spawn gives out streams and we have more control over the stdout/stderr
buffers. otherwise, we have to provide a max buffer capture size to exec
2024-10-15 12:13:46 +02:00
Girish Ramakrishnan
a9e1d7641d
shell: make require take a tag
2024-10-14 21:08:32 +02:00
Girish Ramakrishnan
dca9246450
Fix AdGuard resolving dashboard to docker bridge IP
...
Issue 1: DO droplet when given the name my.blah.com , will put an entry
in /etc/hosts with `127.0.1.1 my.blah.com` . When app containers use
system DNS, they get this IP address which does not work inside a container.
An idea is to remove this entry when running cloudron-setup, but maybe this
causes trouble later.
Issue 2: Some networks seem to lack loopback networking. With OIDC changes,
we want the apps to access my.blah.com even if hairpin nat is not working.
Solution: make my.blah.com to resolve to the docker bridge IP (172.18.0.1)
where nginx also listens to. This means that such requests never go outside the server
Caveats:
* This breaks AdGuard which now starts resolving it to 172.18.0.1 for
the entire network! So, we skip ExtraHosts configuration for adguard
* Maybe ExtraHosts should be scoped to OIDC apps only. But the thought here is
that it will help apps like say n8n which are querying dasahboard.
2024-09-18 14:42:11 +02:00
Girish Ramakrishnan
1b5fee233e
docker: use the system dns for app containers
...
take 2 after failed attempt with 92bce26e22
this makes the dashboard domain resolve internally to nginx
can test with `getent ahosts my.domain.com` inside the container.
2024-09-11 17:52:25 +02:00
Girish Ramakrishnan
63457d2de4
Revert "docker: use the system dns for app containers"
...
This reverts commit 92bce26e22 .
2024-09-10 19:37:39 +02:00
Girish Ramakrishnan
92bce26e22
docker: use the system dns for app containers
2024-09-10 09:42:31 +02:00
Girish Ramakrishnan
abf445e969
docker: fix rounding
...
toFixed() returns a string!
2024-08-28 11:45:53 +02:00
Girish Ramakrishnan
aeddaa4566
apps: rework portBindings
...
ports is REST API input . Map of env var to the host port
portBinding is the database structure. Map of env var to host port, count, type etc
also, rename portCount -> count in various places to keep things consistent
2024-07-17 00:25:47 +02:00