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
2 changes: 1 addition & 1 deletion .github/workflows/plugin-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
tools-ref:
description: Version de release-tools utilisée pour les scripts (doit correspondre à la version du workflow).
type: string
default: v1
default: v1.4

permissions:
contents: read
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/theme-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
tools-ref:
description: Version de release-tools utilisée pour les scripts (doit correspondre à la version du workflow).
type: string
default: v1.2
default: v1.4

permissions:
contents: read
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Outils de publication des plugins et des thèmes WeAre[WP], clients de mise à j

- `wawp-updater/` : bibliothèque embarquée dans chaque plugin (PHP 7.4+, WordPress 5.8+). Vérifie les mises à jour sur `updates.wearewp.pro` avec la clé `WAWP_LICENSE_KEY` et refuse tout paquet dont la signature Ed25519 est invalide. Figée en version 1.0.0.
- `wawp-theme-updater/` : bibliothèque embarquée dans le thème FSE autonome d'un client (PHP 7.4+, WordPress 6.1+), mêmes garanties, chargée par `functions.php`.
- `.github/workflows/plugin-release.yml` (tag `v1`) et `.github/workflows/theme-release.yml` (tag `v1.2`) : workflows réutilisables, déclenchés par un tag `vX.Y.Z` dans le dépôt d'un plugin ou d'un thème.
- `.github/workflows/plugin-release.yml` et `.github/workflows/theme-release.yml` (nouveaux dépôts : `@v1.4`) : workflows réutilisables, déclenchés par un tag `vX.Y.Z` dans le dépôt d'un plugin ou d'un thème. Les dépôts existants sur `@v1` / `@v1.2` continuent de fonctionner ; ils passent à `@v1.4` en modifiant une ligne de `.github/workflows/release.yml`.
- `scripts/`, `bin/` : contrôles (`--type=theme` pour un thème), signature, envoi FTPS, génération des clés, préparation d'un dépôt.

Ce dépôt ne contient aucun secret. Mise en place : `docs/mise-en-place.md`.
Expand Down
18 changes: 16 additions & 2 deletions docs/mise-en-place.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ git push origin v1

Le dépôt doit appartenir à l'organisation `wearewp`, être privé et porter le nom du slug du plugin.

1. Copier `wawp-updater/` (version taguée `v1`) à la racine du plugin.
1. Copier `wawp-updater/` (version taguée `v1.4`) à la racine du plugin : `git -C <release-tools> archive v1.4 wawp-updater | tar -x -C <plugin>`.
2. Dans le fichier principal `<slug>.php` : ajouter l'en-tête `Update URI: https://updates.wearewp.pro` et, après le contrôle `ABSPATH` :
```php
require __DIR__ . '/wawp-updater/load.php';
Expand Down Expand Up @@ -114,7 +114,7 @@ Le ruleset de l'étape 5 protège aussi ce tag (motif `refs/tags/v*`) : il ne po

Le thème est un thème FSE autonome (pas de thème parent, pas d'en-tête `Template`), actif sur un seul site. Le dépôt appartient à l'organisation `wearewp`, est privé et porte le nom du slug du thème, qui est aussi le nom de son dossier et son `Text Domain`.

1. Copier `wawp-theme-updater/` (version taguée `v1.2`) à la racine du thème : `git -C <release-tools> archive v1.2 wawp-theme-updater | tar -x -C <thème>`.
1. Copier `wawp-theme-updater/` (version taguée `v1.4`) à la racine du thème : `git -C <release-tools> archive v1.4 wawp-theme-updater | tar -x -C <thème>`.
2. Dans `functions.php`, après le contrôle `ABSPATH` :
```php
require __DIR__ . '/wawp-theme-updater/load.php';
Expand All @@ -129,6 +129,20 @@ Le thème est un thème FSE autonome (pas de thème parent, pas d'en-tête `Temp

Le client des thèmes ne place jamais l'adresse de téléchargement dans le cache de WordPress, mais un marqueur `https://updates.wearewp.pro/v1/theme-update/<slug>` : `wawp-updater` 1.0.0, embarqué dans les plugins, refuse toute adresse `/v1/download/` hors d'une mise à jour de plugin. Une rotation de clé de signature (section 8) concerne aussi `wawp-theme-updater/src/class-config.php` (même `PUBLIC_KEYS`) et `config/min-theme-updater-version.txt`.

## 11. Tag `v1.4` de release-tools (une seule fois)

Le tag `v1.4` aligne tout sur `actions/checkout` v7 (Node.js 24) : `plugin-release.yml` et `theme-release.yml` y utilisent `tools-ref: v1.4` par défaut, et les modèles `templates/release.yml` et `templates/theme-release.yml` appellent `@v1.4`. Les nouveaux dépôts (plugins comme thèmes) utilisent donc `@v1.4` et copient `wawp-updater/` ou `wawp-theme-updater/` depuis ce tag. Après fusion sur `main` de la branche correspondante, depuis un clone de release-tools, dans Git Bash (`gh` authentifié comme à l'étape 5) :

```
git checkout main && git pull
git tag v1.4
git push origin v1.4
```

Le ruleset de l'étape 5 protège aussi ce tag (motif `refs/tags/v*`).

Les dépôts existants restent sur `@v1` (plugins) ou `@v1.2` (thèmes) et continuent de fonctionner sans changement. Ils peuvent passer à `@v1.4` à leur prochaine version, en modifiant une seule ligne de `.github/workflows/release.yml` (`uses: …@v1.4`) ; le code embarqué `wawp-updater/` ou `wawp-theme-updater/` n'a pas à être recopié.

## Limite connue

WordPress n'appelle les filtres `Update URI` qu'après une réponse réussie d'`api.wordpress.org`. Si ce service est injoignable depuis un site, les mises à jour WeAre[WP] n'y apparaissent pas tant que la situation dure ; elles réapparaissent dès le contrôle suivant.
Expand Down
2 changes: 1 addition & 1 deletion templates/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@ jobs:
release:
permissions:
contents: write
uses: wearewp/release-tools/.github/workflows/plugin-release.yml@v1
uses: wearewp/release-tools/.github/workflows/plugin-release.yml@v1.4
secrets: inherit
2 changes: 1 addition & 1 deletion templates/theme-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@ jobs:
release:
permissions:
contents: write
uses: wearewp/release-tools/.github/workflows/theme-release.yml@v1.2
uses: wearewp/release-tools/.github/workflows/theme-release.yml@v1.4
secrets: inherit
16 changes: 12 additions & 4 deletions tests/Unit/WorkflowPolicyTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -133,12 +133,20 @@ public function testArtifactsAreOverwrittenAndReleaseAssetsNeverClobbered(): voi
self::assertStringContainsString('contient déjà', $release);
}

public function testToolsRefDefaultsMatchTheCallerTag(): void
{
foreach (['plugin-release.yml', 'theme-release.yml'] as $name) {
$yaml = self::file('.github/workflows/' . $name);
self::assertMatchesRegularExpression('/tools-ref:\n(?: {8}.*\n)*? {8}default: v1\.4\n/', $yaml, $name);
}
}

public function testCallerTemplate(): void
{
$yaml = self::file('templates/release.yml');
self::assertStringContainsString("tags: ['v*.*.*']", $yaml);
self::assertStringContainsString('permissions: {}', $yaml);
self::assertStringContainsString('uses: wearewp/release-tools/.github/workflows/plugin-release.yml@v1', $yaml);
self::assertStringContainsString('uses: wearewp/release-tools/.github/workflows/plugin-release.yml@v1.4', $yaml);
self::assertStringContainsString('secrets: inherit', $yaml);
}

Expand Down Expand Up @@ -180,7 +188,7 @@ public function testThemeWorkflowSharesSigningAndReleaseJobsWithThePluginOne():
self::assertStringContainsString("permissions:
contents: read
", $yaml);
self::assertStringContainsString(" default: v1.2
self::assertStringContainsString(" default: v1.4
", $yaml);
self::assertSame(2, substr_count($yaml, 'overwrite: true'));
self::assertStringNotContainsString('--clobber', $yaml);
Expand Down Expand Up @@ -217,8 +225,8 @@ public function testThemeCallerTemplate(): void
$yaml = self::file('templates/theme-release.yml');
self::assertStringContainsString("tags: ['v*.*.*']", $yaml);
self::assertStringContainsString('permissions: {}', $yaml);
self::assertStringContainsString('uses: wearewp/release-tools/.github/workflows/theme-release.yml@v1.2', $yaml);
self::assertStringContainsString('uses: wearewp/release-tools/.github/workflows/theme-release.yml@v1.4', $yaml);
self::assertStringContainsString('secrets: inherit', $yaml);
self::assertStringContainsString('uses: wearewp/release-tools/.github/workflows/plugin-release.yml@v1', self::file('templates/release.yml'), 'les plugins restent sur v1');
self::assertStringContainsString('uses: wearewp/release-tools/.github/workflows/plugin-release.yml@v1.4', self::file('templates/release.yml'), 'plugins et thèmes sur le même tag');
}
}