Przejdź do treści

Manifest projektu junexis.project.toml

Zakres weryfikacji

Treść zachowana z obecnego źródła. Publikacja dokumentacji nie oznacza ponownego potwierdzenia wszystkich komend, przykładów i deklaracji możliwości.

Poziom: średniozaawansowany i ekspert. Ustawienia utworzone przez init są bezpiecznym punktem startowym dla początkującego.

Manifest znajduje się w głównym katalogu projektu. CLI szuka najbliższego pliku junexis.project.toml, zaczynając od bieżącego katalogu i przechodząc do katalogów nadrzędnych.

Minimalny manifest

name = "temperature-monitor"
entry = "src/main.jnx"
sourceRoots = ["src"]
targets = ["server"]
outDir = "out"

sourceRoots ma bezpieczną wartość domyślną ["src"]. Pozostałe cztery pola są wymagane.

Pole Typ Znaczenie
name tekst nazwa projektu używana przez narzędzia
entry tekst główny plik .jnx, względem katalogu projektu
sourceRoots lista tekstów katalogi, z których powstają tożsamości modułów; domyślnie src
localLibraries lista tekstów opcjonalne biblioteki lokalne jako namespace=ścieżka
providerPackages lista tekstów lokalne pakiety providerów znajdujące się wewnątrz projektu
targets lista tekstów żądane środowiska: embedded, server, report
outDir tekst katalog wynikowy, względem katalogu projektu

name, entry i outDir nie mogą być puste. targets musi zawierać co najmniej jedną niepustą wartość. doctor dodatkowo sprawdza, czy manifest, źródło i układ projektu są ze sobą zgodne.

Jak wybierane są środowiska

flowchart TD
    ARG{"Podano --target?"}
    ARG -->|"tak"| CLI["Wybór z CLI"]
    ARG -->|"nie"| MANIFEST["Wybór z targets"]
    CLI --> SOURCE{"Źródło zawiera<br/>wykonywalne zadanie?"}
    MANIFEST --> SOURCE
    SOURCE -->|"tak"| BUILD["Generowanie"]
    SOURCE -->|"nie"| STOP["Diagnostyka B0003"]

Jawne --target zastępuje wybór z manifestu dla danego wywołania. Sam wpis w targets nie tworzy kodu dla środowiska: źródło musi zawierać odpowiadające mu wykonywalne zadanie.

Własny kod i konfiguracja

Pliki autora przechowuj poza out/. W trybie projektu kompilator obsługuje następujące nakładki:

Plik autora Miejsce w wyniku
user/server/go.mod out/server/go.mod
user/embedded/platformio.ini out/embedded/platformio.ini
user/embedded/CMakeLists.txt out/embedded/CMakeLists.txt
pozostałe pliki user/server/**/*.go out/server/user/
pliki źródłowe C/C++ z user/embedded/ out/embedded/user/

Manifest artefaktów oznacza skopiowane lub zastępujące pliki jako user-overlay. Oryginał pozostaje w user/ i nie powinien być usuwany przez clean.

Moduły i biblioteki lokalne

sourceRoots = ["src"]
localLibraries = ["home_db=../home-db/src"]

Plik src/domain/observations.jnx ma tożsamość domain::observations. Plik ../home-db/src/contracts.jnx otrzymuje prefiks biblioteki i jest widoczny jako home_db::contracts.

Katalog źródłowy nie może wychodzić poza projekt, nakładać się na drugi katalog źródłowy ani tworzyć nazw różniących się wyłącznie wielkością liter. Biblioteka lokalna musi mieć jawny namespace. Udany build zapisuje dokładny graf i SHA-256 źródeł w out/debug/junexis.modules.lock.json.

Praktyczny dobór form importu, podział katalogów oraz integrację z providerem bazy pokazuje przewodnik: moduły i baza danych.

Pakiet providera i binding storage

Projekt może wskazać lokalny pakiet oraz jawnie związać go z deklaracją storage:

providerPackages = ["providers/postgresql"]

[storage.home]
declaration = "HomeStore"
provider = "postgresql"
providerVersion = "0.1.0"
config.connection = "secret:HOME_DATABASE_URL"
config.poolSize = "10"

Katalog pakietu musi pozostać wewnątrz projektu i zawierać junexis.provider.toml. Narzędzia sprawdzają ID, dokładną wersję, kontrakt storage, wersję ABI, capabilities, schemat konfiguracji oraz SHA-256 zadeklarowanych plików.

Konfiguracja może pochodzić z:

  • secret:NAZWA — sekretu wdrożenia,
  • env:NAZWA — zmiennej środowiska,
  • literal:wartość albo zwykłego tekstu — jawnej wartości niesekretnej.

Provider określa, które klucze są sekretne. Próba wpisania connection stringa bezpośrednio do takiego klucza zatrzymuje pracę. Komunikat nie powtarza odrzuconej wartości.

Udane budowanie zapisuje out/debug/junexis.providers.lock.json. Blokada zawiera wersje, capabilities, driver, względne źródło pakietu i SHA-256. Zachowuje rodzaj oraz nazwę referencji do sekretu, ale nigdy jego wartość.

Obsługiwany zapis TOML

Parser manifestu przyjmuje przypisania tekstowe, jednowierszowe listy tekstów, puste wiersze, komentarze rozpoczynane przez # poza tekstem oraz sekcje [storage.<nazwa>]. Nie traktuj go jak pełnej implementacji TOML: nie używaj innych sekcji, list wielowierszowych ani wartości liczbowych czy logicznych.

#komentarz projektu
name = "monitor"
entry = "src/main.jnx"
sourceRoots = ["src"]
targets = ["embedded", "server", "report"]
outDir = "out"

Po ręcznej zmianie manifestu uruchom:

junexis doctor
junexis check

Zobacz też kontrakty wyniku budowania i architekturę budowania.