readmeio/rdme

v9 roadmap

kanadgupta opened this issue · 7 comments

  • Add deprecation notice to docs commands
  • Remove workingDirectory argument from openapi family of commands (RM-7754, #904)
  • #645
  • #962
  • Auto-publish GitHub releases (e.g., remove gh CLI usage)
  • Remove lastUpdatedHash insertion (internal ticket)
  • Make sure JSON import assertions are future-proof (or aren't used at all) #993
  • #889
  • Migrate to ESM (#856)
    • Do some QA to ensure no Node ExperimentalWarnings show up #901
  • Drop support for Node 14 + 16 (release schedule) #900
    • Bump lockfile to v3
  • Remove docs:edit command #902
  • Remove oas command #902
  • Remove swagger command #902
  • (Probably separate from the ESM migration) look into any clean-up/modernizations we can do in the tsconfig #905
  • flip the isPublic flag in the versions:create and versions:update commands to be hidden so it's consistent with the other flags and with our API endpoints #906
  • #895
  • #857
  • Use native Node 18 fetch and FormData and msw in favor of node-fetch and nock and formdata-node, convert everything over accordingly #1000

lower priority

  • Volta guidance?
  • Remove logic for triple tagging (i.e. v9, v9.0.0, 9.0.0)
  • Optimize GHA build process

Maybe we also migrate to ESM? 😬

fwiw, iirc last time i looked into that you still needed to pass the --experimental flag to Node for ESM in order to run bin/rdme. That was like a year and a half ago though, and before we migrated to TS, so maybe things are different now.

maybe we also drop Node 16 support also when that is EOL in a few weeks. we'll want to bump the version here (in addition to everywhere else):

FROM node:16-alpine as builder

Now that we've got rdme guides and rdme guides:prune aliased to rdme docs:<cmd> can we deprecate and remove rdme docs?

@erunion ah yeah good callout — definitely down to add a deprecation notice but i don't think we should remove those until we're using the new /guides routes

For dumping node-fetch and formdata-node for native fetch the place where you're using formdata-node in #856 can be replaced with this diff:

diff --git a/src/lib/streamSpecToRegistry.ts b/src/lib/streamSpecToRegistry.ts
index a73445f..9d4f68a 100644
--- a/src/lib/streamSpecToRegistry.ts
+++ b/src/lib/streamSpecToRegistry.ts
@@ -1,8 +1,4 @@
-import fs from 'node:fs';
-
-import { FormData } from 'formdata-node';
 import ora from 'ora';
-import { file as tmpFile } from 'tmp-promise';
 
 import { debug, oraOptions } from './logger.js';
 import readmeAPIFetch, { handleRes } from './readmeAPIFetch.js';
@@ -15,23 +11,15 @@ import readmeAPIFetch, { handleRes } from './readmeAPIFetch.js';
  */
 export default async function streamSpecToRegistry(spec: string) {
   const spinner = ora({ text: 'Staging your API definition for upload...', ...oraOptions() }).start();
-  // Create a temporary file to write the bundled spec to,
-  // which we will then stream into the form data body
-  const { path } = await tmpFile({ prefix: 'rdme-openapi-', postfix: '.json' });
-  debug(`creating temporary file at ${path}`);
-  await fs.writeFileSync(path, spec);
-  const stream = fs.createReadStream(path);
-
-  debug('file and stream created, streaming into form data payload');
+  debug('preparing spec into form data payload');
   const formData = new FormData();
-  formData.append('spec', {
-    type: 'application/json',
-    name: 'openapi.json',
-    [Symbol.toStringTag]: 'File',
-    stream() {
-      return stream;
-    },
-  });
+  formData.append(
+    spec,
+    new Blob([spec], {
+      type: 'application/json',
+    }),
+    'openapi.json',
+  );
 
   const options = {
     body: formData,