diff --git a/.gitattributes b/.gitattributes index 7542171d..6b39d9fe 100644 --- a/.gitattributes +++ b/.gitattributes @@ -19,5 +19,5 @@ /tests export-ignore /TODO export-ignore /update-for-release export-ignore -/WHATSNEW export-ignore /WYSIWYG export-ignore +/release.config.js export-ignore diff --git a/.github/workflows/lint-pr.yml b/.github/workflows/lint-pr.yml new file mode 100644 index 00000000..597a6ed7 --- /dev/null +++ b/.github/workflows/lint-pr.yml @@ -0,0 +1,19 @@ +name: "Lint PR" + +on: + pull_request_target: + types: + - opened + - edited + - synchronize + +jobs: + main: + name: Validate PR title + + runs-on: ubuntu-latest + + steps: + - uses: amannn/action-semantic-pull-request@v4 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..eb2308a6 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,29 @@ +name: release + +on: + workflow_dispatch: + +jobs: + release: + runs-on: ubuntu-latest + + name: Release + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: 5.5 + + - name: Run automated release process with semantic-release + uses: cycjimmy/semantic-release-action@v2 + with: + extra_plugins: | + @semantic-release/changelog + @semantic-release/git + @semantic-release/exec + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/WHATSNEW b/WHATSNEW deleted file mode 100644 index 32403eb2..00000000 --- a/WHATSNEW +++ /dev/null @@ -1,3 +0,0 @@ -HTML Purifier 4.15.x is a maintenance release which improves -compatibility with PHP8.2. There is also support for -contenteditable="false" added. diff --git a/maintenance/add-vimline.php b/maintenance/add-vimline.php index d6a8eb20..69882c67 100644 --- a/maintenance/add-vimline.php +++ b/maintenance/add-vimline.php @@ -34,7 +34,6 @@ foreach ($files as $file) { postfix_is('.svg', $file) || postfix_is('.phpt', $file) || postfix_is('VERSION', $file) || - postfix_is('WHATSNEW', $file) || postfix_is('configdoc/usage.xml', $file) || postfix_is('library/HTMLPurifier.includes.php', $file) || postfix_is('library/HTMLPurifier.safe-includes.php', $file) || diff --git a/package.php b/package.php index bfef9362..a4fd2df9 100644 --- a/package.php +++ b/package.php @@ -48,7 +48,6 @@ $pkg->setReleaseStability('stable'); $pkg->addRelease(); -$pkg->setNotes(file_get_contents('WHATSNEW')); $pkg->setPackageType('php'); $pkg->setPhpDep('5.0.0'); diff --git a/release.config.js b/release.config.js new file mode 100644 index 00000000..3f73ace8 --- /dev/null +++ b/release.config.js @@ -0,0 +1,29 @@ +module.exports = { + debug: true, + branch: 'master', + plugins: [ + '@semantic-release/commit-analyzer', + '@semantic-release/release-notes-generator', + ['@semantic-release/changelog', {'changelogFile': 'NEWS'}], + '@semantic-release/exec', + ['@semantic-release/git', { + 'assets': ['VERSION', 'NEWS', 'Doxyfile', 'library/HTMLPurifier.php', 'library/HTMLPurifier/Config.php', 'library/HTMLPurifier.includes.php'], + }], + '@semantic-release/github' + ], + verifyConditions: [ + '@semantic-release/changelog', + '@semantic-release/github', + ], + prepare: [ + { + path: '@semantic-release/exec', + cmd: 'php update-for-release ${nextRelease.version}' + }, + '@semantic-release/changelog', + '@semantic-release/git', + ], + publish: [ + '@semantic-release/github', + ] +} diff --git a/update-for-release b/update-for-release index 2b9662a7..ec5ec03d 100644 --- a/update-for-release +++ b/update-for-release @@ -23,24 +23,7 @@ $version = trim($argv[1]); // ...in VERSION file_put_contents('VERSION', $version); -// ...in NEWS -if ($is_dev = (strpos($version, 'dev') === false)) { - $date = date('Y-m-d'); - $news_c = str_replace( - $l = "$version, unknown release date", - "$version, released $date", - file_get_contents('NEWS'), - $c - ); - if (!$c) { - echo 'Could not update NEWS, missing ' . $l . PHP_EOL; - exit; - } elseif ($c > 1) { - echo 'More than one release declaration in NEWS replaced' . PHP_EOL; - exit; - } - file_put_contents('NEWS', $news_c); -} +$is_dev = strpos($version, 'dev') === false; // ...in Doxyfile $doxyfile_c = preg_replace( @@ -102,9 +85,22 @@ if (!$c) { } file_put_contents('library/HTMLPurifier/Config.php', $config_c); +$includes = file_get_contents('library/HTMLPurifier.includes.php'); +$includes = preg_replace( + '/@version .+?/', + "@version $version", + $includes, + 1, $c +); +if (!$c) { + echo 'Could not update HTMLPurifier.includes.php, missing @version docblock.' . PHP_EOL; + exit; +} +file_put_contents('HTMLPurifier.includes.php', $includes); + passthru('maintenance/flush.sh'); -if ($is_dev) echo "Review changes, write something in WHATSNEW, and then commit with log 'Release $version.'" . PHP_EOL; +if ($is_dev) echo "Review changes, and then commit with log 'Release $version.'" . PHP_EOL; else echo "Numbers updated to dev, no other modifications necessary!"; // vim: et sw=4 sts=4