Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
161 commits
Select commit Hold shift + click to select a range
021ddda
feat(e8): broker browser-safe hub OIDC sessions
Jul 15, 2026
441dfb5
Merge pull request #176 from ArdurAI/gnanirahulnutakki/feat/e8-browse…
gnanirahulnutakki Jul 15, 2026
c4db395
feat(hub): add loopback operator metrics
Jul 15, 2026
f5a2c00
Merge pull request #178 from ArdurAI/gnanirahulnutakki/feat/e10-loopb…
gnanirahulnutakki Jul 15, 2026
045b957
feat(hub): supervise auth audit delivery
Jul 15, 2026
977372b
Merge pull request #179 from ArdurAI/gnanirahulnutakki/feat/e10-proce…
gnanirahulnutakki Jul 15, 2026
f7304e2
fix(hub): count browser OIDC requests once
Jul 16, 2026
adcfd0e
Merge pull request #184 from ArdurAI/gnanirahulnutakki/fix/browser-oi…
gnanirahulnutakki Jul 16, 2026
217b1c7
fix(kubeconfig): quarantine timed-out operations
Jul 16, 2026
eabc4ff
Merge pull request #186 from ArdurAI/gnanirahulnutakki/fix/kubeconfig…
gnanirahulnutakki Jul 16, 2026
a9d06c4
fix(brain): cite fresh fleet image evidence (#188)
gnanirahulnutakki Jul 16, 2026
d1f505e
fix(fleetcache): isolate workspace scope metadata (#189)
gnanirahulnutakki Jul 16, 2026
a54ebe4
fix(kubeconfig): bound query pagination (#191)
gnanirahulnutakki Jul 16, 2026
2d2217f
fix(fleet): isolate workspace cache mutations
Jul 16, 2026
f6fe9f4
Merge pull request #199 from ArdurAI/gnanirahulnutakki/fix/fleetcache…
gnanirahulnutakki Jul 16, 2026
be30017
fix(kubeconfig): anchor directory imports
Jul 16, 2026
566fc96
Merge pull request #200 from ArdurAI/gnanirahulnutakki/fix/kubeconfig…
gnanirahulnutakki Jul 17, 2026
3c78c0f
fix(hubdb): keep fleet reads in one snapshot
Jul 17, 2026
528112a
fix(hubfleet): coalesce workspace refreshes
Jul 17, 2026
4d1c06e
Merge pull request #201 from ArdurAI/gnanirahulnutakki/fix/hubdb-repe…
gnanirahulnutakki Jul 17, 2026
ca45dc3
Merge pull request #202 from ArdurAI/gnanirahulnutakki/fix/hub-refres…
gnanirahulnutakki Jul 17, 2026
66b6cd7
fix(ocm): make addon wait lifecycle-safe
Jul 17, 2026
05491f3
Merge pull request #203 from ArdurAI/gnanirahulnutakki/fix/ocm-addon-…
gnanirahulnutakki Jul 17, 2026
08f4ea7
fix(hubfleet): bound spoke snapshot workers
Jul 17, 2026
231c89e
Merge pull request #204 from ArdurAI/gnanirahulnutakki/fix/hub-spoke-…
gnanirahulnutakki Jul 17, 2026
217ce7e
fix(ci): align pinned Helm tooling
Jul 17, 2026
e5564c5
Merge pull request #205 from ArdurAI/gnanirahulnutakki/fix/helm-pin-a…
gnanirahulnutakki Jul 17, 2026
5427558
fix(fleet): bound generic table materialization
Jul 17, 2026
8c2675a
Merge pull request #207 from ArdurAI/gnanirahulnutakki/fix/table-mate…
gnanirahulnutakki Jul 17, 2026
73ea5cc
feat(connector): project Argo applications into graph facts
Jul 17, 2026
311eb1c
Merge pull request #208 from ArdurAI/gnanirahulnutakki/feat/argocd-ap…
gnanirahulnutakki Jul 17, 2026
35989bf
fix(connector): bound watch bootstrap snapshots
Jul 17, 2026
865e890
Merge pull request #210 from ArdurAI/gnanirahulnutakki/fix/watch-boot…
gnanirahulnutakki Jul 17, 2026
96f7dad
feat(connector): project Prometheus alerts into graph facts
Jul 17, 2026
ad80c3f
Merge pull request #211 from ArdurAI/gnanirahulnutakki/feat/prometheu…
gnanirahulnutakki Jul 17, 2026
1c73809
feat(e12): normalize GitHub merge timeline facts
Jul 17, 2026
b8de369
fix(e12): harden GitHub projector boundary
Jul 17, 2026
4c1e194
Merge pull request #213 from ArdurAI/gnanirahulnutakki/feat/github-me…
gnanirahulnutakki Jul 17, 2026
d4340e4
feat(e12): derive bounded Elasticsearch log causes
Jul 17, 2026
7d1b0b0
fix(e12): close Elasticsearch review gaps
Jul 17, 2026
1ed58db
test(e12): seal Elasticsearch I/O boundary
Jul 17, 2026
e7bf069
test(e12): pin projector production structure
Jul 17, 2026
3c9c10e
docs(e12): define log projection scope semantics
Jul 17, 2026
4d1f067
Merge pull request #215 from ArdurAI/gnanirahulnutakki/feat/elasticse…
gnanirahulnutakki Jul 17, 2026
4b8599a
feat(e12): project bounded EKS nodegroup facts
Jul 17, 2026
e5c3099
fix(e12): close AWS region and credential gaps
Jul 17, 2026
2b402d2
Merge pull request #217 from ArdurAI/gnanirahulnutakki/feat/eks-nodeg…
gnanirahulnutakki Jul 17, 2026
38c00dd
feat(e8): render tenant-scoped hub fleet console
Jul 17, 2026
b9d5a93
Merge pull request #219 from ArdurAI/gnanirahulnutakki/feat/hub-fleet…
gnanirahulnutakki Jul 17, 2026
9a64277
feat(hub): render governed health correlation
Jul 17, 2026
12ea397
Merge pull request #221 from ArdurAI/gnanirahulnutakki/feat/hub-healt…
gnanirahulnutakki Jul 17, 2026
c9c3a0d
feat(hub): render governed inventory console
Jul 17, 2026
5a2a35c
Merge pull request #223 from ArdurAI/gnanirahulnutakki/feat/hub-inven…
gnanirahulnutakki Jul 17, 2026
dad8948
feat(intent): centralize fail-closed verb routing
Jul 17, 2026
4567c15
Merge pull request #225 from ArdurAI/gnanirahulnutakki/feat/typed-int…
gnanirahulnutakki Jul 17, 2026
fa67fc5
feat(intent): validate bounded per-verb arguments
Jul 17, 2026
0d4979f
Merge pull request #227 from ArdurAI/gnanirahulnutakki/feat/intent-ar…
gnanirahulnutakki Jul 17, 2026
b29fbd4
feat(github): plan bounded PR proposals
Jul 17, 2026
fcaa106
Merge pull request #229 from ArdurAI/gnanirahulnutakki/feat/github-pr…
gnanirahulnutakki Jul 17, 2026
469d860
feat(pep): admit bound typed proposals
Jul 17, 2026
4801a3e
Merge pull request #231 from ArdurAI/gnanirahulnutakki/feat/pep-propo…
gnanirahulnutakki Jul 17, 2026
06d4e4d
feat(audit): persist chained PEP decisions
Jul 17, 2026
0e476f5
Merge pull request #233 from ArdurAI/gnanirahulnutakki/feat/audit-chain
gnanirahulnutakki Jul 17, 2026
94c6a0f
feat(observability): expose policy audit sink metrics
Jul 17, 2026
0180fef
Merge pull request #235 from ArdurAI/gnanirahulnutakki/feat/policy-au…
gnanirahulnutakki Jul 17, 2026
210526b
feat(console): render bounded runtime CVE evidence
Jul 17, 2026
6df668a
Merge pull request #237 from ArdurAI/gnanirahulnutakki/feat/console-c…
gnanirahulnutakki Jul 17, 2026
acbd9cb
feat(observability): ship portable hub alerts
Jul 17, 2026
18f89b7
fix(ci): fail closed on forbidden alert patterns
Jul 17, 2026
652f790
Merge pull request #239 from ArdurAI/gnanirahulnutakki/feat/e10-porta…
gnanirahulnutakki Jul 18, 2026
cd9f7e7
feat(observability): expose fleet read outcomes
Jul 18, 2026
be442ff
Merge pull request #241 from ArdurAI/gnanirahulnutakki/feat/e10-fleet…
gnanirahulnutakki Jul 18, 2026
9f83745
feat(observability): alert on degraded fleet reads
Jul 18, 2026
9e7831c
Merge pull request #243 from ArdurAI/gnanirahulnutakki/feat/e10-fleet…
gnanirahulnutakki Jul 18, 2026
59b1366
feat(hub): make readiness database-aware
Jul 18, 2026
ca5b6a1
Merge pull request #245 from ArdurAI/gnanirahulnutakki/feat/e10-datab…
gnanirahulnutakki Jul 18, 2026
be4220f
feat(hub): expose bounded readiness metrics
Jul 18, 2026
3b7d66e
Merge pull request #247 from ArdurAI/gnanirahulnutakki/feat/e10-readi…
gnanirahulnutakki Jul 18, 2026
5c7accb
feat(observability): alert on readiness degradation
Jul 18, 2026
ac41425
Merge pull request #249 from ArdurAI/gnanirahulnutakki/feat/e10-readi…
gnanirahulnutakki Jul 18, 2026
81cd2cb
feat(governance): persist exact single-use approvals
Jul 18, 2026
52cc1c1
Merge pull request #251 from ArdurAI/gnanirahulnutakki/feat/single-us…
gnanirahulnutakki Jul 18, 2026
edace89
feat(audit): atomically record approval lifecycle
Jul 18, 2026
963d927
Merge pull request #253 from ArdurAI/gnanirahulnutakki/feat/approval-…
gnanirahulnutakki Jul 18, 2026
5261339
feat(observability): alert on missing hub telemetry
Jul 18, 2026
ac21302
test(observability): harden portable alert count
Jul 18, 2026
5add5fd
Merge pull request #255 from ArdurAI/gnanirahulnutakki/feat/e10-missi…
gnanirahulnutakki Jul 18, 2026
d06ca4d
feat(audit): export bounded verified chains
Jul 18, 2026
588ce92
feat(audit): export bounded verified chains (#257)
gnanirahulnutakki Jul 18, 2026
bfe1956
feat(audit): verify portable chains offline
Jul 18, 2026
9ae6e28
feat(audit): verify portable chains offline (#259)
gnanirahulnutakki Jul 18, 2026
f41c048
feat(observability): expose fleet freshness
Jul 18, 2026
64ddb3d
feat(observability): expose fleet freshness (#261)
gnanirahulnutakki Jul 18, 2026
ccd8e56
feat(observability): alert on proven stale fleet reads
Jul 18, 2026
00a9489
feat(observability): alert on proven stale fleet reads (#263)
gnanirahulnutakki Jul 18, 2026
877c5db
feat(observability): alert on policy decision errors
Jul 18, 2026
15656aa
Merge pull request #265 from ArdurAI/gnanirahulnutakki/feat/e10-polic…
gnanirahulnutakki Jul 18, 2026
8794f05
feat(observability): count authentication refusals
Jul 18, 2026
91f4a47
Merge pull request #267 from ArdurAI/gnanirahulnutakki/feat/e10-auth-…
gnanirahulnutakki Jul 18, 2026
604eb17
feat(brain): detect image pull failures honestly
Jul 18, 2026
e559244
fix(brain): fail closed on ambiguous R7 evidence
Jul 18, 2026
22c6caa
Merge pull request #269 from ArdurAI/gnanirahulnutakki/feat/e14-image…
gnanirahulnutakki Jul 18, 2026
03fdc34
feat(brain): detect Argo CD sync failures honestly
Jul 18, 2026
7f243bb
fix(brain): constrain Argo sync evidence
Jul 18, 2026
89cffa5
Merge pull request #271 from ArdurAI/gnanirahulnutakki/feat/e14-argoc…
gnanirahulnutakki Jul 18, 2026
fa22b07
feat(observability): count bounded auth outcomes
Jul 18, 2026
4096320
Merge pull request #273 from ArdurAI/gnanirahulnutakki/feat/e10-auth-…
gnanirahulnutakki Jul 18, 2026
fe38d49
feat(observability): warn on refusal-only auth traffic
Jul 18, 2026
1bad8b4
fix(observability): require recent auth telemetry
Jul 18, 2026
10b8c06
feat(observability): warn on refusal-only auth traffic (#275)
gnanirahulnutakki Jul 18, 2026
d0524bb
feat(audit): add snapshot-bound export pages
Jul 18, 2026
1a97425
feat(audit): add snapshot-bound export pages (#277)
gnanirahulnutakki Jul 18, 2026
3078e35
feat(brain): add GitHub Actions failure rule
Jul 18, 2026
098b2b8
feat(brain): add GitHub Actions failure rule (#279)
gnanirahulnutakki Jul 18, 2026
2d1c89e
feat(brain): bridge Elasticsearch log causes into R3
Jul 19, 2026
5cab98c
fix(brain): harden Elasticsearch graph decoding
Jul 19, 2026
84d93a9
docs(session): label coverage checkpoints
Jul 19, 2026
df28654
Merge pull request #281 from ArdurAI/gnanirahulnutakki/feat/e14-elast…
gnanirahulnutakki Jul 19, 2026
c7c1c3b
feat(cost): project OpenCost namespace allocations
Jul 19, 2026
3d45529
Merge pull request #283 from ArdurAI/gnanirahulnutakki/feat/e13-openc…
gnanirahulnutakki Jul 19, 2026
f88dc05
feat(cost): roll up coverage-aware OpenCost snapshots
Jul 19, 2026
f3e00f4
feat(cost): roll up coverage-aware OpenCost snapshots (#285)
gnanirahulnutakki Jul 19, 2026
d315394
feat(cost): project bounded DCGM GPU utilization
Jul 19, 2026
cbb6311
Merge pull request #287 from ArdurAI/gnanirahulnutakki/feat/e13-dcgm-…
gnanirahulnutakki Jul 19, 2026
28b9dfe
feat(connector): split wire and adapter versions
Jul 19, 2026
76f8f8f
Merge pull request #289 from ArdurAI/gnanirahulnutakki/feat/e12-wire-…
gnanirahulnutakki Jul 19, 2026
3f371d6
chore(deps): bump the go-runtime group with 4 updates
dependabot[bot] Jul 20, 2026
aa41d6e
chore(deps): bump the actions group with 6 updates
dependabot[bot] Jul 20, 2026
2b61575
feat(brain): add remediation candidate contract
Jul 20, 2026
c819723
fix(brain): harden remediation boundaries
Jul 20, 2026
0c45474
Merge pull request #293 from ArdurAI/gnanirahulnutakki/feat/e14-remed…
gnanirahulnutakki Jul 20, 2026
e561613
Merge pull request #290 from ArdurAI/dependabot/go_modules/dev/go-run…
gnanirahulnutakki Jul 21, 2026
fb1bbfb
Merge pull request #291 from ArdurAI/dependabot/github_actions/dev/ac…
gnanirahulnutakki Jul 21, 2026
3a380c9
ci(ci): enforce aggregate release policies
Jul 21, 2026
f0e071a
Merge pull request #294 from ArdurAI/gnanirahulnutakki/ci-release-pol…
gnanirahulnutakki Jul 21, 2026
cda513b
fix(fleet): harden audit and refresh boundaries
Jul 21, 2026
ff43583
Merge pull request #295 from ArdurAI/gnanirahulnutakki/audit-hardenin…
gnanirahulnutakki Jul 21, 2026
41e1a85
fix(deps): remediate x/text normalization loop
Jul 21, 2026
9e135de
Merge pull request #296 from ArdurAI/gnanirahulnutakki/security-xtext…
gnanirahulnutakki Jul 21, 2026
6915b61
fix(desktop): enforce exact Wails tool version
Jul 21, 2026
ae2d28d
Merge pull request #297 from ArdurAI/gnanirahulnutakki/wails-policy-2…
gnanirahulnutakki Jul 21, 2026
8e30746
fix(release): refresh supply-chain tooling
Jul 21, 2026
f128eee
Merge pull request #298 from ArdurAI/gnanirahulnutakki/release-toolin…
gnanirahulnutakki Jul 21, 2026
a15cc45
feat(approvals): expire grants after ten minutes
Jul 21, 2026
4b562ab
Merge pull request #300 from ArdurAI/gnanirahulnutakki/approval-expir…
gnanirahulnutakki Jul 21, 2026
e91af76
feat(remediation): resolve source-owned GitOps provenance
Jul 22, 2026
430eea3
Merge pull request #302 from ArdurAI/gnanirahulnutakki/gitops-provena…
gnanirahulnutakki Jul 22, 2026
142ddd1
feat(remediation): define immutable Git source snapshot
Jul 22, 2026
377cb8b
Merge pull request #305 from ArdurAI/gnanirahulnutakki/git-source-sna…
gnanirahulnutakki Jul 22, 2026
8ce5d0a
test(hubdb): derive approval fixtures from database clock
Jul 22, 2026
01b5ae7
Merge pull request #306 from ArdurAI/gnanirahulnutakki/fix-approval-e…
gnanirahulnutakki Jul 22, 2026
5d229ed
feat(remediation): bind immutable desired changes
Jul 22, 2026
ea6dff3
Merge pull request #308 from ArdurAI/gnanirahulnutakki/desired-change…
gnanirahulnutakki Jul 23, 2026
277277e
fix(hub): preserve browser OIDC session handoff
Jul 23, 2026
fdf932b
Merge pull request #312 from ArdurAI/gnanirahulnutakki/fix-oidc-sessi…
gnanirahulnutakki Jul 23, 2026
f3eac6b
fix(hub): clear parser-owned session key bytes
Jul 23, 2026
e52e71a
Merge pull request #313 from ArdurAI/gnanirahulnutakki/clear-session-…
gnanirahulnutakki Jul 23, 2026
d54b0be
docs: reconcile deep-audit evidence contracts
Jul 23, 2026
5d89527
Merge pull request #314 from ArdurAI/gnanirahulnutakki/docs-audit-con…
gnanirahulnutakki Jul 23, 2026
37415d9
feat(cli): add one-command local demo launcher
Jul 23, 2026
c771764
Merge pull request #316 from ArdurAI/gnanirahulnutakki/feat/demo-launch
gnanirahulnutakki Jul 23, 2026
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
29 changes: 24 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,11 @@ env:
GOLANGCI_VERSION: "v2.12.2"
GOVULNCHECK_VERSION: "v1.6.0"
GORELEASER_VERSION: "v2.17.0"
HELM_VERSION: "v4.2.2"
HELM_LINUX_AMD64_SHA256: "9adafecab4d406853bba163a70e9f104f47dbbf65ce24b7653bae7e36150bcb6"
SYFT_VERSION: "v1.46.0"
HELM_VERSION: "v4.2.3"
HELM_LINUX_AMD64_SHA256: "e9b88b4ee95b18c706839c28d3a0220e5bc470e9cd9262410c90793c45ff8b7c"
PROMETHEUS_VERSION: "v3.13.1"
PROMETHEUS_LINUX_AMD64_SHA256: "962b812371aff838d152b6ff2d56fdb7a6396f5542f48ebf73421b9721f0d103"
SYFT_VERSION: "v1.49.0"

jobs:
build-test-lint:
Expand All @@ -31,7 +33,7 @@ jobs:
with:
persist-credentials: false

- uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0
- uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
with:
go-version: ${{ env.GO_VERSION }}
check-latest: false
Expand Down Expand Up @@ -75,6 +77,9 @@ jobs:
- name: Unit tests with race detector
run: go test -race -count=1 -coverprofile=coverage.out ./...

- name: Operator safety policy tests
run: make test-scripts

- name: Multi-layer tenant-isolation suite
run: make e2e-isolation

Expand All @@ -84,6 +89,20 @@ jobs:
- name: Binary integration smoke test
run: go test -race -count=1 -tags=e2e ./tests/e2e

- name: Install pinned promtool
run: |
set -euo pipefail
version="${PROMETHEUS_VERSION#v}"
archive="$RUNNER_TEMP/prometheus.tar.gz"
curl --fail --silent --show-error --location --proto '=https' --tlsv1.2 --retry 3 --retry-all-errors \
--output "$archive" "https://github.com/prometheus/prometheus/releases/download/${PROMETHEUS_VERSION}/prometheus-${version}.linux-amd64.tar.gz"
echo "${PROMETHEUS_LINUX_AMD64_SHA256} ${archive}" | sha256sum --check --status
tar -xzf "$archive" -C "$RUNNER_TEMP"
install -m 0755 "$RUNNER_TEMP/prometheus-${version}.linux-amd64/promtool" "$RUNNER_TEMP/promtool"

- name: Portable Prometheus alert contract
run: make test-alert-rules PROMTOOL="$RUNNER_TEMP/promtool"

- name: Immutable OCI image contract
run: make e2e-oci

Expand Down Expand Up @@ -115,7 +134,7 @@ jobs:
fetch-depth: 0
persist-credentials: false

- uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0
- uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
with:
go-version: ${{ env.GO_VERSION }}
check-latest: false
Expand Down
28 changes: 14 additions & 14 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ concurrency:
env:
GO_VERSION: "1.26.5"
GORELEASER_VERSION: "v2.17.0"
SYFT_VERSION: "v1.46.0"
COSIGN_VERSION: "v3.0.6"
SYFT_VERSION: "v1.49.0"
COSIGN_VERSION: "v3.1.2"
HUB_IMAGE: ghcr.io/ardurai/sith-hub

jobs:
Expand Down Expand Up @@ -58,7 +58,7 @@ jobs:
echo "VERSION=${GITHUB_REF_NAME#v}" >> "$GITHUB_ENV"
echo "RELEASE_KIND=${release_kind}" >> "$GITHUB_ENV"

- uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0
- uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
with:
go-version: ${{ env.GO_VERSION }}
check-latest: false
Expand Down Expand Up @@ -112,13 +112,13 @@ jobs:
test -x "$IMAGE_CONTEXT/bin/linux/arm64/sith"

- name: Set up QEMU for hub image platforms
uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3
uses: docker/setup-qemu-action@96fe6ef7f33517b61c61be40b68a1882f3264fb8 # v4.2.0

- name: Set up Buildx for hub image platforms
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3
uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0

- name: Authenticate to the GitHub Container Registry
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3
uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0
with:
registry: ghcr.io
username: ${{ github.actor }}
Expand All @@ -143,7 +143,7 @@ jobs:

- name: Publish immutable multi-platform hub image
id: hub_image
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0
with:
context: ${{ runner.temp }}/sith-hub-image
file: ${{ runner.temp }}/sith-hub-image/Containerfile
Expand Down Expand Up @@ -184,15 +184,15 @@ jobs:

- name: Attest hub image build provenance
id: hub_provenance
uses: actions/attest@a1948c3f048ba23858d222213b7c278aabede763 # v4.1.1
uses: actions/attest@f7c74d28b9d84cb8768d0b8ca14a4bac6ef463e6 # v4.2.0
with:
subject-name: ${{ env.HUB_IMAGE }}
subject-digest: ${{ steps.hub_image.outputs.digest }}
push-to-registry: true

- name: Attest hub image SBOM
id: hub_sbom
uses: actions/attest@a1948c3f048ba23858d222213b7c278aabede763 # v4.1.1
uses: actions/attest@f7c74d28b9d84cb8768d0b8ca14a4bac6ef463e6 # v4.2.0
with:
subject-name: ${{ env.HUB_IMAGE }}
subject-digest: ${{ steps.hub_image.outputs.digest }}
Expand All @@ -210,34 +210,34 @@ jobs:

- name: Generate SLSA build provenance
id: provenance
uses: actions/attest@a1948c3f048ba23858d222213b7c278aabede763 # v4.1.1
uses: actions/attest@f7c74d28b9d84cb8768d0b8ca14a4bac6ef463e6 # v4.2.0
with:
subject-checksums: dist/checksums.txt

- name: Attest darwin amd64 SBOM
id: sbom_darwin_amd64
uses: actions/attest@a1948c3f048ba23858d222213b7c278aabede763 # v4.1.1
uses: actions/attest@f7c74d28b9d84cb8768d0b8ca14a4bac6ef463e6 # v4.2.0
with:
subject-path: dist/sith_${{ env.VERSION }}_darwin_amd64.tar.gz
sbom-path: dist/sith_${{ env.VERSION }}_darwin_amd64.tar.gz.spdx.json

- name: Attest darwin arm64 SBOM
id: sbom_darwin_arm64
uses: actions/attest@a1948c3f048ba23858d222213b7c278aabede763 # v4.1.1
uses: actions/attest@f7c74d28b9d84cb8768d0b8ca14a4bac6ef463e6 # v4.2.0
with:
subject-path: dist/sith_${{ env.VERSION }}_darwin_arm64.tar.gz
sbom-path: dist/sith_${{ env.VERSION }}_darwin_arm64.tar.gz.spdx.json

- name: Attest linux amd64 SBOM
id: sbom_linux_amd64
uses: actions/attest@a1948c3f048ba23858d222213b7c278aabede763 # v4.1.1
uses: actions/attest@f7c74d28b9d84cb8768d0b8ca14a4bac6ef463e6 # v4.2.0
with:
subject-path: dist/sith_${{ env.VERSION }}_linux_amd64.tar.gz
sbom-path: dist/sith_${{ env.VERSION }}_linux_amd64.tar.gz.spdx.json

- name: Attest linux arm64 SBOM
id: sbom_linux_arm64
uses: actions/attest@a1948c3f048ba23858d222213b7c278aabede763 # v4.1.1
uses: actions/attest@f7c74d28b9d84cb8768d0b8ca14a4bac6ef463e6 # v4.2.0
with:
subject-path: dist/sith_${{ env.VERSION }}_linux_arm64.tar.gz
sbom-path: dist/sith_${{ env.VERSION }}_linux_arm64.tar.gz.spdx.json
Expand Down
25 changes: 19 additions & 6 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,12 @@ CMD := ./cmd/sith
BIN_DIR := bin
GOLANGCI ?= golangci-lint
GOVULNCHECK ?= govulncheck
PROMTOOL ?= promtool
KIND ?= kind
HELM ?= helm
GORELEASER ?= goreleaser
WAILS ?= wails
WAILS_VERSION ?= v2.12.0
WAILS_VERSION ?= v2.13.0
CODESIGN ?= codesign
PLISTBUDDY ?= /usr/libexec/PlistBuddy
LIPO ?= lipo
Expand All @@ -34,7 +35,7 @@ LDFLAGS := -s -w \
-X $(PKG)/internal/buildinfo.Commit=$(COMMIT) \
-X $(PKG)/internal/buildinfo.Date=$(DATE)

.PHONY: all build desktop-build test test-scripts perf e2e e2e-helm e2e-oci e2e-kind e2e-ocm e2e-postgres e2e-isolation lint vuln fmt fmt-check vet tidy clean run ci release-check help
.PHONY: all build desktop-build test test-scripts test-alert-rules perf e2e e2e-helm e2e-oci e2e-kind e2e-ocm e2e-postgres e2e-isolation lint vuln fmt fmt-check vet tidy clean run ci release-check help

all: build

Expand All @@ -43,8 +44,7 @@ build: ## Build the sith binary into bin/
go build -trimpath -ldflags '$(LDFLAGS)' -o $(BIN_DIR)/$(BINARY) $(CMD)

desktop-build: ## Build the ad-hoc-signed macOS arm64 Sith.app development bundle
@command -v "$(WAILS)" >/dev/null || { echo "Wails $(WAILS_VERSION) is required" >&2; exit 1; }
@"$(WAILS)" version | grep -q '$(WAILS_VERSION)' || { echo "Wails $(WAILS_VERSION) is required" >&2; exit 1; }
@hack/verify-wails-version.sh "$(WAILS)" "$(WAILS_VERSION)"
cd cmd/sith-desktop && "$(WAILS)" build -clean -m -nosyncgomod -s -trimpath -platform darwin/arm64
@set -euo pipefail; \
app='cmd/sith-desktop/build/bin/Sith.app'; \
Expand All @@ -59,11 +59,21 @@ test: ## Run unit tests with the race detector and report coverage
go test -race -count=1 -coverprofile=coverage.out ./...

test-scripts: ## Run focused safety tests for operator-facing shell harnesses
bash tests/scripts/wails_tooling_policy_test.sh
bash tests/scripts/release_tooling_policy_test.sh
bash tests/scripts/helm_tooling_policy_test.sh
bash tests/scripts/m0_ocm_falsification_safety_test.sh
bash tests/scripts/release_tag_identity_guide_test.sh
bash tests/scripts/release_tag_policy_test.sh
bash tests/scripts/release_pr_gate_policy_test.sh
bash tests/scripts/release_hub_image_policy_test.sh
bash tests/scripts/prometheus_tooling_policy_test.sh

test-alert-rules: ## Validate and unit-test the portable Prometheus alert contract
@promtool_path="$$(command -v "$(PROMTOOL)")" || { echo "promtool is required" >&2; exit 1; }; \
case "$$promtool_path" in /*) ;; *) promtool_path="$$(pwd)/$$promtool_path" ;; esac; \
cd monitoring && "$$promtool_path" check rules sith-hub.rules.yml && \
"$$promtool_path" test rules sith-hub.rules.test.yml

perf: ## Enforce the warm-cache TUI p95 latency budget without race overhead
go test -count=1 -run '^TestWarmViewP95UnderOneHundredMilliseconds$$' ./internal/tui
Expand All @@ -79,7 +89,7 @@ e2e-oci: ## Build and inspect the local immutable OCI image contract for linux/a

e2e-kind: ## Exercise adapter and binary against two real kind clusters
KIND_BIN="$(KIND)" KIND_NODE_IMAGE="$(KIND_NODE_IMAGE)" \
go test -race -count=1 -timeout=15m -tags='e2e kind' -run '^Test(KindFleetFanout|KindOCIImageContract)$$' ./tests/e2e
go test -race -count=1 -timeout=15m -tags='e2e kind' -run '^Test(KindFleetFanout|KindOCIImageContract|KindArgoApplicationProjection)$$' ./tests/e2e

e2e-ocm: ## Prove direct ClusterProxy transport in the pinned two-spoke M0 lab
@set -euo pipefail; \
Expand Down Expand Up @@ -114,6 +124,9 @@ e2e-isolation: ## Run signed-identity, scoped-query, and real PostgreSQL isolati
go test -run '^$$' -fuzz '^FuzzQueryScopedNeverLeaksForeignWorkspace$$' \
-fuzztime="$(ISOLATION_FUZZ_BUDGET)" -parallel="$(ISOLATION_FUZZ_WORKERS)" \
-timeout=2m ./internal/fleetcache
go test -run '^$$' -fuzz '^FuzzStoreForeignWorkspaceMutationCannotChangeEitherWorkspace$$' \
-fuzztime="$(ISOLATION_FUZZ_BUDGET)" -parallel="$(ISOLATION_FUZZ_WORKERS)" \
-timeout=2m ./internal/fleetcache

lint: ## Run golangci-lint (v2)
$(GOLANGCI) run ./...
Expand Down Expand Up @@ -141,7 +154,7 @@ clean: ## Remove build and coverage artifacts
run: build ## Build then run sith version
$(BIN_DIR)/$(BINARY) version

ci: fmt-check vet lint vuln test test-scripts perf e2e build ## Run the full CI gate locally
ci: fmt-check vet lint vuln test test-scripts test-alert-rules perf e2e build ## Run the full CI gate locally

release-check: ## Build, verify, and package the reproducible multi-platform release snapshot twice
@command -v "$(GORELEASER)" >/dev/null || { echo "goreleaser is required" >&2; exit 1; }
Expand Down
Loading