Skip to content

First release - #36

Merged
thiagoralves merged 174 commits into
mainfrom
development
Nov 19, 2025
Merged

First release#36
thiagoralves merged 174 commits into
mainfrom
development

Conversation

@thiagoralves

Copy link
Copy Markdown
Contributor

First release of the OpenPLC Runtime v4

lucasbutzke and others added 30 commits August 8, 2025 12:29
Expanded the README to include step-by-step build instructions for both Linux and Windows (Docker), prerequisites, project structure, and troubleshooting tips. Clarified the process for generating and copying required files from the OpenPLC IDE and xml2st tool.
thiagoralves and others added 29 commits October 21, 2025 17:01
…c-caching-issue

Fix libplc.so caching issue by using unique timestamped filenames
* [RTOP-79] Unit test for logging buffer

* [RTOP-79] Fix logging id on unit tests

* [RTOP-79] Unused files remove

* Update webserver/logger/formatter.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update tests/pytest/test_logger_buffer.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* [RTOP-79] Fix log_id in threading

* [RTOP-79] classmethod to reset lod_id

* [RTOP-80] Logging module documentation

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
- Update Dockerfile with optimized build dependencies (gcc, g++, cmake, build-essential)
- Add .github/workflows/docker.yml for multi-arch builds (amd64, arm64, armv7)
- Create install/install.sh script for easy local Docker image building
- Add .venv/ to .gitignore to prevent committing virtual environment
- Follow orchestrator-agent pattern for consistent Docker workflow
- Enable easy installation via: docker pull ghcr.io/autonomy-logic/openplc-runtime:latest

Co-Authored-By: Thiago Alves <thiagoralves@gmail.com>
The plugin system was using Py_SET_REFCNT(args, UINT64_MAX) to prevent
garbage collection of the runtime args capsule. This caused an overflow
error on 32-bit systems where Py_ssize_t is 32 bits (int), but UINT64_MAX
is a 64-bit value.

Changes:
- Add args_capsule field to python_binds_t structure to store capsule reference
- Replace Py_SET_REFCNT hack with proper reference counting pattern
- Store capsule reference in plugin->python_plugin->args_capsule for lifetime
- Add Py_XDECREF in python_plugin_cleanup to properly release capsule

This fix ensures proper cross-architecture compatibility (32-bit and 64-bit)
and follows Python C API best practices for reference counting.

Co-Authored-By: Thiago Alves <thiagoralves@gmail.com>
The webserver was crashing in Docker with RuntimeError: 'The Werkzeug web
server is not designed to run in production.' This occurred because
Flask-SocketIO was using Werkzeug's development server by default.

Changes:
- Add eventlet to requirements.txt for production-ready async server
- Update SocketIO initialization to use async_mode='eventlet' instead of 'threading'
- Eventlet provides proper WebSocket support with HTTPS/SSL for production use

This fix ensures the webserver runs reliably in Docker containers while
maintaining WebSocket functionality for debug communication with OpenPLC Editor.

The ssl_context parameter should work with eventlet's server. If issues arise,
we can switch to ssl_certfile/ssl_keyfile parameters as an alternative.

Co-Authored-By: Thiago Alves <thiagoralves@gmail.com>
…h-docker

Add multi-arch Docker builds and fix arm/v7 plugin system compilation
@thiagoralves
thiagoralves merged commit 5a336f8 into main Nov 19, 2025
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants