Skip to content

Commit 02c7579

Browse files
authored
Merge pull request #453 from codeforjapan/develop
feat: add support for heic format
2 parents 540a9ff + 13f3c80 commit 02c7579

File tree

19 files changed

+218
-93
lines changed

19 files changed

+218
-93
lines changed

.github/workflows/deploy.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
eb-environment-name: ${{ steps.output-app-env.outputs.eb-environment-name }}
1818

1919
steps:
20-
- uses: actions/checkout@v2
20+
- uses: actions/checkout@v3
2121

2222
- name: Set env to staging
2323
id: set-env-staging
@@ -45,7 +45,7 @@ jobs:
4545
needs: create-app-env
4646

4747
steps:
48-
- uses: actions/checkout@v2
48+
- uses: actions/checkout@v3
4949

5050
- name: Configure AWS Credentials
5151
uses: aws-actions/configure-aws-credentials@v1
@@ -77,7 +77,7 @@ jobs:
7777
- build
7878

7979
steps:
80-
- uses: actions/checkout@v2
80+
- uses: actions/checkout@v3
8181

8282
- name: Configure AWS Credentials
8383
uses: aws-actions/configure-aws-credentials@v1

.github/workflows/lint.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212
runs-on: ubuntu-latest
1313

1414
steps:
15-
- uses: actions/checkout@v2
15+
- uses: actions/checkout@v3
1616
with:
1717
fetch-depth: 1
1818
- name: apt-get

.github/workflows/rails-test.yml

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ jobs:
1717
DATABASE_USERNAME: postgres
1818
DATABASE_PASSWORD: postgres
1919
RAILS_ENV: test
20+
IMAGEMAGICK_SRC: 7.1.0-50.tar.gz
2021

2122
services:
2223
db:
@@ -37,21 +38,51 @@ jobs:
3738
- 6379/tcp
3839

3940
steps:
40-
- uses: actions/checkout@v2
41+
- uses: actions/checkout@v3
4142
with:
4243
fetch-depth: 1
4344
- name: apt-get
4445
run: |
4546
sudo apt-get update -y
4647
sudo apt-get -yqq install libpq-dev postgresql-client
48+
49+
- name: remove imagemagick 6
50+
run: sudo apt remove imagemagick
51+
- name: setup imagemagick 7
52+
run: |
53+
sudo sed -Ei 's/^# deb-src /deb-src /' /etc/apt/sources.list
54+
sudo apt update
55+
sudo apt install build-essential
56+
sudo apt build-dep imagemagick
57+
sudo apt install libwebp-dev libopenjp2-7-dev librsvg2-dev libde265-dev
58+
- name: install libheif
59+
run: |
60+
git clone https://github.com/strukturag/libheif.git
61+
cd libheif
62+
./autogen.sh
63+
./configure --disable-go --disable-examples
64+
make
65+
sudo make install
66+
- name: install imagemagick 7
67+
run: |
68+
wget https://github.com/ImageMagick/ImageMagick/archive/refs/tags/${IMAGEMAGICK_SRC}
69+
tar xf ${IMAGEMAGICK_SRC}
70+
cd ImageMagick-7*
71+
./configure
72+
make
73+
sudo make install
74+
sudo ldconfig
75+
- name: check imagemagick
76+
run: convert -version
77+
4778
- name: Set up Ruby 2.7
4879
uses: ruby/setup-ruby@v1
4980
with:
5081
ruby-version: 2.7
5182
bundler-cache: true
5283

5384
- name: setup Node
54-
uses: actions/setup-node@v2
85+
uses: actions/setup-node@v3
5586
with:
5687
node-version: 16.9.1
5788
cache: 'yarn'

Gemfile

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,23 @@ gem "decidim", "0.25.2"
88

99
gem "decidim-comments", path: "decidim-comments"
1010

11-
gem "decidim-decidim_awesome", "~> 0.8.1"
11+
gem "decidim-decidim_awesome", git: "https://github.com/codeforjapan/decidim-module-decidim_awesome.git", branch: "v0.8.3-2022-10-20"
1212

1313
gem "decidim-term_customizer", git: "https://github.com/codeforjapan/decidim-module-term_customizer.git", branch: "025-ja"
1414

1515
gem "bootsnap"
1616

1717
gem "puma", ">= 5.0.0"
18+
gem "puma_worker_killer"
19+
1820
gem "uglifier", "~> 4.1"
1921

2022
gem "faker", "~> 2.14"
2123

2224
gem "wicked_pdf", "~> 2.1"
2325

2426
gem "deface"
27+
gem "image_processing"
2528
gem "newrelic_rpm"
2629

2730
gem "omniauth-line_login", path: "omniauth-line_login"

Gemfile.lock

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
GIT
2+
remote: https://github.com/codeforjapan/decidim-module-decidim_awesome.git
3+
revision: 658d226e9ed164ffdca2efbde4dfaf79b02c295e
4+
branch: v0.8.3-2022-10-20
5+
specs:
6+
decidim-decidim_awesome (0.8.3)
7+
decidim-admin (>= 0.25.0, < 0.27)
8+
decidim-core (>= 0.25.0, < 0.27)
9+
sassc (~> 2.3)
10+
111
GIT
212
remote: https://github.com/codeforjapan/decidim-module-term_customizer.git
313
revision: a0ccb0b32d6d7943af90ff4f8029fd4e7b2afa8f
@@ -293,10 +303,6 @@ GEM
293303
decidim-debates (0.25.2)
294304
decidim-comments (= 0.25.2)
295305
decidim-core (= 0.25.2)
296-
decidim-decidim_awesome (0.8.2)
297-
decidim-admin (>= 0.25.0, < 0.27)
298-
decidim-core (>= 0.25.0, < 0.27)
299-
sassc (~> 2.3)
300306
decidim-dev (0.25.2)
301307
axe-core-rspec (~> 4.1.0)
302308
byebug (~> 11.0)
@@ -459,6 +465,8 @@ GEM
459465
activesupport (>= 4.1, < 7.1)
460466
railties (>= 4.1, < 7.1)
461467
geocoder (1.7.5)
468+
get_process_mem (0.2.7)
469+
ffi (~> 1.0)
462470
globalid (1.0.0)
463471
activesupport (>= 5.0)
464472
graphql (1.13.12)
@@ -610,6 +618,9 @@ GEM
610618
public_suffix (4.0.7)
611619
puma (5.6.4)
612620
nio4r (~> 2.0)
621+
puma_worker_killer (0.3.1)
622+
get_process_mem (~> 0.2)
623+
puma (>= 2.7)
613624
racc (1.6.0)
614625
rack (2.2.3)
615626
rack-attack (6.6.1)
@@ -852,7 +863,7 @@ DEPENDENCIES
852863
byebug (~> 11.0)
853864
decidim (= 0.25.2)
854865
decidim-comments!
855-
decidim-decidim_awesome (~> 0.8.1)
866+
decidim-decidim_awesome!
856867
decidim-dev (= 0.25.2)
857868
decidim-term_customizer!
858869
decidim-user_extension!
@@ -862,12 +873,14 @@ DEPENDENCIES
862873
faker (~> 2.14)
863874
figaro
864875
fog-aws
876+
image_processing
865877
letter_opener_web (~> 1.3)
866878
listen (~> 3.1)
867879
newrelic_rpm
868880
omniauth-line_login!
869881
omniauth-rails_csrf_protection
870882
puma (>= 5.0.0)
883+
puma_worker_killer
871884
rspec-rails
872885
rubocop-faker
873886
rubyzip (>= 1.0.0)

app/packs/src/decidim/decidim_awesome/editors/editor.js

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ export function createQuillEditor(container) {
355355
modules: ["Resize", "DisplaySize"]
356356
}
357357
modules.imageUpload = {
358-
url: $(container).data("uploadImagesPath") || DecidimAwesome.editor_uploader_path,
358+
url: DecidimAwesome.editor_uploader_path,
359359
method: "POST",
360360
name: "image",
361361
withCredentials: false,
@@ -366,7 +366,18 @@ export function createQuillEditor(container) {
366366
},
367367
callbackKO: (serverError) => {
368368
$("div.ql-toolbar").last().removeClass("editor-loading")
369-
console.error(`Image upload error: ${serverError.message}`);
369+
let msg = serverError && serverError.body;
370+
try {
371+
msg = JSON.parse(msg).message;
372+
} catch (e) { console.error("Parsing error", e); }
373+
console.error(`Image upload error: ${msg}`);
374+
let $p = $(`<p class="text-alert help-text">${msg}</p>`);
375+
$(container).after($p)
376+
setTimeout(() => {
377+
$p.fadeOut(1000, () => {
378+
$p.destroy();
379+
});
380+
}, 3000);
370381
},
371382
checkBeforeSend: (file, next) => {
372383
$("div.ql-toolbar").last().addClass("editor-loading")

app/previewers/heic_previewer.rb

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# frozen_string_literal: true
2+
3+
class HeicPreviewer < ActiveStorage::Previewer
4+
CONTENT_TYPES = %w(image/heic image/heif image/heic-sequence image/heif-sequence).freeze
5+
6+
class << self
7+
def accept?(blob)
8+
CONTENT_TYPES.include?(blob.content_type) && minimagick_exists?
9+
end
10+
11+
def minimagick_exists?
12+
return @minimagick_exists if @minimagick_exists.present?
13+
14+
@minimagick_exists = defined?(ImageProcessing::MiniMagick)
15+
Rails.logger.error "#{self.class} :: MiniMagick is not installed" unless @minimagick_exists
16+
17+
@minimagick_exists
18+
end
19+
end
20+
21+
def preview(**_options)
22+
download_blob_to_tempfile do |input|
23+
begin
24+
io = ImageProcessing::MiniMagick.source(input).convert("png").call
25+
rescue ImageProcessing::Error
26+
io = ImageProcessing::MiniMagick.loader(page: 0).source(input).convert("png").call
27+
end
28+
yield io: io, filename: "#{blob.filename.base}.png", content_type: "image/png"
29+
end
30+
end
31+
end

config/initializers/active_storage.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# frozen_string_literal: true
2+
3+
Rails.application.configure do
4+
config.active_storage.previewers << HeicPreviewer
5+
config.active_storage.variable_content_types << "image/heic"
6+
config.active_storage.variable_content_types << "image/heif"
7+
end

config/initializers/decidim.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,4 +242,6 @@
242242
Decidim.register_assets_path File.expand_path("app/packs", Rails.application.root)
243243

244244
# Set max_complexity of GraphQL::Schema
245-
Decidim::Api::Schema.max_complexity = 100_000
245+
Rails.application.config.to_prepare do
246+
Decidim::Api::Schema.max_complexity = 100_000
247+
end

config/puma.rb

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,25 @@
2020
# Specifies the `pidfile` that Puma will use.
2121
pidfile ENV.fetch("PIDFILE", "tmp/pids/server.pid")
2222

23+
before_fork do
24+
PumaWorkerKiller.config do |config|
25+
config.ram = 2048
26+
config.frequency = 60
27+
config.percent_usage = 0.9
28+
config.rolling_restart_frequency = 24 * 60 * 60
29+
config.reaper_status_logs = true
30+
config.pre_term = ->(worker) { puts "Worker #{worker.index}(#{worker.pid}) being killed" }
31+
end
32+
PumaWorkerKiller.start
33+
end
34+
2335
# Specifies the number of `workers` to boot in clustered mode.
2436
# Workers are forked webserver processes. If using threads and workers together
2537
# the concurrency of the application would be max `threads` * `workers`.
2638
# Workers do not work on JRuby or Windows (both of which do not support
2739
# processes).
2840
#
29-
# workers ENV.fetch("WEB_CONCURRENCY") { 2 }
41+
workers ENV.fetch("WEB_CONCURRENCY", 2)
3042

3143
# Use the `preload_app!` method when specifying a `workers` number.
3244
# This directive tells Puma to first boot the application and load code

docker-compose-etherpad.yml

Lines changed: 0 additions & 75 deletions
This file was deleted.

docker-compose.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ services:
1111
nginx-proxy:
1212
image: nginx:1.21
1313
volumes:
14-
- ./deployments/etc/nginx/nginx.conf:/etc/nginx/nginx.conf
15-
- ./deployments/etc/nginx/conf.d:/etc/nginx/conf.d
14+
- ./etc/nginx/nginx.conf:/etc/nginx/nginx.conf
15+
- ./etc/nginx/conf.d:/etc/nginx/conf.d
1616
environment:
1717
TZ: Asia/Tokyo
1818
ports:

0 commit comments

Comments
 (0)