docs: replace jekyll with docusaurus
- jsnon5 not handled by pre-commit Co-authored-by: Zachary Klosko <zklosko@users.noreply.github.com>
This commit is contained in:
parent
9eab3b8d17
commit
8d8e55f236
42 changed files with 8428 additions and 4263 deletions
149
website/.gitignore
vendored
Normal file
149
website/.gitignore
vendored
Normal file
|
@ -0,0 +1,149 @@
|
|||
## Custom .gitignore
|
||||
################################################################################
|
||||
|
||||
# production
|
||||
/build
|
||||
|
||||
# generated files
|
||||
.cache-loader
|
||||
|
||||
# misc
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
|
||||
## Github Node .gitignore
|
||||
## See https://github.com/github/gitignore/blob/main/Node.gitignore
|
||||
################################################################################
|
||||
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
lerna-debug.log*
|
||||
.pnpm-debug.log*
|
||||
|
||||
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
||||
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
*.seed
|
||||
*.pid.lock
|
||||
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||
lib-cov
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage
|
||||
*.lcov
|
||||
|
||||
# nyc test coverage
|
||||
.nyc_output
|
||||
|
||||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||
.grunt
|
||||
|
||||
# Bower dependency directory (https://bower.io/)
|
||||
bower_components
|
||||
|
||||
# node-waf configuration
|
||||
.lock-wscript
|
||||
|
||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||
build/Release
|
||||
|
||||
# Dependency directories
|
||||
node_modules/
|
||||
jspm_packages/
|
||||
|
||||
# Snowpack dependency directory (https://snowpack.dev/)
|
||||
web_modules/
|
||||
|
||||
# TypeScript cache
|
||||
*.tsbuildinfo
|
||||
|
||||
# Optional npm cache directory
|
||||
.npm
|
||||
|
||||
# Optional eslint cache
|
||||
.eslintcache
|
||||
|
||||
# Optional stylelint cache
|
||||
.stylelintcache
|
||||
|
||||
# Microbundle cache
|
||||
.rpt2_cache/
|
||||
.rts2_cache_cjs/
|
||||
.rts2_cache_es/
|
||||
.rts2_cache_umd/
|
||||
|
||||
# Optional REPL history
|
||||
.node_repl_history
|
||||
|
||||
# Output of 'npm pack'
|
||||
*.tgz
|
||||
|
||||
# Yarn Integrity file
|
||||
.yarn-integrity
|
||||
|
||||
# dotenv environment variable files
|
||||
.env
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
.env.local
|
||||
|
||||
# parcel-bundler cache (https://parceljs.org/)
|
||||
.cache
|
||||
.parcel-cache
|
||||
|
||||
# Next.js build output
|
||||
.next
|
||||
out
|
||||
|
||||
# Nuxt.js build / generate output
|
||||
.nuxt
|
||||
dist
|
||||
|
||||
# Gatsby files
|
||||
.cache/
|
||||
# Comment in the public line in if your project uses Gatsby and not Next.js
|
||||
# https://nextjs.org/blog/next-9-1#public-directory-support
|
||||
# public
|
||||
|
||||
# vuepress build output
|
||||
.vuepress/dist
|
||||
|
||||
# vuepress v2.x temp and cache directory
|
||||
.temp
|
||||
.cache
|
||||
|
||||
# Docusaurus cache and generated files
|
||||
.docusaurus
|
||||
|
||||
# Serverless directories
|
||||
.serverless/
|
||||
|
||||
# FuseBox cache
|
||||
.fusebox/
|
||||
|
||||
# DynamoDB Local files
|
||||
.dynamodb/
|
||||
|
||||
# TernJS port file
|
||||
.tern-port
|
||||
|
||||
# Stores VSCode versions used for testing VSCode extensions
|
||||
.vscode-test
|
||||
|
||||
# yarn v2
|
||||
.yarn/cache
|
||||
.yarn/unplugged
|
||||
.yarn/build-state.yml
|
||||
.yarn/install-state.gz
|
||||
.pnp.*
|
25
website/README.md
Normal file
25
website/README.md
Normal file
|
@ -0,0 +1,25 @@
|
|||
# Website
|
||||
|
||||
This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator.
|
||||
|
||||
### Installation
|
||||
|
||||
```
|
||||
$ yarn
|
||||
```
|
||||
|
||||
### Local Development
|
||||
|
||||
```
|
||||
$ yarn start
|
||||
```
|
||||
|
||||
This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.
|
||||
|
||||
### Build
|
||||
|
||||
```
|
||||
$ yarn build
|
||||
```
|
||||
|
||||
This command generates static content into the `build` directory and can be served using any static contents hosting service.
|
3
website/babel.config.js
Normal file
3
website/babel.config.js
Normal file
|
@ -0,0 +1,3 @@
|
|||
module.exports = {
|
||||
presets: [require.resolve("@docusaurus/core/lib/babel/preset")],
|
||||
};
|
108
website/docusaurus.config.js
Normal file
108
website/docusaurus.config.js
Normal file
|
@ -0,0 +1,108 @@
|
|||
// @ts-check
|
||||
// Note: type annotations allow type checking and IDEs autocompletion
|
||||
|
||||
const lightCodeTheme = require("prism-react-renderer/themes/github");
|
||||
const darkCodeTheme = require("prism-react-renderer/themes/dracula");
|
||||
|
||||
/** @type {import('@docusaurus/types').Config} */
|
||||
const config = {
|
||||
title: "Libretime",
|
||||
tagline: "Broadcast without limits",
|
||||
url: "https://libretime.org",
|
||||
baseUrl: "/",
|
||||
onBrokenLinks: "throw",
|
||||
onBrokenMarkdownLinks: "throw",
|
||||
favicon: "img/favicon.ico",
|
||||
organizationName: "libretime",
|
||||
projectName: "libretime",
|
||||
trailingSlash: true,
|
||||
|
||||
plugins: [
|
||||
[
|
||||
require.resolve("@cmfcmf/docusaurus-search-local"),
|
||||
{
|
||||
indexBlog: false,
|
||||
indexPages: false,
|
||||
},
|
||||
],
|
||||
],
|
||||
|
||||
i18n: {
|
||||
defaultLocale: "en",
|
||||
locales: ["en"],
|
||||
},
|
||||
|
||||
presets: [
|
||||
[
|
||||
"classic",
|
||||
/** @type {import('@docusaurus/preset-classic').Options} */
|
||||
({
|
||||
docs: {
|
||||
path: "../docs",
|
||||
sidebarPath: require.resolve("./sidebars.js"),
|
||||
editUrl: "https://github.com/libretime/libretime",
|
||||
},
|
||||
blog: false,
|
||||
theme: {
|
||||
customCss: require.resolve("./src/css/custom.css"),
|
||||
},
|
||||
}),
|
||||
],
|
||||
],
|
||||
|
||||
themeConfig:
|
||||
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
|
||||
({
|
||||
navbar: {
|
||||
title: "Libretime",
|
||||
logo: {
|
||||
alt: "Libretime tower",
|
||||
src: "img/logo.svg",
|
||||
},
|
||||
items: [
|
||||
{ to: "/contribute", label: "Contribute", position: "left" },
|
||||
{ type: "localeDropdown", position: "right" },
|
||||
{
|
||||
href: "https://github.com/libretime/libretime",
|
||||
label: "GitHub",
|
||||
position: "right",
|
||||
},
|
||||
],
|
||||
},
|
||||
footer: {
|
||||
style: "dark",
|
||||
links: [
|
||||
{
|
||||
title: "Community",
|
||||
items: [
|
||||
{
|
||||
label: "Discourse",
|
||||
href: "https://discourse.libretime.org",
|
||||
},
|
||||
{
|
||||
label: "Mattermost",
|
||||
href: "https://chat.libretime.org",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "More",
|
||||
items: [
|
||||
{
|
||||
label: "GitHub",
|
||||
href: "https://github.com/libretime/libretime",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
copyright: `Code licensed under AGPLv3; docs licensed under GPLv2.`,
|
||||
},
|
||||
prism: {
|
||||
theme: lightCodeTheme,
|
||||
darkTheme: darkCodeTheme,
|
||||
additionalLanguages: ["apacheconf", "ini"],
|
||||
},
|
||||
}),
|
||||
};
|
||||
|
||||
module.exports = config;
|
45
website/package.json
Normal file
45
website/package.json
Normal file
|
@ -0,0 +1,45 @@
|
|||
{
|
||||
"name": "website",
|
||||
"version": "0.0.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"docusaurus": "docusaurus",
|
||||
"start": "docusaurus start",
|
||||
"build": "docusaurus build",
|
||||
"swizzle": "docusaurus swizzle",
|
||||
"deploy": "docusaurus deploy",
|
||||
"clear": "docusaurus clear",
|
||||
"serve": "docusaurus serve",
|
||||
"write-translations": "docusaurus write-translations",
|
||||
"write-heading-ids": "docusaurus write-heading-ids",
|
||||
"typecheck": "tsc"
|
||||
},
|
||||
"dependencies": {
|
||||
"@cmfcmf/docusaurus-search-local": "^0.10.0",
|
||||
"@docusaurus/core": "^2.0.0-beta.15",
|
||||
"@docusaurus/preset-classic": "^2.0.0-beta.15",
|
||||
"@mdx-js/react": "^1.6.21",
|
||||
"clsx": "^1.1.1",
|
||||
"prism-react-renderer": "^1.3.1",
|
||||
"react": "^17.0.2",
|
||||
"react-dom": "^17.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@docusaurus/module-type-aliases": "2.0.0-beta.15",
|
||||
"@tsconfig/docusaurus": "^1.0.4",
|
||||
"@types/node": "^17.0.16",
|
||||
"typescript": "^4.5.5"
|
||||
},
|
||||
"browserslist": {
|
||||
"production": [
|
||||
">0.5%",
|
||||
"not dead",
|
||||
"not op_mini all"
|
||||
],
|
||||
"development": [
|
||||
"last 1 chrome version",
|
||||
"last 1 firefox version",
|
||||
"last 1 safari version"
|
||||
]
|
||||
}
|
||||
}
|
31
website/sidebars.js
Normal file
31
website/sidebars.js
Normal file
|
@ -0,0 +1,31 @@
|
|||
/**
|
||||
* Creating a sidebar enables you to:
|
||||
- create an ordered group of docs
|
||||
- render a sidebar for each doc of that group
|
||||
- provide next/previous navigation
|
||||
|
||||
The sidebars can be generated from the filesystem, or explicitly defined here.
|
||||
|
||||
Create as many sidebars as you want.
|
||||
*/
|
||||
|
||||
// @ts-check
|
||||
|
||||
/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
|
||||
const sidebars = {
|
||||
// By default, Docusaurus generates a sidebar from the docs folder structure
|
||||
tutorialSidebar: [{ type: "autogenerated", dirName: "." }],
|
||||
|
||||
// But you can create a sidebar manually
|
||||
/*
|
||||
tutorialSidebar: [
|
||||
{
|
||||
type: 'category',
|
||||
label: 'Tutorial',
|
||||
items: ['hello'],
|
||||
},
|
||||
],
|
||||
*/
|
||||
};
|
||||
|
||||
module.exports = sidebars;
|
11
website/src/components/HomepageFeatures.module.css
Normal file
11
website/src/components/HomepageFeatures.module.css
Normal file
|
@ -0,0 +1,11 @@
|
|||
.features {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 2rem 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.featureSvg {
|
||||
height: 200px;
|
||||
width: 200px;
|
||||
}
|
75
website/src/components/HomepageFeatures.tsx
Normal file
75
website/src/components/HomepageFeatures.tsx
Normal file
|
@ -0,0 +1,75 @@
|
|||
import useBaseUrl from "@docusaurus/useBaseUrl";
|
||||
import React from "react";
|
||||
import clsx from "clsx";
|
||||
import styles from "./HomepageFeatures.module.css";
|
||||
|
||||
type FeatureItem = {
|
||||
title: string;
|
||||
image: string;
|
||||
description: JSX.Element;
|
||||
};
|
||||
|
||||
const FeatureList: FeatureItem[] = [
|
||||
{
|
||||
title: "Easy to Use",
|
||||
image: "/img/undraw_happy_news.svg",
|
||||
description: (
|
||||
<>
|
||||
Libretime was designed from the ground up to be easily installed and
|
||||
used to get your radio station on the air quickly.
|
||||
</>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: "Powerful Library Management",
|
||||
image: "/img/undraw_upload.svg",
|
||||
description: (
|
||||
<>
|
||||
Import everything from music to sweepers to full-length programs, then
|
||||
have shows and podcasts scheduled automatically.
|
||||
</>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: "AM/FM & Web",
|
||||
image: "/img/undraw_podcast.svg",
|
||||
description: (
|
||||
<>
|
||||
Audio playout to your broadcasting console or transmitter, or start an
|
||||
internet radio station directly from the cloud. Libretime can do it all.
|
||||
</>
|
||||
),
|
||||
},
|
||||
];
|
||||
|
||||
function Feature({ title, image, description }: FeatureItem) {
|
||||
return (
|
||||
<div className={clsx("col col--4")}>
|
||||
<div className="text--center">
|
||||
<img
|
||||
className={styles.featureSvg}
|
||||
alt={title}
|
||||
src={useBaseUrl(image)}
|
||||
/>
|
||||
</div>
|
||||
<div className="text--center padding-horiz--md">
|
||||
<h3>{title}</h3>
|
||||
<p>{description}</p>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default function HomepageFeatures(): JSX.Element {
|
||||
return (
|
||||
<section className={styles.features}>
|
||||
<div className="container">
|
||||
<div className="row">
|
||||
{FeatureList.map((props, idx) => (
|
||||
<Feature key={idx} {...props} />
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
39
website/src/css/custom.css
Normal file
39
website/src/css/custom.css
Normal file
|
@ -0,0 +1,39 @@
|
|||
/**
|
||||
* Any CSS included here will be global. The classic template
|
||||
* bundles Infima by default. Infima is a CSS framework designed to
|
||||
* work well for content-centric websites.
|
||||
*/
|
||||
|
||||
/* You can override the default Infima variables here. */
|
||||
:root {
|
||||
--ifm-color-primary: #ee4b28;
|
||||
--ifm-color-primary-dark: #e83812;
|
||||
--ifm-color-primary-darker: #db3511;
|
||||
--ifm-color-primary-darkest: #b42c0e;
|
||||
--ifm-color-primary-light: #f06142;
|
||||
--ifm-color-primary-lighter: #f16b4f;
|
||||
--ifm-color-primary-lightest: #f48c75;
|
||||
--ifm-code-font-size: 95%;
|
||||
}
|
||||
|
||||
/* For readability concerns, you should choose a lighter palette in dark mode. */
|
||||
html[data-theme="dark"] {
|
||||
--ifm-color-primary: #e57962;
|
||||
--ifm-color-primary-dark: #e06146;
|
||||
--ifm-color-primary-darker: #de5538;
|
||||
--ifm-color-primary-darkest: #c43d21;
|
||||
--ifm-color-primary-light: #ea917e;
|
||||
--ifm-color-primary-lighter: #ec9d8c;
|
||||
--ifm-color-primary-lightest: #f3c1b6;
|
||||
}
|
||||
|
||||
.docusaurus-highlight-code-line {
|
||||
background-color: rgba(0, 0, 0, 0.1);
|
||||
display: block;
|
||||
margin: 0 calc(-1 * var(--ifm-pre-padding));
|
||||
padding: 0 var(--ifm-pre-padding);
|
||||
}
|
||||
|
||||
html[data-theme="dark"] .docusaurus-highlight-code-line {
|
||||
background-color: rgba(0, 0, 0, 0.3);
|
||||
}
|
87
website/src/pages/contribute.md
Normal file
87
website/src/pages/contribute.md
Normal file
|
@ -0,0 +1,87 @@
|
|||
---
|
||||
title: Contribute to Libretime
|
||||
---
|
||||
|
||||
# Contribute to Libretime
|
||||
|
||||
LibreTime is a fork of AirTime due to stalled development of the open source version. For background on this, see this [open letter to the Airtime community](https://gist.github.com/hairmare/8c03b69c9accc90cfe31fd7e77c3b07d).
|
||||
|
||||
## Code of conduct
|
||||
|
||||
Before any contribution, read and be prepared to adhere to our
|
||||
[code of conduct](https://github.com/libretime/code-of-conduct/blob/main/code_of_conduct.md).
|
||||
|
||||
In addition, LibreTime follow the standardized
|
||||
[C4 development process](https://rfc.zeromq.org/spec:42/c4/), in which you can
|
||||
find explanation about most of the development workflows for LibreTime.
|
||||
|
||||
## Bug reporting
|
||||
|
||||
Following these guidelines helps maintainers and the community understand your
|
||||
report, reproduce the behavior, and find related reports.
|
||||
|
||||
Before creating bug reports, please check the following list, to be sure that
|
||||
you need to create one:
|
||||
|
||||
- Check the [LibreTime forum](https://discourse.libretime.org/) for existing
|
||||
questions and discussion.
|
||||
- Check that your issue does not already exist in the
|
||||
[issue tracker](https://github.com/libretime/libretime/issues?q=is%3aissue+label%3abug).
|
||||
|
||||
:::note
|
||||
|
||||
If you find a closed issue that seems like it is the same thing that you're experiencing, open a new issue and include a link to the original issue in the body of your new one.
|
||||
|
||||
:::
|
||||
|
||||
When you are creating a bug report, please include as many details as possible.
|
||||
Fill out the [required template](https://github.com/libretime/libretime/issues/new?labels=bug&template=bug_report.md),
|
||||
the information it asks helps the maintainers resolve the issue faster.
|
||||
|
||||
Bugs are tracked on the [official issue tracker](https://github.com/libretime/libretime/issues).
|
||||
|
||||
## Suggesting enhancements
|
||||
|
||||
This section guides you through submitting an enhancement suggestion for
|
||||
LibreTime, including completely new features and minor improvements to existing
|
||||
functionality. Following these guidelines helps maintainers and the community
|
||||
understand your suggestion and find related suggestions.
|
||||
|
||||
Before creating enhancement suggestions, please check the following list, as you
|
||||
might find out that you don't need to create one:
|
||||
|
||||
- **Check the [LibreTime forum](https://discourse.libretime.org/)** for existing
|
||||
questions and discussion.
|
||||
- **Check that your issue does not already exist in the
|
||||
[issue tracker](https://github.com/libretime/libretime/issues?q=is%3aissue+label%3afeature-request)**.
|
||||
|
||||
When you are creating an enhancement suggestion, please include as many details
|
||||
as possible. Fill in [the template](https://github.com/libretime/libretime/issues/new?labels=feature-request&template=feature_request.md),
|
||||
including the steps that you imagine you would take if the feature you're
|
||||
requesting existed.
|
||||
|
||||
## Financial
|
||||
|
||||
LibreTime is run by volunteers who write code and manage the project in their
|
||||
spare time. Financial contributions help us pay for our domain and back-end
|
||||
infrastructure. It can also be used to cover the costs of development for
|
||||
important features and conference attendance. If you wish to contribute
|
||||
financially, you can do so through our
|
||||
[OpenCollective](https://opencollective.com/libretime).
|
||||
|
||||
## Translation
|
||||
|
||||
LibreTime can run in over 15 different languages due to the gracious help of our volunteers.
|
||||
|
||||
Libretime is now localized using [Weblate](https://weblate.org/en/). If you would like to contribute a language translation, create an account and start working on [our Weblate page](https://hosted.weblate.org/projects/libretime/).
|
||||
|
||||
## Write documentation
|
||||
|
||||
One of the simplest ways to get started contributing to a project is through
|
||||
improving documentation. LibreTime is constantly evolving, this means that
|
||||
sometimes our documentation has gaps. You can help by adding missing sections,
|
||||
editing the existing content so it is more accessible or creating new content
|
||||
(tutorials, FAQs, etc).
|
||||
|
||||
Issues pertaining to the documentation are usually marked with the [Documentation](https://github.com/libretime/libretime/labels/documentation)
|
||||
label.
|
28
website/src/pages/index.module.css
Normal file
28
website/src/pages/index.module.css
Normal file
|
@ -0,0 +1,28 @@
|
|||
/**
|
||||
* CSS files with the .module.css suffix will be treated as CSS modules
|
||||
* and scoped locally.
|
||||
*/
|
||||
|
||||
.heroBanner {
|
||||
padding: 4rem 0;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 966px) {
|
||||
.heroBanner {
|
||||
padding: 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
.buttons {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.buttonPadding {
|
||||
margin-left: 0.25rem !important;
|
||||
margin-right: 0.25rem !important;
|
||||
}
|
52
website/src/pages/index.tsx
Normal file
52
website/src/pages/index.tsx
Normal file
|
@ -0,0 +1,52 @@
|
|||
import React from "react";
|
||||
import clsx from "clsx";
|
||||
import Layout from "@theme/Layout";
|
||||
import Link from "@docusaurus/Link";
|
||||
import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
|
||||
import styles from "./index.module.css";
|
||||
|
||||
import HomepageFeatures from "../components/HomepageFeatures";
|
||||
|
||||
function HomepageHeader() {
|
||||
const { siteConfig } = useDocusaurusContext();
|
||||
return (
|
||||
<header className={clsx("hero hero--primary", styles.heroBanner)}>
|
||||
<div className="container">
|
||||
<h1 className="hero__title">{siteConfig.title}</h1>
|
||||
<p className="hero__subtitle">{siteConfig.tagline}</p>
|
||||
<div className={styles.buttons}>
|
||||
<Link
|
||||
className={clsx(
|
||||
"button button--secondary button--lg",
|
||||
styles.buttonPadding
|
||||
)}
|
||||
to="/docs/intro"
|
||||
>
|
||||
Get started 🚀
|
||||
</Link>
|
||||
<Link
|
||||
className={clsx(
|
||||
"button button--secondary button--lg",
|
||||
styles.buttonPadding
|
||||
)}
|
||||
to="/release-notes"
|
||||
>
|
||||
Release Notes
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
);
|
||||
}
|
||||
|
||||
export default function Home(): JSX.Element {
|
||||
const { siteConfig } = useDocusaurusContext();
|
||||
return (
|
||||
<Layout title={siteConfig.title} description={siteConfig.tagline}>
|
||||
<HomepageHeader />
|
||||
<main>
|
||||
<HomepageFeatures />
|
||||
</main>
|
||||
</Layout>
|
||||
);
|
||||
}
|
159
website/src/pages/release-notes.md
Normal file
159
website/src/pages/release-notes.md
Normal file
|
@ -0,0 +1,159 @@
|
|||
---
|
||||
title: Libretime 3.0 Alpha 10 Released
|
||||
---
|
||||
|
||||
# Release Notes for Libretime 3.0 Alpha 10
|
||||
|
||||
The full tarball for the **3.0.0-alpha.10** release of LibreTime is available [here](https://github.com/LibreTime/libretime/releases/download/3.0.0-alpha.10/libretime-3.0.0-alpha.10.tar.gz).
|
||||
|
||||
Since this is an alpha release there will be bugs in the code.
|
||||
|
||||
Please report new issues and/or feature requests in the [issue tracker](https://github.com/LibreTime/libretime/issues). Join our [discourse](https://discourse.libretime.org/) or chat to us on our [Mattermost](https://chat.libretime.org/e) instance if you need help and for general discussion.
|
||||
|
||||
## Features
|
||||
|
||||
- Support `force_ssl` configuration option in Python applications
|
||||
- Move `airtime_mvc` to `legacy` and move all PHP related files under it
|
||||
- Support `Authorization: Api-Key` header in API v1
|
||||
- Use pip for LibreTime Python package installation
|
||||
- Move Python scripts into `/usr/local/bin`
|
||||
- Add REST API v2 (unstable and subject to change)
|
||||
|
||||
## Bug Fixes
|
||||
|
||||
- Renamed airtime_analyzer to libretime-analyzer
|
||||
- Prevent autoload playlists running on deleted show instances
|
||||
- Playout history can be exported as CSV and PDF
|
||||
- Explicitly fail if the HTTP requests made by the Python applications fail
|
||||
- Fix API v2 schedule endpoint item filtering and overlapping playout
|
||||
- Fix pypo overlapping track playout
|
||||
- Fix installation when Icecast is already installed
|
||||
- Request 1Gb of memory on libvirt Vagrant boxes
|
||||
- Clean up CORS setup in the installer
|
||||
- Pin the `setuptools` version to ensure older versions of LibreTime can still be installed
|
||||
|
||||
## Deprecated Features
|
||||
|
||||
- Removed broken Soundcloud integration
|
||||
- Dropped support for Ubuntu Xenial as it is end-of-life
|
||||
- Dropped support for Debian Stretch as it is end-of-life
|
||||
- Removed SysV and Upstart init system files
|
||||
- Removed broken My Podcasts feature
|
||||
|
||||
## Contributors
|
||||
|
||||
The LibreTime project wants to thank the following contributors for authoring PRs to this release:
|
||||
|
||||
- [@jooola](https://github.com/jooola)
|
||||
- [@paddatrapper](https://github.com/paddatrapper)
|
||||
- [@xabispacebiker](https://github.com/xabispacebiker)
|
||||
- [@malespiaut](https://github.com/malespiaut)
|
||||
- [@zklosko](https://zklosko.github.io)
|
||||
- [@brekemeier](https://github.com/brekemeier)
|
||||
- [@jeromelebleu](https://github.com/jeromelebleu)
|
||||
- [@danielhjames](https://github.com/danielhjames)
|
||||
- [@rjhelms](https://github.com/rjhelms)
|
||||
- [@hairmare](https://github.com/hairmare)
|
||||
|
||||
## Installation
|
||||
|
||||
The main installation docs may be found [here](/docs/getting-started/install/). They describe a "developer" install using the bundled `install` script.
|
||||
|
||||
We are preparing packages for supported distros and you can take those for a spin if you would like to. Usually the packages get built pretty soon after a release is published. If the current version is not available from the below sources you should wait for a while until they get uploaded.
|
||||
|
||||
- [Ubuntu packages](https://github.com/LibreTime/libretime-debian-packaging/releases)
|
||||
- [Debian packages](https://github.com/LibreTime/libretime-debian-packaging/releases)
|
||||
- [CentOS packages](https://build.opensuse.org/package/show/home:radiorabe:airtime/libretime)
|
||||
|
||||
Please reference these links for further information on how to install from packages. The install docs will get updated to show how to install packages once we have validated that the packages work properly and when the packages are available from a repository allowing you to automate updating to a new version.
|
||||
|
||||
If you want to skip the installer GUI completely you can configure LibreTime using `legacy/build/airtime.example.conf` as an template. Due to some Python/PHP differences you must remove all comments from the example to use it 😞. You'll also have to create some folder structures manually and check if the music dir got properly created directly in the database. Referencing a second install -fiap install on a non productive system for reference can help with this type of bootstrap.
|
||||
|
||||
## Updating
|
||||
|
||||
See [the docs](/docs/upgrading) for complete information on updating. Please ensure that you have proper backups and a rollback scenario in place before updating.
|
||||
If the update does not go smoothly, it may cause significant downtime, so you should always have a fallback system available during the update to ensure broadcast continuity.
|
||||
|
||||
If you installed from GitHub you can `git pull` in your local working copy and re-run the `./install` script with the same `--web-root` and `--web-user` arguments you used during the initial install. Tarball users can leave out the git pull part and just call the new version of the install script.
|
||||
|
||||
Once the update has taken place, you will need to run the following commands to clean up old scripts and configuration:
|
||||
|
||||
```shell
|
||||
# Remove the old packages
|
||||
sudo pip3 uninstall \
|
||||
airtime-playout \
|
||||
airtime-celery \
|
||||
api_clients
|
||||
|
||||
# Remove old entrypoints
|
||||
sudo rm -f \
|
||||
/usr/bin/airtime-liquidsoap \
|
||||
/usr/bin/airtime-playout \
|
||||
/usr/bin/pyponotify
|
||||
|
||||
# Remove old config files
|
||||
sudo rm -f \
|
||||
/etc/logrotate.d/airtime-liquidsoap
|
||||
|
||||
# Remove the old runtime and PHP directories
|
||||
sudo rm -rf \
|
||||
/var/run/airtime \
|
||||
/run/airtime \
|
||||
/usr/share/airtime/php/airtime_mvc
|
||||
|
||||
# Remove old python libraries entrypoints
|
||||
sudo rm -f \
|
||||
/usr/bin/airtime-liquidsoap \
|
||||
/usr/bin/airtime-playout \
|
||||
/usr/bin/libretime-analyzer \
|
||||
/usr/bin/libretime-api \
|
||||
/usr/bin/collectiongain \
|
||||
/usr/bin/django-admin \
|
||||
/usr/bin/django-admin.py \
|
||||
/usr/bin/markdown_py \
|
||||
/usr/bin/mid3cp \
|
||||
/usr/bin/mid3iconv \
|
||||
/usr/bin/mid3v2 \
|
||||
/usr/bin/moggsplit \
|
||||
/usr/bin/mutagen-inspect \
|
||||
/usr/bin/mutagen-pony \
|
||||
/usr/bin/pyponotify \
|
||||
/usr/bin/replaygain \
|
||||
/usr/bin/sqlformat
|
||||
```
|
||||
|
||||
## Known Issues
|
||||
|
||||
The following issues may need a workaround for the time being. Please search [the issues](https://github.com/LibreTime/libretime/issues) before reporting problems not listed below.
|
||||
|
||||
### Interface Customization Issues
|
||||
|
||||
The UI works best if you don't use it in an opinionated fashion and change just the bare minimal.
|
||||
|
||||
### No watched folder support
|
||||
|
||||
Currently LibreTime does not support watching folders. Uploading files through the web interface works fine and can be automated via a REST API. Re-implementing watched folder support is on the roadmap. Please consider helping out with the code to help speed things along if you want to use the feature. This is tracked in [#70](https://github.com/LibreTime/libretime/issues/70).
|
||||
|
||||
### No line in support
|
||||
|
||||
This feature went missing from LibreTime due to the fact that we based our code off of the saas-dev branch of legacy upstream and support for recording hasn't been ported to the new airtime analyzer ingest system. #42 currently tracks the progress being made on line in recording. This is tracked in [#42](https://github.com/LibreTime/libretime/issues/42).
|
||||
|
||||
### Playout won't work if locale is missing
|
||||
|
||||
Some minimal OS installs do not have a default locale configured. This only seems to affect some VPS installs as they often do not have a locale setup in the default images provided. This is tracked in [#317](https://github.com/LibreTime/libretime/issues/317).
|
||||
|
||||
You can set up the locale using a combination of the following commands. You might also want to consult the documentation of your VPS provider as it may contain an official way to set up locales when provisioning a VPS.
|
||||
|
||||
```shell
|
||||
# Set locale using systemds localectl
|
||||
localectl set-locale LANG="en_US.utf8"
|
||||
```
|
||||
|
||||
These instructions do not seem to work on all Debian based distros so you might need to use update-locale as follows.
|
||||
|
||||
```shell
|
||||
#Purge all locales but en_US.UTF-8
|
||||
sudo locale-gen --purge en_US.UTF-8
|
||||
#Populate LANGUAGE=
|
||||
sudo update-locale LANGUAGE="en_US.UTF-8"
|
||||
```
|
0
website/static/.nojekyll
Normal file
0
website/static/.nojekyll
Normal file
1
website/static/CNAME
Normal file
1
website/static/CNAME
Normal file
|
@ -0,0 +1 @@
|
|||
libretime.org
|
BIN
website/static/img/favicon.ico
Normal file
BIN
website/static/img/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 70 KiB |
15
website/static/img/logo.svg
Normal file
15
website/static/img/logo.svg
Normal file
|
@ -0,0 +1,15 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="163.839" height="127.68" viewBox="0 0 4335 3378" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" clip-rule="evenodd">
|
||||
<defs>
|
||||
<style>
|
||||
.fil2{fill:#e62129}
|
||||
</style>
|
||||
</defs>
|
||||
<g id="Layer_x0020_1">
|
||||
<g id="_986080032">
|
||||
<path d="M3469 230 3701-2c393 393 635 935 635 1533 0 599-242 1141-635 1534l-232-232c333-333 539-793 539-1302 0-508-206-968-539-1301z" fill="none" />
|
||||
<path d="M2167 614c225 0 431 81 590 215l-233 233c-99-75-223-120-357-120-133 0-257 45-356 120l-233-233c159-134 365-215 589-215zm141 1824 111 942h-504l112-942c-169-26-323-98-449-204l233-233c85 64 187 106 299 117v-117h-57c-70 0-127-58-127-128v-546c0-70 57-128 127-128h229c70 0 127 58 127 128v546c0 70-57 128-127 128h-57v117c112-11 214-53 299-117l233 233c-126 106-280 178-449 204zm8-1171c27 0 49 21 49 48s-22 49-49 49c-26 0-48-22-48-49s22-48 48-48zm-126 15c19 0 34 15 34 33 0 19-15 33-34 33-18 0-33-14-33-33 0-18 15-33 33-33zm-105 5c15 0 28 13 28 28 0 16-13 28-28 28-16 0-28-12-28-28 0-15 12-28 28-28zm-94 7c12 0 21 9 21 21s-9 21-21 21-21-9-21-21 9-21 21-21zm325 115c27 0 49 22 49 49 0 26-22 48-49 48-26 0-48-22-48-48 0-27 22-49 48-49zm-126 15c19 0 34 15 34 34 0 18-15 33-34 33-18 0-33-15-33-33 0-19 15-34 33-34zm-105 6c15 0 28 12 28 28 0 15-13 28-28 28-16 0-28-13-28-28 0-16 12-28 28-28zm-94 6c12 0 21 10 21 22 0 11-9 21-21 21s-21-10-21-21c0-12 9-22 21-22zm325 115c27 0 49 22 49 49s-22 49-49 49c-26 0-48-22-48-49s22-49 48-49zm-126 16c19 0 34 15 34 33s-15 33-34 33c-18 0-33-15-33-33s15-33 33-33zm-105 5c15 0 28 13 28 28 0 16-13 28-28 28-16 0-28-12-28-28 0-15 12-28 28-28zm-94 7c12 0 21 9 21 21s-9 21-21 21-21-9-21-21 9-21 21-21zm325 115c27 0 49 22 49 48 0 27-22 49-49 49-26 0-48-22-48-49 0-26 22-48 48-48zm-126 15c19 0 34 15 34 33 0 19-15 34-34 34-18 0-33-15-33-34 0-18 15-33 33-33zm-105 5c15 0 28 13 28 28 0 16-13 29-28 29-16 0-28-13-28-29 0-15 12-28 28-28zm-94 7c12 0 21 10 21 21 0 12-9 22-21 22s-21-10-21-22c0-11 9-21 21-21zm325 115c27 0 49 22 49 49s-22 49-49 49c-26 0-48-22-48-49s22-49 48-49zm-126 16c19 0 34 15 34 33s-15 33-34 33c-18 0-33-15-33-33s15-33 33-33zm-105 5c15 0 28 12 28 28 0 15-13 28-28 28-16 0-28-13-28-28 0-16 12-28 28-28zm-94 7c12 0 21 9 21 21s-9 21-21 21-21-9-21-21 9-21 21-21zm-240-749c-107 106-173 254-173 416 0 163 66 310 173 417l-232 232c-166-166-269-395-269-649 0-253 103-482 269-648l232 232zm1065-232c166 166 269 395 269 648 0 254-103 483-269 649l-232-232c107-107 173-254 173-417 0-162-66-310-173-416l232-232z" fill="#474443" />
|
||||
<path class="fil2" d="M1308 2390c-220-220-356-523-356-859 0-335 136-639 356-859l-232-232c-279 280-452 665-452 1091s173 812 452 1091l232-232zM3027 672c220 220 355 524 355 859 0 336-135 639-355 859l232 232c279-279 452-665 452-1091s-173-811-452-1091l-232 232z" />
|
||||
<path class="fil2" d="M866 2833c-333-333-539-793-539-1302 0-508 206-968 539-1301L634-2C241 391-1 933-1 1531c0 599 242 1141 635 1534l232-232zM3469 230c333 333 539 793 539 1301 0 509-206 969-539 1302l232 232c393-393 635-935 635-1534 0-598-242-1140-635-1533l-232 232z" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.1 KiB |
1
website/static/img/undraw_happy_news.svg
Normal file
1
website/static/img/undraw_happy_news.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 11 KiB |
1
website/static/img/undraw_podcast.svg
Normal file
1
website/static/img/undraw_podcast.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 15 KiB |
1
website/static/img/undraw_upload.svg
Normal file
1
website/static/img/undraw_upload.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 15 KiB |
6
website/tsconfig.json
Normal file
6
website/tsconfig.json
Normal file
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"extends": "@tsconfig/docusaurus/tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"baseUrl": "."
|
||||
}
|
||||
}
|
7799
website/yarn.lock
Normal file
7799
website/yarn.lock
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue