Include clear fork attribution linking to the original repository at
https://projects.blender.org/studio/flamenco with acknowledgment that
this builds upon their excellent foundation.
Replace 'enterprise-grade' with 'community-grade' positioning that better
reflects the higher quality and deeper passion that drives open-source
community development. Add section emphasizing community-driven excellence
and genuine care for the Blender ecosystem over profit motives.
Transform README to showcase the massive engineering improvements:
- Lead with 42x-168x performance gains and build optimization
- Highlight 100% build failure elimination
- Position as production-grade render farm system
- Showcase comprehensive Docker development environment
- Present technical sophistication and developer experience improvements
* Docker Infrastructure:
- Multi-stage Dockerfile.dev with optimized Go proxy configuration
- Complete compose.dev.yml with service orchestration
- Fixed critical GOPROXY setting achieving 42x performance improvement
- Migrated from Poetry to uv for faster Python package management
* Build System Enhancements:
- Enhanced Mage build system with caching and parallelization
- Added incremental build capabilities with SHA256 checksums
- Implemented parallel task execution with dependency resolution
- Added comprehensive test orchestration targets
* Testing Infrastructure:
- Complete API testing suite with OpenAPI validation
- Performance testing with multi-worker simulation
- Integration testing for end-to-end workflows
- Database testing with migration validation
- Docker-based test environments
* Documentation:
- Comprehensive Docker development guides
- Performance optimization case study
- Build system architecture documentation
- Test infrastructure usage guides
* Performance Results:
- Build time reduced from 60+ min failures to 9.5 min success
- Go module downloads: 42x faster (84.2s vs 60+ min timeouts)
- Success rate: 0% → 100%
- Developer onboarding: days → 10 minutes
Fixes critical Docker build failures and establishes production-ready
containerized development environment with comprehensive testing.
- Add multi-stage Dockerfile.dev with 168x Go module performance improvement
- Implement modern Docker Compose configuration with caddy-docker-proxy
- Add comprehensive Makefile.docker for container management
- Migrate from Poetry to uv for Python dependencies
- Fix Alpine Linux compatibility and Docker mount conflicts
- Create comprehensive documentation in docs/ directory
- Add Playwright testing integration
- Configure reverse proxy with automatic HTTPS
- Update .gitignore for Docker development artifacts
Found via `codespell -S "*.po,*.chunk.min.js" -L
cace,cacl,currenty,eacf,eacg,fo,nd,nin,ontext,originaly,ot,te,ue`
No functional changes.
Co-authored-by: Sybren A. Stüvel <sybren@blender.org>
Pull Request: https://projects.blender.org/studio/flamenco/pulls/104436
Fix#104432, where the form throws an error and cannot be saved. It is
happening because the backend is expecting `number`, not `string`, and
whenever the user types, the value in the input gets changed to a
string. The solution is to cast `FormInputNumber` value to a number
`onInput` to always maintain the `number` type.
Pull Request: https://projects.blender.org/studio/flamenco/pulls/104434
Add an MQTT server (aka 'broker') that logs all published messages. This
is purely for debugging Flamenco Manager's events. Although it should
work fine as MQTT broker, it's not meant for production use.
Run the server with `go run ./cmd/mqtt-server`
Prevent fields from being empty, when it's known that Flamenco Manager
will not start up if they are.
The icons for the variable add/delete are enhanced with colors and
icons +/- or with a trashcan SVG.
Error/warning messages appear under inputs when values are invalid on
blur.
`FormInputDropdownSelect` is also created here, decoupling the
validation from Dropdown Select. `DropdownSelect`'s props now have
type definitions.
CSS selectors are more specified, and renamed to be more fitting.
### What 'required' means for each input
- For text, `required` means the field cannot be empty.
- For numbers, `required` means the field cannot be empty, and having
a `min` and/or `max` means the number must be equal to or
above/below the min/max.
- For dropdowns, `required` means the selection cannot be empty, and
`strict` means that an option not included in the list passed to the
`options` prop cannot be selected.
- For the new variable input, empty strings, duplicate variable names,
and variable names that contain `{` or `}` are invalid.
### Required Settings
To keep the application running and remaining on the same page, these
fields **must** be non-empty strings:
- `database` and `shared_storage_path` (both which can be invalid so
long as they are non-empty)
- `listen` (which MUST be a valid value AND non-empty) When
`shared_storage_path` is empty, the application will automatically
jump to the Setup Assistant which after completing will create a new
`flamenco-manager.yaml` and restart the application. If `database`
is empty and `listen` is not a proper port, the application will
fail to start, leading the user to a dead end and forcing them to
manually configure `flamenco-manager.yaml` to get it running again.
To prevent the backend from throwing a `Bad Request` error, numerical
and time duration inputs **must not** be null or empty:
- `database_check_period`, `task_timeout`, `worker_timeout`,
`blocklist_threshold`, `task_fail_after_softfail_count`
Pull Request: https://projects.blender.org/studio/flamenco/pulls/104409
This just changes the version comments in the generated files. Now they're
consistent with the version of sqlc tracked in go.mod.
No functional changes.
Use `go run ./cmd/sqlc-export-schema` to recreate the Manager's
`schema.sql` file. This way it is ensured that the sqlc code generator
sees the actual database schema as created by Goose.
Instead of needing to install Goose separately, the Makefile will now just
run `go tool goose`. The Go tooling automatically takes care of downloading
and building.
This also pulled in a few upgrades to our packages.
Upgrade `golang.org/x/tools` from 0.23.0 to 0.36.0, which pulled in some
other upgrades as well. This fixes an issue building mage:
```
# golang.org/x/tools/internal/tokeninternal
../../go/pkg/mod/golang.org/x/tools@v0.23.0/internal/tokeninternal/tokeninternal.go:64:9: invalid array length -delta * delta (constant -256 of type int64)
Error: error compiling magefiles
```
Longer names could get rewrapped, but there is not enough vertical space
for this. Now rewrapping is prevented. Of course a very long name can still
cause layout issues, but at least now slightly-long names work fine.
Add a new "Settings" view, to edit the Flamenco Manager configuration
via the web interface. Saving the form will write directly to
`flamenco-manager.yaml`. Depending on how they are used internally by
Flamenco Manager, some settings take effect immediately; most require
a restart of the Manager process, though.
Reviewed-on: https://projects.blender.org/studio/flamenco/pulls/104399
Reviewed-by: Sybren A. Stüvel <sybren@blender.org>
By using the flexbox layout model better, I could remove the `<div
class="align-right">` elements. And by adding a more visual border and
shadow, the popover looks good without having its height set explicitly.
This in turn makes it look good also when it's wrapping due to a small
screen size.
Add a "Select Preceding Jobs" button to the job table button bar.
Users can select a job (or multiple jobs) and click "Select Preceding
Jobs" which will then select all jobs with an updated timestamp that
precedes the selected job(s) updated timestamp.
Reviewed-on: https://projects.blender.org/studio/flamenco/pulls/104418
Reviewed-by: Sybren A. Stüvel <sybren@blender.org>
Instead of setting `margin-left` on all but the first button, use the
`gap` property to set the inter-button gap. This works properly when
buttons rewrap.
Add the following features:
- `Ctrl + Click` or `Cmd + Click` to toggle selection of additional workers
- `Shift + Click` to select a range of additional workers
- Ability to perform `Shutdown`, `Send To Sleep`, and `Wake Up` actions on multiple workers concurrently
- Notifications on how many workers successfully/failed to have an action performed
Reviewed-on: https://projects.blender.org/studio/flamenco/pulls/104395
Reviewed-by: Sybren A. Stüvel <sybren@blender.org>
Decreased the heading size for Duration section to avoid competing
with the Definitions heading to respect the nesting hierarchy. Made a
few spacing tweaks and word additions.
Reviewed-on: https://projects.blender.org/studio/flamenco/pulls/104420
Reviewed-by: Sybren A. Stüvel <sybren@blender.org>
The unit test was using a mocked "now" in a hardcoded timezone (UTC+2),
while the code under test was actually using the local timezone of the
computer.
Also the schedule computations are now explicitly only in local time.
Since the introduction of a `.gitattributes` file, tooling (like Gitea)
is aware of which files are generated. This means that all
OpenAPI-related changes (`pkg/api/flamenco-openapi.yaml`, re-generated
code, and changes to the implementation) can be commited together.
The downside is that tooling that is not aware of `.gitattributes` will
still show a big mix of hand-crafted and generated changes. The upside
is that each commit brings Flamenco from a valid, runnable state to
another valid, runnable state. This helps greatly when investigating
history (like bisecting) to find the source of a bug.
Add a PUT method for `/api/v3/configuration/file`, which entirely
replaces `flamenco-manager.yaml` with the received JSON payload. This
will be used in the future to store configuration edited in the web
frontend.
Ref: #99426
Reviewed-on: https://projects.blender.org/studio/flamenco/pulls/104406
When an absolute path is used for the manager-local storage, use it
as-is. Before this, it would always be taken as relative to the manager
executable.
Take the same approach for Windows as for other platforms, so that the
commands in the Makefile are more similar (even though the ZIP for Windows
doesn't contain everything in a single directory, like the tarballs do).
This will make it easier to adjust things for all platforms later.
If the dir doesn't exist, sqlite will come back with a cryptic error
message "unable to open database file: out of memory (14)". Better to
just create it.
Take the release cycle from the `RELEASE_CYCLE` variable in the Makefile,
instead of parsing `VERSION`.
For alpha/beta/rc/release this doesn't matter, it was parsed correctly.
But other suffixes were all marked as "release", which wasn't correct.
Add JSON tags to the worker configuration structs. This way, the config
is converted to JSON the same as it is to YAML, which is reflected in how
the loaded configuration is logged at startup.
I'm doing another SIGGRAPH talk about Flamenco, and it helps to have a
page on flamenco.blender.org to send people to.
It directs to my own website, as then I can use syncthing to control its
contents while I'm at the conference. Not needing access to the Blender
infrastructure seems safer to me.
Most of the definitions are based on the documentation in
`internal/manager/config/config.go` or inferred by labels and
descriptions from Flamenco v2 config pages.
Reviewed-on: https://projects.blender.org/studio/flamenco/pulls/104400
Issue likely began after 7b31eba8d7614e82cfcc4583e1dd3c2f40f87944 as
it was an issue with header not being properly positioned.
Just needed to add `header-L` and `header-R` to `grid-template-areas`
and adjust the rest accordingly, and fix a class name typo.
Reviewed-on: https://projects.blender.org/studio/flamenco/pulls/104413
Reviewed-by: Sybren A. Stüvel <sybren@blender.org>
Raise the log level from DEBUG to INFO, as it's quite important to be
explicit about which configuration file is loaded. Also ensure that the
file path is made absolute, so that it's again more explicit.