From 9ff8b5294ac00937905c15e00661a85d6ffe073b Mon Sep 17 00:00:00 2001 From: Snider Date: Thu, 30 Apr 2026 12:25:02 +0100 Subject: [PATCH 1/3] chore(app): restructure Go module under go/ + go.work + external/ submodules MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Lift Go module into go/ subtree for cross-language repo symmetry (matches core/api v0.12.0 shape). Module path stays dappco.re/go/app — consumers see no change. Adds go.work + external/ submodules for dev workspace mode; CI uses GOWORK=off (already set in .woodpecker.yml). --- .gitmodules | 8 +++++ .woodpecker.yml | 4 +-- CLAUDE.md | 34 +++++++++++++++++++ external/config | 1 + external/go | 1 + go.work | 12 +++++++ go/CLAUDE.md | 1 + go/README.md | 1 + access.go => go/access.go | 0 access_test.go => go/access_test.go | 0 app.go => go/app.go | 0 app_test.go => go/app_test.go | 0 {cmd => go/cmd}/core-app/main.go | 0 {cmd => go/cmd}/core-app/main_test.go | 0 {cmd => go/cmd}/core-app/pkg.go | 0 .../cmd}/core-app/pkg_marketplace_test.go | 0 {cmd => go/cmd}/core-app/pkg_test.go | 0 {cmd => go/cmd}/core-app/sdk.go | 0 {cmd => go/cmd}/core-app/sdk_test.go | 0 compile.go => go/compile.go | 0 compile_json.go => go/compile_json.go | 0 .../compile_json_test.go | 0 compile_test.go => go/compile_test.go | 0 conclave.go => go/conclave.go | 0 conclave_test.go => go/conclave_test.go | 0 config.go => go/config.go | 0 config_template.go => go/config_template.go | 0 .../config_template_example_test.go | 0 .../config_template_test.go | 0 config_test.go => go/config_test.go | 0 discover.go => go/discover.go | 0 discover_test.go => go/discover_test.go | 0 go/docs | 1 + export_test.go => go/export_test.go | 0 go.mod => go/go.mod | 0 go.sum => go/go.sum | 0 host.go => go/host.go | 0 host_test.go => go/host_test.go | 0 integration_test.go => go/integration_test.go | 0 integrity.go => go/integrity.go | 0 layout.go => go/layout.go | 0 layout_test.go => go/layout_test.go | 0 marketplace.go => go/marketplace.go | 0 .../marketplace_install_test.go | 0 marketplace_test.go => go/marketplace_test.go | 0 .../marketplace_update_test.go | 0 .../marketplace_verify.go | 0 .../marketplace_verify_test.go | 0 modules.go => go/modules.go | 0 modules_test.go => go/modules_test.go | 0 permissions.go => go/permissions.go | 0 permissions_test.go => go/permissions_test.go | 0 pkg.go => go/pkg.go | 0 pkg_electron.go => go/pkg_electron.go | 0 .../pkg_electron_extract.go | 0 .../pkg_electron_extract_tar.go | 0 .../pkg_electron_extract_tar_test.go | 0 .../pkg_electron_extract_test.go | 0 .../pkg_electron_fetch.go | 0 .../pkg_electron_fetch_test.go | 0 .../pkg_electron_test.go | 0 pkg_local_test.go => go/pkg_local_test.go | 0 pkg_pwa.go => go/pkg_pwa.go | 0 pkg_pwa_test.go => go/pkg_pwa_test.go | 0 pkg_repo.go => go/pkg_repo.go | 0 pkg_repo_test.go => go/pkg_repo_test.go | 0 pkg_test.go => go/pkg_test.go | 0 pkg_type.go => go/pkg_type.go | 0 pkg_type_test.go => go/pkg_type_test.go | 0 pkg_update_test.go => go/pkg_update_test.go | 0 pkg_web.go => go/pkg_web.go | 0 pkg_web_test.go => go/pkg_web_test.go | 0 .../pkg_wrap_example_test.go | 0 pkg_wrap_test.go => go/pkg_wrap_test.go | 0 plugin.go => go/plugin.go | 0 plugin_test.go => go/plugin_test.go | 0 pwa_runtime.go => go/pwa_runtime.go | 0 registry.go => go/registry.go | 0 registry_test.go => go/registry_test.go | 0 runtime.go => go/runtime.go | 0 runtime_process.go => go/runtime_process.go | 0 runtime_store.go => go/runtime_store.go | 0 .../runtime_store_internal_test.go | 0 .../runtime_store_sigil_test.go | 0 .../runtime_store_test.go | 0 runtime_test.go => go/runtime_test.go | 0 sdk.go => go/sdk.go | 0 sdk_test.go => go/sdk_test.go | 0 sign.go => go/sign.go | 0 sign_test.go => go/sign_test.go | 0 start.go => go/start.go | 0 start_test.go => go/start_test.go | 0 store_test.go => go/store_test.go | 0 {tests => go/tests}/cli/Taskfile.yaml | 0 {tests => go/tests}/cli/app/Taskfile.yaml | 0 {tests => go/tests}/cli/boot/Taskfile.yaml | 0 .../cli/boot/fixtures/project/.core/view.yaml | 0 {tests => go/tests}/cli/compile/Taskfile.yaml | 0 .../compile/fixtures/project/.core/view.yaml | 0 .../tests}/cli/marketplace/Taskfile.yaml | 0 .../home/.core/marketplace/index.json | 0 .../home/.core/marketplace/tools/index.json | 0 {tests => go/tests}/cli/pkg/Taskfile.yaml | 0 .../home/.core/apps/ax10-pkg/.core/view.yaml | 0 {tests => go/tests}/cli/sdk/Taskfile.yaml | 0 .../cli/sdk/fixtures/project/.core/view.yaml | 0 {tests => go/tests}/cli/sign/Taskfile.yaml | 0 .../cli/sign/fixtures/project/.core/view.yaml | 0 validate.go => go/validate.go | 0 validate_test.go => go/validate_test.go | 0 verify.go => go/verify.go | 0 verify_test.go => go/verify_test.go | 0 watch.go => go/watch.go | 0 watch_test.go => go/watch_test.go | 0 workspace.go => go/workspace.go | 0 .../workspace_crypto_metadata.go | 0 .../workspace_crypto_metadata_test.go | 0 workspace_test.go => go/workspace_test.go | 0 yaml.go => go/yaml.go | 0 yaml_test.go => go/yaml_test.go | 0 sonar-project.properties | 2 +- 121 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 .gitmodules create mode 160000 external/config create mode 160000 external/go create mode 100644 go.work create mode 120000 go/CLAUDE.md create mode 120000 go/README.md rename access.go => go/access.go (100%) rename access_test.go => go/access_test.go (100%) rename app.go => go/app.go (100%) rename app_test.go => go/app_test.go (100%) rename {cmd => go/cmd}/core-app/main.go (100%) rename {cmd => go/cmd}/core-app/main_test.go (100%) rename {cmd => go/cmd}/core-app/pkg.go (100%) rename {cmd => go/cmd}/core-app/pkg_marketplace_test.go (100%) rename {cmd => go/cmd}/core-app/pkg_test.go (100%) rename {cmd => go/cmd}/core-app/sdk.go (100%) rename {cmd => go/cmd}/core-app/sdk_test.go (100%) rename compile.go => go/compile.go (100%) rename compile_json.go => go/compile_json.go (100%) rename compile_json_test.go => go/compile_json_test.go (100%) rename compile_test.go => go/compile_test.go (100%) rename conclave.go => go/conclave.go (100%) rename conclave_test.go => go/conclave_test.go (100%) rename config.go => go/config.go (100%) rename config_template.go => go/config_template.go (100%) rename config_template_example_test.go => go/config_template_example_test.go (100%) rename config_template_test.go => go/config_template_test.go (100%) rename config_test.go => go/config_test.go (100%) rename discover.go => go/discover.go (100%) rename discover_test.go => go/discover_test.go (100%) create mode 120000 go/docs rename export_test.go => go/export_test.go (100%) rename go.mod => go/go.mod (100%) rename go.sum => go/go.sum (100%) rename host.go => go/host.go (100%) rename host_test.go => go/host_test.go (100%) rename integration_test.go => go/integration_test.go (100%) rename integrity.go => go/integrity.go (100%) rename layout.go => go/layout.go (100%) rename layout_test.go => go/layout_test.go (100%) rename marketplace.go => go/marketplace.go (100%) rename marketplace_install_test.go => go/marketplace_install_test.go (100%) rename marketplace_test.go => go/marketplace_test.go (100%) rename marketplace_update_test.go => go/marketplace_update_test.go (100%) rename marketplace_verify.go => go/marketplace_verify.go (100%) rename marketplace_verify_test.go => go/marketplace_verify_test.go (100%) rename modules.go => go/modules.go (100%) rename modules_test.go => go/modules_test.go (100%) rename permissions.go => go/permissions.go (100%) rename permissions_test.go => go/permissions_test.go (100%) rename pkg.go => go/pkg.go (100%) rename pkg_electron.go => go/pkg_electron.go (100%) rename pkg_electron_extract.go => go/pkg_electron_extract.go (100%) rename pkg_electron_extract_tar.go => go/pkg_electron_extract_tar.go (100%) rename pkg_electron_extract_tar_test.go => go/pkg_electron_extract_tar_test.go (100%) rename pkg_electron_extract_test.go => go/pkg_electron_extract_test.go (100%) rename pkg_electron_fetch.go => go/pkg_electron_fetch.go (100%) rename pkg_electron_fetch_test.go => go/pkg_electron_fetch_test.go (100%) rename pkg_electron_test.go => go/pkg_electron_test.go (100%) rename pkg_local_test.go => go/pkg_local_test.go (100%) rename pkg_pwa.go => go/pkg_pwa.go (100%) rename pkg_pwa_test.go => go/pkg_pwa_test.go (100%) rename pkg_repo.go => go/pkg_repo.go (100%) rename pkg_repo_test.go => go/pkg_repo_test.go (100%) rename pkg_test.go => go/pkg_test.go (100%) rename pkg_type.go => go/pkg_type.go (100%) rename pkg_type_test.go => go/pkg_type_test.go (100%) rename pkg_update_test.go => go/pkg_update_test.go (100%) rename pkg_web.go => go/pkg_web.go (100%) rename pkg_web_test.go => go/pkg_web_test.go (100%) rename pkg_wrap_example_test.go => go/pkg_wrap_example_test.go (100%) rename pkg_wrap_test.go => go/pkg_wrap_test.go (100%) rename plugin.go => go/plugin.go (100%) rename plugin_test.go => go/plugin_test.go (100%) rename pwa_runtime.go => go/pwa_runtime.go (100%) rename registry.go => go/registry.go (100%) rename registry_test.go => go/registry_test.go (100%) rename runtime.go => go/runtime.go (100%) rename runtime_process.go => go/runtime_process.go (100%) rename runtime_store.go => go/runtime_store.go (100%) rename runtime_store_internal_test.go => go/runtime_store_internal_test.go (100%) rename runtime_store_sigil_test.go => go/runtime_store_sigil_test.go (100%) rename runtime_store_test.go => go/runtime_store_test.go (100%) rename runtime_test.go => go/runtime_test.go (100%) rename sdk.go => go/sdk.go (100%) rename sdk_test.go => go/sdk_test.go (100%) rename sign.go => go/sign.go (100%) rename sign_test.go => go/sign_test.go (100%) rename start.go => go/start.go (100%) rename start_test.go => go/start_test.go (100%) rename store_test.go => go/store_test.go (100%) rename {tests => go/tests}/cli/Taskfile.yaml (100%) rename {tests => go/tests}/cli/app/Taskfile.yaml (100%) rename {tests => go/tests}/cli/boot/Taskfile.yaml (100%) rename {tests => go/tests}/cli/boot/fixtures/project/.core/view.yaml (100%) rename {tests => go/tests}/cli/compile/Taskfile.yaml (100%) rename {tests => go/tests}/cli/compile/fixtures/project/.core/view.yaml (100%) rename {tests => go/tests}/cli/marketplace/Taskfile.yaml (100%) rename {tests => go/tests}/cli/marketplace/fixtures/home/.core/marketplace/index.json (100%) rename {tests => go/tests}/cli/marketplace/fixtures/home/.core/marketplace/tools/index.json (100%) rename {tests => go/tests}/cli/pkg/Taskfile.yaml (100%) rename {tests => go/tests}/cli/pkg/fixtures/home/.core/apps/ax10-pkg/.core/view.yaml (100%) rename {tests => go/tests}/cli/sdk/Taskfile.yaml (100%) rename {tests => go/tests}/cli/sdk/fixtures/project/.core/view.yaml (100%) rename {tests => go/tests}/cli/sign/Taskfile.yaml (100%) rename {tests => go/tests}/cli/sign/fixtures/project/.core/view.yaml (100%) rename validate.go => go/validate.go (100%) rename validate_test.go => go/validate_test.go (100%) rename verify.go => go/verify.go (100%) rename verify_test.go => go/verify_test.go (100%) rename watch.go => go/watch.go (100%) rename watch_test.go => go/watch_test.go (100%) rename workspace.go => go/workspace.go (100%) rename workspace_crypto_metadata.go => go/workspace_crypto_metadata.go (100%) rename workspace_crypto_metadata_test.go => go/workspace_crypto_metadata_test.go (100%) rename workspace_test.go => go/workspace_test.go (100%) rename yaml.go => go/yaml.go (100%) rename yaml_test.go => go/yaml_test.go (100%) diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..c9e001a --- /dev/null +++ b/.gitmodules @@ -0,0 +1,8 @@ +[submodule "external/go"] + path = external/go + url = https://github.com/dappcore/go.git + branch = dev +[submodule "external/config"] + path = external/config + url = https://github.com/dappcore/config.git + branch = dev diff --git a/.woodpecker.yml b/.woodpecker.yml index 107f0e6..60358ee 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -14,7 +14,7 @@ steps: GOFLAGS: -buildvcs=false GOWORK: "off" commands: - - golangci-lint run --timeout=5m ./... + - cd go && golangci-lint run --timeout=5m ./... - name: go-test image: golang:1.26-alpine @@ -25,7 +25,7 @@ steps: CGO_ENABLED: "1" commands: - apk add --no-cache git build-base - - go test -race -coverprofile=coverage.out -covermode=atomic -count=1 ./... + - cd go && go test -race -coverprofile=coverage.out -covermode=atomic -count=1 ./... - name: sonar image: sonarsource/sonar-scanner-cli:latest depends_on: [go-test] diff --git a/CLAUDE.md b/CLAUDE.md index 730354c..6f2dd18 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -16,6 +16,40 @@ Reference: `docs/RFC.md` — **keystone spec**. Every other Core RFC exists to m 6. **Config** — apply template + vars via core/config 7. **Start** — hand the composed window to core/gui + unblock entry action +## Repo Layout + +Go module now lives under `go/` and the repo root is cross-language / metadata only: + +``` +core/app/ +├── go/ ← Go module root (dappco.re/go/app) +│ ├── *.go +│ ├── go.mod, go.sum +│ ├── cmd/ +│ ├── tests/ +│ ├── README.md → ../README.md +│ ├── CLAUDE.md → ../CLAUDE.md +│ ├── AGENTS.md → ../AGENTS.md +│ └── docs → ../docs +├── docs/ ← cross-language docs source +├── README.md ← repo index / overview +├── CLAUDE.md ← this repo guidance +├── AGENTS.md ← repo-level instructions +├── LICENSE/LICENCE +├── .woodpecker.yml +├── sonar-project.properties +└── .gitignore +``` + +## Go Resolution Modes + +This repo is intentionally single-module from `go/` with no `go.work` in use: + +| Mode | When | What runs | +|------|------|-----------| +| **Module mode (default)** | Local work from `go/` | `go test`, `go vet`, `go test ./...`, and CLI builds use `go.mod` directly. | +| **Repro/CI mode** | Verification scripts | Use explicit override: `GOWORK=off GOPROXY=direct GOSUMDB=off GOFLAGS=-mod=mod` for stable behavior and strict cache isolation. | + ## Dependency boundary CoreApp is the orchestrator. It does NOT own: diff --git a/external/config b/external/config new file mode 160000 index 0000000..905216d --- /dev/null +++ b/external/config @@ -0,0 +1 @@ +Subproject commit 905216d06d66223d952b97a5002f44a87da909ea diff --git a/external/go b/external/go new file mode 160000 index 0000000..d661b70 --- /dev/null +++ b/external/go @@ -0,0 +1 @@ +Subproject commit d661b703e16183b3cbab101de189f688888a1174 diff --git a/go.work b/go.work new file mode 100644 index 0000000..10d283b --- /dev/null +++ b/go.work @@ -0,0 +1,12 @@ +go 1.26.2 + +// Workspace mode for development: pulls fresh code from external/ submodules. +// CI uses GOWORK=off to fall back to go/go.mod tags (reproducible). + +use ( + ./go + ./external/go + ./external/config + ./external/io + ./external/log +) diff --git a/go/CLAUDE.md b/go/CLAUDE.md new file mode 120000 index 0000000..949a29f --- /dev/null +++ b/go/CLAUDE.md @@ -0,0 +1 @@ +../CLAUDE.md \ No newline at end of file diff --git a/go/README.md b/go/README.md new file mode 120000 index 0000000..32d46ee --- /dev/null +++ b/go/README.md @@ -0,0 +1 @@ +../README.md \ No newline at end of file diff --git a/access.go b/go/access.go similarity index 100% rename from access.go rename to go/access.go diff --git a/access_test.go b/go/access_test.go similarity index 100% rename from access_test.go rename to go/access_test.go diff --git a/app.go b/go/app.go similarity index 100% rename from app.go rename to go/app.go diff --git a/app_test.go b/go/app_test.go similarity index 100% rename from app_test.go rename to go/app_test.go diff --git a/cmd/core-app/main.go b/go/cmd/core-app/main.go similarity index 100% rename from cmd/core-app/main.go rename to go/cmd/core-app/main.go diff --git a/cmd/core-app/main_test.go b/go/cmd/core-app/main_test.go similarity index 100% rename from cmd/core-app/main_test.go rename to go/cmd/core-app/main_test.go diff --git a/cmd/core-app/pkg.go b/go/cmd/core-app/pkg.go similarity index 100% rename from cmd/core-app/pkg.go rename to go/cmd/core-app/pkg.go diff --git a/cmd/core-app/pkg_marketplace_test.go b/go/cmd/core-app/pkg_marketplace_test.go similarity index 100% rename from cmd/core-app/pkg_marketplace_test.go rename to go/cmd/core-app/pkg_marketplace_test.go diff --git a/cmd/core-app/pkg_test.go b/go/cmd/core-app/pkg_test.go similarity index 100% rename from cmd/core-app/pkg_test.go rename to go/cmd/core-app/pkg_test.go diff --git a/cmd/core-app/sdk.go b/go/cmd/core-app/sdk.go similarity index 100% rename from cmd/core-app/sdk.go rename to go/cmd/core-app/sdk.go diff --git a/cmd/core-app/sdk_test.go b/go/cmd/core-app/sdk_test.go similarity index 100% rename from cmd/core-app/sdk_test.go rename to go/cmd/core-app/sdk_test.go diff --git a/compile.go b/go/compile.go similarity index 100% rename from compile.go rename to go/compile.go diff --git a/compile_json.go b/go/compile_json.go similarity index 100% rename from compile_json.go rename to go/compile_json.go diff --git a/compile_json_test.go b/go/compile_json_test.go similarity index 100% rename from compile_json_test.go rename to go/compile_json_test.go diff --git a/compile_test.go b/go/compile_test.go similarity index 100% rename from compile_test.go rename to go/compile_test.go diff --git a/conclave.go b/go/conclave.go similarity index 100% rename from conclave.go rename to go/conclave.go diff --git a/conclave_test.go b/go/conclave_test.go similarity index 100% rename from conclave_test.go rename to go/conclave_test.go diff --git a/config.go b/go/config.go similarity index 100% rename from config.go rename to go/config.go diff --git a/config_template.go b/go/config_template.go similarity index 100% rename from config_template.go rename to go/config_template.go diff --git a/config_template_example_test.go b/go/config_template_example_test.go similarity index 100% rename from config_template_example_test.go rename to go/config_template_example_test.go diff --git a/config_template_test.go b/go/config_template_test.go similarity index 100% rename from config_template_test.go rename to go/config_template_test.go diff --git a/config_test.go b/go/config_test.go similarity index 100% rename from config_test.go rename to go/config_test.go diff --git a/discover.go b/go/discover.go similarity index 100% rename from discover.go rename to go/discover.go diff --git a/discover_test.go b/go/discover_test.go similarity index 100% rename from discover_test.go rename to go/discover_test.go diff --git a/go/docs b/go/docs new file mode 120000 index 0000000..a9594bf --- /dev/null +++ b/go/docs @@ -0,0 +1 @@ +../docs \ No newline at end of file diff --git a/export_test.go b/go/export_test.go similarity index 100% rename from export_test.go rename to go/export_test.go diff --git a/go.mod b/go/go.mod similarity index 100% rename from go.mod rename to go/go.mod diff --git a/go.sum b/go/go.sum similarity index 100% rename from go.sum rename to go/go.sum diff --git a/host.go b/go/host.go similarity index 100% rename from host.go rename to go/host.go diff --git a/host_test.go b/go/host_test.go similarity index 100% rename from host_test.go rename to go/host_test.go diff --git a/integration_test.go b/go/integration_test.go similarity index 100% rename from integration_test.go rename to go/integration_test.go diff --git a/integrity.go b/go/integrity.go similarity index 100% rename from integrity.go rename to go/integrity.go diff --git a/layout.go b/go/layout.go similarity index 100% rename from layout.go rename to go/layout.go diff --git a/layout_test.go b/go/layout_test.go similarity index 100% rename from layout_test.go rename to go/layout_test.go diff --git a/marketplace.go b/go/marketplace.go similarity index 100% rename from marketplace.go rename to go/marketplace.go diff --git a/marketplace_install_test.go b/go/marketplace_install_test.go similarity index 100% rename from marketplace_install_test.go rename to go/marketplace_install_test.go diff --git a/marketplace_test.go b/go/marketplace_test.go similarity index 100% rename from marketplace_test.go rename to go/marketplace_test.go diff --git a/marketplace_update_test.go b/go/marketplace_update_test.go similarity index 100% rename from marketplace_update_test.go rename to go/marketplace_update_test.go diff --git a/marketplace_verify.go b/go/marketplace_verify.go similarity index 100% rename from marketplace_verify.go rename to go/marketplace_verify.go diff --git a/marketplace_verify_test.go b/go/marketplace_verify_test.go similarity index 100% rename from marketplace_verify_test.go rename to go/marketplace_verify_test.go diff --git a/modules.go b/go/modules.go similarity index 100% rename from modules.go rename to go/modules.go diff --git a/modules_test.go b/go/modules_test.go similarity index 100% rename from modules_test.go rename to go/modules_test.go diff --git a/permissions.go b/go/permissions.go similarity index 100% rename from permissions.go rename to go/permissions.go diff --git a/permissions_test.go b/go/permissions_test.go similarity index 100% rename from permissions_test.go rename to go/permissions_test.go diff --git a/pkg.go b/go/pkg.go similarity index 100% rename from pkg.go rename to go/pkg.go diff --git a/pkg_electron.go b/go/pkg_electron.go similarity index 100% rename from pkg_electron.go rename to go/pkg_electron.go diff --git a/pkg_electron_extract.go b/go/pkg_electron_extract.go similarity index 100% rename from pkg_electron_extract.go rename to go/pkg_electron_extract.go diff --git a/pkg_electron_extract_tar.go b/go/pkg_electron_extract_tar.go similarity index 100% rename from pkg_electron_extract_tar.go rename to go/pkg_electron_extract_tar.go diff --git a/pkg_electron_extract_tar_test.go b/go/pkg_electron_extract_tar_test.go similarity index 100% rename from pkg_electron_extract_tar_test.go rename to go/pkg_electron_extract_tar_test.go diff --git a/pkg_electron_extract_test.go b/go/pkg_electron_extract_test.go similarity index 100% rename from pkg_electron_extract_test.go rename to go/pkg_electron_extract_test.go diff --git a/pkg_electron_fetch.go b/go/pkg_electron_fetch.go similarity index 100% rename from pkg_electron_fetch.go rename to go/pkg_electron_fetch.go diff --git a/pkg_electron_fetch_test.go b/go/pkg_electron_fetch_test.go similarity index 100% rename from pkg_electron_fetch_test.go rename to go/pkg_electron_fetch_test.go diff --git a/pkg_electron_test.go b/go/pkg_electron_test.go similarity index 100% rename from pkg_electron_test.go rename to go/pkg_electron_test.go diff --git a/pkg_local_test.go b/go/pkg_local_test.go similarity index 100% rename from pkg_local_test.go rename to go/pkg_local_test.go diff --git a/pkg_pwa.go b/go/pkg_pwa.go similarity index 100% rename from pkg_pwa.go rename to go/pkg_pwa.go diff --git a/pkg_pwa_test.go b/go/pkg_pwa_test.go similarity index 100% rename from pkg_pwa_test.go rename to go/pkg_pwa_test.go diff --git a/pkg_repo.go b/go/pkg_repo.go similarity index 100% rename from pkg_repo.go rename to go/pkg_repo.go diff --git a/pkg_repo_test.go b/go/pkg_repo_test.go similarity index 100% rename from pkg_repo_test.go rename to go/pkg_repo_test.go diff --git a/pkg_test.go b/go/pkg_test.go similarity index 100% rename from pkg_test.go rename to go/pkg_test.go diff --git a/pkg_type.go b/go/pkg_type.go similarity index 100% rename from pkg_type.go rename to go/pkg_type.go diff --git a/pkg_type_test.go b/go/pkg_type_test.go similarity index 100% rename from pkg_type_test.go rename to go/pkg_type_test.go diff --git a/pkg_update_test.go b/go/pkg_update_test.go similarity index 100% rename from pkg_update_test.go rename to go/pkg_update_test.go diff --git a/pkg_web.go b/go/pkg_web.go similarity index 100% rename from pkg_web.go rename to go/pkg_web.go diff --git a/pkg_web_test.go b/go/pkg_web_test.go similarity index 100% rename from pkg_web_test.go rename to go/pkg_web_test.go diff --git a/pkg_wrap_example_test.go b/go/pkg_wrap_example_test.go similarity index 100% rename from pkg_wrap_example_test.go rename to go/pkg_wrap_example_test.go diff --git a/pkg_wrap_test.go b/go/pkg_wrap_test.go similarity index 100% rename from pkg_wrap_test.go rename to go/pkg_wrap_test.go diff --git a/plugin.go b/go/plugin.go similarity index 100% rename from plugin.go rename to go/plugin.go diff --git a/plugin_test.go b/go/plugin_test.go similarity index 100% rename from plugin_test.go rename to go/plugin_test.go diff --git a/pwa_runtime.go b/go/pwa_runtime.go similarity index 100% rename from pwa_runtime.go rename to go/pwa_runtime.go diff --git a/registry.go b/go/registry.go similarity index 100% rename from registry.go rename to go/registry.go diff --git a/registry_test.go b/go/registry_test.go similarity index 100% rename from registry_test.go rename to go/registry_test.go diff --git a/runtime.go b/go/runtime.go similarity index 100% rename from runtime.go rename to go/runtime.go diff --git a/runtime_process.go b/go/runtime_process.go similarity index 100% rename from runtime_process.go rename to go/runtime_process.go diff --git a/runtime_store.go b/go/runtime_store.go similarity index 100% rename from runtime_store.go rename to go/runtime_store.go diff --git a/runtime_store_internal_test.go b/go/runtime_store_internal_test.go similarity index 100% rename from runtime_store_internal_test.go rename to go/runtime_store_internal_test.go diff --git a/runtime_store_sigil_test.go b/go/runtime_store_sigil_test.go similarity index 100% rename from runtime_store_sigil_test.go rename to go/runtime_store_sigil_test.go diff --git a/runtime_store_test.go b/go/runtime_store_test.go similarity index 100% rename from runtime_store_test.go rename to go/runtime_store_test.go diff --git a/runtime_test.go b/go/runtime_test.go similarity index 100% rename from runtime_test.go rename to go/runtime_test.go diff --git a/sdk.go b/go/sdk.go similarity index 100% rename from sdk.go rename to go/sdk.go diff --git a/sdk_test.go b/go/sdk_test.go similarity index 100% rename from sdk_test.go rename to go/sdk_test.go diff --git a/sign.go b/go/sign.go similarity index 100% rename from sign.go rename to go/sign.go diff --git a/sign_test.go b/go/sign_test.go similarity index 100% rename from sign_test.go rename to go/sign_test.go diff --git a/start.go b/go/start.go similarity index 100% rename from start.go rename to go/start.go diff --git a/start_test.go b/go/start_test.go similarity index 100% rename from start_test.go rename to go/start_test.go diff --git a/store_test.go b/go/store_test.go similarity index 100% rename from store_test.go rename to go/store_test.go diff --git a/tests/cli/Taskfile.yaml b/go/tests/cli/Taskfile.yaml similarity index 100% rename from tests/cli/Taskfile.yaml rename to go/tests/cli/Taskfile.yaml diff --git a/tests/cli/app/Taskfile.yaml b/go/tests/cli/app/Taskfile.yaml similarity index 100% rename from tests/cli/app/Taskfile.yaml rename to go/tests/cli/app/Taskfile.yaml diff --git a/tests/cli/boot/Taskfile.yaml b/go/tests/cli/boot/Taskfile.yaml similarity index 100% rename from tests/cli/boot/Taskfile.yaml rename to go/tests/cli/boot/Taskfile.yaml diff --git a/tests/cli/boot/fixtures/project/.core/view.yaml b/go/tests/cli/boot/fixtures/project/.core/view.yaml similarity index 100% rename from tests/cli/boot/fixtures/project/.core/view.yaml rename to go/tests/cli/boot/fixtures/project/.core/view.yaml diff --git a/tests/cli/compile/Taskfile.yaml b/go/tests/cli/compile/Taskfile.yaml similarity index 100% rename from tests/cli/compile/Taskfile.yaml rename to go/tests/cli/compile/Taskfile.yaml diff --git a/tests/cli/compile/fixtures/project/.core/view.yaml b/go/tests/cli/compile/fixtures/project/.core/view.yaml similarity index 100% rename from tests/cli/compile/fixtures/project/.core/view.yaml rename to go/tests/cli/compile/fixtures/project/.core/view.yaml diff --git a/tests/cli/marketplace/Taskfile.yaml b/go/tests/cli/marketplace/Taskfile.yaml similarity index 100% rename from tests/cli/marketplace/Taskfile.yaml rename to go/tests/cli/marketplace/Taskfile.yaml diff --git a/tests/cli/marketplace/fixtures/home/.core/marketplace/index.json b/go/tests/cli/marketplace/fixtures/home/.core/marketplace/index.json similarity index 100% rename from tests/cli/marketplace/fixtures/home/.core/marketplace/index.json rename to go/tests/cli/marketplace/fixtures/home/.core/marketplace/index.json diff --git a/tests/cli/marketplace/fixtures/home/.core/marketplace/tools/index.json b/go/tests/cli/marketplace/fixtures/home/.core/marketplace/tools/index.json similarity index 100% rename from tests/cli/marketplace/fixtures/home/.core/marketplace/tools/index.json rename to go/tests/cli/marketplace/fixtures/home/.core/marketplace/tools/index.json diff --git a/tests/cli/pkg/Taskfile.yaml b/go/tests/cli/pkg/Taskfile.yaml similarity index 100% rename from tests/cli/pkg/Taskfile.yaml rename to go/tests/cli/pkg/Taskfile.yaml diff --git a/tests/cli/pkg/fixtures/home/.core/apps/ax10-pkg/.core/view.yaml b/go/tests/cli/pkg/fixtures/home/.core/apps/ax10-pkg/.core/view.yaml similarity index 100% rename from tests/cli/pkg/fixtures/home/.core/apps/ax10-pkg/.core/view.yaml rename to go/tests/cli/pkg/fixtures/home/.core/apps/ax10-pkg/.core/view.yaml diff --git a/tests/cli/sdk/Taskfile.yaml b/go/tests/cli/sdk/Taskfile.yaml similarity index 100% rename from tests/cli/sdk/Taskfile.yaml rename to go/tests/cli/sdk/Taskfile.yaml diff --git a/tests/cli/sdk/fixtures/project/.core/view.yaml b/go/tests/cli/sdk/fixtures/project/.core/view.yaml similarity index 100% rename from tests/cli/sdk/fixtures/project/.core/view.yaml rename to go/tests/cli/sdk/fixtures/project/.core/view.yaml diff --git a/tests/cli/sign/Taskfile.yaml b/go/tests/cli/sign/Taskfile.yaml similarity index 100% rename from tests/cli/sign/Taskfile.yaml rename to go/tests/cli/sign/Taskfile.yaml diff --git a/tests/cli/sign/fixtures/project/.core/view.yaml b/go/tests/cli/sign/fixtures/project/.core/view.yaml similarity index 100% rename from tests/cli/sign/fixtures/project/.core/view.yaml rename to go/tests/cli/sign/fixtures/project/.core/view.yaml diff --git a/validate.go b/go/validate.go similarity index 100% rename from validate.go rename to go/validate.go diff --git a/validate_test.go b/go/validate_test.go similarity index 100% rename from validate_test.go rename to go/validate_test.go diff --git a/verify.go b/go/verify.go similarity index 100% rename from verify.go rename to go/verify.go diff --git a/verify_test.go b/go/verify_test.go similarity index 100% rename from verify_test.go rename to go/verify_test.go diff --git a/watch.go b/go/watch.go similarity index 100% rename from watch.go rename to go/watch.go diff --git a/watch_test.go b/go/watch_test.go similarity index 100% rename from watch_test.go rename to go/watch_test.go diff --git a/workspace.go b/go/workspace.go similarity index 100% rename from workspace.go rename to go/workspace.go diff --git a/workspace_crypto_metadata.go b/go/workspace_crypto_metadata.go similarity index 100% rename from workspace_crypto_metadata.go rename to go/workspace_crypto_metadata.go diff --git a/workspace_crypto_metadata_test.go b/go/workspace_crypto_metadata_test.go similarity index 100% rename from workspace_crypto_metadata_test.go rename to go/workspace_crypto_metadata_test.go diff --git a/workspace_test.go b/go/workspace_test.go similarity index 100% rename from workspace_test.go rename to go/workspace_test.go diff --git a/yaml.go b/go/yaml.go similarity index 100% rename from yaml.go rename to go/yaml.go diff --git a/yaml_test.go b/go/yaml_test.go similarity index 100% rename from yaml_test.go rename to go/yaml_test.go diff --git a/sonar-project.properties b/sonar-project.properties index 1a4652d..81c3396 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -5,4 +5,4 @@ sonar.exclusions=**/vendor/**,**/third_party/**,**/.tmp/**,**/gomodcache/**,**/n sonar.tests=. sonar.test.inclusions=**/*_test.go,**/*.test.ts,**/*.test.js,**/*.spec.ts,**/*.spec.js sonar.test.exclusions=**/vendor/**,**/third_party/**,**/.tmp/**,**/gomodcache/**,**/node_modules/**,**/dist/**,**/build/** -sonar.go.coverage.reportPaths=coverage.out +sonar.go.coverage.reportPaths=go/coverage.out From 6be42e227e92b5bae89638bc03d554ac3faa7732 Mon Sep 17 00:00:00 2001 From: Snider Date: Thu, 30 Apr 2026 12:26:48 +0100 Subject: [PATCH 2/3] fix(app): add missing external/{io,log} submodules MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit v0.10.0 commit listed ./external/io + ./external/log in go.work but the initial submodule add failed because the dep→github URL mapping was wrong (used dappcore/io / dappcore/log; the real repos are dappcore/go-io and dappcore/go-log — pure-Go libs kept the go- prefix). Now correctly mapped via factory/restructure-postprocess.sh. --- .gitmodules | 8 ++++++++ external/io | 1 + external/log | 1 + 3 files changed, 10 insertions(+) create mode 160000 external/io create mode 160000 external/log diff --git a/.gitmodules b/.gitmodules index c9e001a..e7aa8ff 100644 --- a/.gitmodules +++ b/.gitmodules @@ -6,3 +6,11 @@ path = external/config url = https://github.com/dappcore/config.git branch = dev +[submodule "external/io"] + path = external/io + url = https://github.com/dappcore/go-io.git + branch = dev +[submodule "external/log"] + path = external/log + url = https://github.com/dappcore/go-log.git + branch = dev diff --git a/external/io b/external/io new file mode 160000 index 0000000..789653d --- /dev/null +++ b/external/io @@ -0,0 +1 @@ +Subproject commit 789653dfc376383a3873993cdb875c8c717e4b05 diff --git a/external/log b/external/log new file mode 160000 index 0000000..df05298 --- /dev/null +++ b/external/log @@ -0,0 +1 @@ +Subproject commit df0529839b2ab786a6a3da374fa664867d5f9f09 From 0708dab7d5aa97af51cb9881b0e4227cb5a2975a Mon Sep 17 00:00:00 2001 From: Snider Date: Thu, 30 Apr 2026 15:24:11 +0100 Subject: [PATCH 3/3] ci(public): add github actions workflow + README badge block Mirrors api shape: .github/workflows/ci.yml runs test+coverage (Codecov), golangci-lint --tests=false, and sonarcloud-scan-action to dappcore_app. README gets the badge block (CI / quality gate / cov / security / maintainability / reliability / smells / NCLOC / pkg.go.dev / license). GOPROXY=direct GOSUMDB=off env in workflow to dodge the proxy.golang.org stale-zip pattern that broke api's first run. Internal Woodpecker pipeline at ci.lthn.sh continues unchanged. --- .github/workflows/ci.yml | 80 ++++++++++++++++++++++++++++++++++++++++ README.md | 16 ++++++++ 2 files changed, 96 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..5b41eca --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,80 @@ +name: CI + +on: + push: + branches: [dev, main] + pull_request: + branches: [dev, main] + +permissions: + contents: read + +env: + GOFLAGS: -buildvcs=false + GOWORK: "off" + GOPROXY: "direct" + GOSUMDB: "off" + +jobs: + test: + name: Test + Coverage + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v5 + with: + fetch-depth: 0 + - uses: actions/setup-go@v6 + with: + go-version: '1.26' + - name: Test with coverage + working-directory: go + run: go test -race -coverprofile=coverage.out -covermode=atomic -count=1 ./... + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v5 + with: + token: ${{ secrets.CODECOV_TOKEN }} + files: go/coverage.out + flags: unittests + fail_ci_if_error: false + + lint: + name: golangci-lint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v5 + - uses: actions/setup-go@v6 + with: + go-version: '1.26' + - uses: golangci/golangci-lint-action@v9 + with: + version: latest + working-directory: go + args: --timeout=5m --tests=false + + sonarcloud: + name: SonarCloud + runs-on: ubuntu-latest + needs: test + steps: + - uses: actions/checkout@v5 + with: + fetch-depth: 0 + - uses: actions/setup-go@v6 + with: + go-version: '1.26' + - name: Test for coverage + working-directory: go + run: go test -coverprofile=coverage.out -covermode=atomic -count=1 ./... + - name: SonarCloud Scan + uses: SonarSource/sonarqube-scan-action@v6 + env: + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + with: + args: > + -Dsonar.organization=dappcore + -Dsonar.projectKey=dappcore_app + -Dsonar.sources=go + -Dsonar.exclusions=**/vendor/**,**/third_party/**,**/.tmp/**,**/*_test.go + -Dsonar.tests=go + -Dsonar.test.inclusions=**/*_test.go + -Dsonar.go.coverage.reportPaths=go/coverage.out diff --git a/README.md b/README.md index 9c4157f..a85d03f 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,21 @@ + + # core/app +> Lethean app installer + workspace manager — pkg discovery, manifest, integrity, runtime + +[![CI](https://github.com/dappcore/app/actions/workflows/ci.yml/badge.svg?branch=dev)](https://github.com/dappcore/app/actions/workflows/ci.yml) +[![Quality Gate](https://sonarcloud.io/api/project_badges/measure?project=dappcore_app&metric=alert_status)](https://sonarcloud.io/dashboard?id=dappcore_app) +[![Coverage](https://codecov.io/gh/dappcore/app/branch/dev/graph/badge.svg)](https://codecov.io/gh/dappcore/app) +[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=dappcore_app&metric=security_rating)](https://sonarcloud.io/dashboard?id=dappcore_app) +[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=dappcore_app&metric=sqale_rating)](https://sonarcloud.io/dashboard?id=dappcore_app) +[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=dappcore_app&metric=reliability_rating)](https://sonarcloud.io/dashboard?id=dappcore_app) +[![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=dappcore_app&metric=code_smells)](https://sonarcloud.io/dashboard?id=dappcore_app) +[![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=dappcore_app&metric=ncloc)](https://sonarcloud.io/dashboard?id=dappcore_app) +[![Go Reference](https://pkg.go.dev/badge/dappco.re/go/app.svg)](https://pkg.go.dev/dappco.re/go/app) +[![License: EUPL-1.2](https://img.shields.io/badge/License-EUPL--1.2-blue.svg)](https://eupl.eu/1.2/en/) + + The CoreApp keystone runtime — reads a `.core/view.yaml` manifest, runs the 7-step boot, enforces permissions, composes layout, starts the app. > "The keystone spec. Every other RFC exists to make this work."