Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions .github/merge-message-manifest.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"schemaVersion": "merge-message-v1",
"operation": "promotion",
"base": "main",
"head": "develop",
"subject": "Promove pacote aprovado para main",
"body": "Objetivo: publicar o pacote aprovado.\nEscopo: conteudo T3 validado.\nVerificacoes: testes e validacoes aprovados.\nReversao: reverter este merge."
"operation": "reconciliation",
"base": "develop",
"head": "chore/reconcile-main-develop-merge-message-policy",
"subject": "Reconciliacao apos publicacao em develop",
"body": "Objetivo: integrar main em develop.\nEscopo: preservar alteracoes de develop.\nVerificacoes: testes e ancestralidade aprovados.\nReversao: reverter este merge."
}
2 changes: 1 addition & 1 deletion .github/promotion-manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"base": "main",
"head": "develop",
"title": "Promove pacote aprovado para main",
"body": "Objetivo: publicar o pacote aprovado.\nEscopo: conteudo T3 validado.\nVerificacoes: testes e validacoes aprovados.\nReversao: reverter este merge.",
"body": "Objetivo: publicar o pacote aprovado.\nEscopo: alteracoes aprovadas nesta PR.\nVerificacoes: testes e validacoes aprovados.\nReversao: reverter este merge.",
"checks": ["npm test", "validacao de conteudo", "aprovacao humana"],
"rollback": "Reverter este merge."
}
1 change: 1 addition & 0 deletions .github/workflows/pr-governance.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ name: PR Governance

on:
pull_request:
types: [opened, synchronize, reopened, edited, ready_for_review]
branches:
- main
- develop
Expand Down
2 changes: 1 addition & 1 deletion scripts/merge-message-policy.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ const TEMPLATES = {
subject: 'Promove pacote aprovado para main',
body: [
'Objetivo: publicar o pacote aprovado.',
'Escopo: conteudo T3 validado.',
'Escopo: alteracoes aprovadas nesta PR.',
'Verificacoes: testes e validacoes aprovados.',
'Reversao: reverter este merge.',
].join('\n'),
Expand Down
16 changes: 5 additions & 11 deletions scripts/validate-promotion-manifest.cjs
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
const fs = require('node:fs');
const { validateManifest } = require('./merge-message-policy.cjs');
const { TEMPLATES } = require('./merge-message-policy.cjs');

const path = process.argv[2] || '.github/promotion-manifest.json';
const mergeMessagePath = '.github/merge-message-manifest.json';
const ascii = /^[\x20-\x7E]+$/;
const asciiLines = /^[\x20-\x7E\n]+$/;

Expand All @@ -13,7 +12,6 @@ function fail(message) {

try {
const manifest = JSON.parse(fs.readFileSync(path, 'utf8'));
const mergeMessage = JSON.parse(fs.readFileSync(mergeMessagePath, 'utf8'));
const required = ['base', 'head', 'title', 'body', 'checks', 'rollback'];
const unknown = Object.keys(manifest).filter(
(key) => !required.includes(key),
Expand All @@ -37,16 +35,12 @@ try {
fail('checks deve ser lista nao vazia');
}
if (!ascii.test(manifest.rollback)) fail('rollback deve ser ASCII');
if (manifest.title !== mergeMessage.subject) {
fail('title deve corresponder ao subject do manifesto de merge');
if (manifest.title !== TEMPLATES.promotion.subject) {
fail('title deve corresponder ao subject do modelo de promocao');
}
if (manifest.body !== mergeMessage.body) {
fail('body deve corresponder ao manifesto de merge');
if (manifest.body !== TEMPLATES.promotion.body) {
fail('body deve corresponder ao modelo de promocao');
}
validateManifest(mergeMessage, {
baseRef: manifest.base,
headRef: manifest.head,
}).forEach(fail);
if (!process.exitCode) process.stdout.write('promotion-manifest: ok\n');
} catch (error) {
fail(`invalido: ${error.message}`);
Expand Down
Loading