diff --git a/.github/workflows/plugin-release.yml b/.github/workflows/plugin-release.yml index 8217e2f..01ed9de 100644 --- a/.github/workflows/plugin-release.yml +++ b/.github/workflows/plugin-release.yml @@ -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 diff --git a/.github/workflows/theme-release.yml b/.github/workflows/theme-release.yml index 8998598..a6c5651 100644 --- a/.github/workflows/theme-release.yml +++ b/.github/workflows/theme-release.yml @@ -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 diff --git a/README.md b/README.md index 09ea51f..92aff5d 100644 --- a/README.md +++ b/README.md @@ -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`. diff --git a/docs/mise-en-place.md b/docs/mise-en-place.md index e542ad5..b963488 100644 --- a/docs/mise-en-place.md +++ b/docs/mise-en-place.md @@ -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 archive v1.4 wawp-updater | tar -x -C `. 2. Dans le fichier principal `.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'; @@ -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 archive v1.2 wawp-theme-updater | tar -x -C `. +1. Copier `wawp-theme-updater/` (version taguée `v1.4`) à la racine du thème : `git -C archive v1.4 wawp-theme-updater | tar -x -C `. 2. Dans `functions.php`, après le contrôle `ABSPATH` : ```php require __DIR__ . '/wawp-theme-updater/load.php'; @@ -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/` : `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. diff --git a/templates/release.yml b/templates/release.yml index f739bb1..6c90b8a 100644 --- a/templates/release.yml +++ b/templates/release.yml @@ -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 diff --git a/templates/theme-release.yml b/templates/theme-release.yml index cdef9fe..fa871f0 100644 --- a/templates/theme-release.yml +++ b/templates/theme-release.yml @@ -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 diff --git a/tests/Unit/WorkflowPolicyTest.php b/tests/Unit/WorkflowPolicyTest.php index 5dc7942..053dd7a 100644 --- a/tests/Unit/WorkflowPolicyTest.php +++ b/tests/Unit/WorkflowPolicyTest.php @@ -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); } @@ -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); @@ -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'); } }