Compare commits

...

485 Commits

Author SHA1 Message Date
J. King 2557c22410 Update dependencies 3 days ago
J. King 4ca7b65a65 Update dependencies 2 weeks ago
J. King 4d37ae30ae Update dependencies 3 weeks ago
J. King d1da6fbe5e Use cases rather than casting bools to int in SQL 4 weeks ago
J. King d54733ad98 Update link to Nextcloud News documentation again 2 months ago
J. King a0c31fac5d Merge branch 'reader' 2 months ago
J. King 59358ec35b More PHP 7 fixes 2 months ago
J. King 90b66241b3 Fixes for PHP 7 2 months ago
J. King 761b3d5333 Return removed articles correctly in Miniflux 2 months ago
J. King d64dc751f9 Tests for query filters 2 months ago
J. King f51acb4264 Build exceptions correctly in Miniflux for clarity 2 months ago
J. King 300225439c Fix trivial error in Miniflux 2 months ago
J. King c6cc2a1a42 Restore coverage for Query class 2 months ago
J. King a44fe103d8 Prototype for nesting query filters 2 months ago
J. King 630536d789 Tests for union context 2 months ago
J. King 206c5c0012 Fill in union context 2 months ago
J. King 0c8f33c37c Remove setCTE and pushCTE from query builder 2 months ago
J. King 26e431b1a5 Simplify more queries 2 months ago
J. King 336207741d Add missing API documentation 2 months ago
J. King 6863c182d7 Update reference to the "Reeder" client 2 months ago
J. King f2aad7188c Update links to TT-RSS documentation 2 months ago
J. King 65b1bb4fcd Allow multiple dates in TT-RSS searches 2 months ago
J. King 2c5b9a6768 Fix missing TTRSS coverage 2 months ago
J. King 17832ac63e Allow timezone in TT-RSS search queries 2 months ago
J. King e65069885b Clean up obsolete FIXMEs 2 months ago
J. King 7e5d8494c4 Tests for selecting arrays of ranges 2 months ago
J. King e6505a5fda Work around possible MySQL bug 2 months ago
J. King 2acacd2647 Implement handling for arrays of ranges 2 months ago
J. King f6799e2ab1 Tests for date ranges in contexts 2 months ago
J. King 33a3478a58 Avoid use of PHP 7.4 feature 2 months ago
J. King 2489743d0f Further simplifications 2 months ago
J. King 0bd01849bb Remove unnecessary in() clause 2 months ago
J. King 895c045c9b Simplify folder selection in article queries 2 months ago
J. King fe02613214 Fix coverage 2 months ago
J. King 427bddd3b7 Allow multiple date ranges 2 months ago
J. King 53ba591720 Finish up article selection refactor 2 months ago
J. King 97dfef3267 Fix typos 2 months ago
J. King 396ca86482 Start on removal of conditional CTEs 2 months ago
J. King 4a87926dd5 Fix up context tests 2 months ago
J. King 6f1332c559 Start to shore up testing 2 months ago
J. King 308b592b18 Clean up coontext classes 2 months ago
J. King 983fa58ec8 Convert article and edition ranges to atomic 2 months ago
J. King 2c2bb4a856 Retrofits dates to use ranges 2 months ago
J. King c993168002 Update URL of Nextcloud News documentation 2 months ago
J. King 73497688fc Break contexts up into traits 2 months ago
J. King 1b0256d6ce Abandon automation of binary packaging for now 3 months ago
J. King 144a41e061 Prepare new version 3 months ago
J. King 60b4002329 Revert "Document that we actually emulate Miniflux 2.0.29" 3 months ago
J. King f24ec8b00b Address security vulnerability in Guzzle's PSR-7 3 months ago
J. King d379aa2253 Document that we actually emulate Miniflux 2.0.29 3 months ago
J. King b707ecc942 Tag new version 5 months ago
J. King afe26fb8e1 Style fixes 5 months ago
J. King 3a219a591d Update dependencies 5 months ago
J. King b5579d6e43 Support PHP 8.1 5 months ago
J. King b660508009 Improve MySQL test performance 6 months ago
J. King 3c884f521b Update dependencies 8 months ago
J. King 70b063e028 Make parts of generic packaging conditional 11 months ago
J. King cf3d270077 Merge branch 'deb' 11 months ago
J. King 1fa75aba4a Generate Debian source package without deb tooling 11 months ago
J. King 317d23c1bb Fix copy-paste error in manual 12 months ago
J. King 75dbe380ba Add Pandoc to AUR arsse-git build dependencies 12 months ago
J. King 08250841a0 Don't sign packages 12 months ago
J. King 2452264893 Date release 12 months ago
J. King c1e57eb01f Add manual installation instructions 12 months ago
J. King e75e0dfd2f Clarify exactly what "older Debians" is 12 months ago
J. King 6c11c9e485 Fix Debian bugs 12 months ago
J. King 40a2856ae8 Use correct PHP_FPM socket paths for Debian 12 months ago
J. King c7dcc36ba1 Update version 12 months ago
J. King a31fb896d9 Update changelog 12 months ago
J. King def4a3bc77 Move Debian adaptations to Debian packaging rules 12 months ago
J. King cd89472575 Fix up Debian documentation 12 months ago
J. King beea98040c Initial documentation for Debian packages 12 months ago
J. King 59ff88f3b6 Add all-in-one packaging task 12 months ago
J. King 4070870421 Enforce external tooling requirements 12 months ago
J. King 5ab9dc3840 Add missing pbuilder script 12 months ago
J. King 20ffb2484a Simply Robo input for Arch and Deb packaging 12 months ago
J. King f91b3c0120 Output packages to a "release" directory 12 months ago
J. King 4121fc3e21 Database server ports must be integers 12 months ago
J. King 7ad3611a84 Set up configuration file for Debian properly 12 months ago
J. King 5412eb348f Clean up maintainer scripts 12 months ago
J. King c936ecc1af Fix another typo 12 months ago
J. King 99c923b1b1 Fix typos 12 months ago
J. King c2237532eb Add glue for dbconfig-common configuration 12 months ago
J. King 9687ce026e Add MySQL back to Debian depeendencies 12 months ago
J. King 30bed8a9d5 Typo 12 months ago
J. King cf9059c2b0 Update tooling 12 months ago
J. King 93bcf93685 Prototype Debian maintainer scripts 12 months ago
J. King 46e20be983 Test for service reloading 12 months ago
J. King ad32bf3340 Style fixes 12 months ago
J. King b8ac646d22 Fix up hangup signal handling 12 months ago
J. King 37c58e186a Handle hangup signal 12 months ago
J. King 88fe3e76cb Fix up missing-extension message 12 months ago
J. King 3c8ee42666 Basic tests for exception checking 12 months ago
J. King 04adc3b997 Document forking in the manpage 12 months ago
J. King c49cb72528 Fail gracefully when extensions are missing 12 months ago
J. King c9a2393a4e Note requirement for filter extension 12 months ago
J. King 75e87f31a0 Prototype code to check for missing extensions 12 months ago
J. King 3b51d4daea Fix license for Debian package 12 months ago
J. King ce9dfc3f30 Add init script to Debian files 12 months ago
J. King cbc7cd8ea7 Add an explicit path to init script 12 months ago
J. King 2e29f3f76e Correct typo 12 months ago
J. King 8a1a1eee42 Prototype init script 12 months ago
J. King e160189224 Handle exceptions from child processes 12 months ago
J. King e9394e8599 More forking tweaks 1 year ago
J. King 577356cd3d Fork error test 1 year ago
J. King 514cb0a351 Ow 1 year ago
J. King 0bb5e916d2 Test PID writing 1 year ago
J. King 2767ab755e Use D modifier in pattern 1 year ago
J. King a4036afbf8 Partial tests for PID file reading 1 year ago
J. King 32c9d761c3 Clean up more exceptions 1 year ago
J. King 5b3e8fbef0 Refine some exceptions 1 year ago
J. King b9fd9ac32e Tweaks 1 year ago
J. King 23749b51aa Tests for path resolution 1 year ago
J. King dfaf44ac68 Basic path resolution tests 1 year ago
J. King bab64add9b Separate PID conflict checking from PID claiming 1 year ago
J. King 822158d1bd Update dependencies 1 year ago
J. King f1c29c99c7 Finish testing PID file path checking 1 year ago
J. King 59cf27089a More daemon cleanup 1 year ago
J. King 4e1193bab2 Move forking daemon support code to own class 1 year ago
J. King 32e04e3938 Move forking and related to Service class 1 year ago
J. King 55acb87577 Start on PI(D file resolution tests 1 year ago
J. King e8cab78bd6 Handle last possible PID failures 1 year ago
J. King 9595c4f019 Start filling out PID file exceptions 1 year ago
J. King 372bf9f630 Exclude code from coverage 1 year ago
J. King 4ffc29781d Remove references to oldpass param 1 year ago
J. King 47af739e47 Catch more PID path failures 1 year ago
J. King 2c7b16ed27 Respond to termination signals and delete PID file 1 year ago
J. King 410310282f Load configuration after forking 1 year ago
J. King 29b83b4453 Prototype forking daemon 1 year ago
J. King fc2abc1203 Use D modifier for all patterns with $ anchors 1 year ago
J. King 59c5c2eb14 Oops 1 year ago
J. King 3cd3ac4a51 Correct filename conflict 1 year ago
J. King 837895fd6a Adapt dist files for Debian 1 year ago
J. King b4c9413130 Update README 1 year ago
J. King bafb788b02 Correct errors in manual 1 year ago
J. King 68e3cd82ca Don't include section number in title 1 year ago
J. King c3fa4788d6 Use proper metadata block for manpage 1 year ago
J. King 3567f294a6 Merge branch 'manpage' 1 year ago
J. King 8c0f047747 Update HTML manual to mention man page 1 year ago
J. King fd76b1b611 Add examples to manual page 1 year ago
J. King 4317a96db1 Work around double spacing 1 year ago
J. King 62d49e0d3c Fill out most of the manual page 1 year ago
J. King 88487d27a2 Expand manual page 1 year ago
J. King 46c88f584f Fix copying of man page in PKGBUILDs 1 year ago
J. King 92823d5bc2 Create directories before executing Pandoc 1 year ago
J. King 3e55ab3849 Move man pages to their own directory 1 year ago
J. King 2ec7acc50b Turn off "smart" character substitution in Pandoc 1 year ago
J. King d3a983e7f0 Move the markdown manpage 1 year ago
J. King 176aac0ad7 Fix stupid typo properly 1 year ago
J. King e439dd8277 Fix manpage in Arch PKGBUILD 1 year ago
J. King 6cc9f96728 Prototype manual page 1 year ago
J. King d4569c77a9 Add database location to tmpfiles 1 year ago
J. King add1acc87a Fix more lintian complaints 1 year ago
J. King 14d3cdfe58 Hopefully fix some Debian problems 1 year ago
J. King 281760be71 Address some lintian complaints 1 year ago
J. King 758a02d667 Move generic configuration file 1 year ago
J. King 18846c19cb Add install list for Debian package 1 year ago
J. King b5bbdc2bc6 Date release 1 year ago
J. King 3be6c9984d Update Apache documentation in manual 1 year ago
J. King 6c84b2199e More Apache fixes 1 year ago
J. King f9cbac2c31 Hopefully fix Apache configuration 1 year ago
J. King 32ca0c3fe4 Appease GitHub once and for all 1 year ago
J. King a81bd0e45c Add whitespace 1 year ago
J. King 86d82a2586 Use global flag when replacing with sed 1 year ago
J. King f0bf55f9cf Add ExecStart to parent systemd unit 1 year ago
J. King 1055611940 Add version constraints to Arch dependencies 1 year ago
J. King 2ccfb1fd33 Fix packaging process 1 year ago
J. King 9eabfd0f27 Fix up sed usage in PKGBUILD 1 year ago
J. King 0236b42052 Use tmpfiles to create link to config file 1 year ago
J. King 8aa9d81fd1 Update changelog 1 year ago
J. King 11fc83da60 Significant edits to the manual 1 year ago
J. King de55290746 Fix build dependencies for Deb package 1 year ago
J. King f844c17a94 More Debian fixes 1 year ago
J. King 0de9647809 Add compat file 1 year ago
J. King e653fb3f73 Enhancements to Debian files 1 year ago
J. King b7909d7cd3 Downgrade tool dependencies for Ubuntu 1 year ago
J. King 3c9f4dd66f Prototype Debian rules file 1 year ago
J. King 3537e74d49 Update dependencies 1 year ago
J. King d031d931a5 Tidy up the Robo file further 1 year ago
J. King 38cb1059b2 Shorten output of packaging task 1 year ago
J. King 16174f11b6 Add changelog parsing to packaging task 1 year ago
J. King 073f6b3c39 Prototype Debian control file and other changes 1 year ago
J. King 3f3f449da1 Re-organize manual 1 year ago
J. King 2260b7cc50 Back up all Web server configuration 1 year ago
J. King 61eb4a252e Fix doc URLs 1 year ago
J. King 3f401f1cfa Fix typo 1 year ago
J. King 6c750d2dc0 Documentation for installing on Arch 1 year ago
J. King 6d790c5efd Add prototype for new Apache configuration 1 year ago
J. King 3a3b9231df Use generic configuration where possible 1 year ago
J. King fbe03a2534 Use chmod instead of touch 1 year ago
J. King e75f8cebfb Add Arch packaging to Robo file 1 year ago
J. King 79391446cd Start moving Arch build responsibility to Robo 1 year ago
J. King 19ab9df063 Fix more bugs 1 year ago
J. King 568b12600b Drop privileges when executing CLI 1 year ago
J. King 488af80a85 Update changelog 1 year ago
J. King 44612cfe8f Add tmpfiles 1 year ago
J. King d1fd6e9653 Correct permissions 1 year ago
J. King a97ca23631 Don't try to enable extensions 1 year ago
J. King e2b182ebe6 Fix errors in Arch config file 1 year ago
J. King 3eab5aad5d Fix adding users to a blank database 1 year ago
J. King 805a508ea6 Use correct state path 1 year ago
J. King 3ebc23ab13 Tweaks 1 year ago
J. King 7abdf05b7f Make package from local files for now 1 year ago
J. King 971c12ff9f Rename sample to example 1 year ago
J. King febc7c7ca4 Add configuration for Nginx 1 year ago
J. King edb146b826 Use PHP-FPM instead of uWSGI 1 year ago
J. King 7ba4cabdde Prototype Arch PKGBUILD and supporting files 1 year ago
J. King 114dcc568f Update dependencies 1 year ago
Dustin Wilson 1331b14a04 Reverting for now 1 year ago
Dustin Wilson 035feae0ce Removed postcss in favor of sass for building manual theme 1 year ago
J. King 8e063bea2f Appease GitHub again 1 year ago
J. King 4a9e66d872 Fix inconsistent grammar 1 year ago
J. King fa4ab3218a Version bump 1 year ago
J. King c4260323bc Answer 201 to PUTs like Miniflux 1 year ago
J. King abc291460c Update Web server configuration in manual 1 year ago
J. King bff3e21cd2 Date release 1 year ago
J. King 764b604edd Note Fiery Feeds' support for HTTP auth with Fever 1 year ago
J. King 4b0571299a Add results of client testing 1 year ago
J. King 2e4c57b75b Work around Microflux for Miniflux 1 year ago
J. King dcb81ea043 Only provide icon ID when there is data 1 year ago
J. King 77a9bb801d Defer testing of Maxiflux 1 year ago
J. King f90b78a976 Fix compatibility issues 1 year ago
J. King e6b4edd160 Supress deprecation messages during runtime 1 year ago
J. King 8aca42c882 Minor fixes for correctness 1 year ago
J. King 458126416c Fix PostgreSQL coverage annotations 1 year ago
J. King 6b7257a6c4 Work around more MySQL stupidity 1 year ago
J. King 5cfa01f4d5 Work around MySQL stupidity 1 year ago
J. King 64ca5f1be0 Fix strict comparison failures 1 year ago
J. King ed285ee28b Shut Robo up 1 year ago
J. King 4642b9fd1c PRovide upgrade path for assertRegExp 1 year ago
J. King 3a1fcaac39 Remove last uses of Phake 1 year ago
J. King 75148bfbc6 Convert NCNv1 tests to PHony 1 year ago
J. King 95812b8ba3 Convert last TT-RSS test 1 year ago
J. King a322d034f3 More TT-RSS test conversions to Phony 1 year ago
J. King 2d951fb071 More TT-RSS test conversions 1 year ago
J. King c7350c6d57 Convert Miniflux tests to using Phony 1 year ago
J. King 9dfe3919cf Progress on TT-RSS tests 1 year ago
J. King e90aa585b2 PArtial rewrite of TT-RSS tests 1 year ago
J. King 2348786a92 Start on replacing Phake with Phony 1 year ago
J. King 9b369d902f Update tooling for PHP 8 1 year ago
J. King dab4cb21e6 Geekttrss seems to work 1 year ago
J. King d836d6a243 Add more clients to the untested list 1 year ago
J. King 50b2ca4500 Document tokens and metadata in the manual 1 year ago
J. King 9c0a3b7a57 Fix typo 1 year ago
J. King 3ba82b7c6d Fix CLI bootstrap problem 1 year ago
J. King fa6d641634 Implement CLI for tokens 1 year ago
J. King 3795b1ccd8 Simplify CLI command processing 1 year ago
J. King e8ed716ae6 Fix errors in CLI documentation 1 year ago
J. King 97d1de46f8 Fill in upgrade notes 1 year ago
J. King 68422390da Implement CLI for user metadata 1 year ago
J. King b7c7915a65 Enforce admin rquirements in NCNv1 1 year ago
J. King a760bf2ded Implement "t" and "f" booleans in TT-RSS 1 year ago
J. King 9ad4a37ddf Tests and fixes for Miniflux with PDO 1 year ago
J. King 687995c497 More potential Miniflux Web clints 1 year ago
J. King 29761d767a Update documentation 1 year ago
J. King dad74c2616 Implement Fever icons 1 year ago
J. King 90034ac1f8 Style fixes 1 year ago
J. King 211cea648e Implement TT-RSS API level 15 1 year ago
J. King f2e5d567ec Update sample Web server configuration 1 year ago
J. King eae0ba4b68 Tests fortoken operations 1 year ago
J. King 9cc779a717 Import/export tests 1 year ago
J. King 37fd2ad4e9 Tests for new exception features 1 year ago
J. King 6c2de89f3e Revert copy-paste corruption 1 year ago
J. King 54a6fcc0d6 Consolidate object factoriesinto one place 1 year ago
J. King a0d563e468 Update dependencies 1 year ago
J. King b4ae988b79 Prototype OPML handling 1 year ago
J. King 681654f249 Documentation update 1 year ago
J. King dd29ef6c1b Add feed refreshing stubs 1 year ago
J. King ab1cf7447b Implement article marking 1 year ago
J. King 334a585cb8 Implement single-entry querying 1 year ago
J. King a7d05a7717 Feed- and category-specific entry list routes 1 year ago
J. King 00ad1cc5b9 Last tests for article querying 1 year ago
J. King d4a6909cf6 Positional article queries tests 1 year ago
J. King e42e25d333 More article query tests 1 year ago
J. King f7b3a473a9 Clarify ordering syntax rationale 1 year ago
J. King af51377fe9 First set of article query tests 1 year ago
J. King 23ca6bb77b Count articles without offset or limit 1 year ago
J. King 0e7abfa8f9 Largely complete article querying 1 year ago
J. King a43f8797c5 Add ability to sort by folder ID or name 1 year ago
J. King ed27e0aaaa Sort nulls consistently 1 year ago
J. King 9d7ada7f59 Partial implementation of article sorting 1 year ago
J. King 007183450a Context and column list for article queries 1 year ago
J. King 197cbba77d Document article column definitions 1 year ago
J. King ddbcb598e8 Match more closely Miniflux query string behaviour 1 year ago
J. King bb89083444 Perform strict validation of query parameters 1 year ago
J. King 1e924bed83 Partial query string normalization 1 year ago
J. King 3b2190ca10 Include folder names directly in subscription list 1 year ago
J. King ad094f5217 Don't return icons without types at all 1 year ago
J. King cd5f13f4b9 Tests for icon querying 1 year ago
J. King 76f1cc8e91 Adjust users of subscriptionIcon 1 year ago
J. King cc2672fb0a Improve icon fetching interface 1 year ago
J. King 1eea3b3a4c Fix feed update test 1 year ago
J. King 8e749bb73c Report 404 on icons for absence of data 1 year ago
J. King bdf9c0e9d2 Prototype feed icon querying 1 year ago
J. King 9197a8d08b Implement feed deletion 1 year ago
J. King 8eebb75b18 Implement feed editing 1 year ago
J. King 5a8a044a92 Implement single-feed querying 1 year ago
J. King a646ad77b7 Use a read transaction when computing filter rules 1 year ago
J. King cca4b205e4 Correct error output of getCategoryFeeds 1 year ago
J. King a34edcb0d1 Last tests for feed creation 1 year ago
J. King 7893b5f59d More feed adding tests 1 year ago
J. King 36cc4928b9 Test feed fetching errors for Miniflux 1 year ago
J. King 727864f401 Implement feed listing by category 1 year ago
J. King 4972c79e32 Allow simpler feed exception creation 1 year ago
J. King 6936f365e4 Add calls coming in next version of Miniflux 1 year ago
J. King fd25be5c27 Basic tests for feed creation 1 year ago
J. King e7b2f54183 Prototype feed creation 1 year ago
J. King 14d2d19ae1 Tests for Miniflux feed listing 1 year ago
J. King 2cf4bf0d4d Prototype Miniflux feed listing 1 year ago
J. King 86897af0b3 Add ability to enable scraper 1 year ago
J. King 7897585d98 Test scraping 1 year ago
J. King 76f70119fd More work on scraping 1 year ago
J. King 4cb23dd198 Partial implementation of proper content scraping 1 year ago
J. King e74b44cc39 Change favicon to icon_url and add icon_id 1 year ago
J. King 2536c9fe03 Last tests for article filters 1 year ago
J. King 9f2b8d4f83 Imprement setting of filter rules 1 year ago
J. King 618fd67f80 Set marks for filtered articles on feed refresh 1 year ago
J. King 7a6186f2d7 Update Miniflux documentation 1 year ago
J. King 097362881b Tests for filtering during feed parsing 1 year ago
J. King a4146ec129 Start on test for filtering during feed parsing 1 year ago
J. King 9e29235d87 Don't fetch from example.com during tests 1 year ago
J. King 549c7bdc72 Style fixes 1 year ago
J. King 4f34b4ff29 Rule refactoring 1 year ago
J. King c1eff8479c Simplify configuration property caching 1 year ago
J. King 6dba8aa66b Fixes for rules 1 year ago
J. King 461e256052 Work around MySQL syntax weirdness 1 year ago
J. King 47ae65b9d3 Function to apply filter rules 1 year ago
J. King b12f87e231 Support Xdebug 3.x for coverage 1 year ago
J. King ffc5579a7a Partial implementation of filter rule handling 1 year ago
J. King 7e17332714 Implement marking all as read for Miniflux 2 years ago
J. King 31f0539dc0 Implement Miniflux user deletion 2 years ago
J. King bf95b134bd Fix up error codes for category changes 2 years ago
J. King 197922f92f Implement Miniflux user creation 2 years ago
J. King ee0c3c9449 Tests and fixes for user modification 2 years ago
J. King cc648e1c3a Update tooling 2 years ago
J. King 67f577d573 Bump emulated Miniflux version 2 years ago
J. King f58005640a Prototype user modification 2 years ago
J. King 2946d950f2 Forbid more user names 2 years ago
J. King 405f3af257 Invalidate sessions and Fever passwords when renaming users 2 years ago
J. King 5ec04d33c6 Add backend functionality to rename users 2 years ago
J. King 88cf3c6dae Test filter rule retrieval 2 years ago
J. King d66cf32c1f Style fixes 2 years ago
J. King a81760e39d Aggressivly clean up hidden articles 2 years ago
J. King ade0402210 Adjust TT-RSS to ignore hidden items 2 years ago
J. King f33359f3e3 Move some Miniflux features to abstract handler 2 years ago
J. King b7ce6f5c79 Adjust Fever to ignore hidden items 2 years ago
J. King b2fae336e8 Adjust Nextcloud News to ignore hidden items 2 years ago
J. King f0bfe1fdff Simplify editionLatest Database method 2 years ago
J. King 8527c83976 Exclude hiddens from subscription unread count 2 years ago
J. King 97010d8822 Tests for marking articles hidden 2 years ago
J. King 86c4a30744 Adjust articleStarred function to discount hidden 2 years ago
J. King ffc98daff3 Adjust article marking tests to account for new hidden mark 2 years ago
J. King 8ae3740d5f Implement querying articles by hidden mark 2 years ago
J. King d5cd5b6a17 Implement hidden marks 2 years ago
J. King c43d0dcae3 Groundwork for filtering rules 2 years ago
J. King 95a2018e75 Implement caategory marking as read 2 years ago
J. King 5124f76b70 Implementcategory deletion 2 years ago
J. King eb079166de Tests for category renaming 2 years ago
J. King 3ebb46f48e Some work on categories 2 years ago
J. King 2e6c5d2ad2 Query Miniflux categories 2 years ago
J. King 4b73698381 More user query tests 2 years ago
J. King ebdfad535c More Miniflux user tests 2 years ago
J. King 7c841b5fc2 Test for listing users 2 years ago
J. King 5c83655541 Add modification timestamp to user metadata 2 years ago
J. King d85988f09d Prototype Miniflux user querying 2 years ago
J. King 2eedf7d38c Finally fix MySQL 2 years ago
J. King e9d449a8ba Fix user manager and tests 2 years ago
J. King ce68566fcb Hopefully fix MySQL 2 years ago
J. King a431243421 Fixes for MySQL and PostgreSQL 2 years ago
J. King fcf1260dab Adjust database portion of user property manager 2 years ago
J. King 978929aabd WIP redesign of user properties 2 years ago
J. King 0f3e0411f0 Document some differences frrom Miniflux 2 years ago
J. King 94154d4354 Implement Miniflux feed discovery 2 years ago
J. King 669e17a1f6 Add ability to discover multiple feeds 2 years ago
J. King 2a0d6e6599 OPTIONS tests 2 years ago
J. King 7fa5523a7d Simplify handling of invalid paths and methods 2 years ago
J. King def07bb1ad Tests for Miniflux authentication 2 years ago
J. King 8c059773bb Update tooling 2 years ago
J. King 90117b5cd7 Fix Miniflux strip value 2 years ago
J. King 06dee77bac First tests for Miniflux 2 years ago
J. King f6cd2b87ce Port token data from Microsub branch 2 years ago
J. King d4bcdcdadd Fix TTRSS coverage 2 years ago
J. King d3ebb1bd56 Last set of tests for user management. Fixes #180 2 years ago
J. King e16df90bae Style fixes 2 years ago
J. King 180b4ecc9b More user tests 2 years ago
J. King 27d9c046d5 More work on user management 2 years ago
J. King 7f2117adaa Differentiate between duplicate/missing users and other failure modes 2 years ago
J. King 351f972512 Tests for internal user driver 2 years ago
J. King 4baf5fa2f9 Tests for new user functionality in Database 2 years ago
J. King dde9d7a28a Refinements to user manager 2 years ago
J. King eb2fe522bf Last bits of the new user metadata handling 2 years ago
J. King 5a17efc7b5 Clean up user driver API 2 years ago
J. King 771f79323c Strip out remnants of the authorizer 2 years ago
J. King 576d7e16a8 Fix handling of bytea-typed nulls 2 years ago
J. King 1b1789988a More client compatibility updates 2 years ago
J. King 532ce4a502 Prototype changes to user management 2 years ago
J. King ee050e505c Add more Android clients to manual 2 years ago
J. King 9fb185a8e2 Add TT-RSS Web client to manual 2 years ago
J. King b62c11a43e Lasts tests for icon cache; fixes #177 2 years ago
J. King 1d3725341a Fix detection of Xdebug for coverage 2 years ago
J. King 311910795a More tests for icon cache 2 years ago
J. King 3d3c20de5c Don't anticipate API features 2 years ago
J. King 4d532cba3f Initial Miniflux documentation 2 years ago
J. King e861cca53d Integrate schema change necessary for microsub 2 years ago
J. King b24c469dca Update changelog 2 years ago
J. King 8f739cec85 Excluse empty-string URLs from icons table 2 years ago
J. King 424b14d2b4 Clean up use of subscriptionFavicon 2 years ago
J. King dd1a80f279 Consolidate subscription icon querying 2 years ago
J. King 4fc208d940 More consistent icon API 2 years ago
J. King c3a57ca68b Tests for icon cache population 2 years ago
J. King bd650765e1 Generalize icon fetching tests 2 years ago
J. King 50fd127ac4 Test for icon fetching 2 years ago
J. King 7c40c81fb3 Add icons to the database upon feed update 2 years ago
J. King c25782f98c Partial icon handling skeleton 2 years ago
J. King af675479b8 Remove excess whitespace 2 years ago
J. King 2438f35f3d Add icon cache to database 2 years ago
J. King 5e60da00a9 Merge branch 'master' into miniflux 2 years ago
J. King b5f959aabf Fix blob tests 2 years ago
J. King 41bcffd6fb Correctly query PostgreSQL byte arrays 2 years ago
J. King c21ae3eca9 Correctly send binary data to PostgreSQL 2 years ago
J. King c92bb12a11 Prototype Miniflux dispatcher 2 years ago
J. King 905f8938e2 Typo 2 years ago
J. King 8ad7fc81a8 Initially mapping out of Miniflux API 2 years ago
J. King 16d2e01668 New schema for PostgreSQL and MySQL 2 years ago
J. King 4db1b95cf4 Add numeric IDs and other Miniflux data to SQLite schema 2 years ago
J. King 3ac010d5b6 Fix tests in absence of database extensions 2 years ago
J. King b58a326461 Prepare for schema changes 2 years ago
J. King e9682bc601 Correct typos 2 years ago
J. King 5a09dcb3ed Update changelog 2 years ago
J. King e3ebd89aa8 Add NewsFlash to supported clients 2 years ago
J. King 0117e7f9bf Relax Fever's HTTP correctness for client compat 2 years ago
J. King 7ef02e1d65 Revert wishful thinking 2 years ago
J. King 3d909da1e5 Update iOS/macOS client URLs 2 years ago
J. King 6520ed38fb Update dependencies 2 years ago
J. King 9b11001402 Fix sample Nginx configuration 2 years ago
J. King 2e0ed5e923 Add reference to MariaDB missing features 2 years ago
J. King afbf3be031 Use 'union all' instead of 'union' in queries 2 years ago
J. King 6ee7ca4aa4 Update PicoFeed to latest release version 2 years ago
J. King 9bc1373998 Version bump 2 years ago
J. King 0f3ada598e Work around Picofeed bug 2 years ago
J. King d29917caf8 Update Yarn again 2 years ago
J. King e75d15e552 Update dependencies 2 years ago
J. King 77aef9c995 Yarn update 2 years ago
J. King ee549cdee7 Appease GitHub (yet again) 2 years ago
J. King 2620314583 GitHub should now be kept in sync at all times 2 years ago
J. King 20fe65b67e Make changelog point to manual instead of readme 2 years ago
J. King 66a4f71ef3 Minor simplification 2 years ago
J. King 5f35a680e3 Appease GitHub (again) 2 years ago
J. King c1e27684d4 Appease GitHub 2 years ago
J. King 1268e5fd73 Finally fix DST error in tests 2 years ago
J. King 7777ff962f Group more style rules under PSR-12 2 years ago
J. King e60f7ea03f Add class constant visibility 2 years ago
J. King bc53a2d24a Style fixes 2 years ago
J. King a7f69c845f Use a more specific house style 2 years ago
J. King 3aa17ee70f Whitespace 2 years ago
J. King e8091fa740 Speed up coverage slightly. 2 years ago
J. King 9696d55b31 Prepare ugfix release 2 years ago
J. King 670fb61299 Merge branch 'php7.1' 2 years ago
J. King 1d514e4739 Remove forked picofeed repository 2 years ago
J. King cf4a9e6436 Use archived copy of MySQL critique 2 years ago
J. King 39a1895867 Refine and cover new Guzzle error handling 2 years ago
J. King cb41912f36 Merge branch 'master' into php7.1 2 years ago
J. King d7e10e40ee Prefer PCOV for code coverage 2 years ago
J. King 04878bda9d Documentation changes 2 years ago
J. King 06d3af0ac3 Fix remaining Picofeed-related test failures 2 years ago
J. King 9cb7cf485d Style fix 2 years ago
J. King e29c573210 Update tools 2 years ago
J. King 49d003082d Fix problems with nicolus/picofeed 2 years ago
J. King e583ffea67 Start on integrating well-maintained picofeed fork 2 years ago
J. King b5f118e8cb Cleanup 2 years ago
J. King bbace7a0ac Use void and nullable return types where practical 2 years ago
J. King 5838af892f Replace references to Zend with Laminas 2 years ago
J. King 0565553d4a Change PHP requirement in manual 2 years ago
J. King 9e1087914c Change tool dependencies to "dev" type 2 years ago
J. King 2fa2799b64 Require PHP 7.1 in Composer 2 years ago
J. King 14ef33879b Re-arrange database tests by engine 2 years ago
J. King c4ee7254cd Refactor some tests to use data providers 2 years ago
J. King fb2602fe04 Don't load actual configuration during CLI tests 3 years ago
J. King 38501ce4f2 Add Newsie to documented clients 3 years ago
J. King cca56b09fc Order failing tests first 3 years ago
J. King 4421a9e510 Offload coveraage whitelisting to xdebug 3 years ago
J. King 524b1ca140 Merge branch 'master' into phpunit-8 3 years ago
J. King c1a3e64bfa Fix new tests to work with PHPUnit 8 3 years ago
J. King de424e42f6 Merge branch 'master' into phpunit-8 3 years ago
J. King 17a2fa96f8 Upgrade to PHPUnit 8 3 years ago
  1. 22
      .gitignore
  2. 62
      .php_cs.dist
  3. 109
      CHANGELOG
  4. 31
      README.md
  5. 605
      RoboFile.php
  6. 41
      UPGRADING
  7. 12
      arsse.php
  8. 20
      composer.json
  9. 1223
      composer.lock
  10. 23
      dist/apache.conf
  11. 34
      dist/apache/arsse-loc.conf
  12. 11
      dist/apache/arsse.conf
  13. 9
      dist/apache/example.conf
  14. 57
      dist/arch/PKGBUILD
  15. 74
      dist/arch/PKGBUILD-git
  16. 10
      dist/arsse
  17. 15
      dist/arsse.service
  18. 8
      dist/config.php
  19. 16
      dist/debian/arsse.config
  20. 1
      dist/debian/arsse.dirs
  21. 18
      dist/debian/arsse.install
  22. 1
      dist/debian/arsse.links
  23. 29
      dist/debian/arsse.postinst
  24. 20
      dist/debian/arsse.postrm
  25. 16
      dist/debian/arsse.prerm
  26. 1
      dist/debian/compat
  27. 15
      dist/debian/config.php
  28. 32
      dist/debian/control
  29. 34
      dist/debian/copyright
  30. 44
      dist/debian/dbconfig-common.php
  31. 6
      dist/debian/lintian-overrides
  32. 40
      dist/debian/pbuilder.sh
  33. 26
      dist/debian/rules
  34. 1
      dist/debian/source/format
  35. 2
      dist/debian/source/lintian-overrides
  36. 78
      dist/init.sh
  37. 57
      dist/nginx.conf
  38. 12
      dist/nginx/arsse-fcgi.conf
  39. 49
      dist/nginx/arsse-loc.conf
  40. 17
      dist/nginx/arsse.conf
  41. 13
      dist/nginx/example.conf
  42. 11
      dist/php-fpm.conf
  43. 36
      dist/systemd/arsse-fetch.service
  44. 14
      dist/systemd/arsse.service
  45. 1
      dist/sysuser.conf
  46. 4
      dist/tmpfiles.conf
  47. 1
      docs/en/010_About.md
  48. 15
      docs/en/020_Getting_Started/010_Requirements.md
  49. 41
      docs/en/020_Getting_Started/020_Download_and_Installation.md
  50. 54
      docs/en/020_Getting_Started/020_Download_and_Installation/010_On_Arch_Linux.md
  51. 72
      docs/en/020_Getting_Started/020_Download_and_Installation/020_On_Debian_and_Derivatives.md
  52. 53
      docs/en/020_Getting_Started/020_Download_and_Installation/999_ On_Other_Systems.md
  53. 16
      docs/en/020_Getting_Started/020_Download_and_Installation/index.md
  54. 106
      docs/en/020_Getting_Started/030_Web_Server_Configuration.md
  55. 14
      docs/en/020_Getting_Started/040_Database_Setup/000_SQLite.md
  56. 2
      docs/en/020_Getting_Started/040_Database_Setup/010_PostgreSQL.md
  57. 6
      docs/en/020_Getting_Started/040_Database_Setup/020_MySQL.md
  58. 16
      docs/en/020_Getting_Started/050_Configuration.md
  59. 3
      docs/en/020_Getting_Started/index.md
  60. 49
      docs/en/025_Using_The_Arsse/010_Managing_Users.md
  61. 8
      docs/en/025_Using_The_Arsse/020_Importing_and_Exporting.md
  62. 49
      docs/en/025_Using_The_Arsse/030_Keeping_Newsfeeds_Up_to_Date.md
  63. 34
      docs/en/025_Using_The_Arsse/030_Other_Topics.md
  64. 12
      docs/en/025_Using_The_Arsse/040_Upgrading_to_a_New_Version.md
  65. 15
      docs/en/025_Using_The_Arsse/index.md
  66. 59
      docs/en/030_Supported_Protocols/005_Miniflux.md
  67. 3
      docs/en/030_Supported_Protocols/010_Nextcloud_News.md
  68. 4
      docs/en/030_Supported_Protocols/020_Tiny_Tiny_RSS.md
  69. 3
      docs/en/030_Supported_Protocols/030_Fever.md
  70. 1
      docs/en/030_Supported_Protocols/index.md
  71. 240
      docs/en/040_Compatible_Clients.md
  72. 2
      docs/theme/arsse/arsse.css
  73. 4
      docs/theme/src/arsse.scss
  74. 43
      lib/AbstractException.php
  75. 37
      lib/Arsse.php
  76. 312
      lib/CLI.php
  77. 124
      lib/Conf.php
  78. 27
      lib/Context/AbstractContext.php
  79. 35
      lib/Context/BooleanMembers.php
  80. 35
      lib/Context/Context.php
  81. 250
      lib/Context/ExclusionContext.php
  82. 262
      lib/Context/ExclusionMembers.php
  83. 20
      lib/Context/RootContext.php
  84. 50
      lib/Context/UnionContext.php
  85. 1687
      lib/Database.php
  86. 6
      lib/Db/AbstractDriver.php
  87. 2
      lib/Db/AbstractResult.php
  88. 16
      lib/Db/AbstractStatement.php
  89. 13
      lib/Db/Driver.php
  90. 24
      lib/Db/MySQL/Driver.php
  91. 7
      lib/Db/MySQL/PDODriver.php
  92. 2
      lib/Db/MySQL/Result.php
  93. 10
      lib/Db/MySQL/Statement.php
  94. 4
      lib/Db/PDODriver.php
  95. 4
      lib/Db/PDOError.php
  96. 2
      lib/Db/PDOResult.php
  97. 8
      lib/Db/PDOStatement.php
  98. 18
      lib/Db/PostgreSQL/Driver.php
  99. 5
      lib/Db/PostgreSQL/PDODriver.php
  100. 26
      lib/Db/PostgreSQL/PDOResult.php

22
.gitignore

@ -1,15 +1,25 @@
# Temporary files and dependencies
# Temporary files
/vendor/
/vendor-bin/*/vendor
/node_modules
/release/
/documentation/
/manual/
/tests/coverage/
/dist/arch/arsse/
/dist/arch/src/
/dist/arch/pkg/
/dist/man/
/arsse.db*
/config.php
/.php_cs.cache
yarn-error.log
/tests/.phpunit.result.cache
# Dependencies
/vendor/
/vendor-bin/*/vendor
/node_modules
/yarn.lock
/yarn-error.log
# Windows files
@ -25,7 +35,6 @@ $RECYCLE.BIN/
.DS_Store
.AppleDouble
.LSOverride
Icon
._*
.Spotlight-V100
.Trashes
@ -36,6 +45,7 @@ Icon
*.zip
*.7z
*.tar.gz
*.tar.xz
*.tgz
*.deb
*.rpm

62
.php_cs.dist

@ -3,6 +3,7 @@
* Copyright 2017 J. King, Dustin Wilson et al.
* See LICENSE and AUTHORS files for details */
declare(strict_types=1);
namespace JKingWeb\Arsse;
const BASE = __DIR__.DIRECTORY_SEPARATOR;
@ -15,10 +16,63 @@ $paths = [
BASE."tests",
];
$rules = [
// house rules where PSR series is silent
'align_multiline_comment' => ['comment_type' => "phpdocs_only"],
'array_syntax' => ['syntax' => "short"],
'binary_operator_spaces' => [
'default' => "single_space",
'operators' => ['=>' => "align_single_space"],
],
'cast_spaces' => ['space' => "single"],
'concat_space' => ['spacing' => "none"],
'list_syntax' => ['syntax' => "short"],
'magic_constant_casing' => true,
'magic_method_casing' => true,
'modernize_types_casting' => true,
'native_function_casing' => true,
'native_function_type_declaration_casing' => true,
'no_binary_string' => true,
'no_blank_lines_after_phpdoc' => true,
'no_empty_comment' => true,
'no_empty_phpdoc' => true,
'no_extra_blank_lines' => true, // this could probably use more configuration
'no_mixed_echo_print' => ['use' => "echo"],
'no_short_bool_cast' => true,
'no_trailing_comma_in_singleline_array' => true,
'no_unneeded_control_parentheses' => true,
'no_unneeded_curly_braces' => true,
'no_unused_imports' => true,
'no_whitespace_before_comma_in_array' => true,
'normalize_index_brace' => true,
'object_operator_without_whitespace' => true,
'pow_to_exponentiation' => true,
'set_type_to_cast' => true,
'standardize_not_equals' => true,
'trailing_comma_in_multiline_array' => true,
'unary_operator_spaces' => true,
'yoda_style' => false,
// PSR standard to apply
'@PSR2' => true,
'braces' => ['position_after_functions_and_oop_constructs' => "same"],
'function_declaration' => ['closure_function_spacing' => "none"],
];
// PSR-12 rules; php-cs-fixer does not yet support PSR-12 natively
'compact_nullable_typehint' => true,
'declare_equal_normalize' => ['space' => "none"],
'function_typehint_space' => true,
'lowercase_cast' => true,
'lowercase_static_reference' => true,
'no_alternative_syntax' => true,
'no_empty_statement' => true,
'no_leading_import_slash' => true,
'no_leading_namespace_whitespace' => true,
'no_whitespace_in_blank_line' => true,
'return_type_declaration' => ['space_before' => "none"],
'single_trait_insert_per_statement' => true,
'short_scalar_cast' => true,
'visibility_required' => ['elements' => ["const", "property", "method"]],
// house exceptions to PSR rules
'braces' => ['position_after_functions_and_oop_constructs' => "same"],
'function_declaration' => ['closure_function_spacing' => "none"],
'new_with_braces' => false, // no option to specify absence of braces
];
$finder = \PhpCsFixer\Finder::create();
foreach ($paths as $path) {
@ -28,4 +82,4 @@ foreach ($paths as $path) {
$finder = $finder->in($path);
}
}
return \PhpCsFixer\Config::create()->setRules($rules)->setFinder($finder);
return \PhpCsFixer\Config::create()->setRiskyAllowed(true)->setRules($rules)->setFinder($finder);

109
CHANGELOG

@ -1,3 +1,101 @@
Version 0.1?.? (2022-??-??)
===========================
Bug fixes:
- Return all removed articles when multiple statuses are requested in Miniflux
- Allow multiple date ranges in search strings in Tiny Tiny RSS
- Honour user time zone when interpreting search strings in Tiny Tiny RSS
- Perform MySQL table maintenance more reliably
Version 0.10.2 (2022-04-04)
===========================
Changes:
- Update Guzzle PSR-7 due to CVE-2022-24775
Version 0.10.1 (2022-01-17)
===========================
Changes:
- Support PHP 8.1
Version 0.10.0 (2021-07-11)
===========================
New features:
- Complete Unix manual page
- Support for running service as a forking daemon
- Respond to TERM and HUP signals when possible
Changes:
- Packages for Debian and related are now available (see manual for details)
Version 0.9.2 (2021-05-25)
==========================
Bug fixes:
- Do not fail adding users to an empty database (regression since 0.9.0)
- Cleanly ignore unknown configuration properties
- Set access mode to rw-r---- when creating SQLite databases
Changes:
- Packages for Arch Linux are now available (see manual for details)
- Numerous improvements to the manual
Version 0.9.1 (2021-03-18)
==========================
Bug fixes:
- Respond to PUT requests with 201 rather than 200 in Miniflux
Changes:
- Correct Web server configuration in manual
Version 0.9.0 (2021-03-06)
==========================
New features:
- Support for the Miniflux protocol (see manual for details)
- Support for API level 15 of Tiny Tiny RSS
- Support for feed icons in Fever
- Command-line functionality for managing user metadata
- Command-line functionality for managing Miniflux login tokens
Bug fixes:
- Further relax Fever HTTP correctness, to fix more clients
- Use icons specified in Atom feeds when available
- Do not return null as subscription unread count
- Explicitly forbid U+003A COLON and control characters in usernames, for
compatibility with RFC 7617
- Never return 401 in response to an OPTIONS request
- Accept "t" and "f" as booleans in Tiny Tiny RSS
Changes:
- Administrator account requirements for Nextcloud News functionality are
now enforced
- E_DEPRECATED is now suppressed for compatibility with PHP 8 until affected
dependencies can be replaced
Version 0.8.5 (2020-10-27)
==========================
Bug fixes:
- Relax Fever HTTP correctness, to fix some clients
- Add the QUERY_STRING FastCGI parameter to the sample Nginx configuration
Version 0.8.4 (2020-09-09)
==========================
Bug fixes:
- Don't crash updating feeds cached without ETag (regression since 0.8.3)
Version 0.8.3 (2020-02-16)
==========================
Changes:
- Officially require PHP 7.1 (accidentally required since version 0.8.0)
- Various internal changes pursuant to use of PHP 7.1
Version 0.8.2 (2019-12-07)
==========================
@ -24,7 +122,7 @@ Version 0.8.0 (2019-07-26)
==========================
New features:
- Support for the Fever protocol (see README.md for details)
- Support for the Fever protocol (see manual for details)
- Command line functionality for clearing a password, disabling the account
- Command line options for dealing with Fever passwords
- Command line functionality for importing and exporting OPML
@ -64,7 +162,7 @@ Bug fixes:
Version 0.6.1 (2019-01-23)
==========================
Bug Fixes:
Bug fixes:
- Unify SQL timeout settings
- Correctly escape shell command in subprocess service driver
- Correctly allow null time intervals in configuration when appropriate
@ -116,7 +214,7 @@ Version 0.4.0 (2018-10-26)
==========================
New features:
- Support for HTTP authentication in Tiny Tiny RSS (see README.md for details)
- Support for HTTP authentication in Tiny Tiny RSS (see manual for details)
- New userHTTPAuthRequired and userSessionEnforced settings
Version 0.3.1 (2018-07-22)
@ -162,7 +260,7 @@ Version 0.2.0 (2017-11-30)
==========================
New features:
- Support for the Tiny Tiny RSS protocol (see README.md for details)
- Support for the Tiny Tiny RSS protocol (see manual for details)
- Support for HTTP OPTIONS requests in all protocols
Bug fixes:
@ -184,4 +282,5 @@ Bug fixes:
Version 0.1.0 (2017-08-29)
==========================
Initial release
New features:
- Initial release

31
README.md

@ -6,9 +6,9 @@ Information on how to install and use the software can be found in [the manual](
# Installing from source
The main repository for The Arsse can be found at [code.mensbeam.com](https://code.mensbeam.com/MensBeam/arsse/), with a mirror also available [at GitHub](https://github.com/mensbeam/arsse/). The main repository is preferred, as the GitHub mirror can sometimes be out of date.
The main repository for The Arsse can be found at [code.mensbeam.com](https://code.mensbeam.com/MensBeam/arsse/), with a mirror also available [at GitHub](https://github.com/mensbeam/arsse/). The GitHub mirror does not accept bug reports, but the two should otherwise be equivalent.
[Composer](https://getcomposer.org/) is required to manage PHP dependencies. After cloning the repository or downloading a source code tarball, running `composer install` will download all the required dependencies, and will advise if any PHP extensions need to be installed. If not installing as a programming environment, running `composer install --no-dev` is recommended.
[Composer](https://getcomposer.org/) is required to manage PHP dependencies. After cloning the repository or downloading a source code tarball, running `composer install` will download all the required dependencies, and will advise if any PHP extensions need to be installed. If not installing as a programming environment, running `composer install -o --no-dev --no-scripts` is recommended.
# Repository structure
@ -34,13 +34,15 @@ Also necessary to the functioning of the application is the `/vendor/` directory
The `/locale/` and `/sql/` directories contain human-language files and database schemata, both of which are occasionally used by the application in the course of execution. The `/www/` directory serves as a document root for a few static files to be made available to users by a Web server.
The `/dist/` directory, on the other hand, contains samples of configuration for Web servers and init systems. These are not used by The Arsse itself, but are merely distributed with it for reference.
The `/dist/` directory, on the other hand, contains general and system-specific build files, and samples of configuration for Web servers and other system integration. These are not used by The Arsse itself, but are used during the process of preparing new releases for supported operating systems.
## Documentation
The source text for The Arsse's manual can be found in `/docs/`, with pages written in [Markdown](https://spec.commonmark.org/current/) and converted to HTML [with Daux](#building-the-manual). If a static manual is generated its files will appear under `/manual/`.
In addition to the manual the files `/README.md` (this file), `/CHANGELOG`, `/UPGRADING`, `/LICENSE`, and `/AUTHORS` also document various things about the software, rather than the software itself.
The Arsse also has a UNIX manual page, also written in Markdown, which can be found under `/manpages/`. [Pandoc](https://pandoc.org/) is needed to convert it to the appropriate format, with the results stored under `/dist/man/`.
In addition to the manuals the files `/README.md` (this file), `/CHANGELOG`, `/UPGRADING`, `/LICENSE`, and `/AUTHORS` also document various things about the software, rather than the software itself.
## Tests
@ -50,7 +52,7 @@ The `/tests/` directory contains everything related to automated testing. It is
|--------------------|------------------------------------------------------------------------------------|
| `cases/` | The test cases themselves, organized in roughly the same structure as the code |
| `coverage/` | (optional) Generated code coverage reports |
| `docroot/` | Sample documents used in some tests, to be returned by the PHP's basic HTTP server |
| `docroot/` | Sample documents used in some tests, to be returned by PHP's basic HTTP server |
| `lib/` | Supporting classes which do not contain test cases |
| `bootstrap.php` | Bootstrap script, equivalent to `/arsse.php`, but for tests |
| `phpunit.dist.xml` | PHPUnit configuration file |
@ -74,7 +76,7 @@ The `/vendor-bin/` directory houses the files needed for the tools used in The A
| `/robo` | Simple wrapper for executing Robo on POSIX systems |
| `/robo.bat` | Simple wrapper for executing Robo on Windows |
In addition the files `/package.json`, `/yarn.lock`, and `/postcss.config.js` as well as the `/node_modules/` directory are used by [Yarn](https://yarnpkg.com/) and [PostCSS](https://postcss.org/) when modifying the stylesheet for The Arsse's manual.
In addition the files `/package.json` and `/postcss.config.js` as well as the `/node_modules/` directory are used by [Yarn](https://yarnpkg.com/) and [PostCSS](https://postcss.org/) when modifying the stylesheet for The Arsse's manual.
# Common tasks
@ -88,7 +90,7 @@ There is also a `test:quick` Robo task which excludes slower tests, and a `test:
### Test coverage
Computing the coverage of tests can be done by running `./robo coverage`, after which an HTML-format coverage report will be written to `/tests/coverage/`. Either [Xdebug](https://xdebug.org) or [phpdbg](https://php.net/manual/en/book.phpdbg.php) is required for this. Xdebug is generally recommended as it is better maintained, though phpdbg is significantly faster. If using Xdebug, the extension need not be enabled globally; PHPUnit will enable it when needed.
Computing the coverage of tests can be done by running `./robo coverage`, after which an HTML-format coverage report will be written to `/tests/coverage/`. Either [PCOV](https://github.com/krakjoe/pcov), [Xdebug](https://xdebug.org), or [phpdbg](https://php.net/manual/en/book.phpdbg.php) is required for this. PCOV is generally recommended as it is faster than Xdebug; phpdbg is faster still, but less accurate. If using either PCOV or Xdebug, the extension need not be enabled globally; PHPUnit will enable it when needed.
## Enforcing coding style
@ -105,15 +107,20 @@ The Arsse's user manual, made using [Daux](https://daux.io/), can be compiled by
The manual employs a custom theme derived from the standard Daux theme. If the standard Daux theme receives improvements, the custom theme can be rebuilt by running `./robo manual:theme`. This requires that [NodeJS](https://nodejs.org) and [Yarn](https://yarnpkg.com/) be installed, but JavaScript tools are not required to modify The Arsse itself, nor the content of the manual.
## Building the man page
The Arsse's UNIX manual page is authored in Markdown, and must be converted to the native roff format using [Pandoc](https://pandoc.org/). This can be done by running `./robo manpage`, which will output appropriate files to `/dist/man/`. The conversion should not be done manually as there is post-processing required for optimal output.
## Packaging a release
Producing a release package is done by running `./robo package`. This performs the following operations:
Producing release packages is done by running `./robo package`. This performs the following operations:
- Duplicates a working tree with the commit (usually a release tag) to package
- Generates the manual
- Duplicates a [Git](https://git-scm.com/) working tree with the commit (usually a release tag) to package
- Generates UNIX manual pages with [Pandoc](https://pandoc.org/)
- Generates the HTML manual
- Installs runtime Composer dependencies with an optimized autoloader
- Deletes numerous unneeded files
- Exports the default configuration of The Arsse to a file
- Compresses the remaining files into a tarball
Due to the first step, [Git](https://git-scm.com/) is required to package a release.
- Produces a binary package for Arch Linux, if possible
- Produces source and binary packages for Debian using [pbuilder](https://pbuilder-team.pages.debian.net/pbuilder/), if possible

605
RoboFile.php

@ -6,6 +6,8 @@ const BASE = __DIR__.\DIRECTORY_SEPARATOR;
const BASE_TEST = BASE."tests".\DIRECTORY_SEPARATOR;
define("IS_WIN", defined("PHP_WINDOWS_VERSION_MAJOR"));
define("IS_MAC", php_uname("s") === "Darwin");
define("IS_LINUX", !IS_WIN && !IS_MAC);
error_reporting(0);
function norm(string $path): string {
$out = realpath($path);
@ -24,7 +26,7 @@ class RoboFile extends \Robo\Tasks {
* ./robo test --testsuite TTRSS --exclude-group slow --testdox
*
* Please see the PHPUnit documentation for available options.
*/
*/
public function test(array $args): Result {
return $this->runTests(escapeshellarg(\PHP_BINARY), "typical", $args);
}
@ -33,7 +35,7 @@ class RoboFile extends \Robo\Tasks {
*
* This includes pedantic tests which may help to identify problems.
* See help for the "test" task for more details.
*/
*/
public function testFull(array $args): Result {
return $this->runTests(escapeshellarg(\PHP_BINARY), "full", $args);
}
@ -42,7 +44,7 @@ class RoboFile extends \Robo\Tasks {
* Runs a quick subset of the test suite
*
* See help for the "test" task for more details.
*/
*/
public function testQuick(array $args): Result {
return $this->runTests(escapeshellarg(\PHP_BINARY), "quick", $args);
}
@ -53,10 +55,10 @@ class RoboFile extends \Robo\Tasks {
* tests/coverage/. Additional reports may be produced by passing
* arguments to this task as one would to PHPUnit.
*
* Robo first tries to use phpdbg and will fall back to Xdebug if available.
* Because Xdebug slows down non-coverage tasks, however, phpdbg is highly
* recommended if debugging facilities are not otherwise needed.
*/
* Robo first tries to use pcov and will fall back first to xdebug then
* phpdbg. Neither pcov nor xdebug need to be enabled to be used; they
* only need to be present in the extension load path to be used.
*/
public function coverage(array $args): Result {
// run tests with code coverage reporting enabled
$exec = $this->findCoverageEngine();
@ -71,7 +73,7 @@ class RoboFile extends \Robo\Tasks {
* run all tests which may cover code.
*
* See also help for the "coverage" task for more details.
*/
*/
public function coverageFull(array $args): Result {
// run tests with code coverage reporting enabled
$exec = $this->findCoverageEngine();
@ -89,17 +91,30 @@ class RoboFile extends \Robo\Tasks {
}
protected function findCoverageEngine(): string {
if (IS_WIN) {
$dbg = dirname(\PHP_BINARY)."\\phpdbg.exe";
$dbg = file_exists($dbg) ? $dbg : "";
$dir = rtrim(ini_get("extension_dir"), "/").\DIRECTORY_SEPARATOR;
$ext = IS_WIN ? "dll" : (IS_MAC ? "dylib" : "so");
$php = escapeshellarg(\PHP_BINARY);
$code = escapeshellarg(BASE."lib");
if (extension_loaded("pcov")) {
return "$php -d pcov.enabled=1 -d pcov.directory=$code";
} elseif (extension_loaded("xdebug")) {
return "$php -d xdebug.mode=coverage";
} elseif (file_exists($dir."pcov.$ext")) {
return "$php -d extension=pcov.$ext -d pcov.enabled=1 -d pcov.directory=$code";
} elseif (file_exists($dir."xdebug.$ext")) {
return "$php -d zend_extension=xdebug.$ext -d xdebug.mode=coverage";
} else {
$dbg = trim(`which phpdbg 2>/dev/null`);
}
if ($dbg) {
return escapeshellarg($dbg)." -qrr";
} else {
$ext = IS_WIN ? "dll" : (IS_MAC ? "dylib" : "so");
return escapeshellarg(\PHP_BINARY)." -d zend_extension=xdebug.$ext";
if (IS_WIN) {
$dbg = dirname(\PHP_BINARY)."\\phpdbg.exe";
$dbg = file_exists($dbg) ? $dbg : "";
} else {
$dbg = trim(`which phpdbg 2>/dev/null`);
}
if ($dbg) {
return escapeshellarg($dbg)." -qrr";
} else {
return $php;
}
}
}
@ -108,7 +123,7 @@ class RoboFile extends \Robo\Tasks {
return $all ? ">$hole 2>&1" : "2>$hole";
}
protected function runTests(string $executor, string $set, array $args) : Result {
protected function runTests(string $executor, string $set, array $args): Result {
switch ($set) {
case "typical":
$set = ["--exclude-group", "optional"];
@ -131,63 +146,258 @@ class RoboFile extends \Robo\Tasks {
return $this->taskExec($executor)->option("-d", "zend.assertions=1")->arg($execpath)->option("-c", $confpath)->args(array_merge($set, $args))->run();
}
protected function commitVersion(?string $commit): array {
$target = $commit ?? $this->askDefault("Reference commit:", "HEAD");
$base = escapeshellarg(BASE);
$blackhole = $this->blackhole();
// get useable version strings from Git
$version = trim(`git -C $base describe --tags $target $blackhole`);
if (!$version) {
throw new \Exception("Commit reference invalid");
}
return [$target, $version];
}
protected function toolExists(string ...$binary): bool {
$blackhole = $this->blackhole(IS_WIN);
foreach ($binary as $bin) {
if (
(IS_WIN && (!exec(escapeshellarg($bin)." --help $blackhole", $junk, $status) || $status))
|| (!IS_WIN && (!exec("which ".escapeshellarg($bin)." $blackhole", $junk, $status) || $status))
) {
return false;
}
}
return true;
}
/** Packages a given commit of the software into a release tarball
*
* The version to package may be any Git tree-ish identifier: a tag, a branch,
* The commit to package may be any Git tree-ish identifier: a tag, a branch,
* or any commit hash. If none is provided on the command line, Robo will prompt
* for a commit to package; the default is "head".
* for a commit to package; the default is "HEAD".
*
* Note that while it is possible to re-package old versions, the resultant tarball
* may not be equivalent due to subsequent changes in the exclude list, or because
* of new tooling.
*/
public function package(string $version = null): Result {
*/
public function packageGeneric(string $commit = null): Result {
if (!$this->toolExists("git", "pandoc")) {
throw new \Exception("Git and Pandoc are required in PATH to produce generic release tarballs");
}
// establish which commit to package
$version = $version ?? $this->askDefault("Commit to package:", "HEAD");
$archive = BASE."arsse-$version.tar.gz";
[$commit, $version] = $this->commitVersion($commit);
preg_match('/^([^-]+)(?:-(\d+)-(\w+))?$/', $version, $m);
$archVersion = $m[1].($m[2] ? ".r$m[2].$m[3]" : "");
$baseVersion = $m[1];
$release = $m[2];
// name the generic release tarball
$tarball = BASE."release/$version/arsse-$version.tar.gz";
// start a collection
$t = $this->collectionBuilder();
// create a temporary directory
$dir = $t->tmpDir().\DIRECTORY_SEPARATOR;
// create a Git worktree for the selected commit in the temp location
$t->taskExec("git worktree add ".escapeshellarg($dir)." ".escapeshellarg($version));
// perform Composer installation in the temp location with dev dependencies
$t->taskComposerInstall()->dir($dir);
// generate the manual
$t->taskExec(escapeshellarg($dir."robo")." manual")->dir($dir);
// perform Composer installation in the temp location for final output
$t->taskComposerInstall()->dir($dir)->noDev()->optimizeAutoloader()->arg("--no-scripts");
// delete unwanted files
$t->taskFilesystemStack()->remove([
$dir.".git",
$dir.".gitignore",
$dir.".gitattributes",
$dir."composer.json",
$dir."composer.lock",
$dir.".php_cs.dist",
$dir."phpdoc.dist.xml",
$dir."build.xml",
$dir."RoboFile.php",
$dir."CONTRIBUTING.md",
$dir."docs",
$dir."tests",
$dir."vendor-bin",
$dir."vendor/bin",
$dir."robo",
$dir."robo.bat",
$dir."package.json",
$dir."yarn.lock",
$dir."postcss.config.js",
]);
// generate a sample configuration file
$t->taskExec(escapeshellarg(\PHP_BINARY)." arsse.php conf save-defaults config.defaults.php")->dir($dir);
// package it all up
$t->taskPack($archive)->addDir("arsse", $dir);
// execute the collection
$out = $t->run();
// clean the Git worktree list
$this->_exec("git worktree prune");
return $out;
$result = $this->taskExec("git worktree add ".escapeshellarg($dir)." ".escapeshellarg($version))->dir(BASE)->run();
if ($result->getExitCode() > 0) {
return $result;
}
try {
// Perform Arch-specific tasks
if (file_exists($dir."dist/arch")) {
// patch the Arch PKGBUILD file with the correct version string
$t->addTask($this->taskReplaceInFile($dir."dist/arch/PKGBUILD")->regex('/^pkgver=.*$/m')->to("pkgver=$archVersion"));
// patch the Arch PKGBUILD file with the correct source file
$t->addTask($this->taskReplaceInFile($dir."dist/arch/PKGBUILD")->regex('/^source=\("arsse-[^"]+"\)$/m')->to('source=("'.basename($tarball).'")'));
}
// perform Debian-specific tasks
if (file_exists($dir."dist/debian")) {
// generate the Debian changelog; this also validates our original changelog
$changelog = $this->changelogParse(file_get_contents($dir."CHANGELOG"), $version);
$debianChangelog = $this->changelogDebian($changelog, $version);