mirror of
https://github.com/Growstuff/growstuff.git
synced 2026-05-26 01:37:39 -04:00
Compare commits
252 Commits
planted_at
...
feature/pr
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4b9763e1da | ||
|
|
8709ac6e8f | ||
|
|
d75f503b16 | ||
|
|
1dfc5abca9 | ||
|
|
cc97916bac | ||
|
|
2134b934f8 | ||
|
|
c8cfb5d42a | ||
|
|
508ee5260d | ||
|
|
ee2fffd25b | ||
|
|
c92b912b28 | ||
|
|
f665fba91a | ||
|
|
3578fbdf64 | ||
|
|
0289786891 | ||
|
|
7dc66cb199 | ||
|
|
417602cb85 | ||
|
|
7a2760b086 | ||
|
|
9e0e21b565 | ||
|
|
a481cb7c06 | ||
|
|
a177a53d57 | ||
|
|
abbe9ee7ca | ||
|
|
48d2f0a224 | ||
|
|
074644d5c8 | ||
|
|
2e2e47d405 | ||
|
|
0544abcd8f | ||
|
|
73fb43fc4f | ||
|
|
532afafa0e | ||
|
|
378bd0d8f1 | ||
|
|
bb943fe0c6 | ||
|
|
28742d4936 | ||
|
|
d7e28e79fe | ||
|
|
322bca9281 | ||
|
|
7c081541eb | ||
|
|
475514a8f0 | ||
|
|
bb3fd3bcb7 | ||
|
|
5c86622823 | ||
|
|
fefd387481 | ||
|
|
93de9b35bc | ||
|
|
3d62cfcf81 | ||
|
|
f5a03b8991 | ||
|
|
8044640023 | ||
|
|
d1d718df9e | ||
|
|
da4bb17df8 | ||
|
|
0320cbe5ad | ||
|
|
4d3c4ca10d | ||
|
|
ab29de3d04 | ||
|
|
749134a7de | ||
|
|
1657a527e9 | ||
|
|
9ae90c1b7e | ||
|
|
ba6ec689c5 | ||
|
|
e7090631ab | ||
|
|
fadf5154e4 | ||
|
|
13ed098172 | ||
|
|
df2853edd3 | ||
|
|
948bb78656 | ||
|
|
9c8ae50188 | ||
|
|
0ee6260272 | ||
|
|
bf528220ab | ||
|
|
fd89cc6bce | ||
|
|
08a3890ba2 | ||
|
|
956c73cd1e | ||
|
|
8e74d1796a | ||
|
|
a98990ccd2 | ||
|
|
ac1463e2cf | ||
|
|
8564ec7a7c | ||
|
|
79a54351e3 | ||
|
|
48aa2aafd3 | ||
|
|
3b648925dd | ||
|
|
d04ffbeddd | ||
|
|
e1367613e6 | ||
|
|
70f78f1175 | ||
|
|
6131fdf141 | ||
|
|
44101e07fb | ||
|
|
b4c1104af0 | ||
|
|
3d4ba954e7 | ||
|
|
b8f7f95f32 | ||
|
|
0b639d5940 | ||
|
|
f216ddc368 | ||
|
|
967c0f4638 | ||
|
|
cac0e3cb12 | ||
|
|
65406b9e56 | ||
|
|
224109aaf8 | ||
|
|
bec1ec1879 | ||
|
|
e88e54b0c1 | ||
|
|
76a6c1d849 | ||
|
|
b7f4de782d | ||
|
|
112a626941 | ||
|
|
b72aeab136 | ||
|
|
a7d100fe7e | ||
|
|
810a9e39e3 | ||
|
|
b320435ddf | ||
|
|
2f7ce2721f | ||
|
|
c9e19203a9 | ||
|
|
005efab3be | ||
|
|
46599937d9 | ||
|
|
496a6ac2b6 | ||
|
|
9efb1f8486 | ||
|
|
59bd6f3450 | ||
|
|
3e9bf73297 | ||
|
|
dcff643637 | ||
|
|
a83966aa92 | ||
|
|
1c47e421b9 | ||
|
|
6289ab0951 | ||
|
|
d127647eeb | ||
|
|
9eda4bb2f2 | ||
|
|
f1d524130b | ||
|
|
e4de08f47f | ||
|
|
0b4820e5df | ||
|
|
d264905aa9 | ||
|
|
25d2c5f854 | ||
|
|
d383c8e2e4 | ||
|
|
ed89163311 | ||
|
|
26de3e7c5e | ||
|
|
6ae2de7e47 | ||
|
|
da74c19c2a | ||
|
|
6d44a2a780 | ||
|
|
d767a011a4 | ||
|
|
bbe6a3fd36 | ||
|
|
3eb2fe7637 | ||
|
|
7f0af10637 | ||
|
|
75d93bb3c3 | ||
|
|
c49f2bab19 | ||
|
|
ed71023306 | ||
|
|
59d95dfd77 | ||
|
|
e999c5870f | ||
|
|
072ec1dd82 | ||
|
|
8ecae23d61 | ||
|
|
d20ceb54b5 | ||
|
|
7e3be99aac | ||
|
|
d99d4a1bbe | ||
|
|
ea530754aa | ||
|
|
4bd322d8ca | ||
|
|
5fc41ca50f | ||
|
|
5da8f815d3 | ||
|
|
d71370c0bc | ||
|
|
d0d31edd5e | ||
|
|
67a2005f1e | ||
|
|
c58ca74b53 | ||
|
|
b528b40052 | ||
|
|
3b17265a92 | ||
|
|
0d22706d42 | ||
|
|
f8c93f16db | ||
|
|
8006d26c6e | ||
|
|
2766082696 | ||
|
|
d887d5c788 | ||
|
|
0634719afc | ||
|
|
a13cf93aeb | ||
|
|
04376f15a2 | ||
|
|
82d3f84e0c | ||
|
|
af6cee2f16 | ||
|
|
4f705ff37b | ||
|
|
4829d5513c | ||
|
|
d1419aaca4 | ||
|
|
2458afc451 | ||
|
|
278be7067f | ||
|
|
bc71c4a706 | ||
|
|
b1a42a2ed6 | ||
|
|
fe22c92a63 | ||
|
|
f00b31cf46 | ||
|
|
7cfee1d89c | ||
|
|
6c89cef5bc | ||
|
|
5d79aa3e60 | ||
|
|
29c8d87703 | ||
|
|
83ef779c11 | ||
|
|
4ada3e1585 | ||
|
|
88f5622d0c | ||
|
|
fa6752c668 | ||
|
|
f9186c1a8a | ||
|
|
82dcd1d86c | ||
|
|
b2146e791f | ||
|
|
a9c33a30d2 | ||
|
|
497cb6627d | ||
|
|
a8a96ae125 | ||
|
|
4dcafdb117 | ||
|
|
bd132c32fa | ||
|
|
2b5ed05628 | ||
|
|
df9f8445ad | ||
|
|
534d493693 | ||
|
|
3bfa1af67b | ||
|
|
e5e0aacfeb | ||
|
|
962cf0bca7 | ||
|
|
419ee298ff | ||
|
|
bdad7bd222 | ||
|
|
b07fff72d0 | ||
|
|
bff516d413 | ||
|
|
add339a09f | ||
|
|
c59226c1f0 | ||
|
|
7f8170d230 | ||
|
|
4d12b9afd7 | ||
|
|
0f8be52bdd | ||
|
|
88098db188 | ||
|
|
97fc9eb150 | ||
|
|
d0bdc1178e | ||
|
|
02b0c1617f | ||
|
|
93ea4af8d5 | ||
|
|
7ccdb7ed66 | ||
|
|
6660181142 | ||
|
|
b6cc950575 | ||
|
|
e699108d2a | ||
|
|
67c44fb17e | ||
|
|
11f2fbd399 | ||
|
|
540941f3b7 | ||
|
|
c8797cd0db | ||
|
|
871535e902 | ||
|
|
be0ce48be2 | ||
|
|
24f8f99691 | ||
|
|
0988e598f4 | ||
|
|
2e94ee9c6d | ||
|
|
8d42aed06f | ||
|
|
fbbef7747a | ||
|
|
9297484c48 | ||
|
|
8a507cb0bc | ||
|
|
12dc2cbff4 | ||
|
|
60cc7e6867 | ||
|
|
29cb393c62 | ||
|
|
88b0c9748c | ||
|
|
d60ae89e5a | ||
|
|
37b0831bdb | ||
|
|
6b99d20e50 | ||
|
|
cb0ee4e3b7 | ||
|
|
4074078560 | ||
|
|
2745948c46 | ||
|
|
0fb10cfd24 | ||
|
|
172dff42c6 | ||
|
|
6d5238c1ce | ||
|
|
3f78c15fc9 | ||
|
|
bc1476b4fe | ||
|
|
98e7226d67 | ||
|
|
70c28b3468 | ||
|
|
49e3180d17 | ||
|
|
2b2dc853df | ||
|
|
fbf25bfd61 | ||
|
|
7bdc171917 | ||
|
|
b1eae352cb | ||
|
|
56e8edb17e | ||
|
|
db98ebb50f | ||
|
|
98ae840ada | ||
|
|
70b9071a79 | ||
|
|
e484304eca | ||
|
|
400510a5e4 | ||
|
|
ed8aced07e | ||
|
|
89b8e7b98c | ||
|
|
bb8a333a21 | ||
|
|
8d2f8ffe34 | ||
|
|
56fcce0cce | ||
|
|
03fed2139f | ||
|
|
1462279b60 | ||
|
|
600da7f178 | ||
|
|
a7e5ec4f30 | ||
|
|
91fa54fc06 | ||
|
|
6d224bdc51 | ||
|
|
b48738a86c | ||
|
|
e2eecf4220 |
@@ -1,47 +0,0 @@
|
||||
plugins:
|
||||
brakeman:
|
||||
enabled: false # codeclimate's brakeman is stuck in rails 5 rules
|
||||
bundler-audit:
|
||||
enabled: true
|
||||
coffeelint:
|
||||
enabled: true
|
||||
duplication:
|
||||
enabled: true
|
||||
config:
|
||||
languages:
|
||||
- ruby
|
||||
- javascript
|
||||
editorconfig:
|
||||
enabled: true
|
||||
eslint:
|
||||
enabled: true
|
||||
fixme:
|
||||
enabled: true
|
||||
haml-lint:
|
||||
enabled: true
|
||||
nodesecurity:
|
||||
enabled: true
|
||||
rubocop:
|
||||
enabled: true
|
||||
channel: "rubocop-1-11"
|
||||
scss-lint:
|
||||
enabled: true
|
||||
shellcheck:
|
||||
enabled: true
|
||||
ratings:
|
||||
paths:
|
||||
- "**.rb"
|
||||
- "**.ru"
|
||||
- "**.js"
|
||||
- "**.coffee"
|
||||
- "**.scss"
|
||||
- "**.haml"
|
||||
- Gemfile.lock
|
||||
exclude_paths:
|
||||
- config/
|
||||
- db/
|
||||
- spec/
|
||||
- public/
|
||||
- app/assets/stylesheets/bootstrap-accessibility.css
|
||||
- app/assets/javascripts/bootstrap*
|
||||
- app/assets/stylesheets/leaflet_overrides.scss
|
||||
102
.github/workflows/ci-features-admin.yml
vendored
Normal file
102
.github/workflows/ci-features-admin.yml
vendored
Normal file
@@ -0,0 +1,102 @@
|
||||
name: CI Features - Admin
|
||||
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
rspec:
|
||||
runs-on: ubuntu-latest
|
||||
services:
|
||||
db:
|
||||
image: postgres
|
||||
env:
|
||||
##
|
||||
# The Postgres service fails its docker health check unless you
|
||||
# specify these environment variables
|
||||
#
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_DB: growstuff_test
|
||||
ports: ['5432:5432']
|
||||
options: >-
|
||||
--health-cmd pg_isready
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
env:
|
||||
APP_DOMAIN_NAME: localhost:3000
|
||||
APP_PROTOCOL: http
|
||||
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
|
||||
DATABASE_URL: postgres://postgres:postgres@localhost:5432/growstuff_test
|
||||
DEVISE_SECRET_KEY: secret
|
||||
ELASTIC_SEARCH_VERSION: "7.5.1-amd64"
|
||||
GROWSTUFF_EMAIL: "noreply@test.growstuff.org"
|
||||
GROWSTUFF_FLICKR_KEY: secretkey"
|
||||
GROWSTUFF_FLICKR_SECRET: secretsecret
|
||||
GROWSTUFF_SITE_NAME: "Growstuff (travis)"
|
||||
RAILS_ENV: test
|
||||
RAILS_SECRET_TOKEN: supersecret
|
||||
|
||||
steps:
|
||||
- name: Checkout this repo
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Configure sysctl limits
|
||||
run: |
|
||||
sudo swapoff -a
|
||||
sudo sysctl -w vm.swappiness=1
|
||||
sudo sysctl -w fs.file-max=262144
|
||||
sudo sysctl -w vm.max_map_count=262144
|
||||
|
||||
- name: Start Elasticsearch
|
||||
uses: elastic/elastic-github-actions/elasticsearch@master
|
||||
with:
|
||||
stack-version: 7.5.1
|
||||
|
||||
##
|
||||
# Cache Yarn modules
|
||||
#
|
||||
# See https://github.com/actions/cache/blob/master/examples.md#node---yarn for details
|
||||
#
|
||||
- name: Get yarn cache directory path
|
||||
id: yarn-cache-dir-path
|
||||
run: echo "::set-output name=dir::$(yarn cache dir)"
|
||||
- name: Setup yarn cache
|
||||
uses: actions/cache@v4
|
||||
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
|
||||
with:
|
||||
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
|
||||
- name: Install required OS packages
|
||||
run: |
|
||||
sudo apt-get -y install libpq-dev google-chrome-stable
|
||||
|
||||
- name: Install NodeJS
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '12'
|
||||
|
||||
- name: Install Ruby (version given by .ruby-version) and Bundler
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
bundler-cache: true
|
||||
|
||||
- name: Install required JS packages
|
||||
run: yarn install
|
||||
|
||||
- name: install chrome
|
||||
run: sudo apt-get install google-chrome-stable
|
||||
|
||||
- name: Prepare database for testing
|
||||
run: bundle exec rails db:prepare
|
||||
|
||||
- name: precompile assets
|
||||
run: bundle exec rails assets:precompile
|
||||
|
||||
- name: index into elastic search
|
||||
run: bundle exec rails search:reindex
|
||||
|
||||
- name: Run rspec (admin/)
|
||||
run: bundle exec rspec spec/features/admin/ -fd -t ~@flaky
|
||||
102
.github/workflows/ci-features-comments.yml
vendored
Normal file
102
.github/workflows/ci-features-comments.yml
vendored
Normal file
@@ -0,0 +1,102 @@
|
||||
name: CI Features - Comments
|
||||
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
rspec:
|
||||
runs-on: ubuntu-latest
|
||||
services:
|
||||
db:
|
||||
image: postgres
|
||||
env:
|
||||
##
|
||||
# The Postgres service fails its docker health check unless you
|
||||
# specify these environment variables
|
||||
#
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_DB: growstuff_test
|
||||
ports: ['5432:5432']
|
||||
options: >-
|
||||
--health-cmd pg_isready
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
env:
|
||||
APP_DOMAIN_NAME: localhost:3000
|
||||
APP_PROTOCOL: http
|
||||
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
|
||||
DATABASE_URL: postgres://postgres:postgres@localhost:5432/growstuff_test
|
||||
DEVISE_SECRET_KEY: secret
|
||||
ELASTIC_SEARCH_VERSION: "7.5.1-amd64"
|
||||
GROWSTUFF_EMAIL: "noreply@test.growstuff.org"
|
||||
GROWSTUFF_FLICKR_KEY: secretkey"
|
||||
GROWSTUFF_FLICKR_SECRET: secretsecret
|
||||
GROWSTUFF_SITE_NAME: "Growstuff (travis)"
|
||||
RAILS_ENV: test
|
||||
RAILS_SECRET_TOKEN: supersecret
|
||||
|
||||
steps:
|
||||
- name: Checkout this repo
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Configure sysctl limits
|
||||
run: |
|
||||
sudo swapoff -a
|
||||
sudo sysctl -w vm.swappiness=1
|
||||
sudo sysctl -w fs.file-max=262144
|
||||
sudo sysctl -w vm.max_map_count=262144
|
||||
|
||||
- name: Start Elasticsearch
|
||||
uses: elastic/elastic-github-actions/elasticsearch@master
|
||||
with:
|
||||
stack-version: 7.5.1
|
||||
|
||||
##
|
||||
# Cache Yarn modules
|
||||
#
|
||||
# See https://github.com/actions/cache/blob/master/examples.md#node---yarn for details
|
||||
#
|
||||
- name: Get yarn cache directory path
|
||||
id: yarn-cache-dir-path
|
||||
run: echo "::set-output name=dir::$(yarn cache dir)"
|
||||
- name: Setup yarn cache
|
||||
uses: actions/cache@v4
|
||||
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
|
||||
with:
|
||||
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
|
||||
- name: Install required OS packages
|
||||
run: |
|
||||
sudo apt-get -y install libpq-dev google-chrome-stable
|
||||
|
||||
- name: Install NodeJS
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '12'
|
||||
|
||||
- name: Install Ruby (version given by .ruby-version) and Bundler
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
bundler-cache: true
|
||||
|
||||
- name: Install required JS packages
|
||||
run: yarn install
|
||||
|
||||
- name: install chrome
|
||||
run: sudo apt-get install google-chrome-stable
|
||||
|
||||
- name: Prepare database for testing
|
||||
run: bundle exec rails db:prepare
|
||||
|
||||
- name: precompile assets
|
||||
run: bundle exec rails assets:precompile
|
||||
|
||||
- name: index into elastic search
|
||||
run: bundle exec rails search:reindex
|
||||
|
||||
- name: Run rspec (comments/)
|
||||
run: bundle exec rspec spec/features/comments/ -fd -t ~@flaky
|
||||
103
.github/workflows/ci-features-conversations.yml
vendored
Normal file
103
.github/workflows/ci-features-conversations.yml
vendored
Normal file
@@ -0,0 +1,103 @@
|
||||
name: CI Features - Conversations
|
||||
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
rspec:
|
||||
runs-on: ubuntu-latest
|
||||
services:
|
||||
db:
|
||||
image: postgres
|
||||
env:
|
||||
##
|
||||
# The Postgres service fails its docker health check unless you
|
||||
# specify these environment variables
|
||||
#
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_DB: growstuff_test
|
||||
ports: ['5432:5432']
|
||||
options: >-
|
||||
--health-cmd pg_isready
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
env:
|
||||
APP_DOMAIN_NAME: localhost:3000
|
||||
APP_PROTOCOL: http
|
||||
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
|
||||
DATABASE_URL: postgres://postgres:postgres@localhost:5432/growstuff_test
|
||||
DEVISE_SECRET_KEY: secret
|
||||
ELASTIC_SEARCH_VERSION: "7.5.1-amd64"
|
||||
GROWSTUFF_EMAIL: "noreply@test.growstuff.org"
|
||||
GROWSTUFF_FLICKR_KEY: secretkey"
|
||||
GROWSTUFF_FLICKR_SECRET: secretsecret
|
||||
GROWSTUFF_SITE_NAME: "Growstuff (travis)"
|
||||
RAILS_ENV: test
|
||||
RAILS_SECRET_TOKEN: supersecret
|
||||
|
||||
steps:
|
||||
- name: Checkout this repo
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Configure sysctl limits
|
||||
run: |
|
||||
sudo swapoff -a
|
||||
sudo sysctl -w vm.swappiness=1
|
||||
sudo sysctl -w fs.file-max=262144
|
||||
sudo sysctl -w vm.max_map_count=262144
|
||||
|
||||
- name: Start Elasticsearch
|
||||
uses: elastic/elastic-github-actions/elasticsearch@master
|
||||
with:
|
||||
stack-version: 7.5.1
|
||||
|
||||
##
|
||||
# Cache Yarn modules
|
||||
#
|
||||
# See https://github.com/actions/cache/blob/master/examples.md#node---yarn for details
|
||||
#
|
||||
- name: Get yarn cache directory path
|
||||
id: yarn-cache-dir-path
|
||||
run: echo "::set-output name=dir::$(yarn cache dir)"
|
||||
- name: Setup yarn cache
|
||||
uses: actions/cache@v4
|
||||
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
|
||||
with:
|
||||
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
|
||||
- name: Install required OS packages
|
||||
run: |
|
||||
sudo apt-get -y install libpq-dev google-chrome-stable
|
||||
|
||||
- name: Install NodeJS
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '12'
|
||||
|
||||
- name: Install Ruby (version given by .ruby-version) and Bundler
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
bundler-cache: true
|
||||
|
||||
- name: Install required JS packages
|
||||
run: yarn install
|
||||
|
||||
- name: install chrome
|
||||
run: sudo apt-get install google-chrome-stable
|
||||
|
||||
- name: Prepare database for testing
|
||||
run: bundle exec rails db:prepare
|
||||
|
||||
- name: precompile assets
|
||||
run: bundle exec rails assets:precompile
|
||||
|
||||
- name: index into elastic search
|
||||
run: bundle exec rails search:reindex
|
||||
|
||||
- name: Run rspec (conversations/)
|
||||
run: bundle exec rspec spec/features/conversations/ -fd -t ~@flaky
|
||||
|
||||
102
.github/workflows/ci-features-crops.yml
vendored
Normal file
102
.github/workflows/ci-features-crops.yml
vendored
Normal file
@@ -0,0 +1,102 @@
|
||||
name: CI Features - Crops
|
||||
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
rspec:
|
||||
runs-on: ubuntu-latest
|
||||
services:
|
||||
db:
|
||||
image: postgres
|
||||
env:
|
||||
##
|
||||
# The Postgres service fails its docker health check unless you
|
||||
# specify these environment variables
|
||||
#
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_DB: growstuff_test
|
||||
ports: ['5432:5432']
|
||||
options: >-
|
||||
--health-cmd pg_isready
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
env:
|
||||
APP_DOMAIN_NAME: localhost:3000
|
||||
APP_PROTOCOL: http
|
||||
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
|
||||
DATABASE_URL: postgres://postgres:postgres@localhost:5432/growstuff_test
|
||||
DEVISE_SECRET_KEY: secret
|
||||
ELASTIC_SEARCH_VERSION: "7.5.1-amd64"
|
||||
GROWSTUFF_EMAIL: "noreply@test.growstuff.org"
|
||||
GROWSTUFF_FLICKR_KEY: secretkey"
|
||||
GROWSTUFF_FLICKR_SECRET: secretsecret
|
||||
GROWSTUFF_SITE_NAME: "Growstuff (travis)"
|
||||
RAILS_ENV: test
|
||||
RAILS_SECRET_TOKEN: supersecret
|
||||
|
||||
steps:
|
||||
- name: Checkout this repo
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Configure sysctl limits
|
||||
run: |
|
||||
sudo swapoff -a
|
||||
sudo sysctl -w vm.swappiness=1
|
||||
sudo sysctl -w fs.file-max=262144
|
||||
sudo sysctl -w vm.max_map_count=262144
|
||||
|
||||
- name: Start Elasticsearch
|
||||
uses: elastic/elastic-github-actions/elasticsearch@master
|
||||
with:
|
||||
stack-version: 7.5.1
|
||||
|
||||
##
|
||||
# Cache Yarn modules
|
||||
#
|
||||
# See https://github.com/actions/cache/blob/master/examples.md#node---yarn for details
|
||||
#
|
||||
- name: Get yarn cache directory path
|
||||
id: yarn-cache-dir-path
|
||||
run: echo "::set-output name=dir::$(yarn cache dir)"
|
||||
- name: Setup yarn cache
|
||||
uses: actions/cache@v4
|
||||
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
|
||||
with:
|
||||
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
|
||||
- name: Install required OS packages
|
||||
run: |
|
||||
sudo apt-get -y install libpq-dev google-chrome-stable
|
||||
|
||||
- name: Install NodeJS
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '12'
|
||||
|
||||
- name: Install Ruby (version given by .ruby-version) and Bundler
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
bundler-cache: true
|
||||
|
||||
- name: Install required JS packages
|
||||
run: yarn install
|
||||
|
||||
- name: install chrome
|
||||
run: sudo apt-get install google-chrome-stable
|
||||
|
||||
- name: Prepare database for testing
|
||||
run: bundle exec rails db:prepare
|
||||
|
||||
- name: precompile assets
|
||||
run: bundle exec rails assets:precompile
|
||||
|
||||
- name: index into elastic search
|
||||
run: bundle exec rails search:reindex
|
||||
|
||||
- name: Run rspec (crops/)
|
||||
run: bundle exec rspec spec/features/crops/ -fd -t ~@flaky
|
||||
102
.github/workflows/ci-features-gardens.yml
vendored
Normal file
102
.github/workflows/ci-features-gardens.yml
vendored
Normal file
@@ -0,0 +1,102 @@
|
||||
name: CI Features - Gardens
|
||||
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
rspec:
|
||||
runs-on: ubuntu-latest
|
||||
services:
|
||||
db:
|
||||
image: postgres
|
||||
env:
|
||||
##
|
||||
# The Postgres service fails its docker health check unless you
|
||||
# specify these environment variables
|
||||
#
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_DB: growstuff_test
|
||||
ports: ['5432:5432']
|
||||
options: >-
|
||||
--health-cmd pg_isready
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
env:
|
||||
APP_DOMAIN_NAME: localhost:3000
|
||||
APP_PROTOCOL: http
|
||||
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
|
||||
DATABASE_URL: postgres://postgres:postgres@localhost:5432/growstuff_test
|
||||
DEVISE_SECRET_KEY: secret
|
||||
ELASTIC_SEARCH_VERSION: "7.5.1-amd64"
|
||||
GROWSTUFF_EMAIL: "noreply@test.growstuff.org"
|
||||
GROWSTUFF_FLICKR_KEY: secretkey"
|
||||
GROWSTUFF_FLICKR_SECRET: secretsecret
|
||||
GROWSTUFF_SITE_NAME: "Growstuff (travis)"
|
||||
RAILS_ENV: test
|
||||
RAILS_SECRET_TOKEN: supersecret
|
||||
|
||||
steps:
|
||||
- name: Checkout this repo
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Configure sysctl limits
|
||||
run: |
|
||||
sudo swapoff -a
|
||||
sudo sysctl -w vm.swappiness=1
|
||||
sudo sysctl -w fs.file-max=262144
|
||||
sudo sysctl -w vm.max_map_count=262144
|
||||
|
||||
- name: Start Elasticsearch
|
||||
uses: elastic/elastic-github-actions/elasticsearch@master
|
||||
with:
|
||||
stack-version: 7.5.1
|
||||
|
||||
##
|
||||
# Cache Yarn modules
|
||||
#
|
||||
# See https://github.com/actions/cache/blob/master/examples.md#node---yarn for details
|
||||
#
|
||||
- name: Get yarn cache directory path
|
||||
id: yarn-cache-dir-path
|
||||
run: echo "::set-output name=dir::$(yarn cache dir)"
|
||||
- name: Setup yarn cache
|
||||
uses: actions/cache@v4
|
||||
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
|
||||
with:
|
||||
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
|
||||
- name: Install required OS packages
|
||||
run: |
|
||||
sudo apt-get -y install libpq-dev google-chrome-stable
|
||||
|
||||
- name: Install NodeJS
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '12'
|
||||
|
||||
- name: Install Ruby (version given by .ruby-version) and Bundler
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
bundler-cache: true
|
||||
|
||||
- name: Install required JS packages
|
||||
run: yarn install
|
||||
|
||||
- name: install chrome
|
||||
run: sudo apt-get install google-chrome-stable
|
||||
|
||||
- name: Prepare database for testing
|
||||
run: bundle exec rails db:prepare
|
||||
|
||||
- name: precompile assets
|
||||
run: bundle exec rails assets:precompile
|
||||
|
||||
- name: index into elastic search
|
||||
run: bundle exec rails search:reindex
|
||||
|
||||
- name: Run rspec (gardens/)
|
||||
run: bundle exec rspec spec/features/gardens/ -fd -t ~@flaky
|
||||
102
.github/workflows/ci-features-harvests.yml
vendored
Normal file
102
.github/workflows/ci-features-harvests.yml
vendored
Normal file
@@ -0,0 +1,102 @@
|
||||
name: CI Features - Harvests
|
||||
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
rspec:
|
||||
runs-on: ubuntu-latest
|
||||
services:
|
||||
db:
|
||||
image: postgres
|
||||
env:
|
||||
##
|
||||
# The Postgres service fails its docker health check unless you
|
||||
# specify these environment variables
|
||||
#
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_DB: growstuff_test
|
||||
ports: ['5432:5432']
|
||||
options: >-
|
||||
--health-cmd pg_isready
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
env:
|
||||
APP_DOMAIN_NAME: localhost:3000
|
||||
APP_PROTOCOL: http
|
||||
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
|
||||
DATABASE_URL: postgres://postgres:postgres@localhost:5432/growstuff_test
|
||||
DEVISE_SECRET_KEY: secret
|
||||
ELASTIC_SEARCH_VERSION: "7.5.1-amd64"
|
||||
GROWSTUFF_EMAIL: "noreply@test.growstuff.org"
|
||||
GROWSTUFF_FLICKR_KEY: secretkey"
|
||||
GROWSTUFF_FLICKR_SECRET: secretsecret
|
||||
GROWSTUFF_SITE_NAME: "Growstuff (travis)"
|
||||
RAILS_ENV: test
|
||||
RAILS_SECRET_TOKEN: supersecret
|
||||
|
||||
steps:
|
||||
- name: Checkout this repo
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Configure sysctl limits
|
||||
run: |
|
||||
sudo swapoff -a
|
||||
sudo sysctl -w vm.swappiness=1
|
||||
sudo sysctl -w fs.file-max=262144
|
||||
sudo sysctl -w vm.max_map_count=262144
|
||||
|
||||
- name: Start Elasticsearch
|
||||
uses: elastic/elastic-github-actions/elasticsearch@master
|
||||
with:
|
||||
stack-version: 7.5.1
|
||||
|
||||
##
|
||||
# Cache Yarn modules
|
||||
#
|
||||
# See https://github.com/actions/cache/blob/master/examples.md#node---yarn for details
|
||||
#
|
||||
- name: Get yarn cache directory path
|
||||
id: yarn-cache-dir-path
|
||||
run: echo "::set-output name=dir::$(yarn cache dir)"
|
||||
- name: Setup yarn cache
|
||||
uses: actions/cache@v4
|
||||
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
|
||||
with:
|
||||
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
|
||||
- name: Install required OS packages
|
||||
run: |
|
||||
sudo apt-get -y install libpq-dev google-chrome-stable
|
||||
|
||||
- name: Install NodeJS
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '12'
|
||||
|
||||
- name: Install Ruby (version given by .ruby-version) and Bundler
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
bundler-cache: true
|
||||
|
||||
- name: Install required JS packages
|
||||
run: yarn install
|
||||
|
||||
- name: install chrome
|
||||
run: sudo apt-get install google-chrome-stable
|
||||
|
||||
- name: Prepare database for testing
|
||||
run: bundle exec rails db:prepare
|
||||
|
||||
- name: precompile assets
|
||||
run: bundle exec rails assets:precompile
|
||||
|
||||
- name: index into elastic search
|
||||
run: bundle exec rails search:reindex
|
||||
|
||||
- name: Run rspec (harvests/)
|
||||
run: bundle exec rspec spec/features/harvests/ -fd -t ~@flaky
|
||||
102
.github/workflows/ci-features-home.yml
vendored
Normal file
102
.github/workflows/ci-features-home.yml
vendored
Normal file
@@ -0,0 +1,102 @@
|
||||
name: CI Features - Home
|
||||
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
rspec:
|
||||
runs-on: ubuntu-latest
|
||||
services:
|
||||
db:
|
||||
image: postgres
|
||||
env:
|
||||
##
|
||||
# The Postgres service fails its docker health check unless you
|
||||
# specify these environment variables
|
||||
#
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_DB: growstuff_test
|
||||
ports: ['5432:5432']
|
||||
options: >-
|
||||
--health-cmd pg_isready
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
env:
|
||||
APP_DOMAIN_NAME: localhost:3000
|
||||
APP_PROTOCOL: http
|
||||
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
|
||||
DATABASE_URL: postgres://postgres:postgres@localhost:5432/growstuff_test
|
||||
DEVISE_SECRET_KEY: secret
|
||||
ELASTIC_SEARCH_VERSION: "7.5.1-amd64"
|
||||
GROWSTUFF_EMAIL: "noreply@test.growstuff.org"
|
||||
GROWSTUFF_FLICKR_KEY: secretkey"
|
||||
GROWSTUFF_FLICKR_SECRET: secretsecret
|
||||
GROWSTUFF_SITE_NAME: "Growstuff (travis)"
|
||||
RAILS_ENV: test
|
||||
RAILS_SECRET_TOKEN: supersecret
|
||||
|
||||
steps:
|
||||
- name: Checkout this repo
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Configure sysctl limits
|
||||
run: |
|
||||
sudo swapoff -a
|
||||
sudo sysctl -w vm.swappiness=1
|
||||
sudo sysctl -w fs.file-max=262144
|
||||
sudo sysctl -w vm.max_map_count=262144
|
||||
|
||||
- name: Start Elasticsearch
|
||||
uses: elastic/elastic-github-actions/elasticsearch@master
|
||||
with:
|
||||
stack-version: 7.5.1
|
||||
|
||||
##
|
||||
# Cache Yarn modules
|
||||
#
|
||||
# See https://github.com/actions/cache/blob/master/examples.md#node---yarn for details
|
||||
#
|
||||
- name: Get yarn cache directory path
|
||||
id: yarn-cache-dir-path
|
||||
run: echo "::set-output name=dir::$(yarn cache dir)"
|
||||
- name: Setup yarn cache
|
||||
uses: actions/cache@v4
|
||||
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
|
||||
with:
|
||||
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
|
||||
- name: Install required OS packages
|
||||
run: |
|
||||
sudo apt-get -y install libpq-dev google-chrome-stable
|
||||
|
||||
- name: Install NodeJS
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '12'
|
||||
|
||||
- name: Install Ruby (version given by .ruby-version) and Bundler
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
bundler-cache: true
|
||||
|
||||
- name: Install required JS packages
|
||||
run: yarn install
|
||||
|
||||
- name: install chrome
|
||||
run: sudo apt-get install google-chrome-stable
|
||||
|
||||
- name: Prepare database for testing
|
||||
run: bundle exec rails db:prepare
|
||||
|
||||
- name: precompile assets
|
||||
run: bundle exec rails assets:precompile
|
||||
|
||||
- name: index into elastic search
|
||||
run: bundle exec rails search:reindex
|
||||
|
||||
- name: Run rspec (home/)
|
||||
run: bundle exec rspec spec/features/home/ -fd -t ~@flaky
|
||||
102
.github/workflows/ci-features-members.yml
vendored
Normal file
102
.github/workflows/ci-features-members.yml
vendored
Normal file
@@ -0,0 +1,102 @@
|
||||
name: CI Features - Members
|
||||
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
rspec:
|
||||
runs-on: ubuntu-latest
|
||||
services:
|
||||
db:
|
||||
image: postgres
|
||||
env:
|
||||
##
|
||||
# The Postgres service fails its docker health check unless you
|
||||
# specify these environment variables
|
||||
#
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_DB: growstuff_test
|
||||
ports: ['5432:5432']
|
||||
options: >-
|
||||
--health-cmd pg_isready
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
env:
|
||||
APP_DOMAIN_NAME: localhost:3000
|
||||
APP_PROTOCOL: http
|
||||
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
|
||||
DATABASE_URL: postgres://postgres:postgres@localhost:5432/growstuff_test
|
||||
DEVISE_SECRET_KEY: secret
|
||||
ELASTIC_SEARCH_VERSION: "7.5.1-amd64"
|
||||
GROWSTUFF_EMAIL: "noreply@test.growstuff.org"
|
||||
GROWSTUFF_FLICKR_KEY: secretkey"
|
||||
GROWSTUFF_FLICKR_SECRET: secretsecret
|
||||
GROWSTUFF_SITE_NAME: "Growstuff (travis)"
|
||||
RAILS_ENV: test
|
||||
RAILS_SECRET_TOKEN: supersecret
|
||||
|
||||
steps:
|
||||
- name: Checkout this repo
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Configure sysctl limits
|
||||
run: |
|
||||
sudo swapoff -a
|
||||
sudo sysctl -w vm.swappiness=1
|
||||
sudo sysctl -w fs.file-max=262144
|
||||
sudo sysctl -w vm.max_map_count=262144
|
||||
|
||||
- name: Start Elasticsearch
|
||||
uses: elastic/elastic-github-actions/elasticsearch@master
|
||||
with:
|
||||
stack-version: 7.5.1
|
||||
|
||||
##
|
||||
# Cache Yarn modules
|
||||
#
|
||||
# See https://github.com/actions/cache/blob/master/examples.md#node---yarn for details
|
||||
#
|
||||
- name: Get yarn cache directory path
|
||||
id: yarn-cache-dir-path
|
||||
run: echo "::set-output name=dir::$(yarn cache dir)"
|
||||
- name: Setup yarn cache
|
||||
uses: actions/cache@v4
|
||||
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
|
||||
with:
|
||||
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
|
||||
- name: Install required OS packages
|
||||
run: |
|
||||
sudo apt-get -y install libpq-dev google-chrome-stable
|
||||
|
||||
- name: Install NodeJS
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '12'
|
||||
|
||||
- name: Install Ruby (version given by .ruby-version) and Bundler
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
bundler-cache: true
|
||||
|
||||
- name: Install required JS packages
|
||||
run: yarn install
|
||||
|
||||
- name: install chrome
|
||||
run: sudo apt-get install google-chrome-stable
|
||||
|
||||
- name: Prepare database for testing
|
||||
run: bundle exec rails db:prepare
|
||||
|
||||
- name: precompile assets
|
||||
run: bundle exec rails assets:precompile
|
||||
|
||||
- name: index into elastic search
|
||||
run: bundle exec rails search:reindex
|
||||
|
||||
- name: Run rspec (members/)
|
||||
run: bundle exec rspec spec/features/members/ -fd -t ~@flaky
|
||||
102
.github/workflows/ci-features-places.yml
vendored
Normal file
102
.github/workflows/ci-features-places.yml
vendored
Normal file
@@ -0,0 +1,102 @@
|
||||
name: CI Features - Admin
|
||||
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
rspec:
|
||||
runs-on: ubuntu-latest
|
||||
services:
|
||||
db:
|
||||
image: postgres
|
||||
env:
|
||||
##
|
||||
# The Postgres service fails its docker health check unless you
|
||||
# specify these environment variables
|
||||
#
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_DB: growstuff_test
|
||||
ports: ['5432:5432']
|
||||
options: >-
|
||||
--health-cmd pg_isready
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
env:
|
||||
APP_DOMAIN_NAME: localhost:3000
|
||||
APP_PROTOCOL: http
|
||||
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
|
||||
DATABASE_URL: postgres://postgres:postgres@localhost:5432/growstuff_test
|
||||
DEVISE_SECRET_KEY: secret
|
||||
ELASTIC_SEARCH_VERSION: "7.5.1-amd64"
|
||||
GROWSTUFF_EMAIL: "noreply@test.growstuff.org"
|
||||
GROWSTUFF_FLICKR_KEY: secretkey"
|
||||
GROWSTUFF_FLICKR_SECRET: secretsecret
|
||||
GROWSTUFF_SITE_NAME: "Growstuff (travis)"
|
||||
RAILS_ENV: test
|
||||
RAILS_SECRET_TOKEN: supersecret
|
||||
|
||||
steps:
|
||||
- name: Checkout this repo
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Configure sysctl limits
|
||||
run: |
|
||||
sudo swapoff -a
|
||||
sudo sysctl -w vm.swappiness=1
|
||||
sudo sysctl -w fs.file-max=262144
|
||||
sudo sysctl -w vm.max_map_count=262144
|
||||
|
||||
- name: Start Elasticsearch
|
||||
uses: elastic/elastic-github-actions/elasticsearch@master
|
||||
with:
|
||||
stack-version: 7.5.1
|
||||
|
||||
##
|
||||
# Cache Yarn modules
|
||||
#
|
||||
# See https://github.com/actions/cache/blob/master/examples.md#node---yarn for details
|
||||
#
|
||||
- name: Get yarn cache directory path
|
||||
id: yarn-cache-dir-path
|
||||
run: echo "::set-output name=dir::$(yarn cache dir)"
|
||||
- name: Setup yarn cache
|
||||
uses: actions/cache@v4
|
||||
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
|
||||
with:
|
||||
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
|
||||
- name: Install required OS packages
|
||||
run: |
|
||||
sudo apt-get -y install libpq-dev google-chrome-stable
|
||||
|
||||
- name: Install NodeJS
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '12'
|
||||
|
||||
- name: Install Ruby (version given by .ruby-version) and Bundler
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
bundler-cache: true
|
||||
|
||||
- name: Install required JS packages
|
||||
run: yarn install
|
||||
|
||||
- name: install chrome
|
||||
run: sudo apt-get install google-chrome-stable
|
||||
|
||||
- name: Prepare database for testing
|
||||
run: bundle exec rails db:prepare
|
||||
|
||||
- name: precompile assets
|
||||
run: bundle exec rails assets:precompile
|
||||
|
||||
- name: index into elastic search
|
||||
run: bundle exec rails search:reindex
|
||||
|
||||
- name: Run rspec (places/)
|
||||
run: bundle exec rspec spec/features/places/ -fd
|
||||
102
.github/workflows/ci-features-plantings.yml
vendored
Normal file
102
.github/workflows/ci-features-plantings.yml
vendored
Normal file
@@ -0,0 +1,102 @@
|
||||
name: CI Features - Plantings
|
||||
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
rspec:
|
||||
runs-on: ubuntu-latest
|
||||
services:
|
||||
db:
|
||||
image: postgres
|
||||
env:
|
||||
##
|
||||
# The Postgres service fails its docker health check unless you
|
||||
# specify these environment variables
|
||||
#
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_DB: growstuff_test
|
||||
ports: ['5432:5432']
|
||||
options: >-
|
||||
--health-cmd pg_isready
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
env:
|
||||
APP_DOMAIN_NAME: localhost:3000
|
||||
APP_PROTOCOL: http
|
||||
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
|
||||
DATABASE_URL: postgres://postgres:postgres@localhost:5432/growstuff_test
|
||||
DEVISE_SECRET_KEY: secret
|
||||
ELASTIC_SEARCH_VERSION: "7.5.1-amd64"
|
||||
GROWSTUFF_EMAIL: "noreply@test.growstuff.org"
|
||||
GROWSTUFF_FLICKR_KEY: secretkey"
|
||||
GROWSTUFF_FLICKR_SECRET: secretsecret
|
||||
GROWSTUFF_SITE_NAME: "Growstuff (travis)"
|
||||
RAILS_ENV: test
|
||||
RAILS_SECRET_TOKEN: supersecret
|
||||
|
||||
steps:
|
||||
- name: Checkout this repo
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Configure sysctl limits
|
||||
run: |
|
||||
sudo swapoff -a
|
||||
sudo sysctl -w vm.swappiness=1
|
||||
sudo sysctl -w fs.file-max=262144
|
||||
sudo sysctl -w vm.max_map_count=262144
|
||||
|
||||
- name: Start Elasticsearch
|
||||
uses: elastic/elastic-github-actions/elasticsearch@master
|
||||
with:
|
||||
stack-version: 7.5.1
|
||||
|
||||
##
|
||||
# Cache Yarn modules
|
||||
#
|
||||
# See https://github.com/actions/cache/blob/master/examples.md#node---yarn for details
|
||||
#
|
||||
- name: Get yarn cache directory path
|
||||
id: yarn-cache-dir-path
|
||||
run: echo "::set-output name=dir::$(yarn cache dir)"
|
||||
- name: Setup yarn cache
|
||||
uses: actions/cache@v4
|
||||
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
|
||||
with:
|
||||
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
|
||||
- name: Install required OS packages
|
||||
run: |
|
||||
sudo apt-get -y install libpq-dev google-chrome-stable
|
||||
|
||||
- name: Install NodeJS
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '12'
|
||||
|
||||
- name: Install Ruby (version given by .ruby-version) and Bundler
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
bundler-cache: true
|
||||
|
||||
- name: Install required JS packages
|
||||
run: yarn install
|
||||
|
||||
- name: install chrome
|
||||
run: sudo apt-get install google-chrome-stable
|
||||
|
||||
- name: Prepare database for testing
|
||||
run: bundle exec rails db:prepare
|
||||
|
||||
- name: precompile assets
|
||||
run: bundle exec rails assets:precompile
|
||||
|
||||
- name: index into elastic search
|
||||
run: bundle exec rails search:reindex
|
||||
|
||||
- name: Run rspec (plantings/)
|
||||
run: bundle exec rspec spec/features/plantings/ -fd
|
||||
102
.github/workflows/ci-features-posts.yml
vendored
Normal file
102
.github/workflows/ci-features-posts.yml
vendored
Normal file
@@ -0,0 +1,102 @@
|
||||
name: CI Features - Admin
|
||||
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
rspec:
|
||||
runs-on: ubuntu-latest
|
||||
services:
|
||||
db:
|
||||
image: postgres
|
||||
env:
|
||||
##
|
||||
# The Postgres service fails its docker health check unless you
|
||||
# specify these environment variables
|
||||
#
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_DB: growstuff_test
|
||||
ports: ['5432:5432']
|
||||
options: >-
|
||||
--health-cmd pg_isready
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
env:
|
||||
APP_DOMAIN_NAME: localhost:3000
|
||||
APP_PROTOCOL: http
|
||||
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
|
||||
DATABASE_URL: postgres://postgres:postgres@localhost:5432/growstuff_test
|
||||
DEVISE_SECRET_KEY: secret
|
||||
ELASTIC_SEARCH_VERSION: "7.5.1-amd64"
|
||||
GROWSTUFF_EMAIL: "noreply@test.growstuff.org"
|
||||
GROWSTUFF_FLICKR_KEY: secretkey"
|
||||
GROWSTUFF_FLICKR_SECRET: secretsecret
|
||||
GROWSTUFF_SITE_NAME: "Growstuff (travis)"
|
||||
RAILS_ENV: test
|
||||
RAILS_SECRET_TOKEN: supersecret
|
||||
|
||||
steps:
|
||||
- name: Checkout this repo
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Configure sysctl limits
|
||||
run: |
|
||||
sudo swapoff -a
|
||||
sudo sysctl -w vm.swappiness=1
|
||||
sudo sysctl -w fs.file-max=262144
|
||||
sudo sysctl -w vm.max_map_count=262144
|
||||
|
||||
- name: Start Elasticsearch
|
||||
uses: elastic/elastic-github-actions/elasticsearch@master
|
||||
with:
|
||||
stack-version: 7.5.1
|
||||
|
||||
##
|
||||
# Cache Yarn modules
|
||||
#
|
||||
# See https://github.com/actions/cache/blob/master/examples.md#node---yarn for details
|
||||
#
|
||||
- name: Get yarn cache directory path
|
||||
id: yarn-cache-dir-path
|
||||
run: echo "::set-output name=dir::$(yarn cache dir)"
|
||||
- name: Setup yarn cache
|
||||
uses: actions/cache@v4
|
||||
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
|
||||
with:
|
||||
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
|
||||
- name: Install required OS packages
|
||||
run: |
|
||||
sudo apt-get -y install libpq-dev google-chrome-stable
|
||||
|
||||
- name: Install NodeJS
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '12'
|
||||
|
||||
- name: Install Ruby (version given by .ruby-version) and Bundler
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
bundler-cache: true
|
||||
|
||||
- name: Install required JS packages
|
||||
run: yarn install
|
||||
|
||||
- name: install chrome
|
||||
run: sudo apt-get install google-chrome-stable
|
||||
|
||||
- name: Prepare database for testing
|
||||
run: bundle exec rails db:prepare
|
||||
|
||||
- name: precompile assets
|
||||
run: bundle exec rails assets:precompile
|
||||
|
||||
- name: index into elastic search
|
||||
run: bundle exec rails search:reindex
|
||||
|
||||
- name: Run rspec (posts/)
|
||||
run: bundle exec rspec spec/features/posts/ -fd
|
||||
102
.github/workflows/ci-features-seeds.yml
vendored
Normal file
102
.github/workflows/ci-features-seeds.yml
vendored
Normal file
@@ -0,0 +1,102 @@
|
||||
name: CI Features - Seeds
|
||||
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
rspec:
|
||||
runs-on: ubuntu-latest
|
||||
services:
|
||||
db:
|
||||
image: postgres
|
||||
env:
|
||||
##
|
||||
# The Postgres service fails its docker health check unless you
|
||||
# specify these environment variables
|
||||
#
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_DB: growstuff_test
|
||||
ports: ['5432:5432']
|
||||
options: >-
|
||||
--health-cmd pg_isready
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
env:
|
||||
APP_DOMAIN_NAME: localhost:3000
|
||||
APP_PROTOCOL: http
|
||||
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
|
||||
DATABASE_URL: postgres://postgres:postgres@localhost:5432/growstuff_test
|
||||
DEVISE_SECRET_KEY: secret
|
||||
ELASTIC_SEARCH_VERSION: "7.5.1-amd64"
|
||||
GROWSTUFF_EMAIL: "noreply@test.growstuff.org"
|
||||
GROWSTUFF_FLICKR_KEY: secretkey"
|
||||
GROWSTUFF_FLICKR_SECRET: secretsecret
|
||||
GROWSTUFF_SITE_NAME: "Growstuff (travis)"
|
||||
RAILS_ENV: test
|
||||
RAILS_SECRET_TOKEN: supersecret
|
||||
|
||||
steps:
|
||||
- name: Checkout this repo
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Configure sysctl limits
|
||||
run: |
|
||||
sudo swapoff -a
|
||||
sudo sysctl -w vm.swappiness=1
|
||||
sudo sysctl -w fs.file-max=262144
|
||||
sudo sysctl -w vm.max_map_count=262144
|
||||
|
||||
- name: Start Elasticsearch
|
||||
uses: elastic/elastic-github-actions/elasticsearch@master
|
||||
with:
|
||||
stack-version: 7.5.1
|
||||
|
||||
##
|
||||
# Cache Yarn modules
|
||||
#
|
||||
# See https://github.com/actions/cache/blob/master/examples.md#node---yarn for details
|
||||
#
|
||||
- name: Get yarn cache directory path
|
||||
id: yarn-cache-dir-path
|
||||
run: echo "::set-output name=dir::$(yarn cache dir)"
|
||||
- name: Setup yarn cache
|
||||
uses: actions/cache@v4
|
||||
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
|
||||
with:
|
||||
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
|
||||
- name: Install required OS packages
|
||||
run: |
|
||||
sudo apt-get -y install libpq-dev google-chrome-stable
|
||||
|
||||
- name: Install NodeJS
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '12'
|
||||
|
||||
- name: Install Ruby (version given by .ruby-version) and Bundler
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
bundler-cache: true
|
||||
|
||||
- name: Install required JS packages
|
||||
run: yarn install
|
||||
|
||||
- name: install chrome
|
||||
run: sudo apt-get install google-chrome-stable
|
||||
|
||||
- name: Prepare database for testing
|
||||
run: bundle exec rails db:prepare
|
||||
|
||||
- name: precompile assets
|
||||
run: bundle exec rails assets:precompile
|
||||
|
||||
- name: index into elastic search
|
||||
run: bundle exec rails search:reindex
|
||||
|
||||
- name: Run rspec (seeds/)
|
||||
run: bundle exec rspec spec/features/seeds/ -fd -t ~@flaky
|
||||
102
.github/workflows/ci-features-timeline.yml
vendored
Normal file
102
.github/workflows/ci-features-timeline.yml
vendored
Normal file
@@ -0,0 +1,102 @@
|
||||
name: CI Features - Timeline
|
||||
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
rspec:
|
||||
runs-on: ubuntu-latest
|
||||
services:
|
||||
db:
|
||||
image: postgres
|
||||
env:
|
||||
##
|
||||
# The Postgres service fails its docker health check unless you
|
||||
# specify these environment variables
|
||||
#
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_DB: growstuff_test
|
||||
ports: ['5432:5432']
|
||||
options: >-
|
||||
--health-cmd pg_isready
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
env:
|
||||
APP_DOMAIN_NAME: localhost:3000
|
||||
APP_PROTOCOL: http
|
||||
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
|
||||
DATABASE_URL: postgres://postgres:postgres@localhost:5432/growstuff_test
|
||||
DEVISE_SECRET_KEY: secret
|
||||
ELASTIC_SEARCH_VERSION: "7.5.1-amd64"
|
||||
GROWSTUFF_EMAIL: "noreply@test.growstuff.org"
|
||||
GROWSTUFF_FLICKR_KEY: secretkey"
|
||||
GROWSTUFF_FLICKR_SECRET: secretsecret
|
||||
GROWSTUFF_SITE_NAME: "Growstuff (travis)"
|
||||
RAILS_ENV: test
|
||||
RAILS_SECRET_TOKEN: supersecret
|
||||
|
||||
steps:
|
||||
- name: Checkout this repo
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Configure sysctl limits
|
||||
run: |
|
||||
sudo swapoff -a
|
||||
sudo sysctl -w vm.swappiness=1
|
||||
sudo sysctl -w fs.file-max=262144
|
||||
sudo sysctl -w vm.max_map_count=262144
|
||||
|
||||
- name: Start Elasticsearch
|
||||
uses: elastic/elastic-github-actions/elasticsearch@master
|
||||
with:
|
||||
stack-version: 7.5.1
|
||||
|
||||
##
|
||||
# Cache Yarn modules
|
||||
#
|
||||
# See https://github.com/actions/cache/blob/master/examples.md#node---yarn for details
|
||||
#
|
||||
- name: Get yarn cache directory path
|
||||
id: yarn-cache-dir-path
|
||||
run: echo "::set-output name=dir::$(yarn cache dir)"
|
||||
- name: Setup yarn cache
|
||||
uses: actions/cache@v4
|
||||
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
|
||||
with:
|
||||
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
|
||||
- name: Install required OS packages
|
||||
run: |
|
||||
sudo apt-get -y install libpq-dev google-chrome-stable
|
||||
|
||||
- name: Install NodeJS
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '12'
|
||||
|
||||
- name: Install Ruby (version given by .ruby-version) and Bundler
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
bundler-cache: true
|
||||
|
||||
- name: Install required JS packages
|
||||
run: yarn install
|
||||
|
||||
- name: install chrome
|
||||
run: sudo apt-get install google-chrome-stable
|
||||
|
||||
- name: Prepare database for testing
|
||||
run: bundle exec rails db:prepare
|
||||
|
||||
- name: precompile assets
|
||||
run: bundle exec rails assets:precompile
|
||||
|
||||
- name: index into elastic search
|
||||
run: bundle exec rails search:reindex
|
||||
|
||||
- name: Run rspec (timeline/)
|
||||
run: bundle exec rspec spec/features/timeline/ -fd -t ~@flaky
|
||||
111
.github/workflows/ci-features.yml
vendored
Normal file
111
.github/workflows/ci-features.yml
vendored
Normal file
@@ -0,0 +1,111 @@
|
||||
name: CI Features
|
||||
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
rspec:
|
||||
runs-on: ubuntu-latest
|
||||
services:
|
||||
db:
|
||||
image: postgres
|
||||
env:
|
||||
##
|
||||
# The Postgres service fails its docker health check unless you
|
||||
# specify these environment variables
|
||||
#
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_DB: growstuff_test
|
||||
ports: ['5432:5432']
|
||||
options: >-
|
||||
--health-cmd pg_isready
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
env:
|
||||
APP_DOMAIN_NAME: localhost:3000
|
||||
APP_PROTOCOL: http
|
||||
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
|
||||
DATABASE_URL: postgres://postgres:postgres@localhost:5432/growstuff_test
|
||||
DEVISE_SECRET_KEY: secret
|
||||
ELASTIC_SEARCH_VERSION: "7.5.1-amd64"
|
||||
GROWSTUFF_EMAIL: "noreply@test.growstuff.org"
|
||||
GROWSTUFF_FLICKR_KEY: secretkey"
|
||||
GROWSTUFF_FLICKR_SECRET: secretsecret
|
||||
GROWSTUFF_SITE_NAME: "Growstuff (travis)"
|
||||
RAILS_ENV: test
|
||||
RAILS_SECRET_TOKEN: supersecret
|
||||
|
||||
steps:
|
||||
- name: Checkout this repo
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Configure sysctl limits
|
||||
run: |
|
||||
sudo swapoff -a
|
||||
sudo sysctl -w vm.swappiness=1
|
||||
sudo sysctl -w fs.file-max=262144
|
||||
sudo sysctl -w vm.max_map_count=262144
|
||||
|
||||
- name: Start Elasticsearch
|
||||
uses: elastic/elastic-github-actions/elasticsearch@master
|
||||
with:
|
||||
stack-version: 7.5.1
|
||||
|
||||
##
|
||||
# Cache Yarn modules
|
||||
#
|
||||
# See https://github.com/actions/cache/blob/master/examples.md#node---yarn for details
|
||||
#
|
||||
- name: Get yarn cache directory path
|
||||
id: yarn-cache-dir-path
|
||||
run: echo "::set-output name=dir::$(yarn cache dir)"
|
||||
- name: Setup yarn cache
|
||||
uses: actions/cache@v4
|
||||
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
|
||||
with:
|
||||
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
|
||||
- name: Install required OS packages
|
||||
run: |
|
||||
sudo apt-get -y install libpq-dev google-chrome-stable
|
||||
|
||||
- name: Install NodeJS
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '12'
|
||||
|
||||
- name: Install Ruby (version given by .ruby-version) and Bundler
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
bundler-cache: true
|
||||
|
||||
- name: Install required JS packages
|
||||
run: yarn install
|
||||
|
||||
- name: install chrome
|
||||
run: sudo apt-get install google-chrome-stable
|
||||
|
||||
- name: Prepare database for testing
|
||||
run: bundle exec rails db:prepare
|
||||
|
||||
- name: precompile assets
|
||||
run: bundle exec rails assets:precompile
|
||||
|
||||
- name: index into elastic search
|
||||
run: bundle exec rails search:reindex
|
||||
|
||||
- name: Run rspec (*_spec)
|
||||
run: bundle exec rspec spec/features/*_spec.rb -fd
|
||||
|
||||
- name: Run rspec (percy/)
|
||||
run: bundle exec rspec spec/features/percy/ -fd
|
||||
|
||||
- name: Run rspec (photos/)
|
||||
run: bundle exec rspec spec/features/photos/ -fd
|
||||
|
||||
- name: Run rspec (rss/)
|
||||
run: bundle exec rspec spec/features/rss/ -fd
|
||||
16
.github/workflows/ci.yml
vendored
16
.github/workflows/ci.yml
vendored
@@ -127,18 +127,4 @@ jobs:
|
||||
run: bundle exec rspec spec/routing/ -fd --fail-fast
|
||||
|
||||
- name: Run rspec (request)
|
||||
run: bundle exec rspec spec/requests/ -fd --fail-fast
|
||||
|
||||
- name: precompile assets
|
||||
run: bundle exec rails assets:precompile
|
||||
|
||||
- name: index into elastic search
|
||||
run: bundle exec rails search:reindex
|
||||
|
||||
- name: Run rspec (report results to Percy.io and CodeClimate)
|
||||
run: bundle exec rspec spec/features/ -fd --fail-fast
|
||||
|
||||
- name: Report to code climate
|
||||
run: |
|
||||
gem install codeclimate-test-reporter
|
||||
codeclimate-test-reporter
|
||||
run: bundle exec rspec spec/requests/ -fd --fail-fast
|
||||
@@ -1 +1 @@
|
||||
3.3.4
|
||||
3.3.8
|
||||
|
||||
6
Gemfile
6
Gemfile
@@ -175,6 +175,7 @@ group :development, :test do
|
||||
gem 'rubocop-rspec_rails'
|
||||
gem 'webrat' # provides HTML matchers for view tests
|
||||
|
||||
gem 'crowdin-cli' # for translations
|
||||
gem 'dotenv-rails'
|
||||
|
||||
# cli utils
|
||||
@@ -188,15 +189,16 @@ end
|
||||
group :test do
|
||||
gem 'axe-core-capybara'
|
||||
gem 'axe-core-rspec'
|
||||
gem 'codeclimate-test-reporter', require: false
|
||||
gem 'rails-controller-testing'
|
||||
gem 'selenium-webdriver'
|
||||
gem 'timecop'
|
||||
gem 'vcr'
|
||||
gem "rspec-rebound"
|
||||
gem "percy-capybara", "~> 5.0.0"
|
||||
end
|
||||
|
||||
group :travis do
|
||||
gem 'platform-api'
|
||||
end
|
||||
|
||||
gem "percy-capybara", "~> 5.0.0"
|
||||
|
||||
|
||||
198
Gemfile.lock
198
Gemfile.lock
@@ -80,8 +80,8 @@ GEM
|
||||
active_link_to (1.0.5)
|
||||
actionpack
|
||||
addressable
|
||||
active_median (0.5.0)
|
||||
activesupport (>= 7)
|
||||
active_median (0.6.0)
|
||||
activesupport (>= 7.1)
|
||||
active_record_union (1.3.0)
|
||||
activerecord (>= 4.0)
|
||||
active_utils (3.5.0)
|
||||
@@ -119,15 +119,15 @@ GEM
|
||||
ast (2.4.3)
|
||||
autoprefixer-rails (10.4.16.0)
|
||||
execjs (~> 2)
|
||||
axe-core-api (4.10.2)
|
||||
axe-core-api (4.10.3)
|
||||
dumb_delegator
|
||||
ostruct
|
||||
virtus
|
||||
axe-core-capybara (4.10.2)
|
||||
axe-core-api (= 4.10.2)
|
||||
axe-core-capybara (4.10.3)
|
||||
axe-core-api (= 4.10.3)
|
||||
dumb_delegator
|
||||
axe-core-rspec (4.10.2)
|
||||
axe-core-api (= 4.10.2)
|
||||
axe-core-rspec (4.10.3)
|
||||
axe-core-api (= 4.10.3)
|
||||
dumb_delegator
|
||||
ostruct
|
||||
virtus
|
||||
@@ -135,14 +135,14 @@ GEM
|
||||
descendants_tracker (~> 0.0.4)
|
||||
ice_nine (~> 0.11.0)
|
||||
thread_safe (~> 0.3, >= 0.3.1)
|
||||
base64 (0.2.0)
|
||||
base64 (0.3.0)
|
||||
bcrypt (3.1.20)
|
||||
benchmark (0.4.0)
|
||||
benchmark (0.4.1)
|
||||
better_errors (2.10.1)
|
||||
erubi (>= 1.0.0)
|
||||
rack (>= 0.9.0)
|
||||
rouge (>= 1.0.0)
|
||||
bigdecimal (3.1.9)
|
||||
bigdecimal (3.2.2)
|
||||
bluecloth (2.2.0)
|
||||
bonsai-elasticsearch-rails (7.0.1)
|
||||
elasticsearch-model (< 8)
|
||||
@@ -156,7 +156,7 @@ GEM
|
||||
actionpack (>= 6.1)
|
||||
activemodel (>= 6.1)
|
||||
builder (3.3.0)
|
||||
bullet (8.0.1)
|
||||
bullet (8.0.8)
|
||||
activesupport (>= 3.0.0)
|
||||
uniform_notifier (~> 1.11)
|
||||
byebug (12.0.0)
|
||||
@@ -183,10 +183,8 @@ GEM
|
||||
image_processing (~> 1.1)
|
||||
marcel (~> 1.0.0)
|
||||
ssrf_filter (~> 1.0)
|
||||
chartkick (5.1.4)
|
||||
chartkick (5.1.5)
|
||||
childprocess (5.0.0)
|
||||
codeclimate-test-reporter (1.0.9)
|
||||
simplecov (<= 0.13)
|
||||
coderay (1.1.3)
|
||||
coercible (1.0.0)
|
||||
descendants_tracker (~> 0.0.1)
|
||||
@@ -200,8 +198,16 @@ GEM
|
||||
comfy_bootstrap_form (4.0.9)
|
||||
rails (>= 5.0.0)
|
||||
concurrent-ruby (1.3.5)
|
||||
connection_pool (2.5.0)
|
||||
connection_pool (2.5.3)
|
||||
crass (1.0.6)
|
||||
crowdin-api (1.12.0)
|
||||
open-uri (>= 0.1.0, < 0.2.0)
|
||||
rest-client (>= 2.0.0, < 2.2.0)
|
||||
crowdin-cli (0.2.2)
|
||||
crowdin-api (>= 0.2.0)
|
||||
gli (>= 2.7.0)
|
||||
i18n (>= 0.6.4)
|
||||
rubyzip (>= 1.0.0)
|
||||
csv (3.3.1)
|
||||
csv_shaper (1.4.0)
|
||||
activesupport (>= 3.0.0)
|
||||
@@ -222,16 +228,16 @@ GEM
|
||||
railties (>= 4.1.0)
|
||||
responders
|
||||
warden (~> 1.2.3)
|
||||
diff-lcs (1.6.0)
|
||||
diff-lcs (1.6.2)
|
||||
discard (1.4.0)
|
||||
activerecord (>= 4.2, < 9.0)
|
||||
docile (1.1.5)
|
||||
dotenv (3.1.7)
|
||||
dotenv-rails (3.1.7)
|
||||
dotenv (= 3.1.7)
|
||||
domain_name (0.6.20240107)
|
||||
dotenv (3.1.8)
|
||||
dotenv-rails (3.1.8)
|
||||
dotenv (= 3.1.8)
|
||||
railties (>= 6.1)
|
||||
drb (2.2.1)
|
||||
dumb_delegator (1.0.0)
|
||||
drb (2.2.3)
|
||||
dumb_delegator (1.1.0)
|
||||
elasticsearch (7.0.0)
|
||||
elasticsearch-api (= 7.0.0)
|
||||
elasticsearch-transport (= 7.0.0)
|
||||
@@ -245,23 +251,24 @@ GEM
|
||||
elasticsearch-transport (7.0.0)
|
||||
faraday
|
||||
multi_json
|
||||
erb (5.0.1)
|
||||
erubi (1.13.1)
|
||||
erubis (2.7.0)
|
||||
excon (1.2.5)
|
||||
logger
|
||||
execjs (2.10.0)
|
||||
factory_bot (6.5.0)
|
||||
activesupport (>= 5.0.0)
|
||||
factory_bot_rails (6.4.4)
|
||||
factory_bot (6.5.4)
|
||||
activesupport (>= 6.1.0)
|
||||
factory_bot_rails (6.5.0)
|
||||
factory_bot (~> 6.5)
|
||||
railties (>= 5.0.0)
|
||||
faker (3.5.1)
|
||||
railties (>= 6.1.0)
|
||||
faker (3.5.2)
|
||||
i18n (>= 1.8.11, < 2)
|
||||
faraday (2.12.2)
|
||||
faraday (2.13.4)
|
||||
faraday-net_http (>= 2.0, < 3.5)
|
||||
json
|
||||
logger
|
||||
faraday-net_http (3.4.0)
|
||||
faraday-net_http (3.4.1)
|
||||
net-http (>= 0.5.0)
|
||||
ffi (1.16.3)
|
||||
flickraw (0.9.10)
|
||||
@@ -276,6 +283,8 @@ GEM
|
||||
gibbon (1.2.1)
|
||||
httparty
|
||||
multi_json (>= 1.9.0)
|
||||
gli (2.22.2)
|
||||
ostruct
|
||||
globalid (1.2.1)
|
||||
activesupport (>= 6.1)
|
||||
gravatar-ultimate (2.0.0)
|
||||
@@ -296,7 +305,7 @@ GEM
|
||||
activesupport (>= 5.1)
|
||||
haml (>= 4.0.6)
|
||||
railties (>= 5.1)
|
||||
haml_lint (0.61.1)
|
||||
haml_lint (0.66.0)
|
||||
haml (>= 5.0)
|
||||
parallel (~> 1.10)
|
||||
rainbow
|
||||
@@ -312,6 +321,9 @@ GEM
|
||||
webrick
|
||||
highline (3.1.2)
|
||||
reline
|
||||
http-accept (1.7.0)
|
||||
http-cookie (1.0.8)
|
||||
domain_name (~> 0.5)
|
||||
httparty (0.22.0)
|
||||
csv
|
||||
mini_mime (>= 1.0.0)
|
||||
@@ -329,8 +341,10 @@ GEM
|
||||
rainbow (>= 2.2.2, < 4.0)
|
||||
ruby-progressbar (~> 1.8, >= 1.8.1)
|
||||
terminal-table (>= 1.5.1)
|
||||
icalendar (2.10.3)
|
||||
icalendar (2.11.2)
|
||||
base64
|
||||
ice_cube (~> 0.16)
|
||||
logger
|
||||
ostruct
|
||||
ice_cube (0.17.0)
|
||||
ice_nine (0.11.2)
|
||||
@@ -338,7 +352,7 @@ GEM
|
||||
mini_magick (>= 4.9.5, < 5)
|
||||
ruby-vips (>= 2.0.17, < 3)
|
||||
io-console (0.8.0)
|
||||
irb (1.15.1)
|
||||
irb (1.15.2)
|
||||
pp (>= 0.6.0)
|
||||
rdoc (>= 4.0.0)
|
||||
reline (>= 0.4.2)
|
||||
@@ -346,7 +360,7 @@ GEM
|
||||
rails-dom-testing (>= 1, < 3)
|
||||
railties (>= 4.2.0)
|
||||
thor (>= 0.14, < 2.0)
|
||||
json (2.10.2)
|
||||
json (2.13.2)
|
||||
json-schema (5.1.0)
|
||||
addressable (~> 2.8)
|
||||
jsonapi-resources (0.10.7)
|
||||
@@ -357,7 +371,7 @@ GEM
|
||||
kgio (2.11.4)
|
||||
kramdown (2.4.0)
|
||||
rexml
|
||||
language_server-protocol (3.17.0.4)
|
||||
language_server-protocol (3.17.0.5)
|
||||
launchy (3.0.1)
|
||||
addressable (~> 2.8)
|
||||
childprocess (~> 5.0)
|
||||
@@ -371,7 +385,7 @@ GEM
|
||||
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||
rb-inotify (~> 0.9, >= 0.9.10)
|
||||
logger (1.7.0)
|
||||
loofah (2.24.0)
|
||||
loofah (2.24.1)
|
||||
crass (~> 1.0.2)
|
||||
nokogiri (>= 1.12.0)
|
||||
mail (2.8.1)
|
||||
@@ -391,12 +405,16 @@ GEM
|
||||
matrix (0.4.2)
|
||||
memcachier (0.0.2)
|
||||
method_source (1.1.0)
|
||||
mime-types (3.7.0)
|
||||
logger
|
||||
mime-types-data (~> 3.2025, >= 3.2025.0507)
|
||||
mime-types-data (3.2025.0805)
|
||||
mimemagic (0.4.3)
|
||||
nokogiri (~> 1)
|
||||
rake
|
||||
mini_magick (4.12.0)
|
||||
mini_mime (1.1.5)
|
||||
mini_portile2 (2.8.8)
|
||||
mini_portile2 (2.8.9)
|
||||
minitest (5.25.5)
|
||||
moneta (1.0.0)
|
||||
msgpack (1.8.0)
|
||||
@@ -405,7 +423,7 @@ GEM
|
||||
bigdecimal (~> 3.1)
|
||||
net-http (0.6.0)
|
||||
uri
|
||||
net-imap (0.4.19)
|
||||
net-imap (0.4.20)
|
||||
date
|
||||
net-protocol
|
||||
net-pop (0.1.2)
|
||||
@@ -414,11 +432,12 @@ GEM
|
||||
timeout
|
||||
net-smtp (0.5.0)
|
||||
net-protocol
|
||||
netrc (0.11.0)
|
||||
nio4r (2.7.4)
|
||||
nokogiri (1.18.4)
|
||||
nokogiri (1.18.9)
|
||||
mini_portile2 (~> 2.8.2)
|
||||
racc (~> 1.4)
|
||||
nokogiri (1.18.4-x86_64-linux-gnu)
|
||||
nokogiri (1.18.9-x86_64-linux-gnu)
|
||||
racc (~> 1.4)
|
||||
oauth (0.5.6)
|
||||
oj (3.16.10)
|
||||
@@ -436,15 +455,17 @@ GEM
|
||||
omniauth-twitter (1.4.0)
|
||||
omniauth-oauth (~> 1.1)
|
||||
rack
|
||||
open-uri (0.1.0)
|
||||
orm_adapter (0.5.0)
|
||||
ostruct (0.6.1)
|
||||
parallel (1.26.3)
|
||||
parser (3.3.7.3)
|
||||
ostruct (0.6.2)
|
||||
parallel (1.27.0)
|
||||
parser (3.3.9.0)
|
||||
ast (~> 2.4.1)
|
||||
racc
|
||||
percy-capybara (5.0.0)
|
||||
capybara (>= 3)
|
||||
pg (1.5.9)
|
||||
pg (1.6.1)
|
||||
pg (1.6.1-x86_64-linux)
|
||||
platform-api (3.8.0)
|
||||
heroics (~> 0.1.1)
|
||||
moneta (~> 1.0.0)
|
||||
@@ -457,15 +478,15 @@ GEM
|
||||
pry (0.15.2)
|
||||
coderay (~> 1.1)
|
||||
method_source (~> 1.0)
|
||||
psych (5.2.3)
|
||||
psych (5.2.6)
|
||||
date
|
||||
stringio
|
||||
public_suffix (6.0.1)
|
||||
puma (6.6.0)
|
||||
puma (6.6.1)
|
||||
nio4r (~> 2.0)
|
||||
query_diet (0.7.2)
|
||||
racc (1.8.1)
|
||||
rack (2.2.13)
|
||||
rack (2.2.17)
|
||||
rack-cors (2.0.2)
|
||||
rack (>= 2.0.0)
|
||||
rack-protection (3.2.0)
|
||||
@@ -496,7 +517,7 @@ GEM
|
||||
actionpack (>= 5.0.1.rc1)
|
||||
actionview (>= 5.0.1.rc1)
|
||||
activesupport (>= 5.0.1.rc1)
|
||||
rails-dom-testing (2.2.0)
|
||||
rails-dom-testing (2.3.0)
|
||||
activesupport (>= 5.0.0)
|
||||
minitest
|
||||
nokogiri (>= 1.6)
|
||||
@@ -521,52 +542,61 @@ GEM
|
||||
zeitwerk (~> 2.6)
|
||||
rainbow (3.1.1)
|
||||
raindrops (0.20.1)
|
||||
rake (13.2.1)
|
||||
rake (13.3.0)
|
||||
rate_throttle_client (0.1.2)
|
||||
rb-fsevent (0.11.2)
|
||||
rb-inotify (0.10.1)
|
||||
ffi (~> 1.0)
|
||||
rdoc (6.12.0)
|
||||
rdoc (6.14.2)
|
||||
erb
|
||||
psych (>= 4.0.0)
|
||||
recaptcha (5.19.0)
|
||||
recaptcha (5.20.1)
|
||||
redis-client (0.23.2)
|
||||
connection_pool
|
||||
regexp_parser (2.10.0)
|
||||
reline (0.6.0)
|
||||
regexp_parser (2.11.1)
|
||||
reline (0.6.1)
|
||||
io-console (~> 0.5)
|
||||
responders (3.1.1)
|
||||
actionpack (>= 5.2)
|
||||
railties (>= 5.2)
|
||||
rest-client (2.1.0)
|
||||
http-accept (>= 1.7.0, < 2.0)
|
||||
http-cookie (>= 1.0.2, < 2.0)
|
||||
mime-types (>= 1.16, < 4.0)
|
||||
netrc (~> 0.8)
|
||||
rexml (3.4.1)
|
||||
rouge (4.1.2)
|
||||
rspec (3.13.0)
|
||||
rspec-core (~> 3.13.0)
|
||||
rspec-expectations (~> 3.13.0)
|
||||
rspec-mocks (~> 3.13.0)
|
||||
rspec-activemodel-mocks (1.2.1)
|
||||
rspec-activemodel-mocks (1.3.0)
|
||||
activemodel (>= 3.0)
|
||||
activesupport (>= 3.0)
|
||||
rspec-mocks (>= 2.99, < 4.0)
|
||||
rspec-core (3.13.3)
|
||||
rspec-core (3.13.5)
|
||||
rspec-support (~> 3.13.0)
|
||||
rspec-expectations (3.13.3)
|
||||
rspec-expectations (3.13.5)
|
||||
diff-lcs (>= 1.2.0, < 2.0)
|
||||
rspec-support (~> 3.13.0)
|
||||
rspec-mocks (3.13.2)
|
||||
rspec-mocks (3.13.5)
|
||||
diff-lcs (>= 1.2.0, < 2.0)
|
||||
rspec-support (~> 3.13.0)
|
||||
rspec-rails (7.1.1)
|
||||
actionpack (>= 7.0)
|
||||
activesupport (>= 7.0)
|
||||
railties (>= 7.0)
|
||||
rspec-rails (8.0.1)
|
||||
actionpack (>= 7.2)
|
||||
activesupport (>= 7.2)
|
||||
railties (>= 7.2)
|
||||
rspec-core (~> 3.13)
|
||||
rspec-expectations (~> 3.13)
|
||||
rspec-mocks (~> 3.13)
|
||||
rspec-support (~> 3.13)
|
||||
rspec-support (3.13.2)
|
||||
rspectre (0.1.0)
|
||||
parser (>= 3.2.2.1)
|
||||
rspec (~> 3.9)
|
||||
rspec-rebound (0.2.1)
|
||||
rspec-core (~> 3.3)
|
||||
rspec-support (3.13.4)
|
||||
rspectre (0.2.0)
|
||||
parser (>= 3.3.7.1)
|
||||
prism (~> 1.3)
|
||||
rspec (~> 3.10)
|
||||
rswag-api (2.16.0)
|
||||
activesupport (>= 5.2, < 8.1)
|
||||
railties (>= 5.2, < 8.1)
|
||||
@@ -578,7 +608,7 @@ GEM
|
||||
rswag-ui (2.16.0)
|
||||
actionpack (>= 5.2, < 8.1)
|
||||
railties (>= 5.2, < 8.1)
|
||||
rubocop (1.75.1)
|
||||
rubocop (1.79.2)
|
||||
json (~> 2.3)
|
||||
language_server-protocol (~> 3.17.0.2)
|
||||
lint_roller (~> 1.1.0)
|
||||
@@ -586,10 +616,10 @@ GEM
|
||||
parser (>= 3.3.0.2)
|
||||
rainbow (>= 2.2.2, < 4.0)
|
||||
regexp_parser (>= 2.9.3, < 3.0)
|
||||
rubocop-ast (>= 1.43.0, < 2.0)
|
||||
rubocop-ast (>= 1.46.0, < 2.0)
|
||||
ruby-progressbar (~> 1.7)
|
||||
unicode-display_width (>= 2.4.0, < 4.0)
|
||||
rubocop-ast (1.43.0)
|
||||
rubocop-ast (1.46.0)
|
||||
parser (>= 3.3.7.2)
|
||||
prism (~> 1.4)
|
||||
rubocop-capybara (2.22.1)
|
||||
@@ -598,16 +628,16 @@ GEM
|
||||
rubocop-factory_bot (2.27.1)
|
||||
lint_roller (~> 1.1)
|
||||
rubocop (~> 1.72, >= 1.72.1)
|
||||
rubocop-rails (2.30.3)
|
||||
rubocop-rails (2.32.0)
|
||||
activesupport (>= 4.2.0)
|
||||
lint_roller (~> 1.1)
|
||||
rack (>= 1.1)
|
||||
rubocop (>= 1.72.1, < 2.0)
|
||||
rubocop-ast (>= 1.38.0, < 2.0)
|
||||
rubocop (>= 1.75.0, < 2.0)
|
||||
rubocop-ast (>= 1.44.0, < 2.0)
|
||||
rubocop-rake (0.7.1)
|
||||
lint_roller (~> 1.1)
|
||||
rubocop (>= 1.72.1)
|
||||
rubocop-rspec (3.5.0)
|
||||
rubocop-rspec (3.6.0)
|
||||
lint_roller (~> 1.1)
|
||||
rubocop (~> 1.72, >= 1.72.1)
|
||||
rubocop-rspec_rails (2.31.0)
|
||||
@@ -632,13 +662,13 @@ GEM
|
||||
sprockets (> 3.0)
|
||||
sprockets-rails
|
||||
tilt
|
||||
scout_apm (5.6.1)
|
||||
scout_apm (5.7.0)
|
||||
parser
|
||||
searchkick (5.3.1)
|
||||
activemodel (>= 6.1)
|
||||
hashie
|
||||
securerandom (0.4.1)
|
||||
selenium-webdriver (4.30.1)
|
||||
selenium-webdriver (4.34.0)
|
||||
base64 (~> 0.2)
|
||||
logger (~> 1.4)
|
||||
rexml (~> 3.2, >= 3.2.5)
|
||||
@@ -650,11 +680,6 @@ GEM
|
||||
logger
|
||||
rack (>= 2.2.4)
|
||||
redis-client (>= 0.22.2)
|
||||
simplecov (0.13.0)
|
||||
docile (~> 1.1.0)
|
||||
json (>= 1.8, < 3)
|
||||
simplecov-html (~> 0.10.0)
|
||||
simplecov-html (0.10.2)
|
||||
sprockets (3.7.5)
|
||||
base64
|
||||
concurrent-ruby (~> 1.0)
|
||||
@@ -664,16 +689,16 @@ GEM
|
||||
activesupport (>= 5.2)
|
||||
sprockets (>= 3.0.0)
|
||||
ssrf_filter (1.1.2)
|
||||
stringio (3.1.5)
|
||||
stringio (3.1.7)
|
||||
sysexits (1.2.0)
|
||||
temple (0.10.3)
|
||||
temple (0.10.4)
|
||||
terminal-table (4.0.0)
|
||||
unicode-display_width (>= 1.1.1, < 4)
|
||||
terser (1.2.5)
|
||||
execjs (>= 0.3.0, < 3)
|
||||
thor (1.3.2)
|
||||
thor (1.4.0)
|
||||
thread_safe (0.3.6)
|
||||
tilt (2.6.0)
|
||||
tilt (2.6.1)
|
||||
timecop (0.9.10)
|
||||
timeout (0.4.3)
|
||||
trollop (1.16.2)
|
||||
@@ -685,7 +710,7 @@ GEM
|
||||
unicorn (6.1.0)
|
||||
kgio (~> 2.6)
|
||||
raindrops (~> 0.7)
|
||||
uniform_notifier (1.16.0)
|
||||
uniform_notifier (1.17.0)
|
||||
uri (1.0.3)
|
||||
useragent (0.16.11)
|
||||
validate_url (1.0.15)
|
||||
@@ -715,7 +740,7 @@ GEM
|
||||
webrick
|
||||
xpath (3.2.0)
|
||||
nokogiri (~> 1.8)
|
||||
zeitwerk (2.7.2)
|
||||
zeitwerk (2.7.3)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
@@ -741,9 +766,9 @@ DEPENDENCIES
|
||||
capybara-email
|
||||
capybara-screenshot
|
||||
chartkick
|
||||
codeclimate-test-reporter
|
||||
coffee-rails
|
||||
comfortable_mexican_sofa!
|
||||
crowdin-cli
|
||||
csv_shaper
|
||||
dalli
|
||||
database_cleaner
|
||||
@@ -802,6 +827,7 @@ DEPENDENCIES
|
||||
responders
|
||||
rspec-activemodel-mocks
|
||||
rspec-rails
|
||||
rspec-rebound
|
||||
rspectre
|
||||
rswag-api
|
||||
rswag-specs
|
||||
@@ -831,7 +857,7 @@ DEPENDENCIES
|
||||
xmlrpc
|
||||
|
||||
RUBY VERSION
|
||||
ruby 3.3.4p94
|
||||
ruby 3.3.8p144
|
||||
|
||||
BUNDLED WITH
|
||||
2.4.22
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
# 🌱 Growstuff
|
||||
|
||||

|
||||
[](https://codeclimate.com/github/Growstuff/growstuff)
|
||||
|
||||
Welcome to the Growstuff project.
|
||||
|
||||
|
||||
@@ -30,3 +30,7 @@
|
||||
@import "predictions";
|
||||
@import "homepage";
|
||||
@import "maps";
|
||||
|
||||
@view-transition {
|
||||
navigation: auto;
|
||||
}
|
||||
@@ -75,6 +75,7 @@ class CropsController < ApplicationController
|
||||
end
|
||||
|
||||
def show
|
||||
@problems = Problem.joins(plantings: :crop).where(crops: { id: @crop.id }).distinct
|
||||
respond_to do |format|
|
||||
format.html do
|
||||
@posts = @crop.posts.order(created_at: :desc).paginate(page: params[:page])
|
||||
|
||||
@@ -107,7 +107,7 @@ class PlantingsController < DataController
|
||||
:crop_id, :description, :garden_id, :planted_at,
|
||||
:parent_seed_id,
|
||||
:quantity, :sunniness, :planted_from, :finished,
|
||||
:finished_at
|
||||
:finished_at, :failed, problem_ids: []
|
||||
)
|
||||
end
|
||||
|
||||
|
||||
76
app/controllers/problems_controller.rb
Normal file
76
app/controllers/problems_controller.rb
Normal file
@@ -0,0 +1,76 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class ProblemsController < ApplicationController
|
||||
before_action :authenticate_member!, except: %i(index show)
|
||||
load_and_authorize_resource id_param: :slug, class: Problem
|
||||
respond_to :html, :json
|
||||
|
||||
def index
|
||||
@problems = Problem.approved.popular.paginate(page: params[:page])
|
||||
@num_requested_problems = requested_problems.size if current_member
|
||||
respond_with @problems
|
||||
end
|
||||
|
||||
def requested
|
||||
@requested = requested_problems.paginate(page: params[:page])
|
||||
respond_with @requested
|
||||
end
|
||||
|
||||
def show
|
||||
@problem = Problem.friendly.find(params[:id])
|
||||
@plantings = @problem.plantings.paginate(page: params[:page])
|
||||
respond_with @problem
|
||||
end
|
||||
|
||||
def new
|
||||
@problem = Problem.new
|
||||
respond_with @problem
|
||||
end
|
||||
|
||||
def edit; end
|
||||
|
||||
def create
|
||||
@problem = Problem.new(problem_params)
|
||||
if current_member.role? :problem_wrangler
|
||||
@problem.creator = current_member
|
||||
else
|
||||
@problem.requester = current_member
|
||||
@problem.approval_status = "pending"
|
||||
end
|
||||
@problem.save
|
||||
respond_with @problem
|
||||
end
|
||||
|
||||
def update
|
||||
if can?(:wrangle, @problem)
|
||||
@problem.approval_status = 'rejected' if params.fetch("reject", false)
|
||||
@problem.approval_status = 'approved' if params.fetch("approve", false)
|
||||
end
|
||||
@problem.update(problem_params)
|
||||
respond_with @problem
|
||||
end
|
||||
|
||||
def wrangle
|
||||
@approval_status = params[:approval_status]
|
||||
@problems = case @approval_status
|
||||
when "pending"
|
||||
Problem.pending_approval
|
||||
when "rejected"
|
||||
Problem.rejected
|
||||
else
|
||||
Problem.recent
|
||||
end.paginate(page: params[:page])
|
||||
@problem_wranglers = Role.problem_wranglers
|
||||
respond_with @problems
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def problem_params
|
||||
params.require(:problem).permit(:name, :reason_for_rejection, :rejection_notes)
|
||||
end
|
||||
|
||||
def requested_problems
|
||||
current_member.requested_problems.pending_approval
|
||||
end
|
||||
end
|
||||
@@ -19,6 +19,10 @@ class SeedsController < DataController
|
||||
where['parent_planting'] = @planting.id
|
||||
end
|
||||
|
||||
if params[:tradeable_to].present?
|
||||
where['tradeable_to'] = params[:tradeable_to]
|
||||
end
|
||||
|
||||
@show_all = (params[:all] == '1')
|
||||
where['finished'] = false unless @show_all
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ module ApplicationHelper
|
||||
# of HAML, Tilt, and dynamic compilation with interpolated ruby.
|
||||
def markdownify(text)
|
||||
translator = Haml::Filters::GrowstuffMarkdown.new
|
||||
translator.expand_members!(translator.expand_crops!(text.to_s))
|
||||
translator.expand_members!(translator.expand_problems!(translator.expand_crops!(text.to_s)))
|
||||
end
|
||||
|
||||
#
|
||||
|
||||
@@ -34,6 +34,8 @@ class Ability
|
||||
# are wranglers or admins
|
||||
cannot :read, Crop
|
||||
can :read, Crop, approval_status: "approved"
|
||||
cannot :read, Problem
|
||||
can :read, Problem, approval_status: "approved"
|
||||
# scientific names should only be viewable if associated crop is approved
|
||||
cannot :read, ScientificName
|
||||
can :read, ScientificName do |sn|
|
||||
@@ -56,6 +58,8 @@ class Ability
|
||||
# members can see even rejected or pending crops if they requested it
|
||||
can :read, Crop, requester_id: member.id
|
||||
can :requested, Crop # see list of crops they've requested
|
||||
can :read, Problem, requester_id: member.id
|
||||
can :requested, Problem
|
||||
|
||||
# managing your own user settings
|
||||
can :update, Member, id: member.id
|
||||
@@ -82,8 +86,14 @@ class Ability
|
||||
can :gbif, Crop
|
||||
end
|
||||
|
||||
if member.role? :problem_wrangler
|
||||
can :wrangle, Problem
|
||||
can :manage, Problem
|
||||
end
|
||||
|
||||
# any member can create a crop provisionally
|
||||
can :create, Crop
|
||||
can :create, Problem
|
||||
|
||||
# can create & destroy their own authentications against other sites.
|
||||
can :create, Authentication
|
||||
|
||||
@@ -17,6 +17,7 @@ class Crop < ApplicationRecord
|
||||
has_many :scientific_names, dependent: :delete_all
|
||||
has_many :alternate_names, dependent: :delete_all
|
||||
has_many :plantings, dependent: :destroy
|
||||
has_many :problems, through: :plantings
|
||||
has_many :seeds, dependent: :destroy
|
||||
has_many :harvests, dependent: :destroy
|
||||
has_many :photo_associations, dependent: :delete_all, inverse_of: :crop
|
||||
|
||||
@@ -42,6 +42,10 @@ class Member < ApplicationRecord
|
||||
inverse_of: :requester
|
||||
has_many :created_crops, class_name: 'Crop', foreign_key: 'creator_id', dependent: :nullify,
|
||||
inverse_of: :creator
|
||||
has_many :requested_problems, class_name: 'Problem', foreign_key: 'requester_id', dependent: :nullify,
|
||||
inverse_of: :requester
|
||||
has_many :created_problems, class_name: 'Problem', foreign_key: 'creator_id', dependent: :nullify,
|
||||
inverse_of: :creator
|
||||
has_many :created_alternate_names, class_name: 'AlternateName', foreign_key: 'creator_id', inverse_of: :creator
|
||||
has_many :created_scientific_names, class_name: 'ScientificName', foreign_key: 'creator_id', inverse_of: :creator
|
||||
|
||||
|
||||
@@ -24,6 +24,8 @@ class Planting < ApplicationRecord
|
||||
belongs_to :crop, counter_cache: true
|
||||
has_many :harvests, dependent: :destroy
|
||||
has_many :activities, dependent: :destroy
|
||||
has_many :planting_problems, dependent: :destroy
|
||||
has_many :problems, through: :planting_problems
|
||||
|
||||
#
|
||||
# Ancestry of food
|
||||
@@ -124,7 +126,7 @@ class Planting < ApplicationRecord
|
||||
def finished_must_be_after_planted
|
||||
return unless planted_at && finished_at # only check if we have both
|
||||
|
||||
errors.add(:finished_at, "must be after the planting date (#{finished_at}) < #{planted_at}") unless planted_at < finished_at
|
||||
errors.add(:finished_at, "must be after the planting date") unless planted_at < finished_at
|
||||
end
|
||||
|
||||
def owner_must_match_garden_owner
|
||||
|
||||
8
app/models/planting_problem.rb
Normal file
8
app/models/planting_problem.rb
Normal file
@@ -0,0 +1,8 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class PlantingProblem < ApplicationRecord
|
||||
include PhotoCapable
|
||||
|
||||
belongs_to :planting
|
||||
belongs_to :problem
|
||||
end
|
||||
@@ -13,11 +13,14 @@ class Post < ApplicationRecord
|
||||
has_many :comments, dependent: :destroy
|
||||
has_many :crop_posts, dependent: :delete_all
|
||||
has_many :crops, through: :crop_posts
|
||||
has_many :problem_posts, dependent: :delete_all
|
||||
has_many :problems, through: :problem_posts
|
||||
|
||||
after_create :send_notification
|
||||
#
|
||||
# Triggers
|
||||
after_save :update_crop_posts_association
|
||||
after_save :update_problem_posts_association
|
||||
|
||||
default_scope { joins(:author).merge(Member.kept) } # Ensures the owner still exists
|
||||
|
||||
@@ -75,6 +78,17 @@ class Post < ApplicationRecord
|
||||
end
|
||||
end
|
||||
|
||||
def update_problem_posts_association
|
||||
problems.clear
|
||||
# look for problems mentioned in the post. eg. [aphids](problem)
|
||||
body.scan(Haml::Filters::GrowstuffMarkdown::PROBLEM_REGEX) do |_m|
|
||||
problem_name = Regexp.last_match(1)
|
||||
problem = Problem.case_insensitive_name(problem_name).first
|
||||
# create association
|
||||
problems << problem if problem && problems.exclude?(problem)
|
||||
end
|
||||
end
|
||||
|
||||
def send_notification
|
||||
recipients = []
|
||||
sender = author.id
|
||||
|
||||
88
app/models/problem.rb
Normal file
88
app/models/problem.rb
Normal file
@@ -0,0 +1,88 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class Problem < ApplicationRecord
|
||||
extend FriendlyId
|
||||
include PhotoCapable
|
||||
include SearchCrops # Note: This might need to be adapted to SearchProblems
|
||||
|
||||
friendly_id :name, use: %i(slugged finders)
|
||||
|
||||
##
|
||||
## Relationships
|
||||
belongs_to :creator, class_name: 'Member', optional: true, inverse_of: :created_problems
|
||||
belongs_to :requester, class_name: 'Member', optional: true, inverse_of: :requested_problems
|
||||
has_many :planting_problems, dependent: :delete_all
|
||||
has_many :plantings, through: :planting_problems
|
||||
has_many :problem_posts, dependent: :delete_all
|
||||
has_many :posts, through: :problem_posts, dependent: :delete_all
|
||||
|
||||
##
|
||||
## Scopes
|
||||
scope :recent, -> { approved.order(created_at: :desc) }
|
||||
scope :popular, -> { approved.order(Arel.sql("plantings_count desc, lower(name) asc")) }
|
||||
scope :pending_approval, -> { where(approval_status: "pending") }
|
||||
scope :approved, -> { where(approval_status: "approved") }
|
||||
scope :rejected, -> { where(approval_status: "rejected") }
|
||||
scope :interesting, -> { approved.has_photos }
|
||||
scope :has_photos, -> { includes(:photos).where.not(photos: { id: nil }) }
|
||||
|
||||
##
|
||||
## Validations
|
||||
validates :reason_for_rejection, presence: true, if: :rejected?
|
||||
validate :must_be_rejected_if_rejected_reasons_present
|
||||
validate :must_have_meaningful_reason_for_rejection
|
||||
validates :name, uniqueness: { scope: :approval_status }, if: :pending?
|
||||
|
||||
def to_s
|
||||
name
|
||||
end
|
||||
|
||||
def to_param
|
||||
slug
|
||||
end
|
||||
|
||||
def pending?
|
||||
approval_status == "pending"
|
||||
end
|
||||
|
||||
def approved?
|
||||
approval_status == "approved"
|
||||
end
|
||||
|
||||
def rejected?
|
||||
approval_status == "rejected"
|
||||
end
|
||||
|
||||
def approval_statuses
|
||||
%w(rejected pending approved)
|
||||
end
|
||||
|
||||
def reasons_for_rejection
|
||||
["already in database", "not a pest or disease", "not enough information", "other"]
|
||||
end
|
||||
|
||||
def rejection_explanation
|
||||
return rejection_notes if reason_for_rejection == "other"
|
||||
|
||||
reason_for_rejection
|
||||
end
|
||||
|
||||
def self.case_insensitive_name(name)
|
||||
where(["lower(problems.name) = :value", { value: name.downcase }])
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def must_be_rejected_if_rejected_reasons_present
|
||||
return if rejected?
|
||||
return unless reason_for_rejection.present? || rejection_notes.present?
|
||||
|
||||
errors.add(:approval_status, "must be rejected if a reason for rejection is present")
|
||||
end
|
||||
|
||||
def must_have_meaningful_reason_for_rejection
|
||||
return unless reason_for_rejection == "other" && rejection_notes.blank?
|
||||
|
||||
errors.add(:rejection_notes, "must be added if the reason for rejection is \"other\"")
|
||||
end
|
||||
end
|
||||
6
app/models/problem_post.rb
Normal file
6
app/models/problem_post.rb
Normal file
@@ -0,0 +1,6 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class ProblemPost < ApplicationRecord
|
||||
belongs_to :problem
|
||||
belongs_to :post
|
||||
end
|
||||
@@ -8,7 +8,7 @@ class Role < ApplicationRecord
|
||||
has_and_belongs_to_many :members
|
||||
|
||||
class << self
|
||||
%i(crop_wranglers admins).each do |method|
|
||||
%i(crop_wranglers admins problem_wranglers).each do |method|
|
||||
define_method method do
|
||||
slug = method.to_s.singularize.dasherize
|
||||
Role.where(slug:).try(:first).try(:members)
|
||||
|
||||
@@ -3,4 +3,3 @@
|
||||
There are
|
||||
= link_to "https://openfarm.cc/en/crops/#{CGI.escape @crop.name.gsub(' ', '-').downcase}" do
|
||||
#{crop.guides_count} growing guides on Open Farm
|
||||
|
||||
|
||||
@@ -30,6 +30,15 @@
|
||||
- @crop.companions.each do |companion|
|
||||
= render 'crops/tiny', crop: companion
|
||||
|
||||
- if @problems.any?
|
||||
%section.problems
|
||||
%h2 Problems
|
||||
- @problems.group_by(&:name).each do |problem_name, problems|
|
||||
- problem = problems.first
|
||||
= link_to problem_path(problem) do
|
||||
= problem_name
|
||||
%span.badge.badge-secondary= problems.size
|
||||
|
||||
%section.photos
|
||||
= cute_icon
|
||||
= render 'crops/photos', crop: @crop
|
||||
|
||||
@@ -5,5 +5,3 @@
|
||||
number_crops: link_to(t('.number_crops_linktext', count: Crop.count.to_i), crops_path),
|
||||
number_plantings: link_to(t('.number_plantings_linktext', count: Planting.count.to_i), plantings_path),
|
||||
number_gardens: link_to(t('.number_gardens_linktext', count: Garden.count.to_i), gardens_path))
|
||||
|
||||
|
||||
|
||||
@@ -51,7 +51,8 @@
|
||||
%section.seeds
|
||||
= cute_icon
|
||||
= render 'seeds'
|
||||
%p.text-right= link_to "#{t('home.seeds.view_all')} »", seeds_path, class: 'btn btn-block'
|
||||
%p.text-right
|
||||
= link_to "#{t('home.seeds.view_all')} »", seeds_path(tradeable_to: ['locally', 'nationally', 'internationally']), class: 'btn btn-block'
|
||||
.col-12.col-lg-6
|
||||
%section.discussion.text-center
|
||||
= cute_icon
|
||||
|
||||
@@ -32,9 +32,9 @@
|
||||
label: 'Where did you plant it?')
|
||||
= link_to "Add a garden.", new_garden_path
|
||||
.col-md-4
|
||||
= f.date_field :planted_at,
|
||||
= f.text_field :planted_at,
|
||||
value: @planting.planted_at ? @planting.planted_at.to_fs(:ymd) : '',
|
||||
label: 'When?'
|
||||
class: 'add-datepicker', label: 'When?'
|
||||
%span.help-inline
|
||||
Tip: Plan our your future plantings by forward dating, and subscribe to your iCalendar feed for reminders to plant
|
||||
|
||||
@@ -47,14 +47,21 @@
|
||||
= f.number_field :quantity, label: 'How many?', min: 1
|
||||
= f.text_area :description, rows: 6, label: 'Tell us more about it'
|
||||
|
||||
= f.collection_check_boxes :problem_ids, Problem.approved.order(:name), :id, :name do |b|
|
||||
.form-check
|
||||
= b.check_box
|
||||
= b.label
|
||||
|
||||
.row
|
||||
.col-md-6
|
||||
= f.check_box :finished, label: 'Mark as finished'
|
||||
%span.help-block= t('.finish_helper')
|
||||
.col-md-6
|
||||
= f.date_field :finished_at,
|
||||
= f.text_field :finished_at,
|
||||
value: @planting.finished_at ? @planting.finished_at.to_fs(:ymd) : '',
|
||||
label: 'Finished date'
|
||||
class: 'add-datepicker',
|
||||
label: 'Finished date',
|
||||
placeholder: 'optional'
|
||||
|
||||
.card-footer
|
||||
.text-right= f.submit 'Save'
|
||||
|
||||
@@ -51,6 +51,23 @@
|
||||
|
||||
.col-md-8.col-xs-12
|
||||
%section= render 'facts', planting: @planting
|
||||
|
||||
- if @planting.problems.any?
|
||||
%section.problems
|
||||
%h2 Problems
|
||||
- @planting.planting_problems.each do |planting_problem|
|
||||
.card
|
||||
.card-header
|
||||
%h3= planting_problem.problem.name
|
||||
.card-body
|
||||
- if planting_problem.photos.any?
|
||||
.row
|
||||
- planting_problem.photos.each do |photo|
|
||||
.col-md-4
|
||||
= image_tag photo.thumbnail_url, class: 'img-fluid'
|
||||
- else
|
||||
%p No photos of this problem for this planting yet.
|
||||
|
||||
- if @planting.description.present?
|
||||
= cute_icon
|
||||
.card
|
||||
|
||||
@@ -9,4 +9,3 @@
|
||||
|
||||
- else
|
||||
%h2 There are no comments yet
|
||||
|
||||
|
||||
54
app/views/problems/_form.html.haml
Normal file
54
app/views/problems/_form.html.haml
Normal file
@@ -0,0 +1,54 @@
|
||||
= bootstrap_form_for(@problem) do |f|
|
||||
- if @problem.errors.any?
|
||||
#error_explanation.alert.alert-warning{role: "alert"}
|
||||
%h3
|
||||
= pluralize(@problem.errors.size, "error")
|
||||
prohibited this problem from being saved:
|
||||
%ul
|
||||
- @problem.errors.full_messages.each do |msg|
|
||||
%li= msg
|
||||
|
||||
.card.col-12.col-md-8.mx-auto.float-none.white
|
||||
.card-header
|
||||
- if content_for? :title
|
||||
%h1.h2-responsive.text-center
|
||||
%strong=yield :title
|
||||
.card-body
|
||||
- if can? :wrangle, @problem
|
||||
%p
|
||||
%span.help-block
|
||||
As a problem wrangler, you can approve or reject problem suggestions.
|
||||
|
||||
%h2 Basic information
|
||||
|
||||
.form-group#new_problem
|
||||
= f.text_field :name, required: true
|
||||
%span.help-block
|
||||
The common name for the problem, in English (required).
|
||||
- if can? :wrangle, @problem
|
||||
Wranglers: please ensure this is singular, and capitalize
|
||||
proper nouns only.
|
||||
|
||||
- if (can?(:wrangle, @problem) && @problem.requester) || (cannot?(:wrangle, @problem) && @problem.new_record?)
|
||||
%h2 Problem request notes
|
||||
= f.text_area :request_notes, rows: 3, id: 'request_notes', label: 'Comments'
|
||||
|
||||
- unless can? :wrangle, @problem
|
||||
%p
|
||||
When you submit this form, your suggestion will be sent to our team of
|
||||
volunteer problem wranglers for review. We'll let you know the outcome as soon as we can.
|
||||
|
||||
- if can?(:wrangle, @problem) && @problem.requester
|
||||
= f.select(:reason_for_rejection, @problem.reasons_for_rejection, include_blank: true)
|
||||
|
||||
= f.text_area :rejection_notes, rows: 3
|
||||
%span.help-block
|
||||
Please provide additional notes why this problem request was rejected if the above reasons do not apply.
|
||||
|
||||
.card-footer
|
||||
.text-right
|
||||
- if @problem.approved?
|
||||
= f.submit 'Save'
|
||||
- else
|
||||
= f.submit 'Reject', class: 'btn btn-danger', name: 'reject'
|
||||
= f.submit 'Approve and save', class: 'btn btn-success', name: 'approve'
|
||||
10
app/views/problems/_thumbnail.html.haml
Normal file
10
app/views/problems/_thumbnail.html.haml
Normal file
@@ -0,0 +1,10 @@
|
||||
- cache problem do
|
||||
.card.problem-thumbnail
|
||||
= link_to problem_path(id: problem.slug) do
|
||||
= image_tag(problem.thumbnail_url.presence || placeholder_image,
|
||||
alt: "Image of #{problem.name}",
|
||||
class: 'img img-card')
|
||||
|
||||
|
||||
.text
|
||||
%h3.problem-name= link_to problem.name, problem_path(id: problem.slug)
|
||||
30
app/views/problems/edit.html.haml
Normal file
30
app/views/problems/edit.html.haml
Normal file
@@ -0,0 +1,30 @@
|
||||
- content_for :title, "Edit problem: #{@problem.name}"
|
||||
|
||||
- if @problem.approval_status == "approved"
|
||||
- if @problem.requester
|
||||
%p
|
||||
Requested by #{link_to @problem.requester, @problem.requester}
|
||||
#{distance_of_time_in_words(@problem.created_at, Time.zone.now)} ago.
|
||||
%p
|
||||
Approved by #{link_to @problem.creator, @problem.creator}.
|
||||
- else
|
||||
%p
|
||||
Added by
|
||||
= link_to @problem.creator, @problem.creator
|
||||
#{distance_of_time_in_words(@problem.created_at, Time.zone.now)} ago.
|
||||
- elsif @problem.approval_status == "pending"
|
||||
.alert.alert-danger
|
||||
%p
|
||||
Requested by #{link_to @problem.requester, @problem.requester}
|
||||
#{distance_of_time_in_words(@problem.created_at, Time.zone.now)} ago.
|
||||
%p
|
||||
Status: #{@problem.approval_status}.
|
||||
- elsif @problem.approval_status == "rejected"
|
||||
.alert.alert-danger
|
||||
%p
|
||||
Requested by #{link_to @problem.requester, @problem.requester}
|
||||
#{distance_of_time_in_words(@problem.created_at, Time.zone.now)} ago.
|
||||
%p
|
||||
Status: #{@problem.approval_status} by #{link_to @problem.creator, @problem.creator}.
|
||||
|
||||
= render 'form'
|
||||
13
app/views/problems/index.html.haml
Normal file
13
app/views/problems/index.html.haml
Normal file
@@ -0,0 +1,13 @@
|
||||
- content_for :title, t('.title')
|
||||
|
||||
- content_for :breadcrumbs do
|
||||
%li.breadcrumb-item.active= link_to 'Problems', problems_path
|
||||
|
||||
%section.problems
|
||||
%h2= t('.title')
|
||||
= will_paginate @problems
|
||||
.index-cards
|
||||
- @problems.each do |p|
|
||||
= render 'problems/thumbnail', problem: p
|
||||
|
||||
= will_paginate @problems
|
||||
15
app/views/problems/new.html.haml
Normal file
15
app/views/problems/new.html.haml
Normal file
@@ -0,0 +1,15 @@
|
||||
- content_for :title, (can?(:wrangle, @problem) ? "New problem" : "Suggest a problem")
|
||||
|
||||
- unless can? :wrangle, @problem
|
||||
%p
|
||||
Thanks for taking the time to suggest a problem! Our problem database is
|
||||
managed by volunteers, and we appreciate your help. Here are some
|
||||
things to consider when suggesting a new problem:
|
||||
%ul
|
||||
%li
|
||||
First, you might want to search our problems
|
||||
to make sure we don't have it already, perhaps under an alternate name.
|
||||
%li
|
||||
The Growstuff database only contains problems related to growing edible plants.
|
||||
|
||||
= render 'form'
|
||||
26
app/views/problems/show.html.haml
Normal file
26
app/views/problems/show.html.haml
Normal file
@@ -0,0 +1,26 @@
|
||||
- content_for :title, @problem.name
|
||||
|
||||
- content_for :breadcrumbs do
|
||||
%li.breadcrumb-item= link_to 'Problems', problems_path
|
||||
%li.breadcrumb-item.active= link_to @problem.name.capitalize, @problem
|
||||
|
||||
.jumbotron
|
||||
%h1= @problem.name
|
||||
|
||||
.row
|
||||
.col-md-9
|
||||
%section.plantings
|
||||
%h2 Plantings with this problem
|
||||
= will_paginate @plantings
|
||||
.index-cards
|
||||
- @plantings.each do |p|
|
||||
= render 'plantings/thumbnail', planting: p
|
||||
= will_paginate @plantings
|
||||
.col-md-3
|
||||
.card
|
||||
.card-body
|
||||
%h4.card-title= @problem.name
|
||||
%p.card-text
|
||||
This problem has been reported on
|
||||
= pluralize(@problem.plantings.count, 'planting')
|
||||
so far.
|
||||
51
app/views/problems/wrangle.html.haml
Normal file
51
app/views/problems/wrangle.html.haml
Normal file
@@ -0,0 +1,51 @@
|
||||
- content_for :title, "Problem Wrangling"
|
||||
|
||||
%h1 Problem Wrangling
|
||||
|
||||
%nav.nav
|
||||
= link_to "Add Problem", new_problem_path, class: 'btn'
|
||||
|
||||
%section.problem_wranglers
|
||||
%h2 Problem Wranglers
|
||||
- @problem_wranglers.each do |problem_wrangler|
|
||||
= render 'members/tiny', member: problem_wrangler
|
||||
|
||||
%hr/
|
||||
|
||||
%section
|
||||
%h2 Problems
|
||||
|
||||
%ul#myTab.nav.nav-tabs{role: "tablist"}
|
||||
%li.nav-item
|
||||
%a#home-tab.nav-link{ href: wrangle_problems_path, role: "tab", class: @approval_status.blank? ? 'active' : ''}
|
||||
Recently added
|
||||
%li.nav-item
|
||||
%a#profile-tab.nav-link{ href: wrangle_problems_path(approval_status: "pending"), role: "tab", class: @approval_status == "pending" ? 'active' : ''}
|
||||
Pending approval
|
||||
%li.nav-item
|
||||
%a#contact-tab.nav-link{ href: wrangle_problems_path(approval_status: "rejected"), role: "tab", class: @approval_status == "rejected" ? 'active' : ''} Rejected
|
||||
|
||||
%table.table.table-striped.table-bordered.table-sm{id: @approval_status.blank? ? 'recently-added-problems' : "#{@approval_status}-problems" }
|
||||
%tr
|
||||
%th Name
|
||||
%th Requested by
|
||||
- if @approval_status == "rejected"
|
||||
%th Rejected by
|
||||
- if @approval_status != "rejected" && @approval_status != "pending"
|
||||
%th Added by
|
||||
%th When
|
||||
- @problems.each do |p|
|
||||
%tr
|
||||
%td
|
||||
= link_to edit_problem_path(p) do
|
||||
= icon 'fas', 'bug'
|
||||
= p.name
|
||||
%td= p.requester.present? ? (link_to p.requester, p.requester) : "N/A"
|
||||
- unless @approval_status == "pending"
|
||||
%td= p.creator.present? ? (link_to p.creator, p.creator) : "N/A"
|
||||
%td
|
||||
= distance_of_time_in_words(p.created_at, Time.zone.now)
|
||||
ago.
|
||||
|
||||
= page_entries_info @problems
|
||||
= will_paginate @problems
|
||||
@@ -17,6 +17,14 @@
|
||||
= check_box_tag 'active', 'all', @show_all
|
||||
include finished
|
||||
%hr/
|
||||
%section.filters
|
||||
%h2 Tradeable
|
||||
%ul.nav.flex-column
|
||||
%li.nav-item= link_to "All tradable seeds", seeds_path(tradeable_to: ['locally', 'nationally', 'internationally'])
|
||||
- Seed::TRADABLE_TO_VALUES.each do |value|
|
||||
- unless value == 'nowhere'
|
||||
%li.nav-item= link_to value.capitalize, seeds_path(tradeable_to: value)
|
||||
%hr/
|
||||
- if @owner
|
||||
= render @owner
|
||||
- if @crop
|
||||
|
||||
@@ -5,7 +5,7 @@ Mailboxer.setup do |config|
|
||||
config.uses_emails = true
|
||||
|
||||
# Configures the default from for emails sent for Messages and Notifications
|
||||
config.default_from = "no-reply@growstuff.org"
|
||||
config.default_from = "Growstuff <#{ENV.fetch('GROWSTUFF_EMAIL', "no-reply@growstuff.org")}>"
|
||||
|
||||
# Configures the methods needed by mailboxer
|
||||
# config.email_method = :email
|
||||
|
||||
7
config/locales/mailboxer.en.yml
Normal file
7
config/locales/mailboxer.en.yml
Normal file
@@ -0,0 +1,7 @@
|
||||
en:
|
||||
mailboxer:
|
||||
message_mailer:
|
||||
subject_new: "New Notification: %{subject}"
|
||||
subject_reply: "New Reply: %{subject}"
|
||||
notification_mailer:
|
||||
subject: "New notification: %{subject}"
|
||||
@@ -89,6 +89,13 @@ Rails.application.routes.draw do
|
||||
end
|
||||
end
|
||||
|
||||
resources :problems, param: :slug do
|
||||
collection do
|
||||
get 'requested'
|
||||
get 'wrangle'
|
||||
end
|
||||
end
|
||||
|
||||
resources :comments
|
||||
resources :forums
|
||||
|
||||
|
||||
22
crowdin.yml
Normal file
22
crowdin.yml
Normal file
@@ -0,0 +1,22 @@
|
||||
# Hi there!
|
||||
#
|
||||
# This is a configuration file for the Crowdin CLI.
|
||||
# You'll need to replace the placeholder project_id with your actual
|
||||
# project ID from CrowdIn.
|
||||
#
|
||||
# For more information, see the Crowdin CLI documentation:
|
||||
# https://support.crowdin.com/enterprise/cli-v3/
|
||||
#
|
||||
project_id: "your-project-id"
|
||||
api_token_env: "CROWDIN_API_TOKEN"
|
||||
base_path: "."
|
||||
|
||||
files:
|
||||
- source: '/config/locales/en.yml'
|
||||
translation: '/config/locales/%two_letters_code%.yml'
|
||||
# The 'ignore' property is used to exclude files from processing.
|
||||
# We are ignoring the existing Japanese translation file.
|
||||
ignore:
|
||||
- '/config/locales/ja.yml'
|
||||
- source: '/config/locales/*.en.yml'
|
||||
translation: '/config/locales/%file_name%.%two_letters_code%.yml'
|
||||
@@ -4,6 +4,7 @@
|
||||
class Haml::Filters
|
||||
class GrowstuffMarkdown
|
||||
CROP_REGEX = /(?<!\\)\[([^\[\]]+?)\]\(crop\)/
|
||||
PROBLEM_REGEX = /(?<!\\)\[([^\[\]]+?)\]\(problem\)/
|
||||
MEMBER_REGEX = /(?<!\\)\[([^\[\]]+?)\]\(member\)/
|
||||
MEMBER_AT_REGEX = /(?<!\\)(@\w+)/
|
||||
MEMBER_ESCAPE_AT_REGEX = /(?<!\\)\\(?=@\w+)/
|
||||
@@ -42,6 +43,25 @@ class Haml::Filters
|
||||
end
|
||||
end
|
||||
|
||||
def expand_problems!(text)
|
||||
# turn [aphids](problem) into [aphids](http://growstuff.org/problems/aphids)
|
||||
text.gsub(PROBLEM_REGEX) do
|
||||
problem_str = Regexp.last_match(1)
|
||||
# find problem case-insensitively
|
||||
problem = Problem.where('lower(name) = ?', problem_str.downcase).first
|
||||
problem_link problem, problem_str
|
||||
end
|
||||
end
|
||||
|
||||
def problem_link(problem, link_text)
|
||||
if problem
|
||||
url = Rails.application.routes.url_helpers.problem_url(problem, only_path: true)
|
||||
"[#{link_text}](#{url})"
|
||||
else
|
||||
link_text
|
||||
end
|
||||
end
|
||||
|
||||
def crop_link(crop, link_text)
|
||||
if crop
|
||||
url = Rails.application.routes.url_helpers.crop_url(crop, only_path: true)
|
||||
|
||||
@@ -8,4 +8,18 @@ namespace :openfarm do
|
||||
Rails.logger = Logger.new(STDOUT)
|
||||
OpenfarmService.new.import!
|
||||
end
|
||||
|
||||
desc "Delete all pictures with source OpenFarm"
|
||||
task delete_pictures: :environment do
|
||||
puts "Deleting pictures with source OpenFarm..."
|
||||
photos_to_delete = Photo.where(source: 'openfarm')
|
||||
count = photos_to_delete.count
|
||||
photos_to_delete.each do |photo|
|
||||
photo.associations.each do |photo_association|
|
||||
photo_association.delete
|
||||
end
|
||||
photo.delete
|
||||
end
|
||||
puts "Deleted #{count} pictures."
|
||||
end
|
||||
end
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
describe "member deletion" do
|
||||
describe "member deletion", flaky: true do
|
||||
context "with activity and followers" do
|
||||
let(:member) { FactoryBot.create(:member) }
|
||||
let(:other_member) { FactoryBot.create(:member) }
|
||||
@@ -14,22 +14,8 @@ describe "member deletion" do
|
||||
let!(:secondgarden) { FactoryBot.create(:garden, owner: member) }
|
||||
|
||||
before do
|
||||
# Ensure both members follow each other.
|
||||
# This behaviour seems slightly flaky across runs, so
|
||||
# conditionally check if we have left over data
|
||||
unless member.already_following?(other_member)
|
||||
login_as(member)
|
||||
visit member_path(other_member)
|
||||
click_link 'Follow'
|
||||
logout
|
||||
end
|
||||
|
||||
unless other_member.already_following?(member)
|
||||
login_as(other_member)
|
||||
visit member_path(member)
|
||||
click_link 'Follow'
|
||||
logout
|
||||
end
|
||||
member.follows.create!(followed: other_member)
|
||||
other_member.follows.create!(followed: member)
|
||||
|
||||
login_as(member)
|
||||
FactoryBot.create(:comment, author: member, post: othermemberpost)
|
||||
|
||||
@@ -39,7 +39,7 @@ describe "Planting a crop", :js, :search do
|
||||
select "semi-shade", from: "Sun or shade?"
|
||||
fill_in "Tell us more about it", with: "It's rad."
|
||||
choose 'Garden'
|
||||
fill_in "When", with: Date.parse("2014-06-15")
|
||||
fill_in "When", with: "2014-06-15"
|
||||
click_button "Save"
|
||||
end
|
||||
end
|
||||
@@ -185,7 +185,7 @@ describe "Planting a crop", :js, :search do
|
||||
click_link 'Actions'
|
||||
click_link "Edit"
|
||||
check "finished"
|
||||
fill_in "Finished date", with: Date.parse("2015-06-25")
|
||||
fill_in "Finished date", with: "2015-06-25"
|
||||
click_button "Save"
|
||||
expect(page).to have_content "planting was successfully updated"
|
||||
expect(page).to have_content "Finished"
|
||||
@@ -196,9 +196,9 @@ describe "Planting a crop", :js, :search do
|
||||
select_from_autocomplete "maize"
|
||||
choose(member.gardens.first.name)
|
||||
within "form#new_planting" do
|
||||
fill_in "When?", with: Date.parse("2014-07-01")
|
||||
fill_in "When?", with: "2014-07-01"
|
||||
check "Mark as finished"
|
||||
fill_in "Finished date", with: Date.parse("2014-08-30")
|
||||
fill_in "Finished date", with: "2014-08-30"
|
||||
uncheck 'Mark as finished'
|
||||
end
|
||||
|
||||
@@ -253,7 +253,7 @@ describe "Planting a crop", :js, :search do
|
||||
fill_autocomplete "crop", with: "mai"
|
||||
select_from_autocomplete "maize"
|
||||
within "form#new_planting" do
|
||||
fill_in "When", with: Date.parse("2015-10-15")
|
||||
fill_in "When", with: "2015-10-15"
|
||||
fill_in "How many?", with: 42
|
||||
select "cutting", from: "Planted from"
|
||||
select "sun", from: "Sun or shade?"
|
||||
|
||||
@@ -2,11 +2,6 @@
|
||||
|
||||
# This file is copied to spec/ when you run 'rails generate rspec:install'
|
||||
ENV["RAILS_ENV"] ||= 'test'
|
||||
require 'simplecov'
|
||||
|
||||
# output coverage locally AND send it to coveralls
|
||||
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new([SimpleCov::Formatter::HTMLFormatter])
|
||||
|
||||
require 'spec_helper'
|
||||
require File.expand_path('../config/environment', __dir__)
|
||||
require 'rspec/rails'
|
||||
@@ -20,13 +15,13 @@ require 'capybara-screenshot/rspec'
|
||||
require 'axe-capybara'
|
||||
require 'axe-rspec'
|
||||
|
||||
# TODO: We may want to trial options.add_argument('--disable-dev-shm-usage') ### optional
|
||||
|
||||
# Required for running in the dev container
|
||||
Capybara.register_driver :selenium_chrome_customised_headless do |app|
|
||||
options = Selenium::WebDriver::Options.chrome
|
||||
options.add_argument("--headless")
|
||||
options.add_argument("--no-sandbox")
|
||||
options.add_argument("--window-size=1920,1080")
|
||||
options.add_argument("--disable-dev-shm-usage")
|
||||
|
||||
# driver = Selenium::WebDriver.for :chrome, options: options
|
||||
|
||||
@@ -125,8 +120,8 @@ RSpec.configure do |config|
|
||||
# Prevent Poltergeist from fetching external URLs during feature tests
|
||||
config.before(:each, :js) do
|
||||
# TODO: Why are we setting this page size then straight afterwards, maximising?
|
||||
width = 1280
|
||||
height = 1280
|
||||
width = 1920
|
||||
height = 1080
|
||||
Capybara.current_session.driver.browser.manage.window.resize_to(width, height)
|
||||
|
||||
if page.driver.browser.respond_to?(:url_blacklist)
|
||||
@@ -137,6 +132,9 @@ RSpec.configure do |config|
|
||||
]
|
||||
end
|
||||
|
||||
page.driver.browser.manage.window.maximize if page.driver.browser.respond_to?(:manage)
|
||||
# Historically, we wanted to .maximize; but this actually undoes the resize_to step above
|
||||
# with chrome headless
|
||||
# page.driver.browser.manage.window.maximize if page.driver.browser.respond_to?(:manage)
|
||||
# puts "Maximized window size: #{page.driver.browser.manage.window.size}"
|
||||
end
|
||||
end
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
# users commonly want.
|
||||
#
|
||||
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
||||
require 'simplecov'
|
||||
require 'percy/capybara'
|
||||
require 'rspec/rebound'
|
||||
require 'vcr'
|
||||
|
||||
VCR.configure do |c|
|
||||
@@ -27,8 +27,6 @@ VCR.configure do |c|
|
||||
c.configure_rspec_metadata!
|
||||
end
|
||||
|
||||
SimpleCov.start
|
||||
|
||||
RSpec.configure do |config|
|
||||
# rspec-expectations config goes here. You can use an alternate
|
||||
# assertion/expectation library such as wrong or the stdlib/minitest
|
||||
@@ -126,4 +124,20 @@ RSpec.configure do |config|
|
||||
|
||||
# Remember which tests failed, so you can run rspec with the `--only-failures` flag.
|
||||
config.example_status_persistence_file_path = "tmp/examples.txt"
|
||||
|
||||
# show retry status in spec process
|
||||
config.verbose_retry = true
|
||||
# show exception that triggers a retry if verbose_retry is set to true
|
||||
config.display_try_failure_messages = true
|
||||
|
||||
# run retry only on features
|
||||
config.around :each, :js do |ex|
|
||||
ex.run_with_retry retry: 3
|
||||
end
|
||||
|
||||
# callback to be run between retries
|
||||
config.retry_callback = proc do |ex|
|
||||
# run some additional clean up task - can be filtered by example metadata
|
||||
Capybara.reset! if ex.metadata[:js]
|
||||
end
|
||||
end
|
||||
|
||||
33
spec/tasks/openfarm_rake_spec.rb
Normal file
33
spec/tasks/openfarm_rake_spec.rb
Normal file
@@ -0,0 +1,33 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
require 'rake'
|
||||
|
||||
describe 'openfarm:delete_pictures' do
|
||||
before(:all) do
|
||||
Rails.application.load_tasks
|
||||
end
|
||||
|
||||
# We need to do this because Rake tasks normally output to STDOUT, but we
|
||||
# don't want to clutter up the test output.
|
||||
before(:each) do
|
||||
$stdout = StringIO.new
|
||||
end
|
||||
|
||||
after(:each) do
|
||||
$stdout = STDOUT
|
||||
end
|
||||
|
||||
it 'deletes pictures with source OpenFarm' do
|
||||
create(:photo, source: 'OpenFarm')
|
||||
create(:photo, source: 'flickr')
|
||||
|
||||
expect(Photo.where(source: 'OpenFarm').count).to eq(1)
|
||||
expect(Photo.where(source: 'flickr').count).to eq(1)
|
||||
|
||||
Rake::Task['openfarm:delete_pictures'].invoke
|
||||
|
||||
expect(Photo.where(source: 'OpenFarm').count).to eq(0)
|
||||
expect(Photo.where(source: 'flickr').count).to eq(1)
|
||||
end
|
||||
end
|
||||
@@ -22,6 +22,6 @@ describe "plantings/_form" do
|
||||
end
|
||||
|
||||
it "has a free-form text field containing the planting date in ISO format" do
|
||||
assert_select "input#planting_planted_at[type='date'][value='2013-03-01']"
|
||||
assert_select "input#planting_planted_at[type='text'][value='2013-03-01']"
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user