Skip to content

v7.0 rewrite checklist #311

@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 😑
  • Update traefik deploy command to work with Docker Engine v29 #324

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)

Pre-RC1 checklist:

  • Update all dependencies to latest versions
  • Create github action to publish release versions
  • Make sure new version works with traefik v3

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