Releases: inpsyde/wp-translation-downloader
2.6
What's Changed
- Fix
wpackagistvendor names by @tyrann0us in #39 - Update php-qa.yml and add PHP 8.3 by @Chrico in #40
- Raise version phpunit by @lloc in #41
- AT-716: Update Inpsyde in code to Syde (license, copyright, text) by @overclokk in #42
New Contributors
- @lloc made their first contribution in #41
- @overclokk made their first contribution in #42
Full Changelog: 2.5...2.6
2.5
Use HttpDownloader in [TranslatablePackageFactory
Previously the JSON data was downloaded via file_get_contents(), which did not allow to make use of the stored credentials in Composer Config file. This new implementation will make use of the Composer\Util\HttpDownloader internally, which uses the Composer Config and the stored credentials to send alongside with the Request API Tokens or Basic Auth credentials.
Read more about the changes in docs: Configuration.md
This new implementation solves some requirements from #35 .
QoL
-
workflows/behat.yml // remove composer v2.0 which has no support for PHP 8.1
-
[workflows/behat.yml // add PHP 8.1 and 8.2 and Composer v2.4 and v2.5
-
workflows // add lint-php and combine 3 workflows into 1 workflow run.
2.4
TranslatablePackageFactory
Introduce new placeholders for resolving the endpoint URL dynamically.
For custom GlotPress installations, the REST Endpoints can be cached. We added the following new placeholders, which will automatically be filled in based on the current Package:
%packageDistSha1Checksum%- The sha1 checksum for the distribution archive of this version%packageDistReference%- The reference of the distribution archive. E.g.,main,1.0.0, or a commit hash%packageSourceReference%- The repository reference. E.g.,main,1.0.0, or a commit hash%packageUniqueName%- The package's unique name, constructed from name and version
2.3
Downloader, Unzipper and Cache
The complete logic of Downloader, Unzipper and Cache was refactored and now works seamlessly with Composer v2.
The logic we follow now is:
- Create a Composer
Packagefor each translation package. In this "fake" package, we set the "dist" URL, to the URL of translation package we want to download - we instantiate a Composer's
Downloadervia Composer'sComposer\Downloader\DownloadManager::getDownloader() - we use the
Downloaderto download the "fake" package, via the Composer'sSyncHelper::downloadAndInstallPackageSyncwhich is an utility that Composer's developers introduced for this exact scope.
This logic is implemented in
- the edited
Downloader - the new
TranslationPackageDownloader. - and in the new ProjectTranslation that helps with the creation of the "fake" package (which actually happens in the
Downloader)
Code changes
A new FnMatcher object
Many places in the plugin accepts package names/types via "shell wildcard patterns" (that is, using *). The new FnMatcher will provide some reusable code which is used in multiple places.
More powerful download command
The download command already accepts a list of packages, but that list must contain exact names. E. g. "inpsyde/foo", "inpsyde/bar", etc. As a consequence of having the new FnMatcher class, now the command accepts pattern as well, so we can do --packages="inpsyde/*"
Further improvements
- Support for Composer v1 is now completely removed. It was already officially "not supported", but in
composer.jsonwe still had compatible constraints, and we had code to deal with v1, now we only require v2 incomposer.jsonand all code that dealt with v1 has been removed. - A bug was there when using root packages, due to the fact that often root packages have no version, so Composer adds a "fake" version that causes troubles with the APIs.
- Various plugin tasks/commands are made more "lazy" making the code do nothing until last minute, to avoid undesired side-effects
PackageNameResolverwas a single-static-method class used in two classes in the "Package" namespace. It has been converted to a trait in the "Package" namespace to keep root namespace clean.- The "logo" has been made more "slim", and some other output improvements, for example display the number of errors for each package and an "overall stats" which was missing.
- To make code more "future proof" the method
Composer::getComposeris not used when using a Composer version where it is deprecated (v2.3+). - The
PluginConfigurationclass now uses constants for hardcoded strings for keys, to avoid typos and get auto-complete. - Some output messages are improved to bring more clarity, or just read better in English.
Test & QA changes
- Psalm has been added to the library.
- PHPUnit usage of mocks as been reduced to the minimum, preferring real classes whenever possible without much effort.
- Behat test setup has been optimized to run tests locally.
- GitHub action workflows have been optimized
Big props to @gmazzap for the time and work put into this 💪
2.2.1
Fix: Virtual Packages in DownloadCommand
This release fixes an issue with the newly introduced virtual-packages which were not used in the composer wp-translation-downloader:download command. To reduce duplicated code, a new method Plugin::availablePackages(Composer $composer): array was introduced, which is being used internally in Plugin and in DownloadCommand to guarantee the same collection of Composer\Package\PackageInterface, when executing the command or using "auto-run": true in configuration.
2.2
Virtual Packages
This version introduces a new configuration setting virtual-packages which allows you to define "pre-installed platform dependencies", which are not part of require or require-dev in composer.json, to be able to download those translations additionally.
Read more: https://github.com/inpsyde/wp-translation-downloader/blob/2.2/docs/Configuraton.md#virtual-packages
New command clean-cache
This version introduces a new command composer wp-translation-downloader:clean-cache to allow deleting the translation zip file cache without clearing the whole composer cache.
Read more: https://github.com/inpsyde/wp-translation-downloader/blob/2.2/docs/Commands.md#clean-cache
Improvements
Plugin
- keep track of already processed folders (created) to avoid multiple filesystem calls.
doUpdatePackage()- change order to avoid creating aTranslatablePackagewhen it is excluded.
Remover
- catch exception in case the folder does not exist and write down exception in verbose mode.
Behat
- Moved complete test suite into
tests/-folder.
props to @gmazzap and @benoitchantre for testing and discussions 💪
2.1.1
Fixes
- PluginConfiguration, TranslatablePackageFactory // ensure that directory separator is correctly trimmed on end of directory input.
- Plugin // changed
Plugin::ensureDirectories()toPlugin::ensureDirectoryExists(string $dir)and call when iterating overTranslatablePackage. Relates to: #29 - Downloader // use the "updated" date for translations as
filemtime()on cached ZIP files.. Ensure that updated zip files are downloaded again. Relates to: #30
Improvements
- Unzipper // only write information about "falling back from unzip to ZipArchive" and vise versa when running in verbose mode.
- workflows/behat // make use of ramsey/composer-install@v1. upgrade actions/checktout to v3, add --colors to behat call.
- tests // moved "features" into "tests/Behat"-folder. Moved
FeatureContextintoInpsyde\WpTranslationDownloader-namespace.
2.1
Locker
This release introduces the Util\Locker-class, which will generate on installation a wp-translation-downloader.lock-file to keep track of the installated translations. On next run it will check against the lock file and only download newer translation files.
Related issues: #9 #26
Read more: https://github.com/inpsyde/wp-translation-downloader/blob/master/docs/Locker.md
Custom composer types and directories
This release will allow you to configure in your wp-translation-downloader.json the directories.names and directories.types mapping with a sub-folder name. This will also open this package to install every Composer type available, instead of just the pre-defined static ones included in this package.
The configuration key directory is now deprecated and will be removed in future. Please make sure to update your configuration to the new key languageRootDir.
Related issues: #13 #27
Read more: https://github.com/inpsyde/wp-translation-downloader/blob/master/docs/Configuraton.md#languagerootdir-and-directories
Support for root package
The root package, which contains the wp-translation-downloader-configuration, is now also added to the list of packages to process.
JSON Schema validation
When loading the wp-translation-downloader-configuration, we will now use https://json-schema.org/ to validate the file by using justinrainbow/json-schema, which is included in Composer.
The PluginConfigurationBuilder::build() will now return null when the JSON Schema does not validate successfully against the input and print out information about the errors.
Related issue: #28
Changes under the hood
This release contains a few changes under the hood, including some refactored code and simplifications:
- Removed
Inpsyde\WpTranslationDownloader\Io- insteadComposer\IO\IOInterfaceis now used. - Introduced a new
TranslateablePackageandTranslatablePackageInterfacewhich replaces the specific implementations ofWpCorePackage,WpThemePackage,WpPluginPackage,LibraryPackageand theTranslatablePackageTrait. Pluginwill now not create services onactivate(). Instead a new methodPlugin::bootstrap()was implemented and is being used in the event callbacks to instantiate the Services late.ApiEndpointResolverwas merged intoTranslatablePackageFactory.PluginConfiguration::isValid()was removed due the newly implemented JSON Schema implementation.
Improvements
- Documentation is now moved into
docs/-folder, split into mulitiple files and has more examples and details in it. - Allow composer/installers v2.
composer normalize.- add
config.allow-pluginsproperty. - Run tests on PHP v8.0 and v8.1.
- More behat tests were added 😱
- Removed issue templates - the global Inpsyde ones from https://github.com/inpsyde/.github are now used.
- Use inpsyde/reusable-workflows for running Github Action workflows.
props to @tyrann0us 💪 and myself @Chrico 😬