From 04fe93dffc58b3fd9ca22cd21daf2711ed0fc631 Mon Sep 17 00:00:00 2001
From: Steven <106664555+stevius10@users.noreply.github.com>
Date: Wed, 17 Sep 2025 08:24:32 +0200
Subject: [PATCH 01/15] feat/run-libs-locally (#140)
---
README.md | 46 ++++++++++++++++++++++++++-------------
config/libraries/env.rb | 7 +++---
docs/img/development.png | Bin 129114 -> 306387 bytes
local/run.sh | 41 +++++++++++++++++++---------------
4 files changed, 57 insertions(+), 37 deletions(-)
diff --git a/README.md b/README.md
index 76700c7..237b39a 100644
--- a/README.md
+++ b/README.md
@@ -13,8 +13,10 @@
- [Lifecycle](#lifecycle)
- [Self-contained Monorepository](#self-contained-monorepository)
- [Requirements](#requirements)
- - [Getting Started](#getting-started)
- - [Development and Extension](#development-and-extension)
+ - [Configuration](#configuration)
+ - [Development and Extension](#development-and-extension)
+ - [Getting Started](#getting-started)
+ - [Environment](#environment)
---
@@ -88,7 +90,7 @@ This system implements stateless infrastructure management on Proxmox VE, ensuri
- Proxmox VE 8.4-9.0
- See [Wiki](https://github.com/stevius10/Proxmox-GitOps/wiki) for recommendations
-### Getting Started
+### Configuration
- Set **Proxmox** and **global usage credentials** in [`local/.config.json`](local/.config.json) as [`./local/config.json`](https://github.com/stevius10/Proxmox-GitOps/wiki/Example-Configuration#file-localconfigjson)
- Ensure **container configuration** in [`config.env`](config.env) and [**verify storage**](https://github.com/stevius10/Proxmox-GitOps/wiki/Example-Configuration#file-configenv)
@@ -99,9 +101,13 @@ This system implements stateless infrastructure management on Proxmox VE, ensuri
-#### Development and Extension
+### Development and Extension
-Reusable container definitions are stored in the [`libs`](libs) folder. Copy an example container (like [`libs/broker`](libs/broker) or [`libs/proxy`](libs/proxy)) as a template, or create a new container lib from scratch and follow these steps:
+Reusable container definitions are stored in the [`libs`](libs) folder.
+
+#### Getting Started
+
+Copy an example container (like [`libs/broker`](libs/broker) or [`libs/proxy`](libs/proxy)) as a template, or create a new container lib from scratch and follow these steps:
- Add `config.env` to your container's root directory (e.g. `./libs/apache`):
```dotenv
@@ -131,16 +137,26 @@ end
Common.application(self, 'apache2') # provided by convention
```
-- Optionally, use `Env.get()` and `Env.set()` to access Gitea environment variables.
-
-
-
-
-
- Add to Monorepository and redeploy.
-The container can be tested locally running `./local/run.sh [container]` (_wip_)
+#### Environment
-
-
-
+- Optionally, use `Env.get()` and `Env.set()` to access Gitea environment variables.
+
+
+
+
+
+
+
+- The container can be tested locally running `./local/run.sh [container]`.
+
+
+ Example: Apache
+
+
+
+
+
+
+
diff --git a/config/libraries/env.rb b/config/libraries/env.rb
index 0892e45..1d9bdf5 100644
--- a/config/libraries/env.rb
+++ b/config/libraries/env.rb
@@ -35,10 +35,9 @@ def self.set_variable(ctx, key, val, repo: nil, owner: nil)
def self.endpoint(ctx)
node = Ctx.node(ctx)
- Default.presence_or(node.dig('git', 'api', 'endpoint') || ENV['ENDPOINT'], "#{
- Default.presence_or(node.dig('git', 'host', 'http'), "http://#{Default.presence_or(Env.get(node, 'host'), '127.0.0.1')}:#{
- Default.presence_or(node.dig('git', 'port', 'http'), 8080)}")
- }/api/#{Default.presence_or(node.dig('git', 'api', 'version'), 'v1')}")
+ return ENV['ENDPOINT'] if ENV['ENDPOINT'].present?
+ host = ENV['HOST'] || node['host'] || '127.0.0.1'
+ "http://#{host}:#{node.dig('git','port','http') || 8080}/api/#{node.dig('git','api','version') || 'v1'}"
end
def self.request(ctx, key, body: nil, repo: nil, owner: nil, expect: false)
diff --git a/docs/img/development.png b/docs/img/development.png
index 200b0601eccc3195763d190e6fcb8bdea7fa69a7..accab020bebe5ec02868773b3ec805c90a62378a 100644
GIT binary patch
literal 306387
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 YXye{+KdIs))MB0z5|ni_
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