---
url: 'https://dxpr.com/pt-pt/hc/documentacao/aprender-dxpr-builder/desenvolvimento/contribuir'
title: 'Contribuir | DXPR'
author:
  name: Jurriaan
  url: 'https://dxpr.com/users/jurriaan'
date: '2026-10-24T11:47:39+00:00'
updated: '2026-10-24T19:36:26+00:00'
copyright: 'Copyright DXPR. All rights reserved.'
type: article
summary: |-
  O desenvolvimento do DXPR Builder decorre no GitHub em
  github.com/dxpr/dxpr_builder. Todos os
  contributos seguem o fluxo de trabalho descrito no
  CONTRIBUTING.md do repositório.
tags:
  - Tooling
image: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
published: true
og:
  site_name: DXPR
  updated_time: '2026-10-24T19:36:26+0000'
  'image:alt': 'DXPR, powered by Drupal: AI-powered Drupal for marketers.'
schema:
  '@context': 'https://schema.org'
  '@graph':
    -
      mainEntity: {  }
    -
      '@type': TechArticle
      headline: Contribuir
      description: |-
        O desenvolvimento do DXPR Builder decorre no GitHub em
        github.com/dxpr/dxpr_builder. Todos os
        contributos seguem o fluxo de trabalho descrito no
        CONTRIBUTING.md do repositório.
      image:
        '@type': ImageObject
        url: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
        width: '1200'
        height: '630'
      datePublished: '2026-10-24T11:47:39+0000'
      dateModified: '2026-10-24T19:36:26+0000'
      author:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
        url: 'https://dxpr.com/'
        logo:
          '@type': ImageObject
          url: 'https://dxpr.com/themes/custom/dxpr_com/dxpr-logo-dark.svg'
          width: '1348'
          height: '501'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
        url: 'https://dxpr.com/'
        logo:
          '@type': ImageObject
          url: 'https://dxpr.com/themes/custom/dxpr_com/dxpr-logo-dark.svg'
          width: '1348'
          height: '501'
      mainEntityOfPage: 'https://dxpr.com/pt-pt/hc/documentacao/aprender-dxpr-builder/desenvolvimento/contribuir'
      articleSection: Ferramentas
    -
      '@type': WebPage
      '@id': 'https://dxpr.com/pt-pt/hc/documentacao/aprender-dxpr-builder/desenvolvimento/contribuir'
      description: |-
        O desenvolvimento do DXPR Builder decorre no GitHub em
        github.com/dxpr/dxpr_builder. Todos os
        contributos seguem o fluxo de trabalho descrito no
        CONTRIBUTING.md do repositório.
      breadcrumb:
        '@type': BreadcrumbList
        itemListElement:
          -
            '@type': ListItem
            position: 1
            name: Início
            item: 'https://dxpr.com/pt-pt'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
      inLanguage: pt-pt
---
[Centro de ajuda](/pt-pt/node/75)/[Documentação](/pt-pt/hc/documentacao) /[Aprender DXPR Builder](/pt-pt/hc/documentation/learn-dxpr-builder) /[Estender](/pt-pt/hc/documentation/learn-dxpr-builder/extend) /[Ferramentas](/pt-pt/hc/documentation/learn-dxpr-builder/extend/tooling) # Contribuir.

 Aprender DXPR BuilderEstenderFerramentas

   ## Neste guia

O desenvolvimento do DXPR Builder decorre no GitHub em [github.com/dxpr/dxpr\_builder](https://github.com/dxpr/dxpr_builder). Todos os contributos seguem o fluxo de trabalho descrito no [CONTRIBUTING.md](https://github.com/dxpr/dxpr_builder/blob/3.x/CONTRIBUTING.md) do repositório.

## Fluxo de trabalho Git

1. Cada pull request tem de estar ligado a um GitHub issue
2. Convenção de nomes de ramos: `person/target-branch/#issue-description` (p. ex. `jur/3.x/#42-fix-carousel-autoplay`)
3. Escreva commits atómicos segundo o [guia de estilo Git da alphagov](https://github.com/alphagov/styleguides/blob/master/git.md)
4. Cada pull request tem de conter uma descrição curta da solução
5. Mantenha as alterações dentro do âmbito do issue: sem formatação nem refatoração alheias

## Responsável pelo código

[@jjroelofs](https://github.com/jjroelofs) é o responsável pelo código. Nenhum pull request pode ser fundido sem a revisão do responsável pelo código.

## Normas de codificação

- PHP: [normas de codificação do Drupal](https://www.drupal.org/docs/develop/standards)
- JavaScript: apenas ES6+ (sem `var`, sem jQuery em código novo). Siga as [normas de codificação JavaScript da Airbnb](https://github.com/airbnb/javascript) com exceções do projeto
- CSS: siga o [sistema de design](https://github.com/dxpr/dxpr_builder/blob/3.x/DESIGN-SYSTEM.md) para propriedades personalizadas e nomes de tokens
- Uma alteração ao método `showed` de um elemento tem de incluir o `dxpr_frontend.js` atualizado. Gere-o a partir da saída completa que o editor imprime na consola do navegador quando clica no botão de guardar de um contentor.
- As funcionalidades novas precisam de cobertura do QA Analytics.

Execute `npm install` uma vez após clonar. Instala o hook de pré-commit do Husky, que verifica os ficheiros em staging; consulte [Testes](/pt-pt/hc/documentacao/aprender-dxpr-builder/desenvolvimento/testes).

## Executar testes E2E

Os testes são acionados por comandos de barra em comentários de PR:

| Command | Description |
|---|---|
| `/e2e` | Executa as suites completas do editor BS5 e de utilizador anónimo |
| `/e2e groups=group-name` | Executa grupos de testes específicos |
| `/e2e tests=ClassName` | Executa classes de teste específicas |
| `/e2e-bs3` | Executa a suite do editor BS3 |
| `/e2eV2` | Executa as suites BS5 na pilha DXPR CMS |
| `/e2e maven_ref=branch` | Testa com um ramo `dxpr_maven` personalizado |

Quando uma alteração do construtor exige uma alteração de testes, o engenheiro de QA atualiza o `dxpr_maven` num ramo e executa `/e2e maven_ref=<branch>` no seu pull request. O pull request do construtor é fundido primeiro e depois o do `dxpr_maven`.

## Antes de pedir revisão

1. Implemente a alteração
2. Teste com cuidado
3. Faça uma ronda de limpeza/refatoração
4. Teste de novo para confirmar que nada partiu
5. Faça commit e push com um histórico Git limpo
6. Confirme que as verificações do linter passam
7. Comente `/e2e` no PR para executar os testes de regressão
8. Peça revisão depois de todas as verificações passarem