From 6631a0daab620eb61f0a144baeb3289ca57884c9 Mon Sep 17 00:00:00 2001 From: Disassembler Date: Sat, 10 Sep 2022 15:18:20 +0200 Subject: [PATCH] Update to Decidim 0.26.2 Use Debian 11 Ruby image as base instead of Alpine --- README.rst | 40 +- .../Source_Sans_Pro_400.eot | Bin .../Source_Sans_Pro_400.svg | 0 .../Source_Sans_Pro_400.ttf | Bin .../Source_Sans_Pro_400.woff | Bin .../Source_Sans_Pro_400.woff2 | Bin .../Source_Sans_Pro_600.eot | Bin .../Source_Sans_Pro_600.svg | 0 .../Source_Sans_Pro_600.ttf | Bin .../Source_Sans_Pro_600.woff | Bin .../Source_Sans_Pro_600.woff2 | Bin .../Source_Sans_Pro_900.eot | Bin .../Source_Sans_Pro_900.svg | 0 .../Source_Sans_Pro_900.ttf | Bin .../Source_Sans_Pro_900.woff | Bin .../Source_Sans_Pro_900.woff2 | Bin decidim/Dockerfile | 139 +-- decidim/image.d/entrypoint.sh | 34 +- decidim/image.d/etc/cron.d/decidim | 1 + decidim/image.d/etc/crontabs/decidim | 1 - decidim/image.d/etc/nginx/nginx.conf | 7 +- decidim/image.d/etc/nginx/rails_env.conf | 1 + .../image.d/etc/services.d/.s6-svscan/finish | 4 +- decidim/image.d/etc/services.d/cron/run | 6 +- decidim/image.d/etc/services.d/nginx/run | 4 +- decidim/image.d/srv/decidim-app/Gemfile | 66 -- .../config/environments/production.rb | 40 +- .../config/initializers/decidim.rb | 12 +- .../srv/decidim-app/config/locales/cs.yml | 970 +----------------- .../srv/decidim-app/config/secrets.yml | 34 +- docker-compose.yml | 4 +- 31 files changed, 217 insertions(+), 1146 deletions(-) rename {decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim => Source_Sans_Pro}/Source_Sans_Pro_400.eot (100%) rename {decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim => Source_Sans_Pro}/Source_Sans_Pro_400.svg (100%) rename {decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim => Source_Sans_Pro}/Source_Sans_Pro_400.ttf (100%) rename {decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim => Source_Sans_Pro}/Source_Sans_Pro_400.woff (100%) rename {decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim => Source_Sans_Pro}/Source_Sans_Pro_400.woff2 (100%) rename {decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim => Source_Sans_Pro}/Source_Sans_Pro_600.eot (100%) rename {decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim => Source_Sans_Pro}/Source_Sans_Pro_600.svg (100%) rename {decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim => Source_Sans_Pro}/Source_Sans_Pro_600.ttf (100%) rename {decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim => Source_Sans_Pro}/Source_Sans_Pro_600.woff (100%) rename {decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim => Source_Sans_Pro}/Source_Sans_Pro_600.woff2 (100%) rename {decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim => Source_Sans_Pro}/Source_Sans_Pro_900.eot (100%) rename {decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim => Source_Sans_Pro}/Source_Sans_Pro_900.svg (100%) rename {decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim => Source_Sans_Pro}/Source_Sans_Pro_900.ttf (100%) rename {decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim => Source_Sans_Pro}/Source_Sans_Pro_900.woff (100%) rename {decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim => Source_Sans_Pro}/Source_Sans_Pro_900.woff2 (100%) create mode 100644 decidim/image.d/etc/cron.d/decidim delete mode 100755 decidim/image.d/etc/crontabs/decidim create mode 100644 decidim/image.d/etc/nginx/rails_env.conf delete mode 100644 decidim/image.d/srv/decidim-app/Gemfile diff --git a/README.rst b/README.rst index 0f7f691..ea09e99 100644 --- a/README.rst +++ b/README.rst @@ -9,12 +9,6 @@ Decidim is a participatory democracy platform for cities and organizations. Deci Upstream URL: https://github.com/decidim/decidim -Passenger nginx plugin ----------------------- - -The passenger plugin work as application proxy between HTTP server and Ruby on Rails applications. Nginix doesn't have modules API like Apache does, so all nginx module must be present at compile time and only then they can be loaded and unloaded at runtime. Passenger plugin is not present in the standard Alpine nginx packages, therefore for passenger to work, a custom version of nginx including the passenger plugin needs to be compiled, hence the full compilation in ``Dockerfile``. Passenger sources contain ``passenger-install-nginx-module`` script which eases and semi-automates the compilation. - - Custom fonts ------------ @@ -36,7 +30,7 @@ Decidim allows to create managed sites using the superadmin interface on ``https Rails environment ----------------- -Rails ``RAIL_ENV`` environment variable is set to ``production`` by default. This requires connection via HTTPS as there are redirects hardcoded in the Decidim application or its dependencies with enforce this behavior whenewer the ``RAILS_ENV`` is ``production``. The varaible can be changed to ``development`` in the docker-compose ``.env`` file, however the full development environment experience is not ensured by the current setup and some additional manual steps may be needed in order to use full potential of the development the environment. +Rails ``RAILS_ENV`` environment variable is set to ``production`` by default. This requires connection via HTTPS as there are redirects hardcoded in the Decidim application or its dependencies with enforce this behavior whenewer the ``RAILS_ENV`` is ``production``. The varaible can be changed to ``development`` in the docker-compose ``.env`` file, however the full development environment experience is not ensured by the current setup and some additional manual steps may be needed in order to use full potential of the development the environment. The application offers a console accessible via @@ -54,3 +48,35 @@ The console loads the application environment and allows to work with Decidim vi password: ENV["DECIDIM_ADMIN_PASSWORD"], password_confirmation: ENV["DECIDIM_ADMIN_PASSWORD"] ) + + +Development without docker-compose +---------------------------------- + +.. code-block:: bash + + rm -rf ~/postgres_data + mkdir ~/postgres_data + podman run -it --rm \ + --env "POSTGRES_USER=decidim" \ + --env "POSTGRES_PASSWORD=decidim" \ + --env "POSTGRES_DB=decidim" \ + --volume ~/postgres_data:/var/lib/postgresql/data \ + --ip 10.88.0.2 \ + docker.io/postgres:14-alpine + +.. code-block:: bash + + podman build -t decidim:latest . + + rm -rf ~/decidim_{migrate,storage,uploads} + mkdir ~/decidim_{migrate,storage,uploads} + podman run -it --rm \ + --env-file .env \ + --env "DATABASE_URL=postgres://decidim:decidim@decidim-postgres/decidim" \ + --volume ~/decidim_migrate:/srv/decidim-app/db/migrate \ + --volume ~/decidim_storage:/srv/decidim-app/storage \ + --volume ~/decidim_uploads:/srv/decidim-app/public/uploads \ + --add-host decidim-postgres:10.88.0.2 \ + --ip 10.88.0.3 \ + decidim:latest diff --git a/decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_400.eot b/Source_Sans_Pro/Source_Sans_Pro_400.eot similarity index 100% rename from decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_400.eot rename to Source_Sans_Pro/Source_Sans_Pro_400.eot diff --git a/decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_400.svg b/Source_Sans_Pro/Source_Sans_Pro_400.svg similarity index 100% rename from decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_400.svg rename to Source_Sans_Pro/Source_Sans_Pro_400.svg diff --git a/decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_400.ttf b/Source_Sans_Pro/Source_Sans_Pro_400.ttf similarity index 100% rename from decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_400.ttf rename to Source_Sans_Pro/Source_Sans_Pro_400.ttf diff --git a/decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_400.woff b/Source_Sans_Pro/Source_Sans_Pro_400.woff similarity index 100% rename from decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_400.woff rename to Source_Sans_Pro/Source_Sans_Pro_400.woff diff --git a/decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_400.woff2 b/Source_Sans_Pro/Source_Sans_Pro_400.woff2 similarity index 100% rename from decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_400.woff2 rename to Source_Sans_Pro/Source_Sans_Pro_400.woff2 diff --git a/decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_600.eot b/Source_Sans_Pro/Source_Sans_Pro_600.eot similarity index 100% rename from decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_600.eot rename to Source_Sans_Pro/Source_Sans_Pro_600.eot diff --git a/decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_600.svg b/Source_Sans_Pro/Source_Sans_Pro_600.svg similarity index 100% rename from decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_600.svg rename to Source_Sans_Pro/Source_Sans_Pro_600.svg diff --git a/decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_600.ttf b/Source_Sans_Pro/Source_Sans_Pro_600.ttf similarity index 100% rename from decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_600.ttf rename to Source_Sans_Pro/Source_Sans_Pro_600.ttf diff --git a/decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_600.woff b/Source_Sans_Pro/Source_Sans_Pro_600.woff similarity index 100% rename from decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_600.woff rename to Source_Sans_Pro/Source_Sans_Pro_600.woff diff --git a/decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_600.woff2 b/Source_Sans_Pro/Source_Sans_Pro_600.woff2 similarity index 100% rename from decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_600.woff2 rename to Source_Sans_Pro/Source_Sans_Pro_600.woff2 diff --git a/decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_900.eot b/Source_Sans_Pro/Source_Sans_Pro_900.eot similarity index 100% rename from decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_900.eot rename to Source_Sans_Pro/Source_Sans_Pro_900.eot diff --git a/decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_900.svg b/Source_Sans_Pro/Source_Sans_Pro_900.svg similarity index 100% rename from decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_900.svg rename to Source_Sans_Pro/Source_Sans_Pro_900.svg diff --git a/decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_900.ttf b/Source_Sans_Pro/Source_Sans_Pro_900.ttf similarity index 100% rename from decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_900.ttf rename to Source_Sans_Pro/Source_Sans_Pro_900.ttf diff --git a/decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_900.woff b/Source_Sans_Pro/Source_Sans_Pro_900.woff similarity index 100% rename from decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_900.woff rename to Source_Sans_Pro/Source_Sans_Pro_900.woff diff --git a/decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_900.woff2 b/Source_Sans_Pro/Source_Sans_Pro_900.woff2 similarity index 100% rename from decidim/image.d/usr/local/lib/ruby/gems/2.7.0/gems/decidim-core-0.23.6/app/assets/fonts/decidim/Source_Sans_Pro_900.woff2 rename to Source_Sans_Pro/Source_Sans_Pro_900.woff2 diff --git a/decidim/Dockerfile b/decidim/Dockerfile index dd8e611..910a0e5 100644 --- a/decidim/Dockerfile +++ b/decidim/Dockerfile @@ -1,81 +1,77 @@ -FROM ruby:2.7-alpine3.13 +FROM docker.io/ruby:2.7-slim-bullseye -RUN \ - # Install runtime dependencies - apk --no-cache add curl libbz2 libgcc libstdc++ libxml2 libxslt ncurses-libs openssl pcre readline s6 xz-libs && \ - # Update system Ruby gems - echo -e 'install: --no-document\nupdate: --no-document' >/usr/local/etc/gemrc && \ - gem update --system +# Losely based on +# https://raw.githubusercontent.com/Platoniq/decidim-install/master/script/install-decidim.sh -# Nginx + passenger -RUN \ - # Install build dependencies - apk --no-cache add --virtual .deps build-base curl-dev openssl-dev linux-headers pcre-dev && \ - # Install passenger - gem install passenger && \ - ln -s /usr/local/bundle/gems/passenger-* /usr/local/lib/passenger && \ - # Create OS user - addgroup -S -g 8080 decidim && \ - adduser -S -u 8080 -h /srv/decidim-app -s /sbin/nologin -G decidim -g decidim decidim && \ - # Compile nginx - # Minimized version of /usr/local/bin/passenger-install-nginx-module - NGINX_VERSION=$(grep ' PREFERRED_NGINX_VERSION' /usr/local/lib/passenger/src/ruby_supportlib/phusion_passenger.rb | grep -Eo '([0-9\.]+)') && \ - cd /tmp && \ - wget https://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz && \ - tar xf nginx-*.tar.gz && \ - cd nginx-* && \ - ./configure \ - --prefix=/var/lib/nginx \ - --sbin-path=/usr/sbin/nginx \ - --conf-path=/etc/nginx/nginx.conf \ - --pid-path=/run/nginx.pid \ - --lock-path=/run/nginx.lock \ - --user=decidim \ - --group=decidim \ - --with-threads \ - --with-file-aio \ - --with-http_ssl_module \ - --with-http_v2_module \ - --with-http_realip_module \ - --with-http_gzip_static_module \ - --with-http_stub_status_module \ - --with-http_addition_module \ - --without-http_fastcgi_module \ - --without-http_memcached_module \ - --without-http_scgi_module \ - --without-http_uwsgi_module \ - --with-cc-opt=-Wno-error \ - --add-module=/usr/local/lib/passenger/src/nginx_module && \ - make -j $(getconf _NPROCESSORS_ONLN) && \ - make install && \ - rm -f /etc/nginx/*.default && \ - # Cleanup - apk --no-cache del .deps && \ - rm -rf /tmp/* +ARG DECIDIM_VERSION=0.26.2 +ARG BUNDLER_VERSION=2.3.5 +ARG RAILS_VERSION=6.0.4 -# Decidim +ENV DEBIAN_FRONTEND noninteractive ENV RAILS_ENV production RUN \ - # Install runtime dependencies - apk --no-cache add imagemagick libpq nodejs procps tzdata && \ - # Install build dependencies - apk --no-cache add --virtual .deps build-base git libxml2-dev libxslt-dev postgresql-dev zlib-dev && \ - # Install Decidim - bundle config build.nokogiri --use-system-libraries && \ - gem install decidim -v 0.23.6 && \ - cd /srv && \ - decidim decidim-app - -COPY image.d / + # Setup OS environment + addgroup --system --gid 8080 decidim && \ + adduser --system --uid 8080 --gid 8080 --home /srv/decidim-app --no-create-home --shell /sbin/nologin decidim && \ + ln -sf /usr/share/zoneinfo/Europe/Prague /etc/localtime && \ + dpkg-reconfigure tzdata && \ + apt-get -y update && \ + apt-get -y install --no-install-recommends ca-certificates curl dirmngr gnupg RUN \ - # Install runtime gems and plugins + # Add yarn repo + curl -sSL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor >/usr/share/keyrings/yarn.gpg && \ + echo "deb [signed-by=/usr/share/keyrings/yarn.gpg] https://dl.yarnpkg.com/debian/ stable main" >/etc/apt/sources.list.d/yarn.list && \ + # Add NodeJS repo + curl -sSL https://deb.nodesource.com/gpgkey/nodesource.gpg.key | gpg --dearmor >/usr/share/keyrings/nodesource.gpg && \ + echo "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_16.x bullseye main" >/etc/apt/sources.list.d/nodesource.list && \ + # Add passenger repo + install -m 700 -d /root/.gnupg && \ + while ! gpg --no-default-keyring --keyring /tmp/passenger.kbx --keyserver keyserver.ubuntu.com --recv-keys 561F9B9CAC40B2F7; do sleep 0.2; done && \ + gpg --no-default-keyring --keyring /tmp/passenger.kbx -o /usr/share/keyrings/passenger.gpg --export 561F9B9CAC40B2F7 && \ + rm -rf /tmp/passenger.kbx /root/.gnupg && \ + echo "deb [signed-by=/usr/share/keyrings/passenger.gpg] https://oss-binaries.phusionpassenger.com/apt/passenger bullseye main" >/etc/apt/sources.list.d/passenger.list && \ + # Install runtime dependencies + apt-get -y update && \ + apt-get -y install --no-install-recommends cron execline nginx imagemagick libnginx-mod-http-passenger libpq5 nodejs s6 yarn + +RUN \ + # Install build dependencies + apt-get -y install --no-install-recommends autoconf bison build-essential git libgdbm-dev libicu-dev libncurses5-dev libpq-dev libreadline6-dev && \ + # Install gems + gem install bundler --version ${BUNDLER_VERSION} && \ + gem install rails --version ${RAILS_VERSION} && \ + gem install decidim --version ${DECIDIM_VERSION} && \ + # Install Decidim + decidim /srv/decidim-app && \ cd /srv/decidim-app && \ + bundle add decidim-conferences --version ${DECIDIM_VERSION} --skip-install && \ + bundle add decidim-consultations --version ${DECIDIM_VERSION} --skip-install && \ + bundle add decidim-initiatives --version ${DECIDIM_VERSION} --skip-install && \ + bundle add decidim-templates --version ${DECIDIM_VERSION} --skip-install && \ + bundle add figaro --skip-install && \ + bundle add passenger --group production --skip-install && \ + bundle add delayed_job_active_record --group production --skip-install && \ + bundle add daemons --group production --skip-install && \ + bundle add twilio-ruby --group production --skip-install && \ + # Install Decidim modules + bundle add omniauth-decidim --github "decidim/omniauth-decidim" --skip-install && \ + bundle add decidim-calendar --github "luizsanches/decidim-module-calendar" --skip-install && \ + bundle add decidim-challenges --github "gencat/decidim-module-challenges" --branch "upgrade/0.26-stable" --skip-install && \ + bundle add decidim-decidim_awesome --github "Platoniq/decidim-module-decidim_awesome" --skip-install && \ + bundle add decidim-direct_verifications --github "Platoniq/decidim-verifications-direct_verifications" --skip-install && \ + bundle add decidim-navigation_maps --github "Platoniq/decidim-module-navigation_maps" --skip-install && \ + bundle add decidim-term_customizer --github "mainio/decidim-module-term_customizer" --skip-install && \ bundle install && \ # Setup delayed job for mail sending bin/rails generate delayed_job:active_record && \ # Precompile static assets + curl -sSL https://repo.spotter.cz/Source_Sans_Pro.tar.gz | tar xzf - -C /usr/local/bundle/gems/decidim-core-${DECIDIM_VERSION}/app/packs/fonts/decidim/ && \ + npm install && \ + npm install --install-links /usr/local/bundle/bundler/gems/decidim-module-decidim_awesome-* && \ + npm install --install-links /usr/local/bundle/bundler/gems/decidim-module-calendar-* && \ + npm install --install-links /usr/local/bundle/bundler/gems/decidim-module-navigation_maps-* && \ bin/rails assets:precompile && \ # Remove database migrations (will be recreated in entrypoint.sh) and temp cache rm /srv/decidim-app/db/migrate/* && \ @@ -86,9 +82,16 @@ RUN \ # Change ownership chown -R decidim:decidim /srv/decidim-app && \ # Cleanup - apk --no-cache del .deps && \ - rm -rf /root/.bundle /root/.gem + apt-get -y purge --autoremove dirmngr gnupg autoconf bison build-essential git libgdbm-dev libicu-dev libncurses5-dev libpq-dev libreadline6-dev && \ + apt-get -y clean && \ + rm -rf /srv/decidim/node_modules && \ + rm -rf /root/.bundle && \ + rm -rf /root/.gem && \ + rm -rf /root/.npm + +COPY --chown=decidim:decidim image.d/srv/decidim-app/ /srv/decidim-app/ +COPY image.d/etc/ /etc/ +COPY image.d/entrypoint.sh / ENTRYPOINT ["/entrypoint.sh"] EXPOSE 8080 -VOLUME ["/srv/decidim-app/db/migrate", "/srv/decidim-app/storage", "/srv/decidim-app/public/uploads"] diff --git a/decidim/image.d/entrypoint.sh b/decidim/image.d/entrypoint.sh index 2256e54..5da29c0 100755 --- a/decidim/image.d/entrypoint.sh +++ b/decidim/image.d/entrypoint.sh @@ -8,34 +8,35 @@ fi echo "Starting Decidim..." # Set passenger environment -export RAILS_ENV=${RAILS_ENV:-production} -echo "passenger_app_env ${RAILS_ENV};" >/etc/nginx/rails_env.conf +if [ -n "${RAILS_ENV}" ]; then + echo "passenger_app_env ${RAILS_ENV};" >/etc/nginx/rails_env.conf +fi + +# Fix volume permissions +chown decidim:decidim \ + /srv/decidim-app/db/migrate \ + /srv/decidim-app/storage \ + /srv/decidim-app/public/uploads # Upgrade database cd /srv/decidim-app -s6-setuidgid decidim sh -c ' +HOME=/srv/decidim-app s6-setuidgid decidim sh -c ' bin/rails decidim:upgrade - bin/rails generate delayed_job:active_record >/dev/null 2>&1 + bin/rails generate delayed_job:active_record bin/rails decidim_conferences:install:migrations bin/rails decidim_consultations:install:migrations bin/rails decidim_initiatives:install:migrations - # bin/rails decidim_templates:install:migrations - bin/rails decidim_calendar:install:migrations - bin/rails decidim_comparative_stats:install:migrations + bin/rails decidim_templates:install:migrations + bin/rails decidim_event_calendar:install:migrations + bin/rails decidim_challenges:install:migrations bin/rails decidim_decidim_awesome:install:migrations - # bin/rails decidim_favorites:install:migrations - # bin/rails decidim_feedback:install:migrations - # bin/rails decidim_ideas:install:migrations - # bin/rails decidim_ldap:install:migrations - bin/rails decidim_navbar_links:install:migrations bin/rails decidim_navigation_maps:install:migrations - bin/rails decidim_time_tracker:install:migrations - bin/rails redirector_engine:install:migrations - bin/rails decidim_url_aliases:install:migrations + bin/rails decidim_term_customizer:install:migrations bin/rails db:migrate ' # Create or update superadmin account +if [ -n "${DECIDIM_ADMIN_USER}" -a -n "${DECIDIM_ADMIN_PASSWORD}" ]; then cat < 1.3" - -gem "puma", ">= 4.3.5" -gem "uglifier", "~> 4.1" - -gem "faker", "~> 1.9" - -gem "wicked_pdf", "~> 1.4" - -group :development, :test do - gem "byebug", "~> 11.0", platform: :mri - - gem "decidim-dev", "0.23.6" -end - -group :development do - gem "letter_opener_web", "~> 1.3" - gem "listen", "~> 3.1" - gem "spring", "~> 2.0" - gem "spring-watcher-listen", "~> 2.0" - gem "web-console", "~> 3.5" -end - -group :production do - gem "passenger" - gem "delayed_job_active_record" - gem "daemons" - gem "twilio-ruby" -end - -# Modules -gem "omniauth-decidim", github: "decidim/omniauth-decidim" -# gem "decidim-access_requests", github: "mainio/decidim-module-access_requests" # Supported until 0.22.0 -# gem "decidim-action_delegator", github: "coopdevs/decidim-module-action_delegator" # Supported until 0.23.2 -# gem "decidim-antivirus", github: "mainio/decidim-module-antivirus" # Supported until 0.22.0 -# gem "decidim-budgets_enhanced", github: "OpenSourcePolitics/decidim-module-budgets_enhanced", branch: "0.22-dev" # Supported until 0.19.0, development branch exists up to 0.22.0 -gem "decidim-calendar", github: "alabs/decidim-module-calendar" -gem "decidim-comparative_stats", github: "Platoniq/decidim-module-comparative_stats" -# gem "decidim-cookies", github: "OpenSourcePolitics/decidim-module_cookies" # Supported until 0.21.0 -gem "decidim-decidim_awesome", github: "Platoniq/decidim-module-decidim_awesome" -# gem "decidim-department_admin", github: "gencat/decidim-department-admin" # Supported until 0.22.0 -gem "decidim-direct_verifications", github: "Platoniq/decidim-verifications-direct_verifications" -# gem "decidim-favorites", github: "mainio/decidim-module-favorites" # Required by ideas, plans -# gem "decidim-feedback", github: "mainio/decidim-module-feedback" # Required by ideas -# gem "decidim-ideas", github: "mainio/decidim-module-ideas" # Supported until 0.23.0, has graphql dependency problems -# gem "decidim-ldap", github: "diputacioBCN/decidim-diba", glob: "decidim-ldap/decidim-ldap.gemspec", Supported until 0.18.0, installable until 0.23.1 -gem "decidim-navbar_links", github: "OpenSourcePolitics/decidim-module-navbar_links", branch: "0.23-stable" -gem "decidim-navigation_maps", github: "Platoniq/decidim-module-navigation_maps", ref: "5199551350d05a24c439b4c6dc5946f12eafaa30" -# gem "decidim-plans", github: "mainio/decidim-module-plans" # Supported until 0.22.0 -# gem "decidim-process_groups_content_block", github: "mainio/decidim-module-process_groups_content_block" # Supported until 0.22.0 -# gem "decidim-term_customizer", github: "mainio/decidim-module-term_customizer" # Supported until 0.22.0 -gem "decidim-time_tracker", github: "Platoniq/decidim-module-time_tracker", branch: "main" -# gem "decidim-unique_identity", github: "OpenSourcePolitics/decidim-module-unique-identity" # Supported until 0.18.0 -gem "decidim-url_aliases", github: "OpenSourcePolitics/decidim-urlaliases" diff --git a/decidim/image.d/srv/decidim-app/config/environments/production.rb b/decidim/image.d/srv/decidim-app/config/environments/production.rb index ca7825b..1b9f933 100644 --- a/decidim/image.d/srv/decidim-app/config/environments/production.rb +++ b/decidim/image.d/srv/decidim-app/config/environments/production.rb @@ -22,14 +22,11 @@ Rails.application.configure do # Apache or NGINX already handles this. config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? - # Compress JavaScripts and CSS. - config.assets.js_compressor = Uglifier.new(:harmony => true) - # config.assets.css_compressor = :sass + # Compress CSS using a preprocessor. + # # Do not fallback to assets pipeline if a precompiled asset is missed. - config.assets.compile = false - - # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb + # Enable serving of images, stylesheets, and JavaScripts from an asset server. # config.action_controller.asset_host = 'http://assets.example.com' @@ -38,17 +35,17 @@ Rails.application.configure do # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX - # Store uploaded files on the local file system (see config/storage.yml for options) + # Store uploaded files on the local file system (see config/storage.yml for options). config.active_storage.service = :local - # Mount Action Cable outside main process or domain + # Mount Action Cable outside main process or domain. # config.action_cable.mount_path = nil # config.action_cable.url = 'wss://example.com/cable' # config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ] # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. config.force_ssl = true - + # Use the lowest log level to ensure availability of diagnostic information # when problems arise. config.log_level = :info @@ -59,9 +56,9 @@ Rails.application.configure do # Use a different cache store in production. # config.cache_store = :mem_cache_store - # Use a real queuing backend for Active Job (and separate queues per environment) + # Use a real queuing backend for Active Job (and separate queues per environment). # config.active_job.queue_adapter = :resque - # config.active_job.queue_name_prefix = "decidim_#{Rails.env}" + # config.active_job.queue_name_prefix = "decidim_app_production" config.action_mailer.perform_caching = false @@ -101,4 +98,25 @@ Rails.application.configure do # Do not dump schema after migrations. config.active_record.dump_schema_after_migration = false + + # Inserts middleware to perform automatic connection switching. + # The `database_selector` hash is used to pass options to the DatabaseSelector + # middleware. The `delay` is used to determine how long to wait after a write + # to send a subsequent read to the primary. + # + # The `database_resolver` class is used by the middleware to determine which + # database is appropriate to use based on the time delay. + # + # The `database_resolver_context` class is used by the middleware to set + # timestamps for the last write to the primary. The resolver uses the context + # class timestamps to determine how long to wait before reading from the + # replica. + # + # By default Rails will store a last write timestamp in the session. The + # DatabaseSelector middleware is designed as such you can define your own + # strategy for connection switching and pass that into the middleware through + # these configuration options. + # config.active_record.database_selector = { delay: 2.seconds } + # config.active_record.database_resolver = ActiveRecord::Middleware::DatabaseSelector::Resolver + # config.active_record.database_resolver_context = ActiveRecord::Middleware::DatabaseSelector::Resolver::Session end diff --git a/decidim/image.d/srv/decidim-app/config/initializers/decidim.rb b/decidim/image.d/srv/decidim-app/config/initializers/decidim.rb index efe46cb..adabbc8 100644 --- a/decidim/image.d/srv/decidim-app/config/initializers/decidim.rb +++ b/decidim/image.d/srv/decidim-app/config/initializers/decidim.rb @@ -256,7 +256,7 @@ Decidim.configure do |config| # Etherpad configuration # # Only needed if you want to have Etherpad integration with Decidim. See - # Decidim docs at docs/services/etherpad.md in order to set it up. + # Decidim docs at https://docs.decidim.org/en/services/etherpad/ in order to set it up. # # config.etherpad = { # server: Rails.application.secrets.etherpad[:server], @@ -281,12 +281,19 @@ Decidim.configure do |config| # Machine Translation Configuration # + # See Decidim docs at https://docs.decidim.org/en/develop/machine_translations/ + # for more information about how it works and how to set it up. + # # Enable machine translations config.enable_machine_translations = false # # If you want to enable machine translation you can create your own service # to interact with third party service to translate the user content. # + # If you still want to use "Decidim::Dev::DummyTranslator" as translator placeholder, + # add the follwing line at the beginning of this file: + # require "decidim/dev/dummy_translator" + # # An example class would be something like: # # class MyTranslationService @@ -312,3 +319,6 @@ end Rails.application.config.i18n.available_locales = Decidim.available_locales Rails.application.config.i18n.default_locale = Decidim.default_locale + +# Inform Decidim about the assets folder +Decidim.register_assets_path File.expand_path("app/packs", Rails.application.root) diff --git a/decidim/image.d/srv/decidim-app/config/locales/cs.yml b/decidim/image.d/srv/decidim-app/config/locales/cs.yml index ce58879..005430e 100644 --- a/decidim/image.d/srv/decidim-app/config/locales/cs.yml +++ b/decidim/image.d/srv/decidim-app/config/locales/cs.yml @@ -1,175 +1,13 @@ cs: - activemodel: - attributes: - activity: - active: Active - description: Popis - end_date: Datum ukončení - max_minutes_per_day: Maximum minut na den - requests_start_at: Požadavky začínají v - start_date: Datum zahájení - constraint: - component_id: Komponenta - subject_id: Participativní prostor - subject_manifest: Typ participativního prostoru - milestone: - title: Co jste udělal? - task: - name: Jméno - translation: - key: Překladový klíč - value: Přizpůsobený termín - translation_set: - name: Název - translations_import: - file: Import souboru - errors: - models: - milestone: - attributes: - attachment: - needs_to_be_reattached: Vyžaduje být znovu připojen - redirect_rule: - attributes: - destination: - not_recognized: musí být aplikací uznány. - source: - reserved: nemělo by být vyhrazené slovo. - time_event: - attributes: - activity: - finished: Aktivita již byla ukončena - inactive: Aktivita není aktivní - no_time_available: Uživatel dosáhl maximálního množství času dostupného - pro den - not_started: Aktivita zatím nezačala - assignation: - unassigned: Uživatel není přiřazen k úkolu - start: - date_format: Čas začátku není datum - stop: - date_format: Čas ukončení není datum - stop_before_start: Ukončení je před začátkem - translations_import: - attributes: - file: - invalid_mime_type: 'Neplatný typ souboru. Přijímané formáty jsou: %{valid_mime_types}' - activerecord: - attributes: - decidim/ldap_configuration: - authentication_query: Authentifikační query - dn: Základní doménové jméno - email_field: E-mail - host: Host - name_field: Jméno - organization: Organizace - password_field: Heslo - port: Port - username_field: Uživatelské jméno - models: - decidim: - ldap_configuration: LDAP konfigurace - decidim/calendar: - one: Kalendář - other: Kalendáře decidim: - admin: - actions: - add: Přidat - confirm_destroy: Potvrdit smazání - destroy: Smazat - edit: Upravit - filters: - activity_id_eq: - label: Aktivita - activity_task_id_eq: - label: Úloha - search_placeholder: - user_name_or_user_nickname_or_user_email_cont: Vyhledejte uživatelské jméno, - přezdívku nebo e-mail - menu: - appearance: Vzhled - area_types: Typy oblastí - areas: Oblasti - configuration: Konfigurace - help_sections: Sekce nápovědy - homepage: Domovská stránka - navbar_links: Odkazy navigační lišty - scope_types: Typy oblastí - scopes: Oblasti - models: - assembly: - fields: - assembly_role: Role ve shromáždění - department: Oddělení / oblast - department_role: Role oddělení - navbar_link: - fields: - link: Odkaz - title: Nadpis - weight: Důležitos - participatory_process: - fields: - department: Oddělení / oblast - department_role: Role oddělení - process_role: Role procesu - user: - fields: - administrated_spaces: Spravované prostory - assembly_type: Shromáždění - created_at: Vytvořeno v - department: Oddělení / oblast - private: Soukromí - process_type: Proces - published: Publikováno - roles: - assembly_admin: Správce shromáždění - department_admin: Správce oddělení - participant: Účastník - process_admin: Správce procesu - space_admin: Správce prostoru - search_field_admins: Správci - search_field_processes: Procesy - search_question: Co hledáte? - spaces: Proces / Pravidlo / Shromáždění - title: Název - type: Typ - navbar_links: - create: - error: Chyba - success: Úspěch - destroy: - success: Úspěch - no_links: Žádné odkazy - update: - error: Chyba - success: Úspěch - titles: - navbar_links: Odkazy navigační lišty - users: - form: - area: Oblast - index: - filter: - all: Vše - filter_by: filtrovat podle - search: Hledat - authorization_handlers: - admin: - direct_verifications: - help: - - 'Umožňuje masivní zavedení uživatelů:' - - Přímá registrace v organizaci a odeslání pozvánek - - Ověřit je pomocí jakékoliv metody aktivního ověření - - Zrušit jejich ověření pomocí jakékoli metody aktivního ověření - direct_verifications: - explanation: Ruční ověření správcem organizace - name: Přímé ověření - calendar: + event_calendar: admin: actions: new_external_event: Nová externí událost external_events: + index: + title: Externí události + no_records_html:

Nebyly vytvořeny žádné externí události.

Začněte přidáním externí události tlačítkem "%{button_name}.

create: invalid: Neplatná externí událost success: Externí událost byla úspěšně vytvořena @@ -179,815 +17,33 @@ cs: save: Uložit externí událost form: title: Externí událost - index: - no_records_html:

Nebyly vytvořeny žádné externí události.

Začněte - přidáním externí události tlačítkem "%{button_name}.

- title: Externí události new: - create: Vytvořit externí událost title: Nová externí událost + create: Vytvořit externí událost update: invalid: Chyba při aktualizaci externí události success: Externí událost byla úspěšně aktualizována models: external_events: fields: - end_at: Konec v - start_at: Začátek v title: Název + start_at: Začátek v + end_at: Konec v url: URL index: + title: Globální kalendář filters: consultation: Konzultace debate: Debaty external_event: Externí události meeting: Schůzky participatory_step: Účastnický proces - title: Globální kalendář menu: calendar: Kalendář gantt: Ganttův graf ical: Stáhnout iCAL - components: - cookies: - accept: Přijmout vše - analytics: - description: Umožňuje sledování za účelem zlepšení uživatelské zkušenosti - consent_modal: - description: Tento způsob umožňuje filtrovat soubory cookie, které chcete. - decidim: - description: Umožňuje zkontrolovat, zda uživatel soubory cookie přijal - decidim_session: - description: Umožňuje udržovat relaci uživatele aktivní po omezenou dobu. - Je nutný ke zlepšení uživatelského komfortu v Decidim - matomo: - description: Umožňuje sledování za účelem zlepšení uživatelské zkušenosti - name: Cookies - purposes: - ads: Reklamy - analytics: Analytika - checking: Zkontrolujte souhlas uživatele - security: Zabezpečení - session: Seance - tracking: Trasování - department_admin: - name: Správce oddělení - navbar_links: - name: Odkazy navigační lišty - navigation_maps: - name: Navigační Mapy - time_tracker: - name: Časový záznam - settings: - global: - activities_label: Název pro "Aktivity" - announcement: Oznámení - assignations_label: Jméno pro "Přiřazení" - milestones_label: Název pro "Milníky" - tasks_label: Název pro "Úkoly" - time_events_label: Název pro "Čas události" - step: - announcement: Oznámení - views: - activity: - info: Klikněte na tlačítko pro zaznamenání času. - time_elapsed: 'Uplynulý čas:' - index: - account_message: Přihlaste se pomocí svého účtu - nebo se zaregistrujte pro účast na této - aktivitě. - data: - fill: Vyplňte údaje - submit: Odeslat - request: Žádost o připojení k aktivitě - direct_verifications: - verification: - admin: - direct_verifications: - create: - authorized: '%{authorized} uživatelů bylo úspěšně ověřeno pomocí [%{handler}] - (%{count} detekováno, %{errors} chyb)' - info: Zjištěno %{count} uživatelů, z nichž %{registered} jsou registrováni, - %{authorized} autorizováni pomocí [%{handler}] (%{unconfirmed} nepotvrzeno) - registered: '%{registered} uživatelů bylo úspěšně zaregistrováno (%{count} - detekováno, %{errors} chyb) ' - revoked: Ověření od %{revoked} uživatelů bylo zrušeno pomocí [%{handler}] - (%{count} detekováno, %{errors} chyb) - gdpr_disclaimer: Udělejte to v rámci vaší odpovědnosti. Nezapomeňte, že - potřebujete mít výslovný souhlas svých uživatelů, abyste je mohli zaregistrovat. - V opačném případě můžete porušovat nařízení o GDPR v zemích EU. - index: - stats: Statistiky uživatelů - title: Registrovat a autorizovat uživatele - new: - authorization_handler: Ověřovací metoda - authorize: Autorizovat uživatele - check: Zkontrolovat stav uživatelů - info: Zadejte e-maily zde, jeden na řádek. Pokud e-mailům předchází text, - bude interpretován jako jméno uživatele - register: Registrovat uživatele na platformě (pokud existují, budou ignorováni) - revoke: Zrušit autorizaci od uživatelů - submit: Odeslat a zpracovat seznam - textarea: Seznam e-mailů - stats: - index: - authorized: Autorizováno - authorized_unconfirmed: Autorizováno, ale nepotvrzeno - global: '- Jakákoli metoda ověřování -' - registered: Registrován - unconfirmed: Nepotvrzeno - authorizations: - new: - no_action: Tato metoda vyžaduje administrátora, který vás ověřuje - favorites: - favorite_button: - add_to_favorites: Přidat k oblíbeným - remove_from_favorites: Odstranit z oblíbených - sign_in_before_favorite: Přihlaste se a přidejte jako oblíbené - favorites: - index: - description_html:

Osobní oblíbené položky můžete přidat pomocí tlačítka - Přidat do oblíbených. Objeví se na této stránce.

- icon_description: 'Pomocí této ikony můžete přidat oblíbené položky:' - title: Oblíbené - show: - description_html:

Zde vidíte všechny oblíbené položky, které jste přidali - v různých fázích procesu. V postranní navigaci můžete vybrat, které oblíbené - položky chcete zobrazit.

- title: Oblíbené - side_panel: - show_navigation: Zobrazit navigaci - favoriting_count: - times_added_to_favorites: - one: Jedna osoba přidala toto do svých oblíbených - other: '%{count} lidí si toto přidalo ke svým oblíbeným' - zero: Toto zatím nikdo nepřidal mezi své oblíbené - ldap: - ldap_configurations: - create: - error: Při vytváření nové konfigurace LDAP došlo k chybě. - success: Konfigurace LDAP byla úspěšně vytvořena. - destroy: - success: Konfigurace LDAP byla úspěšně zničena. - edit: - title: Upravit LDAP - update: Aktualizovat - form: - authentication_query: Authentifikační query - dn: Základní doménové jméno - email_field: E-mail - host: Hostitel - name_field: Jméno - organization: Organizace - password_field: Heslo - port: Port - username_field: Uživatelské jméno - index: - title: LDAP - new: - create: Vytvořit - title: Nový LDAP - update: - error: Při aktualizaci této konfigurace LDAP došlo k chybě. - success: Konfigurace LDAP byla úspěšně aktualizována. - menu: - ldap: LDAP - models: - ldap_configuration: - fields: - created_at: Vytvořeno v - name: Organizace / název domény - name: LDAP konfigurace - log: - value_types: - activity_presenter: - not_found: 'Aktivita nebyla v databázi nalezena (ID: %{id})' - time_tracker_presenter: - not_found: 'Komponenta Time Tracker nebyla v databázi nalezena (ID: %{id})' - navbar_links: - admin: - navbar_links: - edit: - title: Název - update: Aktualizace - form: - link: Odkaz - new_tab: Nová záložka - same_tab: Stejná záložka - title: Nadpis - weight: Důležitost - new: - create: Vytvořit - title: Nadpis - navigation_maps: - admin: - areas: - create: - error: Došlo k chybě při vytváření oblasti - success: Oblast byla úspěšně vytvořena - form: - no_popup: Nepoužívejte vyskakovací okno, odkazujte přímo na oblast. - new: - area: Detaily nové oblasti - cancel: Zrušit - save: Uložit - show: - area: Detaily oblasti - cancel: Zrušit - link_suggestions: 'Tip: použijte %{map} pro propojení dalších karet' - save: Uložit - update: - error: Došlo k chybě při ukládání oblasti - success: Oblast úspěšně uložena - content_blocks: - name: Navigační Mapy - navigation_map: - view: Zapojte se - navigation_map_settings_form: - add: Přidat - blueprint_image: Obrázek plánu - description: Popis - editor: Editor mapy - height: Height (px) - id: Id - image_missing: Pro začátek přidejte obrázek plánu - info: Obecné informace - link: Odkaz - remove_blueprint: Smazat tento plán - title: Název - type: Typ - upload_image: Nahrát obrázek - create: - error: Chyba při vytváření plánu - success: Plán byl úspěšně vytvořen - pages: - home: - statistics: - activities_count: Aktivit - assignees_count: Dobrovolníků - tasks_count: Úloh - participatory_processes: - statistics: - activities_count: Aktivit - assignees_count: Dobrovolníků - tasks_count: Úloh - process_groups_content_block: - content_blocks: - highlighted_process_groups: - name: Zvýrazněné skupiny procesů - pages: - home: - highlighted_process_groups: - active_processes: Aktivní procesy - see_all_processes: Zobrazit všechny procesy - term_customizer: - admin: - actions: - add_multiple_translations: Přidat více - back: Zpět - cancel: Zrušit - clear_cache: Vymazat mezipaměť - confirm_duplicate: Opravdu chcete duplikovat tuto sadu? - duplicate: Duplikovat - help: Nápověda - import: Import - new_translation: Nový překlad - new_translation_set: Nová sada překladu - view: Zobrazit - add_translations: - index: - add: Přidat - help_html:

Začněte zadáním několika písmen, která se objeví na výrazu, - který chcete změnit, na vyhledávacím panelu. Počkejte několik sekund - a pod vyhledávacím polem se zobrazí seznam všech překladů odpovídajících - vašemu vyhledávání. Klikněte na překlady v seznamu, který chcete změnit. - Zobrazí se pod vyhledávacím polem v seznamu překladů, které mají být - přidány.

Jakmile přidáte všechny překlady, které chcete změnit, - klikněte na tlačítko „%{button_name}“ ve spodní části obrazovky.

- help_title: Jak hledat překlady? - search: Hledat - caches: - clear: - success: Cache cleared successfully - models: - translation_sets: - fields: - name: Název - translations: - fields: - key: Překladový klíč - original_term: Původní termín - term: Upravený termín - titles: - add_multiple_translations: Přidat více - translation_sets: Překladové sady - translations: Překlady - translation_sets: - constraint_fields: - constraint: Omezení - remove: Odstranit - create: - error: Při vytváření sady překladu došlo k chybě. - success: Sada překladu byla úspěšně vytvořena. - destroy: - success: Sada překladu byla úspěšně smazána. - duplicate: - copied_set_name: Kopie %{name} - error: Chyba při duplikování sady překladu. - success: Sada překladu byla úspěšně duplikována. - edit: - save: Uložit - title: Sada překladu - form: - add_constraint: Přidat omezení - constraint_help_html:

Omezení jsou konkrétní pravidla, která vám umožňují - aplikovat přizpůsobení v sadě na konkrétní kontext.

Pokud nedefinujete - žádná omezení, použijí se přizpůsobení v této sadě na celou aplikaci - . Na druhou stranu, pokud chcete, aby se přizpůsobení v této sadě vztahovalo - pouze na konkrétní proces, vyberte jako typ participativního prostoru - možnost „Participativní procesy“ a jako participativní prostor cílový - proces. Kromě toho můžete také použít přizpůsobení na konkrétní komponentu - definováním komponenty pro omezení.

Pokud definujete více omezení, - přizpůsobení se použijí ve všech z nich.

- constraint_help_title: Co jsou omezení? - help_html:

Sada překladu je „kontejner“, který obsahuje překlady pro - konkrétní kontext, který chcete upravit.

Sada překladu vám - pomůže uspořádat přizpůsobení a použít je v různých kontextech. To vám - umožní přizpůsobit stejný překlad odlišně v různých kontextech.

-

Pokud například chcete přizpůsobit tlačítko s výrazem „Přidat“ odlišně - pro různé participativní procesy, můžete vytvořit samostatné překladové - sady pro oba procesy a použít sadu na tyto procesy pomocí omezení.

- help_title: Co je překladová sada? - title: Překladová sada - index: - no_records_html:

Nejsou k dispozici žádné překladové sady.

- Začněte přidáním překladové sady pomocí tlačítka „%{button_name}“.

- new: - create: Vytvořit - title: Překladové sady - update: - error: Při aktualizaci překladové sady došlo k chybě. - success: Překladová sada byla úspěšně aktualizována. - translations: - create: - error: Chyba při vytváření překladu. - success: Překlad byl úspěšně vytvořen. - destroy: - success: Překlad byl úspěšně smazán. - edit: - save: Uložit - title: Překlad - form: - help_html:

Překladový klíč je technický odkaz na překlad, který má - být přeložen. Toto není termín, který chcete změnit, ale technický klíč, - který odkazuje na tento překlad.

Například pokud chcete změnit - výraz „Procesy“ v horní nabídce, použili byste klíč - "decidim.menu.processes" .

Další informace o internacionalizaci Rails . -

- help_title: Co je překladový klíč? - term_help_html:

Přizpůsobený výraz je konečné slovo, které se má v - uživatelském rozhraní zobrazit místo původního výrazu. Je zřejmé, že - přizpůsobený výraz se může u každého povoleného jazyka lišit.

- term_help_title: Co je přizpůsobený termín? - title: Překlad - import: - error: Chyba při importu překladů - success: Překlady byly úspěšně importovány. - index: - actions: Akce - no_records_html:

V této sadě nejsou k dispozici žádné překlady.

-

Začněte přidáním překladů do této sady. Nejjednodušší je použít - tlačítko „%{button_name}“, kde můžete - vyhledávat překlady se stejnými výrazy, jaké vidíte v uživatelském rozhraní. -

- selected: vybrané - new: - create: Vytvořit - title: Překlady - new_import: - accepted_mime_types: - csv: CSV - json: JSON - xls: XLS - file_legend: 'Přidejte soubor pro import, který bude analyzován pro překlady. - Podporované formáty jsou: %{valid_mime_types}' - start_import: Start importu - title: Import překladů - zip_hint: Soubor ZIP můžete také nahrát z exportu překladů. - update: - error: Chyba při aktualizaci překladu. - success: Překlad byl úspěšně aktualizován. - translations_destroys: - destroy: - error: Chyba při mazání překladů. - success: Překlady byly úspěšně smazány. - new: - destroy: Smazat - title: Překlady smazat - menu: - term_customizer: Přizpůsobovač termínů - time_tracker: - admin: - actions: - title: Akce - activities: - actions: - assignations: Správa přiřazení - confirm_destroy: Opravdu chcete odstranit tuto aktivitu? - destroy: Odstranit aktivitu - edit: Upravit aktivitu - new: Nová aktivita - create: - error: Chyba vytváření aktivity - success: Aktivita byla úspěšně vytvořena - destroy: - success: Aktivita úspěšně smazána - edit: - submit: Změnit aktivitu - title: Upravit aktivitu - index: - title: Úkolové aktivity - new: - submit: Vytvořit aktivitu - title: Nová aktivita - update: - error: Chyba při aktualizaci aktivity - success: Akce byla úspěšně aktualizována - assignations: - actions: - accept: Přijmout - accept_all: Přijmout všechny čekající přiřazení - assignations: Správa přiřazení - confirm_destroy: Opravdu chcete odstranit toto přiřazení? - destroy: Odstranit přiřazení - new: Nové přiřazení - reject: Odmítnout - create: - error: Chyba při vytváření přiřazení - success: Přiřazení bylo úspěšně vytvořeno - destroy: - error: Chyba při odstraňování přiřazení - succcess: Přiřazení bylo úspěšně odstraněno - form: - existing_user: Existující účastník - non_user: Není účastníkem - select_user: Vybrat účastníka - user_type: Typ účastníka - index: - title: Přiřazení - new: - create: Vytvořit přiřazení - title: Nové přiřazení k této aktivitě - update: - error: Chyba při aktualizaci přiřazení - success: Přiřazená osoba úspěšně aktualizována - breadcrumbs: - assignations: Přiřazení - global: Všechny úkoly - stats: Statistiky - exports: - time_tracker_activity_questionnaire_answers: Odpovědi na dotazník o činnosti - time_tracker_assignee_questionnaire_answers: Odpovědi na dotazník přiřazeného - models: - activity: - name: Aktivita - assignation: - name: Přiřazení - task: - name: Úloha - questionnaires: - index: - title: Dotazník - questionnaire: - edit: Upravit dotazník - stats: - index: - title: Statistiky - tasks: - actions: - confirm_destroy: Jste si jisti, že chcete odstranit tento úkol? - destroy: Smazat úkol - edit: Upravit úkol - new: Nová úloha - activity_questionnaire: - title: Dotazník o činnosti - assignations: - bulk_invalid: Chyba, %{count} účastníků nelze přiřadit - bulk_ok: Úspěšně přiřazeno %{count} účastníků - pending: Čekající přiřazení - assignee_questionnaire: - title: Podmínky a zásady Dotazníku - create: - error: Chyba při vytváření úlohy - success: Úloha úspěšně vytvořena - destroy: - success: Úloha úspěšně smazána - edit: - submit: Aktualizovat - title: Aktualizovat úkol - index: - title: Úlohy - new: - submit: Vytvořit - title: Vytvořit úkol - update: - error: Chyba při aktualizaci úlohy - success: Úloha úspěšně aktualizována - time_tracker_exports: - create: - error: Chyba při importu dat o sledování času do odpovědnosti - success: Data sledování času byla úspěšně exportována do odpovědnosti - admin_log: - activity: - create: '%{user_name} vytvořil aktivitu %{resource_name}' - delete: '%{user_name} odstranil aktivitu %{resource_name}' - update: '%{user_name} aktualizoval aktivitu %{resource_name}' - assignation: - create: '%{user_name} vytvořil přiřazení' - delete: '%{user_name} odstranil přiřazení' - update: '%{user_name} aktualizoval přiřazení' - task: - create: '%{user_name} vytvořil úkol %{resource_name}' - delete: '%{user_name} odstranil úkol %{resource_name}' - update: '%{user_name} aktualizoval úkol %{resource_name}' - assignations: - request: - error: Při přiřazování k této aktivitě došlo k chybě. - success: Úspěšně jste požádali o připojení k této aktivitě! - show: - assignations_activity: Aktivita %{user_name} - milestones_list: Seznam milníků - clock: - hours: '%{n}h' - minutes: '%{n}m' - seconds: '%{n}s' - default_activity_questionnaire: - description: Děkujeme, že jste vyplnili tento dotazník! Ptáme se na vás tento - soubor otázek, který vám pomůže pochopit, zda je váš projekt (a jeho akce - prováděné na dobrovolném základě) vyvážený, pokud jde o rozdělení úkolů - kvůli pohlaví. Zohlednění těchto otázek může být také užitečnou příležitostí - k analýze toho, co je považováno za důležité a kdo tyto úkoly obvykle plní. - question_1: - body: Jak je podle vás tento úkol důležitý? - description: Od 1 do 5 považujete tento úkol za nejdůležitější (5), vůbec - není důležitý (1) nebo něco mezi tím? - option_1: 1 (vůbec není důležitý) - option_2: 2 (nepříliš důležité) - option_3: 3 (Spíše důležité) - option_4: 4 (Velmi důležité) - option_5: 5 (Nejdůležitější) - question_2: - body: Kdo si myslíte, že tento úkol obvykle plní? - description: Myslíte si, že tento úkol plní většinou lidé, kteří se ztotožňují - s určitým pohlavím? - option_1: Většinou ženy - option_2: Většinou muži - option_3: Nevidím rozdíly podle pohlaví - option_4: Ostatní - title: Jak vnímáte tento úkol? - tos: Údaje, které zde byly zodpovězeny, se považují za důvěrné a používají - se pouze pro statistické účely. Také platí všeobecné Podmínky. - Odesláním tohoto dotazníku s nimi souhlasíte. - default_assignee_questionnaire: - description: Děkujeme za vyplnění tohoto dotazníku! Ptáme se vás na tento - soubor otázek, abychom vám pomohli pochopit, zda je váš projekt (a jeho - akce prováděné na základě dobrovolnosti) vyvážený z hlediska rozdělení úkolů - z důvodu pohlaví. - question_1: - body: S jakým pohlavím se ztotožňujete? - description: Vyberte možnost, která nejlépe odpovídá vaší genderové identitě. - option_1: Žena - option_2: muž - option_3: Ne-binární - option_4: Ostatní - question_2: - body: Jaký je váš věk? - description: Vyberte si svůj věkový rozsah - option_1: Pod 15 - option_10: 55 až 60 - option_11: 65 až 70 - option_12: 70 až 75 - option_13: 75 až 80 - option_14: 80 až 85 - option_15: 85 až 90 - option_16: Přes 90 - option_2: 15 až 20 - option_3: 20 až 25 - option_4: 25 až 30 - option_5: 30 až 35 - option_6: 35 až 40 - option_7: 40 až 45 - option_8: 45 až 50 - option_9: 50 až 55 - title: Podmínky použití a demografické údaje - tos: Údaje, které zde byly zodpovězeny, se považují za důvěrné a používají - se pouze pro statistické účely. Také platí všeobecné Podmínky. - Odesláním tohoto dotazníku s nimi souhlasíte. - milestone: - dedicated_time: '%{hours}h %{minutes}m %{seconds}s' - time_dedicated: Vyhrazený čas - title: Aktivita %{user_name} - milestone_form: - button_no: Ne, děkuji - button_submit: Uložit - description: Podělte se o důkaz své práce nahráním obrázku a krátkého popisu - toho, čeho jste dosáhli. - input_file: Soubor - input_title: Název - title: Zanechte svou značku! - milestones: - create: - error: Chyba při vytváření milníku - success: Milník byl úspěšně vytvořen - index: - assignations_activity: Aktivita %{user_name} - back_to_list: Zpět k aktivitám - joined_on: Přidal/a se dne - last_worked_on: Naposledy pracoval - total_time: Celkový vyhrazený čas - milestone: - time_dedicated: Vyhrazený čas - models: - activity: - fields: - assignations_accepted: Přijaté přiřazení - assignations_pending: Čekající přiřazení - description: Popis - end_date: Datum ukončení - max_minutes_per_day: Max. minut denně - requests_start_at: Požadavky začínají v - start_date: Datum zahájení - status: Stav - statuses: - finished: Dokončeno - inactive: Neaktivní - not_started: Nezahájeno - open: Otevřeno - name: Aktivita - assignation: - fields: - activity: Aktivita - email: E-mail - invited_at: Pozván na - invited_by: Pozván od - name: Jméno - requested_at: Požadováno v %{time} - status: Stav - statuses: - accepted: Přijato - pending: Čekající - rejected: Odmítnuto - task: Úloha - time_dedicated: Vyhrazený čas - tos_accepted_at: Členem od - name: Přiřazení - questionnaire: - fields: - name: Jméno - title: Název - task: - fields: - activities_count: Počet aktivit - activities_end_at: Poslední aktivita končí v - activities_start_at: První aktivita začíná v - assignations_accepted: Přijaté přiřazení - assignations_pending: Čekající přiřazení - name: Jméno - name: Úloha - reports: - user: - index: - accepted: Přijato - dedicated_time: 'Dosud vyhrazený čas: %{time}' - empty: Nemáte žádné přiřazení aktivit - pending: Čekající - time_events: - start: - already_started: Počítadlo je již spuštěno - error: Chyba při spuštění počítadla - success: Počítadlo bylo úspěšně spuštěno - stop: - already_stopped: Počítadlo již zastaveno - error: Chyba při zastavování počítadla - success: Počítadlo se úspěšně zastavilo - time_tracker: - activity: - counter_stopped: Počítadlo bylo automaticky zastaveno - questionnaire: - answered: Děkujeme za zodpovězení dotazníku! - respond: Co si myslíte o tomto úkolu? - assignee_data: - answer: Začněme! - description: Abychom lépe porozuměli našim účastníkům a jejich vztahu k - těmto úkolům, žádáme vás, abyste vyplnili několik otázek týkajících se - vašeho demografického profilu. Před registrací k jakémukoli úkolu se také - chceme ujistit, že souhlasíte s podmínkami použití. Děkujeme! - title: Podmínky použití a demografické údaje - callout_status: - finished: Ukončeno %{end_date} - inactive: Neaktivní - not_started: Začíná %{start_date} - open: Otevřít, začalo %{start_date} - idle_activity: - assignation_pending: Již aplikováno! Brzy správce zkontroluje vaši žádost. - assignation_rejected: Omlouváme se, Vaše žádost byla zamítnuta. - index: - empty: Zatím nejsou žádné aktivity. - milestones_list: Lidé pracující v této aktivitě - questionnaire_in_preview_mode: Na tento dotazník nelze v režimu náhledu odpovědět! - request_activity: - assignation_pending: Již aplikováno! Brzy správce zkontroluje vaši žádost. - assignation_rejected: Omlouváme se, Vaše žádost byla zamítnuta. - assignee_questionnaire: Přijměte prosím Podmínky - užití abyste se mohli připojit se k aktivitě. - time_tracker_activity_questionnaire_answers_serializer: - activity_description: Aktivita - activity_id: ID aktivity - created_at: Zodpovězeno - id: ID odpovědi - ip_hash: Ip Hash - registered: Registrován - task_id: ID úkolu - task_name: Úloha - unregistered: Neregistrovaný - user_status: Stav uživatele - url_aliases: - admin: - decidim: - url_aliases: - admin: - redirect_rules: - index: - 'no': ne - 'yes': ano - menu: - url_aliases: Přesměrování - models: - redirect_rule: - fields: - active: Aktivní - destination: Cíl - id: Id - source: Zdroj - source_is_case_sensitive: Rozlišuje velká a malá písmena - redirect_rules: - create: - error: Při vytváření přesměrování došlo k chybě. - success: Přesměrování bylo úspěšně vytvořeno. - destroy: - error: Při odstraňování přesměrování došlo k chybě. - success: Přesměrování bylo úspěšně odstraněno. - edit: - title: Upravit přesměrování - update: Aktualizace - form: - active: Aktivní - destination_example: /processes/process-slug - destination_help: Cesta, na kterou budou vaši návštěvníci přesměrováni. - Přijaty jsou pouze cíle rozpoznané aplikací. - source_example: /my-custom-url - source_help: Cesta, ze které budou vaši návštěvníci přesměrováni. Musí - začínat znakem „/“ a může obsahovat pouze písmena, číslice, pomlčky - a podtržítka. - source_is_case_sensitive: Zdroj rozlišuje velká a malá písmena - new: - create: Vytvořit - title: Nové přesměrování - no_redirect_rules: Nejsou k dispozici žádná přesměrování - update: - error: Při aktualizaci přesměrování došlo k chybě. - success: Přesměrování bylo aktualizováno - titles: - redirect_rules: Přesměrování - admin_log: - create: '%{user_name} vytvořil %{resource_name} s ID %{resource_id}' - delete: '%{user_name} smazal %{resource_name} s ID %{resource_id}' - update: '%{user_name} aktualizoval %{resource_name} s ID %{resource_id}' - format_error: musí začínat „/“ a obsahovat pouze písmena, číslice, pomlčky a - podtržítka. - verifications: - authorizations: - first_login: - actions: - direct_verifications: Přímé ověření - decidim_navbar_links: - admin: - menu: - navbar_links: Odkazy navigační lišty - devise: - failure: - user: - ldap_invalid: Neplatné jméno nebo heslo - mailer: - direct_invite: - subject: Pokyny pro pozvání - layouts: - decidim: - admin: - settings: - title: Nadpis - footer: - revoke_cookies: Odmítnutí přijetí cookies - user_profile: - time_tracker: Moje dobrovolnická práce + activerecord: + models: + decidim/calendar: + one: Kalendář + other: Kalendáře diff --git a/decidim/image.d/srv/decidim-app/config/secrets.yml b/decidim/image.d/srv/decidim-app/config/secrets.yml index 5944431..823cc5c 100644 --- a/decidim/image.d/srv/decidim-app/config/secrets.yml +++ b/decidim/image.d/srv/decidim-app/config/secrets.yml @@ -10,6 +10,16 @@ # Make sure the secrets in this file are kept private # if you're sharing your code publicly. +elections_default: &elections_default + bulletin_board_server: <%= ENV["ELECTIONS_BULLETIN_BOARD_SERVER"] || 'http://bulletin-board.lvh.me:8000/api' %> + bulletin_board_public_key: {"kty":"RSA","n":"zMXsZpYPKkDlSmezX898y7zNOaJ7ENIN4kj4UhQ95Vm4HlgTpIs2VMMsO0eqynMaOR_G1mXdqbpbaJtXijBe4V8323QwGm6WVAa71E7pDXa5g6-uo5f8GePitN0YER9y2yNQN4uTaNzJiWV2uLBUYfMdj3SIif31YwLULHAOj3B_oleFK8coE_Qr3NzATcYBmsqE8AR4NljxTO6KDmP1SLdf5GBOBhOAIFbnL_Kpj2xkm7MS3hjMVKpiRhqA1UgX5oKZ8ixBv46fNJF0pBsHi3fHNjK9oZzgdx_AI-YFpdE_40-8bh_g9sWzxacqOM2-MdQLHbvRPEVltO3E8tr6I5YWrylcP7l9VD8OJeqjq2qFYHnGYdmLoD2XuXmI9EuBvSb9H4-qcartxZSIQCimKib_fxZvgrG1FSRRhK6YpvIdGv4-G2zfCCRsC4XD80TYI2bf-oYCoy7eU3_eVHFMV2yg4p1Wnuw2Vgq0edPL_bKaV9JvGx7F-U5juxNN0WZR9LzbPl4ReejzN95lyHgbj0nTH_u3bSpZmgJrQF-PwdnPcG46deVjJgUeosrlC4lQxVrRz0GL58BuFunnz2uYDBDrcJCiG60EbdkAFHjOcXU4wrUWATin7je_aqdBXhSnkTafcJAMvL7Y2Ld7vDge8nLqjAVlAi5am3rN0kqKT6M","e":"AQAB","kid":"a8e86f02ca27e1861bfc49e2a9a4614ca9068f8efdb6d42d19d3aab0eb2a31be"} + authority_private_key: {"kty":"RSA","n":"pNgMt8lnPDD3TlWYGhRiV1oZkPQmnLdiUzwyb_-35qKD9k-HU86xo0uSgoOUWkBtnvFscq8zNDPAGAlZVokaN_z9ksZblSce0LEl8lJa3ICgghg7e8vg_7Lz5dyHSQ3PCLgenyFGcL401aglDde1Xo4ujdz33Lklc4U9zoyoLUI2_viYmNOU6n5Mn0sJd30FeICMrLD2gX46pGe3MGug6groT9EvpKcdOoJHKoO5yGSVaeY5-Bo3gngvlgjlS2mfwjCtF4NYwIQSd2al-p4BKnuYAVKRSgr8rYnnjhWfJ4GsCaqiyXNi5NPYRV6gl_cx_1jUcA1rRJqQR32I8c8QbAXm5qNO4URcdaKys9tNcVgXBL1FsSdbrLVVFWen1tfWNfHm-8BjiWCWD79-uk5gI0SjC9tWvTzVvswWXI5weNqqVXqpDydr46AsHE2sG40HRCR3UF3LupT-HwXTcYcOZr5dJClJIsU3Hrvy4wLssub69YSNR1Jxn-KX2vUc06xY8CNIuSMpfufEq5cZopL6O2l1pRsW1FQnF3s078_Y9MaQ1gPyBo0IipLBVUj5IjEIfPuiEk4jxkiUYDeqzf7bAvSFckp94yLkRWTs_pEZs7b_ogwRG6WMHjtcaNYe4CufhIm9ekkKDeAWOPRTHfKNmohRBh09XuvSjqrx5Z7rqb8","e":"AQAB","kid":"b8dba1459df956d60107690c34fa490db681eac4f73ffaf6e4055728c02ddc8e","d":"Uh3KIBe1VJez6pLbBUrYPlmE2N-3CGSWF46qNX62lq6ofB_b8xTJCuaPonJ3iYoE0aPEeVDrefq5m3-0wFXl-LQPgXlMj_1_7UgB9jeuSZ_N1WDK6P2EJPx5YS09O1gkpVxK7Mx_sZQe77wmUUH-eI7tg__qfUrB7E0Yn_cTpBATI2qlYaQsz6-A7e1MVvixq_ilmzVAZvuBrPp5mCZVb6FlXrV_PU9-UPIrD3O1La1lfO6SPBSbSGQkmGHwD2QbkHn9D_R_Vs-z_0TkM_dX71jIPQhrle3pN222KuJ8eQqwr9QP6biQMBuT5eKgr3MVtfUDRpp4sCEq9GIFwSd8LvbmGPrOoz8ueOEQ05nisIBQuOTYiWpYs2CEV062HR1bLFRLDUcSlflGNr0bgiXTUFx4wxRG06OaI-rQ6nG3M8TE0I0phMNCG3c7YyV28z_k2I65oQF9aKtiwFwc0YsUSGPTOFZGWHuCCPLm0lFeebpI_JIYqIv70NJxbSZEBY8DAIqZPqP6y_CRo2_C7piCgsjg9pnF8cp45vz4L6DWZ0Tumc_5aRuqIBkYXXwP9TjqhzxL-2SQHIqUAjj6Y6S35tZT6ekZSbnPIKX_e42y6bDT_Ztf01QfKiTkcx3_I8RwOuh6CzJzr72AykQpU3XKOKF1x1GBtYyrno4jG5LgaGE","p":"1UARZ-rRnpKG5NHKlXTys3irCy-d91edHL3fEIzDKvhMRQCIWh7dt8l0_sIpcBF-EbVilbFKj7yfgZBTr8EkAXHgweayK8rnlMqi2jte1_u-5DBtrGVVUTSQltSLDOZHK5QfUxVK6Bbk8K5ROLvef91oNgnSNWNOeoCZdlS55nMZcAgY_6mxSuuMq54Tgy8o4Ip890-ZEYY6OSFXhU-ieoGO4Jw--c6QzmCa3gGo2oVClidMNaM1jquK4Pj6xaoxR2NWeIX9Ix7k1P2B24pegyHXjSIpQ6JYdn352VViXi2tx7TTJh6ClNVjgoRmL4Gfy_IJNx0GhF5OB3yughUc7w","q":"xePJGBt466qM9F0BPxWFjyWbIs_GNXr-lBGASui0Z94cfgFbsZwqRsWQEf7jDVQsDNVnPSWZ_Wd6UqoQaIxc0tE8gaokPG6A4EUDyoLaZ231ZydDVoWof8FnPDaJwrcPwZ4R6ZLKGmkfytCZuU9I_9B4uuV0dyjEzKfS-Os3UcLumKPlgJ71OZAb49GTqUHuTePcSJjyYOYXx6eE7i_1m8TjU9Ut18BJNQhLqWmerA6X1ijbR2_syY6GXhGSfciSBH8xVkiUnqXb2jt1bE8nwWw-Sam5ikjzNbXqqs978IcCE5HTddQmy99bwuArA8PLqIFj3OOO1CSo8oyn2XDgMQ","dp":"Diky_rOZN-6DBq7nxQT_GOvqb9O5qbMnu8DgDzlJvJDAf9SJOXLTRmEaY9CA7_A5bvOcmFQtn13nObNb20_4FCB7zGSFcGMI_dh2-Ab5RV5yTrTok4onID1dXKbAlRq1ny825U2Eq-TZTyJEQoA3RkZtpSkBzInLrFbd2f3GWodKKSZggpnCLDd4H-1fXlbDYCXSJpoikAdZ1nFgXnnrUDdKRaAajnwpIYtIvXVewSQYR-BULzunUtIRZt8hx_6FRzhRha9gH_TtPTeYZ_vISuz0Y2rhUpx1Q2kaLlR9M8PUxm47l0xvX3LMKN6h6oWxFtn7wq0qwZ-Bjv24mOrOAQ","dq":"nXGD10hURrwk9W7hxP0sjB2Rdnr06iv3THs4JWFL16_h32bZO1BSWoho_chbgYlMmtFXGFFIWVLxAcAI2gWC_MA4cbmapvIMW2LNh1vgxJW5v95_NuGUlECeEEwcAu1-_b7z5XBCmAy3nLem9sbb_5wv0hMpPH0VRvbnZeBO3SBIkO0lddYCqU-8wN9HqkyoexQleSUnAm1O0iy4GIHT2aEmdNaRaKy2EhmNiTZdZeseZueOvyGPtTVONp2ofacMdcN0z39jr22qo9DWtdusd7nVPOpqkllEF6GrGUeHBnGD92n4YjDuxRnqefu8fXxUFrcLav0p8CNSv9ek291woQ","qi":"w6hfKEBLLHRWPkjajgxZyyetj-UFfVkILRT0plOllJ2JV8whcOXRXbiXH2r8zqMeyMFrrMwmuvv4TVQaruKB0ZQOG7Tz5Lw0RZEREOLnBwc3vSi_iLd-jBz01LdExTpqsAHMkaMQR9x62J8DE1ZNxVdn3ELYKik0f1L2r_WErzhvT1uq69HAybUp6WHcFYH0PSqHg4LOneXAdU1_g-ji2Zn9dlA_2oYGQ5S6JXPV7v2IVbEFpxyVD1lPbFT0iKhyZZevictjgD_JGHveIVqsq5w0Csyz08h0oEW9hYEq-4bquMxSf18gjldoS5uQPD7FUECgL8bxsCdc4hP6UEKYGw"} + authority_name: "Decidim Test Authority" + authority_api_key: "89Ht70GZNcicu8WEyagz_rRae6brbqZAGuBEICYBCii-PTV3MAstAtx1aRVe5H5YfODi-JgYPvyf9ZMH7tOeZ15e3mf9B2Ymgw7eknvBFMRP213YFGo1SPn_C4uLK90G" + scheme_name: "dummy" + quorum: 2 + number_of_trustees: 3 + default: &default omniauth: facebook: @@ -32,11 +42,8 @@ default: &default server: <%= ENV["ETHERPAD_SERVER"] %> api_key: <%= ENV["ETHERPAD_API_KEY"] %> api_version: "1.2.1" - bulletin_board: - identification_private_key: | - - server: - api_key: + elections: + <<: *elections_default twilio: account_sid: <%= ENV["TWILIO_ACCOUNT_SID"] %> auth_token: <%= ENV["TWILIO_AUTH_TOKEN"] %> @@ -44,7 +51,7 @@ default: &default development: <<: *default - secret_key_base: 8c1ae960e908eeb50b0a0d95ad2318277a5a8ffb3202c242ab5e8642946c8c4cffba1a8afa54e9fbe4386ab2af880ad4fd2a467d3e2e37c9b279e2badb9bfbb9 + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> omniauth: developer: enabled: true @@ -52,7 +59,7 @@ development: test: <<: *default - secret_key_base: e6f5a697254308dcb178c4945e55e6846d4770ef2ec2d07b9926313aebc7928bcc2d7331c273a2f02b730943adb304d8dc9cd54ea55be90e31a07f2690f20636 + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> omniauth: facebook: enabled: true @@ -66,6 +73,10 @@ test: enabled: true client_id: client_secret: + elections: + <<: *elections_default + bulletin_board_server: <%= ENV["ELECTIONS_BULLETIN_BOARD_SERVER"] || 'http://bulletin-board.lvh.me:5017/api' %> + # Do not keep production secrets in the repository, # instead read values from the environment. @@ -79,3 +90,12 @@ production: smtp_port: "587" smtp_starttls_auto: true smtp_authentication: "plain" + elections: + bulletin_board_server: <%= ENV["BULLETIN_BOARD_SERVER"] %> + bulletin_board_public_key: <%= ENV["BULLETIN_BOARD_PUBLIC_KEY"] %> + authority_api_key: <%= ENV["BULLETIN_BOARD_API_KEY"] %> + authority_name: <%= ENV["AUTHORITY_NAME"] %> + authority_private_key: <%= ENV["AUTHORITY_PRIVATE_KEY"] %> + scheme_name: <%= ENV["ELECTIONS_SCHEME_NAME"] %> + number_of_trustees: <%= ENV["ELECTIONS_NUMBER_OF_TRUSTEES"] %> + quorum: <%= ENV["ELECTIONS_QUORUM"] %> diff --git a/docker-compose.yml b/docker-compose.yml index d93cdc2..eb710d3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,7 +4,7 @@ services: decidim: build: decidim - image: decidim:0.23.6-210515 + image: decidim:0.26.2-220910 restart: unless-stopped depends_on: - decidim-postgres @@ -20,7 +20,7 @@ services: - decidim_uploads:/srv/decidim-app/public/uploads decidim-postgres: - image: postgres:12-alpine + image: postgres:14-alpine restart: unless-stopped environment: - POSTGRES_USER