Pular para o conteúdo principal

Adicionando Botões de Pré-visualização de PR com GitHub Actions

A ação de Pré-visualização de PR do Playground adiciona um botão de pré-visualização aos seus pull requests. Clicar no botão inicia o Playground com seu plugin ou tema instalado a partir da branch do PR:

PR Preview Button

Para opções de configuração completas e recursos avançados, consulte o README do workflow action-wp-playground-pr-preview.

Como funciona

A ação é executada em eventos de pull request (aberto, atualizado, editado). Ela pode atualizar a descrição do PR com um botão de pré-visualização ou postar o botão como um comentário.

Configuração básica para plugins

Para plugins sem uma etapa de build, crie .github/workflows/pr-preview.yml:

name: PR Preview
on:
pull_request:
types: [opened, synchronize, reopened, edited]

jobs:
preview:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- name: Post Playground Preview Button
uses: WordPress/action-wp-playground-pr-preview@v2
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
mode: 'append-to-description'
plugin-path: .

A configuração plugin-path: . aponta para o diretório do seu plugin. Para subdiretórios como plugins/my-plugin, use plugin-path: plugins/my-plugin.

Veja adamziel/preview-in-playground-button-plugin-example para um exemplo ao vivo deste workflow em ação.

Configuração básica para temas

Para temas, use theme-path em vez de plugin-path:

name: PR Preview
on:
pull_request:
types: [opened, synchronize, reopened, edited]

jobs:
preview:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- name: Post Playground Preview Button
uses: WordPress/action-wp-playground-pr-preview@v2
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
theme-path: .

Posicionamento do botão

Por padrão, a ação atualiza a descrição do PR (mode: append-to-description). Para postar como um comentário:

with:
plugin-path: .
mode: comment
github-token: ${{ secrets.GITHUB_TOKEN }}

A ação envolve o botão em marcadores HTML e o atualiza em execuções subsequentes. Por padrão, ela restaura o botão se você o remover. Para evitar a restauração:

with:
plugin-path: .
restore-button-if-removed: false

Trabalhando com artefatos compilados

Para plugins ou temas que requerem compilação, o workflow envolve compilar o código, expô-lo através de releases do GitHub e criar um blueprint que referencia a URL pública.

Exemplo de workflow (veja a documentação completa):

name: PR Preview with Build
on:
pull_request:
types: [opened, synchronize, reopened, edited]

permissions:
contents: write
pull-requests: write

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build
run: |
npm install
npm run build
zip -r plugin.zip dist/
- uses: actions/upload-artifact@v4
with:
name: built-plugin
path: plugin.zip

expose-build:
needs: build
runs-on: ubuntu-latest
permissions:
contents: write
outputs:
artifact-url: ${{ steps.expose.outputs.artifact-url }}
steps:
- name: Expose built artifact
id: expose
uses: WordPress/action-wp-playground-pr-preview/.github/actions/expose-artifact-on-public-url@v2
with:
artifact-name: 'built-plugin'
pr-number: ${{ github.event.pull_request.number }}
commit-sha: ${{ github.sha }}
artifacts-to-keep: '2'

create-blueprint:
needs: expose-build
runs-on: ubuntu-latest
outputs:
blueprint: ${{ steps.blueprint.outputs.result }}
steps:
- uses: actions/github-script@v7
id: blueprint
with:
script: |
const blueprint = {
steps: [{
step: "installPlugin",
pluginZipFile: {
resource: "url",
url: "${{ needs.expose-build.outputs.artifact-url }}"
}
}]
};
return JSON.stringify(blueprint);
result-encoding: string

preview:
needs: create-blueprint
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- uses: WordPress/action-wp-playground-pr-preview@v2
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
blueprint: ${{ needs.create-blueprint.outputs.blueprint }}

A configuração artifacts-to-keep controla quantos builds manter por PR. Para temas, altere installPlugin para installTheme.

Veja adamziel/preview-in-playground-button-built-artifact-example para um exemplo completo funcionando.

Blueprints personalizados

Use blueprints para configurar o ambiente do Playground. Você pode instalar plugins adicionais, definir opções do WordPress, importar conteúdo ou executar PHP personalizado.

Exemplo instalando seu plugin com WooCommerce:

jobs:
create-blueprint:
name: Create Blueprint
runs-on: ubuntu-latest
outputs:
blueprint: ${{ steps.blueprint.outputs.result }}
steps:
- name: Create Blueprint
id: blueprint
uses: actions/github-script@v7
with:
script: |
const blueprint = {
steps: [
{
step: "installPlugin",
pluginData: {
resource: "git:directory",
url: `https://github.com/${context.repo.owner}/${context.repo.repo}.git`,
ref: context.payload.pull_request.head.ref,
path: "/"
}
},
{
step: "installPlugin",
pluginData: {
resource: "wordpress.org/plugins",
slug: "woocommerce"
}
}
]
};
return JSON.stringify(blueprint);
result-encoding: string

preview:
needs: create-blueprint
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- uses: WordPress/action-wp-playground-pr-preview@v2
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
blueprint: ${{ needs.create-blueprint.outputs.blueprint }}

Ou referencie um blueprint externo:

with:
blueprint-url: https://example.com/path/to/blueprint.json

Consulte a documentação de Blueprints para todos os passos disponíveis e opções de configuração.

Personalização de template

Personalize o conteúdo da pré-visualização usando variáveis de template:

with:
plugin-path: .
description-template: |
### Test this PR in WordPress Playground

{{PLAYGROUND_BUTTON}}

**Branch:** {{PR_HEAD_REF}}

Variáveis disponíveis: {{PLAYGROUND_BUTTON}}, {{PLUGIN_SLUG}}, {{THEME_SLUG}}, {{PR_NUMBER}}, {{PR_TITLE}}, {{PR_HEAD_REF}}, e mais.

Consulte o README do workflow para a lista completa.

Exposição de artefatos

A ação expose-artifact-on-public-url faz upload de arquivos compilados para um único release (marcado como ci-artifacts por padrão). Cada artefato recebe um nome de arquivo único como pr-123-abc1234.zip. Artefatos antigos são automaticamente limpos com base em artifacts-to-keep.

Opções de configuração: Expose Artifact Inputs

Solução de problemas

Botão não aparece: O arquivo de workflow deve existir no branch padrão. Verifique a aba Actions para erros.

Pré-visualização falha ao carregar: Verifique se o caminho aponta para um diretório válido de plugin/tema. Verifique os logs de build para artefatos.

Não ativado: Verifique o console do navegador para erros de PHP. As dependências podem estar faltando.

Erros de permissão: Defina permissões no nível do job.

Mais informações: README do workflow

Exemplos

Próximos passos

  • Adicionar conteúdo de demonstração (guia)
  • Criar blueprints personalizados (documentação)
  • Integrar com workflows de testes
  • Personalizar templates para revisores