Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
9e0af9f
Split one reconcile pass out of the coordinator; simulate runs it
iAlexeze Oct 11, 2026
4f39a6c
Assemble the runtime and gateway in app packages; split the gateway's…
iAlexeze Oct 11, 2026
bfc1090
Look up compiled reconcilers where they run; validation only checks
iAlexeze Oct 11, 2026
b0a5184
Validate by Catalog block; defaults after the checks
iAlexeze Oct 11, 2026
8e25c4e
One reconciler kind in /catalog and the console
iAlexeze Oct 11, 2026
b270389
Name the gateway's view serve.view and view.default becomes view.full…
iAlexeze Oct 12, 2026
a794836
Existing services as reconcilers
iAlexeze Oct 15, 2026
afb65cc
refactor: consolidate fatal exit through Exit
iAlexeze Oct 15, 2026
1841bcf
feat(gate): Alembic-style schema migrations for CRs
iAlexeze Oct 16, 2026
8932a60
refactor: rename pkg/tools/migrate to pkg/tools/rewrite
iAlexeze Oct 16, 2026
a12bc16
refactor(cli): promote migrate to a top-level command family
iAlexeze Oct 16, 2026
865a5e7
move .request and WithRequest to .intent/WithIntent namespace
iAlexeze Oct 17, 2026
28c3f39
Notes are now functions, from github.com/intentd/kel
iAlexeze Oct 18, 2026
d1ddd84
Organize pkg/utils by subject
iAlexeze Oct 18, 2026
4836d4b
One call shape for external calls and the remote request
iAlexeze Oct 18, 2026
810e6e0
Catalog is now Blueprint, and the runtime copies what it reads from c…
iAlexeze Oct 19, 2026
fd4efa4
Gateway restructures into focused packages with clear boundaries and …
iAlexeze Oct 19, 2026
dbe9558
Resources become a library: core and presets, one word "presets" end …
iAlexeze Oct 19, 2026
9f4eab4
Resources take standard Kubernetes interfaces: Owner, kubernetes.Inte…
iAlexeze Oct 19, 2026
04aa8fd
Resources report what they did and stand alone, with tests
iAlexeze Oct 19, 2026
dc76c48
Resources write through one server-side apply
iAlexeze Oct 19, 2026
59f38ab
Use kubekit and KEL v0.1.1; presets expand in kubekit
iAlexeze Oct 19, 2026
fe2d807
Push guards what is published and gates on unreleased charts
iAlexeze Oct 20, 2026
7e22ac1
refactor(runners): share one loop across child kinds; rename Conditio…
iAlexeze Oct 20, 2026
472dee8
Migrate CRs between CRDs with migrate.to, and split pkg/migrate by level
iAlexeze Oct 25, 2026
bd4e078
Add the registry example pack, and fetch every OCI artifact through o…
iAlexeze Oct 26, 2026
f814b87
pre launch commit for CI test
iAlexeze Oct 26, 2026
442a280
Build with Go 1.27.3, which fixes the standard library vulnerabilitie…
iAlexeze Oct 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 3 additions & 3 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -52,12 +52,12 @@ RENEW_DEADLINE=40 # Seconds; must be < LEASE_DURATION
RETRY_PERIOD=10 # Seconds; retry interval for leader election

# ------------------------------------------------------------------------------
# Catalog / Stack Configuration
# Blueprint / Stack Configuration
# ------------------------------------------------------------------------------

# Paths to Catalog or Stack files (comma-separated or single path)
# Paths to Blueprint or Stack files (comma-separated or single path)
# Can be overridden with --file flag
CATALOG_PATH=./catalog.yaml
BLUEPRINT_PATH=./blueprint.yaml

# Default queue depth and degrade threshold for CRDs
MAX_QUEUE_DEPTH=100
Expand Down
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,4 @@ What actually happened.

## Additional Context

Logs, Catalog snippets, CRDs, etc.
Logs, Blueprint snippets, CRDs, etc.
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Why is this useful? What problem does it solve?

## Proposal

How you imagine it working (CLI, Catalog, Stack, Registry, etc.).
How you imagine it working (CLI, Blueprint, Stack, Registry, etc.).

## Alternatives

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/build-matrix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ jobs:
go-version-file: go.mod
cache: true

- name: Run note generator
run: make generate-notes
- name: Run function generator
run: make generate-functions

- name: Cache compiled binaries for ${{ matrix.os }}_${{ matrix.arch }}
id: cache-binaries
Expand Down
245 changes: 112 additions & 133 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,141 +1,111 @@
# .github/workflows/ci.yml
name: CI

on:
# push:
# branches: [main]
workflow_dispatch:
push:
branches: [main]
paths:
- 'cmd/**'
- 'pkg/**'
- 'domain/**'
- 'examples/**'
- 'go.mod'
- 'go.sum'
pull_request:
branches: [disabled]
types: [opened, synchronize, reopened]
paths:
- 'cmd/**'
- 'pkg/**'
- 'domain/**'
- 'examples/**'
- 'go.mod'
- 'go.sum'

jobs:
# ── Lint ──────────────────────────────────────────────────────────────────
lint:
name: Lint
validate-functions:
name: Validate generated functions
runs-on: ubuntu-latest

steps:
- name: Checkout
- name: Checkout code
uses: actions/checkout@v6
with:
fetch-depth: 0

# - name: Set up Go
# uses: actions/setup-go@v5
# with:
# go-version-file: go.mod
# cache: true
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod
cache: true

# - name: golangci-lint
# uses: golangci/golangci-lint-action@v6
# with:
# version: latest
- name: Run function generator
run: make generate-functions

- name: Write summary
if: always()
- name: Check for uncommitted changes (generated function registries)
run: |
echo "## Lint" >> "$GITHUB_STEP_SUMMARY"
echo "| Check | Status |" >> "$GITHUB_STEP_SUMMARY"
echo "|-------|--------|" >> "$GITHUB_STEP_SUMMARY"
echo "| golangci-lint | ${{ job.status == 'success' && '✅ passed' || '❌ failed' }} |" >> "$GITHUB_STEP_SUMMARY"

# ── Build ──────────────────────────────────────────────────────────────────
build:
name: Build
runs-on: ubuntu-latest
FUNCS="pkg/template/funcs/funcs_generated.go docs/reference/inrun-functions"
if ! git diff --quiet -- $FUNCS; then
echo "❌ Generated function files are out of date:"
git diff --stat -- $FUNCS
echo "Run 'make generate-functions' locally and commit the changes."
exit 1
else
echo "✅ Function list is up-to-date."
fi

validate-resource-docs:
name: Validate generated resource docs
runs-on: ubuntu-latest
steps:
- name: Checkout
- name: Checkout code
uses: actions/checkout@v6
with:
fetch-depth: 0

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod
cache: true

- name: Build
run: go build ./...
- name: Run resource docs generator
run: make generate-resource-docs

- name: Build CLI binary
- name: Check for uncommitted changes (docs/reference/schema/resources)
run: |
go build -o ./bin/inrun ./cmd/inrun/
echo "✅ Binary built:"
ls -lh ./bin/inrun
if ! git diff --quiet docs/reference/schema/resources/; then
echo "❌ docs/reference/schema/resources/ is out of date."
echo "Run 'make generate-resource-docs' locally and commit the changes."
exit 1
else
echo "✅ Resource docs are up-to-date."
fi

- name: Write summary
if: always()
run: |
echo "## Build" >> "$GITHUB_STEP_SUMMARY"
echo "| Step | Status |" >> "$GITHUB_STEP_SUMMARY"
echo "|------|--------|" >> "$GITHUB_STEP_SUMMARY"
echo "| go build ./... | ${{ job.status == 'success' && '✅ passed' || '❌ failed' }} |" >> "$GITHUB_STEP_SUMMARY"
echo "| CLI binary | ${{ job.status == 'success' && '✅ built' || '❌ failed' }} |" >> "$GITHUB_STEP_SUMMARY"

# ── Test ───────────────────────────────────────────────────────────────────
test:
name: Test
validate-code:
name: Run static checks
runs-on: ubuntu-latest

steps:
- name: Checkout
- name: Checkout code
uses: actions/checkout@v6

# - name: Set up Go
# uses: actions/setup-go@v5
# with:
# go-version-file: go.mod
# cache: true

- name: Run tests
run: |
go test ./... \
-v \
-race \
-coverprofile=coverage.out \
-covermode=atomic \
-timeout 120s \
2>&1 | tee test_output.txt

- name: Vulnerability scan
run: |
go install golang.org/x/vuln/cmd/govulncheck@latest
govulncheck ./...

- name: Coverage report
run: |
go tool cover -func=coverage.out | tail -1
COVERAGE=$(go tool cover -func=coverage.out | grep total | awk '{print $3}')
echo "COVERAGE=${COVERAGE}" >> "$GITHUB_ENV"
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod
cache: true

- name: Write summary
if: always()
run: |
echo "## Tests" >> "$GITHUB_STEP_SUMMARY"
echo "" >> "$GITHUB_STEP_SUMMARY"

# Count pass/fail
PASSED=$(grep -c "^--- PASS" test_output.txt 2>/dev/null || echo 0)
FAILED=$(grep -c "^--- FAIL" test_output.txt 2>/dev/null || echo 0)

echo "| Result | Count |" >> "$GITHUB_STEP_SUMMARY"
echo "|--------|-------|" >> "$GITHUB_STEP_SUMMARY"
echo "| ✅ Passed | ${PASSED} |" >> "$GITHUB_STEP_SUMMARY"
echo "| ❌ Failed | ${FAILED} |" >> "$GITHUB_STEP_SUMMARY"
echo "| 📊 Coverage | ${COVERAGE:-n/a} |" >> "$GITHUB_STEP_SUMMARY"

if [ "${FAILED}" -gt 0 ]; then
echo "" >> "$GITHUB_STEP_SUMMARY"
echo "### Failed tests" >> "$GITHUB_STEP_SUMMARY"
echo '```' >> "$GITHUB_STEP_SUMMARY"
grep "^--- FAIL" test_output.txt >> "$GITHUB_STEP_SUMMARY" || true
echo '```' >> "$GITHUB_STEP_SUMMARY"
fi
- name: Run tests (no cluster required)
run: make test

# ── Validate examples ──────────────────────────────────────────────────────
validate-examples:
name: Validate examples
# Runs every example's simulate.yaml against the CLI built from this
# checkout, the way each example's README tells users to. No cluster.
# Typed examples are skipped: each builds its own binary from a nested
# module, which needs a published Inrun version.
simulate-examples:
name: Simulate examples
runs-on: ubuntu-latest
needs: build

steps:
- name: Checkout
- name: Checkout code
uses: actions/checkout@v6

- name: Set up Go
Expand All @@ -144,38 +114,47 @@ jobs:
go-version-file: go.mod
cache: true

- name: Build CLI
run: go build -o ./bin/inrun ./cmd/inrun/
- name: Build inrun
run: go build -o "$RUNNER_TEMP/inrun" ./cmd/inrun

- name: Validate examples
- name: Start the remote example's reconciler
working-directory: examples/reconcilers/remote/endpoint
env:
RECONCILER_TOKEN: inrun-demo-token
run: |
for k in $(find examples -name catalog.yaml | sort); do
./bin/inrun validate --file "$k"
python3 reconciler/main.py > "$RUNNER_TEMP/reconciler.log" 2>&1 &
for i in $(seq 30); do
curl -s -o /dev/null localhost:8025 && exit 0
sleep 1
done
echo "reconciler did not start"; cat "$RUNNER_TEMP/reconciler.log"; exit 1

# ── Summary ────────────────────────────────────────────────────────────────
summary:
name: CI Summary
runs-on: ubuntu-latest
needs: [lint, build, test, validate-examples]
if: always()
- name: Simulate declarative and remote examples
working-directory: examples
run: |
"$RUNNER_TEMP/inrun" simulate ./... --skip typed,intent --dev-server

steps:
- name: Write final summary
- name: Simulate the intent example
working-directory: examples/intent
run: |
echo "## CI Summary" >> "$GITHUB_STEP_SUMMARY"
echo "" >> "$GITHUB_STEP_SUMMARY"
echo "| Job | Status |" >> "$GITHUB_STEP_SUMMARY"
echo "|-----|--------|" >> "$GITHUB_STEP_SUMMARY"
echo "| Lint | ${{ needs.lint.result == 'success' && '✅' || '❌' }} ${{ needs.lint.result }} |" >> "$GITHUB_STEP_SUMMARY"
echo "| Build | ${{ needs.build.result == 'success' && '✅' || '❌' }} ${{ needs.build.result }} |" >> "$GITHUB_STEP_SUMMARY"
echo "| Test | ${{ needs.test.result == 'success' && '✅' || '❌' }} ${{ needs.test.result }} |" >> "$GITHUB_STEP_SUMMARY"
echo "| Validate examples | ${{ needs.validate-examples.result == 'success' && '✅' || '❌' }} ${{ needs.validate-examples.result }} |" >> "$GITHUB_STEP_SUMMARY"
echo "" >> "$GITHUB_STEP_SUMMARY"

ALL_PASSED="${{ needs.lint.result == 'success' && needs.build.result == 'success' && needs.test.result == 'success' && needs.validate-examples.result == 'success' }}"
if [ "$ALL_PASSED" = "true" ]; then
echo "### ✅ All checks passed — ready to merge" >> "$GITHUB_STEP_SUMMARY"
else
echo "### ❌ Some checks failed — review above" >> "$GITHUB_STEP_SUMMARY"
fi
"$RUNNER_TEMP/inrun" serve play -i intent.json --token dev --simulate=test/simulate.yaml

vuln-check:
name: Vulnerability check (${{ matrix.target }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
target: [vuln-console, vuln-runtime, vuln-gateway]
steps:
- name: Checkout code
uses: actions/checkout@v6

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod
cache: true

- name: Run vulnerability check
run: make ${{ matrix.target }}
6 changes: 4 additions & 2 deletions .github/workflows/package-examples.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
mkdir -p dist/examples
TAG="${{ github.ref_name }}"

for pack in reconcilers/declarative reconcilers/remote reconcilers/typed intent; do
for pack in reconcilers/declarative reconcilers/remote reconcilers/typed intent migration registry; do
tar -czf "dist/examples_$(basename $pack)_${TAG}.tar.gz" -C "examples/$pack" .
done

Expand All @@ -49,10 +49,12 @@ jobs:
echo "" >> "$GITHUB_STEP_SUMMARY"
echo "| Pack | Description | Archive |" >> "$GITHUB_STEP_SUMMARY"
echo "|------|-------------|---------|" >> "$GITHUB_STEP_SUMMARY"
echo "| Declarative | Operators declared in a Catalog | \`examples_declarative_${TAG}.tar.gz\` |" >> "$GITHUB_STEP_SUMMARY"
echo "| Declarative | Operators declared in a Blueprint | \`examples_declarative_${TAG}.tar.gz\` |" >> "$GITHUB_STEP_SUMMARY"
echo "| Remote | A reconciler in any language over HTTP | \`examples_remote_${TAG}.tar.gz\` |" >> "$GITHUB_STEP_SUMMARY"
echo "| Typed | Go hooks, constructor, controller-runtime drop-in | \`examples_typed_${TAG}.tar.gz\` |" >> "$GITHUB_STEP_SUMMARY"
echo "| Intent | Intent in through the gateway, view out | \`examples_intent_${TAG}.tar.gz\` |" >> "$GITHUB_STEP_SUMMARY"
echo "| Migration | Change the CRD under live CRs | \`examples_migration_${TAG}.tar.gz\` |" >> "$GITHUB_STEP_SUMMARY"
echo "| Registry | Consume, publish and deprecate patterns | \`examples_registry_${TAG}.tar.gz\` |" >> "$GITHUB_STEP_SUMMARY"
echo "" >> "$GITHUB_STEP_SUMMARY"
echo "**Download from the release assets or run:**" >> "$GITHUB_STEP_SUMMARY"
echo '```bash' >> "$GITHUB_STEP_SUMMARY"
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release-summary.yml
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ jobs:
echo "| Console binaries | $(icon ${{ inputs.build_result }}) ${{ inputs.build_result }} |" >> "$GITHUB_STEP_SUMMARY"
echo "| Example packs | $(icon ${{ inputs.examples_result }}) ${{ inputs.examples_result }} |" >> "$GITHUB_STEP_SUMMARY"
echo "| Container images | $(icon ${{ inputs.image_result }}) ${{ inputs.image_result }} |" >> "$GITHUB_STEP_SUMMARY"
echo "| GPG signing + GitHub Release | $(icon ${{ inputs.release_result }}) ${{ inputs.release_result }} |" >> "$GITHUB_STEP_SUMMARY"
echo "| Keyless signing + GitHub Release | $(icon ${{ inputs.release_result }}) ${{ inputs.release_result }} |" >> "$GITHUB_STEP_SUMMARY"
echo "| Helm chart | $(icon ${{ inputs.helm_result }}) ${{ inputs.helm_result }} |" >> "$GITHUB_STEP_SUMMARY"
echo "| Homebrew formulas | $(icon ${{ inputs.homebrew_result }}) ${{ inputs.homebrew_result }} |" >> "$GITHUB_STEP_SUMMARY"
echo "| Windows packages | 📦 Download from [GitHub Releases](https://github.com/${REPO}/releases/tag/${TAG}) |" >> "$GITHUB_STEP_SUMMARY"
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,9 @@ jobs:
release:
name: Sign and Release
uses: ./.github/workflows/sign-and-release.yml
permissions:
contents: write
id-token: write
needs: [prepare, build, image, examples]
secrets: inherit
with:
Expand Down
Loading
Loading