autoforce
Version:
Developer Automation tool for Github / Gitlab and Salesforce projects.
140 lines (91 loc) • 4.99 kB
Markdown
# Autoforce
El proyecto esta todavia en Beta todavia, pero la idea es que pueda estar productivo para algunos proyectos pronto.
## Objetivo
Hace un tiempo estabamos armando un repo para hacer practicas sobre Salesforce. Y empezamos a crear unos scripts para crear una instancia y subir el codigo. La idea fue evolucionando, y los scripts se fueron complejizando. Tambien surgieron limitaciones, si algo fallaba se quedaba por la mitad, los que tenian windows algunas cosas no funcionaban, y termine moviendo la idea a una herramienta.
El objetivo termino siendo facilitar y automatizar las tareas comunes que realizamos los desarrolladores. Si bien empece con Salesforce, la idea es generalizarla para que soporte distintos modelos, de hecho uno es para este mismo proyecto :)
## Orden en un Repositorio
Soy muy ansioso, y muchas veces queria hacer varios cambios juntos, el famoso ya que estoy aca tocando, o se me ocurrio algo. Pero despues es dificil de seguir, o se hacen mas largas las code reviews, etc.
Asi que el primer objetivo fue organizar el proyecto, si tengo una idea la guardo enseguida (new). Y si quiero arrancar algo, puedo empezar por ver las proximas stories (list).
## Tareas repetitivas
El segundo objetivo fue que pueda arrancar el desarrollo y arme el entorno, cree una branch y suba datos de prueba (start). Y por otro lado, cuando termine ese desarrollo,que baje los cambios en la scratch, documente, y valide la calidad del codigo(finish).
Basicamente las tareas comunes que identificamos fueron:
1. start
2. finish
3. stop
4. cancel
En cada una de ellas buscamos automatizar o integrar las siguientes gestiones:
- Branching Strategy en Git (Github o Gitlab)
- Armado de ambiente de desarrollo (Salesforce)
- Gestion de proyecto (Github projects, Gitlab projects o Jira).
- Documentacion (Github pages o GitLab pages. Version mejorada con docusaurus)
- Calidad de codigo (PMD)
- Uso de IA ( OpenAI, )
## Tipos de Modelos
Al principio habia pensando en una lista de modelos, ejemplo paquetes de appexchange y otro para proyectos sobre salesforce.
Pero al final vi que los modelos son combinaciones de acuerdo a las siguientes variables:
- Branching strategy: En este sentido, el start y finish van a hacer task distintas, si quiero un gitflow o main
- Tipo de desarrollo: Si estoy desarrollando paquetes o usango scratch en el start voy a buscar que me arme un ambiente nuevo
- Tipo de Projecto: Si el projecto maneja milestones como releases, cambian o se agregan mas preguntas en algunos steps
- Modelo de documentacion: La documentacion estaria muy relacionada con el tipo de desarrollo, pero quedo como una variable aparte por orden.
## Roadmap Status
1. Implementaciones
- "Procesos de Negocio en Clientes de Salesforce": 70%
Salesforce: Scratchs con Tracking y deploys usando sf cli
Documentacion: Markdowns de Procesos con Github pages
Gestion de Proyecto: Project con milestones
Branching Strategy: Github workflow
- "Desarrollo de Producto": 30%
Salesforce: Scratchs con Tracking y deploys con second generation package
Documentacion: Markdowns de Procesos con Github pages
Gestion de Proyecto: Project con milestones
Branching Strategy: Gitflow workflow
2. Github Services
- Github: Listo
- Gitlab: 20%
- Bitbucket: 0%
3. Project Services
- Github: Listo
- Gitlab: 0%
- Jira: 0%
4. Documentation Services
- Object: 90%
- Classes: 80%
- LWC: 10%
5. IA
- Code creation: 0%
- Test classes: 0%
- Commit Messages: 0%
- Code Reviewer: 0%
- Documentation: 0%
## Repositorio de Ejemplo
En el siguiente [repositorio](https://github.com/sebastianclaros/autoforce-test) tomamos como ejemplo un proyecto de Salesforce.
En la carpeta scripts/test hay una serie de comandos (all.sh), que hace de forma autamtizada lo siguiente:
* Hace un upgrade de autoforce
* Crea un Milestone representando un release nuevo
* Crea 3 issues dentro de ese Milestone
## Uso
Una vez instalado se puede crear scripts a medida o bien ejecutar
```
npx autoforce <<comando>>
```
Los comandos son
* help
* version
* config
* task <<taskname>> <<opciones>>
* subtask <<subtaskname>> <<opciones>>
* new <<template>>
Si no se ingresa ningun comando asume que es task
Y si no se ingresan parametros, tiene un modo asistido que los va a ir preguntando. Por ejemplo para el comando new, dara una lista de opciones de acuerdo a los templates.
Hay un proyecto de test para analizar y probar la herramienta.
https://github.com/sebastianclaros/autoforce-test
La guia del readme sirve de ejemplo.
## Testear una version en forma local
Para hacer un testeo local se puede generar una version nueva. Esto pide un nro de version arma el package en root como autoforce-latest.tgz
```
yarn pack
```
Despues en el repositorio local autoforce-test, hay un script que lo instala.
```
./scripts/test/upgrade-local.sh
```