Add development section
authorIlja <pleroma@spectraltheorem.be>
Sun, 10 Jan 2021 08:25:36 +0000 (08:25 +0000)
committerrinpatch <rinpatch@sdf.org>
Sun, 10 Jan 2021 08:25:36 +0000 (08:25 +0000)
* I cretaed a folder 'development'
* I split up the file dev.md into three parts and moved it to this folder
  * index.md
  * authentication_authorization.md
  * mrf.md
* I also moved ap_extensions.md
* I created a new file setting_up_pleroma_dev.md

20 files changed:
.gitignore
docs/configuration/mrf.md
docs/development/API/admin_api.md [moved from docs/API/admin_api.md with 100% similarity]
docs/development/API/chats.md [moved from docs/API/chats.md with 100% similarity]
docs/development/API/differences_in_mastoapi_responses.md [moved from docs/API/differences_in_mastoapi_responses.md with 100% similarity]
docs/development/API/pleroma_api.md [moved from docs/API/pleroma_api.md with 100% similarity]
docs/development/API/prometheus.md [moved from docs/API/prometheus.md with 100% similarity]
docs/development/ap_extensions.md [moved from docs/ap_extensions.md with 100% similarity]
docs/development/authentication_authorization.md [moved from docs/dev.md with 72% similarity]
docs/development/index.md [new file with mode: 0644]
docs/development/setting_up_pleroma_dev.md [new file with mode: 0644]
docs/installation/alpine_linux_en.md
docs/installation/arch_linux_en.md
docs/installation/debian_based_en.md
docs/installation/debian_based_jp.md
docs/installation/freebsd_en.md
docs/installation/netbsd_en.md
docs/installation/openbsd_en.md
docs/installation/openbsd_fi.md
priv/repo/optional_migrations/rum_indexing/20190510135645_add_fts_index_to_objects_two.exs

index 62ca61bce780d92f3ffdbb71093d76a40488b025..4dea75e9333aa49659c5676174e64a4ea4949962 100644 (file)
@@ -32,7 +32,7 @@ erl_crash.dump
 
 
 # Database setup file, some may forget to delete it
-/config/setup_db.psql
+/config/setup_db*.psql
 
 .DS_Store
 .env
index 31c66e098a33e14f05455474936424232f252910..9e8c0a2d7dc4d1b9ff74d197d15f5e081d7283f5 100644 (file)
@@ -133,3 +133,26 @@ config :pleroma, :mrf,
 ```
 
 Please note that the Pleroma developers consider custom MRF policy modules to fall under the purview of the AGPL. As such, you are obligated to release the sources to your custom MRF policy modules upon request.
+
+### MRF policies descriptions
+
+If MRF policy depends on config, it can be added into MRF tab to adminFE by adding `config_description/0` method, which returns a map with a specific structure. See existing MRF's like `lib/pleroma/web/activity_pub/mrf/activity_expiration_policy.ex` for examples. Note that more complex inputs, like tuples or maps, may need extra changes in the adminFE and just adding it to `config_description/0` may not be enough to get these inputs working from the adminFE.
+
+Example:
+
+```elixir
+%{
+      key: :mrf_activity_expiration,
+      related_policy: "Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicy",
+      label: "MRF Activity Expiration Policy",
+      description: "Adds automatic expiration to all local activities",
+      children: [
+        %{
+          key: :days,
+          type: :integer,
+          description: "Default global expiration time for all local activities (in days)",
+          suggestions: [90, 365]
+        }
+      ]
+    }
+```
similarity index 72%
rename from docs/dev.md
rename to docs/development/authentication_authorization.md
index 765380a58e3d504b0c13fcfc9b5723f480188d63..183bfc2c94facbaff8584274bd03c12e1f6ac440 100644 (file)
@@ -1,5 +1,3 @@
-This document contains notes and guidelines for Pleroma developers.
-
 # Authentication & Authorization
 
 ## OAuth token-based authentication & authorization
@@ -20,27 +18,4 @@ This document contains notes and guidelines for Pleroma developers.
 
 ## Auth-related configuration, OAuth consumer mode etc.
 
-See `Authentication` section of [the configuration cheatsheet](configuration/cheatsheet.md#authentication).
-
-## MRF policies descriptions
-
-If MRF policy depends on config, it can be added into MRF tab to adminFE by adding `config_description/0` method, which returns map with special structure.
-
-Example:
-
-```elixir
-%{
-      key: :mrf_activity_expiration,
-      related_policy: "Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicy",
-      label: "MRF Activity Expiration Policy",
-      description: "Adds automatic expiration to all local activities",
-      children: [
-        %{
-          key: :days,
-          type: :integer,
-          description: "Default global expiration time for all local activities (in days)",
-          suggestions: [90, 365]
-        }
-      ]
-    }
-```
+See `Authentication` section of [the configuration cheatsheet](../configuration/cheatsheet.md#authentication).
diff --git a/docs/development/index.md b/docs/development/index.md
new file mode 100644 (file)
index 0000000..01a6175
--- /dev/null
@@ -0,0 +1 @@
+This section contains notes and guidelines for developers.
diff --git a/docs/development/setting_up_pleroma_dev.md b/docs/development/setting_up_pleroma_dev.md
new file mode 100644 (file)
index 0000000..8da761d
--- /dev/null
@@ -0,0 +1,70 @@
+# Setting up a Pleroma development environment
+
+Pleroma requires some adjustments from the defaults for running the instance locally. The following should help you to get started.
+
+## Installing
+
+1. Install Pleroma as explained in [the docs](../installation/debian_based_en.md), with some exceptions:
+    * You can use your own fork of the repository and add pleroma as a remote `git remote add pleroma 'https://git.pleroma.social/pleroma/pleroma'`
+    * You can skip systemd and nginx and all that stuff
+    * No need to create a dedicated pleroma user, it's easier to just use your own user
+    * For the DB you can still choose a dedicated user, the mix tasks set it up for you so it's no extra work for you
+    * For domain you can use `localhost`
+    * instead of creating a `prod.secret.exs`, create `dev.secret.exs`
+    * No need to prefix with `MIX_ENV=prod`. We're using dev and that's the default MIX_ENV
+2. Change the dev.secret.exs
+    * Change the scheme in `config :pleroma, Pleroma.Web.Endpoint` to http (see examples below)
+    * If you want to change other settings, you can do that too
+3. You can now start the server `mix phx.server`. Once it's build and started, you can access the instance on `http://<host>:<port>` (e.g.http://localhost:4000 ) and should be able to do everything locally you normaly can.
+
+Example config to change the scheme to http. Change the port if you want to run on another port.
+```elixir
+  config :pleroma, Pleroma.Web.Endpoint,
+   url: [host: "localhost", scheme: "http", port: 4000],
+```
+
+Example config to disable captcha. This makes it a bit easier to create test-users.
+```elixir
+config :pleroma, Pleroma.Captcha,
+  enabled: false
+```
+
+Example config to change the log level to info
+```elixir
+config :logger, :console,
+  # :debug :info :warning :error
+  level: :info
+```
+
+## Testing
+
+1. Create a `test.secret.exs` file with the content as shown below
+2. Create the database user and test database.
+    1. You can use the `config/setup_db.psql` as a template. Copy the file if you want and change the database name, user and password to the values for the test-database (e.g. 'pleroma_local_test' for database and user). Then run this file like you did during installation.
+    2. The tests will try to create the Database, so we'll have to allow our test-database user to create databases, `sudo -Hu postgres psql -c "ALTER USER pleroma_local_test WITH CREATEDB;"`
+3. Run the tests with `mix test`. The tests should succeed.
+
+Example content for the `test.secret.exs` file. Feel free to use another user, database name or password, just make sure the database is dedicated for the testing environment.
+```elixir
+# Pleroma test configuration
+
+# NOTE: This file should not be committed to a repo or otherwise made public
+# without removing sensitive information.
+
+import Config
+
+config :pleroma, Pleroma.Repo,
+  username: "pleroma_local_test",
+  password: "mysuperduperpassword",
+  database: "pleroma_local_test",
+  hostname: "localhost"
+
+```
+
+## Updating
+
+Update Pleroma as explained in [the docs](../administration/updating.md). Just make sure you pull from upstream and not from your own fork.
+
+## Working on multiple branches
+
+If you develop on a separate branch, it's possible you did migrations that aren't merged into another branch you're working on. If you have multiple things you're working on, it's probably best to set up multiple pleroma's each with their own database. If you finished with a branch and want to switch back to develop to start a new branch from there, you can drop the database and recreate the database (e.g. by using `config/setup_db.psql`). The commands to drop and recreate the database can be found in [the docs](../administration/backup.md).
index 62f2fb778e27dac29c496337dddc32cb86c7f043..2f8520a783dfbde10593a632d735c825b8aeb882 100644 (file)
@@ -80,7 +80,7 @@ sudo /etc/init.d/postgresql start
 sudo rc-update add postgresql
 ```
 
-### Install media / graphics packages (optional, see [`docs/installation/optional/media_graphics_packages.md`](docs/installation/optional/media_graphics_packages.md))
+### Install media / graphics packages (optional, see [`docs/installation/optional/media_graphics_packages.md`](../installation/optional/media_graphics_packages.md))
 
 ```shell
 sudo apk add ffmpeg imagemagick exiftool
index 0eb6d2d5f8dd90762186207e76c4a8bc4d8a2184..9cbd3f4290bff38c098189f294d8514bb4ec318b 100644 (file)
@@ -56,7 +56,7 @@ sudo -iu postgres initdb -D /var/lib/postgres/data
 sudo systemctl enable --now postgresql.service
 ```
 
-### Install media / graphics packages (optional, see [`docs/installation/optional/media_graphics_packages.md`](docs/installation/optional/media_graphics_packages.md))
+### Install media / graphics packages (optional, see [`docs/installation/optional/media_graphics_packages.md`](../installation/optional/media_graphics_packages.md))
 
 ```shell
 sudo pacman -S ffmpeg imagemagick perl-image-exiftool
index 2b1c7406fb5b0d318f4dba33b3be46207ea1eb1e..926a85367fee01e4fdccbfd2ee1c1a01e0460779 100644 (file)
@@ -54,7 +54,7 @@ sudo apt update
 sudo apt install elixir erlang-dev erlang-nox
 ```
 
-### Optional packages: [`docs/installation/optional/media_graphics_packages.md`](docs/installation/optional/media_graphics_packages.md)
+### Optional packages: [`docs/installation/optional/media_graphics_packages.md`](../installation/optional/media_graphics_packages.md)
 
 ```shell
 sudo apt install imagemagick ffmpeg libimage-exiftool-perl
index 94e22325c37414289660fdc41c2109e451342f74..2613a86d9596b1e5e6e67960fddd1180dcfc67a8 100644 (file)
@@ -54,7 +54,7 @@ sudo apt update
 sudo apt install elixir erlang-dev erlang-nox
 ```
 
-### オプションパッケージ: [`docs/installation/optional/media_graphics_packages.md`](docs/installation/optional/media_graphics_packages.md)
+### オプションパッケージ: [`docs/installation/optional/media_graphics_packages.md`](../installation/optional/media_graphics_packages.md)
 
 ```shell
 sudo apt install imagemagick ffmpeg libimage-exiftool-perl
index fdcb06c53caf9848fd9c8d3d742956c796c056fd..2dc466eb8a61abc77552c3859ff45eb0cd3c16e3 100644 (file)
@@ -26,7 +26,7 @@ Setup the required services to automatically start at boot, using `sysrc(8)`.
 # service postgresql start
 ```
 
-### Install media / graphics packages (optional, see [`docs/installation/optional/media_graphics_packages.md`](docs/installation/optional/media_graphics_packages.md))
+### Install media / graphics packages (optional, see [`docs/installation/optional/media_graphics_packages.md`](../installation/optional/media_graphics_packages.md))
 
 ```shell
 # pkg install imagemagick ffmpeg p5-Image-ExifTool
index d5fa04fdf83d2e6660eb03d178772c14e3096825..233cf28b75b309e8b3bcb8b258b98e0bdc787510 100644 (file)
@@ -44,7 +44,7 @@ pgsql=YES
 
 First, run `# /etc/rc.d/pgsql start`. Then, `$ sudo -Hu pgsql -g pgsql createdb`.
 
-### Install media / graphics packages (optional, see [`docs/installation/optional/media_graphics_packages.md`](docs/installation/optional/media_graphics_packages.md))
+### Install media / graphics packages (optional, see [`docs/installation/optional/media_graphics_packages.md`](../installation/optional/media_graphics_packages.md))
 
 `# pkgin install ImageMagick ffmpeg4 p5-Image-ExifTool`
 
index 8092ac3792c747c30752ac736303d5ee9a1bd196..0e1269ca56b484fc3e8399c02b6050378acda815 100644 (file)
@@ -27,7 +27,7 @@ Pleroma requires a reverse proxy, OpenBSD has relayd in base (and is used in thi
 
 #### Optional software
 
-Per [`docs/installation/optional/media_graphics_packages.md`](docs/installation/optional/media_graphics_packages.md):
+Per [`docs/installation/optional/media_graphics_packages.md`](../installation/optional/media_graphics_packages.md):
   * ImageMagick
   * ffmpeg
   * exiftool
index 01cf34ab4ce6bd2ae92696fb0717e296c94c6cb3..a61434147ccedf8636a1137bbc9a54361d4ec908 100644 (file)
@@ -20,7 +20,7 @@ Asenna tarvittava ohjelmisto:
 
 #### Optional software
 
-[`docs/installation/optional/media_graphics_packages.md`](docs/installation/optional/media_graphics_packages.md):
+[`docs/installation/optional/media_graphics_packages.md`](../installation/optional/media_graphics_packages.md):
   * ImageMagick
   * ffmpeg
   * exiftool
index 757afa129fb3ec7e5a83bd4fbc28cb786183abd5..82e02281dcbb8e80e5040dc8ba53b7b31244bd03 100644 (file)
@@ -3,7 +3,14 @@ defmodule Pleroma.Repo.Migrations.AddFtsIndexToObjectsTwo do
 
   def up do
     execute("create extension if not exists rum")
-    drop_if_exists index(:objects, ["(to_tsvector('english', data->>'content'))"], using: :gin, name: :objects_fts)
+
+    drop_if_exists(
+      index(:objects, ["(to_tsvector('english', data->>'content'))"],
+        using: :gin,
+        name: :objects_fts
+      )
+    )
+
     alter table(:objects) do
       add(:fts_content, :tsvector)
     end
@@ -14,7 +21,10 @@ defmodule Pleroma.Repo.Migrations.AddFtsIndexToObjectsTwo do
     return new;
     end
     $$ LANGUAGE plpgsql")
-    execute("create index if not exists objects_fts on objects using RUM (fts_content rum_tsvector_addon_ops, inserted_at) with (attach = 'inserted_at', to = 'fts_content');")
+
+    execute(
+      "create index if not exists objects_fts on objects using RUM (fts_content rum_tsvector_addon_ops, inserted_at) with (attach = 'inserted_at', to = 'fts_content');"
+    )
 
     execute("CREATE TRIGGER tsvectorupdate BEFORE INSERT OR UPDATE ON objects
     FOR EACH ROW EXECUTE PROCEDURE objects_fts_update()")
@@ -23,12 +33,19 @@ defmodule Pleroma.Repo.Migrations.AddFtsIndexToObjectsTwo do
   end
 
   def down do
-    execute "drop index if exists objects_fts"
-    execute "drop trigger if exists tsvectorupdate on objects"
-    execute "drop function if exists objects_fts_update()"
+    execute("drop index if exists objects_fts")
+    execute("drop trigger if exists tsvectorupdate on objects")
+    execute("drop function if exists objects_fts_update()")
+
     alter table(:objects) do
       remove(:fts_content, :tsvector)
     end
-    create_if_not_exists index(:objects, ["(to_tsvector('english', data->>'content'))"], using: :gin, name: :objects_fts)
+
+    create_if_not_exists(
+      index(:objects, ["(to_tsvector('english', data->>'content'))"],
+        using: :gin,
+        name: :objects_fts
+      )
+    )
   end
 end