# Flamenco 3 This repository contains the sources for Flamenco 3. The Manager, Worker, and Blender add-on sources are all combined in this one repository. ## Building 1. Install [Go 1.18 or newer](https://go.dev/), and Node 16 (see "Node / Web UI" below). 2. Optional: set the environment variable `GOPATH` to where you want Go to put its packages. 3. Ensure `$GOPATH/bin` is included in your `$PATH` environment variable. `$GOPATH` defaults to `$HOME/go` if not set. Run `go env GOPATH` if you're not sure. 4. Set up the web frontend for development (see "Node / Web UI" below). 5. Run `make with-deps` to install build-time dependencies and build the application. Subsequent builds can just run `make` without arguments. You should now have two executables: `flamenco-manager` and `flamenco-worker`. Both can be run with the `-help` CLI argument to see the available options. To rebuild only the Manager or Worker, run `make flamenco-manager` or `make flamenco-worker`. ## Node / Web UI The web UI is built with Vue, Bootstrap, and Socket.IO for communication with the backend. NodeJS/NPM is used to collect all of those and build the frontend files. It's recommended to install Node v16 via Snap: ``` sudo snap install node --classic --channel=16 ``` This also gives you the Yarn package manager, which can be used to install web dependencies and build the frontend files. To set up the development environment, follow these steps: ``` # Ensure /usr/local/lib/node_modules exists and is writable by you: sudo mkdir /usr/local/lib/node_modules sudo chown youruser /usr/local/lib/node_modules # Set up the symlinks necessary for development: cd web/manager-api npm link cd ../app npm link flamenco-manager npm install # Run the web frontend: yarn serve ``` ## Generating the OpenAPI/Swagger API Some code is generated from the OpenAPI specs in `pkg/api/flamenco-manager.yaml`. The generated code is committed to Git, so that after a checkout you shouldn't need to re-run the generator to build Flamenco. After changing `pkg/api/flamenco-manager.yaml`, run `make generate` to generate the code, then commit to Git. The JavaScript and Python generator is made in Java, so it requires a JRE/JDK to be installed. On Ubuntu Linux, `sudo apt install default-jre-headless` should be enough. ## Swagger UI Flamenco Manager has a SwaggerUI interface at http://localhost:8080/api/swagger-ui/ ## Database Flamenco Manager and Worker use SQLite as database, and Gorm as object-relational mapper. Since SQLite has limited support for altering table schemas, migration requires copying old data to a temporary table with the new schema, then swap out the tables. Because of this, avoid `NOT NULL` columns, as they will be problematic in this process. ## License Flamenco is licensed under the GPLv3+ license.