Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
102 commits
Select commit Hold shift + click to select a range
9fde468
a4-modals: adapt styles to changes in a4
hom3mad3 Jan 27, 2025
6f4ee52
project: add django geo gis
m4ra May 6, 2025
ec37082
docs: add steps for old point to new django GIS point
m4ra May 12, 2025
87c2e47
translations: remove languages other than german and english
shn-liqd May 26, 2025
5565ba5
templates/a4_candy_contrib: Change Map/List view buttons to toggler
shn-liqd May 27, 2025
740b63a
docs: update changelog
shn-liqd May 27, 2025
a3119d3
users: add captcha for SSO registration
partizipation Jun 3, 2025
7c4f893
templates: add captcha to socialaccount
partizipation Jun 5, 2025
765124f
templates: add form.media for captcha js
partizipation Jun 10, 2025
85966c1
templates: fix social captcha rendered twice
partizipation Jun 10, 2025
19877ea
templates: Update manual link text to 'Help Center', make links consi…
shn-liqd May 27, 2025
6e564f0
templates: Update manual link for unregistered users in poll module
shn-liqd Jun 3, 2025
48e7a38
docs: update changelog
shn-liqd Jun 3, 2025
7652e76
templates: remove MANUAL_URL env var
shn-liqd Jun 11, 2025
12fd746
docs: Include old env variable with comments
shn-liqd Jun 11, 2025
ab589bb
config: remove deprecated api/login
m4ra Jun 10, 2025
1c04426
docs: software upgrades
m4ra Jun 3, 2025
ea10461
docs: Update README.md, include libmagic install step
shn-liqd May 20, 2025
3bec861
docs: update readme with homebrew spatialite path
partizipation Jun 3, 2025
5503fc0
docs: add more specific local.py location
partizipation Jun 3, 2025
e2af13d
docs: update readme to include library paths for spatialite/sqlite3 r…
shn-liqd Jun 11, 2025
17f0278
chore(deps): update dependency urllib3 to v2.5.0 [security]
renovate[bot] Jun 19, 2025
cc04f4e
changelog: remove deprecated api login
m4ra Jun 19, 2025
32e440f
makefile, README: postgresql setup
m4ra Jun 19, 2025
e074e49
docs: update poll and postgresql
m4ra Jun 24, 2025
ce868f9
docs: add wiki links for participation modules
m4ra Jun 26, 2025
e47947e
deps: django upgrade to 5.0
glanzel Jul 9, 2025
ebb508e
deps: upgraded django to version 5.1
Jun 5, 2025
3eb70b9
dashboard: fixes for datepicker, location module, also moderator feed…
partizipation Jul 29, 2025
591edc1
assets/js: use flatpickr non-native ui on mobile
partizipation Jul 30, 2025
2339700
dependencies: update a4 tag
shn-liqd Aug 4, 2025
0f28b42
fix tag
shn-liqd Aug 4, 2025
b384c56
fix tag
shn-liqd Aug 4, 2025
9d81ef9
fix: remove leftover debug identifier
shn-liqd Aug 5, 2025
dcabfef
dependencies: update a4 tag
shn-liqd Aug 5, 2025
fe34561
assets/js: use flatpickr non-native ui on mobile
shn-liqd Aug 5, 2025
3d78099
fix manual link
shn-liqd Aug 5, 2025
728bccb
dependencies: update a4 tag
shn-liqd Aug 5, 2025
0abef35
dependencies: update a4 tag
shn-liqd Aug 6, 2025
0065ccb
dependencies: update a4 tag
shn-liqd Aug 8, 2025
ffecee6
ST828 Fix styling of alert
shn-liqd Aug 11, 2025
76689cd
add old geolocation format in the docs (#2980)
m4ra Sep 24, 2025
b60c6bf
Settings: Fixes Deprection Alert (#2982)
glanzel Sep 24, 2025
f41bf78
deps: update a4 follow notifications
partizipation Sep 24, 2025
c509850
[ST-887] app/captcha: change to prosopo captcha (#2977)
glanzel Sep 29, 2025
f22d8b0
apps/projects: Fixes Insight Recreation (#2985)
glanzel Oct 1, 2025
9ef26d2
docs: Change Postgres related Docs (#2983)
glanzel Oct 2, 2025
7ae10aa
apps/map ideas: add split map view
glanzel Oct 3, 2025
79f403c
ST1088 create inactive account page
shn-liqd Oct 20, 2025
5a4133e
changelog
shn-liqd Oct 20, 2025
e12f1e7
include description text
shn-liqd Oct 20, 2025
217e6d7
fix inactive text for logged in and profile view
shn-liqd Oct 20, 2025
4c4adb1
[1139] New Map Split Mode: Remove Bugs (#2989)
glanzel Oct 23, 2025
445e1d4
apps/users apps/account add visibility toggle to password field [ST1153]
shn-liqd Oct 20, 2025
86154c4
deps/a4: add ref a4 main and migrate polymorphic for follow alerts (#…
partizipation Oct 30, 2025
7387784
assets/js: Map Split Mode for Budgeting (#1139)
glanzel Oct 30, 2025
1532136
Speed up Github Ci Tests (#2986)
glanzel Nov 12, 2025
4c3030c
chore(deps): update eslint packages
renovate[bot] Nov 12, 2025
d52c7b8
chore(deps): update dependency @prosopo/procaptcha-wrapper to v2.6.41…
renovate[bot] Nov 12, 2025
93153ca
deps/adhocracy4: Update Items to DjangoPoymorphic compatibility (#2992)
glanzel Nov 13, 2025
a4dad8f
Speed Up CI Bug
glanzel Nov 12, 2025
caa60cb
deps/python: Update Django to 5.2 (#2996)
glanzel Nov 27, 2025
32a6217
apps/notifications - create notification system (#2979)
shn-liqd Dec 4, 2025
2f36a9b
assets/scss: fix logo blocking follow small screens (#2998)
partizipation Dec 10, 2025
98b5138
templates/notifications: fix broken nav with htmx get only if auth
partizipation Jan 6, 2026
426ffd6
[ST-1236] Release Story improvments Part 2 (#2997)
glanzel Jan 8, 2026
08523a5
assets/scss: Accessibility adjustments (#3001)
glanzel Jan 12, 2026
3e040ee
[St-1241] translations: Updated Translations pulled
glanzel Jan 19, 2026
aea49ef
templates/header_notification_button: fix hanging bracket typo (#3002)
partizipation Jan 19, 2026
342e753
Add working pagination
partizipation Jan 21, 2026
ec1240a
Add remove pagination query param and 10 second polling
partizipation Jan 21, 2026
5f24977
Clean up code
partizipation Jan 21, 2026
5d9b911
Remove hx-history
partizipation Jan 21, 2026
01919da
[ST-1548] apps/notifications: Patch for Special Signs in Email (#3005)
shn-liqd Jan 21, 2026
e6cb4bb
deps: update a4
partizipation Jan 22, 2026
1bdaca1
deps: update node modules for security
partizipation Jan 22, 2026
05cacde
apps/accounts: change notification settings route
partizipation Jan 22, 2026
d22dff3
translations: update strings
partizipation Jan 22, 2026
bc77e59
translations: pull updated from transifex
partizipation Jan 22, 2026
6ec6e69
apps/notifications: Settings css Changes (#3010)
glanzel Jan 22, 2026
e5728a0
deps/js: pin security updated packages (#3011)
partizipation Jan 22, 2026
3abe8d0
dependencies: update a4 tag
partizipation Jan 22, 2026
8abb97d
apps/notifications: fix translations and ModeratorInvitation links (#…
shn-liqd Jan 23, 2026
8bae3f9
translations
shn-liqd Jan 23, 2026
fd492fb
translations: pull updated from transifex (#3015)
shn-liqd Jan 23, 2026
5ca3456
apps/notifications: update feedback text (#3016)
shn-liqd Jan 26, 2026
bf63476
apps/notifications: fix moderator feedback text (#3017)
shn-liqd Jan 26, 2026
61153ff
translations: updated notifications (#3018)
shn-liqd Jan 26, 2026
6224797
translations: pull transifex strings (#3019)
shn-liqd Jan 26, 2026
f38acbe
dependencies: update a4 tag
glanzel Jan 26, 2026
4239a4f
apps/notifications: Save notifications in english and translate to us…
shn-liqd Jan 27, 2026
fc4eb8d
[ST-1556] apps/notifications: Fix ModeratorInvite notification string…
shn-liqd Jan 27, 2026
c18b2df
translations (#3026)
shn-liqd Jan 27, 2026
4303a16
translations: pull transifex (#3027)
shn-liqd Jan 27, 2026
375c342
[ST-1554] apps/notifications: Fix bug which created duplicate notific…
shn-liqd Jan 27, 2026
cc8d754
apps/notifications: Move message_templates to constants, fix translat…
shn-liqd Jan 28, 2026
96fe4fe
Revert "apps/notifications: Move message_templates to constants, fix …
shn-liqd Jan 28, 2026
73a98cc
apps/notifications: add dummy key so translation strings are detected
shn-liqd Jan 28, 2026
797a3e9
translations: pull transifex (#3031)
shn-liqd Jan 28, 2026
4e03641
[ST-1554] apps/notifications: Fix duplicated notification issue, add …
shn-liqd Jan 28, 2026
95f75bc
[ST-1553] apps/notifications: Fix email template rendering (#3033)
shn-liqd Jan 28, 2026
2d726dc
merge a+ v2601.2 and unreleased
glanzel Jan 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions .github/ci_base/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# ci-base/Dockerfile
FROM ubuntu:24.04

# Install the OS dependencies
RUN apt update && \
apt install -y \
gdal-bin \
libsqlite3-mod-spatialite \
postgresql-client \
postgresql \
postgresql-contrib \
postgresql-16-postgis-3 \
curl \
unzip \
sudo \
jq \
nodejs \
npm \
git \
python3 \
python3-venv \
libmagic1 \
libmagic-dev && \
rm -rf /var/lib/apt/lists/*

# Install uv system-wide
RUN curl -LsSf https://astral.sh/uv/install.sh | sh && \
cp /root/.local/bin/uv /usr/local/bin/uv

# Configure PostgreSQL
RUN service postgresql start && \
sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'postgres';" && \
sudo -u postgres createdb django && \
sudo -u postgres createdb django_test && \
sudo -u postgres psql -d django -c "CREATE EXTENSION IF NOT EXISTS postgis;" && \
sudo -u postgres psql -d django_test -c "CREATE EXTENSION IF NOT EXISTS postgis;"

# Additional tools that are always needed
# RUN npm install -g some-global-node-tool # Example for Node-Tools
# RUN pip install poetry # Example for Python-Tools

# Set the working directory
WORKDIR /app
43 changes: 43 additions & 0 deletions .github/workflows/build_ci_base.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: Build and Push CI Base Image

on:
push:
paths:
- '.github/ci_base/**'

jobs:
build-and-push:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Log in to the GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: ghcr.io/${{ github.repository }}/ci-base # Our Image-Name
tags: |
type=raw,value=latest
type=sha,format=short,prefix=
# Optional: type=ref,event=branch # Für Branch-Namen als Tags

- name: Build and Push Docker image
uses: docker/build-push-action@v5
with:
# The overall context. If you nedd to do more then just build the Dockerfile use another context and use file: pathToDockerfile for the Dockerfile.
context: .github/ci_base/
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
103 changes: 68 additions & 35 deletions .github/workflows/django.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,85 +9,118 @@ on:
jobs:
build:
runs-on: ubuntu-24.04
services:
postgres:
image: postgres:16
env:
POSTGRES_PASSWORD: postgres
ports:
- 5432:5432
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
# Use your self-built image as container for the entire job
container: ghcr.io/${{ github.repository }}/ci-base:latest
steps:
- uses: actions/checkout@v4
- name: Start PostgreSQL
run: |
sudo service postgresql start

- name: Set up Python ${{ matrix.python-version }}
id: setup-python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20.x'
- name: Setup Postgres
env:
PGPASSWORD: postgres
PGHOSTADDR: 127.0.0.1
run: |
psql -c 'create database django;' -U postgres
psql -c 'create database django_test;' -U postgres
- name: Cache node modules

- name: Cache node packages
uses: actions/cache@v4
env:
cache-name: cache-node-modules
cache-name: cache-node-packages
with:
path: ~/.npm
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-
- name: Cache pip packages
- name: Cache node Modules
id: cache-node-modules
uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.os }}-node_modules-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node_modules-

- name: Cache uv packages
uses: actions/cache@v4
env:
cache-name: cache-pip-packages
cache-name: cache-uv-packages
with:
path: ~/.cache/pip
path: ~/.cache/uv
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/requirements/dev.txt') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-
- name: check a4 hashes equal

- name: Cache testmon data
id: cache-testmon
uses: actions/cache@v4
with:
path: .testmondata
key: ${{ runner.os }}-testmon-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('**/requirements/dev.txt', 'adhocracy-plus/config/settings/*.py', 'pytest.ini') }}
restore-keys: |
${{ runner.os }}-testmon-${{ steps.setup-python.outputs.python-version }}-

- name: Checks
run: |
echo "node_modules cache hit: ${{ steps.cache-node-modules.outputs.cache-hit }}"
ls -la node_modules 2>/dev/null || echo "node_modules directory does not exist"
echo "testmon cache hit: ${{ steps.cache-testmon.outputs.cache-hit }}"
ls -la .testmondata || true
./scripts/a4-check.sh
- name: Install Dependencies

- name: Install Python Dependencies
run: |
npm install
npm run build
pip install -r requirements/dev.txt
pip install coveralls
uv pip install -r requirements/dev.txt --system
uv pip install coveralls --system

- name: Run Tests
env:
PGPASSWORD: postgres
PGHOSTADDR: 127.0.0.1
run: |
python manage.py collectstatic > /dev/null
DJANGO_SETTINGS_MODULE='adhocracy-plus.config.settings.travis' py.test --cov
isort --diff -c adhocracy-plus tests
python manage.py makemigrations --dry-run --check --noinput
flake8 adhocracy-plus tests --exclude migrations,settings

if [ "${{ github.ref }}" = "refs/heads/main" ] && [ "${{ github.event_name }}" = "push" ]; then
py.test --ds=adhocracy-plus.config.settings.travis --cov
elif [ "${{ github.event_name }}" = "pull_request" ]; then
py.test --ds=adhocracy-plus.config.settings.travis --testmon --cov
fi

- name: Coveralls
env:
COVERALLS_SERVICE_NAME: github-actions
GITHUB_TOKEN: ${{ secrets.COV }}
run: |
git config --global --add safe.directory /__w/adhocracy-plus/adhocracy-plus
git config --global user.name "GitHub Actions"
git config --global user.email "actions@github.com"
coveralls

- name: Install NPM Dependencies
run: |
if [ -d node_modules ] && [ -f package-lock.json ]; then
echo "node_modules cache hit - skipping npm ci"
else
echo "node_modules cache miss - running npm ci"
npm ci --prefer-offline --no-audit --no-fund
fi

- name: Build NPM
run: |
npm run build

- name: Run Frontend Tests
run: |
npm test
npm run lint

- name: Deploy
if: github.ref == 'refs/heads/main'
env:
Expand Down
97 changes: 96 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,102 @@ Since version v2306 the format is based on [Keep a Changelog](https://keepachang
This project (not yet) adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).


## v2505.1
## Unreleased A+

### Changed

- Notification message_templates stored in English, translated at runtime
- Notification date format always returns DD.MM.YYYY without time

### Fixed

- Fix duplicate notifications bug
- Fix email variable interpolation

### Fixed

- Interpolation and translation for ModeratorInvite notification

## v2601.2

### Fixed

- Moderator feedback text
- ModeratorInvitation links
- Translations

## v2601.1

### Added

- Notification System
- Use django-polymorphic via adhocracy4
- Map-based participation modules have a split mode to display ideas next to the map
- Alert when following project telling user to check email notification settings

### Changed

- Captcha using Prosopo
- Hide profile pages for inactive accounts (ST-1088)
- Add visibility toggle to password fields [ST1153]
- Updated to Django 5.2
- Improve comment icons styling in SCSS
- Update translation files for all languages
- Make title-3 class consistent with h3 browser defaults for improved accessibility

### Fixed

- Follow project button not working on small screens
- Rotated icons for reporting or sharing comments
- Pagination button styles
- Notification text for ModerationFeedback notifications

## v2508.2

### Fixed

- Fix flatpickr configuration to disable native mobile calendars
- Fix Poll bug, question deletion now works

## v2508.1

### Fixed

- Remove identifier from dashboard item labels

## v2507.1

### Changed

- Change labels of links to manual, 'Help Center', and direct to new a+ manual
- phase date selection: use flatpickr's ui on mobile instead of native- Disabled languages other than English and German
- Update make postgresql-create|start|stop for linux OS
- Update README with manual setup of postgreSQL
- Deps: Upgraded Django to Version 5.1- **BREAKING CHANGE** A database with geospatial support is now required (e.g spatialite, postgresql with postgis)
- Use the new `PointSerializerMixin` Project Serializer
- project admin model to GIS admin model to render the map in the django-admin dashboard
- Updated dependencies to Django 5.0- MapFilterAndSort: Change Map / List buttons to toggler- poll module diagrams
- poll documentation
- Update README.md to include libmagic installation step for MacOS

### Removed

- Removed env variable MANUAL_URL - no longer used- API url `api/login` as it is not in used anymore, we use `api/token` instead. See [docs](https://github.com/liqd/adhocracy-plus/blob/main/docs/authentication.md)

### Added

- captcha required for all SSO social signups- docs for upgrades
- wiki diagrams links for the modules technical diagrams
- Added moderator feedback form textarea character limit of 500- postgresql documentation
- poll, question, answer, vote relation diagram

### Fixed

- Conditional display of dashboard project module menu's "Location" uses identifier instead of label, so translation doesn't break it
- dashboard/phases: Prevent accidental selection of entire page when using date picker


## Roots v2505.1

### Added

Expand Down
23 changes: 13 additions & 10 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -196,23 +196,26 @@ release:

.PHONY: postgres-start
postgres-start:
sudo -u postgres PGDATA=pgsql PGPORT=5556 /usr/lib/postgresql/12/bin/pg_ctl start
sudo systemctl start postgresql

.PHONY: postgres-stop
postgres-stop:
sudo -u postgres PGDATA=pgsql PGPORT=5556 /usr/lib/postgresql/12/bin/pg_ctl stop
sudo systemctl stop postgresql

.PHONY: postgres-create
postgres-create:
if [ -d "pgsql" ]; then \
echo "postgresql has already been initialized"; \
else \
sudo install -d -m 774 -o postgres -g $(USER) pgsql; \
sudo -u postgres /usr/lib/postgresql/12/bin/initdb pgsql; \
sudo -u postgres PGDATA=pgsql PGPORT=5556 /usr/lib/postgresql/12/bin/pg_ctl start; \
sudo -u postgres PGDATA=pgsql PGPORT=5556 /usr/lib/postgresql/12/bin/createuser -s django; \
sudo -u postgres PGDATA=pgsql PGPORT=5556 /usr/lib/postgresql/12/bin/createdb -O django django; \
@if ! command -v psql > /dev/null 2>&1; then \
echo "PostgreSQL is not installed. Please install it with 'sudo apt install postgresql'"; \
exit 1; \
fi
@if ! sudo systemctl is-active --quiet postgresql; then \
echo "PostgreSQL service is not running. Starting it..."; \
sudo systemctl start postgresql; \
sleep 2; \
fi
sudo -u postgres createuser --createdb --no-createrole --no-superuser django || true
sudo -u postgres createdb --owner=django --encoding=UTF8 django || true
sudo -u postgres psql -U postgres -d django -c "CREATE EXTENSION postgis;" || true

.PHONY: local-a4
local-a4:
Expand Down
Loading