Skip to content

Releases: innotelinc/zeus

Zeus v1.3.1

Choose a tag to compare

@github-actions github-actions released this 09 Sep 16:29

Zeus v1.3.1 — generated by the release pipeline.

Docker images (published to GHCR by this run):

  • ghcr.io/innotelinc/zeus:v1.3.1 (portal) + :latest
  • ghcr.io/innotelinc/zeus:v1.3.1-fullstack (Asterisk + FreePBX) + :latest-fullstack

Artifacts

  • Source bundle (zeus-source-bundle.tar.gz + checksum)
  • Deployment payload (zeus-deployment.tar.gz + SHA256SUMS)

Zeus v1.3.0

Choose a tag to compare

@github-actions github-actions released this 09 Sep 16:15

Zeus v1.3.0 — generated by the release pipeline.

Docker images (published to GHCR by this run):

  • ghcr.io/innotelinc/zeus:v1.3.0 (portal) + :latest
  • ghcr.io/innotelinc/zeus:v1.3.0-fullstack (Asterisk + FreePBX) + :latest-fullstack

Artifacts

  • Source bundle (zeus-source-bundle.tar.gz + checksum)
  • Deployment payload (zeus-deployment.tar.gz + SHA256SUMS)

Zeus v1.2.0

Choose a tag to compare

@github-actions github-actions released this 08 Sep 15:24

Zeus v1.2.0 — generated by the release pipeline.

Docker images (published to GHCR by this run):

  • ghcr.io/innotelinc/zeus:v1.2.0 (portal) + :latest
  • ghcr.io/innotelinc/zeus:v1.2.0-fullstack (Asterisk + FreePBX) + :latest-fullstack

Artifacts

  • Source bundle (zeus-source-bundle.tar.gz + checksum)
  • Deployment payload (zeus-deployment.tar.gz + SHA256SUMS)

Zeus v1.1.1

Choose a tag to compare

@innotelinc innotelinc released this 07 Sep 12:20

Zeus is the TelephonyOps platform of the Innotel Platform Stack — PBX, SMS, and voice.

Zeus v1.1.0

Choose a tag to compare

@github-actions github-actions released this 04 Sep 07:35

Zeus v1.1.0 — generated by the release pipeline.

Docker images (published to GHCR by this run):

  • ghcr.io/innotelinc/zeus:v1.1.0 (portal) + :latest
  • ghcr.io/innotelinc/zeus:v1.1.0-fullstack (Asterisk + FreePBX) + :latest-fullstack

Artifacts

  • Source bundle (zeus-source-bundle.tar.gz + checksum)
  • Deployment payload (zeus-deployment.tar.gz + SHA256SUMS)

v0.5.0 — Admin portal, dynamic plans & GHCR image publishing

Choose a tag to compare

@innotelinc innotelinc released this 12 Aug 03:46

Highlights

  • Full-stack image publishing — the Asterisk + FreePBX image is now built and pushed to GHCR (ghcr.io/innotelinc/pbx-portal:*-fullstack) automatically on every push to master and on releases. docker-compose.full.yml pulls the prebuilt image, so fresh deployments start in minutes instead of a 45-90 min local build (docker-compose.full.build.yml retains the local-build path).
  • Admin portal — admin user CRUD, dynamic plan management with Stripe price auto-sync, billing fixes, password change.
  • Dashboard rewrite — modern UI with light/dark theme toggle, live device-state polling, loading skeletons, health dashboard page.
  • Phone management — number release, FreePBX extensions API restored (GQL patches, OAuth scopes, portal schema).
  • Softphone / WebRTC — AMI Originate & Hangup, configurable WSS URL (settings UI + ws.innotel.us), WSS cert regeneration, PJSIPShowEndpoint event parsing, many stability fixes.

Fixes

  • Demo login — runtime-generated hash + self-healing seed repair
  • AMI handler crash on Local-channel calls (call_history user_id NULL)
  • Asterisk watchdog + FreePBX module repair + MariaDB persistence
  • FreePBX module persistence across reboots and rebuilds
  • AMI health probe (ping-based), reconnect race removed, AMI credential sync on startup, ucp_events user restore
  • Health probes — VoIP.ms getBalance, FreePBX HTTP connectivity check, run concurrently
  • Portal binds to 0.0.0.0 (fixes EADDRNOTAVAIL), stale root-owned data volume self-heal, AppArmor handling
  • Theme-aware dropdowns, light-mode fixes, lazy-loaded softphone, session verification after login

Full changelog (37 commits)

$(git log v0.4.4..master --format='- %h %s')

v0.4.4 — Session persistence + fax stack fixes

Choose a tag to compare

@innotelinc innotelinc released this 08 Aug 20:12

Session persistence (critical fix)

  • Fixed: Session cookie secure flag was tied to NODE_ENV, which is "production" in Docker. Browsers refused to store/send Secure cookies over HTTP, causing every page navigation after login to redirect back to /login (blank pages, forced re-auth).
  • Fix: Use explicit SESSION_SECURE env var (defaults to false). Set SESSION_SECURE=true only when behind HTTPS/TLS.
  • Added .env.docker.example with all required environment variables documented.

Fax stack fixes

  • sendfax: Bypass hfaxd authentication by writing jobs directly to the HylaFAX sendq/ spool directory (fixes "Login failed: 500 PASS syntax error").
  • fax status: Read sendq//doneq/ qfiles directly from spool instead of calling faxstat (which requires hfaxd auth).
  • spool permissions: Create sendq/, doneq/, docq/ directories with 770 uucp:uucp at startup.
  • cross-container: Base64-encode PDF content for portal→freepbx fax transfer (containers dont share filesystems).

FreePBX fixes

  • UCP Node: Start fwconsole ucp daemon in entrypoint + add [ucp_events] AMI user (fixes "UCP Node is not running" in FreePBX dashboard).
  • Postfix: Start postfix in entrypoint + add showq service to master.cf (fixes "mailq: Queue report unavailable").

Docker / build

  • IAXModem 1.3.5 + HylaFAX+ 7.0.11 compiled from source
  • 4 virtual fax modems (ttyIAX1-4) with matching IAX2 peers in Asterisk
  • AvantFax 3.4.1 web UI at /fax via PHP 7.4 FPM
  • IAX calltoken fix for local Asterisk connections
  • Updated SourceForge download URLs (old downloads.sourceforge.net paths 404)

v0.4.2 — Full-stack runtime fixes

Choose a tag to compare

@innotelinc innotelinc released this 08 Aug 17:42

What's fixed

FreePBX API / OAuth2 module installed

  • The api module is now installed during the Docker build, providing the OAuth2 token endpoint and GraphQL API that the portal uses via src/lib/freepbx.ts
  • Auto-registers the portal as an OAuth2 client_credentials application on startup when FREEPBX_CLIENT_ID and FREEPBX_CLIENT_SECRET are set

AMI secret wiring

  • Fixed env var name mismatch: the entrypoint was looking for AMI_SECRET but the compose file passes FREEPBX_AMI_SECRET

Landing page cleanup

  • Removed "7-day free trial" mentions from the landing page CTA

Previous fixes (v0.4.1)

  • AppArmor apparmor=unconfined on all compose services
  • FreePBX FPM pool runs as asterisk user (fixes 503 on FreePBX UI)
  • Removed phantom avantfax service and redundant external mariadb
  • FreePBX installer exit-code workaround

v0.4.1 — AppArmor fix

Choose a tag to compare

@innotelinc innotelinc released this 08 Aug 04:40

What's changed in v0.4.1

Patch release — ships the AppArmor fix that landed after v0.4.0.

  • Disable AppArmor for compose services — Docker's docker-default AppArmor profile can't be checked on sandboxed/containerized Docker hosts (unreadable /sys/kernel/security/apparmor), so docker compose up / docker run failed with "Could not check if docker-default AppArmor profile was loaded: permission denied". Added security_opt: [apparmor=unconfined] to all services in docker-compose.full.yml and docker-compose.yml.

Images

  • Portal: ghcr.io/innotelinc/pbx-portal:0.4.1 (and latest)
  • Full-stack: ghcr.io/innotelinc/pbx-portal:0.4.1-fullstack

v0.4.0 — Build fix + full-stack CI

Choose a tag to compare

@innotelinc innotelinc released this 08 Aug 04:25

What's changed

Build fix (critical) — Restored a working production build on Next.js 16.3.0, which was crashing while prerendering synthetic error routes (_global-error, _not-found) and pages-router status pages (framework bug vercel/next.js #86177/#86178).

  • patches/next+16.3.0.patch applied via patch-package (postinstall hook) — skips static generation of the broken synthetic/status routes
  • force-dynamic root layout; custom not-found.tsx and global-error.tsx pages
  • Dockerfile copies patches/ before npm ci so the fix applies in Docker builds

CI/CD

  • New full-stack Dockerfile.full build check job (Asterisk + FreePBX, 45–90 min) — runs weekly and via manual dispatch, deliberately not on every PR
  • workflow_dispatch trigger and weekly schedule added
  • docker compose validation for the full-stack compose file

Lint & tooling

  • Switched ESLint to eslint-config-next flat configs directly (FlatCompat was broken on ESLint 9); fixed all lint errors (set-state-in-effect, unused vars/imports across API routes and libs)

Docs & config

  • README updated with the build workaround, error pages, and release process
  • Removed NODE_ENV from env example files (Next.js warns against setting it)

Images

  • Portal: ghcr.io/innotelinc/pbx-portal:0.4.0 (and latest)
  • Full-stack: ghcr.io/innotelinc/pbx-portal:0.4.0-fullstack