Compare commits
546 Commits
chapril
...
chapril-v3
Author | SHA1 | Date | |
---|---|---|---|
7665cdd4fd | |||
5a2dfb4098 | |||
10fd3fa7a2 | |||
|
2f368b44ca | ||
|
e9d301119b | ||
|
fae1153589 | ||
|
b7a532414c | ||
|
fb2f01dd45 | ||
|
a8403afd1c | ||
|
932de7157c | ||
|
9ab5a64be8 | ||
|
0098ecb30c | ||
|
786245d592 | ||
|
9d5d3911f3 | ||
|
17fd0726f8 | ||
|
f6e6b8f737 | ||
|
51ca77c785 | ||
|
a00716a382 | ||
|
1dc675036b | ||
|
d4cc31018a | ||
|
991599da6d | ||
|
4e6134cb33 | ||
|
ab9f6fd0f0 | ||
|
89e15b20c9 | ||
|
ce9a310d91 | ||
|
b261756bae | ||
|
1400eadfb5 | ||
|
3d99a41104 | ||
|
1854063f09 | ||
|
726ed51ed1 | ||
|
5cddce7b15 | ||
|
275261d600 | ||
|
16fa1acf24 | ||
|
5929a85ec7 | ||
|
c335e7069b | ||
|
32d3fa4dfc | ||
|
4008ef4271 | ||
|
9c39de107a | ||
|
4d5f7c7205 | ||
|
1907fb49b0 | ||
|
cd1fb561a1 | ||
|
937abce9a9 | ||
|
84c15a9fd1 | ||
|
a3ebdad445 | ||
|
f1fdfea0cb | ||
|
59ad17bc64 | ||
|
d872dcb639 | ||
|
af6b605f02 | ||
|
2f591f043f | ||
|
b2471d0553 | ||
|
7d2683d50b | ||
|
515b26c52b | ||
|
822f024dd8 | ||
|
01691ab360 | ||
|
11aa50be27 | ||
|
17a6726299 | ||
|
bce5d5a1c8 | ||
|
9328df2103 | ||
|
fc16014b2a | ||
|
6f9940a0a0 | ||
|
bce2a4dc3c | ||
|
e93e282524 | ||
|
8f4f303a70 | ||
|
635c35e009 | ||
|
d2c78c5f17 | ||
|
454a6188cc | ||
|
9eab9f1bbb | ||
|
fde0c9b5d8 | ||
|
4073eab201 | ||
|
8e7907ec9e | ||
|
aeaf22a224 | ||
|
2e9414767c | ||
|
7f15f2bad1 | ||
|
f9d21c5a38 | ||
|
6792ee3127 | ||
|
d03a249d55 | ||
|
9d07373134 | ||
|
b5d6165ce1 | ||
|
7ebc16c5ee | ||
|
3e15048843 | ||
|
7a4ff475d5 | ||
|
a16b6f68ba | ||
|
df2a99f040 | ||
|
d129342ad9 | ||
|
02821e806d | ||
|
a94b669849 | ||
|
af10515656 | ||
|
51cf45de0c | ||
|
ef8e3f07c1 | ||
|
2f189612a5 | ||
|
06350a0311 | ||
|
6c88669a7e | ||
|
7fc57978b3 | ||
|
f787a600be | ||
|
3a9f52eb15 | ||
|
7d94a3f7fc | ||
|
0452b44f21 | ||
|
5a30bc2f15 | ||
|
77415ed413 | ||
|
32706150e0 | ||
|
e1469a5eec | ||
|
d861689970 | ||
|
670dd7ac21 | ||
|
ebc5e70b1f | ||
|
4b264534d6 | ||
|
b0af8e5293 | ||
|
a5d42239dd | ||
|
f4ea798c5b | ||
|
c0a31235e7 | ||
|
73e256ada7 | ||
|
50249ef25c | ||
|
ae18648ceb | ||
|
34a0b181f7 | ||
|
035ff134f5 | ||
|
16b1e0080c | ||
|
af3110955d | ||
|
bb86ca5413 | ||
|
7b2eb82d6f | ||
|
1f23bb421e | ||
|
3305ea6667 | ||
|
a74b4aaa7a | ||
|
806f81ad91 | ||
|
0a2307b5a3 | ||
|
196e76c0e3 | ||
|
6e1687a651 | ||
|
97e41a9e47 | ||
|
066e71c517 | ||
|
97895d515b | ||
|
9ff54bae06 | ||
|
ab96dce30f | ||
|
d36db8e18f | ||
|
8f49c66b3f | ||
|
67b63a9a6e | ||
|
1f66c78952 | ||
|
1a649a2df9 | ||
|
1a6967cb7d | ||
|
55777033cf | ||
|
d58adb692a | ||
|
e7e4ed2ac9 | ||
|
84860ca2bf | ||
|
394428cda7 | ||
|
96ba48cdb0 | ||
|
994797c475 | ||
|
f593867d8e | ||
|
da78410039 | ||
|
b860dadbfb | ||
|
e812b4291b | ||
|
30b0d3ca08 | ||
|
dffa8d4197 | ||
|
de8433cdbb | ||
|
83755c4746 | ||
|
40c68bde7f | ||
|
3b552497b4 | ||
|
bb9c0b4753 | ||
|
13ee4fd781 | ||
|
8d3e9f3b4f | ||
|
44863096c1 | ||
|
dbb19a5e01 | ||
|
ef7841a041 | ||
|
a2ef3901f4 | ||
|
b745f34356 | ||
|
ad9d9d33bc | ||
|
8e0f6bd173 | ||
|
bc81b1830d | ||
|
5078f890ce | ||
|
a51b36fb75 | ||
|
d8434ca3d3 | ||
|
1fe4baa6ba | ||
|
7489d60f7f | ||
|
88256bddfe | ||
|
e31433cf83 | ||
|
c1dff8caaa | ||
|
08ce9b6f84 | ||
|
74639e7203 | ||
|
b1cc1a9155 | ||
|
57fac37347 | ||
|
e97206077c | ||
|
f5e81fab3f | ||
|
6058da0d44 | ||
|
4bb90ebb3f | ||
|
770a518ad1 | ||
|
c68c0c2120 | ||
|
f3ac1f7ce1 | ||
|
afd164a449 | ||
|
d75a95cccd | ||
|
7401fc8273 | ||
|
e03ad73c7f | ||
|
29de9b346a | ||
|
62dd1b85b7 | ||
|
34ecb1f3e4 | ||
|
84594459be | ||
|
53fdf99628 | ||
|
4d1c551148 | ||
|
dbf27eee2b | ||
|
58c13131df | ||
|
4bf29f167c | ||
|
f94119b643 | ||
|
ce3fa41505 | ||
|
c009a5cf83 | ||
|
4dede63b83 | ||
|
84009a9530 | ||
|
e69e8a5044 | ||
|
3ddf360e11 | ||
|
30eb37e31b | ||
|
7ee79a00e2 | ||
|
dd3e99bc5e | ||
|
02381f2820 | ||
|
4be5cc787e | ||
|
75296498c4 | ||
|
48da35ee41 | ||
|
dcfe87116e | ||
|
a1726fc12e | ||
|
ae0e3fbdd1 | ||
|
6f9721f9bf | ||
|
c8d5bdd4af | ||
|
2464134977 | ||
|
dc075ccf0d | ||
|
9a135bb67f | ||
|
2e631d3633 | ||
|
be33c3b213 | ||
|
5d507ecf69 | ||
|
1592ae8fe9 | ||
|
1282bbf0f4 | ||
|
8ab8364100 | ||
|
ada67e5f15 | ||
|
d4d572aead | ||
|
c4a7910791 | ||
|
e0127afd2b | ||
|
ecb862f634 | ||
|
470a3e594b | ||
|
695d773d50 | ||
|
9ce618a267 | ||
|
1df02512af | ||
|
b65feade57 | ||
|
720c11c43f | ||
|
2bf8148951 | ||
|
4eb15b5ebf | ||
|
bc6c0e0448 | ||
|
8452b2e096 | ||
|
579bcaba06 | ||
|
fc5b6882ae | ||
|
e420713a6f | ||
|
610570c795 | ||
|
09fce90c6a | ||
|
dfd8094017 | ||
|
8efb17d78e | ||
|
231f99cd1e | ||
|
0bc48560e8 | ||
|
8761556bac | ||
|
d186c116ac | ||
|
bb80b54460 | ||
|
dc2e25deb2 | ||
|
ad46e4dd1d | ||
|
827a90d7fc | ||
|
082435129e | ||
|
2454fe2aa4 | ||
|
688bdccc24 | ||
|
e446df938f | ||
|
3336af225f | ||
|
3b7f0f8acf | ||
|
389fa843e3 | ||
|
cce0406db5 | ||
|
e32611c968 | ||
|
5225431d60 | ||
|
a1b439b724 | ||
|
a743f6a487 | ||
|
2e74195b0e | ||
|
5ab2507d4a | ||
|
cec5aa8368 | ||
|
cfe8aa067e | ||
|
7a39af13f8 | ||
|
1f1b8096eb | ||
|
e23cef2763 | ||
|
e2e0c42a02 | ||
|
8b53d40928 | ||
|
c93047824c | ||
|
ea6477ee19 | ||
|
e2dfa29dde | ||
|
cfb6871418 | ||
|
f0c1444be3 | ||
|
c9fffca046 | ||
|
a6fa5f9402 | ||
|
6a306e88a5 | ||
|
25e5b2eb2d | ||
|
94c4a78bb4 | ||
|
0f14bc5d90 | ||
|
c89b424dbf | ||
|
8d10363c0e | ||
|
ad0fc61994 | ||
|
e1e9cf4512 | ||
|
3822febb62 | ||
|
c8493585c6 | ||
|
cb083ab2f8 | ||
|
e47904d17d | ||
|
727a0175c6 | ||
|
a2289c4d03 | ||
|
0ccac625d4 | ||
|
03e1a0ada8 | ||
|
23ace34149 | ||
|
0d019d40ec | ||
|
8ae0a929c7 | ||
|
d8103fb1a5 | ||
|
5bce26980a | ||
|
199add5743 | ||
|
699465199e | ||
|
fb0238d1b7 | ||
|
e4ba0f21ee | ||
|
fca3720bdb | ||
|
c051e26380 | ||
|
76ff11ceae | ||
|
ac7b994b6f | ||
|
ae5dab8433 | ||
|
b46ff4d458 | ||
|
156490af62 | ||
|
07a1118fab | ||
|
f91e728b91 | ||
|
91e7bd8b68 | ||
|
ad4a9d4dff | ||
|
8c36173027 | ||
|
36932f601d | ||
|
3400ee0ce0 | ||
|
19a17494ae | ||
|
06caab9d56 | ||
|
34715d5f45 | ||
|
be2fa3a547 | ||
|
68378c1860 | ||
|
c23c2bdba6 | ||
|
74581912f3 | ||
|
528744d765 | ||
|
9fe816ebcf | ||
|
557e12948b | ||
|
e22cb8c3bd | ||
|
ff1fbdfdba | ||
|
b514d417c0 | ||
|
8eddb8b230 | ||
|
e94a537f30 | ||
|
3928c2fb2a | ||
|
475820472f | ||
|
800e136aae | ||
|
9b3674922e | ||
|
3e8d5884a2 | ||
|
d23b3ad5f6 | ||
|
15766c4e16 | ||
|
6f9a941b18 | ||
|
11a4275667 | ||
|
e01d7814a0 | ||
|
b769341944 | ||
|
6f6a379a06 | ||
|
0d6626d55a | ||
|
200e4d2c56 | ||
|
7ccf42e313 | ||
|
2acc1c3492 | ||
|
1a31d9b54e | ||
|
0758995ac7 | ||
|
c080795955 | ||
|
0265e0220e | ||
|
04edb51a04 | ||
|
d665abcc5d | ||
|
620008ee0d | ||
|
fee4f9add8 | ||
|
1a9aef00e5 | ||
|
456e987af8 | ||
|
ec9342744f | ||
|
893405b219 | ||
|
10798f60c3 | ||
|
a6a49c27bf | ||
|
d483b1824e | ||
|
0cbe0b8fad | ||
|
b8942e7b4c | ||
|
2fdff72062 | ||
|
5055bd4adc | ||
|
1601153062 | ||
|
f0c8fa2525 | ||
|
4f1465e84d | ||
|
ca9826e299 | ||
|
4a16f572d8 | ||
|
3e8029cf38 | ||
|
ede03b9f54 | ||
|
fdc4c94465 | ||
|
ea67a0b3ba | ||
|
0663708447 | ||
|
89e158e9f1 | ||
|
f6b0a4a55f | ||
|
86ec65acbe | ||
|
20dd02e633 | ||
|
50c2d62af9 | ||
|
63305d39f9 | ||
|
661f7a15cf | ||
|
e8bdd988ed | ||
|
8ba8961ad7 | ||
|
77d2f86e03 | ||
|
ccb3aab7d7 | ||
|
393438278f | ||
|
763a2cce43 | ||
|
4b0375fd61 | ||
|
1975ca7739 | ||
|
9634b07910 | ||
|
8915a5caad | ||
|
895aad6ea7 | ||
|
92dcc0780d | ||
|
fc6244bbcd | ||
|
26c183e208 | ||
|
0f05afc643 | ||
|
600de5447d | ||
|
cbce14c9d8 | ||
|
1087e19ee5 | ||
|
680f812bdf | ||
|
6f7d5f649b | ||
|
a37bab3b84 | ||
|
530539c631 | ||
|
22dbfad98c | ||
|
83d518579b | ||
|
c2c938c865 | ||
|
280b255529 | ||
|
c35a066368 | ||
|
88b4f98c41 | ||
|
6675c62d94 | ||
|
d2372d5700 | ||
|
009f90e0d7 | ||
|
bbbaa81a6e | ||
|
655ae4f9a1 | ||
|
6a9fba7db8 | ||
|
151a7e54ae | ||
|
86ca52c2cb | ||
|
35c5be3a32 | ||
|
8aa6dcc081 | ||
|
4cd6c3142e | ||
|
130f27b18a | ||
|
8ccb9050f0 | ||
|
d0d33dbc96 | ||
|
d97927da13 | ||
|
93921be722 | ||
|
eecb04516e | ||
|
b36ce27bbe | ||
|
d43e7f2c34 | ||
|
d12e8fe97d | ||
|
eb7c6d339f | ||
|
d2b59e6444 | ||
|
07b2447a07 | ||
|
0e7ff25333 | ||
|
4db13046b7 | ||
|
8812122168 | ||
|
ce38361d65 | ||
|
45a477ee46 | ||
|
48935e2168 | ||
|
0041face54 | ||
|
f36700c87a | ||
|
551f53f849 | ||
|
7ef37c040c | ||
|
2bf0dd482b | ||
|
ec812bf379 | ||
|
d10aa4106f | ||
|
e787bf36ab | ||
|
f04d74295b | ||
|
073d99392f | ||
|
61acdc6a5b | ||
|
32cc3eb738 | ||
|
73e992f1b3 | ||
|
7b693dd4ae | ||
|
0c2f2df228 | ||
|
efe9f1df66 | ||
|
b0c3e8cce6 | ||
|
fd1501af1c | ||
|
cc335560c8 | ||
|
f9c44124d1 | ||
|
bfc936f57c | ||
|
2eee09bf4b | ||
|
ffac91a027 | ||
|
e07f88277b | ||
|
c72f050993 | ||
|
baac00f678 | ||
|
b0f309d271 | ||
|
7868bdb803 | ||
|
df7430a19b | ||
|
2503e10b7c | ||
|
d11cba4ad4 | ||
|
444e0d6a0c | ||
|
be0b3245bf | ||
|
d818557469 | ||
|
4f13934d43 | ||
|
a8af226e1a | ||
|
ff40aa5d65 | ||
|
6e7359aebf | ||
|
754e44f0a5 | ||
|
4f9e0911e7 | ||
|
d8cf49e315 | ||
|
e893f3f089 | ||
|
9d00aff619 | ||
|
57c3df43ff | ||
|
ee20e03cc2 | ||
|
56b3df37ab | ||
|
1694ca2dc3 | ||
|
0f38dca6c6 | ||
|
5bb796270a | ||
|
032311e1c0 | ||
|
de6958ebc8 | ||
|
3d17f31cef | ||
|
8879a8306b | ||
|
ffc052aa83 | ||
|
cddea8911a | ||
|
412a3ae822 | ||
|
b4b97aeb30 | ||
|
8f4099ee33 | ||
|
38a9635a7e | ||
|
e24446aef1 | ||
|
91b801d177 | ||
|
f70dc4e61d | ||
|
68973b91d9 | ||
|
86925833ef | ||
|
6aba0af3ec | ||
|
ed196d9b84 | ||
|
5eadbbaae9 | ||
|
8ae859e0c3 | ||
|
a46ce1352d | ||
|
1457fd4b97 | ||
|
c2f7fbc78f | ||
|
5e6dc16335 | ||
|
aa107f4a89 | ||
|
0a9ff32443 | ||
|
f8efcc1d63 | ||
|
337adf83b2 | ||
|
fa7a10bd13 | ||
|
212931b8a0 | ||
|
86fbcaff40 | ||
|
324cf3e5e2 | ||
|
4917185b82 | ||
|
d7e2e82ea6 | ||
|
958e7d5264 | ||
|
c01a4fdc6f | ||
|
018f3f35d6 | ||
|
18d4b73d91 | ||
|
494e791a99 | ||
|
06bc5fc4c3 | ||
|
2a052fddd6 | ||
|
9f34d1c538 | ||
|
4e7284b486 | ||
|
4728a7358c | ||
|
44789189d7 | ||
|
59147af19b | ||
|
7a1b886f09 | ||
|
c6cc85e51e | ||
|
5299e10afe | ||
|
829628b25f | ||
|
9e1c8b475e | ||
|
cf182c2aed | ||
|
00424d64c9 |
137
.gitlab-ci.yml
@ -4,6 +4,7 @@ stages:
|
||||
- install
|
||||
- check
|
||||
- build-js
|
||||
- sentry
|
||||
- test
|
||||
- docker
|
||||
- package
|
||||
@ -94,6 +95,21 @@ build-frontend:
|
||||
needs:
|
||||
- lint-front
|
||||
|
||||
sentry-commit:
|
||||
stage: sentry
|
||||
image: getsentry/sentry-cli
|
||||
script:
|
||||
- echo "Create a new release $CI_COMMIT_TAG"
|
||||
- sentry-cli releases new $CI_COMMIT_TAG
|
||||
- sentry-cli releases set-commits $CI_COMMIT_TAG --auto
|
||||
- sentry-cli releases files $CI_COMMIT_TAG upload-sourcemaps priv/static/assets/
|
||||
- sentry-cli releases finalize $CI_COMMIT_TAG
|
||||
- echo "Finalized release for $CI_COMMIT_TAG"
|
||||
needs:
|
||||
- build-frontend
|
||||
only:
|
||||
- tags@framasoft/mobilizon
|
||||
|
||||
deps:
|
||||
stage: check
|
||||
before_script:
|
||||
@ -127,14 +143,14 @@ exunit:
|
||||
- test-junit-report.xml
|
||||
expire_in: 30 days
|
||||
|
||||
jest:
|
||||
vitest:
|
||||
stage: test
|
||||
needs:
|
||||
- lint-front
|
||||
before_script:
|
||||
- yarn --cwd "js" install --frozen-lockfile
|
||||
script:
|
||||
- yarn --cwd "js" run test:unit --no-color --ci --reporters=default --reporters=jest-junit
|
||||
- yarn --cwd "js" run coverage --reporter=default --reporter=junit --outputFile.junit=./junit.xml
|
||||
artifacts:
|
||||
when: always
|
||||
paths:
|
||||
@ -144,26 +160,33 @@ jest:
|
||||
- js/junit.xml
|
||||
expire_in: 30 days
|
||||
|
||||
# cypress:
|
||||
# stage: test
|
||||
# services:
|
||||
# - name: postgis/postgis:13.3
|
||||
# alias: postgres
|
||||
# variables:
|
||||
# MIX_ENV=e2e
|
||||
# script:
|
||||
# - mix ecto.create
|
||||
# - mix ecto.migrate
|
||||
# - mix run priv/repo/e2e.seed.exs
|
||||
# - mix phx.server &
|
||||
# - cd js
|
||||
# - npx wait-on http://localhost:4000
|
||||
# - if [ -z "$CYPRESS_KEY" ]; then npx cypress run; else npx cypress run --record --parallel --key $CYPRESS_KEY; fi
|
||||
# artifacts:
|
||||
# expire_in: 2 day
|
||||
# paths:
|
||||
# - js/tests/e2e/screenshots/**/*.png
|
||||
# - js/tests/e2e/videos/**/*.mp4
|
||||
e2e:
|
||||
stage: test
|
||||
services:
|
||||
- name: postgis/postgis:14-3.2
|
||||
alias: postgres
|
||||
variables:
|
||||
MIX_ENV: "e2e"
|
||||
before_script:
|
||||
- mix deps.get
|
||||
- mix ecto.create
|
||||
- mix ecto.migrate
|
||||
- mix run priv/repo/e2e.seed.exs
|
||||
- cd js && yarn install && yarn run build && npx playwright install && cd ../
|
||||
- mix phx.digest
|
||||
script:
|
||||
- mix phx.server &
|
||||
- cd js
|
||||
- npx wait-on http://localhost:4000
|
||||
- npx playwright test --project $BROWSER
|
||||
parallel:
|
||||
matrix:
|
||||
- BROWSER: ['firefox', 'chromium']
|
||||
artifacts:
|
||||
expire_in: 2 days
|
||||
paths:
|
||||
- js/playwright-report/
|
||||
- js/test-results/
|
||||
|
||||
pages:
|
||||
stage: deploy
|
||||
@ -183,7 +206,7 @@ pages:
|
||||
|
||||
.docker: &docker
|
||||
stage: docker
|
||||
image: docker:20.10.12
|
||||
image: docker:20.10.18
|
||||
variables:
|
||||
DOCKER_TLS_CERTDIR: "/certs"
|
||||
DOCKER_HOST: tcp://docker:2376
|
||||
@ -191,13 +214,13 @@ pages:
|
||||
DOCKER_CERT_PATH: "$DOCKER_TLS_CERTDIR/client"
|
||||
DOCKER_DRIVER: overlay2
|
||||
services:
|
||||
- docker:20.10.12-dind
|
||||
- docker:20.10.18-dind
|
||||
cache: {}
|
||||
before_script:
|
||||
# Install buildx
|
||||
- wget https://github.com/docker/buildx/releases/download/v0.8.1/buildx-v0.8.1.linux-amd64
|
||||
- wget https://github.com/docker/buildx/releases/download/v0.9.1/buildx-v0.9.1.linux-amd64
|
||||
- mkdir -p ~/.docker/cli-plugins/
|
||||
- mv buildx-v0.8.1.linux-amd64 ~/.docker/cli-plugins/docker-buildx
|
||||
- mv buildx-v0.9.1.linux-amd64 ~/.docker/cli-plugins/docker-buildx
|
||||
- chmod a+x ~/.docker/cli-plugins/docker-buildx
|
||||
# Create env
|
||||
- docker context create tls-environment
|
||||
@ -216,29 +239,47 @@ build-docker-main:
|
||||
rules:
|
||||
- if: '$CI_PROJECT_NAMESPACE != "framasoft"'
|
||||
when: never
|
||||
- if: '$CI_PIPELINE_SOURCE == "schedule"'
|
||||
- if: '$CI_PIPELINE_SOURCE == "schedule" || $CI_PIPELINE_TRIGGERED == "true"'
|
||||
script:
|
||||
- docker buildx build --push --platform linux/amd64 -t framasoft/mobilizon:main -f docker/production/Dockerfile .
|
||||
|
||||
build-docker-tag:
|
||||
# Don't push to latest when building beta/rc tags
|
||||
build-and-push-to-latest-docker-tag:
|
||||
<<: *docker
|
||||
rules: &tag-rules
|
||||
rules: &release-tag-rules
|
||||
- if: '$CI_PROJECT_NAMESPACE != "framasoft"'
|
||||
when: never
|
||||
- if: $CI_COMMIT_TAG
|
||||
- if: $CI_COMMIT_TAG != null && $CI_COMMIT_TAG !~ /alpha|beta|rc/
|
||||
when: on_success
|
||||
timeout: 3 hours
|
||||
script:
|
||||
- >
|
||||
docker buildx build
|
||||
--push
|
||||
--platform linux/amd64,linux/arm64,linux/arm
|
||||
--platform linux/amd64,linux/arm
|
||||
-t framasoft/mobilizon:$CI_COMMIT_TAG
|
||||
-t framasoft/mobilizon:latest
|
||||
-f docker/production/Dockerfile .
|
||||
|
||||
build-and-push-docker-tag:
|
||||
<<: *docker
|
||||
rules: &pre-release-tag-rules
|
||||
- if: '$CI_PROJECT_NAMESPACE != "framasoft"'
|
||||
when: never
|
||||
- if: $CI_COMMIT_TAG =~ /alpha|beta|rc/
|
||||
when: on_success
|
||||
timeout: 3 hours
|
||||
script:
|
||||
- >
|
||||
docker buildx build
|
||||
--push
|
||||
--platform linux/amd64,linux/arm
|
||||
-t framasoft/mobilizon:$CI_COMMIT_TAG
|
||||
-f docker/production/Dockerfile .
|
||||
|
||||
# Packaging app for amd64
|
||||
package-app:
|
||||
image: mobilizon/buildpack:1.13.4-erlang-24.3.3-debian-buster
|
||||
image: mobilizon/buildpack:1.14.1-erlang-25.1.1-debian-buster
|
||||
stage: package
|
||||
variables: &release-variables
|
||||
MIX_ENV: "prod"
|
||||
@ -250,7 +291,7 @@ package-app:
|
||||
- mix local.rebar --force
|
||||
- mix deps.get --only-prod
|
||||
- mix compile
|
||||
- mix phx.digest.clean --all && \
|
||||
- mix phx.digest.clean --all && mix phx.digest
|
||||
- mix release --path release/mobilizon
|
||||
- cd release/mobilizon && ln -s lib/mobilizon-*/priv priv && cd ../../
|
||||
- du -sh release/
|
||||
@ -278,7 +319,7 @@ package-app-dev:
|
||||
# Packaging app for multi-arch
|
||||
multi-arch-release:
|
||||
stage: package
|
||||
image: docker:20.10.12
|
||||
image: docker:20.10.21
|
||||
variables:
|
||||
DOCKER_TLS_CERTDIR: "/certs"
|
||||
DOCKER_HOST: tcp://docker:2376
|
||||
@ -288,13 +329,13 @@ multi-arch-release:
|
||||
APP_ASSET: "${CI_PROJECT_NAME}_${CI_COMMIT_REF_NAME}_${ARCH}.tar.gz"
|
||||
OS: debian-buster
|
||||
services:
|
||||
- docker:20.10.12-dind
|
||||
- docker:20.10.21-dind
|
||||
cache: {}
|
||||
before_script:
|
||||
# Install buildx
|
||||
- wget https://github.com/docker/buildx/releases/download/v0.8.1/buildx-v0.8.1.linux-amd64
|
||||
- wget https://github.com/docker/buildx/releases/download/v0.9.1/buildx-v0.9.1.linux-amd64
|
||||
- mkdir -p ~/.docker/cli-plugins/
|
||||
- mv buildx-v0.8.1.linux-amd64 ~/.docker/cli-plugins/docker-buildx
|
||||
- mv buildx-v0.9.1.linux-amd64 ~/.docker/cli-plugins/docker-buildx
|
||||
- chmod a+x ~/.docker/cli-plugins/docker-buildx
|
||||
# Create env
|
||||
- docker context create tls-environment
|
||||
@ -313,15 +354,14 @@ multi-arch-release:
|
||||
expire_in: 2 days
|
||||
paths:
|
||||
- ${APP_ASSET}
|
||||
- erl_crash.dump # if there's a memory issue
|
||||
parallel:
|
||||
matrix:
|
||||
- ARCH: ["arm", "arm64"]
|
||||
rules:
|
||||
- if: '$CI_PROJECT_NAMESPACE != "framasoft"'
|
||||
when: never
|
||||
- if: '$CI_PIPELINE_SOURCE == "schedule"'
|
||||
- if: $CI_COMMIT_TAG
|
||||
- if: '$CI_COMMIT_TAG != null || $CI_PIPELINE_SOURCE == "schedule" || $CI_PIPELINE_TRIGGERED == "true"'
|
||||
timeout: 3h
|
||||
allow_failure: true
|
||||
|
||||
# Release
|
||||
release-upload:
|
||||
@ -329,7 +369,9 @@ release-upload:
|
||||
image: framasoft/upload-packages:latest
|
||||
variables:
|
||||
APP_ASSET: "${CI_PROJECT_NAME}_${CI_COMMIT_REF_NAME}_${ARCH}.tar.gz"
|
||||
rules: *tag-rules
|
||||
rules:
|
||||
- if: '$CI_PROJECT_NAMESPACE != "framasoft"'
|
||||
when: never
|
||||
script:
|
||||
- eval `ssh-agent -s`
|
||||
- ssh-add <(echo "${DEPLOYEMENT_KEY}" | base64 --decode -i)
|
||||
@ -342,11 +384,14 @@ release-upload:
|
||||
parallel:
|
||||
matrix:
|
||||
- ARCH: ["amd64", "arm", "arm64"]
|
||||
allow_failure: true
|
||||
|
||||
release-create:
|
||||
stage: deploy
|
||||
image: registry.gitlab.com/gitlab-org/release-cli:latest
|
||||
rules: *tag-rules
|
||||
rules:
|
||||
- if: '$CI_PROJECT_NAMESPACE != "framasoft"'
|
||||
when: never
|
||||
variables:
|
||||
APP_ASSET_AMD64: "${CI_PROJECT_NAME}_${CI_COMMIT_REF_NAME}_amd64.tar.gz"
|
||||
APP_ASSET_ARM: "${CI_PROJECT_NAME}_${CI_COMMIT_REF_NAME}_arm.tar.gz"
|
||||
@ -360,6 +405,6 @@ release-create:
|
||||
release-cli create --name "$CI_COMMIT_TAG" \
|
||||
--description "$CHANGELOG" \
|
||||
--tag-name "$CI_COMMIT_TAG" \
|
||||
--assets-link "{\"name\":\"${APP_ASSET_AMD64}\",\"url\":\"${ENDPOINT}/${APP_ASSET_AMD64}\"}" \
|
||||
--assets-link "{\"name\":\"${APP_ASSET_ARM}\",\"url\":\"${ENDPOINT}/${APP_ASSET_ARM}\"}" \
|
||||
--assets-link "{\"name\":\"${APP_ASSET_ARM64}\",\"url\":\"${ENDPOINT}/${APP_ASSET_ARM64}\"}"
|
||||
--assets-link "{\"name\":\"${APP_ASSET_AMD64}\",\"url\":\"${ENDPOINT}/${CI_COMMIT_REF_NAME}/${APP_ASSET_AMD64}\"}" \
|
||||
--assets-link "{\"name\":\"${APP_ASSET_ARM}\",\"url\":\"${ENDPOINT}/${CI_COMMIT_REF_NAME}/${APP_ASSET_ARM}\"}" \
|
||||
--assets-link "{\"name\":\"${APP_ASSET_ARM64}\",\"url\":\"${ENDPOINT}/${CI_COMMIT_REF_NAME}/${APP_ASSET_ARM64}\"}"
|
||||
|
@ -1,2 +1,2 @@
|
||||
elixir 1.13.4-otp-24
|
||||
erlang 24.3.3
|
||||
elixir 1.14.1-otp-25
|
||||
erlang 25.1.1
|
||||
|
353
CHANGELOG.md
@ -5,6 +5,353 @@ All notable changes to this project will be documented in this file.
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## 3.0.3 - 2022-12-22
|
||||
|
||||
### Fixed
|
||||
|
||||
- Add missing OpenSSL 1.1 in Docker image
|
||||
|
||||
## 3.0.2 - 2022-12-22
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix unfollowing group
|
||||
- Limit the size of the IP(v6) field in the user admin view
|
||||
- Fix terms and privacy view
|
||||
- Use the correct value of current locale
|
||||
- Fix editing group events as a group moderator
|
||||
- Consider timezone for start time also when end date is hidden
|
||||
- Fix loading group members in organizer picker
|
||||
- Fix changing email & password
|
||||
- Add missing icon
|
||||
- Fix instances filter
|
||||
- Fix logging from 3rd-party auth provider
|
||||
|
||||
## 3.0.1 - 2022-11-22
|
||||
|
||||
### Fixed
|
||||
|
||||
- Compatibility with Python 3.11 for exports that reply on Python code.
|
||||
- Formatting of fallback locales
|
||||
- Allow to specify database port for Docker configuration
|
||||
- Assets in production environment
|
||||
- Changing event uuid didn't change event data
|
||||
- Make sure maximumAttendeeCapacity is a number, not a string
|
||||
- Prevent AP collection page number being < 1
|
||||
- Fix approving/rejecting group members and followers
|
||||
- Fix 3rd-party auth links
|
||||
- Test Intl.ListFormat availability and add fallback
|
||||
- Set correct Content-Type on all AP endpoints
|
||||
- Don't notify group members & followers from new draft event
|
||||
- Register missing ExitToApp icon
|
||||
- Fix comment display
|
||||
|
||||
## 3.0.0 - 2022-11-08
|
||||
|
||||
### Added
|
||||
|
||||
- Add global search support, allowing to use https://search.joinmobilizon.org as a centralized event and group database
|
||||
- Add ability to filter search by categories and language
|
||||
- Add ability to explore search results on a map view
|
||||
- Add dark theme support and setting to toggle light/dark mode
|
||||
- Add categories view
|
||||
- Allow to disable non-SSO login
|
||||
- Support CSP report_uri, report_to and the Report-To and Reporting-Endpoints headers
|
||||
- Support for Elixir 1.14 and Erlang OTP 25.
|
||||
|
||||
### Changed
|
||||
|
||||
- Homepage has been redesigned
|
||||
- Search view has been redesigned
|
||||
- Internal illustration pictures are now only served using WebP.
|
||||
- Improved the pertinence of related events
|
||||
- Light front-end performance improvements
|
||||
- Various UI and A11Y fixes on the event page
|
||||
- Handle categories page being empty
|
||||
- UI improvements of comments
|
||||
- UI improvements of reports
|
||||
- Various UI improvement in event and group view
|
||||
- Add breadcrumb trail on Post view
|
||||
- Always lowercase the emails before trying to reset password
|
||||
- Make text editor heading level start at h3, h4, h5
|
||||
- Remove obscure reference to Douglas Adams
|
||||
- Don't inline phoenix manifest
|
||||
- Show a proper error message when failure to register to an event
|
||||
- Order categories by translated label
|
||||
- Show registration button also if registration allow list is used
|
||||
- Add logging for when cached iCalendar feed data can't be found
|
||||
- Add an error log when we try to update the relay actor
|
||||
- Lower loglevel of error when creating a new person
|
||||
- Add unique constraint on event URL
|
||||
- Allow to view more than 10 drafts events on my events view
|
||||
- Add CSP Policy for pictures
|
||||
- Don't treat notification for a deleted event as an error
|
||||
- Truncate resource description preview after 350 characters
|
||||
- Lower loglevel of resource insertion error
|
||||
- Resources and discussions views improvements
|
||||
- Add context to error when removing an upload file following actor suspension
|
||||
- Allow for resource providers to register a csp policy
|
||||
- Add loading="lazy" to some images, except categories in viewport
|
||||
- Add GraphQL operation name, user ID and actor name in logs
|
||||
- Add empty alt attribute to uploaded pictures (for now)
|
||||
- Allow release build failures in CI for all non-amd64 architectures
|
||||
- Increase timeout needed to build page
|
||||
- Handle nothing found by unsplash for location
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed deleting actor when participations association is not preloaded
|
||||
- Fixed rendering JSON-LD for an event with a single address (no online location)
|
||||
- Address selector
|
||||
- Group location edition
|
||||
- Reconfigure plug at runtime with env
|
||||
- Fix global search term
|
||||
- Fix custom icons in metadata list
|
||||
- Handle unknown icon
|
||||
- Only preload svg pictures on homepage
|
||||
- Don't add empty search parameters to global search engine
|
||||
- Fix getting categories from global search engine
|
||||
- Remove unused deps
|
||||
- Only show one pagination bar when searching in both events & groups
|
||||
- Run build multiarch release on tags too
|
||||
- Don't start mobilizon server when running migrations
|
||||
- Run phx.digest before mix release
|
||||
- Fix event card background color behind picture
|
||||
- Fix position of the « no events found » message
|
||||
- Add distinct clause to search events
|
||||
- Fix showing past events on group page
|
||||
- Fix display of group invitations
|
||||
- Fix leaving a group
|
||||
- Fix group events order
|
||||
- Prevent loading group membership status before we get person information
|
||||
- Prefix setInterval with window
|
||||
- Fix fetching events with addresses that's not objects
|
||||
- Fix dashboard view
|
||||
- Fix anonymous & remote participation pages
|
||||
- Fix anonymous/remote participation button
|
||||
- Do not list drafts in upcoming / old events event if instance moderator
|
||||
- Make sure group is refreshed after action
|
||||
- Fix deleting person detached from user
|
||||
- Fix pagination number text color in dark theme
|
||||
- Fix post sharing URL
|
||||
- Fix current format status of text not displayed in text editor
|
||||
- Fix moving resources
|
||||
- Fix multiselect of resources
|
||||
- Properly handle un-needed background jobs
|
||||
- Properly handle replying to an event that has been deleted
|
||||
- Propertly handle other errors when receiving a comment
|
||||
- Fix event integrations
|
||||
- Prevent loading authorized groups when current actor isn't loading in OrganizerPickerWrapper
|
||||
- Fix building CSP policy
|
||||
- Fix event map view
|
||||
- Various front-end fixes
|
||||
- Handle error when fetching object from tombstone
|
||||
- Fixed upcoming event groups display on homepage view
|
||||
- Fixed Ecto Dev warning on compilation
|
||||
- Adapt white parts in Mobilizon logo to current color
|
||||
- Register missing BellOutline and BellOffOutline icons
|
||||
- Don't load group status when unlogged
|
||||
- Fix order of useHead registration on JoinGroupWithAccount view
|
||||
- Fix profile@instance translation
|
||||
- Handle :http_not_found as an error when deleting an object
|
||||
- Handle suspending actors with special type
|
||||
- Add fallback handler for can_send_activity?
|
||||
- Properly log if we can't notify group follower
|
||||
|
||||
### Security
|
||||
|
||||
- Correctly escape user-defined names in emails
|
||||
|
||||
### Internal
|
||||
- Build on Elixir 1.14.1 and Erlang OTP 25.
|
||||
- Migrate from Vue 2 and Vue Class Component to Vue 3 and the Composition API
|
||||
- Migrate from Bulma and Buefy to TailwindCSS and Oruga
|
||||
|
||||
### Tests
|
||||
|
||||
#### Unit Tests
|
||||
- Rewrote tests using Vitest
|
||||
|
||||
#### E2E Tests
|
||||
- Renabled E2E tests
|
||||
- Rewrote tests from Cypress to Playwright
|
||||
|
||||
## 3.0.0-rc.6 - 2022-11-07
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed upcoming event groups display on homepage view
|
||||
- Fixed Ecto Dev warning on compilation
|
||||
|
||||
## 3.0.0-rc.5 - 2022-11-06
|
||||
|
||||
### Changed
|
||||
|
||||
- Allow release build failures in CI for all non-amd64 architectures
|
||||
|
||||
## 3.0.0-rc.4 - 2022-11-06
|
||||
|
||||
### Changed
|
||||
|
||||
- Add loading="lazy" to some images, except categories in viewport
|
||||
- Add GraphQL operation name, user ID and actor name in logs
|
||||
- Add empty alt attribute to uploaded pictures (for now)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix building CSP policy
|
||||
- Fix event map view
|
||||
- Various front-end fixes
|
||||
- Handle error when fetching object from tombstone
|
||||
|
||||
## 3.0.0-rc.3 - 2022-11-04
|
||||
|
||||
### Added
|
||||
|
||||
- Support CSP report_uri, report_to and the Report-To and Reporting-Endpoints headers
|
||||
|
||||
### Changed
|
||||
|
||||
- Add CSP Policy for pictures
|
||||
- Don't treat notification for a deleted event as an error
|
||||
- Truncate resource description preview after 350 characters
|
||||
- Lower loglevel of resource insertion error
|
||||
- Resources and discussions views improvements
|
||||
- Add context to error when removing an upload file following actor suspension
|
||||
- Allow for resource providers to register a csp policy
|
||||
|
||||
### Fixed
|
||||
- Fix moving resources
|
||||
- Fix multiselect of resources
|
||||
- Properly handle un-needed background jobs
|
||||
- Properly handle replying to an event that has been deleted
|
||||
- Propertly handle other errors when receiving a comment
|
||||
- Fix event integrations
|
||||
- Prevent loading authorized groups when current actor isn't loading in OrganizerPickerWrapper
|
||||
|
||||
## 3.0.0-rc.2 - 2022-11-02
|
||||
|
||||
### Added
|
||||
|
||||
- Add setting to toggle light/dark mode
|
||||
- Allow to disable non-SSO login
|
||||
|
||||
### Changed
|
||||
|
||||
- UI improvements of comments
|
||||
- UI improvements of reports
|
||||
- Various UI improvement in event and group view
|
||||
- Add breadcrumb trail on Post view
|
||||
- Always lowercase the emails before trying to reset password
|
||||
- Make text editor heading level start at h3, h4, h5
|
||||
- Remove obscure reference to Douglas Adams
|
||||
- Don't inline phoenix manifest
|
||||
- Show a proper error message when failure to register to an event
|
||||
- Order categories by translated label
|
||||
- Show registration button also if registration allow list is used
|
||||
- Add logging for when cached iCalendar feed data can't be found
|
||||
- Add an error log when we try to update the relay actor
|
||||
- Lower loglevel of error when creating a new person
|
||||
- Add unique constraint on event URL
|
||||
- Allow to view more than 10 drafts events on my events view
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix event card background color behind picture
|
||||
- Fix position of the « no events found » message
|
||||
- Add distinct clause to search events
|
||||
- Fix showing past events on group page
|
||||
- Fix display of group invitations
|
||||
- Fix leaving a group
|
||||
- Fix group events order
|
||||
- Prevent loading group membership status before we get person information
|
||||
- Prefix setInterval with window
|
||||
- Fix fetching events with addresses that's not objects
|
||||
- Fix dashboard view
|
||||
- Fix anonymous & remote participation pages
|
||||
- Fix anonymous/remote participation button
|
||||
- Do not list drafts in upcoming / old events event if instance moderator
|
||||
- Make sure group is refreshed after action
|
||||
- Fix deleting person detached from user
|
||||
- Fix pagination number text color in dark theme
|
||||
- Fix post sharing URL
|
||||
- Fix current format status of text not displayed in text editor
|
||||
|
||||
### Security
|
||||
|
||||
- Correctly escape user-defined names in emails
|
||||
|
||||
## 3.0.0-rc.1 - 2022-10-18
|
||||
|
||||
No changes since beta.3
|
||||
|
||||
## 3.0.0-beta.3 - 2022-10-17
|
||||
|
||||
### Fixed
|
||||
- Don't add empty search parameters to global search engine
|
||||
- Fix getting categories from global search engine
|
||||
- Remove unused deps
|
||||
- Only show one pagination bar when searching in both events & groups
|
||||
- Run build multiarch release on tags too
|
||||
- Don't start mobilizon server when running migrations
|
||||
- Run phx.digest before mix release
|
||||
|
||||
|
||||
## 3.0.0-beta.2 - 2022-10-11
|
||||
|
||||
### Changed
|
||||
|
||||
- Improved the pertinence of related events
|
||||
- Light front-end performance improvements
|
||||
- Various UI and A11Y fixes on the event page
|
||||
- Handle categories page being empty
|
||||
|
||||
### Fixed
|
||||
|
||||
- Address selector
|
||||
- Group location edition
|
||||
- Reconfigure plug at runtime with env
|
||||
- Fix global search term
|
||||
- Fix custom icons in metadata list
|
||||
- Handle unknown icon
|
||||
- Only preload svg pictures on homepage
|
||||
|
||||
## 3.0.0-beta.1 - 2022-09-27
|
||||
|
||||
### Added
|
||||
|
||||
- Add global search support, allowing to use https://search.joinmobilizon.org as a centralized event and group database
|
||||
- Add ability to filter search by categories and language
|
||||
- Add ability to explore search results on a map view
|
||||
- Add dark theme support
|
||||
- Add categories view
|
||||
- Support for Elixir 1.14 and Erlang OTP 25.
|
||||
|
||||
### Changed
|
||||
|
||||
- Homepage has been redesigned
|
||||
- Search view has been redesigned
|
||||
- Internal illustration pictures are now only served using WebP.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed deleting actor when participations association is not preloaded
|
||||
- Fixed rendering JSON-LD for an event with a single address (no online location)
|
||||
|
||||
### Internal
|
||||
- Build on Elixir 1.14 and Erlang OTP 25.
|
||||
- Migrate from Vue 2 and Vue Class Component to Vue 3 and the Composition API
|
||||
- Migrate from Bulma and Buefy to TailwindCSS and Oruga
|
||||
|
||||
### Tests
|
||||
|
||||
#### Unit Tests
|
||||
- Rewrote tests using Vitest
|
||||
|
||||
#### E2E Tests
|
||||
- Renabled E2E tests
|
||||
- Rewrote tests from Cypress to Playwright
|
||||
|
||||
## 2.1.0 - 2022-05-16
|
||||
|
||||
### Added
|
||||
@ -19,7 +366,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
### Changed
|
||||
|
||||
- Changed mailer library from Bamboo to Swoosh, should fix emails being considered spam. **Some configuration changes are required, see below.**
|
||||
- Changed mailer library from Bamboo to Swoosh, should fix emails being considered spam. **Some configuration changes are required, see [UPGRADE.md](https://framagit.org/framasoft/mobilizon/-/blob/main/UPGRADE.md).**
|
||||
- Expose some fields to ActivityStreams event representation: `isOnline`, `remainingAttendeeCapacity` and `participantCount`
|
||||
- Expose a new field to ActivityStreams group representation: `memberCount`
|
||||
- Improve group creation errors feedback
|
||||
@ -41,7 +388,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
- Update schema.graphql file
|
||||
- Add "Accept-Language" header to sentry request metadata
|
||||
- Hide address blocks when address has no real data
|
||||
- Remove obsolete attribute type="text/css" from <style> tags
|
||||
- Remove obsolete attribute `type="text/css"` from `<style>` tags
|
||||
- Improve actor cards integration
|
||||
- Use upstream dependencies for Ueberauth providers
|
||||
- Include ongoing events in search
|
||||
@ -81,7 +428,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
- Fix text overflow on group card description
|
||||
- Exclude tags with more than 40 characters from being extracted
|
||||
- Avoid duplicate tags with different casing
|
||||
- Fix invalid HTML (<div> inside <label>)
|
||||
- Fix invalid HTML (`<div>` inside `<label>`)
|
||||
- Fix latest group not refreshing in admin section
|
||||
- Add missing "relay@" part of federated address to follow
|
||||
- Fix Ueberauth use of CSRF with session
|
||||
|
11
Makefile
@ -25,3 +25,14 @@ format:
|
||||
docker-compose run --rm api bash -c "mix format && mix credo --strict"
|
||||
@bash docker/message.sh "Code is now ready to commit :)"
|
||||
target: init
|
||||
|
||||
RELEASE_TAG=$(shell git tag --list '[0-9]*.[0-9]*.[0-9]*' | tail -n1)
|
||||
release:
|
||||
mix local.hex --force
|
||||
mix local.rebar --force
|
||||
mix deps.get --only-prod
|
||||
mix compile
|
||||
mix phx.digest.clean --all && mix phx.digest
|
||||
mix release --path release/mobilizon
|
||||
cd release/mobilizon && ln -s lib/mobilizon-*/priv priv
|
||||
tar czf mobilizon-$(RELEASE_TAG).tar.gz -C release mobilizon
|
||||
|
31
README.md
@ -20,7 +20,7 @@ Mobilizon is your federated organization and mobilization platform. Gather peopl
|
||||
|
||||
Mobilizon is a tool designed to create platforms for managing communities and events. Its purpose is to help as many people as possible to free themselves from Facebook groups and events, from Meetup, etc.
|
||||
|
||||
The Mobilizon software is under a Free licence, so anyone can host a Mobilizon server, called an instance. These instances may federate with each other, so any person with an account on _ExampleMeet_ will be able to register to an event created on _SpecimenEvent_.
|
||||
The Mobilizon software is under a Free licence, so anyone can host a Mobilizon server, called an instance. These instances may federate with each other, so any person with an account on *ExampleMeet* will be able to register to an event created on *SpecimenEvent*.
|
||||
|
||||
## ✨ Features
|
||||
|
||||
@ -33,7 +33,7 @@ You will have the power to create multiple identities from the same account, lik
|
||||
|
||||
### 📅 Events and groups
|
||||
|
||||
Create your events and make sure they will appeal to everybody.
|
||||
Create your events and make sure they will appeal to everybody.
|
||||
Privacy settings and participants roles are supported.
|
||||
There's no lock-in, you can interact with the event without registration.
|
||||
|
||||
@ -41,31 +41,28 @@ There's no lock-in, you can interact with the event without registration.
|
||||
|
||||
## Contributing
|
||||
|
||||
We appreciate any contribution to Mobilizon. Check our [CONTRIBUTING](CONTRIBUTING.md) file for more information.
|
||||
We appreciate any contribution to Mobilizon. Check [our contributing page](https://docs.joinmobilizon.org/contribute/) for more information.
|
||||
|
||||
## Links
|
||||
|
||||
### Learn more
|
||||
|
||||
- 🌐 Official website: [https://joinmobilizon.org](https://joinmobilizon.org)
|
||||
- 🔢 Pick an instance [https://mobilizon.org](https://mobilizon.org)
|
||||
- 💻 Source: [https://framagit.org/framasoft/mobilizon](https://framagit.org/framasoft/mobilizon)
|
||||
- 📜 Documentation [https://docs.joinmobilizon.org](https://docs.joinmobilizon.org)
|
||||
|
||||
* 🌐 Official website: [https://joinmobilizon.org](https://joinmobilizon.org)
|
||||
* 🔢 Pick an instance [https://mobilizon.org](https://mobilizon.org)
|
||||
* 💻 Source: [https://framagit.org/framasoft/mobilizon](https://framagit.org/framasoft/mobilizon)
|
||||
* 📜 Documentation [https://docs.joinmobilizon.org](https://docs.joinmobilizon.org)
|
||||
|
||||
### Discuss
|
||||
|
||||
- 💬 Element/Matrix: [https://matrix.to/#/#Mobilizon:matrix.org](https://matrix.to/#/#Mobilizon:matrix.org)
|
||||
- 🗣️ Forum: [https://framacolibri.org/c/mobilizon](https://framacolibri.org/c/mobilizon)
|
||||
* 💬 Element/Matrix: [https://matrix.to/#/#Mobilizon:matrix.org](https://matrix.to/#/#Mobilizon:matrix.org)
|
||||
* 🗣️ Forum: [https://framacolibri.org/c/mobilizon](https://framacolibri.org/c/mobilizon)
|
||||
|
||||
### Follow
|
||||
|
||||
- 🐘 Mastodon: [https://framapiaf.org/@mobilizon](https://framapiaf.org/@mobilizon)
|
||||
- 🐦 Twitter [https://twitter.com/@joinmobilizon](https://twitter.com/@joinmobilizon)
|
||||
|
||||
* 🐘 Mastodon: [https://framapiaf.org/@mobilizon](https://framapiaf.org/@mobilizon)
|
||||
* 🐦 Twitter [https://twitter.com/@joinmobilizon](https://twitter.com/@joinmobilizon)
|
||||
|
||||
Note: Most federation code comes from [Pleroma](https://pleroma.social), which is `Copyright © 2017-2018 Pleroma Authors - AGPL-3.0`.
|
||||
|
||||
## ❤️ Supports of our crowdfunding
|
||||
|
||||
## ❤️ Supports of our crowdfunding
|
||||
---
|
||||
|
||||
We have run [a crowdfunding campaign](https://framablog.org/2019/05/14/mobilizon-lets-finance-a-software-to-free-our-events-from-facebook/) to pave the road to the version 1.0.0 of Mobilizon. Thanks to everyone who pitched in and shared the news around! The list of [everyone who donated is available here](https://joinmobilizon.org/hall-of-fame).
|
||||
|
32
SECURITY.md
@ -5,15 +5,15 @@ Framasoft, the Mobilizon maintainer team and community take all security bugs in
|
||||
|
||||
### Goals
|
||||
|
||||
- Mobilizon users can understand the distinctions between public data and private data/metadata on Mobilizon.
|
||||
* Mobilizon users can understand the distinctions between public data and private data/metadata on Mobilizon.
|
||||
|
||||
- Users always know where their private data/metadata resides, who has access to it, and are able to access, export, and delete it.
|
||||
* Users always know where their private data/metadata resides, who has access to it, and are able to access, export, and delete it.
|
||||
|
||||
- Protect private user data/metadata, not just from hackers but also (as much as is possible) from other users, instance admins, community moderators, and external applications.
|
||||
* Protect private user data/metadata, not just from hackers but also (as much as is possible) from other users, instance admins, community moderators, and external applications.
|
||||
|
||||
- Secure from malicious creation, alteration or deletion of public data.
|
||||
* Secure from malicious creation, alteration or deletion of public data.
|
||||
|
||||
- GDPR compliance.
|
||||
* GDPR compliance.
|
||||
|
||||
Framasoft is both a developer of open-source/free/libre self-hosted software, and a service provider with users in the European Union. As a result, we are putting user privacy, data sovereignty, and GDPR compliance into our security plans, including asking both the Framasoft community and outside hackers to review our approaches and implementations.
|
||||
|
||||
@ -21,11 +21,11 @@ Framasoft is both a developer of open-source/free/libre self-hosted software, an
|
||||
|
||||
[Mobilizon](https://joinmobilizon.org) will be challenging to keep secure, as it is:
|
||||
|
||||
- open source, both back-end and front-end
|
||||
* open source, both back-end and front-end
|
||||
|
||||
- self-hosted by diverse organisations and individuals
|
||||
* self-hosted by diverse organisations and individuals
|
||||
|
||||
- federated (data is transmitted between different hosted instances)
|
||||
* federated (data is transmitted between different hosted instances)
|
||||
|
||||
This means there are more attack surfaces compared to typical proprietary, centralised platforms, but also means that hackers and even users can review every part of Mobilizon and make sure that it works as expected. This should result in more secure software, and higher trust in the application and its ecosystem.
|
||||
|
||||
@ -33,14 +33,14 @@ This means there are more attack surfaces compared to typical proprietary, centr
|
||||
|
||||
We are committed to working with security researchers to verify, reproduce, and respond to legitimate reported vulnerabilities. You can help us by following these simple guidelines:
|
||||
|
||||
- Alert us about the vulnerability as soon as you become aware of it by emailing the lead maintainer at tcit+mobilizon@framasoft.org.
|
||||
- Provide details needed to reproduce and validate the vulnerability and a Proof of Concept (PoC) as soon as possible
|
||||
- Act in good faith to avoid privacy violations, destruction of data, and interruption or degradation of services
|
||||
- Do not access or modify users’ private data, without explicit permission of the owner. Only interact with your own accounts or test accounts for security research purposes;
|
||||
- Contact Framasoft or a maintainer of the Mobilizon project (or the instance admin) immediately if you do inadvertently encounter user data. Do not view, alter, save, store, transfer, or otherwise access the data, and immediately purge any local information upon reporting the vulnerability;
|
||||
- The lead maintainer will acknowledge your email within 48 hours, and will send a more detailed response within 48 hours indicating the next steps in handling your report. After the initial reply to your report, the security team will endeavor to keep you informed of the progress towards a fix and full announcement, and may ask for additional information or guidance.
|
||||
- Give us time to confirm, determine the affected versions and prepare fixes to correct the issue before disclosing it to other parties (if after waiting a reasonable amount of time, we are clearly unable or unwilling to do anything about it, please do hold us accountable!)
|
||||
- Please test against a local instance of the software, and refrain from running any Denial of Service or automated testing tools against Framasoft's (and our partners') infrastructure
|
||||
* Alert us about the vulnerability as soon as you become aware of it by emailing the lead maintainer at tcit+mobilizon@framasoft.org.
|
||||
* Provide details needed to reproduce and validate the vulnerability and a Proof of Concept (PoC) as soon as possible
|
||||
* Act in good faith to avoid privacy violations, destruction of data, and interruption or degradation of services
|
||||
* Do not access or modify users’ private data, without explicit permission of the owner. Only interact with your own accounts or test accounts for security research purposes;
|
||||
* Contact Framasoft or a maintainer of the Mobilizon project (or the instance admin) immediately if you do inadvertently encounter user data. Do not view, alter, save, store, transfer, or otherwise access the data, and immediately purge any local information upon reporting the vulnerability;
|
||||
* The lead maintainer will acknowledge your email within 48 hours, and will send a more detailed response within 48 hours indicating the next steps in handling your report. After the initial reply to your report, the security team will endeavor to keep you informed of the progress towards a fix and full announcement, and may ask for additional information or guidance.
|
||||
* Give us time to confirm, determine the affected versions and prepare fixes to correct the issue before disclosing it to other parties (if after waiting a reasonable amount of time, we are clearly unable or unwilling to do anything about it, please do hold us accountable!)
|
||||
* Please test against a local instance of the software, and refrain from running any Denial of Service or automated testing tools against Framasoft's (and our partners') infrastructure
|
||||
|
||||
Note : Please report security bugs in third-party modules to the person or team maintaining the module.
|
||||
|
||||
|
@ -13,14 +13,15 @@ config :mobilizon,
|
||||
config :mobilizon, Mobilizon.Storage.Repo, types: Mobilizon.Storage.PostgresTypes
|
||||
|
||||
config :mobilizon, :instance,
|
||||
name: "Mobilizon du Chapril",
|
||||
description: "Instance du Chapril",
|
||||
name: "My Mobilizon Instance",
|
||||
description: "Change this to a proper description of your instance",
|
||||
hostname: "localhost",
|
||||
registrations_open: true,
|
||||
registrations_open: false,
|
||||
registration_email_allowlist: [],
|
||||
registration_email_denylist: [],
|
||||
disable_database_login: false,
|
||||
languages: [],
|
||||
default_language: "fr",
|
||||
default_language: "en",
|
||||
demo: false,
|
||||
repository: Mix.Project.config()[:source_url],
|
||||
allow_relay: true,
|
||||
@ -35,9 +36,9 @@ config :mobilizon, :instance,
|
||||
unconfirmed_user_grace_period_hours: 48,
|
||||
activity_expire_days: 365,
|
||||
activity_keep_number: 100,
|
||||
enable_instance_feeds: true,
|
||||
email_from: "noreply@mobilizon.chapril.org",
|
||||
email_reply_to: "noreply@mobilizon.chapril.org"
|
||||
enable_instance_feeds: false,
|
||||
email_from: "noreply@localhost",
|
||||
email_reply_to: "noreply@localhost"
|
||||
|
||||
config :mobilizon, :groups, enabled: true
|
||||
config :mobilizon, :events, creation: true
|
||||
@ -54,7 +55,7 @@ config :mobilizon, Mobilizon.Web.Endpoint,
|
||||
secret_key_base: "1yOazsoE0Wqu4kXk3uC5gu3jDbShOimTCzyFL3OjCdBmOXMyHX87Qmf3+Tu9s0iM",
|
||||
render_errors: [view: Mobilizon.Web.ErrorView, accepts: ~w(html json)],
|
||||
pubsub_server: Mobilizon.PubSub,
|
||||
cache_static_manifest: "priv/static/manifest.json",
|
||||
cache_static_manifest: "priv/static/cache_manifest.json",
|
||||
has_reverse_proxy: true
|
||||
|
||||
config :mime, :types, %{
|
||||
@ -90,7 +91,7 @@ config :mobilizon, Mobilizon.Web.Upload.Uploader.Local, uploads: "/var/lib/mobil
|
||||
|
||||
config :tz_world, data_dir: "/var/lib/mobilizon/timezones"
|
||||
|
||||
config :mobilizon, Timex.Gettext, default_locale: "fr"
|
||||
config :mobilizon, Timex.Gettext, default_locale: "en"
|
||||
|
||||
config :mobilizon, :media_proxy,
|
||||
enabled: true,
|
||||
@ -123,15 +124,21 @@ config :mobilizon, Mobilizon.Web.Email.Mailer,
|
||||
# can be `true`
|
||||
no_mx_lookups: false
|
||||
|
||||
config :vite_phx,
|
||||
release_app: :mobilizon,
|
||||
# to tell prod and dev env appart
|
||||
environment: config_env(),
|
||||
# this manifest is different from the Phoenix "cache_manifest.json"!
|
||||
# optional
|
||||
vite_manifest: "priv/static/manifest.json",
|
||||
# optional
|
||||
dev_server_address: "http://localhost:5173"
|
||||
|
||||
# Configures Elixir's Logger
|
||||
config :logger, :console,
|
||||
backends: [:console],
|
||||
format: "$time $metadata[$level] $message\n",
|
||||
metadata: [:request_id]
|
||||
|
||||
config :logger, Sentry.LoggerBackend,
|
||||
level: :warn,
|
||||
capture_log_messages: true
|
||||
metadata: [:request_id, :graphql_operation_name, :user_id, :actor_name]
|
||||
|
||||
config :mobilizon, Mobilizon.Web.Auth.Guardian,
|
||||
issuer: "mobilizon",
|
||||
@ -342,13 +349,28 @@ config :mobilizon, Mobilizon.Service.Notifier.Push, enabled: true
|
||||
config :mobilizon, :exports,
|
||||
path: "/var/lib/mobilizon/uploads/exports",
|
||||
formats: [
|
||||
Mobilizon.Service.Export.Participants.CSV,
|
||||
Mobilizon.Service.Export.Participants.PDF,
|
||||
Mobilizon.Service.Export.Participants.ODS
|
||||
Mobilizon.Service.Export.Participants.CSV
|
||||
]
|
||||
|
||||
config :mobilizon, :analytics, providers: []
|
||||
|
||||
config :mobilizon, Mobilizon.Service.Pictures, service: Mobilizon.Service.Pictures.Unsplash
|
||||
|
||||
config :mobilizon, Mobilizon.Service.Pictures.Unsplash,
|
||||
app_name: "Mobilizon",
|
||||
access_key: nil
|
||||
|
||||
config :mobilizon, :search, global: [is_default_search: false, is_enabled: true]
|
||||
|
||||
config :mobilizon, Mobilizon.Service.GlobalSearch,
|
||||
service: Mobilizon.Service.GlobalSearch.SearchMobilizon
|
||||
|
||||
config :mobilizon, Mobilizon.Service.GlobalSearch.SearchMobilizon,
|
||||
endpoint: "https://search.joinmobilizon.org",
|
||||
csp_policy: [
|
||||
img_src: ["search.joinmobilizon.org"]
|
||||
]
|
||||
|
||||
# Import environment specific config. This must remain at the bottom
|
||||
# of this file so it overrides the configuration defined above.
|
||||
import_config "#{config_env()}.exs"
|
||||
|
@ -15,13 +15,7 @@ config :mobilizon, Mobilizon.Web.Endpoint,
|
||||
check_origin: false,
|
||||
watchers: [
|
||||
node: [
|
||||
"node_modules/webpack/bin/webpack.js",
|
||||
"--mode",
|
||||
"development",
|
||||
"--watch",
|
||||
"--watch-options-stdin",
|
||||
"--config",
|
||||
"node_modules/@vue/cli-service/webpack.config.js",
|
||||
"node_modules/.bin/vite",
|
||||
cd: Path.expand("../js", __DIR__)
|
||||
]
|
||||
]
|
||||
@ -54,7 +48,7 @@ config :mobilizon, Mobilizon.Web.Endpoint,
|
||||
]
|
||||
|
||||
# Do not include metadata nor timestamps in development logs
|
||||
config :logger, :console, format: "[$level] $message\n", level: :debug
|
||||
config :logger, :console, format: "$metadata[$level] $message\n", level: :debug
|
||||
|
||||
config :mobilizon, Mobilizon.Service.Geospatial, service: Mobilizon.Service.Geospatial.Nominatim
|
||||
|
||||
@ -77,7 +71,9 @@ config :mobilizon, Mobilizon.Storage.Repo,
|
||||
hostname: System.get_env("MOBILIZON_DATABASE_HOST", "localhost"),
|
||||
port: System.get_env("MOBILIZON_DATABASE_PORT", "5432"),
|
||||
pool_size: 10,
|
||||
show_sensitive_data_on_connection_error: true
|
||||
show_sensitive_data_on_connection_error: true,
|
||||
# Logging is handled by Ecto.DevLogger
|
||||
log: false
|
||||
|
||||
config :mobilizon, :instance,
|
||||
name: System.get_env("MOBILIZON_INSTANCE_NAME", "Mobilizon"),
|
||||
@ -102,3 +98,5 @@ config :mobilizon, :anonymous,
|
||||
reports: [
|
||||
allowed: true
|
||||
]
|
||||
|
||||
config :unplug, :init_mode, :runtime
|
||||
|
@ -39,7 +39,7 @@ config :mobilizon, Mobilizon.Storage.Repo,
|
||||
password: System.get_env("MOBILIZON_DATABASE_PASSWORD", "password"),
|
||||
database: System.get_env("MOBILIZON_DATABASE_DBNAME", "mobilizon"),
|
||||
hostname: System.get_env("MOBILIZON_DATABASE_HOST", "postgres"),
|
||||
port: 5432,
|
||||
port: System.get_env("MOBILIZON_DATABASE_PORT", "5432"),
|
||||
pool_size: 10
|
||||
|
||||
config :mobilizon, Mobilizon.Web.Email.Mailer,
|
||||
|
@ -19,19 +19,39 @@ config :mobilizon, Mobilizon.Web.Endpoint,
|
||||
yarn: [cd: Path.expand("../js", __DIR__)]
|
||||
]
|
||||
|
||||
require Logger
|
||||
config :vite_phx,
|
||||
release_app: :mobilizon,
|
||||
# Hard code :prod as an environment as :e2e will not be recongnized
|
||||
environment: :prod,
|
||||
vite_manifest: "priv/static/manifest.json",
|
||||
phx_manifest: "priv/static/cache_manifest.json",
|
||||
dev_server_address: "http://localhost:5173"
|
||||
|
||||
cond do
|
||||
System.get_env("INSTANCE_CONFIG") &&
|
||||
File.exists?("./config/#{System.get_env("INSTANCE_CONFIG")}") ->
|
||||
import_config System.get_env("INSTANCE_CONFIG")
|
||||
config :mobilizon, :instance,
|
||||
name: "E2E Testing instance",
|
||||
description: "E2E is safety",
|
||||
hostname: "mobilizon1.com",
|
||||
registrations_open: true,
|
||||
registration_email_denylist: ["gmail.com", "deny@tcit.fr"],
|
||||
demo: false,
|
||||
default_language: "en",
|
||||
allow_relay: true,
|
||||
federating: true,
|
||||
email_from: "mobilizon@mobilizon1.com",
|
||||
email_reply_to: nil,
|
||||
enable_instance_feeds: true,
|
||||
koena_connect_link: true,
|
||||
extra_categories: [
|
||||
%{
|
||||
id: :something_else,
|
||||
label: "Quelque chose d'autre"
|
||||
}
|
||||
]
|
||||
|
||||
System.get_env("DOCKER", "false") == "false" && File.exists?("./config/e2e.secret.exs") ->
|
||||
import_config "e2e.secret.exs"
|
||||
|
||||
System.get_env("DOCKER", "false") == "true" ->
|
||||
Logger.info("Using environment configuration for Docker")
|
||||
|
||||
true ->
|
||||
Logger.error("No configuration file found")
|
||||
end
|
||||
config :mobilizon, Mobilizon.Storage.Repo,
|
||||
adapter: Ecto.Adapters.Postgres,
|
||||
username: System.get_env("MOBILIZON_DATABASE_USERNAME", "mobilizon_e2e"),
|
||||
password: System.get_env("MOBILIZON_DATABASE_PASSWORD", "mobilizon_e2e"),
|
||||
database: System.get_env("MOBILIZON_DATABASE_DBNAME", "mobilizon_e2e"),
|
||||
hostname: System.get_env("MOBILIZON_DATABASE_HOST", "localhost"),
|
||||
port: System.get_env("MOBILIZON_DATABASE_PORT") || "5432"
|
||||
|
@ -16,29 +16,29 @@ config :logger, level: :info
|
||||
# Load all locales in production
|
||||
config :mobilizon, :cldr,
|
||||
locales: [
|
||||
# "ar",
|
||||
# "be",
|
||||
# "bn",
|
||||
# "ca",
|
||||
# "cs",
|
||||
# "cy",
|
||||
# "de",
|
||||
"ar",
|
||||
"be",
|
||||
"bn",
|
||||
"ca",
|
||||
"cs",
|
||||
"cy",
|
||||
"de",
|
||||
"en",
|
||||
# "es",
|
||||
# "fa",
|
||||
# "fi",
|
||||
"es",
|
||||
"fa",
|
||||
"fi",
|
||||
"fr",
|
||||
# "gd",
|
||||
# "gl",
|
||||
# "hu",
|
||||
# "id",
|
||||
# "it",
|
||||
# "ja",
|
||||
# "nl",
|
||||
# "nn",
|
||||
# "pl",
|
||||
# "pt",
|
||||
# "ru",
|
||||
# "sv",
|
||||
# "zh_Hant"
|
||||
"gd",
|
||||
"gl",
|
||||
"hu",
|
||||
"id",
|
||||
"it",
|
||||
"ja",
|
||||
"nl",
|
||||
"nn",
|
||||
"pl",
|
||||
"pt",
|
||||
"ru",
|
||||
"sv",
|
||||
"zh_Hant"
|
||||
]
|
||||
|
@ -88,6 +88,8 @@ config :mobilizon, Mobilizon.Web.Gettext, allowed_locales: ["fr", "en", "es", "r
|
||||
|
||||
config :junit_formatter, report_dir: "."
|
||||
|
||||
config :mobilizon, :http_security, report_uri: "https://endpoint.com"
|
||||
|
||||
if System.get_env("DOCKER", "false") == "false" && File.exists?("./config/test.secret.exs") do
|
||||
import_config "test.secret.exs"
|
||||
end
|
||||
|
@ -35,6 +35,7 @@ RUN source /root/.bashrc && \
|
||||
mix deps.get --only prod && \
|
||||
mix compile && \
|
||||
mix phx.digest.clean --all && \
|
||||
mix phx.digest && \
|
||||
mix release --path release/mobilizon && \
|
||||
cd release/mobilizon && \
|
||||
ln -s lib/mobilizon-*/priv priv && \
|
||||
|
@ -5,14 +5,12 @@ RUN apk add --no-cache python3 build-base libwebp-tools bash imagemagick ncurses
|
||||
WORKDIR /build
|
||||
COPY js .
|
||||
|
||||
ENV CYPRESS_INSTALL_BINARY 0
|
||||
|
||||
# Network timeout because it's slow when cross-compiling
|
||||
RUN yarn install --network-timeout 100000 \
|
||||
&& yarn run build
|
||||
|
||||
# Then, build the application binary
|
||||
FROM elixir:1.13-alpine AS builder
|
||||
FROM elixir:1.14-alpine AS builder
|
||||
|
||||
RUN apk add --no-cache build-base git cmake
|
||||
|
||||
@ -30,8 +28,7 @@ COPY rel ./rel
|
||||
COPY support ./support
|
||||
COPY --from=assets ./priv/static ./priv/static
|
||||
|
||||
RUN mix phx.digest.clean --all \
|
||||
&& mix release
|
||||
RUN mix phx.digest.clean --all && mix phx.digest && mix release
|
||||
|
||||
# Finally setup the app
|
||||
FROM alpine
|
||||
@ -49,7 +46,7 @@ LABEL org.opencontainers.image.title="mobilizon" \
|
||||
org.opencontainers.image.revision=$VCS_REF \
|
||||
org.opencontainers.image.created=$BUILD_DATE
|
||||
|
||||
RUN apk add --no-cache curl openssl ca-certificates ncurses-libs file postgresql-client libgcc libstdc++ imagemagick python3 py3-pip py3-pillow py3-cffi py3-brotli gcc g++ musl-dev python3-dev pango libxslt-dev ttf-cantarell
|
||||
RUN apk add --no-cache curl openssl ca-certificates ncurses-libs file postgresql-client libgcc libstdc++ imagemagick python3 py3-pip py3-pillow py3-cffi py3-brotli gcc g++ musl-dev python3-dev pango libxslt-dev ttf-cantarell openssl1.1-compat
|
||||
RUN pip install weasyprint pyexcel-ods3
|
||||
|
||||
RUN mkdir -p /var/lib/mobilizon/uploads && chown nobody:nobody /var/lib/mobilizon/uploads
|
||||
|
@ -1,7 +1,7 @@
|
||||
FROM elixir:latest
|
||||
LABEL maintainer="Thomas Citharel <tcit@tcit.fr>"
|
||||
|
||||
ENV REFRESHED_AT=2022-04-06
|
||||
ENV REFRESHED_AT=2022-09-20
|
||||
RUN apt-get update -yq && apt-get install -yq build-essential inotify-tools postgresql-client git curl gnupg xvfb libgtk-3-dev libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 cmake exiftool python3-pip python3-setuptools
|
||||
RUN curl -sL https://deb.nodesource.com/setup_16.x | bash && apt-get install nodejs -yq
|
||||
RUN npm install -g yarn wait-on
|
||||
|
@ -1,3 +1,6 @@
|
||||
/* eslint-env node */
|
||||
require("@rushstack/eslint-patch/modern-module-resolution");
|
||||
|
||||
module.exports = {
|
||||
root: true,
|
||||
|
||||
@ -6,10 +9,11 @@ module.exports = {
|
||||
},
|
||||
|
||||
extends: [
|
||||
"plugin:vue/essential",
|
||||
"eslint:recommended",
|
||||
"@vue/typescript/recommended",
|
||||
"plugin:vue/vue3-essential",
|
||||
"@vue/eslint-config-typescript/recommended",
|
||||
"plugin:prettier/recommended",
|
||||
"@vue/eslint-config-prettier",
|
||||
],
|
||||
|
||||
plugins: ["prettier"],
|
||||
@ -20,12 +24,11 @@ module.exports = {
|
||||
},
|
||||
|
||||
rules: {
|
||||
"no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
|
||||
"no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
|
||||
"no-underscore-dangle": [
|
||||
"error",
|
||||
{
|
||||
allow: ["__typename"],
|
||||
allow: ["__typename", "__schema"],
|
||||
},
|
||||
],
|
||||
"@typescript-eslint/no-explicit-any": "off",
|
||||
@ -50,4 +53,7 @@ module.exports = {
|
||||
},
|
||||
|
||||
ignorePatterns: ["src/typings/*.d.ts", "vue.config.js"],
|
||||
globals: {
|
||||
GeolocationPositionError: true,
|
||||
},
|
||||
};
|
||||
|
7
js/.gitignore
vendored
@ -2,9 +2,8 @@
|
||||
node_modules
|
||||
/dist
|
||||
|
||||
/tests/e2e/videos/
|
||||
/tests/e2e/screenshots/
|
||||
/coverage
|
||||
stats.html
|
||||
|
||||
# local env files
|
||||
.env.local
|
||||
@ -23,4 +22,6 @@ yarn-error.log*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
||||
.yarn
|
||||
/test-results/
|
||||
/playwright-report/
|
||||
/playwright/.cache/
|
||||
|
@ -1,3 +0,0 @@
|
||||
nodeLinker: node-modules
|
||||
|
||||
#yarnPath: .yarn/releases/yarn-3.1.1.cjs
|
41
js/README.md
@ -1,41 +0,0 @@
|
||||
# mobilizon
|
||||
|
||||
## Project setup
|
||||
|
||||
```
|
||||
yarn install
|
||||
```
|
||||
|
||||
### Compiles and hot-reloads for development
|
||||
|
||||
```
|
||||
yarn serve
|
||||
```
|
||||
|
||||
### Compiles and minifies for production
|
||||
|
||||
```
|
||||
yarn build
|
||||
```
|
||||
|
||||
### Run your unit tests
|
||||
|
||||
```
|
||||
yarn test:unit
|
||||
```
|
||||
|
||||
### Run your end-to-end tests
|
||||
|
||||
```
|
||||
yarn test:e2e
|
||||
```
|
||||
|
||||
### Lints and fixes files
|
||||
|
||||
```
|
||||
yarn lint
|
||||
```
|
||||
|
||||
### Customize configuration
|
||||
|
||||
See [Configuration Reference](https://cli.vuejs.org/config/).
|
@ -1,3 +0,0 @@
|
||||
module.exports = {
|
||||
presets: ["@vue/cli-plugin-babel/preset"],
|
||||
};
|
@ -1,7 +0,0 @@
|
||||
{
|
||||
"pluginsFile": "tests/e2e/plugins/index.js",
|
||||
"projectId": "86dpkx",
|
||||
"baseUrl": "http://localhost:4000",
|
||||
"viewportWidth": 1920,
|
||||
"viewportHeight": 1080
|
||||
}
|
12
js/env.d.ts
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
/// <reference types="histoire/vue" />
|
||||
|
||||
/// <reference types="vite/client" />
|
||||
|
||||
interface ImportMetaEnv {
|
||||
readonly VITE_SERVER_URL: string;
|
||||
readonly VITE_HISTOIRE_ENV: string;
|
||||
}
|
||||
|
||||
interface ImportMeta {
|
||||
readonly env: ImportMetaEnv;
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
const fetch = require("node-fetch");
|
||||
const fs = require("fs");
|
||||
import fetch from "node-fetch";
|
||||
import fs from "fs";
|
||||
|
||||
fetch(`http://localhost:4000/api`, {
|
||||
method: "POST",
|
||||
|
51
js/histoire.config.ts
Normal file
@ -0,0 +1,51 @@
|
||||
/// <reference types="@histoire/plugin-vue/components" />
|
||||
|
||||
import { defineConfig } from "histoire";
|
||||
import { HstVue } from "@histoire/plugin-vue";
|
||||
import path from "path";
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [HstVue()],
|
||||
setupFile: path.resolve(__dirname, "./src/histoire.setup.ts"),
|
||||
viteNodeInlineDeps: [/date-fns/],
|
||||
tree: {
|
||||
groups: [
|
||||
{
|
||||
title: "Actors",
|
||||
include: (file) => /^src\/components\/Account/.test(file.path),
|
||||
},
|
||||
{
|
||||
title: "Address",
|
||||
include: (file) => /^src\/components\/Address/.test(file.path),
|
||||
},
|
||||
{
|
||||
title: "Comments",
|
||||
include: (file) => /^src\/components\/Comment/.test(file.path),
|
||||
},
|
||||
{
|
||||
title: "Discussion",
|
||||
include: (file) => /^src\/components\/Discussion/.test(file.path),
|
||||
},
|
||||
{
|
||||
title: "Events",
|
||||
include: (file) => /^src\/components\/Event/.test(file.path),
|
||||
},
|
||||
{
|
||||
title: "Groups",
|
||||
include: (file) => /^src\/components\/Group/.test(file.path),
|
||||
},
|
||||
{
|
||||
title: "Home",
|
||||
include: (file) => /^src\/components\/Home/.test(file.path),
|
||||
},
|
||||
{
|
||||
title: "Posts",
|
||||
include: (file) => /^src\/components\/Post/.test(file.path),
|
||||
},
|
||||
{
|
||||
title: "Others",
|
||||
include: () => true,
|
||||
},
|
||||
],
|
||||
},
|
||||
});
|
@ -1,20 +0,0 @@
|
||||
module.exports = {
|
||||
preset: "@vue/cli-plugin-unit-jest/presets/typescript-and-babel",
|
||||
collectCoverage: true,
|
||||
collectCoverageFrom: [
|
||||
"**/*.{vue,ts}",
|
||||
"!**/node_modules/**",
|
||||
"!get_union_json.ts",
|
||||
],
|
||||
coverageReporters: ["html", "text", "text-summary"],
|
||||
reporters: ["default", "jest-junit"],
|
||||
// The following should fix the issue with svgs and ?inline loader (see Logo.vue), but doesn't work
|
||||
//
|
||||
// transform: {
|
||||
// "^.+\\.svg$": "<rootDir>/tests/unit/svgTransform.js",
|
||||
// },
|
||||
// moduleNameMapper: {
|
||||
// "^@/(.*svg)(\\?inline)$": "<rootDir>/src/$1",
|
||||
// "^@/(.*)$": "<rootDir>/src/$1",
|
||||
// },
|
||||
};
|
121
js/package.json
@ -1,23 +1,28 @@
|
||||
{
|
||||
"name": "mobilizon",
|
||||
"version": "2.1.0",
|
||||
"version": "3.0.3",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"serve": "vue-cli-service serve",
|
||||
"dev": "vite",
|
||||
"preview": "vite preview",
|
||||
"build": "yarn run build:assets && yarn run build:pictures",
|
||||
"test:unit": "LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8 TZ=UTC vue-cli-service test:unit",
|
||||
"test:e2e": "vue-cli-service test:e2e",
|
||||
"lint": "vue-cli-service lint",
|
||||
"build:assets": "vue-cli-service build --report",
|
||||
"build:pictures": "bash ./scripts/build/pictures.sh"
|
||||
"lint": "eslint --ext .ts,.vue --ignore-path .gitignore --fix src",
|
||||
"format": "prettier . --write",
|
||||
"build:assets": "vite build",
|
||||
"build:pictures": "bash ./scripts/build/pictures.sh",
|
||||
"story:dev": "histoire dev",
|
||||
"story:build": "histoire build",
|
||||
"story:preview": "histoire preview",
|
||||
"test": "vitest",
|
||||
"coverage": "vitest run --coverage"
|
||||
},
|
||||
"dependencies": {
|
||||
"@absinthe/socket": "^0.2.1",
|
||||
"@absinthe/socket-apollo-link": "^0.2.1",
|
||||
"@apollo/client": "^3.3.16",
|
||||
"@mdi/font": "^6.1.95",
|
||||
"@sentry/tracing": "^6.16.1",
|
||||
"@sentry/vue": "^6.16.1",
|
||||
"@oruga-ui/oruga-next": "^0.5.5",
|
||||
"@sentry/tracing": "^7.1",
|
||||
"@sentry/vue": "^7.1",
|
||||
"@tailwindcss/line-clamp": "^0.4.0",
|
||||
"@tiptap/core": "^2.0.0-beta.41",
|
||||
"@tiptap/extension-blockquote": "^2.0.0-beta.25",
|
||||
@ -36,27 +41,34 @@
|
||||
"@tiptap/extension-mention": "^2.0.0-beta.42",
|
||||
"@tiptap/extension-ordered-list": "^2.0.0-beta.24",
|
||||
"@tiptap/extension-paragraph": "^2.0.0-beta.22",
|
||||
"@tiptap/extension-placeholder": "^2.0.0-beta.199",
|
||||
"@tiptap/extension-strike": "^2.0.0-beta.26",
|
||||
"@tiptap/extension-text": "^2.0.0-beta.15",
|
||||
"@tiptap/extension-underline": "^2.0.0-beta.7",
|
||||
"@tiptap/vue-2": "^2.0.0-beta.21",
|
||||
"@tiptap/suggestion": "^2.0.0-beta.195",
|
||||
"@tiptap/vue-3": "^2.0.0-beta.96",
|
||||
"@vue-a11y/announcer": "^2.1.0",
|
||||
"@vue-a11y/skip-to": "^2.1.2",
|
||||
"@vue/apollo-option": "4.0.0-alpha.11",
|
||||
"@vue-leaflet/vue-leaflet": "^0.6.1",
|
||||
"@vue/apollo-composable": "^4.0.0-beta.1",
|
||||
"@vue/compiler-sfc": "^3.2.37",
|
||||
"@vueuse/core": "^9.1.0",
|
||||
"@vueuse/head": "^1.0",
|
||||
"@vueuse/router": "^9.0.2",
|
||||
"apollo-absinthe-upload-link": "^1.5.0",
|
||||
"autoprefixer": "^10",
|
||||
"blurhash": "^1.1.3",
|
||||
"buefy": "^0.9.0",
|
||||
"bulma-divider": "^0.2.0",
|
||||
"core-js": "^3.6.4",
|
||||
"blurhash": "^2.0.0",
|
||||
"date-fns": "^2.16.0",
|
||||
"date-fns-tz": "^1.1.6",
|
||||
"graphql": "^16.0.0",
|
||||
"floating-vue": "^2.0.0-beta.17",
|
||||
"graphql": "^15.8.0",
|
||||
"graphql-tag": "^2.10.3",
|
||||
"hammerjs": "^2.0.8",
|
||||
"intersection-observer": "^0.12.0",
|
||||
"jwt-decode": "^3.1.2",
|
||||
"leaflet": "^1.4.0",
|
||||
"leaflet.locatecontrol": "^0.76.0",
|
||||
"leaflet.locatecontrol": "^0.78",
|
||||
"leaflet.markercluster": "^1.5.3",
|
||||
"lodash": "^4.17.11",
|
||||
"ngeohash": "^0.6.3",
|
||||
"p-debounce": "^4.0.0",
|
||||
@ -67,64 +79,53 @@
|
||||
"tailwindcss": "^3",
|
||||
"tippy.js": "^6.2.3",
|
||||
"unfetch": "^4.2.0",
|
||||
"v-tooltip": "^2.1.3",
|
||||
"vue": "^2.6.11",
|
||||
"vue-class-component": "^7.2.3",
|
||||
"vue-i18n": "^8.14.0",
|
||||
"vue": "^3.2.37",
|
||||
"vue-i18n": "9",
|
||||
"vue-material-design-icons": "^5.1.2",
|
||||
"vue-matomo": "^4.1.0",
|
||||
"vue-meta": "^2.3.1",
|
||||
"vue-plausible": "^1.3.1",
|
||||
"vue-property-decorator": "^9.0.0",
|
||||
"vue-router": "^3.1.6",
|
||||
"vue-router": "4",
|
||||
"vue-scrollto": "^2.17.1",
|
||||
"vue2-leaflet": "^2.0.3",
|
||||
"vuedraggable": "^2.24.3"
|
||||
"vue-use-route-query": "^1.1.0",
|
||||
"zhyswan-vuedraggable": "^4.1.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@rushstack/eslint-patch": "^1.1.0",
|
||||
"@types/jest": "^27.0.2",
|
||||
"@histoire/plugin-vue": "^0.11.0",
|
||||
"@playwright/test": "^1.25.1",
|
||||
"@rushstack/eslint-patch": "^1.1.4",
|
||||
"@tailwindcss/forms": "^0.5.2",
|
||||
"@tailwindcss/typography": "^0.5.4",
|
||||
"@types/hammerjs": "^2.0.41",
|
||||
"@types/leaflet": "^1.5.2",
|
||||
"@types/leaflet.locatecontrol": "^0.74",
|
||||
"@types/leaflet.markercluster": "^1.5.1",
|
||||
"@types/lodash": "^4.14.141",
|
||||
"@types/ngeohash": "^0.6.2",
|
||||
"@types/phoenix": "^1.5.2",
|
||||
"@types/prosemirror-inputrules": "^1.0.2",
|
||||
"@types/prosemirror-model": "^1.7.2",
|
||||
"@types/prosemirror-state": "^1.2.4",
|
||||
"@types/prosemirror-view": "^1.11.4",
|
||||
"@types/sanitize-html": "^2.5.0",
|
||||
"@typescript-eslint/eslint-plugin": "^5.3.0",
|
||||
"@typescript-eslint/parser": "^5.3.0",
|
||||
"@vue/cli-plugin-babel": "~5.0.4",
|
||||
"@vue/cli-plugin-eslint": "~5.0.4",
|
||||
"@vue/cli-plugin-pwa": "~5.0.4",
|
||||
"@vue/cli-plugin-router": "~5.0.4",
|
||||
"@vue/cli-plugin-typescript": "~5.0.4",
|
||||
"@vue/cli-plugin-unit-jest": "~5.0.4",
|
||||
"@vue/cli-service": "~5.0.4",
|
||||
"@vue/eslint-config-typescript": "^10.0.0",
|
||||
"@vue/test-utils": "^1.1.0",
|
||||
"@vue/vue2-jest": "^27.0.0-alpha.3",
|
||||
"@vue/vue3-jest": "^27.0.0-alpha.1",
|
||||
"eslint": "^8.2.0",
|
||||
"@vitejs/plugin-vue": "^3.0.3",
|
||||
"@vitest/coverage-c8": "^0.25.2",
|
||||
"@vitest/ui": "^0.25.2",
|
||||
"@vue/eslint-config-prettier": "^7.0.0",
|
||||
"@vue/eslint-config-typescript": "^11.0.0",
|
||||
"@vue/test-utils": "^2.0.2",
|
||||
"eslint": "^8.21.0",
|
||||
"eslint-config-prettier": "^8.3.0",
|
||||
"eslint-plugin-import": "^2.20.2",
|
||||
"eslint-plugin-prettier": "^4.0.0",
|
||||
"eslint-plugin-vue": "^8.0.3",
|
||||
"eslint-plugin-vue": "^9.3.0",
|
||||
"flush-promises": "^1.0.2",
|
||||
"jest": "^27.1.0",
|
||||
"jest-junit": "^13.0.0",
|
||||
"histoire": "^0.11.0",
|
||||
"jsdom": "^20.0.0",
|
||||
"mock-apollo-client": "^1.1.0",
|
||||
"prettier": "^2.2.1",
|
||||
"prettier-eslint": "^14.0.0",
|
||||
"prettier-eslint": "^15.0.1",
|
||||
"rollup-plugin-visualizer": "^5.7.1",
|
||||
"sass": "^1.34.1",
|
||||
"sass-loader": "^12.0.0",
|
||||
"ts-jest": "27",
|
||||
"typescript": "~4.5.5",
|
||||
"vue-cli-plugin-tailwind": "~3.0.0",
|
||||
"vue-i18n-extract": "^2.0.4",
|
||||
"vue-template-compiler": "^2.6.11",
|
||||
"webpack-cli": "^4.7.0"
|
||||
},
|
||||
"packageManager": "yarn@3.1.1"
|
||||
"typescript": "~4.8.3",
|
||||
"vite": "^3.0.9",
|
||||
"vite-plugin-pwa": "^0.13.0",
|
||||
"vitest": "^0.25.2",
|
||||
"vue-i18n-extract": "^2.0.4"
|
||||
}
|
||||
}
|
||||
|
107
js/playwright.config.ts
Normal file
@ -0,0 +1,107 @@
|
||||
import type { PlaywrightTestConfig } from "@playwright/test";
|
||||
import { devices } from "@playwright/test";
|
||||
|
||||
/**
|
||||
* Read environment variables from file.
|
||||
* https://github.com/motdotla/dotenv
|
||||
*/
|
||||
// require('dotenv').config();
|
||||
|
||||
/**
|
||||
* See https://playwright.dev/docs/test-configuration.
|
||||
*/
|
||||
const config: PlaywrightTestConfig = {
|
||||
testDir: "./tests/e2e",
|
||||
/* Maximum time one test can run for. */
|
||||
timeout: 10 * 1000,
|
||||
expect: {
|
||||
/**
|
||||
* Maximum time expect() should wait for the condition to be met.
|
||||
* For example in `await expect(locator).toHaveText();`
|
||||
*/
|
||||
timeout: 5000,
|
||||
},
|
||||
/* Run tests in files in parallel */
|
||||
fullyParallel: true,
|
||||
/* Fail the build on CI if you accidentally left test.only in the source code. */
|
||||
forbidOnly: !!process.env.CI,
|
||||
/* Retry on CI only */
|
||||
retries: process.env.CI ? 2 : 0,
|
||||
/* Opt out of parallel tests on CI. */
|
||||
workers: process.env.CI ? 1 : undefined,
|
||||
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
|
||||
reporter: "html",
|
||||
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
|
||||
use: {
|
||||
/* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */
|
||||
actionTimeout: 0,
|
||||
/* Base URL to use in actions like `await page.goto('/')`. */
|
||||
baseURL: "http://localhost:4000",
|
||||
|
||||
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
|
||||
trace: "on-first-retry",
|
||||
},
|
||||
|
||||
/* Configure projects for major browsers */
|
||||
projects: [
|
||||
{
|
||||
name: "chromium",
|
||||
use: {
|
||||
...devices["Desktop Chrome"],
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
name: "firefox",
|
||||
use: {
|
||||
...devices["Desktop Firefox"],
|
||||
},
|
||||
},
|
||||
|
||||
// {
|
||||
// name: 'webkit',
|
||||
// use: {
|
||||
// ...devices['Desktop Safari'],
|
||||
// },
|
||||
// },
|
||||
|
||||
/* Test against mobile viewports. */
|
||||
// {
|
||||
// name: 'Mobile Chrome',
|
||||
// use: {
|
||||
// ...devices['Pixel 5'],
|
||||
// },
|
||||
// },
|
||||
// {
|
||||
// name: 'Mobile Safari',
|
||||
// use: {
|
||||
// ...devices['iPhone 12'],
|
||||
// },
|
||||
// },
|
||||
|
||||
/* Test against branded browsers. */
|
||||
// {
|
||||
// name: 'Microsoft Edge',
|
||||
// use: {
|
||||
// channel: 'msedge',
|
||||
// },
|
||||
// },
|
||||
// {
|
||||
// name: 'Google Chrome',
|
||||
// use: {
|
||||
// channel: 'chrome',
|
||||
// },
|
||||
// },
|
||||
],
|
||||
|
||||
/* Folder for test artifacts such as screenshots, videos, traces, etc. */
|
||||
// outputDir: 'test-results/',
|
||||
|
||||
/* Run your local dev server before starting the tests */
|
||||
// webServer: {
|
||||
// command: 'npm run start',
|
||||
// port: 3000,
|
||||
// },
|
||||
};
|
||||
|
||||
export default config;
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 9.4 KiB |
BIN
js/public/img/categories/arts-small.webp
Normal file
After Width: | Height: | Size: 7.3 KiB |
BIN
js/public/img/categories/arts.webp
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
js/public/img/categories/business-small.webp
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
js/public/img/categories/business.webp
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
js/public/img/categories/crafts-small.webp
Normal file
After Width: | Height: | Size: 9.0 KiB |
BIN
js/public/img/categories/crafts.webp
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
js/public/img/categories/film_media-small.webp
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
js/public/img/categories/film_media.webp
Normal file
After Width: | Height: | Size: 7.4 KiB |
BIN
js/public/img/categories/food_drink-small.webp
Normal file
After Width: | Height: | Size: 3.9 KiB |
BIN
js/public/img/categories/food_drink.webp
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
js/public/img/categories/games-small.webp
Normal file
After Width: | Height: | Size: 4.1 KiB |
BIN
js/public/img/categories/games.webp
Normal file
After Width: | Height: | Size: 9.0 KiB |
BIN
js/public/img/categories/health-small.webp
Normal file
After Width: | Height: | Size: 2.6 KiB |
BIN
js/public/img/categories/health.webp
Normal file
After Width: | Height: | Size: 5.8 KiB |
BIN
js/public/img/categories/lgbtq-small.webp
Normal file
After Width: | Height: | Size: 5.1 KiB |
BIN
js/public/img/categories/lgbtq.webp
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
js/public/img/categories/movements_politics-small.webp
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
js/public/img/categories/movements_politics.webp
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
js/public/img/categories/music-small.webp
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
js/public/img/categories/music.webp
Normal file
After Width: | Height: | Size: 8.7 KiB |
BIN
js/public/img/categories/outdoors_adventure-small.webp
Normal file
After Width: | Height: | Size: 5.2 KiB |
BIN
js/public/img/categories/outdoors_adventure.webp
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
js/public/img/categories/party-small.webp
Normal file
After Width: | Height: | Size: 776 B |
BIN
js/public/img/categories/party.webp
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
js/public/img/categories/photography-small.webp
Normal file
After Width: | Height: | Size: 3.3 KiB |
BIN
js/public/img/categories/photography.webp
Normal file
After Width: | Height: | Size: 8.6 KiB |
After Width: | Height: | Size: 6.4 KiB |
BIN
js/public/img/categories/spirituality_religion_beliefs.webp
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
js/public/img/categories/sports-small.webp
Normal file
After Width: | Height: | Size: 4.1 KiB |
BIN
js/public/img/categories/sports.webp
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
js/public/img/categories/theatre-small.webp
Normal file
After Width: | Height: | Size: 3.3 KiB |
BIN
js/public/img/categories/theatre.webp
Normal file
After Width: | Height: | Size: 7.3 KiB |
BIN
js/public/img/chapril/logo_mobilizon_black.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
js/public/img/chapril/logo_mobilizon_white.png
Normal file
After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 507 B |
Before Width: | Height: | Size: 668 B |
Before Width: | Height: | Size: 9.9 KiB |
Before Width: | Height: | Size: 920 B After Width: | Height: | Size: 920 B |
Before Width: | Height: | Size: 6.3 KiB |
BIN
js/public/img/mobilizon_default_card.png
Executable file → Normal file
Before Width: | Height: | Size: 185 KiB After Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 8.8 KiB |
BIN
js/public/img/mobilizon_logo.png
Executable file → Normal file
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 5.5 KiB |
@ -1,11 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 248.16 46.78">
|
||||
<title>Mobilizon Logo</title>
|
||||
<g data-name="header">
|
||||
<path d="M0 45.82l3.18-40.8a29.88 29.88 0 015.07-.36 27.74 27.74 0 014.95.36l4.86 17.16a92.19 92.19 0 012.34 10.08h.36a92.19 92.19 0 012.34-10.08L28 5.02a29.23 29.23 0 015-.36 29.23 29.23 0 015 .36l3.18 40.8a13.61 13.61 0 01-3.63.42 23.41 23.41 0 01-3.63-.24l-1.2-19.92q-.36-5.52-.48-12.84h-.44l-7.32 26.51a25.62 25.62 0 01-4 .3 23.36 23.36 0 01-3.84-.3L9.36 13.24H9q-.3 8.94-.48 12.84L7.26 46a22.47 22.47 0 01-3.6.24A13.75 13.75 0 010 45.82zM74 31.06q0 8-4.26 12.3a12.21 12.21 0 01-9 3.42 12.21 12.21 0 01-9-3.42q-4.26-4.26-4.26-12.3t4.24-12.31a12.21 12.21 0 019-3.42 12.21 12.21 0 019 3.42Q74 23.02 74 31.06zM60.75 20.98q-5.67 0-5.67 10.08t5.67 10.08q5.67 0 5.67-10.08t-5.67-10.08zM103.2 19.75q2.7 4.11 2.7 11.28T102 42.31a13.18 13.18 0 01-10 4.11 31.41 31.41 0 01-11.34-2V2.2l.4-.45h2.76A4 4 0 0187 2.83a5.38 5.38 0 01.93 3.57v11.94a12.08 12.08 0 017.56-2.7 8.71 8.71 0 017.71 4.11zm-9.72 2a7.28 7.28 0 00-5.58 2.82v16a15 15 0 004.08.54 5.25 5.25 0 004.68-2.67q1.68-2.67 1.68-7.59 0-9.03-4.86-9.1zM121 22v23.94a20.85 20.85 0 01-3.66.3 23 23 0 01-3.78-.3V24.75q0-3.24-2.7-3.24h-.72a9.32 9.32 0 01-.3-2.58 10.7 10.7 0 01.3-2.7 39.63 39.63 0 014.38-.24h1a5.19 5.19 0 014 1.62A6.27 6.27 0 01121 22z" />
|
||||
<path d="M119.82.84a7.37 7.37 0 01.6 3 7.37 7.37 0 01-.6 3 7.46 7.46 0 01-3.87.84 6.49 6.49 0 01-3.69-.93 7.37 7.37 0 01-.6-3 7.37 7.37 0 01.6-3 8.09 8.09 0 013.87-.84 7.05 7.05 0 013.69.93z" fill="#fff" />
|
||||
<path d="M139.08 40.42h2a10.23 10.23 0 01.6 3.18 9.24 9.24 0 01-.18 2.1 38.47 38.47 0 01-5.64.54q-6.48 0-6.48-7v-37l.36-.42h2.88a3.94 3.94 0 013.12 1.05 5.52 5.52 0 01.9 3.57v31.31q-.02 2.67 2.44 2.67zM155.94 22v23.94a20.85 20.85 0 01-3.66.3 23 23 0 01-3.78-.3V24.75q0-3.24-2.7-3.24h-.72a9.32 9.32 0 01-.3-2.58 10.7 10.7 0 01.3-2.7 39.63 39.63 0 014.38-.24h1a5.19 5.19 0 014.05 1.62 6.27 6.27 0 011.43 4.39z" />
|
||||
<path d="M154.8 2.84a7.37 7.37 0 01.6 3 7.37 7.37 0 01-.6 3 7.46 7.46 0 01-3.87.84 6.49 6.49 0 01-3.69-.93 7.37 7.37 0 01-.6-3 7.37 7.37 0 01.6-3 8.09 8.09 0 013.87-.84 7.05 7.05 0 013.69.93z" fill="#fff" />
|
||||
<path d="M163.08 39.22l8.76-11.82q1.32-1.8 4.8-5.7l-.18-.3a63.09 63.09 0 01-7.74.42H163a9.79 9.79 0 01-.24-2.34 15.8 15.8 0 01.42-3.3h20.4a16.31 16.31 0 011 4.26 4.1 4.1 0 01-.78 2.34L175 34.66a64.65 64.65 0 01-4.56 5.7l.18.24q3.12-.3 5.22-.3h2.58a15.35 15.35 0 006.12-.9 9.4 9.4 0 01.72 3.12q0 3.42-4.32 3.42h-18a14.27 14.27 0 01-.9-3.93 5.08 5.08 0 011.04-2.79zM215.88 31.06q0 8-4.26 12.3a13.63 13.63 0 01-18.06 0q-4.26-4.26-4.26-12.3t4.26-12.31a13.63 13.63 0 0118.06 0q4.26 4.27 4.26 12.31zm-13.29-10.08q-5.67 0-5.67 10.08t5.67 10.08q5.67 0 5.67-10.08t-5.67-10.08zM247 25.84v13.32a11 11 0 001.2 5.64 7 7 0 01-4.41 1.56q-2.43 0-3.33-1.14a5.69 5.69 0 01-.9-3.54V27.4a7.74 7.74 0 00-.72-3.87 2.78 2.78 0 00-2.58-1.17 8.62 8.62 0 00-6.3 3v20.58a20.85 20.85 0 01-3.66.3 23 23 0 01-3.78-.3v-29.7l.42-.36h2.76q3.42 0 4.08 3.6 4.38-3.84 8.73-3.84t6.42 2.82a12.17 12.17 0 012.07 7.38z" />
|
||||
<path d="M57.26 10.75a7.37 7.37 0 01-.6-3 7.37 7.37 0 01.6-3 8.09 8.09 0 013.87-.84 7.05 7.05 0 013.69.84 7.37 7.37 0 01.6 3 7.37 7.37 0 01-.6 3 7.46 7.46 0 01-3.87.84 6.49 6.49 0 01-3.69-.84zM198.26 10.75a7.37 7.37 0 01-.6-3 7.37 7.37 0 01.6-3 8.09 8.09 0 013.87-.84 7.05 7.05 0 013.69.84 7.37 7.37 0 01.6 3 7.37 7.37 0 01-.6 3 7.46 7.46 0 01-3.87.84 6.49 6.49 0 01-3.69-.84z" fill="#fff" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 5.5 KiB |
BIN
js/public/img/online-event.webp
Normal file
After Width: | Height: | Size: 29 KiB |
88
js/public/img/owncast_monochrome.svg
Normal file
@ -0,0 +1,88 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="100%"
|
||||
height="100%"
|
||||
viewBox="0 0 96 105"
|
||||
version="1.1"
|
||||
xml:space="preserve"
|
||||
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"
|
||||
class="svg-logo-solid"
|
||||
id="svg32"
|
||||
sodipodi:docname="owncast.svg"
|
||||
inkscape:version="1.0.2 (e86c870879, 2021-01-15)"><metadata
|
||||
id="metadata38"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs36" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1016"
|
||||
id="namedview34"
|
||||
showgrid="false"
|
||||
inkscape:zoom="7.5619048"
|
||||
inkscape:cx="48"
|
||||
inkscape:cy="52.367758"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg32" />
|
||||
<g
|
||||
transform="matrix(1.04457,0,0,1.04457,-0.742448,-0.0626735)"
|
||||
id="g30"
|
||||
style="fill:#000000">
|
||||
<g
|
||||
id="g12"
|
||||
style="fill:#000000">
|
||||
<path
|
||||
d="M91.5,75.35C92.533,72.55 92.583,70 91.65,67.7C90.783,65.567 89.117,63.767 86.65,62.3C84.35,60.967 81.567,60 78.3,59.4C75.333,58.867 72.1,58.633 68.6,58.7C65.233,58.8 61.967,59.167 58.8,59.8C55.767,60.433 53.1,61.233 50.8,62.2C48.533,63.167 46.767,64.217 45.5,65.35C44.233,66.55 43.567,67.783 43.5,69.05C43.4,70.55 44.167,72.167 45.8,73.9C47.3,75.5 49.4,77.067 52.1,78.6C54.8,80.133 57.783,81.45 61.05,82.55C64.55,83.717 68,84.467 71.4,84.8C73.6,85 75.65,85.033 77.55,84.9C79.617,84.7 81.533,84.267 83.3,83.6C85.2,82.867 86.817,81.85 88.15,80.55C89.65,79.117 90.767,77.383 91.5,75.35M70.6,67.5C71.733,68.1 72.567,68.833 73.1,69.7C73.633,70.667 73.75,71.767 73.45,73C73.217,73.867 72.833,74.617 72.3,75.25C71.8,75.817 71.133,76.267 70.3,76.6C69.6,76.9 68.75,77.117 67.75,77.25C66.783,77.35 65.817,77.367 64.85,77.3C63.15,77.2 61.283,76.867 59.25,76.3C57.483,75.767 55.783,75.1 54.15,74.3C52.65,73.567 51.417,72.8 50.45,72C49.517,71.167 49.067,70.433 49.1,69.8C49.167,69.267 49.55,68.75 50.25,68.25C50.95,67.783 51.917,67.367 53.15,67C54.383,66.6 55.75,66.3 57.25,66.1C58.95,65.9 60.567,65.8 62.1,65.8C63.8,65.833 65.333,65.967 66.7,66.2C68.167,66.5 69.467,66.933 70.6,67.5Z"
|
||||
style="fill:#000000;fill-rule:nonzero"
|
||||
id="path10" />
|
||||
</g>
|
||||
<g
|
||||
id="g16"
|
||||
style="fill:#000000">
|
||||
<path
|
||||
d="M66.6,15.05C66.467,11.45 65.567,8.45 63.9,6.05C62.133,3.417 59.533,1.617 56.1,0.65C55.333,0.417 54.517,0.25 53.65,0.15C52.883,0.05 52.1,0.033 51.3,0.1C50.567,0.1 49.833,0.183 49.1,0.35C48.467,0.483 47.767,0.7 47,1C44.533,1.967 42.3,3.667 40.3,6.1C38.433,8.3 36.833,11.033 35.5,14.3C34.333,17.067 33.4,20.1 32.7,23.4C32.033,26.5 31.583,29.65 31.35,32.85C31.15,35.75 31.133,38.533 31.3,41.2C31.5,43.833 31.867,46.217 32.4,48.35C33.467,52.717 35.1,55.4 37.3,56.4C37.5,56.5 37.7,56.583 37.9,56.65L39.2,56.85C39.367,56.85 39.617,56.833 39.95,56.8C41.35,56.667 42.933,56.083 44.7,55.05C46.4,54.017 48.183,52.6 50.05,50.8C52.05,48.867 53.983,46.617 55.85,44.05C57.817,41.383 59.567,38.567 61.1,35.6C62.9,32.1 64.283,28.667 65.25,25.3C66.25,21.6 66.7,18.183 66.6,15.05M47.55,23.15C47.883,23.217 48.167,23.3 48.4,23.4C51.1,24.333 52.483,26.483 52.55,29.85C52.583,32.617 51.733,35.8 50,39.4C48.567,42.4 46.85,45.033 44.85,47.3C42.983,49.433 41.417,50.567 40.15,50.7L39.9,50.75L39.45,50.7L39.2,50.6C38.267,50.167 37.617,48.75 37.25,46.35C36.883,43.917 36.9,41.133 37.3,38C37.733,34.5 38.55,31.433 39.75,28.8C41.183,25.667 42.95,23.817 45.05,23.25C45.417,23.15 45.683,23.1 45.85,23.1C46.117,23.067 46.383,23.05 46.65,23.05C46.917,23.05 47.217,23.083 47.55,23.15Z"
|
||||
style="fill:#000000;fill-rule:nonzero"
|
||||
id="path14" />
|
||||
</g>
|
||||
<g
|
||||
id="g20"
|
||||
style="fill:#000000">
|
||||
<path
|
||||
d="M2.7,33.6C2.3,34.133 1.967,34.717 1.7,35.35C1.4,36.117 1.183,36.9 1.05,37.7C0.35,40.967 0.733,44.133 2.2,47.2C3.4,49.733 5.333,52.117 8,54.35C10.367,56.317 13.033,57.917 16,59.15C19,60.383 21.617,60.95 23.85,60.85C24.283,60.85 24.75,60.8 25.25,60.7C25.75,60.6 26.167,60.467 26.5,60.3C26.833,60.133 27.15,59.917 27.45,59.65C27.75,59.383 27.983,59.083 28.15,58.75C28.95,57.217 28.733,54.85 27.5,51.65C26.233,48.55 24.317,45.367 21.75,42.1C19.083,38.7 16.3,36.017 13.4,34.05C10.267,31.95 7.617,31.167 5.45,31.7C4.917,31.833 4.417,32.067 3.95,32.4C3.483,32.7 3.067,33.1 2.7,33.6M10.1,43.55C10.267,43.25 10.433,43.017 10.6,42.85C10.767,42.683 10.967,42.533 11.2,42.4C11.467,42.3 11.7,42.233 11.9,42.2C12.967,42 14.317,42.467 15.95,43.6C17.417,44.567 18.883,45.933 20.35,47.7C21.683,49.3 22.75,50.867 23.55,52.4C24.317,53.967 24.55,55.067 24.25,55.7C24.183,55.833 24.1,55.933 24,56C23.9,56.133 23.783,56.217 23.65,56.25C23.583,56.317 23.45,56.367 23.25,56.4L22.7,56.5C21.633,56.567 20.25,56.267 18.55,55.6C16.883,54.933 15.317,54.05 13.85,52.95C12.283,51.783 11.117,50.517 10.35,49.15C9.483,47.583 9.283,46.017 9.75,44.45C9.85,44.117 9.967,43.817 10.1,43.55Z"
|
||||
style="fill:#000000;fill-rule:nonzero"
|
||||
id="path18" />
|
||||
</g>
|
||||
<g
|
||||
id="g24"
|
||||
style="fill:#000000">
|
||||
<path
|
||||
d="M34.95,74.2L34.75,74.2C33.717,74.167 32.767,74.517 31.9,75.25C31.1,75.95 30.417,76.95 29.85,78.25C29.35,79.417 29,80.733 28.8,82.2C28.6,83.667 28.567,85.15 28.7,86.65C28.967,89.817 29.9,92.5 31.5,94.7C33.367,97.233 35.967,98.9 39.3,99.7L39.4,99.7L39.7,99.8L39.85,99.8C43.483,100.5 45.917,99.817 47.15,97.75C47.717,96.783 48,95.55 48,94.05C47.967,92.617 47.7,91.05 47.2,89.35C46.7,87.617 46,85.883 45.1,84.15C44.2,82.383 43.183,80.783 42.05,79.35C40.85,77.85 39.65,76.65 38.45,75.75C37.183,74.817 36.017,74.3 34.95,74.2M33.55,80.4C34.083,78.933 34.767,78.233 35.6,78.3L35.65,78.3C36.483,78.4 37.467,79.267 38.6,80.9C39.733,82.533 40.583,84.25 41.15,86.05C41.783,88.017 41.917,89.583 41.55,90.75C41.117,91.983 40.05,92.483 38.35,92.25L38.3,92.25L38.25,92.2L38.1,92.2C36.433,91.867 35.15,91 34.25,89.6C33.483,88.333 33.05,86.8 32.95,85C32.85,83.233 33.05,81.7 33.55,80.4Z"
|
||||
style="fill:#000000;fill-rule:nonzero"
|
||||
id="path22" />
|
||||
</g>
|
||||
<g
|
||||
id="g28"
|
||||
style="fill:#000000">
|
||||
<path
|
||||
d="M22.7,69.65C22.4,69.417 22.033,69.217 21.6,69.05C21.167,68.883 20.717,68.767 20.25,68.7C19.817,68.6 19.35,68.533 18.85,68.5C17.417,68.467 16.017,68.683 14.65,69.15C13.317,69.583 12.233,70.233 11.4,71.1C10.567,72.033 10.167,73.067 10.2,74.2C10.233,75.433 10.817,76.767 11.95,78.2C12.25,78.567 12.617,78.967 13.05,79.4C13.383,79.733 13.767,80.033 14.2,80.3C14.533,80.5 14.9,80.683 15.3,80.85C15.767,81.017 16.133,81.1 16.4,81.1C17.6,81.267 18.767,81.017 19.9,80.35C21,79.717 21.95,78.817 22.75,77.65C23.583,76.45 24.1,75.217 24.3,73.95C24.5,72.55 24.25,71.4 23.55,70.5C23.283,70.167 23,69.883 22.7,69.65M21.7,71.7C22,72.1 22.067,72.633 21.9,73.3C21.767,73.933 21.467,74.583 21,75.25C20.533,75.883 20,76.383 19.4,76.75C18.767,77.15 18.15,77.317 17.55,77.25L17,77.15C16.8,77.083 16.617,76.983 16.45,76.85C16.317,76.783 16.133,76.65 15.9,76.45C15.767,76.317 15.6,76.133 15.4,75.9C14.8,75.133 14.567,74.433 14.7,73.8C14.767,73.233 15.117,72.733 15.75,72.3C16.317,71.9 17,71.6 17.8,71.4C18.6,71.2 19.367,71.117 20.1,71.15L20.65,71.2L21.1,71.3C21.233,71.367 21.35,71.433 21.45,71.5L21.7,71.7Z"
|
||||
style="fill:#000000;fill-rule:nonzero"
|
||||
id="path26" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 725 KiB |
BIN
js/public/img/pics/error.webp
Normal file
After Width: | Height: | Size: 112 KiB |
Before Width: | Height: | Size: 174 KiB |
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 1.2 MiB |
BIN
js/public/img/pics/event_creation.webp
Normal file
After Width: | Height: | Size: 174 KiB |
Before Width: | Height: | Size: 379 KiB |
BIN
js/public/img/pics/footer_1.webp
Normal file
After Width: | Height: | Size: 55 KiB |
Before Width: | Height: | Size: 359 KiB |
BIN
js/public/img/pics/footer_2.webp
Normal file
After Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 376 KiB |
BIN
js/public/img/pics/footer_3.webp
Normal file
After Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 358 KiB |
BIN
js/public/img/pics/footer_4.webp
Normal file
After Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 518 KiB |
BIN
js/public/img/pics/footer_5.webp
Normal file
After Width: | Height: | Size: 76 KiB |
Before Width: | Height: | Size: 193 KiB |
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 64 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 1.2 MiB |
BIN
js/public/img/pics/group.webp
Normal file
After Width: | Height: | Size: 193 KiB |