diff --git a/.env.dev b/.env.dev index 66638d77f..0c81dc506 100644 --- a/.env.dev +++ b/.env.dev @@ -1,4 +1,4 @@ -DJANGO_ALLOWED_HOSTS=.funkwhale.test,localhost,nginx,0.0.0.0,127.0.0.1 +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 diff --git a/.gitpod.yml b/.gitpod.yml index a4587f3ab..31b344fab 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -1,48 +1,85 @@ tasks: - - name: Funkwhale + - name: Docker env: COMPOSE_FILE: dev.yml init: | + # Install frontend depencencies locally cd front yarn install cd .. + + # Prepare prebuild .env echo "# Gitpod Environment Variables" > .env - echo "MEDIA_URL=http://localhost:8000/media/" >> .env - echo "STATIC_URL=http://localhost:8000/staticfiles/" >> .env - echo "GITPOD_WORKSPACE_URL=$GITPOD_WORKSPACE_URL" >> .env - echo "HMR_PORT=8000" >> .env + + # Prepare docker docker network create federation docker-compose pull docker-compose build docker-compose up -d postgres redis sleep 10 # allow postgres and redis to initialize + + # Prepare backend docker-compose run --rm api python manage.py migrate docker-compose run --rm api python manage.py createsuperuser --no-input --username gitpod --email gitpod@example.com - echo "from django.contrib.auth import get_user_model;u=get_user_model().objects.get(username='gitpod');u.set_password('gitpod');u.save()" | docker-compose run --rm -T api python manage.py shell -i python - echo "from funkwhale_api.music import fake_data; fake_data.create_data(25)" | docker-compose run --rm -T api python manage.py shell -i python + docker-compose run --rm api python manage.py fw users set --password "gitpod" gitpod --no-input + + # Compile frontend locales docker-compose run --rm front yarn run i18n-compile - command: docker-compose up nginx + + # Start API to let script create an actor + docker-compose up -d nginx + gp ports await 8000 + + # Clone music repo + git clone https://dev.funkwhale.audio/funkwhale/catalog.git + sudo mv catalog/music data + sudo chown -R root:root data/music + rm -rf catalog + + # Login with cURL to create actor + python .gitpod/init_actor.py + + # Import music + docker-compose down + LIBRARY_ID=`cat .gitpod/create_library.py | docker-compose run --rm -T api python manage.py shell -i python` + docker-compose run --rm api python manage.py import_files $LIBRARY_ID "/music/" --recursive --noinput --in-place + + # Stop docker + docker-compose stop + command: | + # Prepare workspace .env + echo "MEDIA_URL=`gp url 8000`/media/" >> .env + echo "STATIC_URL=`gp url 8000`/staticfiles/" >> .env + echo "FUNKWHALE_HOSTNAME=`gp url 8000 | sed 's#https://##'`" >> .env + echo "FUNKWHALE_PROTOCOL=https" >> .env + echo "GITPOD_WORKSPACE_URL=$GITPOD_WORKSPACE_URL" >> .env + echo "HMR_PORT=8000" >> .env + echo "VUE_APP_INSTANCE_URL=$VUE_APP_INSTANCE_URL" >> .env + + # Start app + docker-compose up front api nginx - name: Welcome to Funkwhale development! + env: + COMPOSE_FILE: dev.yml command: | clear - echo "You can now start developing Funkwhale with gitpod!" echo "" - echo "To sign in to the superuser account, please this credentials:" - echo "gitpod:gitpod" + 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[34mgitpod" + echo "" ports: - port: 8000 visibility: public onOpen: notify - - port: 4000 - visibility: public - onOpen: open-preview - vscode: extensions: - - antfu.vite - lukashass.volar - lextudio.restructuredtext - trond-snekvik.simple-rst diff --git a/.gitpod/create_library.py b/.gitpod/create_library.py new file mode 100644 index 000000000..7991417f7 --- /dev/null +++ b/.gitpod/create_library.py @@ -0,0 +1,17 @@ +from funkwhale_api.music.models import Library +from django.contrib.auth import get_user_model + +actor = get_user_model().objects.get(username='gitpod').actor + +try: + library = Library.objects.get(actor=actor) +except: + # Create library + library = Library() + library.actor = actor + library.description = 'Libre music to build a starter catalog for your instance' + library.name = 'funkwhale/catalog' + library.privacy_level = 'everyone' + library.save() + +print(str(library.uuid)) \ No newline at end of file diff --git a/.gitpod/init_actor.py b/.gitpod/init_actor.py new file mode 100644 index 000000000..7dde3945e --- /dev/null +++ b/.gitpod/init_actor.py @@ -0,0 +1,21 @@ +import requests + +# Login to initialize user actor +req = requests.Session() + +res = req.get('http://localhost:8000/login') +print(res.status_code, res.cookies) +token = res.cookies['csrftoken'] + +res = req.post('http://localhost:8000/api/v1/users/login', data={ + 'username': 'gitpod', + 'password': 'gitpod', + 'csrfmiddlewaretoken': token, +}) +print(res.status_code, res.content) + +res = req.get('http://localhost:8000/') +print(res.status_code) + +if res.status_code == 401: + exit(1) \ No newline at end of file diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index df0557798..ed8700c29 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -70,6 +70,21 @@ automatically in old and new workspaces. The scope ``funkwhale/*`` will ensure that you will be signed into our instance on every project that we're hosting, not only Funkwhale itself. +Custom instance url +^^^^^^^^^^^^^^^^^^^ + +If you want to preview changes on your own Funkwhale server, you can add your domain as an environment variable. +This allows you to test your frontend changes against your domain without setting this value each time. +To add your domain, set a user environment variable in `your Gitpod settings `_. + ++--------- ----------------+-----------------------------------+-------------------------+ +| Name | Value | Scope | ++==========================+===================================+=========================+ +| ``VUE_APP_INSTANCE_URL`` | ``https://funkwhale.example.com`` | ``funkwhale/funkwhale`` | ++--------------------------+-----------------------------------+-------------------------+ + +The scope ``funkwhale/funkwhale`` ensures that this variable only works on Funkwhale. + A quick path to contribute on the front-end ------------------------------------------- diff --git a/changes/changelog.d/1866.enchancement b/changes/changelog.d/1866.enchancement new file mode 100644 index 000000000..4ac75b748 --- /dev/null +++ b/changes/changelog.d/1866.enchancement @@ -0,0 +1 @@ +Add playable tracks to gitpod instance \ No newline at end of file