Releases: hydephp/develop
v1.0.0 - 2023-03-14
Release Announcement
We're thrilled to announce HydePHP v1.0.0, the first general availability release of the Laravel-based static site generator you've been waiting for! HydePHP allows you to build lightning-fast static websites with ease, using the familiar syntax and functionality of the Laravel framework.
What is HydePHP?
HydePHP is a powerful static site generator that is built on top of Laravel, one of the most popular PHP frameworks out there. HydePHP's architecture and design principles allow for a flexible and intuitive development experience, making it a great choice for developers looking to create static websites quickly and efficiently.
What's New in v1.0.0?
This release marks the first stable version of HydePHP, with many exciting new features and improvements. Here are some of the highlights:
- Upgraded to Laravel 10 and requires PHP 8.1
- Made several services and sub-namespaces modular and configurable
- Major improvements to several key features and code APIs, including the new Extensions API
- See the Changelog for a full list of changes, either on GitHub or on the HydePHP website
How to Install
To get started with HydePHP, you can install it using Composer with the following command:
composer create-project hyde/hyde
Thank You!
We want to extend a huge thank you to everyone who contributed to this release, whether through code contributions, bug reports, or feature requests. We couldn't have done it without your help!
More Information
You can also visit our website at HydePHP.com for more information, or follow us on Twitter at @HydeFramework for updates and news.
v1.0.0-RC.5 - 2023-03-13
What's Changed
- Add back lost versioning text from compiled HydeFront file by @caendesilva in #1263
- Use new fixes from StyleCI by @caendesilva in #1264
- Bugfix: Fix missing
justify-between
class on the documentation article header by @caendesilva in #1265 - Internal: Update monorepo support files by @caendesilva in #1266
- Internal: Update monorepo documentation by @caendesilva in #1267
- Remove "Beta Software Warning" from Project Readmes by @caendesilva in #1268
- Update supported versions in package security policies by @caendesilva in #1269
- Format Markdown documents by @caendesilva in #1270
- Create documentation for the HydePHP v1.0 release by @caendesilva in #1242
- HydePHP v1.0.0 - Release Candidate Five by @caendesilva in #1271
Full Changelog: v1.0.0-RC.4...v1.0.0-RC.5
v1.0.0-RC.4 - 2023-03-12
What's Changed
- Update contributing document by @caendesilva in #1248
- Update supported versions policy by @caendesilva in #1250
- Update monorepo readme by @caendesilva in #1251
- Add default RSS feed description value to config stub by @caendesilva in #1253
- Remove
RouteKey::normalize
method deprecated in v1.0.0-RC.2 by @caendesilva in #1254 - Remove deprecated RenderData code by @caendesilva in #1255
- Bugfixes: Blog post view uses legacy non-dynamic path information for metadata by @caendesilva in #1257
- Remove deprecated
HydePage::$canonicalUrl
property by @caendesilva in #1256 - Create new array-based RSS feed config structure by @caendesilva in #1258
- Internal: Update release script by @caendesilva in #1259
- Remove deprecated
SourceFile::withoutDirectoryPrefix
method only used in one test by @caendesilva in #1260 - Remove deprecated
CreatesNewPageSourceFile::getOutputPath
method by @caendesilva in #1261 - HydePHP v1.0.0 - Release Candidate Four by @caendesilva in #1262
Full Changelog: v1.0.0-RC.3...v1.0.0-RC.4
v1.0.0-RC.3 - 2023-03-11
What's Changed
- Deprecate HydePage canonical url property by @caendesilva in #1245
- Make HydePage::$title property readonly by @caendesilva in #1246
- HydePHP v1.0.0 - Release Candidate Three by @caendesilva in #1247
Full Changelog: v1.0.0-RC.2...v1.0.0-RC.3
v1.0.0-RC.2 - 2023-03-10
What's Changed
- Update MarkdownPost::getLatestPosts helper to sort using the DateTime object timestamp by @caendesilva in #1235
- Update PostAuthor::all() to map entries into array keyed by username by @caendesilva in #1236
- Normalize internal author array keys to lowercase to make author usernames case-insensitive by @caendesilva in #1237
- Update pretty relative index links to rewrite to
./
instead of/
by @caendesilva in #1238 - Remove RouteKey normalization for dot notation support by @caendesilva in #1241
- Breaking: Rename global properties by @caendesilva in #1243
- HydePHP v1.0.0 - Release Candidate Two by @caendesilva in #1244
Full Changelog: v1.0.0-RC.1...v1.0.0-RC.2
v1.0.0-RC.1 - 2023-03-07
What's Changed
- Update the RealtimeCompiler package by @caendesilva in #561
- Added XML support to File.php by @LunarMarathon in #563
- Add more matrix tests by @caendesilva in #567
- Flush the component cache when tearing down the test by @caendesilva in #565
- Breaking: Set minimum PHP version to 8.1 by @caendesilva in #572
- Code cleanup by @caendesilva in #573
- Add a version constant to the HydeKernel by @caendesilva in #574
- Change version method to return the new version constant instead of using Composer by @caendesilva in #575
- Refactor internal metadata handling by @caendesilva in #576
- Refactor navigation data handling by @caendesilva in #577
- Remove interface ActionContract.php by @caendesilva in #578
- Inline single usage trait askToRebuildSite by @caendesilva in #580
- Breaking: Move $outputPath property to the Site class by @caendesilva in #581
- Partially revert #576 by @caendesilva in #583
- Code refactors by @caendesilva in #582
- Simplify internal metadata API by @caendesilva in #584
- Refactor: Add strict types declaration to all Framework PHP source files by @caendesilva in #586
- Refactor: Import classes in the global namespace by @caendesilva in #588
- Code refactors by @caendesilva in #590
- Reorganize almost all Framework namespaces by @caendesilva in #594
- Dissolve the projects monorepo directory by @caendesilva in #595
- Move Commands namespace into Hyde\Console namespace by @caendesilva in #596
- Remove "Hyde" prefix from the console command class names by @caendesilva in #597
- Clean up and normalize console command classes by @caendesilva in #598
- Handle console commands in new HydeConsoleServiceProvider by @caendesilva in #599
- Further restructure namespaces by @caendesilva in #601
- Structure namespaces by domain by @caendesilva in #602
- Restructure build tasks namespace by @caendesilva in #603
- Begin rewrite of how page objects are constructed by @caendesilva in #604
- Move routing related classes to new Routing namespace and refactor them by @caendesilva in #605
- Extract facades and simplify public API usage by @caendesilva in #606
- Restructure concerns and contracts by @caendesilva in #607
- Refactor validation service by @caendesilva in #608
- Refactor semantic documentation article feature by @caendesilva in #609
- Refactor the author model by @caendesilva in #611
- Refactor the featured image model and view by @caendesilva in #612
- Breaking: Rename "credit" front matter and class property to "attributionUrl" for blog post images by @caendesilva in #613
- Add more factories by @caendesilva in #610
- Implement the file model's array representation by @caendesilva in #614
- Add a simple session handler by @caendesilva in #615
- Normalize internal image path storage by @caendesilva in #617
- Aggressively simplify and inline action FindsContentLengthForRemoteImageObject by @caendesilva in #616
- Refactor FeaturedImage component to handle all semantic HTML assembly logic in the view by @caendesilva in #618
- Simplify featured images by splitting into new classes by @caendesilva in #619
- Add featured image factory by @caendesilva in #620
- Refactor to use the new featured image classes by @caendesilva in #621
- Remove CBench as Laravel now offers a great benchmarking helper by @caendesilva in #622
- Made port default to value specific in config file or in .env by @caendesilva in #626
- Merge branch 'master' into 'upcoming' by @caendesilva in #628
- Refactor internal command class structures by @caendesilva in #629
- Make the Features class mockable so it's easier to test by @caendesilva in #630
- Remove ConstructsPageSchemas schemas trait by @caendesilva in #632
- Refactor the page data factory pipeline by @caendesilva in #631
- HydePHP v1.0 Goals - Massive Internal Restructure by @caendesilva in #623
- Change schema.org identifiers to use https by @caendesilva in #633
- HydeRC: Use getOrFail instead of get by @caendesilva in #635
- Start creating documentation category for advanced usage by @caendesilva in #636
- Internal: Add full site test fixtures by @caendesilva in #637
- Refactor the make:post command action by @caendesilva in #638
- Refactor the make:page command action by @caendesilva in #639
- Clean up the MakePostCommand class by @caendesilva in #640
- Remove unused test files by @caendesilva in #641
- Allow navigation group to be set with category key by @caendesilva in #642
- Improve the redirect helper by @caendesilva in #645
- Apply code refactors from Rector by @caendesilva in #646
- Minor code refactors by @caendesilva in #647
- Refactor XML services by @caendesilva in #648
- Rewrite XML sitemap and RSS feed generators by @caendesilva in #649
- Code refactors by @caendesilva in #650
- Add class aliases for all facades by @caendesilva in #652
- Refactor Markdown classes by @caendesilva in #651
- Extract trait for methods used to flatten documentation pages by @caendesilva in #653
- Refactor DiscoveryService.php by @caendesilva in #654
- Bump loader-utils from 1.4.0 to 1.4.1 by @dependabot in #655
- Add facades for the foundation collection classes by @caendesilva in #656
- Improve code API between the File model and collections by @caendesilva in #657
- The ValidationService should not hardcode page paths by @caendesilva in #663
- Add an easy configuration option to store all source directories in a subfolder by @caendesilva in #660
- Refactor publishable templates by @caendesilva in #664
- Clean up the build service class by @caendesilva in #666
- Add a Hyde::markdown() helper by @caendesilva in #670
- Bump loader-utils from 1.4.1 to 1.4.2 by @dependabot in #671
- Add HtmlPage tests by @caendesilva in #672
- Add HydeKernel method to get all discovered page classes by @caendesilva in #673
- Allow media assets to be in subdirectories by @caendesilva in #674
- Rename BaseMarkdownPage::make() parameter $body to $markdown to match constructor by @caendesilva in #676
- Unslash page source and output paths by @caendesilva in #677
- Internal: Revert "Internal: Add full site test fixtures" by @caendesilva in #684
- Add configurable feature to load styles from the TailwindCSS Play CDN by @caendesilva in #683
- Internal: Add custom static analysis tool by @caendesilva in #691
- Internal: Refactor static analyser by @caendesilva in #692
- Internal: Update static analyser to provide G...
v0.64.0-beta - 2022-10-18
v0.64.0-beta - 2022-10-18
Note from the maintainer
First of all, I'm really sorry for the just insane amount of breaking changes in this update. I believe they are
necessary in order to make v1.0 a great and stable release. I hope you'll understand. Most of the changes
are likely to not affect normal usage, with the exception of the front matter navigation key changes.
This release will likely be the last HydePHP beta release. Next up: HydePHP v1.0!
About
This release performs a large amount of refactors and naming changes in preparation for the 1.0 release. Many of these refactors are breaking as several classes are moved around to new namespaces, several are merged, methods renamed, interfaces updated, and more, so forth, etc.
In general, these changes should only affect those who have written custom code that interacts with the framework, though you may need to update your configuration files, and any Blade components you may have published.
What you can expect to break
This update requires the configuration file to be updated.
The most high impact change is change of sidebar front matter options, and related areas. Please try updating your site in a test environment first, to see if you need to update any of your front matter.
Added
- Added a JSON build information manifest automatically generated after a site build #465
- Added a NavigationData object to HydePage.php
- Added a Route::is() method to determine if a given route or route key matches the instance it's called on
- Added a Site model #506
- Added a route:list command #516
- Added support for "dot notation" to the
HydePage::get()
method #497 - Added support for "dot notation" to route key retrievals in the
Route
facade #513 - Added support for plain HTML pages that are copied from the _pages to the _site directory #519
- Added class aliases for all page types so they can be used in Blade components without the full namespace #518
- Added a Redirect helper to create custom static HTML redirects #527
- Added automatic cache busting to the Asset helper #530
Changed
Major breaking changes
A very large number the changes in this update are breaking, as such, not all are marked as breaking. The really major changes that require especially close attention are here listed, please scroll down to see the rest as well as the concrete changes of this high level overview.
- Rename
Features::blogPosts
toFeatures::markdownPosts
- This means you must update your hyde.php config, otherwise blog posts might not be generated - Rename
Features::hasBlogPosts
toFeatures::hasMarkdownPosts
- Renamed base class AbstractPage to HydePage
- Renamed base class AbstractMarkdownPage to BaseMarkdownPage
- Renamed several HydePage methods to be more consistent
- Renamed property $title to $label in NavItem.php
- Renamed property $uri to $url in Image.php
- Removed both RouteContract interfaces (inlined into Route.php, which you now type hint against instead)
- Changed front matter key
navigation.title
tonavigation.label
- Changed front matter key
image.uri
toimage.url
for blog posts
Navigation schema changes
If you are using any of the following front matter properties, you will likely need to update them:
navigation.title
is nownavigation.label
- The
label
setting has been removed from documentation pages, usenavigation.label
instead - The
hidden
setting has been removed from documentation pages, usenavigation.hidden
instead - The
priority
setting has been removed from documentation pages, usenavigation.priority
instead
This change also bubbles to the HydePage accessors, though that will only affect you if you have written or published custom code that interacts with the framework.
General
- Merged interface PageContract into abstract class AbstractPage
- Merged interface RouteFacadeContract into the Route model implementation
- Merged interface RouteContract into the Route model implementation
- Merged
getCurrentPagePath()
method into existinggetRouteKey()
method in PageContract and AbstractPage - Replaced schema traits with interfaces, see #485
- Extracted all constructor methods in page schema traits to a new single trait ConstructPageSchemas
- The
StaticPageBuilder::$outputPath
property is now a relative path instead of absolute - Refactored how navigation and sidebar data are handled, unifying the API, see below for more details
- The algorithm for finding the navigation and sidebar orders has been updated, this may affect the order of your pages, and may require you to re-tweak any custom priorities.
- The navigation link to documentation index page now has default priority 500 instead of 100
- All usages where the RouteContract was type hinted with have been updated to type hint against the Route model implementation instead
- Changed Blade component identifier class 'sidebar-category' to 'sidebar-group'
- Changed Blade component identifier class 'sidebar-category-heading' to 'sidebar-group-heading'
- Changed Blade component identifier class 'sidebar-category-list' to 'sidebar-group-list'
- Changed the Route::toArray schema
- Split the page metadata handling so that global metadata is now handled by the Site model (meta.blade.php must be updated if you have published it)
- The MetadataBag class now implements Htmlable, so you can use it directly in Blade templates without calling
render()
- BladePage $view constructor argument is now optional
- internal: Move responsibility for filtering documentation pages to the navigation menus (this means that documentation pages that are not 'index' are no longer regarded as hidden)
- internal: The HydePage::$navigation property is now a NavigationData object instead of an array, however the object extends ArrayObject, so it should be mostly compatible with existing code
Class and method renames
- Renamed base class AbstractPage to HydePage
- Renamed base class AbstractMarkdownPage to BaseMarkdownPage
- Renamed command class HydeBuildStaticSiteCommand to HydeBuildSiteCommand
- Renamed legacy class FileCacheService to ChecksumService
- Renamed method
Hyde::getSiteOutputPath()
toHyde::sitePath()
- Renamed method
Hyde::formatHtmlPath()
toHyde::formatLink()
- Renamed class Metadata to MetadataBag
Namespace changes
- Moved class StaticPageBuilder to Actions namespace
- Moved class AbstractBuildTask to Concerns namespace
- Moved class AbstractMarkdownPage to Concerns namespace
- Moved class AbstractPage to Concerns namespace
- Moved class Application into Foundation namespace
- Moved class Includes to Helpers namespace
- Moved class Asset to Helpers namespace
- Moved class DocumentationSidebar into Navigation namespace
- Moved class NavigationMenu into Navigation namespace
- Moved class NavItem into Navigation namespace
- Moved class FindsContentLengthForImageObject into Constructors namespace
- Moved class Markdown into Models\Markdown namespace
- Moved class Markdown into Models\Markdown namespace
- Moved class FrontMatter into Models\Markdown namespace
- Moved class Author into Models\Support namespace
- Moved class DateString into Models\Support namespace
- Moved class File into Models\Support namespace
- Moved class Image into Models\Support namespace
- Moved class Route into Models\Support namespace
- Moved class Site into Models\Support namespace
- Moved class ValidationResult into Models\Support namespace
- Moved class MarkdownConverter into Actions namespace
- Moved class MarkdownFileParser into Actions namespace
Page-model specific
- Removed action class FindsNavigationDataForPage.php (merged into HydePage.php via the GeneratesNavigationData trait)
- Renamed method outputLocation to outputPath in HydePage.php
- Renamed method qualifyBasename to sourcePath in HydePage.php
- Renamed method getOutputLocation to outputLocation in HydePage.php
- Renamed method getFileExtension to fileExtension in HydePage.php
- Renamed method getOutputDirectory to outputDirectory in HydePage.php
- Renamed method getSourceDirectory to sourceDirectory in HydePage.php
- Changed named variable $basename to $identifier in HydePage.php
- Removed $strict option from the has() method HydePage.php
- Removed method renderPageMetadata from HydePage.php (use metadata() and/or metadata()->render() instead)
Documentation page front matter changes
- Removed property
$label
inDocumentationPage.php
(use$navigation['title']
instead) - Removed property
$hidden
inDocumentationPage.php
(use$navigation['hidden']
instead) - Removed property
$priority
inDocumentationPage.php
(use$navigation['priority']
instead) - Removed property
$category
inDocumentationPage.php
(use$navigation['group']
instead) - Removed front matter option
label
(usenavigation.label
instead) - Removed front matter option
hidden
(usenavigation.hidden
instead) - Removed front matter option
priority
(usenavigation.priority
instead) - Removed front matter option
category
(usenavigation.group
instead) - To access the sidebar label setting via class property, use
$navigation['label']
instead of$label
, etc. - To access the sidebar label setting via front matter getters, use
navigation.label
instead oflabel
, etc.
Markdown post/p...
v0.63.0-beta - 2022-09-01
About
This release contains breaking changes regarding the PostBuildTasks that may require your attention if you have created custom tasks.
Added
- Added the option to define some site configuration settings in a
hyde.yml
file. See #449 - Build tasks are now automatically registered when placed in the app/Actions directory and end with BuildTask.php
Changed
- Breaking changes to build hooks/tasks:
- Rename BuildHookService to BuildTaskService
- AbstractBuildTask::handle and BuildTaskContract::handle now returns null by default instead of void. It can also return an exit code
- The way auxiliary build actions are handled internally has been changed to use build tasks, see PR #453
- The documentation has been updated to consistently refer to these as tasks instead of hooks
- The RSS feed related generators are now only enabled when there are blog posts
- This means that no feed.xml will be generated, nor will there be any references (like meta tags) to it when there are no blog posts
- The documentation search related generators are now only enabled when there are documentation pages
- This means that no search.json nor search.html nor any references to them will be generated when there are no documentation pages
- The methods in InteractsWithDirectories.php are now static, this does not affect existing usages
- Renamed HydeSmartDocs.php to SemanticDocumentationArticle.php
- Cleans up the Author model class and makes the constructors final
Deprecated
- Deprecated ActionCommand.php as it is no longer used. It will be removed in the next release.
Fixed
- Fixed #443: RSS feed meta link should not be added if there is not a feed
What's Changed
- Compile TailwindCSS for production by @caendesilva in #434
- Update todo PHPDocs comments by @caendesilva in #440
- Handle todo comments by @caendesilva in #446
- Rename HydeSmartDocs to SemanticDocumentationArticle by @caendesilva in #447
- Only enable support files when there are related pages by @caendesilva in #448
- Add a YAML configuration file by @caendesilva in #449
- Refactor auxiliary build services and tasks by @caendesilva in #453
- Put the admin plugin on the shelf by @caendesilva in #454
- Display reason validation check is skipped by @caendesilva in #455
- Convert GeneratesDocumentationSearchIndex Action into Service by @caendesilva in #457
- Automatically discover build task files in the app directory by @caendesilva in #458
- Rename build hooks to build tasks by @caendesilva in #459
- Update build task output messages by @caendesilva in #460
- Resolve todo by @caendesilva in #461
- Clean up author model by @caendesilva in #462
- Add navigation menu dropdown component by @caendesilva in #464
Full Changelog: v0.62.0-beta...v0.63.0-beta
v0.62.0-beta - 2022-08-27
About
This update deprecates two interfaces (contracts) and inlines them into their implementations.
The following interfaces are affected: HydeKernelContract
and AssetServiceContract
. These interfaces were used to access the service container bindings. Instead, you would now type hint the implementation class instead of the contract.
This update will only affect those who have written custom code that uses or type hints these interfaces, which is unlikely. If this does affect you, you can see this diff to see how to upgrade. 68d2974. In short, simply replace HydeKernelContract
and AssetServiceContract
with HydeKernel
and AssetService
.
Changed
- The documentation page layout has been internally refactored to utilize more Blade components. This only affects those who have extended or customized the documentation components. Some documentation components have also been renamed.
Deprecated
- Deprecate interface HydeKernelContract, type hint the HydeKernel::class instead
- Deprecate interface AssetServiceContract, type hint the AssetService::class instead
Removed
- Removed legacy
.js-enabled
class from documentation pages
Fixed
- The list element of the documentation page sidebar had a conflicting ID (
#sidebar
) and has now been changed to#sidebar-navigation
which may break edge cases where this component is styled or interacted with outside of the framework. - Fix documentation page flickering #388
What's Changed
- Deprecate unnecessary contracts by @caendesilva in #428
- Refactor HydeKernel code to organized single-used traits by @caendesilva in #429
- Merge single use trait HasTableOfContents into DocumentationPage class by @caendesilva in #430
- Organize and restructure Foundation and Kernel code by @caendesilva in #431
- Refactor documentation layout to use more components by @caendesilva in #432
- Add x-cloak to fix #388 documentation page flickering by @caendesilva in #433
Full Changelog: v0.61.0-beta...v0.62.0-beta
v0.61.0-beta - 2022-08-17
About
Creates a new foundation class, the FileCollection. Which like the other foundation collections, discovers all the files. Running this part of the autodiscovery will further enrich the Hyde Kernel, and allow greater insight into the application. The end user experience should not be affected by this.
Added
- Adds a new FileCollection class to hold all discovered source and asset files
- Adds a new File model as an object-oriented way of representing a project file
Changed
- Move class PageCollection into Foundation namespace
- Move class RouteCollection into Foundation namespace
Fixed
- Fix #424 AbstractMarkdownPage save method should use Hyde::path()
Upgrade guide
Collection namespace change
You only need to do this if you have written custom code that uses the old namespace.
To upgrade the moved collection namespaces, simply replace the following namespace imports:
-use Hyde\Framework\PageCollection;
+use Hyde\Framework\Foundation\PageCollection;
-use Hyde\Framework\RouteCollection;
+use Hyde\Framework\Foundation\RouteCollection;
What's Changed
- Code quality improvements by @caendesilva in #423
- Move core collections into foundation namespace by @caendesilva in #425
- Discover filesystem upon booting the framework by @caendesilva in #426
- Fix #424 AbstractMarkdownPage save method should use Hyde::path() by @caendesilva in #427
Full Changelog: v0.60.0-beta...v0.61.0-beta