From 1bbe7aed9510049e17d63710d722f871a6e0bf1f Mon Sep 17 00:00:00 2001 From: Phantasm Date: Sun, 15 Feb 2026 13:37:29 +0100 Subject: [PATCH 01/10] CI: Sync check-changelog script with BE --- tools/check-changelog | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tools/check-changelog b/tools/check-changelog index 9b3ff37f2..69e8b71cb 100644 --- a/tools/check-changelog +++ b/tools/check-changelog @@ -1,12 +1,15 @@ #!/bin/sh +echo "adding ownership exception" +git config --global --add safe.directory "$(pwd)" + echo "looking for change log" git remote add upstream https://git.pleroma.social/pleroma/pleroma-fe.git -git fetch upstream ${CI_MERGE_REQUEST_TARGET_BRANCH_NAME}:refs/remotes/upstream/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME +git fetch upstream ${CI_COMMIT_TARGET_BRANCH}:refs/remotes/upstream/${CI_COMMIT_TARGET_BRANCH} -git diff --raw --no-renames upstream/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME HEAD -- changelog.d | \ - grep ' A\t' | grep '\.\(skip\|add\|remove\|change\|fix\|security\)$' +git diff --raw --no-renames upstream/${CI_COMMIT_TARGET_BRANCH} HEAD -- changelog.d | \ + grep ' A\t' | grep '\.\(skip\|add\|remove\|fix\|security\|change\)$' ret=$? if [ $ret -eq 0 ]; then From 6bd929be9c96ab6acda1c54211cdebfb44f453f3 Mon Sep 17 00:00:00 2001 From: Phantasm Date: Sun, 15 Feb 2026 13:37:50 +0100 Subject: [PATCH 02/10] Woodpecker CI: Copy changelog workflow from BE --- .woodpecker/changelog.yaml | 9 +++++++++ changelog.d/woodpecker-pr-pipeline.skip | 0 2 files changed, 9 insertions(+) create mode 100644 .woodpecker/changelog.yaml create mode 100644 changelog.d/woodpecker-pr-pipeline.skip diff --git a/.woodpecker/changelog.yaml b/.woodpecker/changelog.yaml new file mode 100644 index 000000000..4f38ce618 --- /dev/null +++ b/.woodpecker/changelog.yaml @@ -0,0 +1,9 @@ +when: + - event: pull_request + +steps: + check-changelog: + image: docker.io/alpine:3.23 + commands: + - apk add --no-cache git + - sh ./tools/check-changelog diff --git a/changelog.d/woodpecker-pr-pipeline.skip b/changelog.d/woodpecker-pr-pipeline.skip new file mode 100644 index 000000000..e69de29bb From 5213a827b6d3902e64132b23854542ee47b3e768 Mon Sep 17 00:00:00 2001 From: Phantasm Date: Sun, 15 Feb 2026 13:48:48 +0100 Subject: [PATCH 03/10] Woodpecker CI: Add lint workflow --- .woodpecker/lint.yaml | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 .woodpecker/lint.yaml diff --git a/.woodpecker/lint.yaml b/.woodpecker/lint.yaml new file mode 100644 index 000000000..239150183 --- /dev/null +++ b/.woodpecker/lint.yaml @@ -0,0 +1,31 @@ +when: + - event: pull_request + - event: push + branch: ${CI_REPO_DEFAULT_BRANCH} + - event: manual + branch: ${CI_REPO_DEFAULT_BRANCH} + +steps: + install-depends: + image: &node-image + docker.io/node:18-alpine + commands: + - yarn + + eslint: + image: *node-image + depends_on: install-depends + commands: + - yarn ci-eslint + + biome: + image: *node-image + depends_on: install-depends + commands: + - yarn ci-biome + + stylelint: + image: *node-image + depends_on: install-depends + commands: + - yarn ci-stylelint From 60b53a796c759c5115f90c2d0e0d8d59befbe46e Mon Sep 17 00:00:00 2001 From: Phantasm Date: Mon, 16 Feb 2026 11:17:24 +0100 Subject: [PATCH 04/10] Woodpecker CI: Add test workflow --- .woodpecker/test.yaml | 70 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 .woodpecker/test.yaml diff --git a/.woodpecker/test.yaml b/.woodpecker/test.yaml new file mode 100644 index 000000000..84d46f869 --- /dev/null +++ b/.woodpecker/test.yaml @@ -0,0 +1,70 @@ +when: + - event: pull_request + - event: push + branch: ${CI_REPO_DEFAULT_BRANCH} + - event: manual + branch: ${CI_REPO_DEFAULT_BRANCH} + +labels: + platform: linux/amd64 + memory: 'high' + +variables: + artifacts_uploader_settings: &artifacts_uploader_settings + user: + from_secret: pleroma-ci-user + password: + from_secret: pleroma-ci-password + owner: 'pleroma' + package_name: 'pleroma-fe-test-artifacts' + script_file_entrypoint: &script_file_entrypoint + - /bin/sh + - -c + - 'printf "%s" "$CI_SCRIPT" | base64 -d > /tmp/ci-script.sh && /bin/sh -xe /tmp/ci-script.sh' + +steps: + test: + image: mcr.microsoft.com/playwright:v1.57.0-jammy + environment: + APT_CACHE_DIR: apt-cache + DEBIAN_FRONTEND: noninteractive + FF_NETWORK_PER_BUILD: "true" + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: "1" + entrypoint: *script_file_entrypoint + commands: + - mkdir -pv $APT_CACHE_DIR && apt-get -qq update + - apt-get -y install zip + - yarn --frozen-lockfile + - | + if ! yarn unit-ci; then + zip -r ${CI_COMMIT_SHA:0:8}-screenshots.zip $(find . -type d -name __screenshots__) + exit 1 + fi + + upload-artifacts-pr: + image: &artifacts_uploader_image + docker.io/woodpeckercommunity/plugin-gitea-package:0.5.0 + when: + - event: pull_request + status: [failure] + settings: + <<: *artifacts_uploader_settings + package_version: pr-${CI_COMMIT_PULL_REQUEST} + file_source: ./${CI_COMMIT_SHA:0:8}-screenshots.zip + file_name: pr-${CI_COMMIT_PULL_REQUEST}-screenshots.zip + update: true + + upload-artifacts: + image: *artifacts_uploader_image + when: + - event: push + branch: ${CI_REPO_DEFAULT_BRANCH} + status: [failure] + - event: manual + branch: ${CI_REPO_DEFAULT_BRANCH} + status: [failure] + settings: + <<: *artifacts_uploader_settings + package_version: ${CI_REPO_DEFAULT_BRANCH}-${CI_COMMIT_SHA:0:8} + file_source: ./${CI_COMMIT_SHA:0:8}-screenshots.zip + file_name: ${CI_COMMIT_SHA:0:8}-screenshots.zip From 0c314a2babb35e677867d7e3ff152eb1a75aec65 Mon Sep 17 00:00:00 2001 From: Phantasm Date: Tue, 5 May 2026 09:29:11 +0200 Subject: [PATCH 05/10] Woodpecker CI: Add E2E test workflow --- .woodpecker/test-e2e.yaml | 110 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 .woodpecker/test-e2e.yaml diff --git a/.woodpecker/test-e2e.yaml b/.woodpecker/test-e2e.yaml new file mode 100644 index 000000000..644663790 --- /dev/null +++ b/.woodpecker/test-e2e.yaml @@ -0,0 +1,110 @@ +when: + - event: pull_request + - event: push + branch: ${CI_REPO_DEFAULT_BRANCH} + - event: manual + branch: ${CI_REPO_DEFAULT_BRANCH} + +labels: + platform: linux/amd64 + memory: 'high' + +variables: + artifacts_uploader_settings: &artifacts_uploader_settings + user: + from_secret: pleroma-ci-user + password: + from_secret: pleroma-ci-password + owner: 'pleroma' + package_name: 'pleroma-fe-test-artifacts' + script_file_entrypoint: &script_file_entrypoint + - /bin/sh + - -c + - 'printf "%s" "$CI_SCRIPT" | base64 -d > /tmp/ci-script.sh && /bin/sh -xe /tmp/ci-script.sh' + +steps: + test: + image: mcr.microsoft.com/playwright:v1.57.0-jammy + entrypoint: *script_file_entrypoint + environment: + APT_CACHE_DIR: apt-cache + DEBIAN_FRONTEND: noninteractive + E2E_BASE_URL: http://localhost:8080 + FF_NETWORK_PER_BUILD: "true" + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: "1" + VITE_PROXY_ORIGIN: "http://pleroma:4000" + VITE_PROXY_TARGET: "http://pleroma:4000" + commands: + - mkdir -pv $APT_CACHE_DIR && apt-get -qq update + - apt-get install -y zip + - npm install -g yarn@1.22.22 + - yarn --frozen-lockfile + - | + echo "-- Waiting for Pleroma API..." + api_ok="false" + for _i in $(seq 1 120); do + if wget -qO- http://pleroma:4000/api/v1/instance >/dev/null 2>&1; then + api_ok="true" + break + fi + sleep 1s + done + if [ "$api_ok" != "true" ]; then + echo "Timed out waiting for Pleroma API to become available" + exit 1 + fi + - | + if ! yarn e2e:pw; then + zip -r ${CI_COMMIT_SHA:0:8}-e2e.zip ./test/e2e-playwright/test-results ./test/e2e-playwright/playwright-report + exit 1 + fi + + upload-artifacts-pr: + image: &artifacts_uploader_image + docker.io/woodpeckercommunity/plugin-gitea-package:0.5.0 + when: + - event: pull_request + status: [failure] + settings: + <<: *artifacts_uploader_settings + package_version: pr-${CI_COMMIT_PULL_REQUEST} + file_source: ./${CI_COMMIT_SHA:0:8}-e2e.zip + file_name: ./pr-${CI_COMMIT_PULL_REQUEST}-e2e.zip + update: true + + upload-artifacts: + image: *artifacts_uploader_image + when: + - event: push + branch: ${CI_REPO_DEFAULT_BRANCH} + status: [failure] + - event: manual + branch: ${CI_REPO_DEFAULT_BRANCH} + status: [failure] + settings: + <<: *artifacts_uploader_settings + package_version: ${CI_REPO_DEFAULT_BRANCH}-${CI_COMMIT_SHA:0:8} + file_source: ./${CI_COMMIT_SHA:0:8}-e2e.zip + file_name: ${CI_COMMIT_SHA:0:8}-e2e.zip + +services: + postgres: + image: docker.io/postgres:13-alpine + environment: + POSTGRES_DB: pleroma_test + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + + pleroma: + image: git.pleroma.social/pleroma/pleroma:stable-e2e + environment: + ADMIN_EMAIL: "admin@example.com" + NOTIFY_EMAIL: "admin@example.com" + DB_USER: postgres + DB_PASS: postgres + DB_NAME: pleroma_test + DB_HOST: postgres + INSTANCE_NAME: Pleroma E2E + E2E_ADMIN_USERNAME: admin + E2E_ADMIN_PASSWORD: adminadmin + E2E_ADMIN_EMAIL: "admin@example.com" From ca1175ee8f52e489236f5d4c0fe85e735254a479 Mon Sep 17 00:00:00 2001 From: Phantasm Date: Sun, 15 Feb 2026 15:03:28 +0100 Subject: [PATCH 06/10] Woodpecker CI: Add build workflow --- .woodpecker/build.yaml | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 .woodpecker/build.yaml diff --git a/.woodpecker/build.yaml b/.woodpecker/build.yaml new file mode 100644 index 000000000..791110134 --- /dev/null +++ b/.woodpecker/build.yaml @@ -0,0 +1,42 @@ +when: + - event: pull_request + - event: push + branch: ${CI_REPO_DEFAULT_BRANCH} + - event: manual + branch: ${CI_REPO_DEFAULT_BRANCH} + +depends_on: + - test + - test-e2e + +labels: + platform: linux/amd64 + memory: 'high' + +steps: + build: + image: docker.io/node:18-alpine + commands: + - apk add --no-cache zip + - yarn + - yarn build + - if [ "${CI_PIPELINE_EVENT}" = "push" ] || [ "${CI_PIPELINE_EVENT}" = "manual" ]; then zip -9qr ${CI_REPO_DEFAULT_BRANCH}.zip dist/; fi + + upload-artifacts: + image: docker.io/woodpeckercommunity/plugin-gitea-package:0.5.0 + when: + - event: push + branch: ${CI_REPO_DEFAULT_BRANCH} + - event: manual + branch: ${CI_REPO_DEFAULT_BRANCH} + settings: + user: + from_secret: pleroma-ci-user + password: + from_secret: pleroma-ci-password + update: true + owner: 'pleroma' + package_name: 'pleroma-fe-builds' + package_version: ${CI_REPO_DEFAULT_BRANCH} + file_source: ./${CI_REPO_DEFAULT_BRANCH}.zip + file_name: latest.zip From d50d629e0732d289dbf4b95ba58c016f4b516ce5 Mon Sep 17 00:00:00 2001 From: Phantasm Date: Tue, 5 May 2026 22:09:52 +0200 Subject: [PATCH 07/10] Woodpecker CI: Use yarn --frozen-lockfile everywhere --- .woodpecker/build.yaml | 2 +- .woodpecker/lint.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.woodpecker/build.yaml b/.woodpecker/build.yaml index 791110134..fa61225a3 100644 --- a/.woodpecker/build.yaml +++ b/.woodpecker/build.yaml @@ -18,7 +18,7 @@ steps: image: docker.io/node:18-alpine commands: - apk add --no-cache zip - - yarn + - yarn --frozen-lockfile - yarn build - if [ "${CI_PIPELINE_EVENT}" = "push" ] || [ "${CI_PIPELINE_EVENT}" = "manual" ]; then zip -9qr ${CI_REPO_DEFAULT_BRANCH}.zip dist/; fi diff --git a/.woodpecker/lint.yaml b/.woodpecker/lint.yaml index 239150183..132a28e7f 100644 --- a/.woodpecker/lint.yaml +++ b/.woodpecker/lint.yaml @@ -10,7 +10,7 @@ steps: image: &node-image docker.io/node:18-alpine commands: - - yarn + - yarn --frozen-lockfile eslint: image: *node-image From 2326d559b0235c18c47775cb9328e0c1aacdaad8 Mon Sep 17 00:00:00 2001 From: Phantasm Date: Tue, 5 May 2026 22:38:24 +0200 Subject: [PATCH 08/10] Woodpecker CI: quiet down zip --- .woodpecker/test-e2e.yaml | 2 +- .woodpecker/test.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.woodpecker/test-e2e.yaml b/.woodpecker/test-e2e.yaml index 644663790..ae6412f59 100644 --- a/.woodpecker/test-e2e.yaml +++ b/.woodpecker/test-e2e.yaml @@ -55,7 +55,7 @@ steps: fi - | if ! yarn e2e:pw; then - zip -r ${CI_COMMIT_SHA:0:8}-e2e.zip ./test/e2e-playwright/test-results ./test/e2e-playwright/playwright-report + zip -9qr ${CI_COMMIT_SHA:0:8}-e2e.zip ./test/e2e-playwright/test-results ./test/e2e-playwright/playwright-report exit 1 fi diff --git a/.woodpecker/test.yaml b/.woodpecker/test.yaml index 84d46f869..0c6658f4b 100644 --- a/.woodpecker/test.yaml +++ b/.woodpecker/test.yaml @@ -37,7 +37,7 @@ steps: - yarn --frozen-lockfile - | if ! yarn unit-ci; then - zip -r ${CI_COMMIT_SHA:0:8}-screenshots.zip $(find . -type d -name __screenshots__) + zip -9qr ${CI_COMMIT_SHA:0:8}-screenshots.zip $(find . -type d -name __screenshots__) exit 1 fi From 68f8fbe3564374e2529a933617edebb3e5833c94 Mon Sep 17 00:00:00 2001 From: Phantasm Date: Wed, 6 May 2026 12:48:44 +0200 Subject: [PATCH 09/10] Woodpecker CI: Do not run PR pipeline on renovate/weblate PRs --- .woodpecker/build.yaml | 1 + .woodpecker/changelog.yaml | 1 + .woodpecker/lint.yaml | 1 + .woodpecker/test-e2e.yaml | 1 + .woodpecker/test.yaml | 1 + 5 files changed, 5 insertions(+) diff --git a/.woodpecker/build.yaml b/.woodpecker/build.yaml index fa61225a3..de91af5d8 100644 --- a/.woodpecker/build.yaml +++ b/.woodpecker/build.yaml @@ -1,5 +1,6 @@ when: - event: pull_request + evaluate: 'CI_COMMIT_SOURCE_BRANCH != "weblate" && not(CI_COMMIT_SOURCE_BRANCH startsWith "renovate/")' - event: push branch: ${CI_REPO_DEFAULT_BRANCH} - event: manual diff --git a/.woodpecker/changelog.yaml b/.woodpecker/changelog.yaml index 4f38ce618..b6c35afbb 100644 --- a/.woodpecker/changelog.yaml +++ b/.woodpecker/changelog.yaml @@ -1,5 +1,6 @@ when: - event: pull_request + evaluate: 'CI_COMMIT_SOURCE_BRANCH != "weblate" && not(CI_COMMIT_SOURCE_BRANCH startsWith "renovate/")' steps: check-changelog: diff --git a/.woodpecker/lint.yaml b/.woodpecker/lint.yaml index 132a28e7f..237135ee9 100644 --- a/.woodpecker/lint.yaml +++ b/.woodpecker/lint.yaml @@ -1,5 +1,6 @@ when: - event: pull_request + evaluate: 'CI_COMMIT_SOURCE_BRANCH != "weblate" && not(CI_COMMIT_SOURCE_BRANCH startsWith "renovate/")' - event: push branch: ${CI_REPO_DEFAULT_BRANCH} - event: manual diff --git a/.woodpecker/test-e2e.yaml b/.woodpecker/test-e2e.yaml index ae6412f59..f4468f8c9 100644 --- a/.woodpecker/test-e2e.yaml +++ b/.woodpecker/test-e2e.yaml @@ -1,5 +1,6 @@ when: - event: pull_request + evaluate: 'CI_COMMIT_SOURCE_BRANCH != "weblate" && not(CI_COMMIT_SOURCE_BRANCH startsWith "renovate/")' - event: push branch: ${CI_REPO_DEFAULT_BRANCH} - event: manual diff --git a/.woodpecker/test.yaml b/.woodpecker/test.yaml index 0c6658f4b..6a21f7d41 100644 --- a/.woodpecker/test.yaml +++ b/.woodpecker/test.yaml @@ -1,5 +1,6 @@ when: - event: pull_request + evaluate: 'CI_COMMIT_SOURCE_BRANCH != "weblate" && not(CI_COMMIT_SOURCE_BRANCH startsWith "renovate/")' - event: push branch: ${CI_REPO_DEFAULT_BRANCH} - event: manual From 48cf7638e13ca21656a19de2d511be1ead58ab40 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 6 May 2026 16:40:36 +0300 Subject: [PATCH 10/10] support firefox idiocy --- src/services/style_setter/style_setter.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/services/style_setter/style_setter.js b/src/services/style_setter/style_setter.js index c8e90c0a6..2a695f4db 100644 --- a/src/services/style_setter/style_setter.js +++ b/src/services/style_setter/style_setter.js @@ -34,6 +34,9 @@ export const createStyleSheet = (id, priority = 1000) => { // firefox doesn't like invalid selectors if ( !CSS.supports?.('selector(::-webkit-scrollbar)') && + !CSS.supports?.('selector(::-webkit-scrollbar-button)') && + !CSS.supports?.('selector(::-webkit-resizer)') && + !CSS.supports?.('selector(::-webkit-scrollbar-thumb)') && newRule.startsWith('::-webkit') ) { return