# futureporn.net

![Tests Status](https://gitea.futureporn.net/futureporn/fp/actions/workflows/tests.yaml/badge.svg)
![Build Status](https://gitea.futureporn.net/futureporn/fp/actions/workflows/builder.yaml/badge.svg)
![Elixir](https://img.shields.io/badge/elixir-%234B275F.svg?style=for-the-badge&logo=elixir&logoColor=white)
![Postgres](https://img.shields.io/badge/postgres-%23316192.svg?style=for-the-badge&logo=postgresql&logoColor=white)
[![Built with Devbox](https://www.jetify.com/img/devbox/shield_galaxy.svg)](https://www.jetify.com/devbox/docs/contributor-quickstart/)

Source Code for https://futureporn.net

See ./ARCHITECTURE.md for an overview of the infrastructure components. 

## Getting Started

The main gist is as follows.

1. install [docker](https://docs.docker.com/engine/install) `wget -O- get.docker.com | bash`
1. Install [devbox](https://www.jetify.com/devbox/docs/installing_devbox/) `curl -fsSL https://get.jetify.com/devbox | bash`
2. Install development environment & packages using devbox.

    devbox install


3. Run database and other accessories with `docker compose up --watch` 
4. In another terminal, run the phoenix "bright" app with `devbox run bright:dev`
4. Visit http://localhost:4000

If all went well, editing source code will automatically affect the website running in your browser.

## backup/restore dev database

@see https://stackoverflow.com/a/29913462/1004931

### backup

Use devbox helper script

    devbox run backup

### restore

    cat ./backups/your-backup.sql | docker exec -i postgres_db psql -U postgres


## testing

there is some undesirable behavior when running tests because nektos/act mimicks github actions.
we are banned from github so we aren't using that. instead, we use gitea act_runner.
github actions Job runner runs on docker 'host' network.
gitea act_runner runs on a custom named bridge network. e.g. `GITEA-ACTIONS-TASK-974_WORKFLOW-ci_JOB-Tests-Checks-test_phoenix-network`
confusing, right? It totally is!
when we are working with gitea act_runner, we can use dns names, e.g. test-db.
when we are working with nektos/act, we must use the IP address of the service container.
WTF there must be a better way