Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • funkwhale/funkwhale
  • Luclu7/funkwhale
  • mbothorel/funkwhale
  • EorlBruder/funkwhale
  • tcit/funkwhale
  • JocelynDelalande/funkwhale
  • eneiluj/funkwhale
  • reg/funkwhale
  • ButterflyOfFire/funkwhale
  • m4sk1n/funkwhale
  • wxcafe/funkwhale
  • andybalaam/funkwhale
  • jcgruenhage/funkwhale
  • pblayo/funkwhale
  • joshuaboniface/funkwhale
  • n3ddy/funkwhale
  • gegeweb/funkwhale
  • tohojo/funkwhale
  • emillumine/funkwhale
  • Te-k/funkwhale
  • asaintgenis/funkwhale
  • anoadragon453/funkwhale
  • Sakada/funkwhale
  • ilianaw/funkwhale
  • l4p1n/funkwhale
  • pnizet/funkwhale
  • dante383/funkwhale
  • interfect/funkwhale
  • akhardya/funkwhale
  • svfusion/funkwhale
  • noplanman/funkwhale
  • nykopol/funkwhale
  • roipoussiere/funkwhale
  • Von/funkwhale
  • aurieh/funkwhale
  • icaria36/funkwhale
  • floreal/funkwhale
  • paulwalko/funkwhale
  • comradekingu/funkwhale
  • FurryJulie/funkwhale
  • Legolars99/funkwhale
  • Vierkantor/funkwhale
  • zachhats/funkwhale
  • heyjake/funkwhale
  • sn0w/funkwhale
  • jvoisin/funkwhale
  • gordon/funkwhale
  • Alexander/funkwhale
  • bignose/funkwhale
  • qasim.ali/funkwhale
  • fakegit/funkwhale
  • Kxze/funkwhale
  • stenstad/funkwhale
  • creak/funkwhale
  • Kaze/funkwhale
  • Tixie/funkwhale
  • IISergII/funkwhale
  • lfuelling/funkwhale
  • nhaddag/funkwhale
  • yoasif/funkwhale
  • ifischer/funkwhale
  • keslerm/funkwhale
  • flupe/funkwhale
  • petitminion/funkwhale
  • ariasuni/funkwhale
  • ollie/funkwhale
  • ngaumont/funkwhale
  • techknowlogick/funkwhale
  • Shleeble/funkwhale
  • theflyingfrog/funkwhale
  • jonatron/funkwhale
  • neobrain/funkwhale
  • eorn/funkwhale
  • KokaKiwi/funkwhale
  • u1-liquid/funkwhale
  • marzzzello/funkwhale
  • sirenwatcher/funkwhale
  • newer027/funkwhale
  • codl/funkwhale
  • Zwordi/funkwhale
  • gisforgabriel/funkwhale
  • iuriatan/funkwhale
  • simon/funkwhale
  • bheesham/funkwhale
  • zeoses/funkwhale
  • accraze/funkwhale
  • meliurwen/funkwhale
  • divadsn/funkwhale
  • Etua/funkwhale
  • sdrik/funkwhale
  • Soran/funkwhale
  • kuba-orlik/funkwhale
  • cristianvogel/funkwhale
  • Forceu/funkwhale
  • jeff/funkwhale
  • der_scheibenhacker/funkwhale
  • owlnical/funkwhale
  • jovuit/funkwhale
  • SilverFox15/funkwhale
  • phw/funkwhale
  • mayhem/funkwhale
  • sridhar/funkwhale
  • stromlin/funkwhale
  • rrrnld/funkwhale
  • nitaibezerra/funkwhale
  • jaller94/funkwhale
  • pcouy/funkwhale
  • eduxstad/funkwhale
  • codingHahn/funkwhale
  • captain/funkwhale
  • polyedre/funkwhale
  • leishenailong/funkwhale
  • ccritter/funkwhale
  • lnceballosz/funkwhale
  • fpiesche/funkwhale
  • Fanyx/funkwhale
  • markusblogde/funkwhale
  • Firobe/funkwhale
  • devilcius/funkwhale
  • freaktechnik/funkwhale
  • blopware/funkwhale
  • cone/funkwhale
  • thanksd/funkwhale
  • vachan-maker/funkwhale
  • bbenti/funkwhale
  • tarator/funkwhale
  • prplecake/funkwhale
  • DMarzal/funkwhale
  • lullis/funkwhale
  • hanacgr/funkwhale
  • albjeremias/funkwhale
  • xeruf/funkwhale
  • llelite/funkwhale
  • RoiArthurB/funkwhale
  • cloo/funkwhale
  • nztvar/funkwhale
  • Keunes/funkwhale
  • petitminion/funkwhale-petitminion
  • m-idler/funkwhale
  • SkyLeite/funkwhale
140 results
Show changes
Commits on Source (5798)
Showing with 2759 additions and 246 deletions
anull
followings
inforce
keypair
nam
nd
readby
serie
upto
afterall
# Names
nin
noe
manuel
......@@ -67,3 +67,6 @@ mailhog
*.sqlite3
api/music
api/media
# Docker state
.state
# http://editorconfig.org
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.{py,rst,ini}]
indent_style = space
indent_size = 4
[*.py]
line_length=120
known_first_party=funkwhale_api
multi_line_output=3
default_section=THIRDPARTY
[*.{html,js,vue,css,scss,json,yml}]
indent_style = space
indent_size = 2
[*.md]
trim_trailing_whitespace = false
[Makefile]
indent_style = tab
# api + celeryworker
DEBUG=True
DEFAULT_FROM_EMAIL=hello@funkwhale.test
FUNKWHALE_DOMAIN=funkwhale.test
FUNKWHALE_PROTOCOL=https
DJANGO_SECRET_KEY=dev
DJANGO_ALLOWED_HOSTS=.funkwhale.test,nginx
DJANGO_SETTINGS_MODULE=config.settings.local
DATABASE_URL=postgresql://postgres@postgres/postgres
CACHE_URL=redis://redis:6379/0
EMAIL_CONFIG=smtp://mailpit.funkwhale.test:1025
FORCE_HTTPS_URLS=True
EXTERNAL_REQUESTS_VERIFY_SSL=false
C_FORCE_ROOT=true
PYTHONDONTWRITEBYTECODE=true
PYTHONTRACEMALLOC=0
# api
FUNKWHALE_SPA_HTML_ROOT=http://nginx/
LDAP_ENABLED=False
BROWSABLE_API_ENABLED=True
# celeryworker
CELERYD_CONCURRENCY=0
# api + nginx
STATIC_ROOT=/staticfiles
MEDIA_ROOT=/data/media
# api + Typesense
TYPESENSE_API_KEY=apikey
# front
HOST=0.0.0.0
VUE_PORT=8080
# nginx
NGINX_MAX_BODY_SIZE=10G
FUNKWHALE_API_HOST=api
FUNKWHALE_API_PORT=5000
FUNKWHALE_FRONT_IP=front
FUNKWHALE_FRONT_PORT=${VUE_PORT}
# postgres
POSTGRES_HOST_AUTH_METHOD=trust
# Use .flake8 file until pyproject.toml is supported
# See https://github.com/PyCQA/flake8/issues/234
[flake8]
max-line-length = 120
extend-exclude =
*/migrations/*
extend-ignore =
F405
W503
E203
E741
/dist
### OSX ###
.DS_Store
.AppleDouble
......@@ -83,16 +85,39 @@ front/yarn-debug.log*
front/yarn-error.log*
front/tests/unit/coverage
front/tests/e2e/reports
front/test_results.xml
front/coverage/
front/selenium-debug.log
docs/_build
#Tauri
front/tauri/gen
data/
/data/
.state
.env
po/*.po
docs/swagger
_build
front/src/translations.json
front/src/translations/*.json
front/locales/en_US/LC_MESSAGES/app.po
*.prof
# Docker
docker-bake.*.json
metadata.json
compose/var/test.*
# Linting
.eslintcache
tsconfig.tsbuildinfo
# Nix
.direnv/
.envrc
flake.nix
flake.lock
# Vscode
.vscode/
# Zed
.zed/
---
include:
- project: funkwhale/ci
file: /templates/pre-commit.yml
- project: funkwhale/ci
file: /templates/lychee.yml
- project: funkwhale/ci
file: /templates/ssh-agent.yml
variables:
IMAGE_NAME: funkwhale/funkwhale
IMAGE: $IMAGE_NAME:$CI_COMMIT_REF_NAME
ALL_IN_ONE_IMAGE_NAME: funkwhale/all-in-one
ALL_IN_ONE_IMAGE: $ALL_IN_ONE_IMAGE_NAME:$CI_COMMIT_REF_NAME
PIP_CACHE_DIR: "$CI_PROJECT_DIR/pip-cache"
PYTHONDONTWRITEBYTECODE: "true"
REVIEW_DOMAIN: preview.funkwhale.audio
REVIEW_INSTANCE_URL: https://demo.funkwhale.audio
PIP_CACHE_DIR: $CI_PROJECT_DIR/.cache/pip
YARN_CACHE_FOLDER: $CI_PROJECT_DIR/.cache/yarn
POETRY_VIRTUALENVS_IN_PROJECT: "true"
.shared_variables:
# Keep the git files permissions during job setup
keep_git_files_permissions: &keep_git_files_permissions
GIT_STRATEGY: clone
GIT_DEPTH: "5"
FF_DISABLE_UMASK_FOR_DOCKER_EXECUTOR: "true"
.shared_caches:
# Cache for front related jobs
front_cache: &front_cache
- key: front-yarn
paths: [$YARN_CACHE_FOLDER]
- key:
prefix: front-node_modules
files: [front/yarn.lock]
paths: [front/node_modules]
- key:
prefix: front-lint
files:
- front/.eslintcache
- front/tsconfig.tsbuildinfo
# Cache for api related jobs
# Include the python version to prevent loosing caches in the test matrix
api_cache: &api_cache
- key: api-pip-$PYTHON_VERSION
paths: [$PIP_CACHE_DIR]
- key:
prefix: api-venv-$PYTHON_VERSION
files: [api/poetry.lock]
paths: [api/.venv]
# Cache for docs related jobs
docs_cache: &docs_cache
- key: docs-pip
paths: [$PIP_CACHE_DIR]
- key:
prefix: docs-venv
files: [docs/poetry.lock]
paths: [docs/.venv]
default:
interruptible: true
tags:
- docker
workflow:
rules:
# Run for any event on the default branches in the funkwhale namespace
- if: >
$CI_PROJECT_NAMESPACE == "funkwhale" &&
(
$CI_COMMIT_BRANCH =~ /^(stable|develop)$/ ||
$CI_COMMIT_TAG
)
# Run for merge requests from any repo or branches
- if: $CI_MERGE_REQUEST_ID
stages:
- review
- lint
- test
- build
- deploy
- publish
review_front:
stage: review
image: node:9
when: manual
allow_failure: true
stage: review
needs: []
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
when: manual
image: $CI_REGISTRY/funkwhale/ci/node-python:18
variables:
BASE_URL: /-/$CI_PROJECT_NAME/-/jobs/$CI_JOB_ID/artifacts/front-review/
VUE_APP_ROUTER_BASE_URL: /-/$CI_PROJECT_NAME/-/jobs/$CI_JOB_ID/artifacts/front-review/
VUE_APP_INSTANCE_URL: https://demo.funkwhale.audio
NODE_ENV: review
NODE_OPTIONS: --max-old-space-size=4096
environment:
name: review/front/$CI_COMMIT_REF_NAME
url: http://$CI_PROJECT_NAMESPACE.pages.funkwhale.audio/-/$CI_PROJECT_NAME/-/jobs/$CI_JOB_ID/artifacts/front-review/index.html
cache: *front_cache
before_script:
- curl -L -o /usr/local/bin/jq https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64
- chmod +x /usr/local/bin/jq
- mkdir front-review
- cd front
- yarn install --frozen-lockfile
script:
- yarn install
- yarn run i18n-compile
# this is to ensure we don't have any errors in the output,
# cf https://dev.funkwhale.audio/funkwhale/funkwhale/issues/169
- VUE_APP_INSTANCE_URL=$REVIEW_INSTANCE_URL yarn run build | tee /dev/stderr | (! grep -i 'ERROR in')
- mkdir -p /static/front/$CI_PROJECT_PATH_SLUG-$CI_BUILD_REF_SLUG
- cp -r dist/* /static/front/$CI_PROJECT_PATH_SLUG-$CI_BUILD_REF_SLUG
cache:
key: "funkwhale__front_dependencies"
- yarn run build --base ./
- cp -r dist/* ../front-review
artifacts:
expire_in: 2 weeks
paths:
- front/node_modules
- front/yarn.lock
environment:
name: review/front/$CI_PROJECT_PATH_SLUG-$CI_BUILD_REF_SLUG
url: http://front-$CI_PROJECT_PATH_SLUG-$CI_BUILD_REF_SLUG.$REVIEW_DOMAIN
on_stop: stop_front_review
only:
- branches
tags:
- funkwhale-review
stop_front_review:
stage: review
script:
- rm -rf /static/front/$CI_PROJECT_PATH_SLUG-$CI_BUILD_REF_SLUG/
variables:
GIT_STRATEGY: none
when: manual
only:
- branches
environment:
name: review/front/$CI_PROJECT_PATH_SLUG-$CI_BUILD_REF_SLUG
action: stop
tags:
- funkwhale-review
- front-review
review_docs:
stage: review
image: python:3.6
when: manual
allow_failure: true
variables:
BUILD_PATH: "../public"
stage: review
needs: []
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
changes: [docs/**/*]
image: $CI_REGISTRY/funkwhale/ci/python-funkwhale-docs:3.11
environment:
name: review/docs/$CI_COMMIT_REF_NAME
url: http://$CI_PROJECT_NAMESPACE.pages.funkwhale.audio/-/$CI_PROJECT_NAME/-/jobs/$CI_JOB_ID/artifacts/docs-review/index.html
cache: *docs_cache
before_script:
- cd docs
- apt-get update
- apt-get install -y graphviz
- pip install sphinx
cache:
key: "$CI_PROJECT_ID__sphinx"
- make install
script:
- make build BUILD_DIR=../docs-review
artifacts:
expire_in: 2 weeks
paths:
- "$PIP_CACHE_DIR"
- docs-review
find_broken_links:
extends: [.lychee]
allow_failure:
exit_codes: 2
script:
- ./build_docs.sh
- mkdir -p /static/docs/$CI_PROJECT_PATH_SLUG-$CI_BUILD_REF_SLUG
- cp -r $CI_PROJECT_DIR/public/* /static/docs/$CI_PROJECT_PATH_SLUG-$CI_BUILD_REF_SLUG
environment:
name: review/docs/$CI_PROJECT_PATH_SLUG-$CI_BUILD_REF_SLUG
url: http://docs-$CI_PROJECT_PATH_SLUG-$CI_BUILD_REF_SLUG.$REVIEW_DOMAIN
on_stop: stop_docs_review
only:
- branches
tags:
- funkwhale-review
- >
lychee
--cache
--no-progress
--exclude-all-private
--exclude 'demo\.funkwhale\.audio'
--exclude 'nginx\.com'
--exclude-path 'docs/_templates/'
-- . || exit $?
stop_docs_review:
stage: review
require_changelog:
allow_failure: false
stage: lint
rules:
# Don't run on merge request that mention NOCHANGELOG or renovate bot commits
- if: >
$CI_MERGE_REQUEST_TITLE =~ /NOCHANGELOG/ ||
$CI_COMMIT_AUTHOR == "Renovate Bot <bot@dev.funkwhale.audio>"
when: never
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
image: python:3.11
script:
- rm -rf /static/docs/$CI_PROJECT_PATH_SLUG-$CI_BUILD_REF_SLUG/
variables:
GIT_STRATEGY: none
when: manual
only:
- branches
environment:
name: review/docs/$CI_PROJECT_PATH_SLUG-$CI_BUILD_REF_SLUG
action: stop
tags:
- funkwhale-review
- git diff --name-only $CI_MERGE_REQUEST_DIFF_BASE_SHA..$CI_COMMIT_SHA | grep "changes/changelog.d/*"
pre-commit:
extends: [.pre-commit]
black:
image: python:3.6
lint_api:
allow_failure: true
stage: lint
variables:
GIT_STRATEGY: fetch
needs: []
rules:
- if: $CI_COMMIT_BRANCH =~ /(stable|develop)/
- changes: [api/**/*]
image: $CI_REGISTRY/funkwhale/ci/python-funkwhale-api:3.13
cache: *api_cache
before_script:
- pip install black
- cd api
- make install
script:
- black --exclude "/(\.git|\.hg|\.mypy_cache|\.tox|\.venv|_build|buck-out|build|dist|migrations)/" --check --diff api/
- make lint
flake8:
image: python:3.6
lint_front:
stage: lint
variables:
GIT_STRATEGY: fetch
needs: []
rules:
- if: $CI_COMMIT_BRANCH =~ /(stable|develop)/
- changes: [front/**/*]
image: $CI_REGISTRY/funkwhale/ci/node-python:18
cache: *front_cache
before_script:
- pip install flake8
- cd front
- yarn install --frozen-lockfile
script:
- flake8 -v api
- yarn lint --max-warnings 0
- yarn lint:tsc
test_scripts:
stage: test
needs: []
rules:
- if: $CI_COMMIT_BRANCH =~ /(stable|develop)/
- changes: [scripts/**/*]
image: $CI_REGISTRY/funkwhale/ci/python:3.11
cache:
key: "$CI_PROJECT_ID__flake8_pip_cache"
paths:
- "$PIP_CACHE_DIR"
- key: scripts-pip
paths: [$PIP_CACHE_DIR]
- key:
prefix: scripts-venv
files: [scripts/poetry.lock]
paths: [scripts/.venv]
before_script:
- cd scripts
- make install
script:
- make test
test_api:
services:
- postgres:11
- redis:3
retry: 1
stage: test
image: funkwhale/funkwhale:develop
cache:
key: "$CI_PROJECT_ID__pip_cache"
paths:
- "$PIP_CACHE_DIR"
needs:
- job: lint_api
rules:
- if: $CI_COMMIT_BRANCH =~ /(stable|develop)/
- changes: [api/**/*]
image: $CI_REGISTRY/funkwhale/ci/python-funkwhale-api:$PYTHON_VERSION
parallel:
matrix:
- PYTHON_VERSION: ["3.10", "3.11", "3.12", "3.13"]
services:
- name: postgres:15-alpine
command:
- --fsync=off
- --full_page_writes=off
- --synchronous_commit=off
- name: redis:7-alpine
cache: *api_cache
variables:
DATABASE_URL: "postgresql://postgres@postgres/postgres"
FUNKWHALE_URL: "https://funkwhale.ci"
DJANGO_SETTINGS_MODULE: config.settings.local
only:
- branches
POSTGRES_HOST_AUTH_METHOD: trust
CACHE_URL: "redis://redis:6379/0"
before_script:
- cd api
- sed -i '/Pillow/d' requirements/base.txt
- pip3 install -r requirements/base.txt
- pip3 install -r requirements/local.txt
- pip3 install -r requirements/test.txt
- make install
script:
- pytest --cov=funkwhale_api tests/
tags:
- docker
- >
poetry run pytest
--junitxml=report.xml
--cov
--cov-config=pyproject.toml
--cov-report=term-missing:skip-covered
--cov-report=xml
tests
artifacts:
expire_in: 2 weeks
reports:
junit: api/report.xml
coverage_report:
coverage_format: cobertura
path: api/coverage.xml
coverage: '/TOTAL\s*\d*\s*\d*\s*(\d*%)/'
test_front:
stage: test
image: node:9
needs:
- job: lint_front
rules:
- if: $CI_COMMIT_BRANCH =~ /(stable|develop)/
- changes: [front/**/*]
image: $CI_REGISTRY/funkwhale/ci/node-python:18
cache: *front_cache
before_script:
- cd front
only:
- branches
- yarn install --frozen-lockfile
script:
- yarn install --check-files
- yarn test:unit
cache:
key: "funkwhale__front_dependencies"
paths:
- front/node_modules
- front/yarn.lock
artifacts:
name: "front_${CI_COMMIT_REF_NAME}"
paths:
- front/dist/
tags:
- docker
reports:
junit: front/test_results.xml
coverage_report:
coverage_format: cobertura
path: front/coverage/cobertura-coverage.xml
coverage: '/All files\s+(?:\|\s+((?:\d+\.)?\d+)\s+){4}.*/'
build_front:
build_metadata:
stage: build
image: node:9
image: $CI_REGISTRY/funkwhale/ci/python:3.11
variables:
GIT_FETCH_EXTRA_FLAGS: --prune
script:
- make build-metadata
- make docker-metadata
artifacts:
reports:
dotenv: build_metadata.env
paths:
- docker-bake.json
- docker-bake.api.json
- docker-bake.front.json
test_integration:
stage: test
rules:
- if: $RUN_CYPRESS
interruptible: true
image:
name: cypress/included:13.6.4
entrypoint: [""]
cache:
- *front_cache
- key:
paths:
- /root/.cache/Cypress
before_script:
- curl -L -o /usr/local/bin/jq https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64
- chmod +x /usr/local/bin/jq
- cd front
script:
- yarn install
- yarn run i18n-compile
# this is to ensure we don't have any errors in the output,
# cf https://dev.funkwhale.audio/funkwhale/funkwhale/issues/169
- yarn build | tee /dev/stderr | (! grep -i 'ERROR in')
- chmod -R 755 dist
script:
- yarn run cypress run
build_api_schema:
stage: build
needs:
- job: test_api
optional: true
rules:
- if: $CI_COMMIT_BRANCH =~ /(stable|develop)/
- changes: [api/**/*]
# Add build_docs rules because it depends on the build_api_schema artifact
- changes: [docs/**/*]
image: $CI_REGISTRY/funkwhale/ci/python-funkwhale-api:3.13
services:
- postgres:15-alpine
- redis:7-alpine
cache: *api_cache
variables:
DATABASE_URL: "postgresql://postgres@postgres/postgres"
FUNKWHALE_URL: "https://funkwhale.ci"
DJANGO_SETTINGS_MODULE: config.settings.local
POSTGRES_HOST_AUTH_METHOD: trust
CACHE_URL: "redis://redis:6379/0"
API_TYPE: "v1"
before_script:
- cd api
- make install
- poetry run funkwhale-manage migrate
script:
- poetry run funkwhale-manage spectacular --file ../docs/schema.yml
- diff ../docs/schema.yml ./funkwhale_api/common/schema.yml || (
echo "Schema files do not match! run sudo docker compose run --rm
api funkwhale-manage spectacular > ./api/funkwhale_api/common/schema.yml" &&
exit 1
)
artifacts:
name: "front_${CI_COMMIT_REF_NAME}"
expire_in: 2 weeks
paths:
- front/dist/
only:
- tags@funkwhale/funkwhale
- master@funkwhale/funkwhale
- develop@funkwhale/funkwhale
- docs/schema.yml
tags:
- docker
build_docs:
stage: build
needs:
- job: build_api_schema
artifacts: true
rules:
- if: $CI_COMMIT_BRANCH =~ /(stable|develop)/
- changes: [docs/**/*]
pages:
stage: test
image: python:3.6
variables:
BUILD_PATH: "../public"
image: $CI_REGISTRY/funkwhale/ci/python-funkwhale-docs:3.11
cache: *docs_cache
before_script:
- cd docs
- apt-get update
- apt-get install -y graphviz
- pip install sphinx
- make install
script:
- ./build_docs.sh
cache:
key: "$CI_PROJECT_ID__sphinx"
paths:
- "$PIP_CACHE_DIR"
- make build-all BUILD_DIR=../public
artifacts:
expire_in: 2 weeks
paths:
- public
only:
- master@funkwhale/funkwhale
tags:
- docker
docker_release:
stage: deploy
image: bash
before_script:
- docker login -u $DOCKER_LOGIN -p $DOCKER_PASSWORD
- cp -r front/dist api/frontend
- (if [ "$CI_COMMIT_REF_NAME" == "develop" ]; then ./scripts/set-api-build-metadata.sh $(echo $CI_COMMIT_SHA | cut -c 1-8); fi);
- cd api
script:
- docker build -t $IMAGE .
- docker push $IMAGE
only:
- develop@funkwhale/funkwhale
- tags@funkwhale/funkwhale
tags:
- docker-build
build_front:
stage: build
needs:
# The test_front job is currently disabled
# - job: test_front
- job: lint_front
optional: true
rules:
- if: $CI_COMMIT_BRANCH =~ /(stable|develop)/
- changes: [front/**/*]
docker_all_in_one_release:
stage: deploy
image: bash
image: $CI_REGISTRY/funkwhale/ci/node-python:18
variables:
ALL_IN_ONE_REF: master
ALL_IN_ONE_ARTIFACT_URL: https://github.com/thetarkus/docker-funkwhale/archive/$ALL_IN_ONE_REF.zip
BUILD_PATH: all_in_one
<<: *keep_git_files_permissions
NODE_OPTIONS: --max-old-space-size=4096
cache: *front_cache
before_script:
- docker login -u $DOCKER_LOGIN -p $DOCKER_PASSWORD
- (if [ "$CI_COMMIT_REF_NAME" == "develop" ]; then ./scripts/set-api-build-metadata.sh $(echo $CI_COMMIT_SHA | cut -c 1-8); fi);
- cd front
- yarn install --frozen-lockfile
script:
- wget $ALL_IN_ONE_ARTIFACT_URL -O all_in_one.zip
- unzip -o all_in_one.zip -d tmpdir
- mv tmpdir/docker-funkwhale-$ALL_IN_ONE_REF $BUILD_PATH && rmdir tmpdir
- cp -r api $BUILD_PATH/src/api
- cp -r front $BUILD_PATH/src/front
- cd $BUILD_PATH
- ./scripts/download-nginx-template.sh src/ $CI_COMMIT_REF_NAME
- docker build -t $ALL_IN_ONE_IMAGE .
- docker push $ALL_IN_ONE_IMAGE
only:
- develop@funkwhale/funkwhale
- tags@funkwhale/funkwhale
tags:
- docker-build
- yarn run build:deployment
artifacts:
name: front_${CI_COMMIT_REF_NAME}
paths:
- front/dist
build_api:
# Simply publish a zip containing api/ directory
stage: deploy
image: bash
stage: build
needs:
- job: test_api
optional: true
rules:
- if: $CI_COMMIT_BRANCH =~ /(stable|develop)/
- changes: [api/**/*]
image: $CI_REGISTRY/funkwhale/ci/python:3.11
variables:
<<: *keep_git_files_permissions
script:
- rm -rf api/tests
- >
if [[ -z "$CI_COMMIT_TAG" ]]; then
./scripts/set-api-build-metadata.sh $CI_COMMIT_SHORT_SHA;
fi
artifacts:
name: "api_${CI_COMMIT_REF_NAME}"
name: api_${CI_COMMIT_REF_NAME}
paths:
- api
# build_tauri:
# stage: build
# rules:
# - if: $CI_COMMIT_BRANCH =~ /(stable|develop)/
# - changes: [front/**/*]
# image: $CI_REGISTRY/funkwhale/ci/node-tauri:18
# variables:
# <<: *keep_git_files_permissions
# before_script:
# - source /root/.cargo/env
# - yarn install
# script:
# - yarn tauri build --verbose
# artifacts:
# name: desktop_${CI_COMMIT_REF_NAME}
# paths:
# - front/tauri/target/release/bundle/appimage/*.AppImage
deploy_docs:
interruptible: false
extends: .ssh-agent
stage: publish
needs:
- job: build_docs
artifacts: true
rules:
- if: $CI_COMMIT_BRANCH =~ /(stable|develop)/
image: $CI_REGISTRY/funkwhale/ci/python:3.11
variables:
GIT_STRATEGY: none
script:
- rsync -r --delete -e "ssh -p 2282" $CI_PROJECT_DIR/public/ docs@docs.funkwhale.audio:/htdocs/$CI_COMMIT_REF_NAME
docker:
interruptible: false
tags: [docker, privileged, multiarch]
stage: build
needs:
- job: build_metadata
artifacts: true
- job: test_api
optional: true
- job: test_front
optional: true
rules:
- if: $CI_COMMIT_TAG
variables:
BUILD_ARGS: >
--set *.platform=linux/amd64,linux/arm64,linux/arm/v7
--no-cache
--push
- if: $CI_COMMIT_BRANCH =~ /(stable|develop)/
variables:
BUILD_ARGS: >
--set *.platform=linux/amd64,linux/arm64,linux/arm/v7
--set *.cache-from=type=registry,ref=$DOCKER_CACHE_IMAGE:$CI_COMMIT_BRANCH,oci-mediatypes=false
--set *.cache-to=type=registry,ref=$DOCKER_CACHE_IMAGE:$CI_COMMIT_BRANCH,mode=max,oci-mediatypes=false
--push
- if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_PROJECT_NAMESPACE == "funkwhale"
# We don't provide priviledged runners to everyone, so we can only build docker images in the funkwhale group
variables:
BUILD_ARGS: >
--set *.platform=linux/amd64
--set *.cache-from=type=registry,ref=$DOCKER_CACHE_IMAGE:$CI_MERGE_REQUEST_TARGET_BRANCH_NAME,oci-mediatypes=false
image: $CI_REGISTRY/funkwhale/ci/docker:20
services:
- docker:20-dind
variables:
<<: *keep_git_files_permissions
DOCKER_HOST: tcp://docker:2375/
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: ""
BUILDKIT_PROGRESS: plain
DOCKER_CACHE_IMAGE: $CI_REGISTRY/funkwhale/funkwhale/cache
before_script:
- >
echo "$CI_REGISTRY_PASSWORD" | docker login --username "$CI_REGISTRY_USER" --password-stdin "$CI_REGISTRY";
if [[ "$BUILD_ARGS" =~ "--push" ]]; then
echo "$DOCKER_PASSWORD" | docker login --username "$DOCKER_LOGIN" --password-stdin docker.io;
fi
script:
- >
if [[ -z "$CI_COMMIT_TAG" ]]; then
./scripts/set-api-build-metadata.sh $CI_COMMIT_SHORT_SHA;
fi
- docker buildx create --use
- make docker-build BUILD_ARGS="--metadata-file metadata.json $BUILD_ARGS"
- cat metadata.json
artifacts:
name: docker_metadata_${CI_COMMIT_REF_NAME}
paths:
- metadata.json
package:
stage: publish
needs:
- job: build_metadata
artifacts: true
- job: build_api
artifacts: true
- job: build_front
artifacts: true
# - job: build_tauri
# artifacts: true
rules:
- if: $CI_COMMIT_BRANCH =~ /(stable|develop)/
image: $CI_REGISTRY/funkwhale/ci/python:3.11
variables:
<<: *keep_git_files_permissions
script:
- (if [ "$CI_COMMIT_REF_NAME" == "develop" ]; then ./scripts/set-api-build-metadata.sh $(echo $CI_COMMIT_SHA | cut -c 1-8); fi);
- chmod -R 750 api
- echo Done!
only:
- tags@funkwhale/funkwhale
- master@funkwhale/funkwhale
- develop@funkwhale/funkwhale
- make package
- scripts/ci-upload-packages.sh
<!--
Hi there! You are reporting a bug on this project, and we want to thank you!
If it's the first time you post here, please take a moment to read our Code of Conduct
(https://funkwhale.audio/code-of-conduct/) and ensure your issue respect our guidelines.
To ensure your bug report is as useful as possible, please try to stick
to the following structure. You can leave the parts text between `<!- ->`
markers untouched, they won't be displayed in your final message.
......
<!--
Hello and welcome to our issue tracker! We appreciate you taking the time to help us make Funkwhale even better :smile:
Before you begin, here are some helpful tips for submitting an issue:
* If you need help setting up or using Funkwhale, try asking in our
[forum's support board](https://forum.funkwhale.audio/support) or our [support
chat room](https://riot.im/app/#/room/#funkwhale-support:tchncs.de).
* If you think you've found a bug but aren't sure, you can ask in one of the above channels
first. Once you're confident it's a bug, go ahead and create an issue for us to investigate.
Select the **Bug** template in the **Description** dropdown menu. This template contains
helpful tips for creating your report.
* For smaller additions and enhancements, please file a feature request.
Select the **Feature Request** template in the **Description** dropdown
menu. This template contains helpful tips for creating your request.
* If you have ideas for new features or use cases, consider opening a thread in our
[forum](https://forum.funkwhale.audio/t/development). This enables us to
discuss the feature, its use cases, and the development effort it requires.
We always like hearing ideas from our community. If you're still not sure, click
the **Create issue** button and we'll work with you to sort out the issue.
Happy listening! :whale:
-->
<!--
Hi there! You are about to share feature request or an idea, and we want to thank you!
If it's the first time you post here, please take a moment to read our Code of Conduct
(https://funkwhale.audio/code-of-conduct/) and ensure your issue respect our guidelines.
To ensure we can deal with your idea or request, please try to stick
to the following structure. You can leave the parts text between `<!- ->`
markers untouched, they won't be displayed in your final message.
......
Please avoid merging the base branch into your feature branch. We are working with rebases and those merged tend to cause trouble.
For further questions, join us at Matrix: https://matrix.to/#/#funkwhale-dev:matrix.org
If your contribution is fixing an issue by a small change, please consider a merge into `stable` by using it as target branch.
Related issue: #XXX <!-- it's okay to have no issue for small changes -->
This Merge Request includes:
......
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
":dependencyDashboard",
":maintainLockFilesWeekly",
":enablePreCommit",
":semanticCommits",
":semanticCommitScopeDisabled",
"group:monorepos",
"group:recommended"
],
"baseBranches": ["stable", "develop"],
"branchConcurrentLimit": 2,
"prConcurrentLimit": 1,
"rangeStrategy": "pin",
"ignoreDeps": ["$CI_REGISTRY/funkwhale/backend-test-docker"],
"packageRules": [
{
"matchFileNames": ["api/*", "front/*", "docs/*"],
"additionalBranchPrefix": "{{parentDir}}-",
"semanticCommitScope": "{{parentDir}}"
},
{
"matchUpdateTypes": ["lockFileMaintenance"],
"branchConcurrentLimit": 0,
"prConcurrentLimit": 0
},
{
"matchBaseBranches": ["develop"],
"matchUpdateTypes": ["major"],
"prPriority": 2
},
{
"matchBaseBranches": ["develop"],
"matchUpdateTypes": ["minor"],
"prPriority": 1
},
{
"matchUpdateTypes": ["major", "minor"],
"matchBaseBranches": ["stable"],
"enabled": false
},
{
"matchDepTypes": ["devDependencies"],
"matchBaseBranches": ["stable"],
"enabled": false
},
{
"matchManagers": ["npm"],
"addLabels": ["Area::Frontend"]
},
{
"matchManagers": ["poetry"],
"addLabels": ["Area::Backend"]
},
{
"groupName": "vueuse",
"matchDepNames": ["/^@vueuse/.*/"]
},
{
"matchDepNames": ["channels", "channels-redis", "daphne"],
"groupName": "channels"
},
{
"matchDepNames": ["node"],
"allowedVersions": "/\\d+[02468]$/"
},
{
"matchFileNames": ["deploy/docker-compose.yml"],
"matchDepNames": ["postgres"],
"postUpgradeTasks": {
"commands": [
"echo 'Upgrade Postgres to version {{ newVersion }}. [Make sure to migrate!](https://docs.funkwhale.audio/administrator_documentation/upgrade_docs/docker.html#upgrade-the-postgres-container)' > changes/changelog.d/postgres.update"
],
"fileFilters": ["changes/changelog.d/postgres.update"]
}
},
{
"matchDepNames": ["python"],
"rangeStrategy": "widen"
}
]
}
image:
file: .gitpod/Dockerfile
tasks:
- name: Backend
env:
ENV_FILE: /workspace/funkwhale/.gitpod/.env
COMPOSE_FILE: /workspace/funkwhale/.gitpod/docker-compose.yml
before: |
cp .gitpod/gitpod.env .gitpod/.env
cd api
init: |
mkdir -p ../data/media/attachments ../data/music ../data/staticfiles
docker-compose up -d
poetry env use python
make install
gp ports await 5432
poetry run funkwhale-manage migrate
poetry run funkwhale-manage fw users create --superuser --username gitpod --password funkwhale --email test@example.org
poetry run funkwhale-manage gitpod init
command: |
echo "MEDIA_URL=`gp url 8000`/media/" >> ../.gitpod/.env
echo "STATIC_URL=`gp url 8000`/staticfiles/" >> ../.gitpod/.env
echo "FUNKWHALE_HOSTNAME=`gp url 8000 | sed 's#https://##'`" >> ../.gitpod/.env
echo "FUNKWHALE_PROTOCOL=https" >> ../.gitpod/.env
docker-compose up -d
gp ports await 5432
poetry run funkwhale-manage collectstatic --no-input
poetry run funkwhale-manage gitpod dev
- name: Celery Worker
env:
ENV_FILE: /workspace/funkwhale/.gitpod/.env
before: cd api
command: |
gp ports await 5000
poetry run celery -A funkwhale_api.taskapp worker -l debug -B --concurrency=0
- name: Frontend
env:
VUE_EDITOR: code
before: cd front
init: |
yarn install
command: yarn dev --host 0.0.0.0 --base ./
- name: Documentation
before: cd docs
init: make install
command: make dev
- name: Welcome to Funkwhale development!
env:
COMPOSE_FILE: /workspace/funkwhale/.gitpod/docker-compose.yml
ENV_FILE: /workspace/funkwhale/.gitpod/.env
VUE_EDITOR: code
DJANGO_SETTINGS_MODULE: config.settings.local
init: |
pre-commit install
pre-commit run --all
command: |
echo ""
echo -e " ⠀⠀⠸⣿⣷⣦⣄⣠⣶⣾⣿⠇⠀⠀ You can now start developing Funkwhale with gitpod!"
echo -e " ⠀⠀⠀⠈⠉⠻⣿⣿⠟⠉⠁⠀⠀⠀"
echo -e " \u1b[34m⣀⠀⢀⡀⢀⣀\u1b[0m⠹⠇\u1b[34m⣀⡀⢀⡀⠀⣀ \u1b[0mTo sign in to the superuser account,"
echo -e " \u1b[34m⢻⣇⠘⣧⡈⠻⠶⠶⠟⢁⣾⠃⣸⡟ \u1b[0mplease use these credentials:"
echo -e " \u1b[34m⠀⠻⣦⡈⠻⠶⣶⣶⠶⠟⢁⣴⠟⠀"
echo -e " \u1b[34m⠀⠀⠈⠻⠷⣦⣤⣤⣴⠾⠟⠁⠀⠀ gitpod\u1b[0m:\u1b[34mfunkwhale"
echo ""
ports:
- name: Funkwhale
port: 8000
visibility: public
onOpen: notify
- name: Funkwhale API
port: 5000
visibility: private
onOpen: ignore
- name: PostgreSQL
port: 5432
visibility: private
onOpen: ignore
- name: Debugpy
port: 5678
visibility: private
onOpen: ignore
- name: Redis
port: 6379
visibility: private
onOpen: ignore
- name: Frontend
port: 8080
visibility: private
onOpen: ignore
- name: Documentation
port: 8001
visibility: public
onOpen: notify
vscode:
extensions:
- Vue.volar
- ms-python.python
- ms-toolsai.jupyter
- ms-toolsai.jupyter-keymap
- ms-toolsai.jupyter-renderers
- hbenl.vscode-test-explorer
- hbenl.test-adapter-converter
- littlefoxteam.vscode-python-test-adapter
- ZixuanChen.vitest-explorer
FROM gitpod/workspace-full:2023-10-25-20-43-33
USER gitpod
RUN sudo apt update -y \
&& sudo apt install libsasl2-dev libldap2-dev libssl-dev ffmpeg gettext -y
RUN pyenv install 3.11 && pyenv global 3.11
RUN brew install neovim
RUN pip install poetry pre-commit jinja2 towncrier \
&& poetry config virtualenvs.create true \
&& poetry config virtualenvs.in-project true
version: "3"
services:
postgres:
image: postgres:15-alpine
environment:
- "POSTGRES_HOST_AUTH_METHOD=trust"
volumes:
- "../data/postgres:/var/lib/postgresql/data"
ports:
- 5432:5432
redis:
image: redis:7-alpine
volumes:
- "../data/redis:/data"
ports:
- 6379:6379
nginx:
env_file:
- ./.env
image: nginx
ports:
- 8000:80
extra_hosts:
- host.docker.internal:host-gateway
environment:
- "NGINX_MAX_BODY_SIZE=100M"
- "FUNKWHALE_API_IP=host.docker.internal"
- "FUNKWHALE_API_HOST=host.docker.internal"
- "FUNKWHALE_API_PORT=5000"
- "FUNKWHALE_FRONT_IP=host.docker.internal"
- "FUNKWHALE_FRONT_PORT=8080"
- "FUNKWHALE_HOSTNAME=${FUNKWHALE_HOSTNAME-host.docker.internal}"
- "FUNKWHALE_PROTOCOL=https"
volumes:
- ../data/media:/workspace/funkwhale/data/media:ro
- ../data/music:/music:ro
- ../data/staticfiles:/usr/share/nginx/html/staticfiles/:ro
- ../deploy/funkwhale_proxy.conf:/etc/nginx/funkwhale_proxy.conf:ro
- ../docker/nginx/conf.dev:/etc/nginx/templates/default.conf.template:ro
- ../front:/frontend:ro
RAVEN_ENABLED=false
RAVEN_DSN=https://44332e9fdd3d42879c7d35bf8562c6a4:0062dc16a22b41679cd5765e5342f716@sentry.eliotberriot.com/5
DJANGO_ALLOWED_HOSTS=.funkwhale.test,localhost,nginx,0.0.0.0,127.0.0.1
# Dev Environment Variables
DJANGO_ALLOWED_HOSTS=.funkwhale.test,localhost,nginx,0.0.0.0,127.0.0.1,.gitpod.io
DJANGO_SETTINGS_MODULE=config.settings.local
DJANGO_SECRET_KEY=dev
C_FORCE_ROOT=true
FUNKWHALE_HOSTNAME=localhost
FUNKWHALE_PROTOCOL=http
PYTHONDONTWRITEBYTECODE=true
VUE_PORT=8080
MUSIC_DIRECTORY_PATH=/music
BROWSABLE_API_ENABLED=True
FORWARDED_PROTO=http
LDAP_ENABLED=False
FUNKWHALE_SPA_HTML_ROOT=http://localhost:8000/
FUNKWHALE_URL=http://localhost:8000/
MUSIC_DIRECTORY_PATH=/workspace/funkwhale/data/music
STATIC_ROOT=/workspace/funkwhale/data/staticfiles/
MEDIA_ROOT=/workspace/funkwhale/data/media/
PYTHONTRACEMALLOC=0
PYTHONDONTWRITEBYTECODE=true
POSTGRES_VERSION=14
DEBUG=true
# Uncomment this if you're using traefik/https
# FORCE_HTTPS_URLS=True
# Django Environment Variables
DATABASE_URL=postgresql://postgres@localhost:5432/postgres
DJANGO_SECRET_KEY=gitpod
THROTTLING_ENABLED=False
# Customize to your needs
POSTGRES_VERSION=11
# Gitpod Environment Variables
---
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
hooks:
- id: check-added-large-files
exclude: "api/funkwhale_api/common/schema.yml"
- id: check-case-conflict
- id: check-executables-have-shebangs
- id: check-shebang-scripts-are-executable
- id: check-symlinks
- id: destroyed-symlinks
- id: check-json
- id: check-yaml
- id: check-xml
- id: check-toml
- id: check-vcs-permalinks
- id: check-merge-conflict
- id: end-of-file-fixer
exclude: ^(docs/locales/.*/LC_MESSAGES)
- id: mixed-line-ending
- id: trailing-whitespace
- repo: https://github.com/python-poetry/poetry
rev: 1.5.1
hooks:
- id: poetry-check
files: ^api/pyproject.toml$
args: [--directory=api]
- id: poetry-lock
files: ^api/pyproject.toml$
args: [--directory=api, --check]
- repo: https://github.com/asottile/pyupgrade
rev: v3.9.0
hooks:
- id: pyupgrade
args: [--py38-plus]
exclude: ^(api/.*/migrations/.*)
- repo: https://github.com/psf/black
rev: 23.7.0
hooks:
- id: black
- repo: https://github.com/pycqa/isort
rev: 5.12.0
hooks:
- id: isort
- repo: https://github.com/pycqa/flake8
rev: 6.1.0
hooks:
- id: flake8
- repo: https://github.com/pre-commit/mirrors-prettier
rev: v3.0.3
hooks:
- id: prettier
files: \.(md|yml|yaml|json)$
exclude: "api/funkwhale_api/common/schema.yml"
- repo: https://github.com/codespell-project/codespell
rev: v2.2.6
hooks:
- id: codespell
additional_dependencies: [tomli]
- repo: https://github.com/shellcheck-py/shellcheck-py
rev: v0.9.0.5
hooks:
- id: shellcheck
- repo: local
hooks:
- id: pwa-manifest.json
name: pwa-manifest.json
description: Sync pwa-manifest.json
entry: scripts/sync-pwa-manifest.sh
pass_filenames: false
language: script
files: pwa-manifest.json$
--cwd front
--add.exact true
# Changelog
You can subscribe to release announcements by:
- Following [@funkwhale@fosstodon.org](https://fosstodon.org/@funkwhale) on Mastodon
- Subscribing to the following Atom feed: https://dev.funkwhale.audio/funkwhale/funkwhale/commits/develop?format=atom&search=Merge+tag
This changelog is viewable on the web at https://docs.funkwhale.audio/changelog.html.
<!-- towncrier -->
## 1.4.0 (2023-12-12)
Upgrade instructions are available at https://docs.funkwhale.audio/administrator/upgrade/index.html
Features:
- Add a management command to generate dummy notifications for testing
- Add atom1.0 to node info services (#2085)
- Add basic cypress testing
- Add NodeInfo 2.1 (#2085)
- Add support for Funkwhale UI library.
- Add support for Python 3.12
- Allow moderators to set moderation languages (#2085)
- Allow to set the instances server location (#2085)
- Cache radio queryset into redis. New radio track endpoint for api v2 is /api/v2/radios/sessions/{radiosessionid}/tracks (#2135)
- Create a testing environment in production for ListenBrainz recommendation engine (troi-recommendation-playground) (#1861)
- Generate all nginx configurations from one template
- New management command to update Uploads which have been imported using --in-place and are now
stored in s3 (#2156)
- Only allow MusicBrainz tagged file on a pod (#2083)
- Prohibit the creation of new users using django's `createsuperuser` command in favor of our own CLI
entry point. Run `funkwhale-manage fw users create --superuser` instead. (#1288)
Enhancements:
- Add custom logging functionality (#2155)
- Adding typesense container and api client (2104)
- Cache pip package in api docker builds (#2193)
- Connect loglevel and debug mode (#1538)
- Get api version from python package
- Log service worker registration error and add a warning about Firefox SW incompatibility in development mode
- Maintain api version using poetry
- Maloja: Submit album artists and duration and allow to disable server side metadata fixing
- Replace pytz with zoneinfo in the API
- Speed up linting and type-checking by using cache
- Split front large bundles into smaller chunks
- Support boolean config fields in plugins
Bugfixes:
- `postgres > db_dump.sql` cannot be used if the postgres container is stopped. Update command.
- Avoid troi radio to give duplicates (#2231)
- Do not cache all requests to avoid missing updates #2258
- Fix broken nginx templates for docker setup (#2252)
- Fix help messages for running scripts using funkwhale-manage
- Fix missing og meta tags (#2208)
- Fix multiarch docker builds #2211
- Fix regression that prevent static files from being served in non-docker-deployments (#2256)
- Fixed an issue where the copy button didn't copy the Embed code in the embed modal.
- Fixed an issue with the nginx templates that caused issues when connecting to websockets.
- Fixed development docker setup (2102)
- Fixed development docker setup (2196)
- Fixed embedded player crash when API returns relative listen URL. (#2163)
- Fixed issue with regular expression in embed.
- Make Artist ordering by name case insensitive
- Make sure build requirements for ujson are met
- Make sure embed codes generated before 1.3.0 are still working
- Make sure funkwhale_api package and metadata are available for docs
- Make sure meta tags link to embedded player correctly
- Merge nginx configs for docker production and development setups (#1939)
- Updated links to the Funkwhale website in the UI. (#2235)
- Use correct data field for rate limiting identity field (#2248)
Documentation:
- Add missing `has_mbid` requirement to quality filter spec.
- Add spec for user following.
- Added CoC link to nodeinfo endpoint spec.
- Added multi-artist support spec.
- Added new collections spec.
- Added NodeInfo 2.1 specification
- Archived the pre-1.0 changelog
- Updated nodeinfo spec to include usage statistics.
- Updated the Nodeinfo 2 spec to address feedback from implementation.
Other:
- Add build metadata script
- Don't run CI on branch containing stable or develop
- Fix CI deploy docs job after stable branch merge
- Format api container file
- Lint api code using pylint
- Make renovate not pinning the python version to the latest one
- Rename CHANGELOG to CHANGELOG.md
- Replace docs scripts with make
- Rework the CI pipeline
- Use buildx bake in docker job
Removal:
- Drop support for python3.7
- This release doesn't support Debian 10 anymore. If you are still on Debian 10, we recommend
updating to a later version. Alternatively, install a supported Python version (>= Python 3.8). Python 3.11 is recommended.
Contributors to our Issues:
- AMoonRabbit
- Alexandra Parker
- ChengChung
- Ciarán Ainsworth
- Georg Krause
- Ghost User
- Johann Queuniet
- JuniorJPDJ
- Kasper Seweryn
- Kay Borowski
- Marcos Peña
- Mathieu Jourdan
- Nicolas Derive
- Virgile Robles
- jooola
- petitminion
- theit8514
Contributors to our Merge Requests:
- AMoonRabbit
- Alexander Dunkel
- Alexander Torre
- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Kasper Seweryn
- Kay Borowski
- Marcos Peña
- Mathieu Jourdan
- Philipp Wolfer
- Virgile Robles
- interfect
- jooola
- petitminion
Committers:
- Aitor
- Alexander Dunkel
- alextprog
- Aznörth Niryn
- Ciarán Ainsworth
- dignny
- drakonicguy
- Fun.k.whale Trad
- Georg krause
- Georg Krause
- Jérémie Lorente
- jo
- jooola
- josé m
- Julian-Samuel Gebühr
- JuniorJPDJ
- Kasper Seweryn
- Marcos Peña
- Mathieu Jourdan
- Matteo Piovanelli
- Matyáš Caras
- MhP
- omarmaciasmolina
- petitminion
- Philipp Wolfer
- ppom
- Quentin PAGÈS
- rinenweb
- Thomas
- Transcriber allium
## 1.3.4 (2023-11-16)
Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html
Bugfixes:
- Remove dangling dependency howler
Documentation:
- Fix a redirect loop on documentation for moderators
Contributors to our Merge Requests:
- Georg Krause
- Thomas
Committers:
- Georg Krause
## 1.3.3 (2023-09-07)
Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html
Bugfixes:
- Revert changed logging to fix crashes
Contributors to our Issues:
- Alexandra Parker
- Aurelien Vaillant
- ChengChung
- Ciarán Ainsworth
- Georg Krause
- Johann Queuniet
- Kasper Seweryn
- Mathieu Jourdan
- Nicolas Derive
- Puniko Nyan
- Thomas
- petitminion
- philip ballinger
Contributors to our Merge Requests:
- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Kasper Seweryn
- Marcos Peña
- jooola
- petitminion
## 1.3.2 (2023-09-01)
Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html
Enhancements:
- Enable sourcemaps for production builds
- Use logger composable instead of window.console
Bugfixes:
- Clear shuffled id list on queue clear (#2192)
- Fetch the nodeinfo endpoint from .well-known/nodeinfo when checking instance availability
- Fix instance checking its own availability (#2199)
- Fix multiarch docker builds #2211
- Fix ordering when querystring contains `+` prefix
Resolve multiple updates to ordering fields
- Fix password reset via email
- Make podcast episode pagination reactive (#2205)
- Render HTML in podcast short description (#2206)
- Resolve race condition regarding axios when initializing the frontend
Prevent sending same language setting to backend multiple times
Documentation:
- Fixed incorrect upgrade instructions link in docs.
Contributors to our Issues:
- Ciarán Ainsworth
- Georg Krause
- Kasper Seweryn
- Kay Borowski
- Marcos Peña
- Mathieu Jourdan
- Virgile Robles
- codl
- jooola
- petitminion
- tinglycraniumplacidly
- unkn0wwn52
Contributors to our Merge Requests:
- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Kasper Seweryn
- Marcos Peña
- Virgile Robles
- codl
- jooola
- petitminion
Committers:
- Ciarán Ainsworth
- codl
- Georg Krause
- jo
- Kasper Seweryn
- petitminion
## 1.3.1 (2023-06-27)
Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html
Bugfixes:
- Dynamically add report targets to the map to avoid missing keys (#2121)
- Fix location of the nginx config template for docker deployments (#2146)
- Fix pagination on search page (#2134)
- Fix Prune skipped uploads is OOM killed (#2136)
- Fixed Fomantic UI dropdown messing with Vue internals in radio builder (#2142)
- Fixed premature login redirect on podcast detail page (#2155)
- Fixed stale data in indexedDB after logout (#2133)
- Make sure dependency pins are working with pip install (Restores python3.7 support)
- Make sure embed codes generated before 1.3.0 are still working
- Make sure the SPA Manifest is fetched using the right protocol (#2151)
- Moved modals above all content (#2154)
- Raise SystemExit exception in API manage.py script
- Remove track from cache when it gets disposed outside of the cache handler (#2157)
- Standardize instanceUrl value in instance store (#2113)
- Fix for banner images not being served on pods.
- Fixed PWA Window theme color.
Documentation:
- Fix instructions for using custom nginx configurations in our documentation
Other:
- Don't run CI on branch containing stable or develop
Contributors to our Issues:
- AMoonRabbit
- Asier Iturralde Sarasola
- Bertille D.
- Casuallynoted
- Ciarán Ainsworth
- Daniel Jeller
- Georg Krause
- JuniorJPDJ
- Kasper Seweryn
- Mathieu Jourdan
- NaiveTub
- Ricardo
- Virgile Robles
- nouts
- petitminion
Contributors to our Merge Requests:
- AMoonRabbit
- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Kasper Seweryn
- jooola
- petitminion
Committers:
- AMoonRabbit
- Georg Krause
- jo
- JuniorJPDJ
- Kasper Seweryn
- Moon Rabbit
- Petitminion
## 1.3.0 (2023-06-01)
Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html
Update instructions:
- If you are running the docker deployment, make sure to update our compose file.
In this small example we show you how to save the old config and update it
correctly:
```
export FUNKWHALE_VERSION="1.3.0"
cd /srv/funkwhale
docker-compose down
mv docker-compose.yml docker-compose.bak
curl -L -o /srv/funkwhale/docker-compose.yml "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/${FUNKWHALE_VERSION}/deploy/docker-compose.yml"
```
:::{note}
If you need to customize your nginx template, e.g. to work around [problems with Docker's resolver](https://docs.funkwhale.audio/admin/external-storages.html#no-resolver-found), you can mount your
custom nginx configuration into the container. Uncomment the commented volumes in the `nginx` section of your `docker-compose.yml`.
Additionally you need to update the paths in `nginx/funkwhale.template`.
Replace all occurrences of `/funkwhale` by `/usr/share/nginx/html`.
This loads the templates from your `nginx` folder and overrides the template files in the Docker container.
:::
```
docker-compose up -d
```
- The Docker instructions now use the updated Docker compose plugin. If you previously used the `docker-compose` standalone installation, do the following while upgrading:
1. Download the [Docker compose plugin](https://docs.docker.com/compose/install/linux/#install-using-the-repository)
2. Stop your containers using the **docker-compose** syntax.
```sh
docker compose down
```
3. Bring the containers back up using the **docker compose** syntax.
```sh
docker compose up -d
```
After this you can continue to use the **docker compose** syntax for all Docker management tasks.
- Upgrade Postgres to version 15. [Make sure to migrate!](https://docs.funkwhale.audio/administrator/upgrade/docker.html#upgrade-the-postgres-container)
- With this update Funkwhale starts using poetry to maintain its dependencies. We therefore recommend
removing the old virtualenv by running `rm -rf /srv/funkwhale/virtualenv`.
Features:
- Add a management command to create a new library for a user
- Add Gitpod configuration and guide
- Add Sentry SDK to collect #1479
- Prepare API for the upcoming version 2
- Rewrite player to be based on Web Audio API
Enhancements:
- Add a celery task to scan remote library (#1712)
- Add coverage report for Frontend Tests
- Add hint which serializer is used for OembedView (#1901)
- Add music visualizer (#1135)
- Add playable tracks to gitpod instance
- Add playlists radio to search page (#1968)
- Add proper serialization for TextPreviewView (#1903)
- Add python debug and test support for gitpod
- Add Serializer for SpaManifest endpoint
- Add support for python 3.11
- Added proper serializers for the rate-limit endpoint.
- Added type hints to the API.
- Adding support for play all radio in search result page (#1563)
- All administrator documentation has been rewritten to improve clarity and update outdated information.
- Allow arbitrary length names for artists, albums and tracks
- Allow installing the funkwhale_api package
- Allow using default browser dark mode and update UI dynamically on change
- Apply migrations on API container start (!1879)
- Automatically fetch next page of tracks (#1526)
- Build frontend natively for cross-arch docker images
- Change unmaintained PyMemoize library to django-cache-memoize
to enable Python 3.10 support
- Cleaned up frontend docker container
- Cleanup Gitlab CI and Dockerfiles (!1796)
- Create the funkwhale-manage entrypoint in the api package
- Created migration guide for the deprecated all-in-one docker container.
- Don't buffer python stdout/err in docker
- Don't compile python byte code in docker
- Don't use poetry in production deployments
- Drop direct dependency on pyopenssl (#1975)
- Exclude /api/v1/oauth/authorize from the specs since its not supported yet (#1899)
- Fix openapi specs for user endpoints (#1892, #1894)
- Fix Serializer for inline channel artists (#1833)
- Fix specs for ListenViewSet (#1898)
- Handle PWA correctly and provide better cache strategy for album covers (#1721)
- Improve docker caching
- Improve specification of LibraryFollowViewSet (#1896)
- Install API python package in docker image
- Make CI always run all tests on protected branches.
- Make mutations endpoint appear in openapi specs
- Make Python 3.10 tests in CI mandatory
- Make sure ChannelViewSet always has a serializer (#1895)
- Migrate to new queue system from old localStorage keys
- Migrate to Vue 3
- Migrate to vue-i18n (#1831)
Fix locale changing (#1862)
- Migrated to sphinx-design.
- New task checking if remote instance is reachable to avoid playback latence (#1711)
- OAuth Application client secrets are now hashed before storing them to the DB. Those are only displayed once from now on!
- Parameterize the default S3 ACL when uploading objects. (#1319)
- Pin Alpine package versions in API Dockerfile (fixes part of CI build issues).
- Prefer using the funkwhale-manage entrypoint
- Prevent running two pipelines for MRs
- Random and less listened radio filter out un-owned content on library section (#2007)
- Refactor node info endpoint to use proper serializers
- Refactor SettingsView to use a proper serializer
- Remove unnecessary or wrong `is` keyword usage from backend
- Rename OpenAPI schema's operation ids for nicer API client method names.
- Replace django-channels package with web socket implementation from @vueuse/core (#1715)
- Retry fetching new radio track 5 times if error occurred before resetting radio session (#2022)
- Rewrite embedded player to petite-vue
- Split DATABASE_URL into multiple configuration variables
- The ListenBrainz plugin submits the track duration
- Update Django OAuth Toolkit to version 2, ref #1944
- Update migration after django update (#1815)
- Update upload status when import fails (#1999)
- Updated the installation guides to make installation steps clearer.
- Upgrade docker base image to alpine 3.17
- Use proper serializer for Search endpoint (#1902)
Refactoring:
- Instead of requesting the right spa content from the API using a middleware we now serve the
Frontend directly with nginx and only proxy-forward for API endpoints
- Replace django-rest-auth with dj-rest-auth (#1877)
Bugfixes:
- Allow enabling systemd funkwhale.target
- Allow playback of media from external frontend (#1937).
- Allow summary field of actors to be blank. This leaves actors valid that have a blank (`""`) summary field and allows follows from those.
- Catch ValueError on radio end (#1596)
- Channel overview was displaying foreign tracks (#1773) (1773)
- Docker setup: do not export the API port 5000 publicly
- Fix adding same track multiple times (#1933)
- Fix artist name submission in Maloja plugin
- Fix changing visualizer CORS error (#1934).
- Fix content form autofocus despite `autofocus` prop being set to `false` (#1924)
- Fix CSP header issues
- Fix CSP issue caused by django-channels package (#1752)
- Fix docker API image building with removing autobahn workaround version pin
- Fix docker builds on armv7
- Fix docker nginx entrypoint
- Fix editing playlist tracks (#1362)
- Fix embedded player not working on social posts (1946)
- Fix favorite button in queue
- Fix fetching pages of albums in album detail view (#1927)
- Fix front album tracks count translation
- Fix global keyboard shortcuts firing when input is focused (#1876)
- Fix lots of problems in debian installation guide
- Fix media directory nginx routing error in front docker container introduced in !1897
- Fix OAuth login (#1890)
- Fix play button in albums with multi-page volumes (#1928)
- Fix player closing when queue ends (#1931)
- Fix postgres connection details in docker setup
- Fix purging of dangling files #1929
- Fix remote search (#1857)
- Fix search by text in affected views (#1858)
- Fix timeout on spa manifest requests
- Fix track table showing all tracks and double pagination in some cases (#1923)
- Fix user requests and reports filtering (#1924)
- Fix validity issues in openapi/swagger spec files (#1171)
- Fixed an issue which caused links in Markdown forms to not render correctly. (#2023)
- Fixed login redirect (1736)
- Fixed mobile player element widths (#2054)
- Fixed remote subscription form in Podcast and search views (#1708)
- Fixed upload form VUE errors (#1738) (1738)
- Fixes an issue which made it possible to download all media files without access control (#2101)
- Fixes channel page (#1729) (1729)
- Fixes development environment set-up with docker (1726)
- Fixes embed player (#1783) (1783)
- Fixes service worker (#1634)
- Fixes track listenings not being sent when tab is not focused
- Hide create custom radio to un-authenticated users (#1720)
- Improve signal handling for service and containers
- Move api docker hardcoded env vars in the settings module
- Prefer str over dict for the CACHE_URL api setting
This fix the ability to reuse the CACHE_URL with other settings such as
CELERY_BROKER_URL.
- Remove trailing slash from reverse proxy configuration
- Remove unused Footer component (#1660)
- Remove usage of deprecated Model and Serializer fields (#1663)
- Resolved an issue where queue text with mouse over has dark text on dark background (#2058) (2058)
- Skip refreshing local actors in celery federation.refresh_actor_data task - fixes disappearing avatars (!1873)
Documentation:
- Add ability to translate documentation into multiple languages
- Add generic upgrade instructions to Docker postgres documentation (#2049)
- Add restore instructions to backup docs (#1627).
- Add systemd update instructions to Debian upgrade instructions (#1966)
- Added Nginx regeneration instructions to Debian update guide (#2050)
- Added virtualenv upgrade instructions for Debian (#1562).
- Cleaned up documentation
- Document the new login flow of the CLI-tool (#1800)
- Documented LOGLEVEL command (#1541).
- Documented the `NGINX_MAX_BODY_SIZE` .env variable (#1624).
- Fix broken links in CHANGELOG (#1976)
- Harden security for debian install docs
- Remove unnecessary postgres variable in Docker migration guide (#2124).
- Rewrote documentation contributor guide.
- Rewrote the architecture file (#1908)
- Rewrote the federation developer documentation (#1911)
- Rewrote the plugins documentation (#1910)
- Rewrote translators file
- Updated API developer documentation (#1912, #1909)
- Updated CONTRIBUTING guide with up-to-date documentation. Created layout in documentation hub.
Other:
- Add a CI job to check if changelog snippet is available
- Add CI broken links checker
- Add pre-commit hooks
- flake8
- black
- isort
- pyupgrade
- prettier
- codespell
- Add pre-commit to development tools
- Align the openapi spec to the actual API wherever possible
- Cache lychee checked urls for 1 day in CI
- Fix api tests warnings by renaming fixtures
- Fix permissions for build artifacts
- Fix shell scripts lint errors
- Format api pyproject.toml
- Format or fix files using pre-commit
- Upgrade code to >=python3.7
- Fix flake8 warnings
- Fix spelling errors
- Format files using black
- Format files using isort
- Format files using prettier
- Move api tools config to pyproject.toml
- Move database url composition from custom script to django settings
- Remove docker_all_in_one_release ci job
- Rename api composer/django/ dir to docker/
- Unpin asgiref in API dependencies
- Use vite for building the frontend, #1644
Deprecation:
- Deprecate the api manage.py script in favor of the funkwhale-manage entrypoint
- That's the last minor version series that supports python3.7. Funkwhale 1.4 will remove support for
it. #1693
- The automatically generated `DATABASE_URL` configuration in the docker setup is deprecated, please
configure either the `DATABASE_URL` environment variable or the `DATABASE_HOST`, `DATABASE_USER` and
`DATABASE_PASSWORD` environment variables instead.
Removal:
- This release removes support for Python 3.6. Please make sure you update your python version before
Updating Funkwhale!
Committers:
- Agate
- Aina Hernàndez Campaña
- AMoonRabbit
- Anton
- bruce diao
- Bruno Talanski
- ButterflyOfFire
- Çağla Pickaxe
- Ciarán Ainsworth
- Dignified Silence
- dignny
- Éilias McTalún
- EorlBruder
- Fedi Funkers
- Georg Krause
- ghose
- Henri Dickson
- Jacek Pruciak
- Jasper Bogers
- Jhoan Sebastian Espinosa Borrero
- jo
- jooola
- Julian Rademacher
- JuniorJPDJ
- Kasper Seweryn
- Keunes
- Kisel1337
- Laurin W
- Marcos Peña
- Matyáš Caras
- Michael Long
- nztvar
- oki
- Petitminion
- Philipp Wolfer
- poeppe
- Porrumentzio
- ppom
- Reinhard Prechtl
- Sky
- Sporiff
- Stuart Begley-Miller
- @ta
- Thomas
- Till Robin Zickel
- tobifroe
- wvffle
Contributors to our Issues:
- AMoonRabbit
- Agate
- Artem Anufrij
- ChengChung
- Ciarán Ainsworth
- Creak
- Eric Mesa
- Georg Krause
- Hans Bauer
- HurricaneDancer
- Jakob Schürz
- Jucgshu
- Julian-Samuel Gebühr
- JuniorJPDJ
- Kasper Seweryn
- Keunes
- Laser Lesbian
- Laurin W
- Marco
- Marcos Peña
- Martin Giger
- Mathieu Jourdan
- MattDHarding
- Meliurwen
- Micha Gläß-Stöcker
- MichaelBechHansen
- Nathan Mih
- Nicolas Derive
- Nolan Darilek
- Philipp Wolfer
- Porrumentzio
- Rodion Borisov
- Sam Birch
- Sky Leite
- TheSunCat
- Thomas
- Tobias Frölich
- Tony Wasserka
- Vincent Riquer
- Virgile Robles
- dddddd-mmmmmm
- gerry_the_hat
- getzze
- heyarne
- jake
- jooola
- jovuit
- nouts
- petitminion
- ppom
- pullopen
- resister
- silksow
- troll
Contributors to our Merge Requests:
- AMoonRabbit
- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Kasper Seweryn
- Laurin W
- Marcos Peña
- Mathieu Jourdan
- Nicolas Derive
- Philipp Wolfer
- Rodion Borisov
- Thomas
- Tobias Frölich
- getzze
- jooola
- mqus
- petitminion
- poeppe
## 1.2.10 (2023-03-17)
Bugfixes:
- Fixes a security vulnerability that allows to download all media files without access control #2101
Contributors to our Issues:
- Georg Krause
- JuniorJPDJ
Special thanks to Conradowatz for reporting the vulnerability
Committers:
- JuniorJPDJ
## 1.2.9 (2022-11-25)
Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html
Bugfixes:
- Ensure index.html files get loaded with UTF-8 encoding
- Fixed invitation reuse after the invited user has been deleted (#1952)
- Fixed unplayable skipped upload (#1349)
Committers:
- Georg Krause
- Marcos Peña
- Philipp Wolfer
- Travis Briggs
Contributors to our Issues:
- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Kasper Seweryn
- Marcos Peña
- Mathieu Jourdan
- Micha Gläß-Stöcker
- fuomag9
- gammelalf
- myOmikron
- petitminion
Contributors to our Merge Requests:
- Georg Krause
- JuniorJPDJ
- Marcos Peña
- Philipp Wolfer
- fuomag9
## 1.2.8 (2022-09-12)
Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html
Features:
- Add Sentry SDK to collect errors at the backend
Bugfixes:
- Fix exponentially growing database when using in-place-imports on a regular base #1676
- Fix navigating to registration request not showing anything (#1836)
- Fix player cover image overlapping queue list
- Fixed metadata handling for Various Artists albums (#1201)
- Fixed search behaviour in radio builder's filters (#733)
- Fixed unpredictable subsonic search3 results (#1782)
Committers:
- Ciarán Ainsworth
- Georg Krause
- Marcos Peña
- Mathias Koehler
- wvffle
Contributors to our Issues:
- AMoonRabbit
- Agate
- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Kasper Seweryn
- Kelvin Hammond
- Marcos Peña
- Meliurwen
- Micha Gläß-Stöcker
- Miv2nir
- Sam Birch
- Tolriq
- Tony Wasserka
- f1reflyyyylmao
- heyarne
- petitminion
- troll
Contributors to our Merge Requests:
- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Kasper Seweryn
- Marcos Peña
- interru
## 1.2.7 (2022-07-14)
Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html
Bugfixes:
- Fixed libre.fm plugin not submitting scrobbles (#1817)
Committers:
- Georg Krause
- Marcos Peña
Contributors to our Issues:
- Ciarán Ainsworth
- Marcos Peña
Contributors to our Merge Requests:
- Georg Krause
- Marcos Peña
## 1.2.6 (2022-07-04)
Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html
Bugfixes:
- Channel overview was displaying foreign tracks (#1773)
- Fixed login form focusing reset password link instead of next input (#1373)
- Fixed missing album contextual menu (#1791)
- Fixed single listening submission when repeating a song (#1312)
- Fixed subsonic createPlaylist's endpoint doesn't update playlist (#1263)
- Resolve timeouts if nodeinfo and service actor is not known (#1714)
Other:
- Replaced references to #funkwhale-troubleshooting with #funkwhale-support
Committers:
- Georg Krause
- Marcos Peña
- Petitminion
- wvffle
Contributors to our Issues:
- jeweet
- wvffle
- Georg Krause
- Marcos Peña
- AMoonRabbit
- Micha Gläß-Stöcker
- Ciarán Ainsworth
- heyarne
- Agate
- JuniorJPDJ
- MichaelBechHansen
- ooZberg
- Esras .
- PhieF
- Petitminion
Contributors to our Merge Requests:
- wvffle
- Georg Krause
- Marcos Peña
- Petitminion
## 1.2.5 (2022-05-07)
Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html
Enhancements:
- Parameterize the default S3 ACL when uploading objects. (#1319)
Bugfixes:
- Fix stopped player to not show 00:00 when loading a track (#1432)
- Fixes channel page (#1729) (1729)
Committers:
- Georg Krause
- Marcos
- MattDHarding
- Stuart Begley-Miller
Contributors to our Issues:
- Agate
- Beto Dealmeida
- Cam Sweeney
- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Marcos Peña
- Mathieu Jourdan
- MattDHarding
- Micha Gläß-Stöcker
- Stuart Begley-Miller
- Tony Wasserka
- jovuit
- petitminion
- pullopen
Contributors to our Merge Requests:
- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Marcos Peña
- MattDHarding
- PhieF
- Stuart Begley-Miller
- petitminion
## 1.2.4 (2022-04-23)
Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html
Enhancements:
- Hand cursor now displayed over artist and album cards
Bugfixes:
- Fixes docs' SMTP URI configuration (#1749) (1749)
Documentation:
- The documentation is now available in two versions: Develop and Stable
Contributors to our Issues:
- Beto Dealmeida
- Cam Sweeney
- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Marcos Peña
- Mathieu Jourdan
- Micha Gläß-Stöcker
- petitminion
Contributors to our Merge Requests:
- Georg Krause
- JuniorJPDJ
- Marcos Peña
- petitminion
Committers:
- Georg Krause
- Marcos Peña
- MattDHarding
## 1.2.3 (2022-03-18)
Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html
Enhancements:
- Added support for all cover sources in the embedded player (#1697).
- Change unmaintained PyMemoize library to django-cache-memoize
to enable Python 3.10 support
Bugfixes:
- Catch ValueError on radio end (#1596)
- Fix bug that prevents users from creating a new oauth application (#1706)
- Fix failed track adding to playlist being silent (#1020)
- Fix recently added radio not working has expected (#1674)
- Fixed an issue where you couldn't load the details page for tracks with no associated album (#1703)
- Fixed library visibility dropdown (#1384)
- In playlist editor can now click outside the trashcan but inside the button to delete entry (#1348)
Contributors to our Issues:
- Agate
- Baudouin Feildel
- Christoph Pomaska
- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Kasper Seweryn
- Marcos Peña
- Mathieu Jourdan
- MattDHarding
- Micha Gläß-Stöcker
- dnikolov
- jovuit
- petitminion
Contributors to our Merge Requests:
- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Kasper Seweryn
- Marcos Peña
- MattDHarding
- petitminion
Committers
- Ciaran Ainsworth
- Georg Krause
- JuniorJPDJ
- MattDHarding
- Petitminion
- Reinhard Prechtl
## 1.2.2 (2022-02-04)
Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html
Bugfixes:
- Fix an issue where the tracks tab in a library doesn't show any tracks (#1683)
- Fix an issue with the embedded player not showing any content (#1675)
- Fix broken instance description if it contains a line break #1673
Dependency Updates:
- Update dependency vue-template-compiler to 2.6.14
- Update dependency vue to ^2.6.14
- Update dependency vuex-persistedstate to ^2.7.1
- Update dependency vuedraggable to ^2.24.3
- Update dependency vue-lazyload to ^1.3.3
- Update dependency vue-plyr to ^5.1.3
- Update dependency vue-upload-component to ^2.8.22
- Update dependency vue-gettext to ^2.1.12
- Update dependency showdown to ^1.9.1
- Update dependency js-logger to ^1.6.1
- Update dependency register-service-worker to ^1.7.2
- Update dependency howler to ^2.2.3
- Update dependency fomantic-ui-css to ^2.8.8
- Update dependency diff to ^4.0.2
- Update dependency axios-auth-refresh to ^2.2.8
Contributors to our Issues:
- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Marcos Peña
- Mathieu Jourdan
- Micha Gläß-Stöcker
- Ricardo
- petitminion
Contributors to our Merge Requests:
- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Marcos Peña
Committers
- Ciarán Ainsworth
- Georg Krause
- JuniorJPDJ
- Keunes
- Marcos Peña
## 1.2.1 (2022-01-06)
Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html
Bugfixes:
- Fix Pipeline for stable release builds (#1652)
- Fix remote content page (#1655)
Contributors to our Issues:
- Ciarán Ainsworth
- Georg Krause
- Jakob Schürz
- Mathieu Jourdan
- Micha Gläß-Stöcker
- petitminion
Contributors to our Merge Requests:
- Georg Krause
Committers:
- Dignified Silence
- Georg Krause
- JuniorJPDJ
- nztvar
## 1.2.0 (2021-12-27)
Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html
Due to a bug in our CI Pipeline, you need to download the frontend artifact here: https://dev.funkwhale.audio/funkwhale/funkwhale/-/jobs/81069/artifacts/download
If you are running the All-in-One-Container since a longer time, you probably need to manually migrate your database information. If that's the case, you will get a message like this:
`DETAIL: The data directory was initialized by PostgreSQL version 11, which is not compatible with this version 13.5.`
Make sure the Funkwhale version is set to `1.1.4` in `docker-compose.yml`. Now you can run this command to dump the database into a file:
`docker-compose exec -T funkwhale pg_dump -c -U funkwhale > "db.dump"`
Now you can update the Funkwhale version in `docker-compose.yml` to `1.2.0`. Additionally you should save your `data` directory, eg by running `mv data data.bak && mkdir data`. Stop Funkwhale and start it again with the new version, by using `docker-compose down && docker-compose up -d`. This will initialize a fresh DB and applies all migrations. Now you can restore your database with the following command: `cat db.dump | docker-compose exec -T funkwhale psql -U funkwhale`. That's it, enjoy!
Features:
- Implemented awesome recently added radio (part of #1390)
- Rework the instance about page (#1376)
- Made changes to the track table to make it more visibly pleasing
Enhancements:
- Add linting for Frontend code (#1602)
- Add xmlns:content to feed schemas fixes #1535
- Add a Maloja plugin to submit listenings
- Add artist cover art in subsonic API response (#1528)
- Allow listen activities privacy level to be set public
- Allow running multi-container setup on non-root user inside docker (!1375) (fixes #1334)
- Change volume dynamic range from 60dB to 40dB (fixes #1544)
- Change Start Radio to Play Radio (#1400)
- Display toast when subsonic password is copied (#1496)
- Expose more metadata in Subsonic's getAlbumList endpoint (#623)
- ListenBrainz: Submit media player and submission client information
- Make "play in list" the default when interacting with individual tracks (#1274)
- Prevent an uncontrolled exception when uploading a file without tags, and prints user friendly message (1275)
- Remove deprecated JWT Authentication (#1108) (1108)
- Remove Raven SDK to report errors to Sentry (#1425) (1425)
- Replace psycopg2-binary with psycopg2 (#1513)
Bugfixes:
- Add worker-src to nginx header to prevent issues (#1489)
- Enable stepless adjustment of the volume slider (!1294)
- Fix an error in a Subsonic methods that return lists of numbers/strings like getUser
- Fix showing too long radio descriptions (#1556)
- Fix X-Frame-Options HTTP header for embed and force it to SAMEORIGIN value for other pages (fix #1022)
- Fix before last track starts playing when last track removed (#1485)
- Fix delete account button is not disabled when missing password (#1591)
- Fix omputed properties already defined in components data (#1649)
- Fix the all in one docker image building process, related to #1503
- Fix crash in album moderation interface when missing cover (#1474)
- Fix subsonic scrobble not triggering plugin hook (#1416)
- Improve formatting of RSS episode descriptions (#1405)
- Only suggest typed tag once if it already exists
- Partially fixed playing two tracks at same time (#1213)
- Revert changes that break mobile browser playback (#1509)
- Sanitize remote tracks' saving locations with slashes on their names (#1435)
- Show embed option for channel tracks (#1278)
- Store volume in logarithmic scale and convert when setting it to audio (fixes #1543)
- Use global Howler volume instead of setting it separately for each track (fixes #1542)
Documentation:
- Add email configuration to the documentation (#1481)
- Add server uninstallation documentation (\!1314)
- Document location of cli env file on macOS (\!1354)
- Fix broken backup documentation (#1345)
- Refactore installation documentation and other small documentation adjustments (\!1314)
- Add User documentation for built-in plugins
Other:
- Create stable branch, master is now deprecated and will be removed in 1.3 (#1476)
Committers:
- Alexandra Parker
- Alyssa Ross
- appzer0
- Arthur Brugière
- Asier Iturralde Sarasola
- bittin
- Blopware
- Brian McMillen
- Christoph Pomaska
- Ciaran Ainsworth
- Ciarán Ainsworth
- Classified
- Connor Hay
- Damian Szetela
- David Marzal
- Deleted User
- Dignified Silence
- Dominik Danelski
- egon0
- Erik Präntare
- Georg Abenthung
- Georgios B
- Georgios Brellas
- Georg Krause
- ghose
- greengekota
- heyarne
- ian Vatega
- Janek
- jovuit
- JuniorJPDJ
- Konstantinos G
- manuelviens
- Manuel Viens
- Marcos
- Marcos Peña
- Martin Giger
- Matthew J
- Micha Gläß-Stöcker
- petitminion
- Petitminion
- Philipp Wolfer
- Porrumentzio
- Quentin PAGÈS
- Raphael Lullis
- Riccardo Sacchetto
- Romain Failliot
- Rubén Cabrera
- Ryan Harg
- Sergio Varela
- SpcCw
- Stefano Pigozzi
- Thomas
- Tony Simoes
- Tony Wasserka
- vachan-maker
- Virgile Robles
Contributors to our Issues:
- AMoonRabbit
- Agate
- Antoine POPINEAU
- Arthur Brugière
- Ciarán Ainsworth
- Connor Hay
- Creak
- David Marzal
- Georg Krause
- Gerhard Beck
- Greg Poole
- JuniorJPDJ
- Kuba Orlik
- Lunar Control
- Marcos Peña
- Mateusz Korzeniewski
- Mathieu Jourdan
- Micha Gläß-Stöcker
- Philipp Wolfer
- Porrumentzio
- Thomas
- Tony Wasserka
- Ville Ranki
- arkhi
- heyarne
- interfect
- jovuit
- mal
- petitminion
- vachan-maker
Contributors to our Merge Requests:
- Agate
- Arthur Brugière
- Ciarán Ainsworth
- Connor Hay
- David Marzal
- Distopico
- Fanyx
- Georg Abenthung
- Georg Krause
- Janek
- JuniorJPDJ
- Kasper Seweryn
- Marcos Peña
- Mathieu Jourdan
- Matthew J.
- Micha Gläß-Stöcker
- Philipp Wolfer
- Thomas
- Tony Wasserka
- heyarne
- jovuit
- petitminion
- thanksd
## 1.1.4 (2021-08-02)
Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html
- Pinned version of asgiref to avoid trouble with latest release. For further information, see #1516
## 1.1.3 (2021-08-02)
Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html
Enhancements:
- Test better tagging of Docker Images (#1505)
Bugfixes:
- Fix the scrobbler plugin submitting literal "None" as MusicBrainz ID (#1498)
- Add worker-src to nginx header to prevent issues (#1489)
- Only suggest typed tag once if it already exists
- Implement access control on the moderation views (#1494)
- Prevent open redirect on login (#1492)
## 1.1.2 (2021-05-19)
Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html
Enhancements:
- Added modal to prompt users to log in when subscribing to channels (#1296)
Bugfixes:
- Added missing is_playable serializer for the tracks endpoint.
- Fixed minor graphical bug where loaders would appear white in dark theme (#1442)
- Fixed systemd unit for funkwhale-worker (#1160)
- Several minor fixes for the Frontend
## 1.1.1 (2021-04-13)
Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html
Enhancements:
- Improve UI consistency in artist tracks (#1286)
- Adds year to album's card and album's base UI
Bugfixes:
- Fix playback issues when pausing close the the end of a track (#1324)
- Fix tracks playing in the background without the ability to control them (#1213) (#1387)
- Fixed track playback indicator to reset on queue end (#1380)
- Frontend build tooling is less dependent on `npm` or `yarn` being used (!1285)
- Fixed a small discrepancy to the subsonic api 1374
## 1.1 (2021-03-10)
Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html
Enhancements:
- Add number of tracks and discs of an album to API (#1238)
- Add spacing after "Play all" button in playlist view (!1271)
- Added a ListenBrainz plugin to submit listenings
- Added ability to choose fediverse addresses from channel subscription page/podcast screen (#1294)
- Added new search functions to allow users to more easily search for podcasts in the UI.
- Added padding to volume slider to ease mouse control (#1241)
- Logarithmic scale for volume slider (#1222)
- More user-friendly subsonic tokens (#1269)
- Remove manual entry of Import Reference on front-end import (#1284)
- Support AIFF file format (#1243)
Bugfixes:
- "Add check for empty/null covers (#1281)"
- Added an album filter to fix problem where channel entries would show up in the wrong series (#1282)
- Avoid broken Faker version (#1323)
- Changed audio format detection to happen via sniffing and not file extensions (#1274)
- Changed default behaviour of channel entries to use channel artwork if no entry artwork available (#1289)
- Fix delete library modal closing immediately (#1272)
- Fix public shared remote library radio button being disabled (#1292)
- Fixed an issue that prevented disabling plugins
- Fixed an issue where channel albums don't show up in the album search (#1300)
- Fixed an issue where modals would prevent users being able to interact with channels (#1295)
- Update MediaSession metadata for initially loaded track (#1252)
- Update playback position slider also when track is paused (#1266)
- Fixed follows from Pleroma with custom Emoji as Tag by ignoring not supported tag types #1342
- Update pleroma JSON-LD Schema (#1341)
- Pin twisted version to 20.3.0
Contributors to this release (development, documentation, reviews):
- Adam Novak
- Agate
- alemairebe
- Alicia Blasco Leon
- anonymous
- Amaranthe
- appzer0
- Arne
- Asier Iturralde Sarasola
- Christian Paul
- Ciarán Ainsworth
- Daniel
- David
- Dominik Danelski
- Eorn le goéland
- Eleos
- Erik Duxstad
- Esteban
- Fred Uggla
- Freyja Wildes
- Georg Krause
- ghose
- hellekin
- heyarne
- interfect
- Jess Jing
- Johannes H.
- jovuit
- marzzzello
- Meliurwen
- Mehdi
- Nitai Bezerra da Silva
- Philipp Wolfer
- Pierre Couy
- Porrumentzio
- Reg
- Robert Kaye
- Rubén Cabrera
- Silver Fox
- Snack Capt
- SpcCw
- Strom Lin
- vicdorke
- x
## 1.1-rc2 (2021-03-01)
Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html
Bugfixes:
- Fixed follows from Pleroma with custom Emoji as Tag by ignoring not supported tag types #1342
- Update pleroma JSON-LD Schema (#1341)
- Revert fork replacement of http-signature since official package breaks federation
- Pin twisted version to 20.3.0
## 1.1-rc1 (2021-02-24)
Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html
Enhancements:
- Add number of tracks and discs of an album to API (#1238)
- Add spacing after "Play all" button in playlist view (!1271)
- Added a ListenBrainz plugin to submit listenings
- Added ability to choose fediverse addresses from channel subscription page/podcast screen (#1294)
- Added new search functions to allow users to more easily search for podcasts in the UI.
- Added padding to volume slider to ease mouse control (#1241)
- Logarithmic scale for volume slider (#1222)
- More user-friendly subsonic tokens (#1269)
- Remove manual entry of Import Reference on front-end import (#1284)
- Replaced forked http-signature dependency with official package (#876)
- Support AIFF file format (#1243)
Bugfixes:
- "Add check for empty/null covers (#1281)"
- Added an album filter to fix problem where channel entries would show up in the wrong series (#1282)
- Avoid broken Faker version (#1323)
- Changed audio format detection to happen via sniffing and not file extensions (#1274)
- Changed default behaviour of channel entries to use channel artwork if no entry artwork available (#1289)
- Fix delete library modal closing immediately (#1272)
- Fix public shared remote library radio button being disabled (#1292)
- Fixed an issue that prevented disabling plugins
- Fixed an issue where channel albums don't show up in the album search (#1300)
- Fixed an issue where modals would prevent users being able to interact with channels (#1295)
- Update MediaSession metadata for initially loaded track (#1252)
- Update playback position slider also when track is paused (#1266)
Contributors to this release (development, documentation, reviews):
- Reg
- hellekin
- Esteban
- Freyja Wildes
- Amaranthe
- Eleos
- Johannes H.
- Mehdi
- Adam Novak
- Agate
- Christian Paul
- Ciarán Ainsworth
- Erik Duxstad
- Fred Uggla
- Georg Krause
- heyarne
- interfect
- jovuit
- Nitai Bezerra da Silva
- Philipp Wolfer
- Pierre Couy
- Robert Kaye
- Strom Lin
## 1.0.1 (2020-10-31)
Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html
Enhancements:
- Added controls to play volume of an album (#1226)
- Allow genre tags to be updated when rescanning files in-place (#1246)
Bugfixes:
- Fixed broken install because of upgraded dependencies
- Fixed duplication of discs for multi-disc albums in album views (#1228)
- Make the generated RSS feed more conformant with w3c specification (#1250)
Contributors to this release (development, documentation, reviews):
- Agate
- Cédric Schieli
- Ciarán Ainsworth
- Kuba Orlik
## 1.0 (2020-09-09)
Upgrade instructions are available at
https://docs.funkwhale.audio/administrator/upgrade/index.html
### Dropped python 3.5 support [manual action required, non-docker only]
With Funkwhale 1.0, we're dropping support for Python 3.5. Before upgrading,
ensure `python3 --version` returns `3.6` or higher.
If it returns `3.6` or higher, you have nothing to do.
If it returns `3.5`, you will need to upgrade your Python version/Host, then recreate your virtual environment:
```sh
rm -rf /srv/funkwhale/virtualenv
python3 -m venv /srv/funkwhale/virtualenv
```
### Increased quality of JPEG thumbnails [manual action required]
Default quality for JPEG thumbnails was increased from 70 to 95, as 70 was producing visible artifacts in resized images.
Because of this change, existing thumbnails will not load, and you will need to:
1. delete the `__sized__` directory in your `MEDIA_ROOT` directory
2. run `python manage.py fw media generate-thumbnails` to regenerate thumbnails with the enhanced quality
If you don't want to regenerate thumbnails, you can keep the old ones by adding `THUMBNAIL_JPEG_RESIZE_QUALITY=70` to your .env file.
### Small API breaking change in `/api/v1/libraries`
To allow easier crawling of public libraries on a pod,we had to make a slight breaking change
to the behaviour of `GET /api/v1/libraries`.
Before, it returned only libraries owned by the current user.
Now, it returns all the accessible libraries (including ones from other users and pods).
If you are consuming the API via a third-party client and need to retrieve your libraries,
use the `scope` parameter, like this: `GET /api/v1/libraries?scope=me`
### API breaking change in `/api/v1/albums`
To increase performance, querying `/api/v1/albums` doesn't return album tracks anymore. This caused
some performance issues, especially as some albums and series have dozens or even hundreds of tracks.
If you want to retrieve tracks for an album, you can query `/api/v1/tracks/?album=<albumid>`.
### JWT deprecation
API Authentication using JWT is deprecated and will be removed in Funkwhale 1.0. Please use OAuth or application tokens
and refer to our API documentation at https://docs.funkwhale.audio/swagger/ for guidance.
### Full list of changes
Features:
- Allow users to hide compilation artists on the artist search page (#1053)
- Can now launch server import from the UI (#1105)
- Dedicated, advanced search page (#370)
- Persist theme and language settings across sessions (#996)
Enhancements:
- Add support for unauthenticated users hitting the logout page
- Added support for Licence Art Libre (#1088)
- Broadcast/handle rejected follows (#858)
- Confirm email without requiring the user to validate the form manually (#407)
- Display channel and track downloads count (#1178)
- Do not include tracks in album API representation (#1102)
- Dropped python 3.5 support. Python 3.6 is the minimum required version (#1099)
- Improved keyboard accessibility (#1125)
- Improved naming of pages for accessibility (#1127)
- Improved shuffle behaviour (#1190)
- Increased quality of JPEG thumbnails
- Lock focus in modals to improve accessibility (#1128)
- More consistent search UX on /albums, /artists, /radios and /playlists (#1131)
- Play button now replace current queue instead of appending to it (#1083)
- Set proper lang attribute on HTML document (#1130)
- Use semantic headers for accessibility (#1121)
- Users can now update their email address (#292)
- [plugin, scrobbler] Use last.fm API v2 for scrobbling if API key and secret are provided
- Added a new, large thumbnail size for cover images (#1205
- Enforce authentication when viewing remote channels, profiles and libraries (#1210)
Bugfixes:
- Fix broken media support detection (#1180)
- Fix layout issue with playbar on landscape tablets (#1144)
- Fix random radio so that podcast content is not picked up (#1140)
- Fixed an issue with search pages where results would not appear after navigating to another page
- Fixed crash with negative track position in file tags (#1193)
- Handle access errors scanning directories when importing files
- Make channel card updated times more humanly readable, add internationalization (#1089)
- Ensure search page reloads if another search is submitted in the sidebar (#1197)
- Fixed "scope=subscribed" on albums, artists, uploads and libraries API (#1217)
- Fixed broken federation with pods using allow-listing (#1999)
- Fixed broken search when using (, " or & chars (#1196)
- Fixed domains table hidden controls when no domains are found (#1198)
Documentation:
- Simplify Docker mono-container installation and upgrade documentation
Contributors to this release (translation, development, documentation, reviews, design, testing, third-party projects):
- Agate
- Andy Craze
- anonymous
- appzer0
- Arne
- Ciarán Ainsworth
- Daniele Lira Mereb
- dulz
- Francesc Galí
- ghose
- Kalle Anka
- mekind
- Meliurwen
- Puri
- Quentin PAGÈS
- Raphaël Ventura
- Slimane Selyan Amiri
- SpcCw
- Stefano Pigozzi
- Sébastien de Melo
- Ventura Pérez García
- vicdorke
- Xosé M
*.md @funkwhale/documentation