Your mission, should you choose to accept it, involves developing an app, containerize it and set up a CI for it. Please read carefully all the instructions.
If any of the following steps is not working, it is expected from you to fix them
Installation
- Create a virtual environment with python3 -m venv challenge_venv
- Activate it with source challenge_venv/bin/activate
- Install the requirements in this directory pip install -r requirements.txt
Run the app
- Move to challenges/flask_container_cidirectory, if you are not already there
- Run export FLASK_APP=app/main.py
- To run the app execute flask run. If it doesn't works, fix it
- Access http://127.0.0.1:5000. You should see the following
{
    "current_uri": "/",
    "example": "/matrix/'123n456n789'",
    "resources": {
        "column": "/columns/<matrix>/<column_number>",
        "matrix": "/matrix/<matrix>",
        "row": "/rows/<matrix>/<row_number>"
    }
}
- You should be able to access any of the resources and get the following data:
- 
/matrix/<matrix> for example, for /matrix/123n456n789 the user will get: 1 2 3 4 5 6 7 8 9 
- 
/matrix/<matrix>/<column_number> for example, for /matrix/123n456n789/2 the user will get: 2 5 8 
- 
/matrix/<matrix>/<row_number> for example, for /matrix/123n456n789/1 the user will get: 1 2 3 
Containers
Using Docker or Podman, containerize the flask app so users can run the following two commands:
docker build -t app:latest /path/to/Dockerfile
docker run -d -p 5000:5000 app
- You can use any image base you would like
- Containerize only what you need for running the application, nothing else.
CI
Great, now that we have a working app and also can run it in a container, let's set up a CI for it so it won't break again in the future In current directory you have a file called tests.py which includes the tests for the app. What is required from you, is:
- Write a CI pipeline that will run the app tests. You are free to choose whatever CI system or service you prefer. Use python tests.pyfor running the tests.
- There should be some kind of test for the Dockerfile you wrote
- Add additional unit test (or any other level of tests) for testing the app
Guidelines
- Except the app functionality, you can change whatever you want - structure, tooling, libraries, ... If possible, add notes.mdfile which explains reasons, logic, thoughts and anything else you would like to share
- The CI part should include the source code for the pipeline definition