Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
100 commits
Select commit Hold shift + click to select a range
76aff82
Merge pull request #15 from Datasance/release/3.5.0
emirhandurmus Jul 24, 2025
03df07b
Merge pull request #16 from Datasance/release/3.5.0
emirhandurmus Sep 2, 2025
9879272
Merge pull request #17 from Datasance/release/3.5.0
emirhandurmus Sep 3, 2025
cf60a87
Merge pull request #18 from Datasance/release/3.5.0
emirhandurmus Sep 16, 2025
acdde02
Merge pull request #19 from Datasance/release/3.5.0
emirhandurmus Sep 18, 2025
2259990
Merge pull request #20 from Datasance/release/3.5.0
emirhandurmus Sep 30, 2025
03ede7d
Merge pull request #21 from Datasance/release/3.5.0
emirhandurmus Nov 4, 2025
5a66b79
Merge pull request #22 from Datasance/release/3.5.0
emirhandurmus Nov 5, 2025
6125648
Merge pull request #23 from Datasance/release/3.5.0
emirhandurmus Nov 13, 2025
9d986e5
Merge pull request #24 from Datasance/release/3.5.0
emirhandurmus Nov 21, 2025
c513015
Merge pull request #25 from Datasance/release/3.5.0
emirhandurmus Nov 21, 2025
9e331e3
Merge pull request #26 from Datasance/release/3.5.0
emirhandurmus Dec 1, 2025
37035ec
Merge pull request #27 from Datasance/release/3.5.0
emirhandurmus Dec 6, 2025
854bd6e
Merge pull request #28 from Datasance/release/3.6.x
emirhandurmus Feb 5, 2026
72dbd43
Merge pull request #29 from Datasance/release/3.7.x
emirhandurmus Mar 4, 2026
b166839
Merge pull request #30 from Datasance/release/3.7.x
emirhandurmus Mar 11, 2026
1f676c0
Merge pull request #31 from Datasance/release/3.7.x
emirhandurmus Mar 11, 2026
2a307cb
Merge pull request #32 from Datasance/release/3.7.x
emirhandurmus Mar 24, 2026
d444333
Merge pull request #33 from Datasance/release/3.7.x
emirhandurmus Mar 24, 2026
9f75fe7
merge prep
emirhandurmus Mar 26, 2026
cfcc3a1
Merge pull request #775 from Datasance/iofog/merge
emirhandurmus Mar 26, 2026
e93073e
Merge pull request #34 from Datasance/release/3.7.x
emirhandurmus Apr 13, 2026
accd122
Merge pull request #35 from Datasance/release/3.7.x
emirhandurmus Apr 13, 2026
cd3830c
Merge remote-tracking branch 'origin/main' into iofog/merge
emirhandurmus Apr 16, 2026
b645908
Merge pull request #784 from Datasance/iofog/merge
emirhandurmus Apr 16, 2026
9d7c01d
Add v3.8.0 greenfield database migrations for all dialects
emirhandurmus Jun 10, 2026
9f5cea8
Add v3.8.0 database seeders for Architectures and catalog images
emirhandurmus Jun 10, 2026
58ae96a
Rename FogType to Architecture across models and managers
emirhandurmus Jun 10, 2026
86a13ea
Point fresh install migration runner at v3.8.0 SQL files
emirhandurmus Jun 10, 2026
77aa005
Update unit tests for Architecture rename and current agent provisioning
emirhandurmus Jun 10, 2026
6dccde4
Align agent schemas with Edgelet wire contract
emirhandurmus Jun 10, 2026
47b5718
Update agent and ioFog services for Edgelet field names
emirhandurmus Jun 10, 2026
53f1987
Use application name as the sole microservice list filter
emirhandurmus Jun 10, 2026
61d6654
Rename fog-types API to architectures across public surfaces
emirhandurmus Jun 10, 2026
cfa7bde
Update tests for Edgelet agent contract and architectures API
emirhandurmus Jun 10, 2026
2584ef3
Remove legacy /api/v3/flow route.
emirhandurmus Jun 10, 2026
cf84583
Remove edge resource HTTP API and fog integration.
emirhandurmus Jun 10, 2026
9c6be8f
Remove diagnostics, strace, and image snapshot support.
emirhandurmus Jun 10, 2026
ddae7ba
Drop RBAC rules and OpenAPI paths for removed legacy APIs.
emirhandurmus Jun 10, 2026
598b356
Update unit tests and Postman collection for removed legacy APIs.
emirhandurmus Jun 10, 2026
fd84fed
Add DNS port 53 to reserved microservice ports.
emirhandurmus Jun 10, 2026
7ea263a
Validate microservice runtime against agent available runtimes.
emirhandurmus Jun 10, 2026
5e278ec
Inject service account volumes into router and NATS system microservi…
emirhandurmus Jun 10, 2026
d414ee5
Migrate microservice and agent-admin roles to edgelet.iofog.org/v1.
emirhandurmus Jun 10, 2026
e3dbfe0
Notify hosting agents when RBAC service account or role rules change.
emirhandurmus Jun 10, 2026
0ab9bd3
Ensure default router and NATS local CAs at controller startup.
emirhandurmus Jun 10, 2026
07d1ea9
Sign agent router and NATS certificates with central local CAs.
emirhandurmus Jun 10, 2026
2934c5f
Resolve TCP bridge connector hosts for Edgelet bridge DNS.
emirhandurmus Jun 10, 2026
469c609
Add unit tests for certificate DNS SANs, central PKI, and connector h…
emirhandurmus Jun 10, 2026
8426a4e
Remove linkedEdgeResources from ChangeTracking model.
emirhandurmus Jun 10, 2026
8f6b71a
Add remote router AMQP resolve fallback and connect retry.
emirhandurmus Jun 10, 2026
5adcd70
Add unit tests for router connection resolve and fallback connect.
emirhandurmus Jun 10, 2026
d0da6c7
Add agent controller microservice register endpoint and upsert service.
emirhandurmus Jun 10, 2026
dd7071c
Expose isController in agent microservice list and block user mutations.
emirhandurmus Jun 10, 2026
685f4ce
Document controller register endpoint and isController in OpenAPI.
emirhandurmus Jun 10, 2026
fff4ba3
Support up to four per-architecture images with shared validation.
emirhandurmus Jun 10, 2026
1b0c2f2
Use canonical agent config fields across model, API, and CLI.
emirhandurmus Jun 10, 2026
340f8d6
Replace keycloak-connect with openid-client and refresh dependencies.
emirhandurmus Jun 10, 2026
dc86cf8
Add generic OIDC configuration and wire bearer validation into the se…
emirhandurmus Jun 10, 2026
7f299ae
Extract RBAC subjects from generic OIDC access token claims.
emirhandurmus Jun 10, 2026
f76d7b6
Migrate user login, refresh, profile, and logout to openid-client.
emirhandurmus Jun 10, 2026
6b91485
Add mock OIDC issuer and tests for bearer middleware and user auth fl…
emirhandurmus Jun 10, 2026
64f06d6
Add system image config and env mapping for architectures 3 and 4.
emirhandurmus Jun 10, 2026
78e6a84
Add oidc-provider, argon2, and otplib for embedded identity.
emirhandurmus Jun 11, 2026
655f2b3
Add v3.8 auth schema, Sequelize models, and OIDC persistence adapter.
emirhandurmus Jun 11, 2026
4e0382c
Add embedded and external auth configuration with public URL and TLS …
emirhandurmus Jun 11, 2026
6afd46b
Add embedded auth services for login, MFA, tokens, users, and OAuth BFF.
emirhandurmus Jun 11, 2026
fb2cc9a
Wire auth routes, user admin API, RBAC rules, and server bootstrap.
emirhandurmus Jun 11, 2026
b77efcf
Add embedded auth integration tests and remove mock OIDC harness.
emirhandurmus Jun 11, 2026
7e40f33
Add auth BFF session, interaction state, and bootstrap secret schema.
emirhandurmus Jun 11, 2026
27743b4
Add embedded OAuth interaction APIs for browser login.
emirhandurmus Jun 11, 2026
fddd1d0
Enable OAuth BFF for embedded and external modes with unified URLs.
emirhandurmus Jun 11, 2026
3968a05
Add built-in rate limiting for authentication endpoints.
emirhandurmus Jun 11, 2026
97a253c
Add shared BFF session store, token TTL overrides, and OIDC client se…
emirhandurmus Jun 11, 2026
5a3039b
Harden bootstrap reconciliation, tokens, and forced password enforcem…
emirhandurmus Jun 11, 2026
85c0c2d
Wire auth session startup and address auth groups by unique name.
emirhandurmus Jun 11, 2026
61c2f4e
Update API spec, auth configuration samples, and OIDC test harness.
emirhandurmus Jun 11, 2026
329a0b6
Complete v3.8 RBAC catalog sync, system roles, drift audit, and opera…
emirhandurmus Jun 11, 2026
28744d2
Remove Postman/Newman integration from the test runner.
emirhandurmus Jun 11, 2026
a6da7a9
Update npm dependencies and security overrides.
emirhandurmus Jun 11, 2026
7ae2281
Apply standard v17 lint fixes across the codebase.
emirhandurmus Jun 11, 2026
d17c635
Replace ECN Viewer with EdgeOps Console static embed.
emirhandurmus Jun 11, 2026
3f8f997
Align unit tests with v3.8 service and controller contracts.
emirhandurmus Jun 11, 2026
258487d
Fix test runner exit behavior and opt-in Kubernetes integration tests.
emirhandurmus Jun 11, 2026
c0c2477
Restructure CI workflow for split tests, audit, and multi-arch Docker…
emirhandurmus Jun 11, 2026
ad01d89
Add build-flavor configuration for distribution-specific product stri…
emirhandurmus Jun 12, 2026
efbabde
Parameterize Docker OCI labels and restrict image publish to version …
emirhandurmus Jun 12, 2026
34b46f6
Remove per-file copyright headers; NOTICE is the sole attribution.
emirhandurmus Jun 12, 2026
fdd3446
Document dual-mirror repository model and per-mirror CI variables.
emirhandurmus Jun 12, 2026
5302335
Naming convention across swagger
emirhandurmus Jun 12, 2026
4ac14a4
Export getAppLabelKey for Kubernetes service label helpers.
emirhandurmus Jun 12, 2026
862e6e9
Document v3.8.0 breaking changes and greenfield upgrade notice.
emirhandurmus Jun 12, 2026
0167569
Add operator architecture overview for v3.8.
emirhandurmus Jun 12, 2026
197aa1b
Add operator guides for PKI and OIDC configuration.
emirhandurmus Jun 12, 2026
3bce87d
Rewrite README for v3.8 container distribution and Edgelet requirement.
emirhandurmus Jun 12, 2026
ea0512a
Scrub internal references from public docs and fix agent disk default.
emirhandurmus Jun 12, 2026
df215cd
swagger
emirhandurmus Jun 12, 2026
03b624a
Add optional semver to fog version commands.
emirhandurmus Jun 12, 2026
e0b70bd
Update greenfield defaults for edgelet container engine socket.
emirhandurmus Jun 12, 2026
4296c01
Merge branch 'controller/12-repo-structure' into integrate/v3.8-upstream
emirhandurmus Jun 12, 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
  •  
  •  
  •  
21 changes: 21 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Copy to .env and adjust for local embedded dev (npm run dev:embedded).

NODE_ENV=development

# EdgeOps Console static embed (npm run build:console → dev/console/build)
EDGEOPS_CONSOLE_PATH=dev/console/build # must be absolute path
EDGEOPS_CONSOLE_VERSION=1.0.0
# EDGEOPS_CONSOLE_REPO=https://github.com/Datasance/edgeops-console
# EDGEOPS_CONSOLE_FLAVOR=datasance

CONSOLE_PORT=8008
CONTROLLER_PUBLIC_URL=http://localhost:51121
CONSOLE_URL=http://localhost:8008

# Avoid sudo for file logging during local dev
LOG_DIRECTORY=dev/logs

# Embedded OIDC (optional — see docs/external-oidc-client-setup.md)
# AUTH_MODE=embedded
# OIDC_BOOTSTRAP_ADMIN_USERNAME=admin
# OIDC_BOOTSTRAP_ADMIN_PASSWORD=changeme
31 changes: 0 additions & 31 deletions .eslintrc.js

This file was deleted.

283 changes: 149 additions & 134 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
@@ -1,156 +1,171 @@
name: CI

on:
push:
branches:
- main
tags: [v*]
- develop
tags:
- v*
paths-ignore:
- README.md
- CHANGELOG.md
- LICENSE
pull_request:
# Sequence of patterns matched against refs/heads
branches:
- main
paths-ignore:
- README.md
- CHANGELOG.md
- LICENSE
env:
IMAGE_NAME: 'controller'


env:
IMAGE_NAME: controller

jobs:
Build:
runs-on: ubuntu-22.04
permissions:
actions: write
checks: write
contents: write
deployments: write
id-token: write
issues: write
discussions: write
packages: write
pages: write
pull-requests: write
repository-projects: write
security-events: write
statuses: write
name: Preflight
preflight:
name: Lint, test, audit
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 24
- name: Replace values
shell: bash
env:
PAT: ${{ secrets.PAT }}
run: |
sed -i.back "s|PAT|${PAT}|g" .npmrc
- run: npm config set @datasance:registry https://npm.pkg.github.com/
- run: npm install --build-from-source --force
- run: npm run standard
- run: |
npm i -g better-npm-audit
npx better-npm-audit audit -p

Publish:
needs: [Build]
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: 24
cache: npm

- name: Install dependencies
run: npm ci --legacy-peer-deps

- name: Lint
run: npm run standard

- name: Unit test
run: npm test

- name: Audit production dependencies
run: npx --yes better-npm-audit audit -p

docker:
name: Docker build
needs: preflight
runs-on: ubuntu-22.04
permissions:
actions: write
checks: write
contents: write
deployments: write
id-token: write
issues: write
discussions: write
contents: read
packages: write
pages: write
pull-requests: write
repository-projects: write
security-events: write
statuses: write
name: Publish Controller
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 24
- name: Replace values
shell: bash
env:
PAT: ${{ secrets.PAT }}
run: |
sed -i.back "s|PAT|${PAT}|g" .npmrc
- run: npm config set @datasance:registry https://npm.pkg.github.com/
- run: npm install --build-from-source --force

- name: npm version
id: package-version
uses: martinbeentjes/npm-get-version-action@v1.3.1

- name: package version
shell: bash
id: version
run: |
if [[ ${{ github.ref_name }} =~ ^v.* ]] ; then
echo "pkg_version=${{ steps.package-version.outputs.current-version}}" >> "${GITHUB_OUTPUT}"
else
echo "pkg_version=${{ steps.package-version.outputs.current-version}}-${{ github.run_number }}" >> "${GITHUB_OUTPUT}"
fi

- name: npm pack with version from package version
run: |
npm pack
npm publish --registry=https://npm.pkg.github.com/

- name: 'Get Previous tag'
id: previoustag
uses: "WyriHaximus/github-action-get-previous-tag@v1"
with:
fallback: 0.0.0
- name: Set image tag
shell: bash
id: tags
run: |
if [[ ${{ github.ref_name }} =~ ^v.* ]] ; then
VERSION=${{ github.ref_name }}
echo "VERSION=${VERSION:1}" >> "${GITHUB_OUTPUT}"
else
VERSION=${{ steps.previoustag.outputs.tag }}
echo "VERSION=${VERSION:1}-${{ github.run_number }}" >> "${GITHUB_OUTPUT}"
fi

- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
version: v0.29.1


- name: Login to Github Container Registry
uses: docker/login-action@v2
with:
registry: "ghcr.io"
username: ${{ github.actor }}
password: ${{ secrets.PAT }}

- name: Build and Push to ghcr
uses: docker/build-push-action@v3
id: build_push_ghcr
with:
file: Dockerfile
context: .
platforms: linux/amd64, linux/arm64
push: true
outputs: type=image,name=target,annotation-index.org.opencontainers.image.description=Controller
build-args: GITHUB_TOKEN=${{ secrets.PAT }}
tags: |
ghcr.io/datasance/${{ env.IMAGE_NAME }}:${{ steps.tags.outputs.VERSION }}
ghcr.io/datasance/${{ env.IMAGE_NAME }}:latest
ghcr.io/datasance/${{ env.IMAGE_NAME }}:main
- uses: actions/checkout@v4

- name: Package version
id: package-version
uses: martinbeentjes/npm-get-version-action@v1.3.1

- name: Set build versions
id: version
shell: bash
run: |
PKG="${{ steps.package-version.outputs.current-version }}"
if [[ "${{ github.ref_name }}" =~ ^v.* ]]; then
echo "pkg_version=${PKG}" >> "${GITHUB_OUTPUT}"
echo "image_tag=${PKG}" >> "${GITHUB_OUTPUT}"
else
echo "pkg_version=${PKG}-${{ github.run_number }}" >> "${GITHUB_OUTPUT}"
echo "image_tag=${PKG}-${{ github.run_number }}" >> "${GITHUB_OUTPUT}"
fi

- name: Set EdgeOps Console build args
shell: bash
run: |
VERSION="${{ vars.EDGEOPS_CONSOLE_VERSION }}"
if [ -z "$VERSION" ]; then VERSION="1.0.0"; fi
echo "EDGEOPS_CONSOLE_VERSION=$VERSION" >> "${GITHUB_ENV}"

REPO="${{ vars.EDGEOPS_CONSOLE_REPO }}"
FLAVOR="${{ vars.EDGEOPS_CONSOLE_FLAVOR }}"
if [ -z "$REPO" ] || [ -z "$FLAVOR" ]; then
case "${{ github.repository }}" in
eclipse-iofog/Controller|eclipse-iofog/controller)
REPO="${REPO:-https://github.com/eclipse-iofog/edgeops-console}"
FLAVOR="${FLAVOR:-iofog}"
;;
*)
REPO="${REPO:-https://github.com/Datasance/edgeops-console}"
FLAVOR="${FLAVOR:-datasance}"
;;
esac
fi
echo "EDGEOPS_CONSOLE_REPO=$REPO" >> "${GITHUB_ENV}"
echo "EDGEOPS_CONSOLE_FLAVOR=$FLAVOR" >> "${GITHUB_ENV}"

- name: Set image registry and OCI source
shell: bash
run: |
REGISTRY="${{ vars.IMAGE_REGISTRY }}"
OCI_SOURCE="${{ vars.OCI_SOURCE_REPO }}"
if [ -z "$REGISTRY" ] || [ -z "$OCI_SOURCE" ]; then
case "${{ github.repository }}" in
eclipse-iofog/Controller|eclipse-iofog/controller)
REGISTRY="${REGISTRY:-ghcr.io/eclipse-iofog}"
OCI_SOURCE="${OCI_SOURCE:-https://github.com/eclipse-iofog/Controller}"
;;
*)
REGISTRY="${REGISTRY:-ghcr.io/datasance}"
OCI_SOURCE="${OCI_SOURCE:-https://github.com/Datasance/Controller}"
;;
esac
fi
echo "IMAGE_REGISTRY=$REGISTRY" >> "${GITHUB_ENV}"
echo "OCI_SOURCE_REPO=$OCI_SOURCE" >> "${GITHUB_ENV}"

- name: Set controller flavor build args
shell: bash
run: |
DISTRIBUTION="${{ vars.CONTROLLER_DISTRIBUTION }}"
RBAC_API="${{ vars.RBAC_API_VERSION }}"
if [ -z "$DISTRIBUTION" ] || [ -z "$RBAC_API" ]; then
case "${{ github.repository }}" in
eclipse-iofog/Controller|eclipse-iofog/controller)
DISTRIBUTION="${DISTRIBUTION:-iofog}"
RBAC_API="${RBAC_API:-iofog.org/v3}"
;;
*)
DISTRIBUTION="${DISTRIBUTION:-datasance}"
RBAC_API="${RBAC_API:-datasance.com/v3}"
;;
esac
fi
echo "CONTROLLER_DISTRIBUTION=$DISTRIBUTION" >> "${GITHUB_ENV}"
echo "RBAC_API_VERSION=$RBAC_API" >> "${GITHUB_ENV}"

- name: Set up QEMU
uses: docker/setup-qemu-action@v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Log in to GitHub Container Registry
if: startsWith(github.ref, 'refs/tags/v')
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build and push image
uses: docker/build-push-action@v6
with:
context: .
file: Dockerfile
platforms: linux/amd64,linux/arm64
push: ${{ startsWith(github.ref, 'refs/tags/v') }}
tags: |
${{ env.IMAGE_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.image_tag }}
${{ env.IMAGE_REGISTRY }}/${{ env.IMAGE_NAME }}:main
${{ env.IMAGE_REGISTRY }}/${{ env.IMAGE_NAME }}:latest
build-args: |
PKG_VERSION=${{ steps.version.outputs.pkg_version }}
EDGEOPS_CONSOLE_REPO=${{ env.EDGEOPS_CONSOLE_REPO }}
EDGEOPS_CONSOLE_VERSION=${{ env.EDGEOPS_CONSOLE_VERSION }}
EDGEOPS_CONSOLE_FLAVOR=${{ env.EDGEOPS_CONSOLE_FLAVOR }}
IMAGE_REGISTRY=${{ env.IMAGE_REGISTRY }}
OCI_SOURCE_REPO=${{ env.OCI_SOURCE_REPO }}
CONTROLLER_DISTRIBUTION=${{ env.CONTROLLER_DISTRIBUTION }}
RBAC_API_VERSION=${{ env.RBAC_API_VERSION }}
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ diagnostic/
iofog-iofogcontroller-*.tgz
.npmrc
.env
dev/edgeops-console/
dev/console/
dev/logs/
src/iofog-controller.pid
mcp-controller-server/
.cursor/
Expand Down
3 changes: 2 additions & 1 deletion .mocharc.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"require": "test/support/setup.js",
"ui": "bdd-lazy-var/global",
"recursive": true
"timeout": 15000,
"exit": true
}
2 changes: 1 addition & 1 deletion .npmrc
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
//npm.pkg.github.com/:_authToken=PAT
@Datasance:registry=https://npm.pkg.github.com/
@Eclipse-iofog:registry=https://npm.pkg.github.com/
6 changes: 1 addition & 5 deletions .nsprc
Original file line number Diff line number Diff line change
@@ -1,5 +1 @@
{
"1112030": {
"notes": ""
}
}
{}
Loading
Loading