Actualización automática de temas y plugins al formato de archivo .gjs

En la última versión de la configuración de linting estándar de Discourse, hemos habilitado la regla require-strict-mode de ember-template-lint. Esto generará un error de linting para cualquier archivo .hbs.

Para resolver las advertencias, debes convertir todas las plantillas de tus componentes, rutas y conectores a archivos .gjs. Para facilitar esto, hemos creado discourse-gjs-codemod, que se basa en el @embroider/template-tag-codemod de Ember.

Para usar el codemod, primero asegúrate de que tus dependencias de linting estén actualizadas copiando el último package.json del esqueleto del plugin o del esqueleto del tema. Luego, ejecuta eslint y prettier:

pnpm i
pnpm eslint --fix .
pnpm prettier --write "**/*.{gjs,js,hbs,scss}"

Si algún problema no pudo ser corregido automáticamente, resuélvelo manualmente ahora. No ejecutes ember-template-lint todavía; se espera que falle.

Ahora ejecuta el codemod usando este comando:

pnpm dlx https://github.com/discourse/discourse-gjs-codemod

Si hay algún problema que no se pueda resolver automáticamente, se imprimirá información en la terminal. Una vez que hayas resuelto el problema, ejecuta el codemod nuevamente.

Para obtener más información sobre el formato de archivo .gjs, consulta la guía oficial:

¿Pide una contraseña?

 *) pfaffman@noreno:~/src/pfaffman/discourse-pfaffmanager$ pnpm dlx https://github.com/discourse/discourse-gjs-codemod
Username for 'https://github.com': pfaffman
Password for 'https://pfaffman@github.com':
/home/pfaffman/.cache/pnpm/dlx/txqdpi2aznswmhsvgh3pgqp3te/1971d72469d-323788:
 ERROR  Command failed with exit code 128: git ls-remote git+ssh://git@github.com/discourse/discourse-gjs-codemod.git HEAD
ERROR: Repository not found.
fatal: Could not read from remote repository.

https://github.com/discourse/discourse-gjs-codemods no funciona. ¿Quizás todavía es privado?

:facepalm:
Tienes razón, era privado. Ya está desbloqueado:

¡Eso marcó una gran diferencia! Sucedieron un montón de cosas.

Me alegro de que no sea el único al que le pasa. :rofl:

Si quieres eliminar estos tres mensajes, nadie se enterará. :slight_smile:

Puedo moverlos a un nuevo tema, pero no eliminarlos. . .

¿Qué tal esto?

                                                                                                                                                           [107/859]
 WARN  Se encontraron problemas con las dependencias entre pares
.
├─┬ ember-auto-import 2.10.0
│ ├─┬ babel-loader 8.4.1
│ │ └── ✕ falta el par webpack@">=2"
│ ├─┬ css-loader 5.2.7
│ │ └── ✕ falta el par webpack@"^4.27.0 || ^5.0.0"
│ ├─┬ style-loader 2.0.0
│ │ └── ✕ falta el par webpack@"^4.0.0 || ^5.0.0"
│ └─┬ mini-css-extract-plugin 2.9.2
│   └── ✕ falta el par webpack@^5.0.0
└─┬ ember-source 5.12.0
  ├── ✕ falta el par @glimmer/component@^1.1.2
  └─┬ ember-auto-import 2.10.0
    └── ✕ falta el par webpack@^5.0.0
Dependencias entre pares que deberían instalarse:
  @glimmer/component@^1.1.2   webpack@">=5.0.0 <6.0.0-0"

…


Hecho en 1.6s usando pnpm v9.15.9
file:///home/pfaffman/.cache/pnpm/dlx/txqdpi2aznswmhsvgh3pgqp3te/1971d8d4970-32e7a4/node_modules/.pnpm/execa@9.6.0/node_modules/execa/lib/return/final-error.js:6
        return new ErrorClass(message, options);
               ^

ExecaError: El comando falló con el código de salida 255: '/home/pfaffman/.cache/pnpm/dlx/txqdpi2aznswmhsvgh3pgqp3te/1971d8d4970-32e7a4/node_modules/.pnpm/@embroider+template-
tag-codemod@1.2.1-unstable.ce3535d_@glimmer+component@2.0.0_handlebars@4._arnanpbg4hbtumvl4wyacggoiu/node_modules/@embroider/template-tag-codemod/dist/src/cli.js' '
--relativeLocalPaths=false' '--nativeRouteTemplates=false' '--nativeLexicalThis=false' '--templateInsertion=end' --addNameToTemplateOnly '--customResolver=/home/pfa
ffman/.cache/pnpm/dlx/txqdpi2aznswmhsvgh3pgqp3te/1971d8d4970-32e7a4/node_modules/.pnpm/discourse-gjs-codemod@https+++codeload.github.com+discourse+discourse-gjs-cod
emod+tar.gz+a4bc_2dxbzd2itovnk6l7sa4geot32y/node_modules/discourse-gjs-codemod/custom-resolver.js' '--renamingRules=/home/pfaffman/.cache/pnpm/dlx/txqdpi2aznswmhsvg
h3pgqp3te/1971d8d4970-32e7a4/node_modules/.pnpm/discourse-gjs-codemod@https+++codeload.github.com+discourse+discourse-gjs-codemod+tar.gz+a4bc_2dxbzd2itovnk6l7sa4geo
t32y/node_modules/discourse-gjs-codemod/rules.js' '--renderTests=test/**/*.js' '--routeTemplates=**/templates/**/*.hbs' '--components=**/components/**/*.hbs'

Pero parece que convirtió todas menos un par de las plantillas, y aunque todavía no entiendo por qué, no me sorprende, ya que tienen algunas cosas raras y estaba en el proceso de reescribirlas de todos modos.

Creo que el mensaje de peerdependency es probablemente solo una advertencia que se puede ignorar para los propósitos del codemod.

No estoy seguro sobre el otro error. ¿Hay algo más útil más arriba en el registro? ¿Es este un tema/plugin público que podrías compartir?

Sí. Creo que todos los errores son espurios. Solo un par de cosas no se convirtieron. No estoy seguro de por qué, pero como dije, de todas formas planeaba reescribirlos.

Creo que fueron una docena o más los que logró reescribir, ¡así que es un milagro absoluto!

Pronto lo probaré con otras cosas que sean públicas.

¡Gracias!

Pequeña pregunta sobre la actualización de los formatos .gps. ¿Hay que hacerlo desde discourse desarrollo o directamente en discourse?

Yo estoy usando discourse docker autoalojado e intenté el comando pero no funciona

pnpm i
pnpm eslint --fix .
pnpm prettier --write “\\/\*.{gjs,js,hbs,scss}”

Debe hacerse en un entorno de desarrollo de Discourse local.

Dependiendo de cuánto tiempo hace que creaste un plugin a partir del esqueleto, es posible que también necesites obtener eslint.config.mjs.

¿Hay alguna forma de hacer esto utilizando la configuración de desarrollo basada en Docker de Install Discourse for development using Docker, es decir, sin instalar pnpm u otras herramientas de node directamente en el equipo anfitrión?

Supongo que tendría que usar d/pnpm en lugar de pnpm, pero ¿cómo le indicaría que actúe sobre mi plugin en lugar del código fuente de discourse? Los tengo en directorios hermanos:

Lo más fácil probablemente sea usar d/shell. Eso te dará una terminal que se ejecuta dentro del contenedor, y podrás seguir las instrucciones de la publicación original.

Así que sería algo como:

d/shell

Luego, una vez que estés dentro del contenedor:

cd plugins/discourse-weekly-newsletter
pnpm dlx @discourse/update-skeleton@latest
pnpm eslint --fix .
pnpm prettier --write "**/*.{gjs,js,hbs,scss}"
pnpm dlx https://github.com/discourse/discourse-gjs-codemod