# Release Notes Here you find the release notes including all changes. ## [1.0.0-alpha4] - 2024-04-18 The release of _Alpha 4 — Raving Raccoon_ features: - **Permission Management:** Easily manage permissions for roles such as Programme Managers and Hosts, as well as individual users. - **Radio Station Settings:** Administrators now have the ability to configure global station settings conveniently within the new admin area. - **Playout Refactoring:** The _Engine_ component has undergone significant improvements. It now caches data efficiently without the need for a database server. Programme data is cached transparently using JSON files. Additionally, the scheduling and programme polling logic has been refactored and validated using OpenAPI interfaces. - **Improved Test Coverage:** We have substantially increased test coverage in both _Steering_ and _Engine_ components. Most components now provide badges displaying the overall test coverage. **Breaking Changes:** All nested API endpoints in _Steering_ and _Tank_ that were deprecated in the previous release have now been removed. Explore further details on all additional changes below. AURA Admin UI - group list ### Added - aura: New fixture `radiosettings.json` for defining radio station settings. - aura: User Guide: Documentation on radio station settings. - aura: Admin Guide: Info on running Docker Engine as a daemon in production. - aura: User Guide: Documentation on data visibility, permission and roles in radio administration. - aura: New Gitlab issue templates for _Bug Report_ and _Epic_. - aura: New "at a glance" overview for release workflow. - steering: `Playlist` model as placeholder for custom permissions. - steering: The route for `schedules` can now handle PATCH requests that don’t involve conflict resolution (steering#218) - steering: `RadioSettings` model, admin, serializer, viewset and route to expose them (steering#173) - steering: Management command and Makefile target to delete OIDC client (steering#219) - dashboard: Implemented basic permissions so that unprivileged users either can’t see or can’t edit data they are not allowed to see or edit. - dashboard: Episodes that the dashboard detects as invalid (e.g. those with a negative duration) are now highlighted with a yellow background and red stripes and should be reported. - dashboard: The menu now has a link to the steering administration page. - engine: Lots of test cases. ### Changed - aura: Admin Guide: More details on configuring reverse proxies. - aura: User Guide: Manage groups improved. - aura: User Guide: Extended "User and host profile" documentation. - steering: The image URLs are now exposed as `url` and include the protocol to avoid mixed-media warnings (steering#194) - steering: The `title` of a `Note` is nullable (steering#203) - steering: A `Note` is attached to a `Timeslot` upon creation (steering#214) - tank: The job-timeout for the importer is now thirty minutes for Docker. - dashboard: Calendar event color scheme has been re-worked to be more readable and distinguishes between owned and other shows. - dashboard: Reworked calendar dialogs and grouped related information and actions. - dashboard: Drastically reduced asset sizes and therefore improved app load times. - dashboard: The *Delete all following episodes*-functionality has been temporarily disabled. - dashboard: The show quick selector has been removed because we provide similar functionality on the show overview page. - engine: Engine now requires at least Python 3.11. - engine: Major refactoring of the scheduling mechanices. As a consequence the database dependency for caching is removed. Instead caching is performed in form of `json` files located in the configured `cache_dir` folder. ### Removed - aura: All database related configuration got removed from Engine. Compare and update your `.env` file. - aura: User Guide: Safari support is removed once again. - steering: Nested routes for shows, show/timeslots, show/schedules, show/schedule/timeslot (aura#126) - tank: Nested routes for show/files, show/files and show/playlists (aura#126) - engine: All database related settings and dependencies. When updating from an existing deployment, remember to compare the new config files and remove relevant entries. ### Fixed - aura: AURA Web health-checks updated to work with Docker Engine 26+. - dashboard: Fixed some visual spacing issues with dialogs. - dashboard: The title column in the episode list will now always display a title or placeholder. - dashboard: Users can now always abort the conflict resolution mode in the calendar. - dashboard: Fixed some rendering issues for certain conflict resolutions in the calendar. - dashboard: Fixed some missing, misleading and invalid translations in the calendar. - engine: Issue where the configuration values for `retry_delay` and `max_retries` are mixed up. ### Security - engine: The codebase is now audited using the security tool [Bandit](https://bandit.readthedocs.io/). ## [1.0.0-alpha3] - 2024-02-29 The release of **Alpha 3 — _Playful Platypus_** marks a significant milestone with a comprehensive overhaul of the user interface and the play-out stack, introducing many eagerly anticipated features. The dashboard has undergone a complete redesign in appearance, navigation and functionality. Notable additions in the show area include dialogs for managing show settings, episodes, image uploads, extended metadata assignments, assignment of media sources, and more. The play-out engine now leverages the state-of-the-art audio server [_PipeWire_](https://pipewire.org/), providing users with low-latency audio routing options for a smooth playback experience. _PipeWire_ is seamlessly integrated into various recent Linux distributions such as _Debian 12_ and _Ubuntu 22.04_. To facilitate understanding of the new features, the [User Guide](https://docs.aura.radio/en/latest/user/index.html) has been enriched with additional information. Simultaneously, the [Administration Guide](https://docs.aura.radio/en/latest/administration/index.html) has undergone enhancements to expedite the _AURA_ setup process. Additional features include data backup and restoration capabilities, improved logging, and simplified importing of default datasets. **Breaking Changes:** Many API implementations are improved to follow best practices. This includes the naming of parameters and properties. The approach how uploaded audio files are stored in the database and on the filesystem got revised. Lastly, most installation steps and their documentation got reworked. Due to the amount of breaking changes we recommend re-installing AURA from scratch. **Deprecated:** We want to remind you, that nested API endpoints in Steering and Tank are deprecated. They will be removed with the release of Alpha 4. Try to migrate to the non-nested version of an endpoint and report back if you are facing issues. For more details, check out [api.aura.radio](https://api.aura.radio) and the detailed changelog below. **Security:** Upgrade to [Docker Engine 25.0.2 or later](https://docs.docker.com/engine/release-notes/25.0/) due to a [security vulnerability in runc](https://www.docker.com/blog/docker-security-advisory-multiple-vulnerabilities-in-runc-buildkit-and-moby/). AURA Dashboard - login page ### Added - aura: CLI command `make version` to display the current version. - aura: Documentation: Configure playout using PipeWire. - aura: Documentation: Many chapters in the user documentation on the new features in the show and episode user interfaces. - aura: New make commands to create sample fixtures and import fixtures (`aura-web.fixtures-create`, `aura-web.fixtures-import`). - aura: New make commands to backup and restore Docker Volumes (`make aura-volume.backup`, `make aura-volume.restore`). - aura: Documentation: Chapter to learn how to [backup config and data](https://docs.aura.radio/en/latest/administration/update-and-maintain.html#backup-strategy). - aura: Documentation: Aura Web now features a Quick Install Guide. - aura: Ability to [load system settings with sample and custom fixtures](https://docs.aura.radio/en/latest/administration/aura-web.html#applying-radio-station-settings-with-fixtures). - steering: `owners` optional field in `Host` model as many-to-many reference to `User` (steering#166) - steering: `language` and `topic` optional fields in `Note` model (steering#169) - steering: `contributors` field in `Note` model (steering#159) - steering: `PRIVILEGED_GROUP` and `ENTITLED_GROUPS` settings to implement groups and permissions (steering#177) - steering: `FILTER_ACTIVE_SHOWS_USING` settings to filter active shows and OIDC scope claims (steering#175) - steering: `ShowManager` to annotate a show with its max (last) timeslot start (steering#175) - steering: `is_active` boolean field in `LinkType` model (steering#187) - steering: `addtimeslots` management command to renew schedules for one year (steering#108) - tank: Un-nested routes for playlists, files, imports, etc. (tank#65) - dashboard: Added license selection in image picker. - dashboard: Added show overview page with grid and table view including pagination, search and extensive ordering capabilities. - dashboard: The state of save operations is now communicated to users. - dashboard: The media page has been removed in favor of inline editors in the episode and show management pages. - dashboard: Hierarchical pages now display a breadcrumb navigation. - dashboard: Show pages now display update/create metadata. - dashboard: All pages and subviews now have unique and shareable URLs. - dashboard: A new login page has been added. - dashboard: Shows can now be deleted. - dashboard: The show slug can now be changed. - dashboard: Languages and topics can now be set for individual episodes/notes. - dashboard: Show on-air and next-up info for episodes. - dashboard: Added support for viewing past episodes. - dashboard: Added support for viewing inactive schedules. - dashboard: Platform and social media links can now be added to shows and episodes. - dashboard: Content fields now have a WYSIWYG-HTML editor. - dashboard-clock: Sample API data for testing provided via `/test/api.json` - engine: Additional logging while loading playlist entries (#136) - engine-api: `make api`: generate, merge and clean files according to api specs in `schemas/openapi-engine.yaml` (#37) - engine-core: PipeWire as the media server inside the docker container - engine-core: Docker compose support for easier building of local containers - engine-core: WirePlumber script to automatically connect ports - engine-core: WirePlumber script to list device ports - engine-recorder: Added a option to configure the sub directories where the audio files are saved (engine-recorder#36) - engine-recorder: Added local docker build (engine-recorder#31) - engine-recorder: Added docker compose ### Changed - aura: Documentation: Add details on how to release a service in the developer docs. - aura: **BREAKING:** Update naming and meaning of several make commands and according documentation. Re-read the docs carefully when installing. - aura: Docker images are now tagged and published with `main` instead of `unstable`. - aura: The `aura` user is now created as a system user. - aura: Documentation: Multiple content and structure improvements in the Administration Guide. - aura: Documentation: CertBot in Aura Web installation is now enabled by default. Disable, when not needed. - aura: Sample configuration override for `engine-api` is now in `YAML` format, instead of `INI`. - aura: Update `engine-recorder` sample configuration for override. - aura: Nginx is running rootless now. This improves security and fixes some other permission bugs. - aura: Replace `AURA_ENGINE_RECORDER_AUDIO_DEVICE` with `AURA_ENGINE_RECORDER_AUDIO_SOURCE` and `AUDIO_DEVICE` with `AUDIO_SOURCE`, (engine-recorder#32) - steering: **BREAKING:** The IDs of the "owned shows" and the "public shows" are now listed as `ownedShowIds` and `publicShowIds` in the OICD scope claims. - steering: `note_id` and `show_id` are read-only fields of the `TimeslotSerializer` (steering#171) - steering: `Note.tags` are exposed as list of strings (steering#158) - steering: Django’s model permissions and additional custom permissions are now used (steering#177) - steering: `type` in `Link` model is now foreign key reference to the `LinkType` model. The serializers expect a `typeId` (steering#187) - tank: **BREAKING:** The database and directory structure has changed. Since there is no way to migrate the data for this update, you need to re-create the database and delete the existing files and folders from the audio store. - tank: **BREAKING:** The endpoints to create files and playlists now require a `showId` in the JSON payload. - tank: **BREAKING:** API endpoints now require `showId` (int) instead of the `showName` (string). - tank: The duration is now in seconds and is stored as a float. - tank: The job-timeout for the importer is now three minutes for Docker. - tank: Show uploads are stored in folders named after the ids instead of the slugs. (tank#37) - tank: error and info log files now have timestamps (tank#68) - tank: The endpoint to upload a file with Flow JS no longer requires a `showId`. - tank: The endpoint to list the playlists now lists all, the ones by a show or the ones that include a file. - dashboard: The global navigation has been moved to a sidebar. - dashboard: The global navigation now includes contextualized submenus. - dashboard: The show admin selector now uses an inline selection mechanism instead of a dialog. - dashboard: The help link in the footer now directly links to the AURA documentation. - dashboard: The page-size selection for the episode table has been moved to the table footer. - dashboard: The range-end selection in the episode table has been removed. - dashboard: The range-start selection in the episode table is now positioned right next to the table header. - dashboard: The episode/note editor is now a separate page instead of a modal. - dashboard: The show deactivation button has been moved to the _Danger zone_ and now requires confirmation. - dashboard: The show page has been split into two separate pages for episodes/schedules and basic settings. - dashboard: Related individual fields in the basic show settings have been restructured into structured blocks. - dashboard: Updated/harmonized terms used in show pages. - dashboard: The unimplemented settings page has been removed. - engine: Configuration using yaml instead of ini files (#120) - engine: Change default database password to string to avoid parsing errors (#120) - engine: Use datatype float instead of int for `trackDuration` (#132) - engine-api: Configuration using yaml instead of ini files (#34) - engine-api: Use datatype float instead of int for `trackDuration` (#51) - engine-api: Change default database password to string to avoid parsing errors (#54) - engine-core: Default sound system is now JACK, not ALSA - engine-core: Docs: Update README with new PipeWire based installation - engine-recorder: Renamed the input.file field to input.source (engine-recorder#32) - engine-recorder: Renamed the input.file_format field to input.source_format (engine-recorder#32) - engine-recorder: Replaced `AURA_ENGINE_RECORDER_AUDIO_DEVICE` with `AURA_ENGINE_RECORDER_AUDIO_SOURCE` and `AUDIO_DEVICE` with `AUDIO_SOURCE`, (engine-recorder#32) ### Deprecated - aura: Nested API endpoints in Steering and Tank are deprecated and will be removed in the next release. Compare the specification at api.aura.radio and update your API client as soon as possible. Please report if you are facing issues. - steering: Nested routes for shows, show/timeslots, show/schedules, show/schedule/timeslot will be removed with alpha-4. - tank: Nested routes for show/files and show/playlists will be removed with alpha-4. ### Removed - steering: `note_id` and `show` fields from the `Timeslot` model (steering#171) - steering: `type` field from `LinkType` model (steering#187) - steering: `owner` and `slug` fields from `Note` model. - engine-api: Remove endpoint `/playlog/report/{year_month}` (#48) - engine-core: Dropped ALSA in Docker support in favour of PipeWire + JACK ### Fixed - aura: To avoid permission problems re-run the commands `make aura-web.init` or `make aura-playout.init` respectively. - aura: Warning when executing the make target for adding the aura user. - aura: Consolidated the structure for custom configuration and fixtures in AURA Web. - aura: Due to certificate retrieval issues, certbot is now running on port `80` (#276). - aura: Missing image in the documentation under a [administration / update and maintain](https://docs.aura.radio/en/latest/administration/update-and-maintain.html#delete-openid-connect-clients). - aura: Allow optional trailing slash for `/trackservice` endpoints and don't redirect (engine-api#25). - aura: Documentation: Replace `AURA_RECORDER_AUDIO_STORE_HOST` with `AURA_AUDIO_STORE`, (engine-recorder#39) - dashboard: Fixed overflow issues for in image picker. - dashboard: Ensure save errors due to connection issues are properly communicated to the user. - dashboard: Fixed keyboard selection support in image picker. - dashboard: Fixed overflow issues in calendar. - dashboard: Fixed overflow issues in show quick selector for long show titles. - engine: Fix redundant logging while loading playlist entry (#136) - engine: Fix line-in source selection (#141) - engine-core: Smooth play-out latency and buffering for analog audio input (engine-core#50) - engine-recorder: Fixed a bug where the audio files where always saved with the `_%s` suffix (engine-recorder#35) ### Security - aura: Upgrade to [Docker Engine 25.0.2 or later](https://docs.docker.com/engine/release-notes/25.0/) due to [security vulnerability in runc](https://www.docker.com/blog/docker-security-advisory-multiple-vulnerabilities-in-runc-buildkit-and-moby/). ## [1.0.0-alpha2] - 2023-06-29 The release of **Alpha 2 — _Precise Pheasant_** ships with plenty of essential improvements, both under the hood and on the user interface level. The _Data Model_ has been extended and refined to provide a foundation for the requirements of participating radios. Additional _recurrence rules_ have been added as part of the default configuration. The _User Interface_ has undergone a facelift and has been updated with features and enhancements, especially in the calendar and show view. Administrators are now served with log files for all services. In order to avoid permission errors, also re-run the `make aura-user.add` command. This now creates directories for `logs` and `audio` with correct permissions for the `aura` user. **Breaking Changes:** - Some configuration settings for the _Docker Compose_ bundles have been changed. Either adapt your current `.env` file accordingly or start with a fresh one. - The API has been improved to follow best practices. This includes the naming of parameters and properties. **Deprecated:** - Nested API endpoints in Steering and Tank are now deprecated. Try to migrate to the non-nested version of an endpoint and report back if you are facing issues. For more details, check out [api.aura.radio](https://api.aura.radio) and the detailed changelog below. ### Added - aura: Add development target `make dev.merge-changelog` to create a merged changelog, helping to prepare release notes. - aura: Add release notes section at [docs.aura.radio](https://docs.aura.radio) - aura: Add Tank Cut & Glue API to [api.aura.radio](https://api.aura.radio/). - aura: Add default [Audio Store](https://docs.aura.radio/en/latest/administration/deployment-preparation.html#setting-up-the-audio-store) directory `/var/audio/import` used for audio file imports via filesystem (aura#172). - aura: Add default setting for `AURA_AUDIO_STORE_RECORDINGS` to the playout `sample.env` file. - aura: Add audio targets for the Makefile to start and disable PulseAudio. - aura: Add optional engine-recorder profile to aura-playout. - aura: Add an log file for NGINX, aura-web (#147). - aura: Documentation: Add more details to the [Radio Station Administration](https://docs.aura.radio/en/latest/user/station-administration.html) chapter. - aura: Documentation: Add chapter on deleting and deactivating users in the User Guide. - aura: Documentation: Add more info on switching between releases to the Administration Guide. - aura: Add directories to `logs` and `audio` to avoid permission errors (#209) - steering: `Image` concrete model to handle all instances. - steering: API endpoint `/api/v1/images/` to add, update and delete images. - steering: Add `Host` admin - dashboard: a new show selector to the navbar (#122, f9762d85). - dashboard: a new image picker that can be used to upload new and select existing images (#89, #139, e0fd0a76, b335d801, 57e1e10f). - dashboard: ability to add internal notes to a show (#146, 319cf540). - dashboard: information on empty slots between shows and a progress indicator for the currently playing show - dashboard: to the calendar day-view (#155, 9ac48a55, 2a68a7ac). - dashboard: a progress indicator for the currently playing show to the calendar week-view (#156, b52672dd). - dashboard: ability to add and remove individual contributors to the show notes based on the show owners (#170, #146, aa707763). - dashboard: ability to add tags to show notes (#146, 560d8dda). - engine: API responses from Steering and Tank are now cached in `cache_dir` - engine-api: Test coverage (`make coverage` #40) - engine-api: Badge displaying coverage result (#40) ### Changed - aura: Update sample configuration files for services in `config/service/sample-config`. - aura: Rename environment variable `AURA_ENGINE_SERVER_TIMEOUT` to `AURA_ENGINE_SERVER_TIMEOUT` in playout `sample.env`. - aura: Increase default value for `AURA_ENGINE_SERVER_TIMEOUT` in playout `sample.env`, to avoid malfunctions when idle (aura#165). - aura: Documentation: Update Contribution Guidelines and Coding Conventions in the Developer Guide. - aura: Documentation: Extend section for developers on performing releases. - aura: Change `/trackservice` endpoints to `/engine/api/v1/trackservice` and `/engine/api/v1/trackservice/current` according to API namespace conventions (aura#190). - steering: The `Host`, `Note`, `Show` models & serializers reference the new `Image`. - steering: The `logo` field in the `Show` model is a reference to `Image`. - steering: The "conflict resolution" methods of `Schedule` are now service functions. - steering: Update all APIs to return attributes / properties in camelCase notation (aura#141) - steering: Use `_id` suffix for all object reference in REST APIs (aura#166) - steering: Use blank strings instead of nullable strings in REST APIs (aura#167) - steering: Upgrade Poetry dependencies and Django to the next LTS version (steering#137) - dashboard: The timeslot overview has been fully revised (4ef88279). - dashboard: The timeslot show notes editor has been fully revised (#141, 57e1e10f). - dashboard: Past schedules are now hidden in the show manager (#120, 8cd743de). - dashboard: Schedules are now shown with their respective start and end date (#121, f9dc6fef). - dashboard: The calendar day-view has been fully revised (#155, 9ac48a55, 2a68a7ac). - dashboard: The slots in the calendar week-view have been from 30 to 15 minutes to make it easier to - dashboard: create shorter slots (#151, 3fc47383). - dashboard: Very short timeslots in the calendar week-view now take up less space (#151, 3fc47383, bfe7f813). - dashboard: Show start and end time in calendar tooltip if the event is too short to render it as content (#173, cf5ac12e). - dashboard: The show manager interface for editing the show details has been overhauled, changing the overall appearance - dashboard: and the way some of the fields are edited (db7dc49d). - dashboard-clock: Provide properties in API schemas in CamelCase notation (aura#141) - engine: Provide properties in API schemas in CamelCase notation (aura#141) - engine-api: Make properties in API schemas in CamelCase notation (aura#141) - engine-api: Avoid deprecation warning by replacing JSON encoder (#35) - engine-api: Change HTTP status codes (204 No Content) for successful but empty POST/PUT responses, adapt tests (#5) - engine-core: Make properties in API schemas in CamelCase notation (aura#141) - engine-core: Configuration: Renamed environment variable `AURA_ENGINE_SERVER_TIMEOUT` to `AURA_ENGINE_SERVER_TIMEOUT` - engine-core: and configuration setting `telnet_server_timeout` to `server_timeout`. - engine-core: Configuration: Increase default value for `server_timeout`, to avoid malfunctions when idle (aura#165) ### Deprecated - aura: Nested API endpoints in Steering and Tank are now deprecated. Compare the specification at api.aura.radio ### Removed - steering: The abstract `ModelWithImageFields` from the program models. - steering: The `ThumbnailsMixin` from the program serializers. - steering: The abstract `ModelWithCreatedUpdatedFields` from the program models. - dashboard: Non-functional nav button to broadcast management on show detail page (#133, e4083e66). - engine: Remove mail service as it will be replaced by Prometheus monitoring (engine#109) ### Fixed - aura: Fix an issue where `make aura-user.add` causes an unrelated Python error, raised from another command (#183). - aura: Fix the location of the Docker Compose bundles in the README. - aura: Fix an issue where `/trackservice` was not reachable (#159). - aura: Fix an issue where some settings in the `.env` and `.yml` where not applied correctly (#160). - aura: Fix an issue with the `aura-playout` targets in the Makefile (#168). - aura: Documentation: Replace old "meta" repository references with "aura". - steering: use kebab-case in URLs - steering: don’t output invalid PPOI format - steering: note image should allow null values - steering: don’t force REST API consumers to set `repetition_of` for timeslots - steering: The timeslot generation leaves the `last_date` unset if it is null. - steering: Note.tags attribute not updated via API (steering#157) - steering: make subtitle field in Category a CharField - dashboard: Navigation would sometimes freeze, after an application error in the playlists view (#132, e4083e66). - dashboard: Calendar would sometimes crash if playlist data is missing (#132, a3e8e3b0). - dashboard: Switching between the weekand day-view in the calendar no longer squishes the week-view (#153, e28eb4f7). - dashboard: The calendar uses entire viewport height now (#154, 4c90f277). - dashboard: Users are now able to create a timeslot in a calendar week slot that has already started (#167, 3d4e9b28). - dashboard: HTML in the show title, short description and description is now correctly rendered (#129, 649b4c0b). - engine: Fix an issue where the Engine version is displayed in the logs wrongly - engine-api: Fix an issue where the configuration file is overwritten in the `make init.dev` target - engine-api: Fix an issue where the Docker Compose healthcheck failed (#39) - engine-api: Fix broken endpoint `/trackservice` (aura#185) - engine-core: Telnet server sample config not working (engine-core#45). - engine-core: Extend and improve output for `make help`. - engine-recorder: Fixed a bug where the recorder would not start when trying to record a web stream (aura#182) ## [1.0.0-alpha1] - 2023-03-02 Initial release.