diff --git a/.woodpecker.yml b/.woodpecker/build-amd64.yml similarity index 77% rename from .woodpecker.yml rename to .woodpecker/build-amd64.yml index 49718d630..3c445988b 100644 --- a/.woodpecker.yml +++ b/.woodpecker/build-amd64.yml @@ -1,3 +1,8 @@ +platform: linux/amd64 + +depends_on: + - test + variables: - &scw-secrets - SCW_ACCESS_KEY @@ -39,60 +44,7 @@ variables: - &clean "(rm -rf release || true) && (rm -rf _build || true) && (rm -rf /root/.mix)" - &mix-clean "mix deps.clean --all && mix clean" -services: - postgres: - image: postgres:15 - when: - event: - - pull_request - environment: - POSTGRES_DB: pleroma_test - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - pipeline: - lint: - <<: *on-pr-open - image: akkoma/ci-base:1.14 - commands: - - mix local.hex --force - - mix local.rebar --force - - mix format --check-formatted - - build: - image: akkoma/ci-base:1.14 - <<: *on-pr-open - environment: - MIX_ENV: test - POSTGRES_DB: pleroma_test - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - DB_HOST: postgres - commands: - - mix local.hex --force - - mix local.rebar --force - - mix deps.get - - mix compile - - test: - image: akkoma/ci-base:1.14 - <<: *on-pr-open - environment: - MIX_ENV: test - POSTGRES_DB: pleroma_test - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - DB_HOST: postgres - commands: - - mix local.hex --force - - mix local.rebar --force - - mix deps.get - - mix compile - - mix ecto.drop -f -q - - mix ecto.create - - mix ecto.migrate - - mix test --preload-modules --exclude erratic --exclude federated --max-cases 4 - # Canonical amd64 ubuntu22: image: hexpm/elixir:1.14.3-erlang-25.2.2-ubuntu-jammy-20221130 @@ -151,7 +103,7 @@ pipeline: # Canonical amd64-musl musl: - image: hexpm/elixir:1.14.3-erlang-25.2.2-alpine-3.15.6 + image: hexpm/elixir:1.14.3-erlang-25.2.2-alpine-3.18.0 <<: *on-release environment: MIX_ENV: prod diff --git a/.woodpecker/build-arm64.yml b/.woodpecker/build-arm64.yml new file mode 100644 index 000000000..f45a91db0 --- /dev/null +++ b/.woodpecker/build-arm64.yml @@ -0,0 +1,149 @@ +platform: linux/arm64 + +depends_on: + - test + +variables: + - &scw-secrets + - SCW_ACCESS_KEY + - SCW_SECRET_KEY + - SCW_DEFAULT_ORGANIZATION_ID + - &setup-hex "mix local.hex --force && mix local.rebar --force" + - &on-release + when: + event: + - push + - tag + branch: + - develop + - stable + - refs/tags/v* + - refs/tags/stable-* + - &on-stable + when: + event: + - push + - tag + branch: + - stable + - refs/tags/stable-* + - &on-point-release + when: + event: + - push + branch: + - develop + - stable + - &on-pr-open + when: + event: + - pull_request + + - &tag-build "export BUILD_TAG=$${CI_COMMIT_TAG:-\"$CI_COMMIT_BRANCH\"} && export PLEROMA_BUILD_BRANCH=$BUILD_TAG" + + - &clean "(rm -rf release || true) && (rm -rf _build || true) && (rm -rf /root/.mix)" + - &mix-clean "mix deps.clean --all && mix clean" + +pipeline: + # Canonical arm64 + ubuntu22: + image: hexpm/elixir:1.14.3-erlang-25.2.2-ubuntu-jammy-20221130 + <<: *on-release + environment: + MIX_ENV: prod + DEBIAN_FRONTEND: noninteractive + commands: + - apt-get update && apt-get install -y cmake libmagic-dev rclone zip imagemagick libmagic-dev git build-essential g++ wget + - *clean + - echo "import Config" > config/prod.secret.exs + - *setup-hex + - *tag-build + - mix deps.get --only prod + - mix release --path release + - zip akkoma-ubuntu-jammy.zip -r release + + release-ubuntu22: + image: akkoma/releaser:arm64 + <<: *on-release + secrets: *scw-secrets + commands: + - export SOURCE=akkoma-ubuntu-jammy.zip + - export DEST=scaleway:akkoma-updates/$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"}/akkoma-ubuntu-jammy.zip + - /bin/sh /entrypoint.sh + - export DEST=scaleway:akkoma-updates/$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"}/akkoma-arm64-ubuntu-jammy.zip + - /bin/sh /entrypoint.sh + + debian-bullseye: + image: hexpm/elixir:1.14.3-erlang-25.2.2-debian-bullseye-20230109 + <<: *on-release + environment: + MIX_ENV: prod + DEBIAN_FRONTEND: noninteractive + commands: + - apt-get update && apt-get install -y cmake libmagic-dev rclone zip imagemagick libmagic-dev git build-essential gcc make g++ wget + - *clean + - echo "import Config" > config/prod.secret.exs + - *setup-hex + - *tag-build + - *mix-clean + - mix deps.get --only prod + - mix release --path release + - zip akkoma-arm64.zip -r release + + release-debian: + image: akkoma/releaser:arm64 + <<: *on-release + secrets: *scw-secrets + commands: + - export SOURCE=akkoma-arm64.zip + - export DEST=scaleway:akkoma-updates/$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"}/akkoma-arm64.zip + - /bin/sh /entrypoint.sh + - export DEST=scaleway:akkoma-updates/$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"}/akkoma-debian-stable.zip + - /bin/sh /entrypoint.sh + + # Canonical arm64-musl + musl: + image: hexpm/elixir:1.14.3-erlang-25.2.2-alpine-3.18.0 + <<: *on-release + environment: + MIX_ENV: prod + commands: + - apk add git gcc g++ musl-dev make cmake file-dev rclone wget zip imagemagick + - *clean + - *setup-hex + - *mix-clean + - *tag-build + - mix deps.get --only prod + - mix release --path release + - zip akkoma-arm64-musl.zip -r release + + release-musl: + image: akkoma/releaser:arm64 + <<: *on-release + secrets: *scw-secrets + commands: + - export SOURCE=akkoma-arm64-musl.zip + - export DEST=scaleway:akkoma-updates/$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"}/akkoma-arm64-musl.zip + - /bin/sh /entrypoint.sh + + docs: + <<: *on-point-release + secrets: + - SCW_ACCESS_KEY + - SCW_SECRET_KEY + - SCW_DEFAULT_ORGANIZATION_ID + environment: + CI: "true" + image: python:3.10-slim + commands: + - apt-get update && apt-get install -y rclone wget git zip + - wget https://github.com/scaleway/scaleway-cli/releases/download/v2.5.1/scaleway-cli_2.5.1_linux_arm64 + - mv scaleway-cli_2.5.1_linux_arm64 scaleway-cli + - chmod +x scaleway-cli + - ./scaleway-cli object config install type=rclone + - cd docs + - pip install -r requirements.txt + - mkdocs build + - zip -r docs.zip site/* + - cd site + - rclone copy . scaleway:akkoma-docs/$CI_COMMIT_BRANCH/ diff --git a/.woodpecker/docs.yml b/.woodpecker/docs.yml new file mode 100644 index 000000000..cc4017659 --- /dev/null +++ b/.woodpecker/docs.yml @@ -0,0 +1,69 @@ +platform: linux/amd64 + +depends_on: + - test + - build-amd64 + +variables: + - &scw-secrets + - SCW_ACCESS_KEY + - SCW_SECRET_KEY + - SCW_DEFAULT_ORGANIZATION_ID + - &setup-hex "mix local.hex --force && mix local.rebar --force" + - &on-release + when: + event: + - push + - tag + branch: + - develop + - stable + - refs/tags/v* + - refs/tags/stable-* + - &on-stable + when: + event: + - push + - tag + branch: + - stable + - refs/tags/stable-* + - &on-point-release + when: + event: + - push + branch: + - develop + - stable + - &on-pr-open + when: + event: + - pull_request + + - &tag-build "export BUILD_TAG=$${CI_COMMIT_TAG:-\"$CI_COMMIT_BRANCH\"} && export PLEROMA_BUILD_BRANCH=$BUILD_TAG" + + - &clean "(rm -rf release || true) && (rm -rf _build || true) && (rm -rf /root/.mix)" + - &mix-clean "mix deps.clean --all && mix clean" + +pipeline: + docs: + <<: *on-point-release + secrets: + - SCW_ACCESS_KEY + - SCW_SECRET_KEY + - SCW_DEFAULT_ORGANIZATION_ID + environment: + CI: "true" + image: python:3.10-slim + commands: + - apt-get update && apt-get install -y rclone wget git zip + - wget https://github.com/scaleway/scaleway-cli/releases/download/v2.5.1/scaleway-cli_2.5.1_linux_amd64 + - mv scaleway-cli_2.5.1_linux_amd64 scaleway-cli + - chmod +x scaleway-cli + - ./scaleway-cli object config install type=rclone + - cd docs + - pip install -r requirements.txt + - mkdocs build + - zip -r docs.zip site/* + - cd site + - rclone copy . scaleway:akkoma-docs/$CI_COMMIT_BRANCH/ diff --git a/.woodpecker/test.yml b/.woodpecker/test.yml new file mode 100644 index 000000000..958c642d5 --- /dev/null +++ b/.woodpecker/test.yml @@ -0,0 +1,96 @@ +platform: linux/amd64 + +variables: + - &scw-secrets + - SCW_ACCESS_KEY + - SCW_SECRET_KEY + - SCW_DEFAULT_ORGANIZATION_ID + - &setup-hex "mix local.hex --force && mix local.rebar --force" + - &on-release + when: + event: + - push + - tag + branch: + - develop + - stable + - refs/tags/v* + - refs/tags/stable-* + - &on-stable + when: + event: + - push + - tag + branch: + - stable + - refs/tags/stable-* + - &on-point-release + when: + event: + - push + branch: + - develop + - stable + - &on-pr-open + when: + event: + - pull_request + + - &tag-build "export BUILD_TAG=$${CI_COMMIT_TAG:-\"$CI_COMMIT_BRANCH\"} && export PLEROMA_BUILD_BRANCH=$BUILD_TAG" + + - &clean "(rm -rf release || true) && (rm -rf _build || true) && (rm -rf /root/.mix)" + - &mix-clean "mix deps.clean --all && mix clean" + +services: + postgres: + image: postgres:15 + when: + event: + - pull_request + environment: + POSTGRES_DB: pleroma_test + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + +pipeline: + lint: + <<: *on-pr-open + image: akkoma/ci-base:1.14 + commands: + - mix local.hex --force + - mix local.rebar --force + - mix format --check-formatted + + build: + image: akkoma/ci-base:1.14 + <<: *on-pr-open + environment: + MIX_ENV: test + POSTGRES_DB: pleroma_test + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + DB_HOST: postgres + commands: + - mix local.hex --force + - mix local.rebar --force + - mix deps.get + - mix compile + + test: + image: akkoma/ci-base:1.14 + <<: *on-pr-open + environment: + MIX_ENV: test + POSTGRES_DB: pleroma_test + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + DB_HOST: postgres + commands: + - mix local.hex --force + - mix local.rebar --force + - mix deps.get + - mix compile + - mix ecto.drop -f -q + - mix ecto.create + - mix ecto.migrate + - mix test --preload-modules --exclude erratic --exclude federated --max-cases 4 diff --git a/Dockerfile b/Dockerfile index c6506c48c..b175d7835 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM hexpm/elixir:1.14.3-erlang-25.3-alpine-3.17.2 +FROM hexpm/elixir:1.14.3-erlang-25.2.2-alpine-3.18.0 ENV MIX_ENV=prod ENV ERL_EPMD_ADDRESS=127.0.0.1 diff --git a/docs/docs/installation/otp_en.md b/docs/docs/installation/otp_en.md index 058040e19..2a9735f3c 100644 --- a/docs/docs/installation/otp_en.md +++ b/docs/docs/installation/otp_en.md @@ -19,12 +19,16 @@ This is a little more complex than it used to be (thanks ubuntu) Use the following mapping to figure out your flavour: -| distribution | flavour | available branches | -| ------------- | ------------------ | ------------------- | -| debian stable | amd64 | develop, stable | -| ubuntu focal | amd64 | develop, stable | -| ubuntu jammy | amd64-ubuntu-jammy | develop, stable | -| alpine | amd64-musl | stable | +| distribution | architecture | flavour | available branches | +| --------------- | ------------------ | ------------------- | ------------------- | +| debian bullseye | amd64 | amd64 | develop, stable | +| debian bullseye | arm64 | arm64 | develop, stable | +| ubuntu focal | amd64 | amd64 | develop, stable | +| ubuntu focal | arm64 | arm64 | develop, stable | +| ubuntu jammy | amd64 | amd64-ubuntu-jammy | develop, stable | +| ubuntu jammy | arm64 | arm64-ubuntu-jammy | develop, stable | +| alpine | amd64 | amd64-musl | stable | +| alpine | arm64 | arm64-musl | stable | Other similar distributions will _probably_ work, but if it is not listed above, there is no official support. diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 742dcb385..5fb9b5d8d 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -919,11 +919,12 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do end def prepare_attachments(object) do - attachments = case Map.get(object, "attachment", []) do - [_ | _] = list -> list - _ -> [] - end - + attachments = + case Map.get(object, "attachment", []) do + [_ | _] = list -> list + _ -> [] + end + attachments = attachments |> Enum.map(fn data ->