1
1
Fork 0
mirror of https://code.mensbeam.com/MensBeam/Arsse.git synced 2024-12-22 21:22:40 +00:00
The clean & modern RSS server that doesn't give you any crap.
Find a file
2020-12-31 17:50:40 -05:00
dist Fix sample Nginx configuration 2020-10-26 12:57:16 -04:00
docs Groundwork for filtering rules 2020-12-14 20:09:38 -05:00
lib Implement marking all as read for Miniflux 2020-12-31 17:50:40 -05:00
locale Implement Miniflux user creation 2020-12-31 13:57:36 -05:00
sql Implement hidden marks 2020-12-15 13:20:03 -05:00
tests Implement marking all as read for Miniflux 2020-12-31 17:50:40 -05:00
vendor-bin Update tooling 2020-12-28 11:42:36 -05:00
www/tt-rss/images Whitespace cleanup 2018-10-26 14:58:04 -04:00
.gitattributes Use Robo for programming task execution 2017-12-08 14:37:49 -05:00
.gitignore Generalize icon fetching tests 2020-11-05 12:12:01 -05:00
.php_cs.dist Group more style rules under PSR-12 2020-03-01 21:07:36 -05:00
arsse.php Style fixes 2020-03-01 15:16:50 -05:00
AUTHORS Added per-file legal boilerplate 2017-11-16 20:23:18 -05:00
CHANGELOG Forbid more user names 2020-12-27 10:08:00 -05:00
composer.json Update PicoFeed to latest release version 2020-09-15 08:45:49 -04:00
composer.lock Update tooling 2020-12-28 11:42:36 -05:00
CONTRIBUTING.md Update test-running examples 2017-12-08 15:19:14 -05:00
LICENSE Add license file and skeleton of readme 2017-05-26 10:01:35 -04:00
package.json Yarn update 2020-07-19 09:08:43 -04:00
phpdoc.dist.xml Docblocks for Conf 2017-07-16 22:27:55 -04:00
postcss.config.js Process color() functions in stylesheet 2019-08-05 17:46:00 -04:00
README.md GitHub should now be kept in sync at all times 2020-04-25 11:49:45 -04:00
robo Slight fixes to Robo and PHPUnit 2019-08-04 19:21:09 -04:00
robo.bat Fix error in Windows robo script 2017-12-20 09:27:15 -05:00
RoboFile.php Fix detection of Xdebug for coverage 2020-11-06 19:56:32 -05:00
UPGRADING Revert wishful thinking 2020-10-27 09:48:47 -04:00
yarn.lock Update dependencies 2020-10-26 14:44:54 -04:00

The Advanced RSS Environment

The Arsse is a news aggregator server, written in PHP, which implements multiple synchronization protocols. Unlike most other aggregator servers, The Arsse does not include a Web front-end (though one is planned as a separate project), and it relies on existing protocols to maximize compatibility with existing clients.

Information on how to install and use the software can be found in the manual, which is available online as well as with every copy of the software. This readme file instead focuses on how to set up a programming environment to modify the source code.

Installing from source

The main repository for The Arsse can be found at code.mensbeam.com, with a mirror also available at GitHub. The GitHub mirror does not accept bug reports, but the two should otherwise be equivalent.

Composer 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.

Repository structure

Library code

The code which runs The Arsse, contained in /arsse.php, is only a short stub: the application itself is composed of the classes found under /lib/, with the main ones being:

Path Description
CLI.php The command-line interface, including its documentation
Conf.php Configuration handling
Database.php High-level database interface
Db/ Low-level database abstraction layer
REST/ Protocol implementations
REST.php General protocol handler for CORS, HTTP auth, etc.
Arsse.php Singleton glueing the parts together

The /lib/Database.php file is the heart of the application, performing queries on behalf of protocol implementations or the command-line interface.

Also necessary to the functioning of the application is the /vendor/ directory, which contains PHP libraries which The Arsse depends upon. These are managed by Composer.

Supporting data files

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.

Documentation

The source text for The Arsse's manual can be found in /docs/, with pages written in Markdown and converted to HTML with Daux. 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.

Tests

The /tests/ directory contains everything related to automated testing. It is itself organized as follows:

Path Description
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
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
server.php Simple driver for the PHP HTTP server used during testing

PHPUnit's configuration can be customized by copying its configuration file to /tests/phpunit.xml and modifying the copy accordingly.

Tooling

The /vendor-bin/ directory houses the files needed for the tools used in The Arsse's programming environment. These are managed by the Composer "bin" plugin and are not used by The Arsse itself. The following files are also related to various programming tools:

Path Description
/.gitattributes Git settings for handling files
/.gitignore Git file exclusion patterns
/.php_cs.dist Configuration for php-cs-fixer
/.php_cs.cache Cache for php-cs-fixer
/composer.json Configuration for Composer
/composer.lock Version synchronization data for Composer
/RoboFile.php Task definitions for Robo
/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 and PostCSS when modifying the stylesheet for The Arsse's manual.

Common tasks

We use a tool called Robo to simplify the execution of common tasks. It is installed with The Arsse's other dependencies, and its configured tasks can be listed by executing ./robo without arguments.

Running tests

The Arsse has an extensive PHPUnit test suite; tests can be run by executing ./robo test, which can be supplemented with any arguments understoof by PHPUnit. For example, to test only the Tiny Tiny RSS protocol, one could run ./robo test --testsuite TTRSS.

There is also a test:quick Robo task which excludes slower tests, and a test:full task which includes redundant tests in addition to the standard test suite

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 PCOV, Xdebug, or phpdbg 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

The php-cs-fixer tool, executed via ./robo clean, can be used to rewrite code to adhere to The Arsse's coding style. The style largely follows PSR-2 with some exceptions:

  • Classes, methods, and functions should have their opening brace on the same line as the signature
  • Anonymous functions should have no space before the parameter list

Building the manual

The Arsse's user manual, made using Daux, can be compiled by running ./robo manual, which will output files to /manual/. It is also possible to serve the manual from a test HTTP server on port 8085 by running ./robo manual:live.

Rebuilding the manual theme

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 and Yarn be installed, but JavaScript tools are not required to modify The Arsse itself, nor the content of the manual.

Packaging a release

Producing a release package 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
  • 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 is required to package a release.