From 2d609fa6748706c5d43a9f310d31e159ca787e9c Mon Sep 17 00:00:00 2001 From: Dioni Zhong Date: Fri, 16 Jul 2021 12:02:41 +0100 Subject: [PATCH] docs: move docs in repo to gitbook (#1559) * docs: move docs in repo to gitbook --- README.md | 42 +++--- docs/FAQ.md | 34 ----- docs/README.md | 46 ------ docs/analytics/google.md | 19 --- docs/architecture/README.md | 35 ----- docs/architecture/game-creator/README.md | 7 - docs/architecture/games/README.md | 43 ------ docs/architecture/games/actions.md | 63 -------- docs/architecture/games/avatar.md | 30 ---- docs/architecture/games/conditions.md | 7 - docs/architecture/games/effects.md | 9 -- docs/architecture/games/game-runner.md | 29 ---- docs/architecture/games/generators.md | 88 ----------- docs/architecture/games/interactable.md | 20 --- docs/architecture/games/pickups.md | 31 ---- docs/architecture/games/simulation-runner.md | 24 --- docs/architecture/games/worker.md | 3 - docs/architecture/games/world-map.md | 59 -------- docs/architecture/overview.png | Bin 114302 -> 0 bytes docs/architecture/workers/README.md | 18 --- .../workers/avatar_worker_diagram.svg | 1 - docs/babylon/README.md | 50 ------- docs/common-issues.md | 60 -------- docs/deployment/README.md | 6 - docs/deployment/cusotm-metrics.md | 62 -------- docs/deployment/deployment-events.md | 29 ---- docs/deployment/grafana-persistence.md | 15 -- docs/deployment/monitoring.md | 141 ------------------ docs/deployment/nginx-setup.md | 46 ------ docs/deployment/prometheus4k8s.png | Bin 151171 -> 0 bytes docs/infrastructure/README.md | 5 - docs/life-cycle-of-a-code-change.md | 20 --- docs/testing/README.md | 6 - docs/testing/automatic-testing.md | 26 ---- docs/testing/test-plan.md | 62 -------- docs/usage.md | 122 --------------- game_frontend/README.md | 103 ------------- .../AIMMO-Logo-vertical-RGB.svg | 0 {docs/images => images}/kurono_game.png | Bin {docs/images => images}/kurono_logo_mark.svg | 0 .../images => images}/kurono_logo_simple.svg | 0 41 files changed, 21 insertions(+), 1340 deletions(-) delete mode 100644 docs/FAQ.md delete mode 100644 docs/README.md delete mode 100644 docs/analytics/google.md delete mode 100644 docs/architecture/README.md delete mode 100644 docs/architecture/game-creator/README.md delete mode 100644 docs/architecture/games/README.md delete mode 100644 docs/architecture/games/actions.md delete mode 100644 docs/architecture/games/avatar.md delete mode 100644 docs/architecture/games/conditions.md delete mode 100644 docs/architecture/games/effects.md delete mode 100644 docs/architecture/games/game-runner.md delete mode 100644 docs/architecture/games/generators.md delete mode 100644 docs/architecture/games/interactable.md delete mode 100644 docs/architecture/games/pickups.md delete mode 100644 docs/architecture/games/simulation-runner.md delete mode 100644 docs/architecture/games/worker.md delete mode 100644 docs/architecture/games/world-map.md delete mode 100644 docs/architecture/overview.png delete mode 100644 docs/architecture/workers/README.md delete mode 100644 docs/architecture/workers/avatar_worker_diagram.svg delete mode 100644 docs/babylon/README.md delete mode 100644 docs/common-issues.md delete mode 100644 docs/deployment/README.md delete mode 100644 docs/deployment/cusotm-metrics.md delete mode 100644 docs/deployment/deployment-events.md delete mode 100644 docs/deployment/grafana-persistence.md delete mode 100644 docs/deployment/monitoring.md delete mode 100644 docs/deployment/nginx-setup.md delete mode 100644 docs/deployment/prometheus4k8s.png delete mode 100644 docs/infrastructure/README.md delete mode 100644 docs/life-cycle-of-a-code-change.md delete mode 100644 docs/testing/README.md delete mode 100644 docs/testing/automatic-testing.md delete mode 100644 docs/testing/test-plan.md delete mode 100644 docs/usage.md delete mode 100644 game_frontend/README.md rename {docs/images => images}/AIMMO-Logo-vertical-RGB.svg (100%) rename {docs/images => images}/kurono_game.png (100%) rename {docs/images => images}/kurono_logo_mark.svg (100%) rename {docs/images => images}/kurono_logo_simple.svg (100%) diff --git a/README.md b/README.md index 4bd1b7c69..0a1521d51 100644 --- a/README.md +++ b/README.md @@ -1,35 +1,35 @@ -

- - Kurono Logo - -

+# Kurono (codename: aimmo) -

- Using intermediate Python, join your class on a time travelling adventure. Work together to complete challenges and unlock new time periods. -

- -[![Code Climate](https://codeclimate.com/github/ocadotechnology/aimmo/badges/gpa.svg)](https://codeclimate.com/github/ocadotechnology/aimmo) +[![Workflow Status](https://github.com/ocadotechnology/aimmo/actions/workflows/cicd.yml/badge.svg)](https://github.com/ocadotechnology/aimmo/actions/workflows/cicd.yml) [![codecov](https://codecov.io/gh/ocadotechnology/aimmo/branch/master/graph/badge.svg)](https://codecov.io/gh/ocadotechnology/aimmo) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) [![Zenhub Shield](https://camo.githubusercontent.com/96347b1f6d9b0f08194ba026de8b69bc27bb8f0d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5368697070696e675f6661737465725f776974682d5a656e4875622d3565363062612e7376673f7374796c653d666c61742d737175617265)](https://app.zenhub.com/workspace/o/ocadotechnology/codeforlife-deploy-appengine/boards?repos=96999382,39072690)

- Kurono Game + Kurono Game

-It is the year 3000 and the museum is in big trouble! The priceless artifacts are lost and scattered across timelines. Your team’s mission is to travel through time and bring them back into the museum. +[Code for Life](https://www.codeforlife.education/) has been developed by Ocado Technology as a **free, open-source** project to inspire the next generation of computer scientists and to help teachers deliver the computing curriculum. + +**Kurono** is a [Code for Life](https://www.codeforlife.education/) project, aimed at teaching students and keen adults programming with Python. The game is designed to be played in a class or a group setting, as it simulates a multiplayer online game. + +We are open to contributors from anywhere around the world. Please read ahead if you'd like to get involved. -## Quick Start -1. **Fork** the repo. -2. Take a look at our [usage guidelines](docs/usage.md) to see how to get started. +## To get started -## Documentation -Take a look at our [documentation table of contents](docs/README.md). +- [Developer Guide](https://docs.codeforlife.education/developer-guide) -## How to contribute! -__Want to help?__ You can read the [contributing guidelines][contrib-guidelines]. You can also contact us directly using this [contact form][c4l-contact-form] and we'll get in touch as soon as possible! Thanks a lot. +- [Good First Issues](https://github.com/ocadotechnology/aimmo/contribute) -[c4l-contact-form]: https://www.codeforlife.education/help/#contact -[contrib-guidelines]: https://github.com/ocadotechnology/aimmo/blob/master/CONTRIBUTING.md +- Setting up your work environment: [common setup](https://docs.codeforlife.education/git/common-setup) and [aimmo specific setup](https://docs.codeforlife.education/git/aimmo-setup) + +- [Testing](https://docs.codeforlife.education/git/testing) + +

+

+ + Kurono Logo + +

diff --git a/docs/FAQ.md b/docs/FAQ.md deleted file mode 100644 index 433876c49..000000000 --- a/docs/FAQ.md +++ /dev/null @@ -1,34 +0,0 @@ -[Documentation Table Of Contents](README.md) -# Frequently Asked Questions -- [What is Code For Life?](#what-is-code-for-life) -- [I have an issue with the project, who do I contact, what do I do?](#i-have-an-issue-with-the-project-who-do-i-contact-what-do-i-do) -- [I want to contribute... How?](#i-want-to-contribute-how) - ---- - -## What is Code For Life? -- Ocado Technology's FREE Code for Life initiative has been developed to inspire the next generation of computer scientists and to help teachers deliver the computing curriculum. -This repository hosts the source code of the [**Kurono game**](https://www.codeforlife.education/play/kurono/). Kurono is a follow-on from Rapid Router to teach computing to secondary-school age children. - -- It's ***FREE*** forever! - -- The other repos for Code For Life: - - the main portal (as well as registration, dashboards, materials...), [Code For Life Portal](https://github.com/ocadotechnology/codeforlife-portal) - - the first coding game of Code for Life for primary schools, [Rapid Router](https://github.com/ocadotechnology/rapid-router) - - the [deployment code for Google App Engine](https://github.com/ocadotechnology/codeforlife-deploy-appengine) - -## I have an issue with the project, who do I contact, what do I do? -The first step is to [**check the common/known issues**](common-issues.md) page to see if your issue is a common one and we know about -the solution. - -Next step is to make sure you have set up the project correctly as per our instructions. - -Finally, you can contact the contributors and receive help by opening an issue in the project and tagging it -appropriately (perhaps `bug` or `help-wanted`). - -## I want to contribute... How? - -First read our [contributing guidelines](https://github.com/ocadotechnology/codeforlife-portal/blob/master/CONTRIBUTING.md), thanks! - -Look for issues tagged with `help-wanted` to find some good starter issues you could start working on. If you need -to contact us, look at the contact details. Thank you! diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index b62a35d91..000000000 --- a/docs/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# Table Of Contents - ---- - -## Getting started -The first required steps to get familiar with the project and run it locally. -- [FAQ](FAQ.md) - Frequently asked questions with answers. -- [Usage](usage.md) - How to get the project up and running. -- [Common Issues](common-issues.md) - Common issues and their solutions. - -## Architecture - -Architecture of the project. How things are structured, what components exist, etc. -![](architecture/uml.png?raw=true) -- [Architecture](architecture/README.md) - - [Game Creator](architecture/game-creator/README.md) - - [Games](architecture/games/README.md) - - [Workers](architecture/workers/README.md) - - [UI](architecture/ui/README.md) - -### Babylon - -Babylon side of the project. Game engine and structure. -- [Babylon](babylon/README.md) - - -### Infrastucture - -We describe the technologies that are underlying to the project and support it -- [Infrastructure](infrastructure/README.md) - -### Testing - -Levels of testing within Kurono. - -- [Testing](testing/README.md) - - [Manual Test Plan](testing/test-plan.md) - - [Automatic Test Plan](testing/automatic-testing.md) - -### Deployment - -The process of continuous integration and deployment of our project onto our cloud. - -- [Deployment](deployment/README.md) - - [Sequence of Deployment Events](deployment/deployment-events.md) - - [Admin NGINX & SSL setup on GCP](deployment/nginx-setup.md) diff --git a/docs/analytics/google.md b/docs/analytics/google.md deleted file mode 100644 index 9c0daf3c3..000000000 --- a/docs/analytics/google.md +++ /dev/null @@ -1,19 +0,0 @@ -# Analytics 2: Eletric Googaloo - -This document will show you how to create new google analytics events for Kurono. - -Google analytics events in React+Redux are done through the use of Epics. Epics are functions which take a stream of actions and return another stream of actions. - -This means that if you're looking to add new analytics event you will need to find what action relates to what you are measuring. Below is an example used to measure how often the "Run code" button is pressed in the code editor. - -```Javascript -const postCodeAnalyticsEpic = action$ => - action$.pipe( - ofType(types.POST_CODE_REQUEST), - mapTo(analyticActions.sendAnalyticsEvent('Kurono', 'Click', 'Run Code')) - ) -``` - -Here, we can see that the function `postCodeAnalyticsEpic` takes in an action, checks that the action is the one we want, and if it is, maps the action to our analytics event action. Note, we must include `ofType(types.POST_CODE_REQUEST)` as in Redux actions are passed through to all of the epics, so we need to make sure we're only dealing with the ones we're interested in. - -Finally, there are a number of arguments passed into the `sendAnalyticsEvent()` action. These correspond to what the action will appear as on the Google analytics dashboard, so discussing with whoever relies on this the most (Most likely the PO [Product Owner]) to agree on how to catagorise the event would be advisable. diff --git a/docs/architecture/README.md b/docs/architecture/README.md deleted file mode 100644 index 1446cd2df..000000000 --- a/docs/architecture/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# Architecture - -This section describes the whole game architecture and how things are structured. Kurono consists of five main components, split into their own directories. - -## Overview - -![aimmo architecture overview](overview.png) - -## Components - -[The Django API (`aimmo` directory)](ui/README.md) - -A Django app used to provide an api for game and code management. - -[Game Frontend (`game_frontend` directory)](../../game_frontend/README.md) - -A React app using [Babylon](https://www.babylonjs.com/) and [Pyodide](https://github.com/iodide-project/pyodide) to present the game state to the player, run their code and allow them to edit it. - -[Games (`aimmo-game` directory)](games/README.md) - -Holds and updates the game state (one per game). - -[Game Creator (`aimmo-game-creator` directory)](game-creator/README.md) - -Responsible for creating games (one globally). - -[Workers (`aimmo-game-worker` directory)](workers/README.md) - -Contains the avatar worker api used by the AvatarWorker in the frontend. - -## Terminology - -**Avatar:** a player's in-game representation. A player can have up to one per game. - -**Player:** an individual with an account. diff --git a/docs/architecture/game-creator/README.md b/docs/architecture/game-creator/README.md deleted file mode 100644 index 01d3db130..000000000 --- a/docs/architecture/game-creator/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# Game Creator (`aimmo-game-creator` directory) - ---- - -The game creator consists only of a few classes. The service runs a worker manager daemon which periodically updates the games. The list of the games is exposed through the game API. - -The data is managed by a thread-safe class called WorkerManagerData. The synchronization is done using a lock over the set of the games. The set of games will change during each periodic update. The games that are no more present in the set of games exposed by the API are getting removed. The updates are made in parallel by multiple threads, thus the need for synchronization. diff --git a/docs/architecture/games/README.md b/docs/architecture/games/README.md deleted file mode 100644 index accd8d006..000000000 --- a/docs/architecture/games/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# Games (`aimmo-game` directory) - -## Game Components - -- [Game Runner](game-runner.md) -- [Simulation Runner](simulation-runner.md) -- [Map Generator](generators.md) -- [World Map](world-map.md) -- [Avatar](avatar.md) -- [Actions](actions.md) -- [Pickups](pickups.md) -- [Interactables](interactable.md) - -## In Short - -- Maintains game state -- Simulates environment events -- Collects and runs player actions - -## General Overview - -The game (aimmo-game) is responsible for maintaining the game state, -the worker avatars for the game, fetching the actions from -each worker, and applying those actions, as well as fetching -game metadata from the Django API. - -The game interacts with the rest of the components as follows: - -- It is created by the game creator. -- Collects actions (see [turn_collector](../../../aimmo-game/turn_collector.py)) computed by the player's client (see [workers](../workers/README.md)) -- Send game states once per turn to the clients - -Once per turn it will: - -- Inform all workers of the current game state and gets their - actions. -- Perform conflict resolution on these actions and then apply - them. -- Update the world with any other changes to produce the next game state. - -Files for the game are stored in `aimmo-game`. - -[game-api]: https://github.com/ocadotechnology/aimmo/blob/master/aimmo-game/service.py diff --git a/docs/architecture/games/actions.md b/docs/architecture/games/actions.md deleted file mode 100644 index b97e2573e..000000000 --- a/docs/architecture/games/actions.md +++ /dev/null @@ -1,63 +0,0 @@ -# Actions - ---- - -An action is a pair (avatar, location). The action is registered onto the WorldMap by being appended to a cell. - -The action is processed by calling the apply function only if: -- the action is legal (see below) -- it's not rejected - -The exposed interface is: - -- **`apply`** - - has to return true if event application succeeded - - attaches an event to the avatar -- **`is_legal`** - - returns if an action is legal from the point of view of the map - - the action gets applied or rejected accordingly -- **`reject`** - - attaches a (failed) event to the avatar - -Each of the 3 elements of the interface are implemented differently by different types of actions. - -The current types of actions as: -- **`WaitAction`** - - wait is always legal - - no actions get attached to the avatar -- **`MoveAction`** - - *`is_legal`* - - the responsibility is passed to world_map - - *`apply`* - - adds a move event to the avatar - - change the avatar's world view - - updates the map accordingly - - *`reject`* - - the failed event is added to the avatar - - *overrides the processing of the action* - - the action is chained in the action list of a cell - - see World Map and Turn Manager for details -- **`AttackAction`** - - *`is_legal`* - * attacking is legal is the avatar is attackable - * *`attack`* - * attaches the event to the attacker avatar - * attaches the event to the attacked avatar - * if the attacked avatar dies it is respawned - - - -### Legality of an Action -A `WaitAction` is always legal. A `MoveAction` is legal if and only if: - - The square the avatar attempts to move to is on the map - - The square the avatar attempts to move to is not occupied (by e.g. another avatar or a wall) - - Another avatar is not attempting to move to the same square. - - This means that, for example, given the following situation: -

> _ <

- Where two avatars are trying to move horrizantally into the following square, we will get the following result: -

x _ x

gi - Where neither of the avatars have moved. - - This detection of collisions is done by registering actions with the cells where the avatars attempt to move and the `detect_cycles` method in the `MoveAction` class. - \ No newline at end of file diff --git a/docs/architecture/games/avatar.md b/docs/architecture/games/avatar.md deleted file mode 100644 index 6f8137fd6..000000000 --- a/docs/architecture/games/avatar.md +++ /dev/null @@ -1,30 +0,0 @@ -# Avatar - ---- - -This represents an avatar as part of the simulation. - -The avatar functionality is separated in several classes: - -- `AvatarWrapper` - the central avatar functionality, including the simulation properties such as health, score and so on -- `AvatarView` - a personalized view of the worlds for each avatar -- `AvatarAppearance` - a data class for customising the avatar's appearance -- `AvatarManager` - a structure that maintains a mapping from player_id to `AvatarWrapper`s - -### `AvatarWrapper` -The avatar wrapper represents the application's view of a character. -The main functionality is: - -- decide action - given a serialised representation of an action, return a Python action object. -- clear action -- update effects - apply effects that come from getting a pickup -- add event - attaches an event to the event setting -- not yet used - -*This functionality may not be fully implemented:* - -- die - dies and re-spawns at new location -- damage - take damage - - -### `AvatarManager` -This is responsible for adding and removing avatars and managing the list of avatars that the main game simulation has a access to. It is kept in sync with the `Worker`s in [`WorkerManager`](worker-manager.md) by [`GameRunner`](game-runner.md). diff --git a/docs/architecture/games/conditions.md b/docs/architecture/games/conditions.md deleted file mode 100644 index 39a6993ef..000000000 --- a/docs/architecture/games/conditions.md +++ /dev/null @@ -1,7 +0,0 @@ -# Conditions - -Conditions are a component of an `Interactable`. - -A condition can be thought of as an function, any and all conditions must be something that can evaluate to either `True` or `False`. Each turn all of an Interactable's conditions are evaluated to see if its effects should trigger. - -Conditions will typically need some kind of data to check, conditions currently can only use information from the `WorldMap` for their checks. diff --git a/docs/architecture/games/effects.md b/docs/architecture/games/effects.md deleted file mode 100644 index 346dacd38..000000000 --- a/docs/architecture/games/effects.md +++ /dev/null @@ -1,9 +0,0 @@ -# Effects - -Effects are a component of an `Interactable`. - -An effect should have at least one target. - -When an Interactable's conditions are met, the targets are gathered, and the effects are then given to them. Targets for an effect must have a `effect` attribute with which to store its active effects. - -An effect can last 1 or many turns, and can impart a temporary or permanent change to its target, for example: restoring some of an Avatar's health, or giving an avatar a temporary damage boost. diff --git a/docs/architecture/games/game-runner.md b/docs/architecture/games/game-runner.md deleted file mode 100644 index 441e4d771..000000000 --- a/docs/architecture/games/game-runner.md +++ /dev/null @@ -1,29 +0,0 @@ -# Game Runner - ---- -The code can be found [here](game runner update). - -The `GameRunner` class is responsible for initialising the -games' components in order to spawn a new game. It holds a -reference to these objects and has some getter functions -defined in order to spawn or delete new users. - -More importantly, it contains the `update()` function which -runs in a loop at `WORKER_UPDATE_SLEEP_TIME` intervals. This -constantly uses the embedded communicator object to get -the game metadata from our django API url. - -Once this information comes in it manages the changes in -users that needs to happen (ie. finds users that need to -be added or deleted). It then delegates the responsibility -to the worker manager which handles the worker pods & their -code. Finally the game state holds all new avatars for these -users. - -The `GameRunner` should be the **only** class which has -interactions with both *simulation logic* (avatar wrappers, -game map etc) and *worker logic* (`WorkerManager`). This is -an important decoupling. - -[game runner update]: https://github.com/ocadotechnology/aimmo/blob/d61c3f575f012fc6f99da9a99a4e5b3ac461d65c/aimmo-game/simulation/game_runner.py#L30 - diff --git a/docs/architecture/games/generators.md b/docs/architecture/games/generators.md deleted file mode 100644 index 2ebd89772..000000000 --- a/docs/architecture/games/generators.md +++ /dev/null @@ -1,88 +0,0 @@ -# Map Generators - ---- - -The generators are map creation services. The Django application is exposed -to different map creation service classes. There is a map generation service -as part of the Django application which uses the default map generator: the -class Main in the map_generator file. - -A map generator is a class that inherits from BaseGenerator and has to -implement the `get_map` method. - -#### The Main Map Generator - -The main map is supposed to be used for the generation of big worlds. This -should be the only generator used at this time. The `Level1` generator and -`BaseLevelGenerator` are legacy classes which eventually will be removed. -The whole map is randomly generated, but the generation is regulated by the -[World Map](world-map.md) settings. - -Obstacles are filled according to the obstacle ratio. Once an obstacle is -added we ensure that each habitable cell can reach each other, thus the -map will be connected and each generated avatar can reach others. - -#### Implementation details - -The `get_map` method builds the map gradually adding random obstacles -until the obstacle ratio is reached.(see [World Map](world-map.md) settings) - -To ensure that the map is connected, we check that all the adjacent -habitable cells can reach all the other cells. To check that neighbours -reach each other efficiently we use A* for path -finding. - -#### Serialisation to JSON -We store our game information in `JSON` for the backend to be able to -deserialize it. The below is a _**proposed**_ format which we are working -towards. - -```Javascript -{ - "id": 1, - // each level is set in one era only - "era": "future" - "terrain": { - "width": 10, - "height": 10, - } - // we can figure out minX, minY, maxX, maxY and origin from these two corners. - "south_west_corner": { - "x": -2, - "y": -2, - }, - "north_east_corner": { - "x": 2, - "y": 2, - }, - // the spawn location of the player - "spawn_location": { - "x": 0, - "y": 1, - }, - "obstacles": [ - { - // the location here is the bottom left cell of the obstacle - "location": { - "x": 0, - "y": 1, - }, - "width": 2, - "height": 1, - "type": "van", - "orientation": "east", - } - ], - "pickups": [ - { - "type": "damage", - "value": 5, - "location": { - "x": 0, - "y": 1, - } - } - ] -} -``` - diff --git a/docs/architecture/games/interactable.md b/docs/architecture/games/interactable.md deleted file mode 100644 index 8f2c2ebe2..000000000 --- a/docs/architecture/games/interactable.md +++ /dev/null @@ -1,20 +0,0 @@ -# Interactable - -An `Interactable` is a dynamic object that exists in the `WorldMap`. - -All Interactables follow the same basic logic: -CONDITIONS → EFFECTS → TARGETS - -This is to say that an `Interactable` has 1 or more [conditions](conditions.md) it's checking for. Once the conditions are met, it will apply any [effects](effects.md) it has to 1 or more specified targets. Currently the only compatible target is an avatar. - -## Implementation - -When implementing a new `Interactable` there is a number of criteria that need to be met: - -1. Any and all conditions should be specified in the `__init__()` method. - -2. Any and all effects should be specified in the `__init__()` method. - -3. The `get_targets()` method should be implemented to return a list of targets. Each effect will happen to **EVERY** target in the list. - -4. It should implement a `__repr__()` and `serialize()` method for informative purposes. diff --git a/docs/architecture/games/pickups.md b/docs/architecture/games/pickups.md deleted file mode 100644 index 0c17ff4da..000000000 --- a/docs/architecture/games/pickups.md +++ /dev/null @@ -1,31 +0,0 @@ -# Pickups - ---- - -A pickup is an object that is automatically grabbed by avatars in the same cell as the pickup. The pickup gets destroyed and generates an effect it is grabbed. An effect is an object that encapsulates a function that gets applied to an avatar on each turn. (see [Simulation Runner](simulation-runner.md)) - -### Pickups - -A Pickup is attached to a cell. Getting a pickup should attach an effect to an avatar. Once the pickup is attached to the avatar, it gets deleted. - -The pickup references the cell and the cell references the pickup. The delete function is called once the pickup gets applied, removing both references. The Pickup class is an abstract one, each Pickup concrete class having to implement an `_apply` function. - -The different types of pickup supported are: -* Health Pickup - * restores health immediately, no **Effect** is used -* Invulnerability Pickup - * an **effect-based pickup** - * applies an InvulnerabilityPickupEffect -* Damage Pickup - * an **effect-based pickup** - * applies a DamagePickupEffect - -### Effects - -An Effect is a class that gets applied once per turn. The effect interface consists of the function `on_turn` which gets applied each turn. - -A Timed Effect is an Effect that gets removed after a number of turns. The Effect interface is extended with the `remove` function, that only removes the effect by default - this is overrided by different effects. - -There are 2 concrete effects implemented at the moment: -* InvulnerabilityPickupEffect - increases the resistance of the avatar by a big offset -* DamagePickupEffect - adds a damage boosts when initialized, removes the damage boost at effect removal diff --git a/docs/architecture/games/simulation-runner.md b/docs/architecture/games/simulation-runner.md deleted file mode 100644 index a11bbbc8a..000000000 --- a/docs/architecture/games/simulation-runner.md +++ /dev/null @@ -1,24 +0,0 @@ -# Simulation Runner - -The [`SimulationRunner`](simulation-runner-file) is responsible -for running a turn in the simulation. - -The `run_turn` method is called from `GameRunner`, and it -runs as follows: - -- Get the [`AvatarWrapper`'s](avatar-wrapper-file) to - deserialize and register their actions. -- Update the environment using the [World Map](world-map-doc) -- Check if the level is complete (this is a somewhat deprecated feature) - -The alternatives for pooling each avatar for its decisions are: - -- SequentialTurnManager (used locally for testing) - get and - apply each avatar's action in turn -- ConcurrentTurnManager - concurrently get the intended - actions from all avatars and register them on the world map; - then apply actions in order of priority - -[simulation-runner-file]: /aimmo-game/simulation/simulation_runner.py -[avatar-wrapper-file]: /aimmo-game/simulation/avatar/avatar_wrapper.py -[world-map-doc]: world-map.md diff --git a/docs/architecture/games/worker.md b/docs/architecture/games/worker.md deleted file mode 100644 index 508472372..000000000 --- a/docs/architecture/games/worker.md +++ /dev/null @@ -1,3 +0,0 @@ -# Worker - -A worker is the part of the game client frontend that computes the user's `next_turn` for that turn. We use [pyodide](https://github.com/iodide-project/pyodide), a library that allows us to run Python in the browser, to do this. diff --git a/docs/architecture/games/world-map.md b/docs/architecture/games/world-map.md deleted file mode 100644 index a1085165f..000000000 --- a/docs/architecture/games/world-map.md +++ /dev/null @@ -1,59 +0,0 @@ -# World Map - -The World Map is the central component of the simulation. The class itself consists of a grid and a set of JSON settings. The grid consists of a dictionary of type . - -### Cells - -A cell has the following components: - -- location - (x, y) pairs that can be added together, serialized, compared, etc. -- avatars - see [Game Objects](game-objects) for more details -- pickup - see [Game Objects](game-objects) for more details -- cell content - the cell content can either be a score cell, an obstacle or a plain floor cell -- actions - an array where the intended actions of different avatars are registered and, afterwards, applied - -### World Map basic functionality - -World Map has a lot of misc functionality, as multiple other objects communicate with it and need a simple API. - -Cell specific functionality: - -- get_cell -- all_cells -- score_cells -- pickup_cells - -Map dimension functionality: - -- is_on_map -- max_x -- max_y -- min_x -- min_y -- num_cols -- num_rows -- num_cells - -### The Update Cycle - -The most important responsibility of the world map class is the `self.update` after the intended character moves have been recorded by the Simulation Runner. The function `update` is called by the [Simulation Runner](simulation-runner). - -The update cycle is as follows: - -- update avatars - - apply score: each avatar received a score - - apply pickups: each avatar grabs a pickup if present -- update map: - - expand the map so that it fits the size of the avatars if more avatars arrive - - reset score locations: new score locations are generated - - add pickups: new pickups are generated - -All the map updates are regulated using the settings of a map. Some useful settings fields are: - -- TARGET_NUM_CELLS_PER_AVATAR - regulates the size of the map by number of avatars -- TARGET_NUM_SCORE_LOCATIONS_PER_AVATAR - used to regulate the number of score locations; the new score locations are generated randomly and added to the map -- SCORE_DESPAWN_CHANCE - another parameter to regulate the score cells generation; the game is more dynamic as some score cells are getting removed each turn and new ones are generated, giving the player the impressing of score cells moving around -- TARGET_NUM_PICKUPS_PER_AVATAR - regulate the number of pickups similarly to how the number of score locations are regulated -- PICKUP_SPAWN_CHANCE - a regulation parameter similar to SCORE_DESPAWN_CHANCE - -[simulation-runner]: simulation-runner.md diff --git a/docs/architecture/overview.png b/docs/architecture/overview.png deleted file mode 100644 index a378db442fde7f8457bfc9d119616c3e1ffefa75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114302 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

|3-NB8Gm|t%-U4UIQdti)tV+!Wp++>~# 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 UyY&70TW~Ag)78&qol`;+0PdjlOaK4? diff --git a/docs/architecture/workers/README.md b/docs/architecture/workers/README.md deleted file mode 100644 index f4e5da84c..000000000 --- a/docs/architecture/workers/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# Workers - -The game worker is part of the [game_frontend](../../../game_frontend/README.md). Its responsibility is to run the player's code to get an action with any logs for a particular turn in the game. - -The code for the worker is split up in two places: - -- The [aimmo-game-worker](../../../aimmo-game-worker/) directory which holds the worker api source code for the player. -- The corresponding [Pyodide runner](../../../game_frontend/src/pyodide) which uses the worker api to run the player's code. - -## How the Avatar Worker works - -![How the Avatar Worker works diagram](avatar_worker_diagram.svg) - -The worker receives a game state of the current turn. It converts this into a representation of the world map and the avatar state (the classes for these can be found in the worker api package). These are then passed to the player's `next_turn` function. We collect the action returned from that function call along with any logs produced (via print statements or errors for example) to produce a `ComputedTurnResult` for the next turn. - -### Responding to player's code changes - -When the player changes the code for their avatar, we redefine the `next_turn` function in pyodide and then recompute their `next_turn` action with the new code. In the case of syntax errors with their code, we don't compute their `next_turn` and return a `WaitAction` with the errors they had in the logs. diff --git a/docs/architecture/workers/avatar_worker_diagram.svg b/docs/architecture/workers/avatar_worker_diagram.svg deleted file mode 100644 index a48bd2dc1..000000000 --- a/docs/architecture/workers/avatar_worker_diagram.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/babylon/README.md b/docs/babylon/README.md deleted file mode 100644 index 8bba1c54f..000000000 --- a/docs/babylon/README.md +++ /dev/null @@ -1,50 +0,0 @@ -# Babylon - -This section describes the way Babylon is used as the game engine for Kurono. - ---- - -## Structure - -Here we will go into some detail on how Babylon is structured within our project, and how we've chosen to organise the files. - -First, we will look at the file structure for the babylon part of the game page: -``` -babylon -│ -├── assetPacks -│   ├── assetPack.ts -│   ├── future.ts -│   ├── ... -│   └── getAssetPackForEra.ts -| -├── entities -│   ├── avatarManager.test.ts -│   ├── avatarManager.ts -│   ├── ... -│   └── index.ts -│ -├── environment -│   ├── index.ts -│   ├── light.test.ts -│   ├── light.ts -│   ├── ... -│   ├── environment.ts -│   └── environmentManager.ts -│ -├── animation.ts -├── diff.ts -├── gameEngine.ts -├── ... -├── interfaces.ts -└── orientation.ts -``` -`interfaces.ts` contains the typing (interfaces) for objects specific to our project, such as `GameNode`. - -We split the remaining elements of the game into two folders: -* **entities**: These populate the game world, and cover elements such as obstacles, avatars, and interactables. -* **environment**: The elements of the game that make up the world, such as camera, light and terrain, as well as the renderer. - -The files inside **assetPacks** handle the loading and processing different 2D and 3D assets required for each different level, or *era*, of the game. *NOTE: the way this is currently written, each era has one only type of obstacle. However, as pointed out in the corresponding files, there are different textures and models ready to be loaded when the randomising functionality is implemented.* - -All classes in these folders implement the `GameNode` interface. Entities also implement the `DiffHandling` interface. diff --git a/docs/common-issues.md b/docs/common-issues.md deleted file mode 100644 index 3276039cd..000000000 --- a/docs/common-issues.md +++ /dev/null @@ -1,60 +0,0 @@ -# Common / Known Issues -- [When running the game I get `no module named google.auth`](#when-running-the-game-i-get-`no-module-named-google.auth`) -- [When deploying I get `error: Error -5 while decompressing data (...)`](#when-deploying-i-get-error-error--5-while-decompressing-data-) -- [When running the game I get `ImportError: No module named django.conf`](#when-running-the-game-i-get-importerror-no-module-named-djangoconf) -- [On Mac, when running the server with a fresh database, I get `django.db.utils.IntegrityError: The row in table ... with primary key '1' has an invalid foreign key: ... contains a value '1' that does not have a corresponding value in ...`](#on-mac-when-running-the-server-with-a-fresh-database-i-get-djangodbutilsintegrityerror-the-row-in-table--with-primary-key-1-has-an-invalid-foreign-key--contains-a-value-1-that-does-not-have-a-corresponding-value-in-) ---- - -## When running the game I get `no module named google.auth` - -If you get an error when running the command `./run.py` or `./run.py -k` locally that states, somewhere in the -traceback, `no module named google.auth`; then rerun the command again and the dependency should be -detected. This is a [logged issue](https://github.com/ocadotechnology/aimmo/issues/449). - -## When deploying I get `error: Error -5 while decompressing data (...)` - -**This issue can only be solved by a repository admin.** - -When deploying with semaphoreCI, the cache may be old and corrupt one of the packages being installed by `pip`. - -The error you may get may look like this `error: Error -5 while decompressing data: incomplete or truncated stream`. - -You need to `ssh` into the appropriate server and delete the cache directory. Another solution is to `pip install` with the `--no-cache-dir` flag but we do not recommend this. - -## When running the game I get `ImportError: No module named django.conf` - -Run a pip install command to install django before running the project. Django should then resolve all the other dependencies specified in the setup file. To do this run: `pip install django=={version}`. You can find `version` from the `setup.py` file at the time. - - -## On Mac, when running the server with a fresh database, I get `django.db.utils.IntegrityError: The row in table '...' with primary key '1' has an invalid foreign key: ... contains a value '1' that does not have a corresponding value in ...` - -This error is potentially caused by a wrong or incompatible sqlite3 version. You can check the sqlite3 version from a python shell with: - -``` -import sqlite3 -sqlite3.sqlite_version. -``` - -You need to install/update sqlite3 with brew: `brew install sqlite3`. Then follow the instructions in `brew info sqlite3` before installing a python version with `pyenv`. - -``` -If you need to have sqlite first in your PATH, run: - echo 'export PATH="/usr/local/opt/sqlite/bin:$PATH"' >> ~/.zshrc - -For compilers to find sqlite you may need to set: - export LDFLAGS="-L/usr/local/opt/sqlite/lib" - export CPPFLAGS="-I/usr/local/opt/sqlite/include" -``` - -If you already installed a python version and a virtual environment, you need to clear them up: -``` -pyenv versions -pyenv uninstall -pipenv --rm -``` - -Then reinstall pyenv with the right sqlite3 version (make sure `LDFLAGS` and `CPPFLAGS` are set as above): -``` -pyenv install -pipenv install --dev -``` diff --git a/docs/deployment/README.md b/docs/deployment/README.md deleted file mode 100644 index 489759627..000000000 --- a/docs/deployment/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Deployment - ---- -- [Sequence of deployment events](deployment-events.md) -- [One time **admin** nginx & SSL setup](nginx-setup.md) -- [Monitoring the project](monitoring.md) diff --git a/docs/deployment/cusotm-metrics.md b/docs/deployment/cusotm-metrics.md deleted file mode 100644 index 618622121..000000000 --- a/docs/deployment/cusotm-metrics.md +++ /dev/null @@ -1,62 +0,0 @@ -# Custom Metrics - -This document outlines how to create custom metrics on our k8s clusters. - ---- - -There are a few things to be aware of before creating a custom metric: - -* For any metric you create, you must have a service that can expose the metric. -* For any services exposing metrics, there must be a `ServiceMonitor` that targets this service. -* Metrics must be unique (I know this seems obvious but it can be a source of some ambiguous errors). - -Okay, now we can look at creating our metric. - ---- - -1. Think carefully about what it is you want to measure, and what the most appropriate way to measure it would be. Metrics can be one of the 4 types outlined on the prometheus website [here](https://prometheus.io/docs/concepts/metric_types/). - -2. Give your metric a suitable name. Naming conventions for metrics can be found [here](https://prometheus.io/docs/practices/naming/). Don't worry too much about it sticking strictly to the convention, just as long as it's clear what you're measuring that is usually enough. - -3. Now it's time to create your metric. When implementing things we want to keep the metrics as unintrusive as possible from existing code, so when possible you should follow the example in `aimmo-game`. - - * Below is an example of a custom metric from the `metrics.py` file. The first snippet contains the metric itself, while the second snippet contains the function with how we want to use that metric. - * This approach allows us to keep all our metrics in a single place so they're easy to find. Then you can simply import your metric where needed for use. - - ```python - CUSTOM_BUCKET = [x/10 for x in range(10, 61)] - GAME_TURN = Histogram('game_turn_time', 'Measures the time taken for the game to complete a single turn in seconds', - buckets=CUSTOM_BUCKET) - ``` - - ```python - def GAME_TURN_TIME(): - """ Used for measuring the time it games for the game to complete a turn. - This is measured using the Histogram datatype. """ - return GAME_TURN.time() - ``` - - * If you're creating a metric not in aimmo game or game creator, you will need to create a service for the pod you're working with. Then add the exporter so a service monitor can find them. Follow the [Prometheus client](https://github.com/prometheus/client_python#exporting) section for exporting if this is needed (aimmo-game should already have this present). - -4. Now you should have a metric of your own, being exported to `/metrics` by default. You can check this by running the project locally in docker mode and going to that endpoint for the pod(s) you're interested in, if all is well you'll be greeted by a wall of text and numbers (this is normal). - -5. Last step is the `ServiceMonitor`. Below is the config for the service monitor we use for the games. - - ```yaml - apiVersion: monitoring.coreos.com/v1 - kind: ServiceMonitor - metadata: - name: aimmo-game - namespace: default - spec: - endpoints: - - targetPort: 5000 - interval: 15s - selector: - matchLabels: - app: aimmo-game - ``` - * Service monitors only have two required fields in their spec: `endpoints` & `selector`. These fields specify how to find your service(s), and what to look for once they've found them. So in this example above we can see in the `endpoints` section we're looking for all services with a target port of 5000, which all of our games have. Then, just to make sure we are definitely getting the games, we specify that we are looking for services with a label `app`, that has the value `aimmo-game`. There are many other options and ways to configure your service monitor but the above example is sufficient for most basic use cases. - * Give your service monitor a suitable name so it is easy to find if you need to create a new one (games already have a service monitor). - -6. You should now be able to see your custom metric in the Prometheus web UI. If not make sure your service monitor is configured correctly on the cluster and that you're custom metric is functioning properly. diff --git a/docs/deployment/deployment-events.md b/docs/deployment/deployment-events.md deleted file mode 100644 index 05b69e4de..000000000 --- a/docs/deployment/deployment-events.md +++ /dev/null @@ -1,29 +0,0 @@ -# Deployment Events - -**_We have moved to using Github actions for our CI. This sections needs updating._** - ---- - -We use Travis for contiguous integration. Travis CI is the first step in our integration pipeline. Each time a push is made Travis runs all our tests. We are currently in the process of migrating our coverage reports from [coveralls.io](https://coveralls.io/) to [codecov.io](https://codecov.io/). - -Our package Django app `aimmo` is deployed to [Pypi](https://pypi.python.org/pypi/aimmo) and we use [Versioneer](https://github.com/warner/python-versioneer) for package versioning. - -The rest of the components are Dockerised. Travis CI automatically recognises the **Dockerfiles** inside of each of the modules and pushes the newly created images to the **Docker Hub Registry**. Each of the components are then pulled automatically by the Google Cloud Container Engine. - -After all the Travis processes are finished, a curl request is made to SemaphoreCI. SemaphoreCI is responsible for orchestrating the deployment processes for all the Code For Life repositories. The Django application `aimmo` is installed directly from Pypi together with all the other modules. Due to the modularity of Django, the aimmo app can be just plugged inside the bigger Django project. _Currently, the pulled version in production will be the latest stable release._ - -The application is then deployed to the Google Cloud. This finishes our build. - -Once the application is deployed to the Google Cloud, it needs to find the other services. The discovery of the game services provided is done using a hook that can be found in [this repository](https://github.com/ocadotechnology/codeforlife-deploy-appengine). - -```python -AIMMO_GAME_SERVER_LOCATION_FUNCTION = lambda game: ('http://staging.aimmo.codeforlife.education', "/game/%s/socket.io" % game) -``` - -# Deploying to production - -Every time a new push is made to the development branch, the deployment process detailed above runs. This updates the `aimmo` project in our staging environment. - -To deploy to production, a pull request needs to be made from development into master. After the pull request is successfully reviewed and merged, the deployment process will run once more, with the small difference that the build tag will indicate that it is now a stable release, instead of a beta build. - -Monitoring the deployment process at this point is as important as always, if not more. Once the tests on Travis have passed, the Pypi package has been deployed and the Docker images have been built, the new version can then be deployed onto production from Semaphore CI. It is important to remember that this will also deploy the latest changes from Rapid Router and the Portal onto production. diff --git a/docs/deployment/grafana-persistence.md b/docs/deployment/grafana-persistence.md deleted file mode 100644 index e2fc267de..000000000 --- a/docs/deployment/grafana-persistence.md +++ /dev/null @@ -1,15 +0,0 @@ -# Grafana Persistence - -Here we will talk about how to connect our instances of Grafana to a database on Gcloud to ensure that data such as logins, permissions, and dashboards persist if the pod stops or is restarted for whatever reason. - -## Setup - -1. First, we need a database that Grafana will link to. To do this go to the [Google Cloud Console](https://console.cloud.google.com/home/dashboard?project=decent-digit-629) and in the menu go into the SQL section. - -2. Look for an instance named `aimmo-monitoring`, if this does not exist for whatever reason, one will need to be created by following the steps after clicking the `create instance` button (you can create either a MySQL or PostgreSQL instance, for simplicity we recommend choosing PostgreSQL). - -3. Now that you have an instance, go into it, then find the databases tab. You need 1 database per instance of Grafana (so one per cluster), the names of these databases are used later by the Grafana deployment so they are important. Recommended names are: `aimmo_monitoring_dev`, `aimmo_monitoring_staging`, `aimmo_monitoring_default`. - -4. You should now have a database for the cluster you're working with. Next, you need a user, there should already be a user called `grafana` that you can use, if not click `create user` and go through the steps there. You need to make sure the user will have access to the instance you created if you had to create a new one. - -5. Next, you should see 2 secrets on the cluster, one contains service account info, and the other has login details for Grafana. These are used in the `grafana-deployment.yaml`. If you need to recreate these secrects for whatever reason make sure the correct data is passed into this yaml. [Here](https://github.com/GoogleCloudPlatform/kubernetes-engine-samples/blob/master/cloudsql/postgres_deployment.yaml) is an example deployment which makes a good reference for this step. diff --git a/docs/deployment/monitoring.md b/docs/deployment/monitoring.md deleted file mode 100644 index c0b520581..000000000 --- a/docs/deployment/monitoring.md +++ /dev/null @@ -1,141 +0,0 @@ -# Monitoring - -This document outlines the process we use to collect metrics from our clusters on Google Cloud Engine and how to restart the relevant pods in the event they break in some way. - -*Note: the monitoring setup is a one time event that should only be done again in the event of failure or breakage* - -## Monitoring with Prometheus - ---- - -Everything on our cluster is monitored via [Prometheus](https://prometheus.io/), and more specifically the [kube-prometheus](https://github.com/coreos/prometheus-operator/tree/master/contrib/kube-prometheus) setup used for kubernetes clusters. - -### Prometheus workflow - -Here is the official workflow for [Prometheus](https://prometheus.io/): ![Prometheus workflow & relationship diagram](prometheus4k8s.png) *[image source](https://itnext.io/kubernetes-monitoring-with-prometheus-in-15-minutes-8e54d1de2e13)* - -In the above picture there are a number of different components. In short, [Prometheus](https://prometheus.io/) uses service monitors to scrape metrics from all services on the cluster and holds them for a set amount of time. The operator is built on a framework used to package and deploy applications to kubernetes clusters, more information on operators can be found [here](https://coreos.com/operators/), but it's not required to understand how [Prometheus](https://prometheus.io/) interacts with the cluster. - -This gives us all we need to collect data and store it, but not a good way of making use of any of that data. That is handled via various Data vizualisation tools. - -### Data Visualisation - -There are a number of ways to view the data [Prometheus](https://prometheus.io/) collects, the ones we make use of are: the Prometheus web UI, and [Grafana](https://grafana.com/). The Prometheus web UI is a simple tool that allows you to create queries on various metrics, view results in simple graphs, and view things like data targets (which is where all your data comes from), rules, and alerts (alerts will be explained later). - -[Grafana](https://grafana.com/) is a tool that allows to create dashboards and organise our data, and gives a much wider range of options when it comes to creating graphs and charts. It uses the same query language as the Prometheus web UI for collecting data, making it much simpler to switch between the web UI and Grafana. - -# Setup - -In the `monitoring` folder in `cluster-setup` in the deploy app-engine repo. This folder contains all the configuration required to get [Prometheus](https://prometheus.io/) and [Grafana](https://grafana.com/) onto our clusters, but they will need to be exposed manually. - -1. To do this, first find thet file named `prometheus-prometheus.yaml` and change the following line: - -```yaml - externalUrl: "https://{CLUSTER}-aimmo.codeforlife.education/prometheus" -``` - -by replacing the word `{CLUSTER}` with either dev/staging/default depending on which cluster you are applying the manifests to. - -2. Next we need to repeat this step for the `alertmanager-alertmanager.yaml` file, again finding the the line: - -```yaml - externalUrl: "https://{CLUSTER}-aimmo.codeforlife.education/alertmanager" -``` - -and replacing `{CLUSTER}` with either dev/staging/default depending on which cluster you're workking with. - -3. Now we need to look for files named: `monitoring-ingress.yaml` & `grafana-ingress.yaml`. In both files there will be a line that looks like this: - -```yaml - - host: "https://{CLUSTER}-aimmo.codeforlife.education" -``` - -Again you need to replace `{CLUSTER}` with either dev/staging/default depending on which cluster you're working on. - -4. After that, look for the `grafana-ini-configmap.yaml` file, this contains the main config file used to setup [Grafana](https://grafana.com/). inside the `[server]` header, look for the lines: - -```ini -domain = {CLUSTER}-aimmo.codeforlife.education -... -root_url = https://{CLUSTER}-aimmo.codeforlife.education/grafana/ -``` - -and once again replace `{CLUSTER}` with either dev/staging/default. - -5. Next, you need to go onto the Kubernetes Engine section of our [Google cloud console](https://console.cloud.google.com) dashboard, then go into services and look for the `aimmo-ingress` for the cluster you're working on. It should be near to, or at the top of the list of services. - -Click on the ingress to open up its details, then click "EDIT". You should see something like this: - -```yaml -apiVersion: extensions/v1beta1 -kind: Ingress -metadata: - annotations: - kubernetes.io/ingress.class: nginx - kubernetes.io/ingress.global-static-ip-name: dev-aimmo-ingress - ... -``` - -Now add this line into the annotations section: - -```yaml -nginx.org/mergeable-ingress-type: master -``` - -This is needed because we make use of multiple ingress files but you are only allowed a single ingress per host. For more information see the following example [here](https://github.com/nginxinc/kubernetes-ingress/tree/master/examples/mergeable-ingress-types). - -6. Finally, should be able to apply these manifests to the cluster you're working with. - -To do this, run `kubectl create -f monitoring/ || true`, if prometheus does not exist on that cluster at all. If the manifests have already been applied before, use: `kubectl apply -f monitoring/ || true` and this will update the existing manifests and reset all the relevant components. You can use `kubectl delete -f monitoring/ || true` if you need to remove our monitoring for whatever reason (at present this will also destroy all data). You need to be in the same directory as the monitoring folder to run these commands. - -*Note: kubectl needs to be configured to work with the GCloud cluster for this method to work* - -## Potential setup issues - -Below are some issues you may encounter when setting up [Prometheus](https://prometheus.io/) and [Grafana](https://grafana.com/) on any of the clusters. - -### Grafana looks a bit empty - -If when you go to `https://CLUSTER_URL/grafana` all you see is a mostly blank page containing some text, this means the ingress isn't configured quite right so it's not exposing all the styles. Below are some examples for working configs for the `grafana-ingress.yaml` - -```yaml -apiVersion: extensions/v1beta1 -kind: Ingress -metadata: - name: grafana-ingress - namespace: monitoring - annotations: - kubernetes.io/ingress.class: nginx - nginx.ingress.kubernetes.io/rewrite-target: /$1 - nginx.org/mergeable-ingress-type: minion -spec: - rules: - - host: staging-aimmo.codeforlife.education - http: - paths: - - backend: - serviceName: grafana - servicePort: 3000 - path: /grafana/?(.*) -``` - -```yaml -apiVersion: extensions/v1beta1 -kind: Ingress -metadata: - name: grafana-ingress - namespace: monitoring - annotations: - kubernetes.io/ingress.class: nginx - nginx.ingress.kubernetes.io/rewrite-target: / - nginx.org/mergeable-ingress-type: minion -spec: - rules: - - host: staging-aimmo.codeforlife.education - http: - paths: - - backend: - serviceName: grafana - servicePort: 3000 - path: /grafana -``` \ No newline at end of file diff --git a/docs/deployment/nginx-setup.md b/docs/deployment/nginx-setup.md deleted file mode 100644 index 026cb86f3..000000000 --- a/docs/deployment/nginx-setup.md +++ /dev/null @@ -1,46 +0,0 @@ -# NGINX Controller Ingress Setup - -**Note: This should only be done once only. The only time when a new setup might be required is when you reset the cluster to a fresh state or delete the relevant pods, services & deployments.** - ---- - - -In order to deploy our ingress correctly with a specific nginx controller used in google cloud platform, we need to create several services. All of these up to date instructions can be found [**here**](https://github.com/kubernetes/ingress-nginx/blob/master/deploy/README.md). - -For the sake of correct version control, we have saved the yaml files at the time of setup in the repository `ocadotechnology/codeforlife-deploy-appengine` at the path `./clusters_setup/ingress_nginx`. - -To set up from scratch do the following: -* Install gcloud locally. This is usually done by the following command: `pip install google-cloud`. At the time of writing the version is `0.32.0` and Google Cloud SDK of `189.0.0`. -* Set the current project for this workspace by typing: `gcloud config set project decent-digit-629`. -* Authenticate accordingly. You can read up on this [**here**](https://cloud.google.com/appengine/docs/standard/python/oauth/). Usually the following should work: `gcloud auth login`. This will open a web browser and will ask you to authenticate and give permissions to the google account. You should then (or only) run `gcloud auth application-default login` which will create the kubeconfig required for `kubectl` to work. -* Get credentials to the appropriate cluster you want to work on by doing the following command: `gcloud container clusters get-credentials [dev/staging/default] --zone europe-west1-b` -* `kubectl apply -f` should now be used on the following files (see path above to find these files): - * `namespace.yaml`, `default-backend-service.yaml`, `default-backend-deployment.yaml`, `configmap.yaml`, `tcp-services-configmap.yaml`, `udp-services-configmap.yaml`. -* Now install no RBAC roles by doing the same on `without-rbac.yaml`. -* And finally GCE specific settings and patches: - * Run `kubectl patch deployment -n ingress-nginx nginx-ingress-controller --type='json' --patch="$(curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/publish-service-patch.yaml)"`. - * `kubectl apply -f` on `service.yaml` and `patch-service-without-rbac.yaml` - -*** -# Reserving a static external IP address for a cluster - -The load balancer IP needs to be static in order to be resolved to a single DNS address. The whole setup process won't have to be done again but for reference: -* Go to **VPC Networks -> External IP addresses ** in the Google Cloud Platform UI and reserve a _**static**_ IP address with the name `[env]-aimmo-ingress` -* In your appengine project, open the [`ingress.yaml`](https://github.com/ocadotechnology/codeforlife-deploy-appengine/blob/master/clusters_setup/ingress.yaml) file and make sure that the following complies: - * In metadata:annotations `kubernetes.io/ingress.global-static-ip-name: [env]-aimmo-ingress` is set. - * Ensure the spec:host entry is made for this domain in the ingress. For example `- host: default-aimmo.codeforlife.education` -* Make a ANAME record in the DNS server to attatch it to that IP address that was reserved. Make sure this domain is `[env]-aimmo.codeforlife.education`. - -*** -# Securing the cluster with SSL. - -When settings the above DNS, you should generate/obtain appropriate CA, cert and key files. To now secure your domain you should: -* In file [`ingress.yaml`](https://github.com/ocadotechnology/codeforlife-deploy-appengine/blob/master/clusters_setup/ingress.yaml) on the appengine project, the section _**spec:rules**_ should contain: -``` -tls: - - hosts: - - [env]-aimmo.codeforlife.education - secretName: ssl-cert-secret -``` -* In your terminal, go to the directory that contains the above mentioned files and use the following to generate the secret: `kubectl create secret tls foo-secret --key=/tmp/tls.key --cert=/tmp/tls.crt`. This will require correct authentication which is described above. -* The downtime between deleting the old `ssl-cert-secret` on a cluster and creating a new one will hang the game creator as it will not receive information since a certificate authority issue will occur. The solution for this is to delete the game creator **pod** which will reinstantiate all the games and workers from scratch. diff --git a/docs/deployment/prometheus4k8s.png b/docs/deployment/prometheus4k8s.png deleted file mode 100644 index c7924b77417b029560f253323660c8bccce5db64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151171 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 F`A>Frkf8to diff --git a/docs/infrastructure/README.md b/docs/infrastructure/README.md deleted file mode 100644 index 83f1105c7..000000000 --- a/docs/infrastructure/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Infrastructure - ---- - -## ... diff --git a/docs/life-cycle-of-a-code-change.md b/docs/life-cycle-of-a-code-change.md deleted file mode 100644 index f846815fb..000000000 --- a/docs/life-cycle-of-a-code-change.md +++ /dev/null @@ -1,20 +0,0 @@ -# Life cycle of a code change - -Once you're confident with the changes implemented in your local branch, you should push them and open a GitHub pull request that can be reviewed and approved. **Note that** this should be a `semantic` pull request. - -## Development to Staging - -The branch is ready to be merged into the `development` branch when all changes are reviewed and there are no conflicts or blocking errors. - -After the PR is merged in, a `development` build starts and a beta release may or may not be created depending on the semantic PR title (see [semantic release notes](https://github.com/semantic-release/semantic-release)). The version is updated and the following are built and pushed: - -- aimmo `PyPi` package (beta) -- `Docker` images: aimmo-game, aimmo-game-creator and aimmo-game-worker (beta) - -Once the new beta version is released on PyPi and Docker Hub, Semaphore CI is notified and deploys it to our staging server, where the code changes will be tested further. See more details in our deploy app engine [documentation](https://github.com/ocadotechnology/codeforlife-deploy-appengine/blob/master/docs/life-cycle-of-a-code-change.md). - -## Staging to Production - -Once the changes on `development` are stable, this branch is merged into the `master` branch, updating it with the latest beta release. This triggers a `master` build and creates a release version. Deployment to production is manually triggered on Semaphore CI. - -After a successful deployment, the `master` branch has to be merged back into the `development` one to ensure that the latter is up-to-date and ready for the next release. diff --git a/docs/testing/README.md b/docs/testing/README.md deleted file mode 100644 index d439ecf56..000000000 --- a/docs/testing/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Testing - ---- - -- [Manual Test Plan](test-plan.md) -- [Automatic Testing](automatic-testing.md) diff --git a/docs/testing/automatic-testing.md b/docs/testing/automatic-testing.md deleted file mode 100644 index 0560b08df..000000000 --- a/docs/testing/automatic-testing.md +++ /dev/null @@ -1,26 +0,0 @@ -# Automatic Testing -- [Unit Tests](#unit-tests) -- [Functional Tests](#functional-tests) -- [Integration Tests](#integration-tests) -- [Testing Tools](#testing-tools) -- [Coverage Tools](#coverage-tools) - ---- - - -## Unit Tests -Currently our unit tests are located in `[module name]/tests/test_simulation`. They check that individual pieces of our code base work correctly, without integration of other functionality. They are all prefixed with `test_` and this is the requirement for it to be recognized when `all_tests.py` is ran. - -Every time you add a new piece of functionality; the bare minimum is to reflect this in the unit tests. - -## Functional Tests -Our functional tests can be found in `[module name]/tests/functional`. They generally tend to mock all the logic of the game without actually integrating the surrounding server architectures. - -## Integration Tests -TODO - -## Testing Tools -[Hypothesis](https://hypothesis.works/) is a property based tool that can be used to run tests with a way wider range of scenario's than we could possibly design. It tends to find edge cases that we may have (and have already) missed various times. We encourage to convert current tests to make use of this framework as well as designing new ones with this. - -## Coverage Tools -Our coverage tool right now is [coveralls](https://coveralls.io/). For the moment we do not count the coverage over the tests. This gives a closer to reality coverage, but it does not check if all the tests run. \ No newline at end of file diff --git a/docs/testing/test-plan.md b/docs/testing/test-plan.md deleted file mode 100644 index 680799667..000000000 --- a/docs/testing/test-plan.md +++ /dev/null @@ -1,62 +0,0 @@ -# Manual Test Plan -- [Level 1](#level-1) -- [Custom Games](#custom-games) -- [Out Of Testing Scope](#out-of-testing-scope) ---- - -**Prerequisites** -* Delete the database file in example_project/example_project/db.sqlite3. -* First run the test using `./run.py` and then try `./run.py -k`. -* Make sure to open your terminal to see for any messages. Some exceptions are expected but keep note. -*** - - -## Level 1 -### Check the following: - -**Prior to playing the game:** -* The level exists already. Check it by navigating to the Watch->Level. -* If required, you can login using your details (admin:admin default). -* You are at the correct URL (/kurono/watch_level/1/). -* It consists of **_five_** square boxes lined horizontally. The leftmost is at (-2,0), the right most at (2,0). -* There is no player on the screen. Nothing is happening. - -**Programming the game:** -* Program the game (Program-> Level1) and end up in the correct URL (kurono/program_level/1/). -* Ensure the code will be able to move the character to the right 4 times. Default code will suffice (see below to copy). -* Click the save button. Now go to Watch->Level1 via the menu (or press the Watch hotlink above the editor). -* See the character moving. It should stop when it gets to red box at (2,0). - -``` -class Avatar(object): - def next_turn(self, world_view, events): - from simulation.action import MoveAction - from simulation.direction import ALL_DIRECTIONS - import random - - return MoveAction(random.choice(ALL_DIRECTIONS)) -``` - -*** - -## Custom Games -### Check the following: -**Prior to playing the game:** -* Ensure there are no custom games running (Watch menu). -* Go to Program->Create a new game (/kurono/games/new). Select any name, select yourself in the 'Can Play' menu. -* Ensure 'Generator' is set to "Open World". Save, watch. -* A grid should show with an avatar moving around randomly. -* The score location should move randomly from time to time (depending on settings). -* Score of the avatar should increase as the avatar passes onto it. -* Pickups (3 types) should spawn from time to time. - 1. Any of the types should disappear after an avatar passes through the same cell. - 2. Health pickup (white with red cross) should restore the avatar's health (the hp text). - 3. The other two pickups (blue: invulnerability, red: damage boost) should appear, but have no visible effect on the avatar yet. -* Health of an avatar should be able to decrease. On 0, the avatar should respawn. -* Follow the instructions on the main homepage to see how you can add multiple avatars to a game at the same time. -*** - -## Out of testing scope -### Check the following: -* Reprogram the game to your own behavior. Check everything is done as expected. -*** diff --git a/docs/usage.md b/docs/usage.md deleted file mode 100644 index 595fde47a..000000000 --- a/docs/usage.md +++ /dev/null @@ -1,122 +0,0 @@ -# Usage - -This setup process will allow you to run Kurono locally via [docker](https://www.docker.com/) or a [kubernetes](https://kubernetes.io/) cluster, and to be able to contribute towards the project. - -- [Mac setup](#mac-setup) -- [Ubuntu/Debian setup](#ubuntu-setup) -- [Windows setup](#windows-setup) -- [Testing locally](#testing-locally) -- [Useful information](#useful-information) - -## Mac setup - -This can be done either manually or using the setup script. - -#### Install using the setup script: - -- Run `python aimmo_setup.py` in the Kurono root directory. Then: -- Open Docker to finalise the install process. (This will install the [latest release](https://www.docker.com/get-started)) -- See [Useful information](#useful-information) for additional details about the script. - -#### Install manually: - -- First you get the [brew](https://brew.sh/) package manager. Then: -- Follow the instructions at [game frontend documentation](https://github.com/ocadotechnology/aimmo/blob/master/game_frontend/README.md) in order to set up the frontend requirements, (you should be in the game_frontend folder for this step). -- Follow the instructions for [installing pyenv](https://github.com/pyenv/pyenv#installation). -- Run `brew install pipenv`, followed by `pipenv install --dev` (more information on [pipenv](https://pipenv.readthedocs.io/en/latest/)). -- Install [Docker](https://www.docker.com/): `brew update && brew install --cask docker`. -- Install Minikube: `brew install minikube`. -- Check if you have `kubectl` installed (Kubernetes - it should come with Docker). If not, use: `curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/v1.9.4/bin/darwin/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/`. -- Install helm: `brew install helm`. -- Add agones repo to helm: `helm repo add agones https://agones.dev/chart/stable && helm repo update`. -- Create a minikube profile for agones: `minikube start -p agones --driver=hyperkit`. -- Set the minikube profile to agones: `minikube profile agones`, then install agones using helm: `helm install aimmo --namespace agones-system --create-namespace agones/agones`. - -#### To run Kurono: - -- Ensure you are inside the python virtualenv, `pipenv shell`. -- First start the agones cluster with: `minikube start -p agones --driver=hyperkit`. -- Now use `python run.py` to run the project. - -## Ubuntu setup - -This can be done either manually or using the setup script. - -#### Install using the setup script: - -- Run `python aimmo_setup.py` in the AI:MMO root directory. -- See [Useful information](#useful-information) for additional details about the script. - -#### Install manually: - -- First run `sudo apt-get update` to save having to do it later in the process. -- Follow the instructions at [game frontend documentation](https://github.com/ocadotechnology/aimmo/blob/master/game_frontend/README.md) in order to set up the frontend requirements, (you should be in the `game_frontend` folder for this step). -- Follow the instructions for [installing pyenv](https://github.com/pyenv/pyenv#installation). -- Next run `sudo apt-get install python-pip`, followed by `pip install pipenv` to get the [pipenv](https://pipenv.readthedocs.io/en/latest/)) virtual environment. -- Now use `pipenv install --dev` to get the requirements for the project. -- Install [Snap](https://snapcraft.io/)) using `sudo apt install snapd`. -- Now run `sudo snap install kubectl --classic` to install kubectl ([Kubernetes](https://kubernetes.io/)). -- To install [Docker](https://www.docker.com/), either use `sudo apt-get install docker-ce` to install a fixed version of the latest release, or follow the Ubuntu install instructions on the [Docker website](https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-using-the-repository). -- Install Minikube, running `curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64`, then `sudo install minikube-linux-amd64 /usr/local/bin/minikube` -- Install helm: `sudo snap install helm --classic` -- Add agones repo to helm: `helm repo add agones https://agones.dev/chart/stable && helm repo update` -- Create a minikube profile for agones: `minikube start -p agones`. -- Set the minikube profile to agones: `minikube profile agones`, then install agones using helm: `helm install aimmo --namespace agones-system --create-namespace agones/agones` - -#### To run Kurono: - -- Ensure you are inside the python virtualenv, `pipenv shell`. -- First start the agones cluster with: `minikube start -p agones`. -- Now use `python run.py` to run the project. - -## Windows setup - -#### Install Manually: - -- Contact a member of the Code for Life team via the [Code for Life contact form](https://www.codeforlife.education/help/#contact). - -The game should now be set up to run locally. If you wish to be able to run the project with [Kubernetes](https://kubernetes.io/) and containers, follow these next steps: - -- First, follow the instructions at [game frontend documentation](https://github.com/ocadotechnology/aimmo/blob/master/game_frontend/README.md) in order to set up the frontend requirements, (you should be in the `game_frontend` folder for this step). -- Follow the instructions for [installing pyenv](https://github.com/pyenv/pyenv#installation). -- Run `pip install pipenv`, followed by `pipenv install --dev` (more information on [pipenv](https://pipenv.readthedocs.io/en/latest/)). -- Next, [download chocolatey](https://chocolatey.org/) and run `choco install kubernetes-cli`. -- Follow the instructions for [installing pyenv](https://github.com/pyenv/pyenv#installation). -- Then follow the [docker installation instructions for Windows](https://docs.docker.com/docker-for-windows/). -- Install minikube: `choco install minikube`. -- Install helm: `choco install kubernetes-helm`. -- Add agones repo to helm: `helm repo add agones https://agones.dev/chart/stable && helm repo update`. -- Create a minikube profile for agones: `minikube start -p agones`. -- Set the minikube profile to agones: `minikube profile agones`, then install agones using helm: `helm install aimmo --namespace agones-system --create-namespace agones/agones`. - -#### To run Kurono: - -- Ensure you are inside the python virtualenv, `pipenv shell`. -- First start the agones cluster with: `minikube start -p agones`. -- Now use `python run.py` to run the project. - -## Useful information - -Here you can find some other useful information regarding the setup or usage of various aspects of the project. - -#### Setup script & other setup information. - -- It may be the case that the frontend does not load properly upon starting aimmo (when running the script). If this is the case then you may need to follow the [game frontend documentation](https://github.com/ocadotechnology/aimmo/blob/master/game_frontend/README.md) in order to resolve this (usually all the packages are there, it just requires you to set them up manually). -- If the script fails when attempting to install Docker, it may be because you have an old version of docker currently installed. To fix this, run: `sudo apt-get remove docker docker-engine docker.io`, then re-run the script. -- If there is an issue when using containers or the virtual enviroment. Then there small chance that VT-x/AMD-x virtualization has not been enabled on your machine. If this is the case the main way to solve this is to enable it through the BIOS settings. - -#### Testing locally - -- Use `./all_tests.py` to run all the tests (note that this is several pages of output). -- The `--coverage` option will generate coverage data for the tests using `coverage.py`. - -#### Interacting with the cluster - -- `kubectl` and `minikube` can be used to interact with the cluster. -- Running either command without any options will give the most useful commands. -- Use `minikube dashboard` to open the [Kubernetes](https://kubernetes.io/) dashboard in your browser. - -#### Useful commands - -- To create an another admin account: `python example_project/manage.py createsuperuser` - - By default, we create an admin account with credentials admin:admin when you start the project. diff --git a/game_frontend/README.md b/game_frontend/README.md deleted file mode 100644 index 95427fabb..000000000 --- a/game_frontend/README.md +++ /dev/null @@ -1,103 +0,0 @@ -[![js-standard-style](https://cdn.rawgit.com/standard/standard/master/badge.svg)](https://github.com/standard/standard) - - - -# Kurono Frontend - -## Description - -This folder contains the frontend for the Kurono game. It is a single page application using [React](https://reactjs.org/). We use [Redux](https://redux.js.org/) for state management and [redux-observable](https://redux-observable.js.org/) for handling our side effects (e.g. asynchronous calls). To learn more about how we connect all of these together, feel free to check out our [How does it all work](#how-does-it-all-work) section. - -## Installation for Contributors - -### Requirements - -- [Node](https://nodejs.org/en/download/) -- [Parcel](https://parceljs.org/) -- [yarn](https://yarnpkg.com/en/) - -### Build dependencies - -Once you have cloned this repository, run the command below in this folder: - -``` -yarn -``` - -## Usage - -### Standalone - -It's possible to run the frontend by itself. To do so, run the command below in this folder. - -``` -parcel index.html -``` - -### With Django - -Our Django runner calls `djangoBundler.js` when running the project for you so nothing special needs to done! Run this command in the root of this repository (make sure you are in your virtualenv): - -``` -./run.py -k -``` - -`djangoBundler.js` is a custom `parcel-bundler` we use to make sure we generate a Django template as an entry point for the React code. - -### Running Tests - -``` -yarn test -``` - -## Contributing - -- tests -- standard style guide (state exceptions) - - -## How does it all work? - -### Prequisite Reading - -If you are new to React and Redux we recommend reading these resources: - -- [React tutorial](https://reactjs.org/tutorial/tutorial.html) -- [Thinking in React](https://reactjs.org/docs/thinking-in-react.html) -- [Redux and React tutorial](https://www.valentinog.com/blog/react-redux-tutorial-beginners/) - -In order to make sure our project structure is scalable we use [re-ducks](https://medium.freecodecamp.org/scaling-your-redux-app-with-ducks-6115955638be). - -### Optional reading - -The links here aren't necessary for helping you contribute straight away but they will help you out as you get more comfortable with our project: - -- [Jest testing cheatsheet](https://devhints.io/jest) -- [Redux Observables](https://redux-observable.js.org/) -- [RxJS Marble Testing](https://github.com/ReactiveX/rxjs/blob/master/doc/writing-marble-tests.md) - -### How we integrate with Django - -Coming soon... - -### Technology Stack - -- React -- Redux -- redux-observable -- styled-components - -#### For developers - -- Parcel -- StandardJS -- Babel - -#### For testing - -- Jest -- Enzyme - -### Building for Production - -Coming soon... diff --git a/docs/images/AIMMO-Logo-vertical-RGB.svg b/images/AIMMO-Logo-vertical-RGB.svg similarity index 100% rename from docs/images/AIMMO-Logo-vertical-RGB.svg rename to images/AIMMO-Logo-vertical-RGB.svg diff --git a/docs/images/kurono_game.png b/images/kurono_game.png similarity index 100% rename from docs/images/kurono_game.png rename to images/kurono_game.png diff --git a/docs/images/kurono_logo_mark.svg b/images/kurono_logo_mark.svg similarity index 100% rename from docs/images/kurono_logo_mark.svg rename to images/kurono_logo_mark.svg diff --git a/docs/images/kurono_logo_simple.svg b/images/kurono_logo_simple.svg similarity index 100% rename from docs/images/kurono_logo_simple.svg rename to images/kurono_logo_simple.svg