diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6f6cfd5..6e075a3 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -11,7 +11,7 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v1 - name: Set up Go uses: actions/setup-go@v2 @@ -19,7 +19,9 @@ jobs: go-version: 1.15 - name: Build + working-directory: docker/go run: go build -v ./... - name: Test + working-directory: docker/go run: go test -v ./... diff --git a/.gitignore b/.gitignore index eda9dfe..3304b9c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,2 @@ .env -docker/go/cmd -docker/go/pkg -docker/go/go.mod -cmd/bot/bot \ No newline at end of file +cmd/bot/bot diff --git a/README.md b/README.md index e3281db..6d89a5d 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,13 @@ +# Workout reminder bot + ![build](https://github.com/nextuponstream/workoutReminderBot/actions/workflows/main.yml/badge.svg) -# How to use the bot +## How to use the bot + -## Bot commands +### Bot commands + ... you can issue as a telegram user: | Command | description | |---|----| @@ -19,13 +23,22 @@ |`/cancel []`| cancel all reminders or for all mentionned routines | **🔴 IMPORTANT 🔴**: Set your `/timezone` so all other commands can work correctly for you!!! -# Setup -## BotFather -### Register bot + +## Setup + +### Build + +### BotFather + +#### Register bot + Go on telegram, start a chat with BotFather and create a new bot via `/newBot`. Set up a bot name and the bot user name. -### Command hints + +#### Command hints + With BotFather, set commands with `/setCommands` and paste: -``` + +```txt help - instructions on bot usage timezone - 🔴 set your timezone for all commands to work correctly (default is CET) exercise - create exercise for activity and optionnaly indicate its reps, sets, length, duration and notes (e.g. /exercise ) @@ -37,11 +50,15 @@ routine - create a routine made of workouts (e.g. /routine gitStrong) remindme - sends a reminder to maintain the routine (e.g. /remindme gitStrong 16 21 tu we th fr sa) cancel - cancel all reminders or for all mentionned routines (e.g. /cancel OR /cancel gitStrong) ``` -## Environnement file + +### Environnement file + Create your own environnement file `.env` by following the example file `example.env`. -## Start + +### Start + ```bash git clone git@github.com:nextuponstream/workoutReminderBot.git -cd workoutReminderBot/scripts -sh runBot.sh -``` \ No newline at end of file +cd workoutReminderBot +docker-compose up -d +``` diff --git a/docker-compose.yml b/docker-compose.yml index 3ede325..5ae5480 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,37 +1,33 @@ -version: '3.9' -networks: - web: +version: "3.9" -services: +services: mdb: - build: ./docker/mongo - image: nextuponstream/wrb_mongo + image: mongo:3.6.22 container_name: ${CONTAINER_NAME_MONGO} - env_file: + env_file: - .env - ports: + ports: - 8444:27017 - networks: - - web + ngdb: - build: ./docker/neo4j - image: nextuponstream/wrb_neo4j + image: neo4j:4.4.4 container_name: wrb_ngdb - env_file: + env_file: - .env ports: - - 7474:7474 + - 7474:7474 - 7687:7687 - networks: - - web bot: build: ./docker/go image: nextuponstream/wrb_bot container_name: wrb_go - env_file: + restart: "on-failure" + environment: + - MDB=mdb:27017 + - NGDB=ngdb:7687 + - TIMEOUT=10 + env_file: - .env - ports: + ports: - 8443:3000 - networks: - - web diff --git a/docker/bash/Dockerfile b/docker/bash/Dockerfile deleted file mode 100644 index cfa534e..0000000 --- a/docker/bash/Dockerfile +++ /dev/null @@ -1,3 +0,0 @@ -FROM bash:5.1.4 -COPY wait-for-it.sh wait-for-it.sh -RUN chmod +x wait-for-it.sh \ No newline at end of file diff --git a/docker/go/Dockerfile b/docker/go/Dockerfile index cdb0579..a3af04c 100644 --- a/docker/go/Dockerfile +++ b/docker/go/Dockerfile @@ -1,20 +1,19 @@ -FROM golang:1.15 as build +FROM golang:1.15-alpine WORKDIR /go/src/github.com/nextuponstream/workoutReminderBot COPY pkg pkg COPY cmd cmd COPY go.mod go.mod +copy wait-for-it.sh wait-for-it.sh RUN go get -d -v ./... -RUN go test -v ./... WORKDIR /go/src/github.com/nextuponstream/workoutReminderBot/cmd/bot RUN CGO_ENABLED=0 go build -v -o /bin/workoutReminderBot -FROM scratch # golang image already has certificates https://stackoverflow.com/a/52979541 -COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ -COPY --from=build /bin/workoutReminderBot /bin/workoutReminderBot -COPY --from=build /usr/share/zoneinfo /usr/share/zoneinfo +#COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ +#COPY --from=build /bin/workoutReminderBot /bin/workoutReminderBot +#COPY --from=build /usr/share/zoneinfo /usr/share/zoneinfo ENV TZ=Europe/Berlin # Note: tested time difference with America/Los_Angeles -ENTRYPOINT ["/bin/workoutReminderBot"] \ No newline at end of file +ENTRYPOINT ["/bin/workoutReminderBot"] diff --git a/cmd/bot/main.go b/docker/go/cmd/bot/main.go similarity index 100% rename from cmd/bot/main.go rename to docker/go/cmd/bot/main.go diff --git a/go.mod b/docker/go/go.mod similarity index 100% rename from go.mod rename to docker/go/go.mod diff --git a/go.sum b/docker/go/go.sum similarity index 100% rename from go.sum rename to docker/go/go.sum diff --git a/pkg/domain/activity.go b/docker/go/pkg/domain/activity.go similarity index 100% rename from pkg/domain/activity.go rename to docker/go/pkg/domain/activity.go diff --git a/pkg/domain/exercise.go b/docker/go/pkg/domain/exercise.go similarity index 100% rename from pkg/domain/exercise.go rename to docker/go/pkg/domain/exercise.go diff --git a/pkg/domain/persistence.go b/docker/go/pkg/domain/persistence.go similarity index 100% rename from pkg/domain/persistence.go rename to docker/go/pkg/domain/persistence.go diff --git a/pkg/domain/reminder.go b/docker/go/pkg/domain/reminder.go similarity index 100% rename from pkg/domain/reminder.go rename to docker/go/pkg/domain/reminder.go diff --git a/pkg/domain/reminder_test.go b/docker/go/pkg/domain/reminder_test.go similarity index 100% rename from pkg/domain/reminder_test.go rename to docker/go/pkg/domain/reminder_test.go diff --git a/pkg/domain/user.go b/docker/go/pkg/domain/user.go similarity index 100% rename from pkg/domain/user.go rename to docker/go/pkg/domain/user.go diff --git a/pkg/domain/workout.go b/docker/go/pkg/domain/workout.go similarity index 100% rename from pkg/domain/workout.go rename to docker/go/pkg/domain/workout.go diff --git a/pkg/domain/workout_test.go b/docker/go/pkg/domain/workout_test.go similarity index 100% rename from pkg/domain/workout_test.go rename to docker/go/pkg/domain/workout_test.go diff --git a/pkg/handler/activity.go b/docker/go/pkg/handler/activity.go similarity index 100% rename from pkg/handler/activity.go rename to docker/go/pkg/handler/activity.go diff --git a/pkg/handler/cancel.go b/docker/go/pkg/handler/cancel.go similarity index 100% rename from pkg/handler/cancel.go rename to docker/go/pkg/handler/cancel.go diff --git a/pkg/handler/exercise.go b/docker/go/pkg/handler/exercise.go similarity index 100% rename from pkg/handler/exercise.go rename to docker/go/pkg/handler/exercise.go diff --git a/pkg/handler/exercise_test.go b/docker/go/pkg/handler/exercise_test.go similarity index 100% rename from pkg/handler/exercise_test.go rename to docker/go/pkg/handler/exercise_test.go diff --git a/pkg/handler/help.go b/docker/go/pkg/handler/help.go similarity index 100% rename from pkg/handler/help.go rename to docker/go/pkg/handler/help.go diff --git a/pkg/handler/reminder.go b/docker/go/pkg/handler/reminder.go similarity index 100% rename from pkg/handler/reminder.go rename to docker/go/pkg/handler/reminder.go diff --git a/pkg/handler/reminder_test.go b/docker/go/pkg/handler/reminder_test.go similarity index 100% rename from pkg/handler/reminder_test.go rename to docker/go/pkg/handler/reminder_test.go diff --git a/pkg/handler/routine.go b/docker/go/pkg/handler/routine.go similarity index 100% rename from pkg/handler/routine.go rename to docker/go/pkg/handler/routine.go diff --git a/pkg/handler/timezone.go b/docker/go/pkg/handler/timezone.go similarity index 100% rename from pkg/handler/timezone.go rename to docker/go/pkg/handler/timezone.go diff --git a/pkg/handler/unknown.go b/docker/go/pkg/handler/unknown.go similarity index 100% rename from pkg/handler/unknown.go rename to docker/go/pkg/handler/unknown.go diff --git a/pkg/handler/workout.go b/docker/go/pkg/handler/workout.go similarity index 100% rename from pkg/handler/workout.go rename to docker/go/pkg/handler/workout.go diff --git a/pkg/repositories/mongo/activities.go b/docker/go/pkg/repositories/mongo/activities.go similarity index 100% rename from pkg/repositories/mongo/activities.go rename to docker/go/pkg/repositories/mongo/activities.go diff --git a/pkg/repositories/mongo/mongo.go b/docker/go/pkg/repositories/mongo/mongo.go similarity index 100% rename from pkg/repositories/mongo/mongo.go rename to docker/go/pkg/repositories/mongo/mongo.go diff --git a/pkg/repositories/mongo/user.go b/docker/go/pkg/repositories/mongo/user.go similarity index 100% rename from pkg/repositories/mongo/user.go rename to docker/go/pkg/repositories/mongo/user.go diff --git a/pkg/repositories/neo4j/exercise.go b/docker/go/pkg/repositories/neo4j/exercise.go similarity index 100% rename from pkg/repositories/neo4j/exercise.go rename to docker/go/pkg/repositories/neo4j/exercise.go diff --git a/pkg/repositories/neo4j/neo4j.go b/docker/go/pkg/repositories/neo4j/neo4j.go similarity index 100% rename from pkg/repositories/neo4j/neo4j.go rename to docker/go/pkg/repositories/neo4j/neo4j.go diff --git a/docker/go/start-service.sh b/docker/go/start-service.sh new file mode 100644 index 0000000..f0b0f9f --- /dev/null +++ b/docker/go/start-service.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +echo $SHELL + +for SERVICE in $MDB $NGDB +do + echo $SERVICE + sh wait-for-it.sh -t $TIMEOUT $SERVICE + hasTimeout=$? + + if [ "$hasTimeout" -ne 0 ]; then # when timeout occurs + echo "error: required service $SERVICE didn't start in time!" + exit 1 + else + echo "$SERVICE is up" + fi +done + +/bin/workoutReminderBot diff --git a/docker/bash/wait-for-it.sh b/docker/go/wait-for-it.sh old mode 100644 new mode 100755 similarity index 100% rename from docker/bash/wait-for-it.sh rename to docker/go/wait-for-it.sh diff --git a/docker/mongo/Dockerfile b/docker/mongo/Dockerfile deleted file mode 100644 index 7c234bf..0000000 --- a/docker/mongo/Dockerfile +++ /dev/null @@ -1 +0,0 @@ -FROM mongo:3.6.22 \ No newline at end of file diff --git a/docker/neo4j/Dockerfile b/docker/neo4j/Dockerfile deleted file mode 100644 index db98b0f..0000000 --- a/docker/neo4j/Dockerfile +++ /dev/null @@ -1 +0,0 @@ -FROM neo4j:4.2.3 \ No newline at end of file diff --git a/scripts/runBot.sh b/scripts/runBot.sh deleted file mode 100644 index 4cd5ef7..0000000 --- a/scripts/runBot.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/bash -TIMEOUT=25 -BUILD=docker/go -MDB=wrb_mdb:27017 -NGDB=wrb_ngdb:7687 - -wait_for_service() - -echo 'Removing all unnecessary containers/images that are used in build' -# yes command: https://stackoverflow.com/a/7642711 -yes | docker container prune # for wrb_wait_dbs -yes | docker image prune -yes | docker volume prune -docker system prune --volume - -./startDbs.sh # dbs started in background - -cd .. - -rm -rf $BUILD/pkg -cp -R pkg $BUILD/pkg -rm -rf $BUILD/cmd -cp -R cmd $BUILD/cmd -rm $BUILD/go.mod -cp go.mod $BUILD/go.mod - -for service in $MDB $NGDB -do - # wait on dbs to start before running our bots - docker build --tag wrb_wait_dbs docker/bash - docker run --network=workoutreminderbot_web -i wrb_wait_dbs bash -c \ - "./wait-for-it.sh -t $TIMEOUT $service" - - hasTimeout=$? - - if [ "$hasTimeout" -ne 0 ]; then # when timeout occurs - echo "error: mongo database didn't start in time!" - exit 1 - else - echo "$service is up" - fi -done - -docker-compose up --build bot diff --git a/scripts/startDbs.sh b/scripts/startDbs.sh deleted file mode 100755 index f37b348..0000000 --- a/scripts/startDbs.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -cd .. -docker-compose down -docker-compose up -d mdb ngdb \ No newline at end of file