gitattributes

Utiliser lors de l'audit ou de la mise à jour de la couverture export-ignore de .gitattributes afin que les fichiers réservés au développement (configs de lint, CI, tests, docs, outils de build) ne soient pas livrés dans le…

npx skills add https://github.com/automattic/wordpress-activitypub --skill gitattributes

.gitattributes Export-Ignore Audit

Ensure the WordPress.org release archive (git archive output) contains only runtime files. Dev tooling, tests, CI, and repo meta must be export-ignored.

Why This Matters

The WordPress.org zip is built via git archive. Anything without export-ignore ends up on every user's site, bloating the install and shipping dev-only code. Equally bad: stale export-ignore entries for files that no longer exist look tidy but protect nothing.

Quick Audit (one command)

# Entries in the release archive at the repository root
git archive --format=tar HEAD | tar -t | awk -F/ '{print $1}' | sort -u

# Same, but uses the working-tree .gitattributes (use while iterating on edits)
git archive --worktree-attributes --format=tar HEAD | tar -t | awk -F/ '{print $1}' | sort -u

git archive HEAD reads .gitattributes from the commit, so uncommitted fixes won't show up. Use --worktree-attributes to preview a pending change before committing.

The output should contain ONLY runtime artifacts. For this plugin that's: LICENSE, readme.txt, activitypub.php, assets, build, includes, integration, patterns, templates.

Anything else in the list is a gap — add an export-ignore rule.

Cross-Check Tracked vs Ignored

# Top-level tracked entries
git ls-tree --name-only HEAD | sort > /tmp/tracked.txt

# Entries referenced in .gitattributes
grep export-ignore .gitattributes | awk '{print $1}' | sed 's|^/||; s|/$||' | sort > /tmp/ignored.txt

# Stale entries (in .gitattributes but no longer tracked)
comm -23 /tmp/ignored.txt /tmp/tracked.txt

Stale entries aren't dangerous, but they rot and mislead future readers. Delete them.

What Belongs in Each Bucket

CategoryExamplesRule
Runtime PHPactivitypub.php, includes/, integration/keep
Runtime assetsassets/, build/, patterns/, templates/keep
WordPress.org metareadme.txt, LICENSEkeep
Dev dotfiles.editorconfig, .prettierrc.js, .stylelintrc.json, eslint.config.cjs, .wp-env.jsonexport-ignore
Repo meta.github/, .githooks/, .gitignore, .gitattributes, .wordpress-org/export-ignore
Agent/AI tooling.agents/, .claude/, AGENTS.md, CLAUDE.mdexport-ignore
Build & package configspackage.json, package-lock.json, composer.json, webpack.config.js, tsconfig.json, jest.config.js, jest.setup.jsexport-ignore
QA configsphpcs.xml, phpunit.xml.distexport-ignore
Source (pre-build)src/export-ignore (shipping build/ instead)
Teststests/export-ignore
Docs for contributorsdocs/, snippets/, CHANGELOG.md, CODE_OF_CONDUCT.md, CONTRIBUTING.md, FEDERATION.md, README.md, SECURITY.mdexport-ignore
Scriptsbin/, local/export-ignore

When to Run This Audit

  • Before tagging a release.
  • After adding or renaming any top-level file, dotfile, or config.
  • After adopting a new dev tool (lint, test runner, bundler).
  • When a linter flat-config migration renames files (e.g. .eslintrc.js → eslint.config.cjs).

Writing Rules

  • Use a leading / to anchor to the repo root: /phpcs.xml, not phpcs.xml.
  • Use a trailing / for directories: /tests/.
  • Keep grouping comments tidy (dotfiles, build configs, source/tests, docs, linguist).

Linguist Attributes (bonus)

Also used in .gitattributes to shape GitHub's language stats:

  • /build/** linguist-generated — hides machine-built output.
  • /docs/** linguist-documentation — keeps docs out of the language bar.
  • /package-lock.json linguist-generated — hides lockfile churn.

These don't affect the archive, but live in the same file, so keep them current too.

Red Flags

  • Release zip is larger than expected → something new is leaking in.
  • New dev dependency added, .gitattributes untouched → likely a gap.
  • Lint tool migrated to a new config filename → old entry is stale, new file is leaking.
  • Top-level file renamed → old export-ignore is dead weight, new one is missing.

Plus de skills de automattic

testing-js
automattic
Directives pour vérifier les fichiers JavaScript pour les erreurs de syntaxe
setup
automattic
Vérifier que l'interface en ligne de commande dn est installée et configurée. Utiliser lorsque l'utilisateur installe pour la première fois le plugin domain-names, ou lorsqu'une commande dn échoue parce que l'interface en ligne de commande est…
studio-cli
automattic
Utilisez le Studio CLI pour gérer les sites WordPress locaux, l'authentification et les sites de prévisualisation. Invoquez cette compétence lorsque vous devez exécuter des commandes Studio CLI, gérer…
dn-info
automattic
Obtenez des informations détaillées sur un domaine enregistré à l'aide de l'interface en ligne de commande dn. Utilisez lorsque l'utilisateur souhaite consulter les détails d'un domaine comme la date d'expiration, les serveurs de noms, les contacts,…
qa
automattic
Comparez le contenu WXR extrait avec la page source d'origine, page par page. Repérez les textes, titres, images et liens manquants. Corrigez en patchant le WXR ou…
add-skill
automattic
Ajouter une nouvelle compétence au plugin a8c-design. À utiliser lorsque vous avez créé une compétence Claude Code et que vous souhaitez la contribuer au plugin partagé Automattic a8c-design —…
design-foundations
automattic
Construire un JSON design-foundation cohérent à partir d'un site libéré — rôles sémantiques de couleur/typographie/espacement avec des traces de preuve. Consomme le scaffold partiel…
wp-phpstan
automattic
À utiliser lors de la configuration, de l'exécution ou de la correction de l'analyse statique PHPStan dans des projets WordPress (plugins/thèmes/sites) : configuration de phpstan.neon, baselines,…