pypeline 1.0.0
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 +448 -0
- package/lib/commands/pypeline/build.d.ts +18 -0
- package/lib/commands/pypeline/build.js +86 -0
- package/lib/commands/pypeline/build.js.map +1 -0
- package/lib/commands/pypeline/deploy/training.d.ts +15 -0
- package/lib/commands/pypeline/deploy/training.js +62 -0
- package/lib/commands/pypeline/deploy/training.js.map +1 -0
- package/lib/commands/pypeline/package.d.ts +11 -0
- package/lib/commands/pypeline/package.js +27 -0
- package/lib/commands/pypeline/package.js.map +1 -0
- package/lib/commands/pypeline/prd.d.ts +16 -0
- package/lib/commands/pypeline/prd.js +78 -0
- package/lib/commands/pypeline/prd.js.map +1 -0
- package/lib/commands/pypeline/quickdeploy.d.ts +18 -0
- package/lib/commands/pypeline/quickdeploy.js +116 -0
- package/lib/commands/pypeline/quickdeploy.js.map +1 -0
- package/lib/commands/pypeline/run.d.ts +19 -0
- package/lib/commands/pypeline/run.js +161 -0
- package/lib/commands/pypeline/run.js.map +1 -0
- package/lib/commands/pypeline/training.d.ts +15 -0
- package/lib/commands/pypeline/training.js +67 -0
- package/lib/commands/pypeline/training.js.map +1 -0
- package/lib/commands/pypeline/validate/prd.d.ts +16 -0
- package/lib/commands/pypeline/validate/prd.js +78 -0
- package/lib/commands/pypeline/validate/prd.js.map +1 -0
- package/lib/config.d.ts +23 -0
- package/lib/config.js +72 -0
- package/lib/config.js.map +1 -0
- package/lib/fileUtils.d.ts +2 -0
- package/lib/fileUtils.js +78 -0
- package/lib/fileUtils.js.map +1 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -0
- package/messages/pypeline.build.md +16 -0
- package/messages/pypeline.deploy.training.md +15 -0
- package/messages/pypeline.package.md +8 -0
- package/messages/pypeline.quickdeploy.md +22 -0
- package/messages/pypeline.run.md +26 -0
- package/messages/pypeline.validate.prd.md +15 -0
- package/oclif.lock +7808 -0
- package/oclif.manifest.json +544 -0
- package/package.json +163 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prd.js","sourceRoot":"","sources":["../../../../src/commands/pypeline/validate/prd.ts"],"names":[],"mappings":"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"}
|
package/lib/config.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare const PROJECT_DIR: () => string;
|
|
2
|
+
export declare const LOCAL_DIR: () => string;
|
|
3
|
+
export declare const SCRIPT_DIR: string;
|
|
4
|
+
export declare const PROJECT_NAME = "build_deploy";
|
|
5
|
+
export declare const BRANCH: string;
|
|
6
|
+
export declare const BUILD_DIR: () => string;
|
|
7
|
+
export declare const SOURCE_DIR: () => string;
|
|
8
|
+
export declare const BASELINE_FILE: () => string;
|
|
9
|
+
export declare const JOB_ID_FILE: () => string;
|
|
10
|
+
export declare const LOG_PRD: () => string;
|
|
11
|
+
export declare const LOG_TRAINING: () => string;
|
|
12
|
+
export declare const LOG_QUICK_DEPLOY: () => string;
|
|
13
|
+
export declare function readFileTrimmed(filePath: string): string;
|
|
14
|
+
export declare function writeFile(filePath: string, content: string): void;
|
|
15
|
+
export declare function fileExists(filePath: string): boolean;
|
|
16
|
+
export declare function unlinkIfExists(filePath: string): void;
|
|
17
|
+
export type GitDiff = {
|
|
18
|
+
added: string[];
|
|
19
|
+
modified: string[];
|
|
20
|
+
deleted: string[];
|
|
21
|
+
notDeleted: string[];
|
|
22
|
+
};
|
|
23
|
+
export declare function gitDiffFiles(commitHash: string): GitDiff;
|
package/lib/config.js
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { execSync } from 'node:child_process';
|
|
2
|
+
import * as fs from 'node:fs';
|
|
3
|
+
import * as path from 'node:path';
|
|
4
|
+
// ── Resolução de caminhos em runtime ──────────────────────────────────────
|
|
5
|
+
//
|
|
6
|
+
// IMPORTANTE: todos os caminhos são resolvidos a partir de process.cwd()
|
|
7
|
+
// (o diretório onde o usuário executa o comando sf), NÃO a partir do
|
|
8
|
+
// diretório de instalação do plugin.
|
|
9
|
+
//
|
|
10
|
+
// Isso permite que o plugin seja publicado no npm e instalado em qualquer
|
|
11
|
+
// máquina sem depender de uma estrutura de pastas específica como
|
|
12
|
+
// 'workspace_bash'. O usuário simplesmente executa o comando dentro do
|
|
13
|
+
// diretório do seu projeto git Salesforce.
|
|
14
|
+
// Nome do repositório local Salesforce (pasta irmã do cwd ou configurável)
|
|
15
|
+
const SF_REPO_NAME = process.env['PYPELINE_SF_REPO'] ?? 'sforce-sfdc-bvsa-organization';
|
|
16
|
+
// Diretório de trabalho do usuário no momento da execução
|
|
17
|
+
export const PROJECT_DIR = () => process.cwd();
|
|
18
|
+
export const LOCAL_DIR = () => path.join(process.cwd(), SF_REPO_NAME);
|
|
19
|
+
export const SCRIPT_DIR = path.dirname(new URL(import.meta.url).pathname);
|
|
20
|
+
// ── Nomes e pastas ─────────────────────────────────────────────────────────
|
|
21
|
+
export const PROJECT_NAME = 'build_deploy';
|
|
22
|
+
export const BRANCH = process.env['PYPELINE_BRANCH'] ?? 'release-v4.0.0';
|
|
23
|
+
export const BUILD_DIR = () => path.join(process.cwd(), PROJECT_NAME);
|
|
24
|
+
export const SOURCE_DIR = () => path.join(BUILD_DIR(), 'force-app', 'main', 'default');
|
|
25
|
+
// ── Arquivos de estado ─────────────────────────────────────────────────────
|
|
26
|
+
export const BASELINE_FILE = () => path.join(process.cwd(), 'baseline.txt');
|
|
27
|
+
export const JOB_ID_FILE = () => path.join(process.cwd(), 'prd_job_id.txt');
|
|
28
|
+
// ── Logs ───────────────────────────────────────────────────────────────────
|
|
29
|
+
export const LOG_PRD = () => path.join(process.cwd(), 'deploy_prd_output.log');
|
|
30
|
+
export const LOG_TRAINING = () => path.join(process.cwd(), 'deploy_training_output.log');
|
|
31
|
+
export const LOG_QUICK_DEPLOY = () => path.join(process.cwd(), 'quick_deploy_prd_output.log');
|
|
32
|
+
// ── Utilitários de arquivo ─────────────────────────────────────────────────
|
|
33
|
+
export function readFileTrimmed(filePath) {
|
|
34
|
+
return fs.readFileSync(filePath, 'utf8').trim();
|
|
35
|
+
}
|
|
36
|
+
export function writeFile(filePath, content) {
|
|
37
|
+
fs.writeFileSync(filePath, content, 'utf8');
|
|
38
|
+
}
|
|
39
|
+
export function fileExists(filePath) {
|
|
40
|
+
return fs.existsSync(filePath);
|
|
41
|
+
}
|
|
42
|
+
export function unlinkIfExists(filePath) {
|
|
43
|
+
try {
|
|
44
|
+
fs.unlinkSync(filePath);
|
|
45
|
+
}
|
|
46
|
+
catch { /* noop */ }
|
|
47
|
+
}
|
|
48
|
+
export function gitDiffFiles(commitHash) {
|
|
49
|
+
const output = execSync(`git diff --name-status ${commitHash} HEAD`, { encoding: 'utf8' });
|
|
50
|
+
const added = [];
|
|
51
|
+
const modified = [];
|
|
52
|
+
const deleted = [];
|
|
53
|
+
const notDeleted = [];
|
|
54
|
+
for (const line of output.split('\n')) {
|
|
55
|
+
if (!line.trim())
|
|
56
|
+
continue;
|
|
57
|
+
const [status, ...parts] = line.split('\t');
|
|
58
|
+
const filepath = parts[parts.length - 1];
|
|
59
|
+
if (status.startsWith('D')) {
|
|
60
|
+
deleted.push(filepath);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
notDeleted.push(filepath);
|
|
64
|
+
if (status.startsWith('A'))
|
|
65
|
+
added.push(filepath);
|
|
66
|
+
else if (status.startsWith('M'))
|
|
67
|
+
modified.push(filepath);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return { added, modified, deleted, notDeleted };
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/lib/fileUtils.js
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import { LOCAL_DIR } from './config.js';
|
|
4
|
+
const SPECIAL_CHARS = {
|
|
5
|
+
'\\\\303\\\\247': 'ç',
|
|
6
|
+
'\\\\303\\\\272': 'ú',
|
|
7
|
+
'\\\\303\\\\243': 'ã',
|
|
8
|
+
'\\\\303\\\\255': 'í',
|
|
9
|
+
'\\\\303\\\\241': 'á',
|
|
10
|
+
'\\\\303\\\\264': 'ô',
|
|
11
|
+
'\\\\303\\\\263': 'ó',
|
|
12
|
+
'\\\\303\\\\251': 'é',
|
|
13
|
+
'\\\\303\\\\265': 'õ',
|
|
14
|
+
};
|
|
15
|
+
function replaceSpecialChars(input) {
|
|
16
|
+
let result = input;
|
|
17
|
+
for (const [escaped, char] of Object.entries(SPECIAL_CHARS)) {
|
|
18
|
+
result = result.replace(new RegExp(escaped, 'g'), char);
|
|
19
|
+
}
|
|
20
|
+
return result;
|
|
21
|
+
}
|
|
22
|
+
export function cleanFilename(input) {
|
|
23
|
+
return replaceSpecialChars(input).replace(/^"|"$/g, '');
|
|
24
|
+
}
|
|
25
|
+
function copyRecursive(src, dst) {
|
|
26
|
+
fs.cpSync(src, dst, { recursive: true, force: true });
|
|
27
|
+
}
|
|
28
|
+
function ensureDir(dirPath) {
|
|
29
|
+
fs.mkdirSync(dirPath, { recursive: true });
|
|
30
|
+
}
|
|
31
|
+
function copyClassMeta(cleanedFile, buildDir) {
|
|
32
|
+
const localDir = LOCAL_DIR();
|
|
33
|
+
const src = path.join(localDir, cleanedFile);
|
|
34
|
+
const dst = path.join(buildDir, cleanedFile);
|
|
35
|
+
ensureDir(path.dirname(dst));
|
|
36
|
+
fs.copyFileSync(src, dst);
|
|
37
|
+
const meta = cleanedFile + '-meta.xml';
|
|
38
|
+
fs.copyFileSync(path.join(localDir, meta), path.join(buildDir, meta));
|
|
39
|
+
}
|
|
40
|
+
function copyExtensionFilePath(file, buildDir) {
|
|
41
|
+
const localDir = LOCAL_DIR();
|
|
42
|
+
const p = path.parse(file);
|
|
43
|
+
const upFile = path.dirname(p.dir);
|
|
44
|
+
const destino = path.dirname(upFile);
|
|
45
|
+
ensureDir(path.join(buildDir, destino));
|
|
46
|
+
copyRecursive(path.join(localDir, upFile), path.join(buildDir, upFile));
|
|
47
|
+
const metaName = `${path.basename(upFile)}.site-meta.xml`;
|
|
48
|
+
const metaSrc = path.join(localDir, destino, metaName);
|
|
49
|
+
if (fs.existsSync(metaSrc)) {
|
|
50
|
+
fs.copyFileSync(metaSrc, path.join(buildDir, destino, metaName));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function copyComponentsPath(file, buildDir) {
|
|
54
|
+
const localDir = LOCAL_DIR();
|
|
55
|
+
const dirFile = path.dirname(file);
|
|
56
|
+
const upFile = path.dirname(dirFile);
|
|
57
|
+
ensureDir(path.join(buildDir, upFile));
|
|
58
|
+
copyRecursive(path.join(localDir, dirFile), path.join(buildDir, dirFile));
|
|
59
|
+
}
|
|
60
|
+
export function copyFile(file, buildDir) {
|
|
61
|
+
const cleaned = cleanFilename(file);
|
|
62
|
+
if (cleaned.endsWith('.cls') || cleaned.endsWith('.trigger')) {
|
|
63
|
+
copyClassMeta(cleaned, buildDir);
|
|
64
|
+
}
|
|
65
|
+
else if (cleaned.includes('/aura/') || cleaned.includes('/lwc/')) {
|
|
66
|
+
copyComponentsPath(cleaned, buildDir);
|
|
67
|
+
}
|
|
68
|
+
else if (cleaned.includes('/experiences/')) {
|
|
69
|
+
copyExtensionFilePath(cleaned, buildDir);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
const src = path.join(LOCAL_DIR(), cleaned);
|
|
73
|
+
const dst = path.join(buildDir, cleaned);
|
|
74
|
+
ensureDir(path.dirname(dst));
|
|
75
|
+
fs.copyFileSync(src, dst);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=fileUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileUtils.js","sourceRoot":"","sources":["../src/fileUtils.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
ADDED
package/lib/index.js
ADDED
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# summary
|
|
2
|
+
Etapa 1: build e cópia de arquivos modificados desde o baseline.
|
|
3
|
+
|
|
4
|
+
# description
|
|
5
|
+
Lê o baseline.txt, faz git diff, copia os arquivos alterados para a pasta de build e calcula o novo baseline (sem gravar ainda — isso acontece após o validate PRD).
|
|
6
|
+
|
|
7
|
+
# examples
|
|
8
|
+
- <%= config.bin %> pypeline build
|
|
9
|
+
- <%= config.bin %> pypeline build --branch release-v5.0.0
|
|
10
|
+
- <%= config.bin %> pypeline build --dry-run
|
|
11
|
+
|
|
12
|
+
# flags.branch.summary
|
|
13
|
+
Branch git a fazer checkout antes do build.
|
|
14
|
+
|
|
15
|
+
# flags.dry-run.summary
|
|
16
|
+
Simula o build sem copiar arquivos nem executar comandos sf.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# summary
|
|
2
|
+
Etapa 3: deploy em Training.
|
|
3
|
+
|
|
4
|
+
# description
|
|
5
|
+
Executa sf project deploy start contra a org de treinamento com RunLocalTests. Grava o output em deploy_training_output.log.
|
|
6
|
+
|
|
7
|
+
# examples
|
|
8
|
+
- <%= config.bin %> pypeline deploy training
|
|
9
|
+
- <%= config.bin %> pypeline deploy training --target-org minha-org-treino --wait 120
|
|
10
|
+
|
|
11
|
+
# flags.target-org.summary
|
|
12
|
+
Alias da org de treinamento (padrão: treino).
|
|
13
|
+
|
|
14
|
+
# flags.wait.summary
|
|
15
|
+
Minutos de espera pelo resultado do deploy (padrão: 240).
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# summary
|
|
2
|
+
Quick deploy em produção usando o Job ID da última validação.
|
|
3
|
+
|
|
4
|
+
# description
|
|
5
|
+
Lê o Job ID gravado em prd_job_id.txt (ou recebe via --job-id) e executa sf project deploy quick. Remove o arquivo após sucesso para evitar reuso. O Job ID expira 10 horas após o validate.
|
|
6
|
+
|
|
7
|
+
# examples
|
|
8
|
+
- <%= config.bin %> pypeline quickdeploy
|
|
9
|
+
- <%= config.bin %> pypeline quickdeploy --job-id 0Af000000000001AAA
|
|
10
|
+
- <%= config.bin %> pypeline quickdeploy --no-prompt
|
|
11
|
+
|
|
12
|
+
# flags.target-org.summary
|
|
13
|
+
Alias da org de produção (padrão: devops).
|
|
14
|
+
|
|
15
|
+
# flags.job-id.summary
|
|
16
|
+
Job ID da validação. Se omitido, lê de prd_job_id.txt.
|
|
17
|
+
|
|
18
|
+
# flags.wait.summary
|
|
19
|
+
Minutos de espera pelo deploy (padrão: 240).
|
|
20
|
+
|
|
21
|
+
# flags.no-prompt.summary
|
|
22
|
+
Pula a confirmação interativa (útil em CI/CD).
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# summary
|
|
2
|
+
Pipeline completo: build → package.xml → training (paralelo) → validate PRD.
|
|
3
|
+
|
|
4
|
+
# description
|
|
5
|
+
Orquestrador principal. Executa todas as etapas em sequência, com deploy em Training rodando em paralelo ao validate PRD. Em caso de falha, restaura o baseline.txt automaticamente (rollback). Ao final, grava o Job ID em prd_job_id.txt para o quick deploy.
|
|
6
|
+
|
|
7
|
+
# examples
|
|
8
|
+
- <%= config.bin %> pypeline run
|
|
9
|
+
- <%= config.bin %> pypeline run --branch release-v5.0.0
|
|
10
|
+
- <%= config.bin %> pypeline run --skip-training
|
|
11
|
+
- <%= config.bin %> pypeline run --prd-org producao --training-org homolog
|
|
12
|
+
|
|
13
|
+
# flags.branch.summary
|
|
14
|
+
Branch git a usar no build (sobrescreve o valor em config.ts).
|
|
15
|
+
|
|
16
|
+
# flags.skip-training.summary
|
|
17
|
+
Pula o deploy em Training e roda apenas o validate PRD.
|
|
18
|
+
|
|
19
|
+
# flags.dry-run.summary
|
|
20
|
+
Passa --dry-run para a etapa de build (sem copiar arquivos).
|
|
21
|
+
|
|
22
|
+
# flags.prd-org.summary
|
|
23
|
+
Alias da org de produção (padrão: devops).
|
|
24
|
+
|
|
25
|
+
# flags.training-org.summary
|
|
26
|
+
Alias da org de treinamento (padrão: treino).
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# summary
|
|
2
|
+
Etapa 4: validação em PRD e extração do Job ID.
|
|
3
|
+
|
|
4
|
+
# description
|
|
5
|
+
Executa sf project deploy validate contra a org de produção. Extrai e salva o Job ID em prd_job_id.txt para uso posterior no quick deploy. Grava o output em deploy_prd_output.log.
|
|
6
|
+
|
|
7
|
+
# examples
|
|
8
|
+
- <%= config.bin %> pypeline validate prd
|
|
9
|
+
- <%= config.bin %> pypeline validate prd --target-org producao --wait 300
|
|
10
|
+
|
|
11
|
+
# flags.target-org.summary
|
|
12
|
+
Alias da org de produção (padrão: devops).
|
|
13
|
+
|
|
14
|
+
# flags.wait.summary
|
|
15
|
+
Minutos de espera pela validação (padrão: 240).
|