### Building and running your application When you're ready, start your application by running: `docker compose up --build`. Your application will be available at http://localhost:8080. ### Deploying your application to the cloud First, build your image, e.g.: `docker build -t myapp .`. If your cloud uses a different CPU architecture than your development machine (e.g., you are on a Mac M1 and your cloud provider is amd64), you'll want to build the image for that platform, e.g.: `docker build --platform=linux/amd64 -t myapp .`. Then, push it to your registry, e.g. `docker push myregistry.com/myapp`. Consult Docker's [getting started](https://docs.docker.com/go/get-started-sharing/) docs for more detail on building and pushing. ### References * [Docker's .NET guide](https://docs.docker.com/language/dotnet/) * The [dotnet-docker](https://github.com/dotnet/dotnet-docker/tree/main/samples) repository has many relevant samples and docs. ### Dependencies bash (/usr/bin/bash) Python 3.10.2 (/usr/bin/python3) - python3-pip - python3-venv pkg-config (sudo apt update && sudo apt install pkg-config) ### Notes Try Running NuGet restore when ANTLR doesn't generate Lexer or Parser ### TODO - Make entrypoint, i.e. main.py, customizable or fixed? - Figure out why BashException cannot be caught, can it be due to the differences in scoping? Because the `Bash` class is static and the services calling `Bash.ExecuteAsync` are in the container. Maybe this in combination with the async nature of the whole thing? - Make it so that `Bash.ExecuteAsync` can run "directly" in the calling terminal also. - This will improve the usability of the "m4g run" command.