Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
427 changes: 83 additions & 344 deletions README.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ module github.com/wago-org/workers

go 1.24.0

require github.com/wago-org/wago v0.0.0-20260711053856-7d89b98c854d
require github.com/wago-org/wago v0.0.0-20260812144524-1c58c9862d25
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
github.com/wago-org/wago v0.0.0-20260711053856-7d89b98c854d h1:fzJn6UlsGwiqwyTN+Si6oFoETUhUoJ/Rphhx94M5Pqc=
github.com/wago-org/wago v0.0.0-20260711053856-7d89b98c854d/go.mod h1:d44S+59u6VHeqEaIZBKTeB8viyswTP97O9IKA6Gyzc4=
github.com/wago-org/wago v0.0.0-20260812144524-1c58c9862d25 h1:gopNHvaUaDSzmW2Hfd32r8dOwwzYUHH3ph1L/IuhJUA=
github.com/wago-org/wago v0.0.0-20260812144524-1c58c9862d25/go.mod h1:6XmxI3S5qJ+YAzObyXjC6FmxHtbLhBBxrglzix42zl8=
100 changes: 100 additions & 0 deletions manifest_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
package workers_test

import (
"encoding/json"
"os"
"reflect"
"testing"

"github.com/wago-org/wago"
"github.com/wago-org/workers"
workersregister "github.com/wago-org/workers/register"
)

type manifestAuthor struct {
Name string `json:"name"`
}

type manifestPackage struct {
Module string `json:"module"`
Version string `json:"version"`
Name string `json:"name"`
Description string `json:"description"`
Stability wago.Stability `json:"stability"`
License string `json:"license"`
Homepage string `json:"homepage"`
Repository string `json:"repository"`
Authors []manifestAuthor `json:"authors"`
Engines map[string]string `json:"engines"`
Platforms []string `json:"platforms"`
}

func TestManifestMatchesCatalogMetadata(t *testing.T) {
raw, err := os.ReadFile("wago.json")
if err != nil {
t.Fatal(err)
}
var manifest struct {
Schema string `json:"$schema"`
Package manifestPackage `json:"package"`
Plugins map[string]string `json:"plugins"`
}
if err := json.Unmarshal(raw, &manifest); err != nil {
t.Fatal(err)
}
if manifest.Schema != "https://wago.sh/v1/schema.json" {
t.Fatalf("manifest schema = %q", manifest.Schema)
}
providers := workersregister.Providers()
if len(providers) != 1 {
t.Fatalf("catalog providers = %d, want 1", len(providers))
}
definition := workers.Definition()
if !reflect.DeepEqual(providers[0].Definition, definition) {
t.Fatalf("catalog definition drifted\ncatalog=%#v\ncanonical=%#v", providers[0].Definition, definition)
}
assertManifestMetadata(t, manifest.Package, definition)
if len(manifest.Plugins) != 0 {
t.Fatalf("leaf manifest dependencies = %v", manifest.Plugins)
}
assertProviderCatalogCurrent(t, "github.com/wago-org/workers/register", providers)
}

func assertProviderCatalogCurrent(t *testing.T, importPath string, providers []wago.PluginProvider) {
t.Helper()
want, err := wago.EncodeProviderCatalog(importPath, providers)
if err != nil {
t.Fatal(err)
}
got, err := os.ReadFile(wago.ProviderCatalogFile)
if err != nil {
t.Fatal(err)
}
if !reflect.DeepEqual(got, want) {
t.Fatalf("%s is stale; run wago plugin catalog", wago.ProviderCatalogFile)
}
if _, err := wago.DecodeProviderCatalog(got); err != nil {
t.Fatalf("%s: %v", wago.ProviderCatalogFile, err)
}
}

func assertManifestMetadata(t *testing.T, manifest manifestPackage, definition wago.PluginDefinition) {
t.Helper()
authors := make([]string, len(manifest.Authors))
for i := range manifest.Authors {
authors[i] = manifest.Authors[i].Name
}
if manifest.Module != definition.ID ||
manifest.Version != definition.Version ||
manifest.Name != definition.Name ||
manifest.Description != definition.Description ||
manifest.Stability != definition.Stability ||
manifest.License != definition.Provenance.License ||
manifest.Homepage != definition.Provenance.Homepage ||
manifest.Repository != definition.Provenance.Repository ||
!reflect.DeepEqual(authors, definition.Provenance.Authors) ||
!reflect.DeepEqual(manifest.Engines, definition.Compatibility.Engines) ||
!reflect.DeepEqual(manifest.Platforms, definition.Compatibility.Platforms) {
t.Fatalf("manifest metadata drifted\nmanifest=%#v\ndefinition=%#v", manifest, definition)
}
}
12 changes: 12 additions & 0 deletions register/catalog.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// Package register exposes Workers' explicit provider catalog to generated Wago
// runtimes. Importing this package has no registration side effects.
package register

import (
"github.com/wago-org/wago"
"github.com/wago-org/workers"
)

func Providers() []wago.PluginProvider {
return []wago.PluginProvider{workers.Provider()}
}
6 changes: 0 additions & 6 deletions register/register.go

This file was deleted.

26 changes: 15 additions & 11 deletions wago.json
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
{
"$schema": "https://wago.sh/v0/schema.json",
"module": "github.com/wago-org/workers",
"version": "0.0.0",
"name": "Wago Workers",
"short": "workers",
"description": "Bounded, composable WebAssembly worker primitives for Wago plugins.",
"license": "Apache-2.0",
"repository": "https://github.com/wago-org/workers",
"homepage": "https://github.com/wago-org/workers#readme",
"category": "concurrency",
"tags": ["workers", "concurrency", "webassembly"]
"$schema": "https://wago.sh/v1/schema.json",
"package": {
"module": "github.com/wago-org/workers",
"version": "0.1.0",
"name": "Workers",
"description": "Bounded, composable WebAssembly worker primitives for Wago plugins.",
"stability": "experimental",
"license": "Apache-2.0",
"homepage": "https://github.com/wago-org/workers#readme",
"repository": "https://github.com/wago-org/workers",
"category": "concurrency",
"tags": ["workers", "concurrency", "webassembly", "wasm"],
"authors": [{"name": "Wago contributors"}],
"engines": {"wago": ">=0.1.0"}
}
}
68 changes: 68 additions & 0 deletions wago.providers.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
{
"$schema": "https://wago.sh/v1/providers.schema.json",
"providers": [
{
"importPath": "github.com/wago-org/workers/register",
"definition": {
"id": "github.com/wago-org/workers",
"name": "Workers",
"version": "0.1.0",
"description": "Bounded, composable WebAssembly worker primitives for Wago plugins.",
"stability": "experimental",
"compatibility": {
"engines": {
"wago": "\u003e=0.1.0"
}
},
"provenance": {
"homepage": "https://github.com/wago-org/workers#readme",
"repository": "https://github.com/wago-org/workers",
"license": "Apache-2.0",
"authors": [
"Wago contributors"
]
},
"authorities": [
{
"name": "instance.close.observe",
"mode": "required",
"reason": "stop linked workers when their exact creator closes",
"scope": {}
},
{
"name": "instance.manage",
"mode": "required",
"reason": "fork and own bounded worker instances",
"scope": {
"maxInstances": 1024,
"maxMemoryBytes": 4294967296
}
}
],
"configSchema": {
"additionalProperties": false,
"properties": {
"maxLiveWorkers": {
"maximum": 65536,
"minimum": 1,
"type": "integer"
},
"maxQueueBytes": {
"maximum": 68719476736,
"minimum": 1,
"type": "integer"
}
},
"type": "object"
},
"provides": [
{
"id": "github.com/wago-org/workers/service",
"major": 1
}
]
},
"definitionDigest": "sha256:efe2db34dbba3b2782a5ec3fbc741945bb98c2d5ddb20d127b0fa31de4fb3425"
}
]
}
Loading
Loading