Skip to content

Commit

Permalink
use Makefile for all tasks
Browse files Browse the repository at this point in the history
  • Loading branch information
merlinran committed Dec 10, 2021
1 parent ae91a61 commit 541629a
Show file tree
Hide file tree
Showing 11 changed files with 72 additions and 25 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ concurrency:
jobs:
test:
runs-on: ubuntu-latest
# To create and push new image: docker buildx build -t merlinran/acorn_docker --platform linux/amd64,linux/arm64 --push .
# To create and push new image: make push-image
container: docker://merlinran/acorn_docker:latest
strategy:
fail-fast: true
Expand Down
64 changes: 64 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
LOCAL_IMAGE = acorn_docker:1.0
REMOTE_IMAGE = merlinran/acorn_docker

This comment has been minimized.

Copy link
@merlinran

merlinran Dec 13, 2021

Author Collaborator

Again, this should be changed after creating a new Docker Hub account.


.PHONY: list
list:
@echo "Welcome! You may want to try one of the following:\n---"; \
grep "^.PHONY:" Makefile | grep "#" | cut -d ":" -f 2- | sed "s/\w*#/\t#/g" | sed "s/^/make/"

This comment has been minimized.

Copy link
@merlinran

merlinran Dec 13, 2021

Author Collaborator

This prints a nice help message when running make from cli.

Welcome! You may want to try one of the following:
---
make simulation 	# Run the vehicle and server containers in simulation mode.
make attach-vehicle 	# Attach to the shell of the vehicle container. It creates the container if it doesn't exist.
make attach-server 	# Attach to the shell of the server container. It creates the container if it doesn't exist.
make stop 	# Stop both the vehicle and server containers.
make docker-test 	# Start the vehicle container in test mode and run the tests in it.
make push-image 	# Build and push image to Docker Hub to be used by CI.
make test  	# Run tests on Linux (if the Python dependencies are installed) or inside Docker. Otherwise, you probably want to try `make docker-test` instead.

.PHONY: simulation # Run the vehicle and server containers in simulation mode.
simulation: docker-image
@DOCKER_COMPOSE_FILE=docker-compose-simulation.yml make restart-docker-compose &&\
echo "Please visit http://localhost"

.PHONY: attach-vehicle # Attach to the shell of the vehicle container. It creates the container if it doesn't exist.
attach-vehicle:
@test -z `docker ps -f "name=acorn_vehicle" -q` && make docker-vehicle; \
docker exec -it acorn_vehicle /bin/sh

.PHONY: attach-server # Attach to the shell of the server container. It creates the container if it doesn't exist.
attach-server:
@test -z `docker ps -f "name=acorn_server" -q` && make docker-server; \
docker exec -it acorn_server /bin/sh

.PHONY: stop # Stop both the vehicle and server containers.
stop:
@docker-compose -f docker-compose-simulation.yml down --remove-orphans

.PHONY: docker-test # Start the vehicle container in test mode and run the tests in it.
docker-test: docker-image
@docker-compose -f docker-compose-test.yml up --remove-orphans -d && \
docker exec -it acorn_vehicle make test

.PHONY: push-image # Build and push image to Docker Hub to be used by CI.
push-image: docker-image
ifeq ($(shell uname -m),arm64)
docker buildx build -t $(REMOTE_IMAGE) --platform linux/amd64,linux/arm64 --push .
else
docker build -t $(REMOTE_IMAGE) . && docker push $(REMOTE_IMAGE)
endif

.PHONY: test # Run tests on Linux (if the Python dependencies are installed) or inside Docker. Otherwise, you probably want to try `make docker-test` instead.
test:
coverage run -m pytest --log-cli-level DEBUG && coverage report --skip-covered --skip-empty

.PHONY: docker-vehicle
docker-vehicle: docker-image
@DOCKER_COMPOSE_FILE=docker-compose-vehicle.yml make restart-docker-compose

.PHONY: docker-server
docker-server: docker-image
@DOCKER_COMPOSE_FILE=docker-compose-server.yml make restart-docker-compose

.PHONY: restart-docker-compose
restart-docker-compose:
@docker-compose -f $${DOCKER_COMPOSE_FILE} down --remove-orphans; \
docker-compose -f $${DOCKER_COMPOSE_FILE} up -d

.PHONY: docker-image
docker-image: Dockerfile
@find Dockerfile -newermt "`docker images $(LOCAL_IMAGE) --format "{{.CreatedAt}}"`" || \
docker build -t $(LOCAL_IMAGE) .

Dockerfile: vehicle/requirements.txt server/requirements.txt
@docker build --no-cache -t $(LOCAL_IMAGE) . # Force rebuilding image if requirements files have been changed
14 changes: 7 additions & 7 deletions SIMULATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

## Running the code in simulation

It is now possible to run a simulated robot in Docker on
your computer. Our launch scripts are designed to run in linux, but if
you examine run_docker_simulation.sh you will see the commands needed.
It is now possible to run a simulated robot in Docker on your computer. Our
launch scripts are only tested on Linux and macOS, but if you examine Makefile
you will see the commands needed.

This is early stages alpha quality and at this time only rough notes follow.

Expand All @@ -25,7 +25,7 @@ Clone this git repo and change in to the directory.
```
git clone https://github.com/Twisted-Fields/acorn-precision-farming-rover.git
cd acorn-precision-farming-rover
./run_docker_simulation.sh
make simulation
```

The docker container will now (hopefully) build and launch. This will take
Expand All @@ -41,7 +41,7 @@ development.

Connect to the vehicle container:
```
./attach_docker_vehicle.sh
make attach-vehicle
```
Multiple processes are running in separate tmux windows. The vehicle has a main
process and a separate motor process.
Expand Down Expand Up @@ -72,7 +72,7 @@ Ctrl+D to exit the docker container without stopping it.
The server is configured the same way, but with more tmux windows operating.
Attach to the server docker container with:
```
./attach_docker_server.sh
make attach-server
```

And explore the tmux windows there.
Expand All @@ -86,7 +86,7 @@ robot status.
If you are done, exit any tmux windows and docker containers and then stop
simulation with:
```
./stop_docker_simulation.sh
make stop
```

Want to play around a little more before stopping the simulation? One thing to
Expand Down
1 change: 0 additions & 1 deletion attach_docker_server.sh

This file was deleted.

1 change: 0 additions & 1 deletion attach_docker_vehicle.sh

This file was deleted.

4 changes: 0 additions & 4 deletions kill-docker.sh

This file was deleted.

3 changes: 0 additions & 3 deletions run_docker_server.sh

This file was deleted.

2 changes: 0 additions & 2 deletions run_docker_simulation.sh

This file was deleted.

2 changes: 0 additions & 2 deletions run_docker_test.sh

This file was deleted.

3 changes: 0 additions & 3 deletions run_docker_vehicle.sh

This file was deleted.

1 change: 0 additions & 1 deletion stop_docker_simulation.sh

This file was deleted.

0 comments on commit 541629a

Please sign in to comment.