Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use Dockerv2 #12875

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/workflows/mapi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@ jobs:
steps:
- uses: actions/checkout@v3
- run: docker/build
- run: docker-compose up --detach
- run: docker compose up --detach
- run: until curl -f -s http://localhost:3000; do echo "waiting for api server"; sleep 1; done
- run: docker-compose exec -T db psql postgresql://ofn:f00d@localhost:5432/open_food_network_dev --command="update spree_users set spree_api_key='testing' where login='[email protected]'"
- run: docker compose exec -T db psql postgresql://ofn:f00d@localhost:5432/open_food_network_dev --command="update spree_users set spree_api_key='testing' where login='[email protected]'"
# equivalent to Flipper.enable(:api_v1)
- run: docker-compose exec -T db psql postgresql://ofn:f00d@localhost:5432/open_food_network_dev --command="insert into flipper_features (key, created_at, updated_at) values ('api_v1', localtimestamp, localtimestamp)"
- run: docker-compose exec -T db psql postgresql://ofn:f00d@localhost:5432/open_food_network_dev --command="insert into flipper_gates (feature_key, key, value, created_at, updated_at) values ('api_v1', 'boolean', 'true', localtimestamp, localtimestamp)"
- run: docker compose exec -T db psql postgresql://ofn:f00d@localhost:5432/open_food_network_dev --command="insert into flipper_features (key, created_at, updated_at) values ('api_v1', localtimestamp, localtimestamp)"
- run: docker compose exec -T db psql postgresql://ofn:f00d@localhost:5432/open_food_network_dev --command="insert into flipper_gates (feature_key, key, value, created_at, updated_at) values ('api_v1', 'boolean', 'true', localtimestamp, localtimestamp)"

# Run Mayhem for API
- name: Run Mayhem for API
Expand Down
10 changes: 3 additions & 7 deletions docker/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
## What's the point?
* Setting up the Open Food Network app on your local machine is quick and easy with the aid of Docker.
* Docker provides a common virtual environment available to all developers and resolves the infamous "but it works on my machine" problem.
* Use the scripts in this directory to execute tasks in Docker. Please note that these scripts are intended to be executed from this app's root directory (/openfoodnetwork). These scripts allow you to bypass the need to keep typing "docker-compose run web".
* Use the scripts in this directory to execute tasks in Docker. Please note that these scripts are intended to be executed from this app's root directory (/openfoodnetwork). These scripts allow you to bypass the need to keep typing "docker compose run web".

## Limitations
1. The docker environment can't directly control your host system browser, which means that browser specs (under `/spec/system/`) and email previews will not work. You may be able to find a solution with [this article](https://evilmartians.com/chronicles/system-of-a-test-setting-up-end-to-end-rails-testing). If so, please contribute!
Expand All @@ -17,10 +17,6 @@
* Visit https://docs.docker.com/engine/install/#server and select your Linux distribution to install Docker Engine.
Note: There is no need to install Docker Desktop on Linux.
* Follow the installation instructions provided. Installing from Docker repositories is recommended.
* Install Docker Compose V1. Docker Engine comes with Docker Compose V2 which is not yet supported by our Docker scripts.
```sh
$ sudo apt install docker-compose
```
* To run Docker commands as a regular user instead of as root (with sudo), follow the instructions at https://docs.docker.com/engine/install/linux-postinstall/.

#### Windows
Expand Down Expand Up @@ -93,7 +89,7 @@ You may need to wait several minutes before getting the server up and running pr
* If you’re getting the following error:
```sh
dockerpycreds.errors.InitializationError: docker-credential-desktop not installed or not available in PATH
[8929] Failed to execute script docker-compose
[8929] Failed to execute script docker compose
```
Just change the entry in ~/.docker/config.json like this (credStore instead of credsStore), and you’re good to go:
```sh
Expand Down Expand Up @@ -125,7 +121,7 @@ See [#8421](https://github.com/openfoodfoundation/openfoodnetwork/issues/8421) f

## Script Summary
* docker/build(.ps1): This script builds the Docker containers specified for this app, seeds the database, and logs the screen output for these operations. After you use "git clone" to download this repository, run the docker/build script to start the setup process.
* docker/server(.ps1): Use this script to run this app in the Rails server. This script executes the "docker-compose up" command and logs the results. If all goes well, you will be able to view this app on your local browser at http://localhost:3000/.
* docker/server(.ps1): Use this script to run this app in the Rails server. This script executes the "docker compose up" command and logs the results. If all goes well, you will be able to view this app on your local browser at http://localhost:3000/.
* docker/test(.ps1): Use this script to run the entire test suite. **Note limitation with system specs mentioned above**.
* docker/qtest: Use this script to run the entire test suite in quiet mode. The deprecation warnings are removed to make the test results easier to read.
* docker/run: Use this script to run commands within the Docker container. If you want shell access, enter "docker/run bash". To execute "ls -l" within the Docker container, enter "docker/run ls -l".
Expand Down
8 changes: 4 additions & 4 deletions docker/build-log
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
#!/bin/bash
set +e

docker-compose down -v --remove-orphans
docker compose down -v --remove-orphans
wait
echo '###########################'
echo 'BEGIN: docker-compose build'
echo 'BEGIN: docker compose build'
echo '###########################'
docker-compose build # Set up the Docker containers
docker compose build # Set up the Docker containers
echo '##############################'
echo 'FINISHED: docker-compose build'
echo 'FINISHED: docker compose build'
echo '##############################'
4 changes: 2 additions & 2 deletions docker/build-log.ps1
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Write-Host "Docker cleaning: remove old containers" -ForegroundColor Blue
docker-compose.exe down -v --remove-orphans
docker compose down -v --remove-orphans
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did you check if the .exe is not needed any more ?

Copy link
Collaborator Author

@macanudo527 macanudo527 Sep 26, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Honestly, I'm not sure. It should have never been necessary. I can't get the server to respond in pure Windows using docker-compose.exe or docker compose The containers spin up with either of them, but I don't get a response from the server. I was hoping someone who uses it could provide some feedback.

I develop with Ubuntu and WSL Ubuntu. I tested the docker setup with both and it works fine.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I saw you asked for feedback 👍 I think it's a minor use case so we should be good to merge as it is. If some run into any issue we can revisit. I'll wait a few more days for feedback before merging.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks. It is easy enough to revert if something comes up, so it should be relatively safe.

Write-Host "Docker build: set up the docker containers" -ForegroundColor Blue
docker-compose.exe build
docker compose build
Write-Host "Docker build finished"
6 changes: 3 additions & 3 deletions docker/cop
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
# This script runs RuboCop.

echo '-------------------------------------------------'
echo 'BEGIN: docker-compose run web bundle exec rubocop'
echo 'BEGIN: docker compose run web bundle exec rubocop'
echo '-------------------------------------------------'
docker-compose run web bundle exec rubocop
docker compose run web bundle exec rubocop
echo '-----------------------------------------------'
echo 'END: docker-compose run web bundle exec rubocop'
echo 'END: docker compose run web bundle exec rubocop'
echo '-----------------------------------------------'
2 changes: 1 addition & 1 deletion docker/cop.ps1
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# This script runs RuboCop

Write-Host "bundle exec rubocop : runs rubocop" -ForegroundColor Blue
docker-compose.exe run web bundle exec rubocop
docker compose run web bundle exec rubocop
8 changes: 4 additions & 4 deletions docker/qtest-log
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
#!/bin/bash

echo '--------------------------------------------------------------'
echo 'BEGIN: docker-compose run web bundle exec rake db:test:prepare'
echo 'BEGIN: docker compose run web bundle exec rake db:test:prepare'
echo '--------------------------------------------------------------'
docker-compose run web bundle exec rake db:test:prepare
docker compose run web bundle exec rake db:test:prepare
echo '------------------------------------------------------------'
echo 'END: docker-compose run web bundle exec rake db:test:prepare'
echo 'END: docker compose run web bundle exec rake db:test:prepare'
echo '------------------------------------------------------------'

echo '--------------------------------------'
echo 'BEGIN: running test suite (quiet mode)'
echo '--------------------------------------'
docker-compose run web bundle exec rspec spec | grep -v 'DEPRECATION WARNING' | grep -v 'Post.includes(:comments)' | grep -v 'Currently, Active Record recognizes the table in the string' | grep -v "If you don't rely on implicit join references"
docker compose run web bundle exec rspec spec | grep -v 'DEPRECATION WARNING' | grep -v 'Post.includes(:comments)' | grep -v 'Currently, Active Record recognizes the table in the string' | grep -v "If you don't rely on implicit join references"
echo '------------------------------------'
echo 'END: running test suite (quiet mode)'
echo '------------------------------------'
6 changes: 3 additions & 3 deletions docker/run
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

set -e

# Use this script to execute commaands in the Docker container.
# Use this script to execute commands in the Docker container.
# Example: To run the "ls -l" command in the Docker container, enter the command "docker/run ls -l".

function cleanup {
Expand All @@ -12,11 +12,11 @@ function cleanup {

# ignore errors
set +e
docker-compose down
docker compose down

exit $code
}

trap cleanup EXIT

docker-compose run web $@
docker compose run web $@
18 changes: 9 additions & 9 deletions docker/seed
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,25 @@
# This is the data seeding script.

echo '-------------------------------------------------------'
echo 'BEGIN: docker-compose run web bundle exec rake db:reset'
echo 'BEGIN: docker compose run web bundle exec rake db:reset'
echo '-------------------------------------------------------'
docker-compose run web bundle exec rake db:reset
docker compose run web bundle exec rake db:reset
echo '-----------------------------------------------------'
echo 'END: docker-compose run web bundle exec rake db:reset'
echo 'END: docker compose run web bundle exec rake db:reset'
echo '-----------------------------------------------------'

echo '--------------------------------------------------------------'
echo 'BEGIN: docker-compose run web bundle exec rake db:test:prepare'
echo 'BEGIN: docker compose run web bundle exec rake db:test:prepare'
echo '--------------------------------------------------------------'
docker-compose run web bundle exec rake db:test:prepare
docker compose run web bundle exec rake db:test:prepare
echo '------------------------------------------------------------'
echo 'END: docker-compose run web bundle exec rake db:test:prepare'
echo 'END: docker compose run web bundle exec rake db:test:prepare'
echo '------------------------------------------------------------'

echo '--------------------------------------------------------------'
echo 'BEGIN: docker-compose run web bundle exec rake ofn:sample_data'
echo 'BEGIN: docker compose run web bundle exec rake ofn:sample_data'
echo '--------------------------------------------------------------'
docker-compose run web bundle exec rake ofn:sample_data
docker compose run web bundle exec rake ofn:sample_data
echo '------------------------------------------------------------'
echo 'END: docker-compose run web bundle exec rake ofn:sample_data'
echo 'END: docker compose run web bundle exec rake ofn:sample_data'
echo '------------------------------------------------------------'
6 changes: 3 additions & 3 deletions docker/seed.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
# - seed the database with sample data

Write-Host "bundle exec rake db:reset : reset the dev and test databases" -ForegroundColor Blue
docker-compose.exe run web bundle exec rake db:reset
docker compose run web bundle exec rake db:reset

Write-Host "bundle exec rake db:test:prepare : prepare the database" -ForegroundColor Blue
docker-compose.exe run web bundle exec rake db:test:prepare
docker compose run web bundle exec rake db:test:prepare

Write-Host "bundle exec rake ofn:sample_data : seed the database with sample data" -ForegroundColor Blue
docker-compose.exe run web bundle exec rake ofn:sample_data
docker compose run web bundle exec rake ofn:sample_data
4 changes: 2 additions & 2 deletions docker/server-log
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
set +e

echo '########################'
echo 'BEGIN: docker-compose up'
echo 'BEGIN: docker compose up'
echo '########################'
echo 'View this app in your web browser at'
echo 'http://localhost:3000/'
docker-compose up
docker compose up
6 changes: 3 additions & 3 deletions docker/server.ps1
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# This script launches the whole stack of containers (web server, database, webpack, redis, etc.)
$DateTime=Get-Date -Format "yyyyMMdd-HHmmss"

Write-Host "Docker-compose up: launches the whole stack of containers" -ForegroundColor Blue
docker-compose.exe up -d > log/server-$DateTime.log 2>&1
Write-Host "Docker-compose up finished : View this app in your web browser at http://localhost:3000/" -ForegroundColor Blue
Write-Host "Docker compose up: launches the whole stack of containers" -ForegroundColor Blue
docker compose up -d > log/server-$DateTime.log 2>&1
Write-Host "Docker compose up finished : View this app in your web browser at http://localhost:3000/" -ForegroundColor Blue
12 changes: 6 additions & 6 deletions docker/test
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,17 @@ set -e
DATE=`date +%Y%m%d-%H%M%S-%3N`

echo '--------------------------------------------------------------'
echo 'BEGIN: docker-compose run web bundle exec rake db:test:prepare'
echo 'BEGIN: docker compose run web bundle exec rake db:test:prepare'
echo '--------------------------------------------------------------'
docker-compose run web bundle exec rake db:test:prepare 2>&1 | tee log/test-prepare-$DATE.log
docker compose run web bundle exec rake db:test:prepare 2>&1 | tee log/test-prepare-$DATE.log
echo '------------------------------------------------------------'
echo 'END: docker-compose run web bundle exec rake db:test:prepare'
echo 'END: docker compose run web bundle exec rake db:test:prepare'
echo '------------------------------------------------------------'

echo '----------------------------------------------------'
echo 'BEGIN: docker-compose run web bundle exec rspec spec'
echo 'BEGIN: docker compose run web bundle exec rspec spec'
echo '----------------------------------------------------'
docker-compose run web bundle exec rspec --no-color spec 2>&1 | tee log/test-rspec-$DATE.log
docker compose run web bundle exec rspec --no-color spec 2>&1 | tee log/test-rspec-$DATE.log
echo '--------------------------------------------------'
echo 'END: docker-compose run web bundle exec rspec spec'
echo 'END: docker compose run web bundle exec rspec spec'
echo '--------------------------------------------------'
4 changes: 2 additions & 2 deletions docker/test.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@
$DateTime=Get-Date -Format "yyyyMMdd-HHmmss"

Write-Host "bundle exec rake db:test:prepare : prepare the database for rspec tests" -ForegroundColor Blue
docker-compose.exe run web bundle exec rake db:test:prepare > log/test-prepare-$DateTime.log 2>&1
docker compose run web bundle exec rake db:test:prepare > log/test-prepare-$DateTime.log 2>&1
Write-Host "bundle exec rspec spec : launch the rspec tests" -ForegroundColor Blue
docker-compose.exe run web bundle exec rspec spec > log/test-rspec-$DateTime.log 2>&1
docker compose run web bundle exec rspec spec > log/test-rspec-$DateTime.log 2>&1
Loading