Skip to content

v7.0 rewrite checklist #311

Open
Open
@yamalight

Description

@yamalight

This is an issue to track overall progress on v7.0 rewrite.
Plan is to rewrite / update code to use latest libs (not just versions) and ES modules (ES modules are not ready yet, dropping them?).
Additionally, I'm planning to implement exoframe-client library that provides simple API for interacting with server (would allow to create new client, e.g. dashboard as some people wanted).

All work is done on v7-rewrite branch.

Packages:

  • exoframe-client
  • exoframe-server
  • exoframe-cli
  • exoframe-recipe-ghost
  • exoframe-template-java
  • exoframe-website (incl. docs)

Planned major changes:

  • Drop yarn support
    Reasoning: yarn v1 is deprecated and v2 is too different from v1. npm v7 now does most of things yarn v1 did.
  • Drop plugins support
    Reasoning: swarm is deprecated. There are no other plugins and doesn't seem like they'd be useful 🤔
  • Drop docker swarm support.
    Reasoning: support for it adds complexity, almost nobody uses swarm (k8s is a better solution for that problem), exoframe doesn't work well in those scenarios as a whole.
  • Drop docker-compose support.
    Reasoning: compose-based deployments don't work well with exoframe (users has to manually add traefik labels, etc), which causes a lot of issues. there's also an issue with tearing down and rebuilding / restarting all services when you only want to update one. IMO the best way would be to deprecate it and describe how to deploy multi-service projects using plain exoframe configs.
  • Drop exoframe-faas support.
    Reasoning: it's half-baked, rarely used but adds quite a bit of overhead to the server. Would be better to provide a guide to extra-slim docker containers (not quite FaaS, but should close enough for this project scope)
  • Drop old / unused recipes and templates (include one of each as an example)
    Reasoning: it's hard to maintain / fix all of them with time (I kinda ended up abandoning most of them), so it's better to just have a few simple examples.

Things to address in code / deps:

  • Fix update tests for exoframe-server (failing in CI)
  • Fix deprecation warnings in exoframe-server
  • Replace @zeit/ncc with @vercel/ncc. New ncc version doesn't work well, removed, will publish exoframe-server as-is.
  • Update to eslint 8.x and eslint-plugin-import 3.x (?) to enable top-level await support
    • Re-enable eslint in CI for exoframe-server once done
  • Refactor CLI config loading to be executed on every program creation, not just on load (helpful for tests)
  • Try using new @vercel/ncc -> doesn't work since some deps are still CJS and exoframe-server is ESM. Mixing those two doesn't work well when bundling code 😑

Planned issues:

ToDos:

  • Go through Dockerfile best practices repo (and this) and apply all that make sense to default dockerfiles used by exoframe
  • Combine all repos to monorepo
  • Archive all old repos

Things to document:

Breaking changes (to keep track of them somehow):

  • Node 18+ as minimum requirement (due to ESM)
  • Removal of yarn
  • Removal of plugins
  • Removal of swarm
  • Removal of compose
  • Removal of exoframe-faas
  • Config folder change (using XDG_CONFIG_HOME now)
  • [todo]

Any feedback welcome.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions