autoforce 0.1.23 → 0.1.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -8
- package/lib/helpers/context.d.ts +1 -0
- package/lib/helpers/context.js +7 -0
- package/lib/helpers/github-project-graphql.d.ts +1 -0
- package/lib/helpers/github-project-graphql.js +15 -0
- package/lib/helpers/gitlab-graphql.d.ts +1 -0
- package/lib/helpers/gitlab-graphql.js +4 -0
- package/lib/helpers/taskFunctions.js +8 -1
- package/models/dev/npm/tasks/start.json +3 -3
- package/package.json +1 -1
package/README.md
CHANGED
@@ -35,19 +35,32 @@ En cada una de ellas buscamos automatizar o integrar las siguientes gestiones:
|
|
35
35
|
- Calidad de codigo (PMD)
|
36
36
|
- Uso de IA ( OpenAI, )
|
37
37
|
|
38
|
+
## Tipos de Modelos
|
39
|
+
|
40
|
+
Al principio habia pensando en una lista de modelos, ejemplo paquetes de appexchange y otro para proyectos sobre salesforce.
|
41
|
+
|
42
|
+
Pero al final vi que los modelos son combinaciones de acuerdo a las siguientes variables:
|
43
|
+
- Branching strategy: En este sentido, el start y finish van a hacer task distintas, si quiero un gitflow o main
|
44
|
+
- Tipo de desarrollo: Si estoy desarrollando paquetes o usango scratch en el start voy a buscar que me arme un ambiente nuevo
|
45
|
+
- Tipo de Projecto: Si el projecto maneja milestones como releases, cambian o se agregan mas preguntas en algunos steps
|
46
|
+
- Modelo de documentacion: La documentacion estaria muy relacionada con el tipo de desarrollo, pero quedo como una variable aparte por orden.
|
47
|
+
|
48
|
+
|
38
49
|
## Roadmap Status
|
39
50
|
|
40
|
-
1.
|
41
|
-
-
|
51
|
+
1. Implementaciones
|
52
|
+
- "Procesos de Negocio en Clientes de Salesforce": 70%
|
42
53
|
Salesforce: Scratchs con Tracking y deploys usando sf cli
|
43
54
|
Documentacion: Markdowns de Procesos con Github pages
|
44
|
-
Gestion de Proyecto:
|
45
|
-
Source Control: Github
|
55
|
+
Gestion de Proyecto: Project con milestones
|
46
56
|
Branching Strategy: Github workflow
|
47
57
|
|
48
|
-
-
|
58
|
+
- "Desarrollo de Producto": 30%
|
59
|
+
Salesforce: Scratchs con Tracking y deploys con second generation package
|
60
|
+
Documentacion: Markdowns de Procesos con Github pages
|
61
|
+
Gestion de Proyecto: Project con milestones
|
62
|
+
Branching Strategy: Gitflow workflow
|
49
63
|
|
50
|
-
- [Custom] "Modelo personalizado"
|
51
64
|
|
52
65
|
2. Github Services
|
53
66
|
- Github: Listo
|
@@ -72,9 +85,17 @@ En cada una de ellas buscamos automatizar o integrar las siguientes gestiones:
|
|
72
85
|
- Documentation: 0%
|
73
86
|
|
74
87
|
|
88
|
+
## Repositorio de Ejemplo
|
89
|
+
En el siguiente [repositorio](https://github.com/sebastianclaros/autoforce-test) tomamos como ejemplo un proyecto de Salesforce.
|
90
|
+
En la carpeta scripts/test hay una serie de comandos (all.sh), que hace de forma autamtizada lo siguiente:
|
91
|
+
|
92
|
+
* Hace un upgrade de autoforce
|
93
|
+
* Crea un Milestone representando un release nuevo
|
94
|
+
* Crea 3 issues dentro de ese Milestone
|
75
95
|
|
76
96
|
|
77
|
-
##
|
97
|
+
## Uso
|
98
|
+
|
78
99
|
Una vez instalado se puede crear scripts a medida o bien ejecutar
|
79
100
|
|
80
101
|
```
|
@@ -102,7 +123,8 @@ https://github.com/sebastianclaros/autoforce-test
|
|
102
123
|
La guia del readme sirve de ejemplo.
|
103
124
|
|
104
125
|
|
105
|
-
|
126
|
+
|
127
|
+
## Testear una version en forma local
|
106
128
|
|
107
129
|
Para hacer un testeo local se puede generar una version nueva
|
108
130
|
|
package/lib/helpers/context.d.ts
CHANGED
package/lib/helpers/context.js
CHANGED
@@ -90,6 +90,7 @@ class Context {
|
|
90
90
|
devModel; // Default Model de commands
|
91
91
|
gitModel;
|
92
92
|
docModel;
|
93
|
+
errorMessage = '';
|
93
94
|
projectModel;
|
94
95
|
gitServices = GitServices.None;
|
95
96
|
isGitApi = false;
|
@@ -453,6 +454,12 @@ class Context {
|
|
453
454
|
return this.newBranchName;
|
454
455
|
}
|
455
456
|
async askFornewIssueNumber() {
|
457
|
+
if (this.options.issue && this.projectApi) {
|
458
|
+
const issues = await this.projectApi.searchIssues(this.options.issue);
|
459
|
+
if (issues.length === 1) {
|
460
|
+
return `${issues[0].number}`;
|
461
|
+
}
|
462
|
+
}
|
456
463
|
const answer = await prompts([
|
457
464
|
{
|
458
465
|
type: "text",
|
@@ -49,6 +49,7 @@ export declare class GitHubProjectApi extends GitHubApi implements IProjectApi {
|
|
49
49
|
id: string;
|
50
50
|
title: string;
|
51
51
|
}[]>;
|
52
|
+
searchIssues(title: string): Promise<IIssueObject[]>;
|
52
53
|
getIssuesWithFilter(filterBy: string): Promise<{
|
53
54
|
id: string;
|
54
55
|
title: string;
|
@@ -213,6 +213,21 @@ export class GitHubProjectApi extends GitHubApi {
|
|
213
213
|
async getIssues() {
|
214
214
|
return await this.getIssuesWithFilter(`{ states: OPEN }`);
|
215
215
|
}
|
216
|
+
async searchIssues(title) {
|
217
|
+
const query = `query getIssues() {
|
218
|
+
search(query: "repo:${this.repoVar.owner}/${this.repoVar.repo} in:title ${title}", type: ISSUE, first: 10) {
|
219
|
+
nodes {
|
220
|
+
... on Issue {
|
221
|
+
id
|
222
|
+
number
|
223
|
+
title
|
224
|
+
}
|
225
|
+
}
|
226
|
+
}
|
227
|
+
}`;
|
228
|
+
const { search } = await this.graphqlAuth(query, this.repoVar);
|
229
|
+
return search.nodes;
|
230
|
+
}
|
216
231
|
async getIssuesWithFilter(filterBy) {
|
217
232
|
const query = `
|
218
233
|
query getIssues($owner:String!, $repo: String!) {
|
@@ -24,6 +24,7 @@ export declare class GitLabApi implements IGitApi, IProjectApi {
|
|
24
24
|
state: string;
|
25
25
|
url: string;
|
26
26
|
}>;
|
27
|
+
searchIssues(title: string): Promise<IIssueObject[]>;
|
27
28
|
updateMilestone(title: string, state?: string, description?: string, dueOn?: string): Promise<{
|
28
29
|
id: string;
|
29
30
|
title: string;
|
@@ -35,6 +35,10 @@ export class GitLabApi {
|
|
35
35
|
console.log(title, state, description, dueOn);
|
36
36
|
return { id: '', title: '', state: '', url: '' };
|
37
37
|
}
|
38
|
+
async searchIssues(title) {
|
39
|
+
console.log(title);
|
40
|
+
return [];
|
41
|
+
}
|
38
42
|
async updateMilestone(title, state = 'open', description, dueOn) {
|
39
43
|
console.log(title, state, description, dueOn);
|
40
44
|
return { id: '', title: '', state: '', url: '' };
|
@@ -375,14 +375,21 @@ export const taskFunctions = {
|
|
375
375
|
},
|
376
376
|
async validateIssue(issueNumber, states) {
|
377
377
|
if (context.projectApi === undefined) {
|
378
|
+
context.errorMessage = 'context.projectApi esta undefined';
|
378
379
|
return false;
|
379
380
|
}
|
380
381
|
const issue = await context.projectApi.getIssue(issueNumber);
|
381
382
|
if (!issue.state) {
|
383
|
+
context.errorMessage = 'El state del issue es undefined';
|
382
384
|
return false;
|
383
385
|
}
|
384
386
|
const arrayStates = states.toLocaleLowerCase().replace(' ', '').split(',');
|
385
|
-
|
387
|
+
const validate = arrayStates.includes(issue.state.toLocaleLowerCase().replace(' ', ''));
|
388
|
+
if (!validate) {
|
389
|
+
context.errorMessage = `El state del issue es "${issue.state}", mientras deberia ser ${states}`;
|
390
|
+
return false;
|
391
|
+
}
|
392
|
+
return true;
|
386
393
|
},
|
387
394
|
async validaNoseaBranchActual(newBranchName) {
|
388
395
|
return getBranchName() !== newBranchName;
|
@@ -7,9 +7,9 @@
|
|
7
7
|
{
|
8
8
|
"name": "validate issue",
|
9
9
|
"function": "validateIssue",
|
10
|
-
"arguments": ["${newIssueNumber}", "
|
11
|
-
"description": "Valida que Issue este en la Columna
|
12
|
-
"errorMessage": "Por favor verifique que el issue ${newIssueNumber} este en la columna
|
10
|
+
"arguments": ["${newIssueNumber}", "Todo"],
|
11
|
+
"description": "Valida que Issue este en la Columna Todo",
|
12
|
+
"errorMessage": "Por favor verifique que el issue ${newIssueNumber} este en la columna Todo. \n ${errorMessage}"
|
13
13
|
},
|
14
14
|
{
|
15
15
|
"name": "check Issue type based on Labels",
|