La Guía del Desarrollador Perezoso: ¿Cómo Automatizar las Actualizaciones de Código?

Rate this content
Bookmark

¿Cómo actualizar cientos de proyectos de una vez? Con el rápido crecimiento de las organizaciones, la demanda de escalabilidad de los equipos crece, lo que afecta directamente la estructura y propiedad de los proyectos. El dilema habitual es mono vs. multi-repos, pero... ¿Y si te digo que no importa mucho? Ambos enfoques pueden golpearte en algún momento, así que tal vez es mejor pensar de abajo hacia arriba.


Hoy te guiaré a través de algunos de los mayores desafíos que existen en ambos enfoques, como la gestión de dependencias en cientos de proyectos, las actualizaciones globales de código y muchas otras cosas. También te mostraré ejemplos de cómo resolvimos esto dentro de Infobip mediante la construcción de nuestras propias bibliotecas internas.

This talk has been presented at DevOps.js Conf 2022, check out the latest edition of this JavaScript Conference.

FAQ

Ante es un ingeniero de software senior que ha trabajado en Neo4j durante casi 6 años, enfocado en la infraestructura. Además, es un orador frecuente en meetups y tiene intereses en React, Webpack, construcción y optimización de aplicaciones, rendimiento y arquitectura web, entre otros.

Ante habla sobre la automatización de código, cómo manejar tareas repetitivas en el trabajo y cómo implementar estas automatizaciones en Neo4j.

Ante menciona varias herramientas como ESLint, React, oclf, edit json file, replace-in file, stemware para versionado semántico, y shelljs para ejecutar comandos Unix en diferentes entornos.

Ante cree que la automatización es crucial en el desarrollo de software, destacando que es importante elegir las batallas sabiamente para trabajar de manera inteligente además de trabajar duro. Él enfatiza que la automatización ayuda a manejar tareas repetitivas eficientemente y permite a los desarrolladores centrarse en tareas más significativas.

Ante describe varios ejemplos de automatización como la actualización automática de eslint y React, utilizando herramientas como shelljs para ejecutar comandos y gestionar dependencias, y cómo estas prácticas pueden aplicarse en múltiples proyectos para mejorar la eficiencia y reducir errores.

Ante destaca que la automatización ahorra tiempo, reduce errores y permite a los equipos de desarrollo centrarse en innovaciones y mejoras en lugar de repetir tareas tediosas. Esto mejora la productividad y permite gestionar múltiples proyectos de manera más efectiva.

Ante considera que el momento adecuado para automatizar depende del impacto que la automatización tendrá en el proceso. Si una tarea se realiza repetitivamente y puede ser automatizada, entonces es un buen candidato, especialmente si la automatización puede reducir el tiempo y los errores involucrados.

Ante Tomić
Ante Tomić
22 min
25 Mar, 2022

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Las automatizaciones de código pueden ahorrar tiempo y esfuerzo en las tareas de desarrollo. Hay herramientas y ejemplos disponibles para automatizar tareas como la actualización de dependencias y el formato de código. La automatización permite que los equipos se centren en trabajos valiosos y mejora el rendimiento general. Decidir cuándo automatizar depende del impacto y tipo de código. La última tarea automatizada discutida fue la aplicación de actualizaciones de traducción a múltiples proyectos.

1. Introducción a las automatizaciones de código

Short description:

Hola a todos y les envío un gran saludo desde Croacia. Hoy hablaré sobre las automatizaciones de código y cómo las implementamos en Neo4j. Trabajar de manera inteligente y elegir las batallas sabiamente son clave en el desarrollo. Pensar es una herramienta poderosa, pero debemos evitar pensar demasiado. Vamos a ver ejemplos de código y explorar las dependencias en el archivo package.json.

Hola a todos y les envío un gran, gran, gran saludo desde Croacia. Mi nombre es Ante y hoy voy a hablarles sobre temas muy interesantes que son las automatizaciones de código y cómo las implementamos en Neo4j. Espero que disfruten de mi sesión, así que comencemos. Hola, soy Ante y tengo 28 años. Soy ingeniero de software senior que trabaja en Neo4j desde hace casi 6 años y me enfoco en la infraestructura. También soy un orador frecuente en meetups y tengo muchos intereses como React, Webpack, Construcción de Aplicaciones, Optimización de Aplicaciones, Rendimiento, Arquitectura Web, Automatización y Experiencia. Y saben, todos los que me conocen les dirían que soy un gran aficionado a la fotografía y amo la fotografía, soy un fotógrafo feliz. Así que si están interesados, no duden en visitar mi blog de fotografía en Instagram, pero comencemos con una pregunta, ¿cómo manejan las tareas repetitivas en el trabajo? Esto es algo que me gustaría que respondieran en la encuesta, así que veamos, tal vez estamos haciendo copiar, pegar y luego repetir, repetir y repetir lo mismo, o por ejemplo, contamos 20 proyectos y luego cambiamos lo mismo en todos ellos. Bueno, tenemos muchas tareas repetitivas y esto puede llevarnos mucho tiempo, especialmente cuando tenemos 50 o más proyectos, y podemos ver como en esta línea azul que podemos hacer esto manualmente, ya saben, y también podemos ver este rojo que es en realidad lo que quiero explorar en esta sesión, ya que también está relacionado con el concepto de automatización, que es extremadamente importante, y me gustaría comenzar con una cita y eso es que siempre elegiré a una persona perezosa para hacer un trabajo difícil porque una persona perezosa encontrará una manera fácil de hacerlo y veamos cómo esto se aplica en realidad. Lo primero es lo primero, no está relacionado con que debamos ser perezosos para aprender. No, la programación es una habilidad que lleva horas y horas perfeccionar y definitivamente debemos trabajar duro para convertirnos en mejores desarrolladores y ampliar nuestros conocimientos. Y entonces, ¿de qué demonios estoy hablando? Bueno, necesitamos ser capaces de elegir nuestras batallas sabiamente porque trabajar duro es tan importante como trabajar de manera inteligente. Y en el desarrollo, las misiones son clave para lograr todo esto y vamos a comprobarlo con algunos ejemplos. Pero también necesitas mencionar el pensamiento. Obviamente, es la parte más difícil del desarrollo, ¿verdad? Especialmente cuando tienes que nombrarlas. Pero el pensamiento es en realidad una herramienta muy poderosa para las misiones porque nos ayuda a producir ideas y soluciones y también nos ayuda a buscar activamente desafíos y mejoras. ¡Pero espera! Tenemos que tener cuidado de no pensar demasiado, porque nuestro tiempo es valioso y no deberíamos perder demasiado tiempo en complicaciones, ya que dificultará el soporte y la actualización del código en el futuro. Tal vez podamos tener buenas intenciones, pero nuestro código puede ser demasiado complejo de entender. Y esto es algo que comprobaremos en los ejemplos de código. Pueden ver el código QR y el enlace del repositorio aquí para que puedan seguir conmigo o pueden revisar el repositorio más tarde. Bueno, entonces vamos a ello. Lo que quiero mostrarles es este archivo package.json. Este es mi proyecto para el proyecto ficticio o ejemplo uno para las ecuaciones médicas y quiero llamar su atención sobre estas dependencias. Lo que tengo en las dependencias es una herramienta CLI llamada oclf. Ahora es su preferencia lo que elijan. Yo simplemente elegí oclf porque es fácil de integrar y configura muchas cosas de inmediato. Así que me ayuda y ofrece muchas posibilidades e integraciones. Pero saben que tienen más opciones como commander o yars y, por supuesto, también tienen oclf si lo desean. Pero lo que también pueden ver son algunas otras dependencias. Tienen algunas menores, tal vez menos conocidas, como edit json file o replace-in file, que pueden buscar y usar según su necesidad.

2. Herramientas, Ejemplos y Actualización de Dependencias

Short description:

Tienes herramientas populares como stemware para el versionado semántico, shelljs para ejecutar comandos unix en cualquier entorno, y ejemplos de comandos eslint-update y actualización de dependencias. El comando de actualización de eslint tiene cuatro partes: filtro, clonar el proyecto, verificar migraciones y ejecutar la migración principal. El comando de migración principal está escrito en index.js y se instalan dependencias adicionales. El siguiente paso es discutir la actualización de dependencias.

Y tienes más herramientas populares como stemware que se utiliza para el versionado semántico. Puede ayudarte a verificar qué versión tienes y si coincide con la versión que necesitas y yada yada yada. Luego tenemos shelljs, que es una biblioteca similar a Unix que te ofrece la opción de ejecutar comandos Unix en cualquier entorno, como Windows, macOS, Linux u otros. Y algunos de ustedes seguramente están familiarizados con uh, simplemente usan ships para hacer actualizaciones y, por supuesto, también se puede usar. Pero me gustaría hablar de dos ejemplos que voy a mostrarles. El primero es el comando eslint-update, donde simplemente vamos a verificar si tenemos eslint link fix, que también pueden ver en los paquetes a la derecha, y si verifican los scripts aquí, verán que no lo tenemos. Así que agregaremos link fix para la actualización automática. El segundo comando es la actualización de dependencias, donde simplemente verificaremos si tenemos react 16 y si lo tenemos, simplemente actualizaremos la versión a react 17. Ok, vamos a verificar, así que tengo eslint comandos de actualización con cuatro partes, la primera es el filtro donde generalmente en gi I usamos big packet api para descargar el archivo package json para que podamos hacer algunas verificaciones rápidas. Como pueden ver aquí en el filtro, usamos el archivo package.json para cada paquete.json descargado para el proyecto para verificar si tenemos eslint, por supuesto, tenemos eslint, así que si ejecuto el comando que tienen aquí en el ejemplo, que también puede ayudarte verán que obtendré un resultado de azure, lo que significa que mi migración se ejecutará. Así que ese es el primer paso hecho. El segundo paso es clonar el proyecto. Cada proyecto para el cual ejecutamos el filtro y devuelve verdadero se clonará y luego, antes de ejecutar la migración dentro de indexts primero verifico estas migraciones y este es un filtro ampliado donde gracias a package package, ya saben, gracias a todo el proyecto clonado, puedo verificar absolutamente cualquier cosa que quiera. No sé, por razones de simplicidad, estoy verificando package.json aquí para simplemente ver si tengo el comando linpicks y como no tengo el comando linpicks, aquí pueden ver que devolverá verdadero. Entonces, si ejecuto mi comando de migración, devolverá verdadero y luego podré ejecutar la migración principal o al menos se ejecutará en el trabajo de TI. Entonces, voy a index.js y puedo ver mi comando de migración principal. Pero está escrito aquí como pueden ver aquí hay dependencias adicionales que generalmente se instalan. Aquí es donde principalmente las usarás. Entonces, dentro de tu trabajo de migración. Y aquí estoy usando el archivo JSON. Como pueden ver aquí en el comando de migración donde primero obtengo mi ruta al proyecto, luego he agregado un archivo JSON y dentro de mi paso de lintfix donde simplemente también verifico si ya tengo el comando lintfix. Y si no tengo el comando lintfix, entonces lo agrego a un archivo JSON y también se guardará automáticamente. Y nuevamente, vamos a verificar el ejemplo de código aquí. Así que lo copiaré y lo ejecutaré el comando run eslintupgrade. Y verán aquí que ahora lintfix ha aparecido y tengo cambios en mi proyecto de GitHub. Así que, voilà, sé que está funcionando. El segundo paso que quiero mostrarles es la actualización de dependencias. Pero antes de pasar a la actualización de dependencias, quiero mencionar brevemente las opciones de migración que no las obtendré, pero puedes usarlas para obtener las opciones e información que necesites para la ejecución automática del trabajo o incluso para solicitudes de extracción y eso. Entonces aquí puedes pasar, puedes recuperar, puedes calcular cualquier información que necesites para tu entorno de TI. Pero lo que me gustaría hacer es pasar a la actualización de dependencias.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Elevando Monorepos con los Espacios de Trabajo de npm
DevOps.js Conf 2022DevOps.js Conf 2022
33 min
Elevando Monorepos con los Espacios de Trabajo de npm
Top Content
NPM workspaces help manage multiple nested packages within a single top-level package, improving since the release of NPM CLI 7.0. You can easily add dependencies to workspaces and handle duplications. Running scripts and orchestration in a monorepo is made easier with NPM workspaces. The npm pkg command is useful for setting and retrieving keys and values from package.json files. NPM workspaces offer benefits compared to Lerna and future plans include better workspace linking and adding missing features.
Automatizando Todo el Código y las Pruebas con GitHub Actions
React Advanced 2021React Advanced 2021
19 min
Automatizando Todo el Código y las Pruebas con GitHub Actions
Top Content
We will learn how to automate code and testing with GitHub Actions, including linting, formatting, testing, and deployments. Automating deployments with scripts and Git hooks can help avoid mistakes. Popular CI-CD frameworks like Jenkins offer powerful orchestration but can be challenging to work with. GitHub Actions are flexible and approachable, allowing for environment setup, testing, deployment, and custom actions. A custom AppleTools Eyes GitHub action simplifies visual testing. Other examples include automating content reminders for sharing old content and tutorials.
Ajustando DevOps para las Personas sobre la Perfección
DevOps.js Conf 2022DevOps.js Conf 2022
33 min
Ajustando DevOps para las Personas sobre la Perfección
Top Content
DevOps is a journey that varies for each company, and remote work makes transformation challenging. Pull requests can be frustrating and slow, but success stories like Mateo Colia's company show the benefits of deploying every day. Challenges with tools and vulnerabilities require careful consideration and prioritization. Investing in documentation and people is important for efficient workflows and team growth. Trust is more important than excessive control when deploying to production.
¿Por qué es tan lento el CI?
DevOps.js Conf 2022DevOps.js Conf 2022
27 min
¿Por qué es tan lento el CI?
Slow CI has a negative impact on productivity and finances. Debugging CI workflows and tool slowness is even worse. Dependencies impact CI and waiting for NPM or YARN is frustrating. The ideal CI job involves native programs for static jobs and lightweight environments for dynamic jobs. Improving formatter performance and linting is a priority. Performance optimization and fast tools are essential for CI and developers using slower hardware.
La filosofía de Yarn
DevOps.js Conf 2022DevOps.js Conf 2022
31 min
La filosofía de Yarn
Let's talk about React and TypeScript, Yarn's philosophy and long-term relevance, stability and error handling in Yarn, Yarn's behavior and open source sustainability, investing in maintenance and future contributors, contributing to the JavaScript ecosystem, open-source contribution experience, maintaining naming consistency in large projects, version consistency and strictness in Yarn, and Yarn 4 experiments for performance improvement.
Despliegue Atómico para Hipsters de JavaScript
DevOps.js Conf 2024DevOps.js Conf 2024
25 min
Despliegue Atómico para Hipsters de JavaScript
This Talk discusses atomic deployment for JavaScript and TypeScript, focusing on automated deployment processes, Git hooks, and using hard links to copy changes. The speaker demonstrates setting up a bare repository, configuring deployment variables, and using the post-receive hook to push changes to production. They also cover environment setup, branch configuration, and the build process. The Talk concludes with tips on real use cases, webhooks, and wrapping the deployment process.

Workshops on related topic

Despliegue de aplicaciones React Native en la nube
React Summit 2023React Summit 2023
88 min
Despliegue de aplicaciones React Native en la nube
WorkshopFree
Cecelia Martinez
Cecelia Martinez
Desplegar aplicaciones React Native manualmente en una máquina local puede ser complejo. Las diferencias entre Android e iOS requieren que los desarrolladores utilicen herramientas y procesos específicos para cada plataforma, incluidos los requisitos de hardware para iOS. Los despliegues manuales también dificultan la gestión de las credenciales de firma, las configuraciones de entorno, el seguimiento de las versiones y la colaboración en equipo.
Appflow es la plataforma de DevOps móvil en la nube creada por Ionic. Utilizar un servicio como Appflow para construir aplicaciones React Native no solo proporciona acceso a potentes recursos informáticos, sino que también simplifica el proceso de despliegue al proporcionar un entorno centralizado para gestionar y distribuir tu aplicación en múltiples plataformas. Esto puede ahorrar tiempo y recursos, permitir la colaboración, así como mejorar la confiabilidad y escalabilidad general de una aplicación.
En este masterclass, desplegarás una aplicación React Native para su entrega en dispositivos de prueba Android e iOS utilizando Appflow. También aprenderás los pasos para publicar en Google Play y Apple App Stores. No se requiere experiencia previa en el despliegue de aplicaciones nativas, y obtendrás una comprensión más profunda del proceso de despliegue móvil y las mejores prácticas para utilizar una plataforma de DevOps móvil en la nube para enviar rápidamente a gran escala.
Despliegue de Aplicación MERN Stack en Kubernetes
DevOps.js Conf 2022DevOps.js Conf 2022
152 min
Despliegue de Aplicación MERN Stack en Kubernetes
Workshop
Joel Lord
Joel Lord
Desplegar y gestionar aplicaciones JavaScript en Kubernetes puede volverse complicado. Especialmente cuando una base de datos también debe formar parte del despliegue. MongoDB Atlas ha facilitado mucho la vida de los desarrolladores, sin embargo, ¿cómo se integra un producto SaaS con su clúster de Kubernetes existente? Aquí es donde entra en juego el Operador de MongoDB Atlas. En este masterclass, los asistentes aprenderán cómo crear una aplicación MERN (MongoDB, Express, React, Node.js) localmente y cómo desplegar todo en un clúster de Kubernetes con el Operador de Atlas.
Pruebas automatizadas de accesibilidad con jest-axe y Lighthouse CI
TestJS Summit 2021TestJS Summit 2021
85 min
Pruebas automatizadas de accesibilidad con jest-axe y Lighthouse CI
Workshop
Bonnie Schulkin
Bonnie Schulkin
¿Incluyen tus pruebas automatizadas verificaciones de accesibilidad? Este masterclass cubrirá cómo comenzar con jest-axe para detectar violaciones de accesibilidad basadas en código, y Lighthouse CI para validar la accesibilidad de las páginas completamente renderizadas. Ninguna cantidad de pruebas automatizadas puede reemplazar las pruebas manuales de accesibilidad, pero estas verificaciones se asegurarán de que tus probadores manuales no estén haciendo más trabajo del necesario.
Azure Static Web Apps (SWA) con Azure DevOps
DevOps.js Conf 2022DevOps.js Conf 2022
13 min
Azure Static Web Apps (SWA) con Azure DevOps
WorkshopFree
Juarez Barbosa Junior
Juarez Barbosa Junior
Las Azure Static Web Apps se lanzaron a principios de 2021 y, de forma predeterminada, pueden integrar su repositorio existente y implementar su aplicación web estática desde Azure DevOps. Este masterclass demuestra cómo publicar una Azure Static Web App con Azure DevOps.
Cómo desarrollar, construir e implementar microservicios Node.js con Pulumi y Azure DevOps
DevOps.js Conf 2022DevOps.js Conf 2022
163 min
Cómo desarrollar, construir e implementar microservicios Node.js con Pulumi y Azure DevOps
Workshop
Alex Korzhikov
Andrew Reddikh
2 authors
El masterclass ofrece una perspectiva práctica de los principios clave necesarios para desarrollar, construir y mantener un conjunto de microservicios en el stack Node.js. Cubre los detalles específicos de la creación de servicios TypeScript aislados utilizando el enfoque de monorepo con lerna y yarn workspaces. El masterclass incluye una descripción general y un ejercicio en vivo para crear un entorno en la nube con el framework Pulumi y los servicios de Azure. Las sesiones están dirigidas a los mejores desarrolladores que deseen aprender y practicar técnicas de construcción e implementación utilizando el stack Azure y Pulumi para Node.js.