Compare commits
76 Commits
d92973d6fd
...
feature/do
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
43c281a8b2 | ||
| 91550196fe | |||
| e8eacde73e | |||
| 5d7c687a77 | |||
| ffa219cfeb | |||
|
|
579236bfce | ||
|
|
18d87c64c5 | ||
|
|
347c88342c | ||
|
|
cc69d332e3 | ||
|
|
53508ceccb | ||
|
|
6a299d231f | ||
|
|
635c70e828 | ||
|
|
0de3c8a3f0 | ||
|
|
175b750e29 | ||
|
|
8768c27f30 | ||
|
|
b018949a8d | ||
|
|
f214edff82 | ||
|
|
75f6942769 | ||
|
|
600f3a7a3c | ||
|
|
4dc7cf834a | ||
|
|
e1262eb916 | ||
|
|
2d079d61ed | ||
|
|
e0b585c799 | ||
|
|
de53785176 | ||
|
|
ca91f40051 | ||
|
|
35c8f9216f | ||
|
|
e923880694 | ||
|
|
37cba83708 | ||
|
|
ea1d58a89b | ||
|
|
47168fec38 | ||
|
|
6d049905c7 | ||
|
|
acbb0ff637 | ||
|
|
d785a9095f | ||
|
|
0c9e8d5d18 | ||
|
|
76ecea482e | ||
|
|
2d08f52715 | ||
|
|
885ce86af4 | ||
|
|
44171930ff | ||
|
|
909d9b6220 | ||
|
|
790801f329 | ||
|
|
c11d87d252 | ||
|
|
7df0677e34 | ||
|
|
b39eb34226 | ||
|
|
808ab87b21 | ||
|
|
25254e3831 | ||
|
|
0bef705bcc | ||
|
|
71e9a56cfd | ||
|
|
17d45a6d30 | ||
|
|
8f54ffa203 | ||
|
|
3488b22c0c | ||
|
|
7e7be4d2fd | ||
|
|
887b0a1c67 | ||
|
|
a4c4fda2a1 | ||
|
|
b34f13dc03 | ||
| 39d0ef6728 | |||
|
|
2548abc56f | ||
| b3656e5cb7 | |||
|
|
d040c001ac | ||
|
|
d1cbb905f8 | ||
|
|
05da719048 | ||
|
|
1c6730a1d2 | ||
|
|
3b96b2e3ea | ||
|
|
ef6e4b2067 | ||
|
|
8abbf9574d | ||
|
|
cfa2274d31 | ||
|
|
4c55b01222 | ||
|
|
e950474a77 | ||
|
|
e901d31acf | ||
|
|
c34fb7256d | ||
|
|
ea970ead2a | ||
|
|
d63af51f84 | ||
|
|
4831c7fcb0 | ||
|
|
1c782897f7 | ||
|
|
56e2f64d07 | ||
|
|
9f6e6f7fb3 | ||
|
|
6bee1fdcf5 |
11
.claude/settings.local.json
Normal file
11
.claude/settings.local.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"permissions": {
|
||||
"allow": [
|
||||
"Bash(wc:*)",
|
||||
"Bash(sort:*)"
|
||||
],
|
||||
"deny": [],
|
||||
"ask": []
|
||||
},
|
||||
"outputStyle": "default"
|
||||
}
|
||||
@@ -20,6 +20,8 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
- name: Install dnslib
|
||||
run: pip install dnslib
|
||||
- name: Run sealed-mode smoke
|
||||
|
||||
@@ -32,6 +32,9 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Export OpenSSL 1.1 shim for Mongo2Go
|
||||
run: scripts/enable-openssl11-shim.sh
|
||||
|
||||
@@ -78,6 +81,9 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Export OpenSSL 1.1 shim for Mongo2Go
|
||||
run: scripts/enable-openssl11-shim.sh
|
||||
|
||||
|
||||
@@ -17,6 +17,8 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
|
||||
@@ -14,6 +14,9 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Build bundle
|
||||
run: |
|
||||
chmod +x scripts/attest/build-attestation-bundle.sh
|
||||
|
||||
@@ -58,6 +58,9 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Resolve Authority configuration
|
||||
id: config
|
||||
run: |
|
||||
|
||||
30
.gitea/workflows/bench-determinism.yml
Normal file
30
.gitea/workflows/bench-determinism.yml
Normal file
@@ -0,0 +1,30 @@
|
||||
name: bench-determinism
|
||||
on:
|
||||
workflow_dispatch: {}
|
||||
|
||||
jobs:
|
||||
bench-determinism:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
|
||||
- name: Run determinism bench
|
||||
env:
|
||||
BENCH_DETERMINISM_THRESHOLD: "0.95"
|
||||
run: |
|
||||
chmod +x scripts/bench/determinism-run.sh
|
||||
scripts/bench/determinism-run.sh
|
||||
|
||||
- name: Upload determinism artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: bench-determinism
|
||||
path: out/bench-determinism/**
|
||||
@@ -111,6 +111,10 @@ jobs:
|
||||
- name: Validate telemetry storage configuration
|
||||
run: python3 ops/devops/telemetry/validate_storage_stack.py
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: |
|
||||
python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Telemetry tenant isolation smoke
|
||||
env:
|
||||
COMPOSE_DIR: ${GITHUB_WORKSPACE}/deploy/compose
|
||||
@@ -180,6 +184,37 @@ jobs:
|
||||
--logger "trx;LogFileName=stellaops-concelier-tests.trx" \
|
||||
--results-directory "$TEST_RESULTS_DIR"
|
||||
|
||||
- name: Run PostgreSQL storage integration tests (Testcontainers)
|
||||
env:
|
||||
POSTGRES_TEST_IMAGE: postgres:16-alpine
|
||||
run: |
|
||||
set -euo pipefail
|
||||
mkdir -p "$TEST_RESULTS_DIR"
|
||||
PROJECTS=(
|
||||
src/__Libraries/__Tests/StellaOps.Infrastructure.Postgres.Tests/StellaOps.Infrastructure.Postgres.Tests.csproj
|
||||
src/Authority/__Tests/StellaOps.Authority.Storage.Postgres.Tests/StellaOps.Authority.Storage.Postgres.Tests.csproj
|
||||
src/Scheduler/__Tests/StellaOps.Scheduler.Storage.Postgres.Tests/StellaOps.Scheduler.Storage.Postgres.Tests.csproj
|
||||
src/Concelier/__Tests/StellaOps.Concelier.Storage.Postgres.Tests/StellaOps.Concelier.Storage.Postgres.Tests.csproj
|
||||
src/Excititor/__Tests/StellaOps.Excititor.Storage.Postgres.Tests/StellaOps.Excititor.Storage.Postgres.Tests.csproj
|
||||
src/Notify/__Tests/StellaOps.Notify.Storage.Postgres.Tests/StellaOps.Notify.Storage.Postgres.Tests.csproj
|
||||
src/Policy/__Tests/StellaOps.Policy.Storage.Postgres.Tests/StellaOps.Policy.Storage.Postgres.Tests.csproj
|
||||
)
|
||||
for project in "${PROJECTS[@]}"; do
|
||||
name="$(basename "${project%.*}")"
|
||||
dotnet test "$project" \
|
||||
--configuration $BUILD_CONFIGURATION \
|
||||
--logger "trx;LogFileName=${name}.trx" \
|
||||
--results-directory "$TEST_RESULTS_DIR"
|
||||
done
|
||||
|
||||
- name: Run TimelineIndexer tests (EB1 evidence linkage gate)
|
||||
run: |
|
||||
mkdir -p "$TEST_RESULTS_DIR"
|
||||
dotnet test src/TimelineIndexer/StellaOps.TimelineIndexer/StellaOps.TimelineIndexer.sln \
|
||||
--configuration $BUILD_CONFIGURATION \
|
||||
--logger "trx;LogFileName=timelineindexer-tests.trx" \
|
||||
--results-directory "$TEST_RESULTS_DIR"
|
||||
|
||||
- name: Lint policy DSL samples
|
||||
run: dotnet run --project tools/PolicyDslValidator/PolicyDslValidator.csproj -- --strict docs/examples/policies/*.yaml
|
||||
|
||||
@@ -310,6 +345,56 @@ PY
|
||||
--logger "trx;LogFileName=stellaops-scanner-lang-tests.trx" \
|
||||
--results-directory "$TEST_RESULTS_DIR"
|
||||
|
||||
- name: Build and test Router components
|
||||
run: |
|
||||
set -euo pipefail
|
||||
ROUTER_PROJECTS=(
|
||||
src/__Libraries/StellaOps.Router.Common/StellaOps.Router.Common.csproj
|
||||
src/__Libraries/StellaOps.Router.Config/StellaOps.Router.Config.csproj
|
||||
src/__Libraries/StellaOps.Router.Transport.InMemory/StellaOps.Router.Transport.InMemory.csproj
|
||||
src/__Libraries/StellaOps.Router.Transport.Tcp/StellaOps.Router.Transport.Tcp.csproj
|
||||
src/__Libraries/StellaOps.Router.Transport.Tls/StellaOps.Router.Transport.Tls.csproj
|
||||
src/__Libraries/StellaOps.Router.Transport.Udp/StellaOps.Router.Transport.Udp.csproj
|
||||
src/__Libraries/StellaOps.Router.Transport.RabbitMq/StellaOps.Router.Transport.RabbitMq.csproj
|
||||
src/__Libraries/StellaOps.Microservice/StellaOps.Microservice.csproj
|
||||
src/__Libraries/StellaOps.Microservice.SourceGen/StellaOps.Microservice.SourceGen.csproj
|
||||
)
|
||||
for project in "${ROUTER_PROJECTS[@]}"; do
|
||||
echo "::group::Build $project"
|
||||
dotnet build "$project" --configuration $BUILD_CONFIGURATION --no-restore -warnaserror
|
||||
echo "::endgroup::"
|
||||
done
|
||||
|
||||
- name: Run Router and Microservice tests
|
||||
run: |
|
||||
mkdir -p "$TEST_RESULTS_DIR"
|
||||
ROUTER_TEST_PROJECTS=(
|
||||
# Core Router libraries
|
||||
src/__Libraries/__Tests/StellaOps.Router.Common.Tests/StellaOps.Router.Common.Tests.csproj
|
||||
src/__Libraries/__Tests/StellaOps.Router.Config.Tests/StellaOps.Router.Config.Tests.csproj
|
||||
# Transport layers
|
||||
src/__Libraries/__Tests/StellaOps.Router.Transport.InMemory.Tests/StellaOps.Router.Transport.InMemory.Tests.csproj
|
||||
src/__Libraries/__Tests/StellaOps.Router.Transport.Tcp.Tests/StellaOps.Router.Transport.Tcp.Tests.csproj
|
||||
src/__Libraries/__Tests/StellaOps.Router.Transport.Tls.Tests/StellaOps.Router.Transport.Tls.Tests.csproj
|
||||
src/__Libraries/__Tests/StellaOps.Router.Transport.Udp.Tests/StellaOps.Router.Transport.Udp.Tests.csproj
|
||||
# Microservice SDK
|
||||
src/__Libraries/__Tests/StellaOps.Microservice.Tests/StellaOps.Microservice.Tests.csproj
|
||||
src/__Libraries/__Tests/StellaOps.Microservice.SourceGen.Tests/StellaOps.Microservice.SourceGen.Tests.csproj
|
||||
# Integration tests
|
||||
src/__Libraries/__Tests/StellaOps.Router.Integration.Tests/StellaOps.Router.Integration.Tests.csproj
|
||||
# Gateway tests
|
||||
src/Gateway/__Tests/StellaOps.Gateway.WebService.Tests/StellaOps.Gateway.WebService.Tests.csproj
|
||||
)
|
||||
for project in "${ROUTER_TEST_PROJECTS[@]}"; do
|
||||
name="$(basename "${project%.*}")"
|
||||
echo "::group::Test $name"
|
||||
dotnet test "$project" \
|
||||
--configuration $BUILD_CONFIGURATION \
|
||||
--logger "trx;LogFileName=${name}.trx" \
|
||||
--results-directory "$TEST_RESULTS_DIR"
|
||||
echo "::endgroup::"
|
||||
done
|
||||
|
||||
- name: Run scanner analyzer performance benchmark
|
||||
env:
|
||||
PERF_OUTPUT_DIR: ${{ github.workspace }}/artifacts/perf/scanner-analyzers
|
||||
|
||||
@@ -22,6 +22,9 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Setup .NET
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
|
||||
@@ -18,6 +18,9 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Setup .NET
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
|
||||
47
.gitea/workflows/concelier-attestation-tests.yml
Normal file
47
.gitea/workflows/concelier-attestation-tests.yml
Normal file
@@ -0,0 +1,47 @@
|
||||
name: Concelier Attestation Tests
|
||||
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- 'src/Concelier/**'
|
||||
- '.gitea/workflows/concelier-attestation-tests.yml'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'src/Concelier/**'
|
||||
- '.gitea/workflows/concelier-attestation-tests.yml'
|
||||
|
||||
jobs:
|
||||
attestation-tests:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Setup .NET 10 preview
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
dotnet-version: '10.0.100-rc.2.25502.107'
|
||||
|
||||
- name: Restore Concelier solution
|
||||
run: dotnet restore src/Concelier/StellaOps.Concelier.sln
|
||||
|
||||
- name: Build WebService Tests (no analyzers)
|
||||
run: dotnet build src/Concelier/__Tests/StellaOps.Concelier.WebService.Tests/StellaOps.Concelier.WebService.Tests.csproj -c Release -p:DisableAnalyzers=true
|
||||
|
||||
- name: Run WebService attestation test
|
||||
run: dotnet test src/Concelier/__Tests/StellaOps.Concelier.WebService.Tests/StellaOps.Concelier.WebService.Tests.csproj -c Release --filter InternalAttestationVerify --no-build --logger trx --results-directory TestResults
|
||||
|
||||
- name: Build Core Tests (no analyzers)
|
||||
run: dotnet build src/Concelier/__Tests/StellaOps.Concelier.Core.Tests/StellaOps.Concelier.Core.Tests.csproj -c Release -p:DisableAnalyzers=true
|
||||
|
||||
- name: Run Core attestation builder tests
|
||||
run: dotnet test src/Concelier/__Tests/StellaOps.Concelier.Core.Tests/StellaOps.Concelier.Core.Tests.csproj -c Release --filter EvidenceBundleAttestationBuilderTests --no-build --logger trx --results-directory TestResults
|
||||
|
||||
- name: Upload TRX results
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: concelier-attestation-tests-trx
|
||||
path: '**/TestResults/*.trx'
|
||||
@@ -24,6 +24,9 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
|
||||
@@ -25,6 +25,9 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
|
||||
40
.gitea/workflows/cryptopro-optin.yml
Normal file
40
.gitea/workflows/cryptopro-optin.yml
Normal file
@@ -0,0 +1,40 @@
|
||||
name: cryptopro-optin
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
configuration:
|
||||
description: Build configuration
|
||||
default: Release
|
||||
run_tests:
|
||||
description: Run CryptoPro signer tests (requires CSP installed on runner)
|
||||
default: true
|
||||
|
||||
jobs:
|
||||
cryptopro:
|
||||
runs-on: windows-latest
|
||||
env:
|
||||
STELLAOPS_CRYPTO_PRO_ENABLED: "1"
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Setup .NET 10 (preview)
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
dotnet-version: 10.0.100-rc.2.25502.107
|
||||
|
||||
- name: Build CryptoPro plugin
|
||||
run: |
|
||||
dotnet build src/__Libraries/StellaOps.Cryptography.Plugin.CryptoPro/StellaOps.Cryptography.Plugin.CryptoPro.csproj -c ${{ github.event.inputs.configuration || 'Release' }}
|
||||
|
||||
- name: Run CryptoPro signer tests (requires CSP pre-installed)
|
||||
if: ${{ github.event.inputs.run_tests != 'false' }}
|
||||
run: |
|
||||
powershell -File scripts/crypto/run-cryptopro-tests.ps1 -Configuration ${{ github.event.inputs.configuration || 'Release' }}
|
||||
|
||||
# NOTE: This workflow assumes the windows runner already has CryptoPro CSP installed and licensed.
|
||||
# Leave it opt-in to avoid breaking default CI lanes.
|
||||
@@ -11,6 +11,9 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Setup Node (corepack/pnpm)
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
|
||||
@@ -29,6 +29,9 @@ jobs:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Export OpenSSL 1.1 shim for Mongo2Go
|
||||
run: scripts/enable-openssl11-shim.sh
|
||||
|
||||
|
||||
@@ -14,6 +14,9 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Emit retention summary
|
||||
env:
|
||||
RETENTION_TARGET: ${{ github.event.inputs.retention_target }}
|
||||
@@ -25,3 +28,59 @@ jobs:
|
||||
with:
|
||||
name: evidence-locker
|
||||
path: out/evidence-locker/**
|
||||
|
||||
push-zastava-evidence:
|
||||
runs-on: ubuntu-latest
|
||||
needs: check-evidence-locker
|
||||
env:
|
||||
STAGED_DIR: evidence-locker/zastava/2025-12-02
|
||||
MODULE_ROOT: docs/modules/zastava
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Package staged Zastava artefacts
|
||||
run: |
|
||||
test -d "$MODULE_ROOT" || { echo "missing $MODULE_ROOT" >&2; exit 1; }
|
||||
tmpdir=$(mktemp -d)
|
||||
rsync -a --relative \
|
||||
"$MODULE_ROOT/SHA256SUMS" \
|
||||
"$MODULE_ROOT/schemas/" \
|
||||
"$MODULE_ROOT/exports/" \
|
||||
"$MODULE_ROOT/thresholds.yaml" \
|
||||
"$MODULE_ROOT/thresholds.yaml.dsse" \
|
||||
"$MODULE_ROOT/kit/verify.sh" \
|
||||
"$MODULE_ROOT/kit/README.md" \
|
||||
"$MODULE_ROOT/kit/ed25519.pub" \
|
||||
"$MODULE_ROOT/kit/zastava-kit.tzst" \
|
||||
"$MODULE_ROOT/kit/zastava-kit.tzst.dsse" \
|
||||
"$MODULE_ROOT/evidence/README.md" \
|
||||
"$tmpdir/"
|
||||
(cd "$tmpdir/docs/modules/zastava" && sha256sum --check SHA256SUMS)
|
||||
tar --sort=name --mtime="UTC 1970-01-01" --owner=0 --group=0 --numeric-owner \
|
||||
-cf /tmp/zastava-evidence.tar -C "$tmpdir/docs/modules/zastava" .
|
||||
sha256sum /tmp/zastava-evidence.tar
|
||||
|
||||
- name: Upload staged artefacts (fallback)
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: zastava-evidence-locker-2025-12-02
|
||||
path: /tmp/zastava-evidence.tar
|
||||
|
||||
- name: Push to Evidence Locker
|
||||
if: ${{ secrets.CI_EVIDENCE_LOCKER_TOKEN != '' && env.EVIDENCE_LOCKER_URL != '' }}
|
||||
env:
|
||||
TOKEN: ${{ secrets.CI_EVIDENCE_LOCKER_TOKEN }}
|
||||
URL: ${{ env.EVIDENCE_LOCKER_URL }}
|
||||
run: |
|
||||
curl -f -X PUT "$URL/zastava/2025-12-02/zastava-evidence.tar" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
--data-binary @/tmp/zastava-evidence.tar
|
||||
|
||||
- name: Skip push (missing secret or URL)
|
||||
if: ${{ secrets.CI_EVIDENCE_LOCKER_TOKEN == '' || env.EVIDENCE_LOCKER_URL == '' }}
|
||||
run: |
|
||||
echo "Locker push skipped: set CI_EVIDENCE_LOCKER_TOKEN and EVIDENCE_LOCKER_URL to enable." >&2
|
||||
|
||||
@@ -28,6 +28,9 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
@@ -60,6 +63,14 @@ jobs:
|
||||
- name: Trivy/OCI smoke
|
||||
run: ops/devops/export/trivy-smoke.sh
|
||||
|
||||
- name: Schema lint
|
||||
run: |
|
||||
python -m json.tool docs/modules/export-center/schemas/export-profile.schema.json >/dev/null
|
||||
python -m json.tool docs/modules/export-center/schemas/export-manifest.schema.json >/dev/null
|
||||
|
||||
- name: Offline kit verify (fixtures)
|
||||
run: bash docs/modules/export-center/operations/verify-export-kit.sh src/ExportCenter/__fixtures/export-kit
|
||||
|
||||
- name: SBOM
|
||||
run: syft dir:src/ExportCenter -o spdx-json=$ARTIFACT_DIR/exportcenter.spdx.json
|
||||
|
||||
|
||||
@@ -14,6 +14,9 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Setup Trivy
|
||||
uses: aquasecurity/trivy-action@v0.24.0
|
||||
with:
|
||||
|
||||
@@ -22,6 +22,9 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Install k6
|
||||
run: |
|
||||
sudo apt-get update -qq
|
||||
|
||||
@@ -22,6 +22,9 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
|
||||
@@ -26,6 +26,9 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
|
||||
@@ -30,6 +30,9 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
|
||||
@@ -21,15 +21,23 @@ jobs:
|
||||
- name: Setup .NET
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
dotnet-version: 10.0.100-rc.1.25451.107
|
||||
dotnet-version: 10.0.100-rc.2.25502.107
|
||||
include-prerelease: true
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Verify signing prerequisites
|
||||
run: scripts/mirror/check_signing_prereqs.sh
|
||||
|
||||
- name: Run mirror signing
|
||||
run: |
|
||||
set -euo pipefail
|
||||
scripts/mirror/check_signing_prereqs.sh
|
||||
scripts/mirror/ci-sign.sh
|
||||
|
||||
- name: Verify signed bundle
|
||||
run: |
|
||||
scripts/mirror/verify_thin_bundle.py out/mirror/thin/mirror-thin-v1.tar.gz
|
||||
|
||||
- name: Upload signed artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
@@ -40,5 +48,6 @@ jobs:
|
||||
out/mirror/thin/mirror-thin-v1.manifest.dsse.json
|
||||
out/mirror/thin/tuf/
|
||||
out/mirror/thin/oci/
|
||||
out/mirror/thin/milestone.json
|
||||
if-no-files-found: error
|
||||
retention-days: 14
|
||||
|
||||
@@ -20,6 +20,9 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
|
||||
@@ -14,6 +14,17 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Setup Python (telemetry schema checks)
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
|
||||
- name: Install telemetry schema deps
|
||||
run: python -m pip install --upgrade pip jsonschema
|
||||
|
||||
- name: Run SLO evaluator
|
||||
env:
|
||||
PROM_URL: ${{ github.event.inputs.prom_url }}
|
||||
@@ -21,6 +32,13 @@ jobs:
|
||||
chmod +x scripts/observability/slo-evaluator.sh
|
||||
scripts/observability/slo-evaluator.sh
|
||||
|
||||
- name: Telemetry schema/bundle checks
|
||||
env:
|
||||
TELEMETRY_BUNDLE_SCHEMA: docs/modules/telemetry/schemas/telemetry-bundle.schema.json
|
||||
run: |
|
||||
chmod +x ops/devops/telemetry/tests/ci-run.sh
|
||||
ops/devops/telemetry/tests/ci-run.sh
|
||||
|
||||
- name: Upload SLO results
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
|
||||
@@ -14,6 +14,9 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Install nats CLI
|
||||
run: |
|
||||
curl -sSL https://github.com/nats-io/natscli/releases/download/v0.1.4/nats-0.1.4-linux-amd64.tar.gz -o /tmp/natscli.tgz
|
||||
|
||||
70
.gitea/workflows/policy-lint.yml
Normal file
70
.gitea/workflows/policy-lint.yml
Normal file
@@ -0,0 +1,70 @@
|
||||
name: Policy Lint & Smoke
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- 'docs/policy/**'
|
||||
- 'docs/examples/policies/**'
|
||||
- 'src/Cli/**'
|
||||
- '.gitea/workflows/policy-lint.yml'
|
||||
push:
|
||||
branches: [ main ]
|
||||
paths:
|
||||
- 'docs/policy/**'
|
||||
- 'docs/examples/policies/**'
|
||||
- 'src/Cli/**'
|
||||
- '.gitea/workflows/policy-lint.yml'
|
||||
|
||||
jobs:
|
||||
policy-lint:
|
||||
runs-on: ubuntu-22.04
|
||||
env:
|
||||
DOTNET_NOLOGO: 1
|
||||
DOTNET_CLI_TELEMETRY_OPTOUT: 1
|
||||
DOTNET_SYSTEM_GLOBALIZATION_INVARIANT: 1
|
||||
TZ: UTC
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup .NET 10 RC
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
dotnet-version: 10.0.100-rc.2.25502.107
|
||||
include-prerelease: true
|
||||
|
||||
- name: Cache NuGet packages
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
~/.nuget/packages
|
||||
local-nugets/packages
|
||||
key: policy-lint-nuget-${{ runner.os }}-${{ hashFiles('**/*.csproj') }}
|
||||
|
||||
- name: Restore CLI
|
||||
run: |
|
||||
dotnet restore src/Cli/StellaOps.Cli/StellaOps.Cli.csproj --configfile nuget.config
|
||||
|
||||
- name: Lint policies (deterministic)
|
||||
run: |
|
||||
mkdir -p out/policy-lint
|
||||
dotnet run --project src/Cli/StellaOps.Cli/StellaOps.Cli.csproj -- \
|
||||
policy lint docs/examples/policies/*.stella \
|
||||
--format json --no-color \
|
||||
> out/policy-lint/lint.json
|
||||
|
||||
- name: Smoke simulate entrypoint
|
||||
run: |
|
||||
dotnet run --project src/Cli/StellaOps.Cli/StellaOps.Cli.csproj -- policy simulate --help > out/policy-lint/simulate-help.txt
|
||||
|
||||
- name: Upload lint artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: policy-lint
|
||||
path: out/policy-lint
|
||||
retention-days: 7
|
||||
89
.gitea/workflows/policy-simulate.yml
Normal file
89
.gitea/workflows/policy-simulate.yml
Normal file
@@ -0,0 +1,89 @@
|
||||
name: Policy Simulation
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- 'docs/policy/**'
|
||||
- 'docs/examples/policies/**'
|
||||
- 'scripts/policy/**'
|
||||
- '.gitea/workflows/policy-simulate.yml'
|
||||
push:
|
||||
branches: [ main ]
|
||||
paths:
|
||||
- 'docs/policy/**'
|
||||
- 'docs/examples/policies/**'
|
||||
- 'scripts/policy/**'
|
||||
- '.gitea/workflows/policy-simulate.yml'
|
||||
|
||||
jobs:
|
||||
policy-simulate:
|
||||
runs-on: ubuntu-22.04
|
||||
env:
|
||||
DOTNET_NOLOGO: 1
|
||||
DOTNET_CLI_TELEMETRY_OPTOUT: 1
|
||||
DOTNET_SYSTEM_GLOBALIZATION_INVARIANT: 1
|
||||
TZ: UTC
|
||||
THRESHOLD: 0
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup .NET 10 RC
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
dotnet-version: 10.0.100-rc.2.25502.107
|
||||
include-prerelease: true
|
||||
|
||||
- name: Install Cosign
|
||||
uses: sigstore/cosign-installer@v3.4.0
|
||||
|
||||
- name: Cache NuGet packages
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
~/.nuget/packages
|
||||
local-nugets/packages
|
||||
key: policy-sim-nuget-${{ runner.os }}-${{ hashFiles('**/*.csproj') }}
|
||||
|
||||
- name: Restore CLI
|
||||
run: |
|
||||
dotnet restore src/Cli/StellaOps.Cli/StellaOps.Cli.csproj --configfile nuget.config
|
||||
|
||||
- name: Generate policy signing key (ephemeral)
|
||||
run: |
|
||||
OUT_DIR=out/policy-sign/keys PREFIX=ci-policy COSIGN_PASSWORD= scripts/policy/rotate-key.sh
|
||||
|
||||
- name: Sign sample policy blob
|
||||
run: |
|
||||
export COSIGN_KEY_B64=$(base64 -w0 out/policy-sign/keys/ci-policy-cosign.key)
|
||||
COSIGN_PASSWORD= \
|
||||
scripts/policy/sign-policy.sh --file docs/examples/policies/baseline.stella --out-dir out/policy-sign
|
||||
|
||||
- name: Attest and verify sample policy blob
|
||||
run: |
|
||||
export COSIGN_KEY_B64=$(base64 -w0 out/policy-sign/keys/ci-policy-cosign.key)
|
||||
COSIGN_PASSWORD= \
|
||||
scripts/policy/attest-verify.sh --file docs/examples/policies/baseline.stella --out-dir out/policy-sign
|
||||
|
||||
- name: Run batch policy simulation
|
||||
run: |
|
||||
scripts/policy/batch-simulate.sh
|
||||
|
||||
- name: Upload simulation artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: policy-simulation
|
||||
path: out/policy-sim
|
||||
retention-days: 7
|
||||
|
||||
- name: Upload signing artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: policy-signing
|
||||
path: out/policy-sign
|
||||
retention-days: 7
|
||||
@@ -22,13 +22,16 @@ jobs:
|
||||
runs-on: ubuntu-22.04
|
||||
environment: production
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Resolve staging credentials
|
||||
id: staging
|
||||
run: |
|
||||
missing=()
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Resolve staging credentials
|
||||
id: staging
|
||||
run: |
|
||||
missing=()
|
||||
|
||||
host="${{ secrets.STAGING_DEPLOYMENT_HOST }}"
|
||||
if [ -z "$host" ]; then host="${{ vars.STAGING_DEPLOYMENT_HOST }}"; fi
|
||||
|
||||
@@ -9,6 +9,9 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Emit provenance summary
|
||||
run: |
|
||||
mkdir -p out/provenance
|
||||
|
||||
@@ -44,6 +44,9 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Validate NuGet restore source ordering
|
||||
run: python3 ops/devops/validate_restore_sources.py
|
||||
|
||||
|
||||
@@ -14,6 +14,9 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Setup .NET
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
|
||||
@@ -9,6 +9,9 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Setup .NET
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
|
||||
38
.gitea/workflows/sdk-generator.yml
Normal file
38
.gitea/workflows/sdk-generator.yml
Normal file
@@ -0,0 +1,38 @@
|
||||
name: sdk-generator-smoke
|
||||
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- "src/Sdk/StellaOps.Sdk.Generator/**"
|
||||
- "package.json"
|
||||
pull_request:
|
||||
paths:
|
||||
- "src/Sdk/StellaOps.Sdk.Generator/**"
|
||||
- "package.json"
|
||||
|
||||
jobs:
|
||||
sdk-smoke:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: "18"
|
||||
|
||||
- name: Setup Java 21
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: temurin
|
||||
java-version: "21"
|
||||
|
||||
- name: Install npm deps (scripts only)
|
||||
run: npm install --ignore-scripts --no-progress --no-audit --no-fund
|
||||
|
||||
- name: Run SDK smoke suite (TS/Python/Go/Java)
|
||||
run: npm run sdk:smoke
|
||||
92
.gitea/workflows/sdk-publish.yml
Normal file
92
.gitea/workflows/sdk-publish.yml
Normal file
@@ -0,0 +1,92 @@
|
||||
name: SDK Publish & Sign
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- 'src/Sdk/**'
|
||||
- 'ops/devops/sdk/**'
|
||||
- 'scripts/sdk/**'
|
||||
- '.gitea/workflows/sdk-publish.yml'
|
||||
push:
|
||||
branches: [ main ]
|
||||
paths:
|
||||
- 'src/Sdk/**'
|
||||
- 'ops/devops/sdk/**'
|
||||
- 'scripts/sdk/**'
|
||||
- '.gitea/workflows/sdk-publish.yml'
|
||||
|
||||
jobs:
|
||||
sdk-publish:
|
||||
runs-on: ubuntu-22.04
|
||||
env:
|
||||
DOTNET_NOLOGO: 1
|
||||
DOTNET_CLI_TELEMETRY_OPTOUT: 1
|
||||
DOTNET_SYSTEM_GLOBALIZATION_INVARIANT: 1
|
||||
TZ: UTC
|
||||
SDK_NUGET_SOURCE: ${{ secrets.SDK_NUGET_SOURCE || 'local-nugets/packages' }}
|
||||
SDK_NUGET_API_KEY: ${{ secrets.SDK_NUGET_API_KEY }}
|
||||
SDK_SIGNING_CERT_B64: ${{ secrets.SDK_SIGNING_CERT_B64 }}
|
||||
SDK_SIGNING_CERT_PASSWORD: ${{ secrets.SDK_SIGNING_CERT_PASSWORD }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Setup .NET 10 RC
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
dotnet-version: 10.0.100-rc.2.25502.107
|
||||
include-prerelease: true
|
||||
|
||||
- name: Cache NuGet packages
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
~/.nuget/packages
|
||||
local-nugets/packages
|
||||
key: sdk-nuget-${{ runner.os }}-${{ hashFiles('src/Sdk/**/*.csproj') }}
|
||||
|
||||
- name: Restore (best effort; skipped if no csproj)
|
||||
run: |
|
||||
set -e
|
||||
if compgen -G "src/Sdk/**/*.csproj" > /dev/null; then
|
||||
dotnet restore --configfile nuget.config src/Sdk/StellaOps.Sdk.Release/StellaOps.Sdk.Release.csproj || true
|
||||
else
|
||||
echo "No SDK csproj present; skipping restore."
|
||||
fi
|
||||
|
||||
- name: Build & Test (best effort)
|
||||
run: |
|
||||
set -e
|
||||
if compgen -G "src/Sdk/**/*.csproj" > /dev/null; then
|
||||
dotnet build src/Sdk/StellaOps.Sdk.Release/StellaOps.Sdk.Release.csproj -c Release --no-restore || true
|
||||
if compgen -G "src/Sdk/**/__Tests/**/*.csproj" > /dev/null; then
|
||||
dotnet test src/Sdk/**/__Tests/**/*.csproj -c Release --no-build --logger "trx;LogFileName=sdk-tests.trx" || true
|
||||
fi
|
||||
else
|
||||
echo "No SDK csproj present; skipping build/test."
|
||||
fi
|
||||
|
||||
- name: Sign packages (if present)
|
||||
run: |
|
||||
chmod +x scripts/sdk/sign-packages.sh
|
||||
scripts/sdk/sign-packages.sh
|
||||
|
||||
- name: Publish packages (if present)
|
||||
run: |
|
||||
chmod +x scripts/sdk/publish.sh
|
||||
scripts/sdk/publish.sh
|
||||
|
||||
- name: Upload SDK artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: sdk-artifacts
|
||||
path: |
|
||||
out/sdk
|
||||
local-nugets/packages/*.nupkg
|
||||
if-no-files-found: warn
|
||||
retention-days: 7
|
||||
75
.gitea/workflows/signals-ci.yml
Normal file
75
.gitea/workflows/signals-ci.yml
Normal file
@@ -0,0 +1,75 @@
|
||||
name: Signals CI & Image
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- 'src/Signals/**'
|
||||
- '.gitea/workflows/signals-ci.yml'
|
||||
- 'ops/devops/signals/**'
|
||||
- 'helm/signals/**'
|
||||
- 'scripts/signals/**'
|
||||
push:
|
||||
branches: [ main ]
|
||||
paths:
|
||||
- 'src/Signals/**'
|
||||
- '.gitea/workflows/signals-ci.yml'
|
||||
- 'ops/devops/signals/**'
|
||||
- 'helm/signals/**'
|
||||
- 'scripts/signals/**'
|
||||
|
||||
jobs:
|
||||
signals-ci:
|
||||
runs-on: ubuntu-22.04
|
||||
env:
|
||||
DOTNET_NOLOGO: 1
|
||||
DOTNET_CLI_TELEMETRY_OPTOUT: 1
|
||||
DOTNET_SYSTEM_GLOBALIZATION_INVARIANT: 1
|
||||
TZ: UTC
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Setup .NET 10 RC
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
dotnet-version: 10.0.100-rc.2.25502.107
|
||||
include-prerelease: true
|
||||
|
||||
- name: Cache NuGet packages
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
~/.nuget/packages
|
||||
local-nugets/packages
|
||||
key: signals-nuget-${{ runner.os }}-${{ hashFiles('src/Signals/**/*.csproj') }}
|
||||
|
||||
- name: Restore
|
||||
run: dotnet restore src/Signals/StellaOps.Signals.sln --configfile nuget.config
|
||||
|
||||
- name: Build
|
||||
run: dotnet build src/Signals/StellaOps.Signals.sln -c Release --no-restore
|
||||
|
||||
- name: Test
|
||||
run: dotnet test src/Signals/__Tests/StellaOps.Signals.Tests/StellaOps.Signals.Tests.csproj -c Release --no-build --logger "trx;LogFileName=signals-tests.trx"
|
||||
|
||||
- name: Publish service
|
||||
run: dotnet publish src/Signals/StellaOps.Signals/StellaOps.Signals.csproj -c Release -o out/signals/publish --no-build
|
||||
|
||||
- name: Build container image
|
||||
run: |
|
||||
chmod +x scripts/signals/build.sh
|
||||
scripts/signals/build.sh
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: signals-offline-kit
|
||||
path: |
|
||||
out/signals
|
||||
out/signals/signals-image.tar
|
||||
retention-days: 7
|
||||
171
.gitea/workflows/signals-dsse-sign.yml
Normal file
171
.gitea/workflows/signals-dsse-sign.yml
Normal file
@@ -0,0 +1,171 @@
|
||||
name: Signals DSSE Sign & Evidence Locker
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
out_dir:
|
||||
description: "Output directory for signed artifacts"
|
||||
required: false
|
||||
default: "evidence-locker/signals/2025-12-01"
|
||||
allow_dev_key:
|
||||
description: "Allow dev key for testing (1=yes, 0=no)"
|
||||
required: false
|
||||
default: "0"
|
||||
push:
|
||||
branches: [main]
|
||||
paths:
|
||||
- 'docs/modules/signals/decay/**'
|
||||
- 'docs/modules/signals/unknowns/**'
|
||||
- 'docs/modules/signals/heuristics/**'
|
||||
- 'docs/modules/signals/SHA256SUMS'
|
||||
- 'tools/cosign/sign-signals.sh'
|
||||
|
||||
jobs:
|
||||
sign-signals-artifacts:
|
||||
runs-on: ubuntu-22.04
|
||||
env:
|
||||
COSIGN_PRIVATE_KEY_B64: ${{ secrets.COSIGN_PRIVATE_KEY_B64 }}
|
||||
COSIGN_PASSWORD: ${{ secrets.COSIGN_PASSWORD }}
|
||||
OUT_DIR: ${{ github.event.inputs.out_dir || 'evidence-locker/signals/2025-12-01' }}
|
||||
COSIGN_ALLOW_DEV_KEY: ${{ github.event.inputs.allow_dev_key || '0' }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Install cosign
|
||||
uses: sigstore/cosign-installer@v3
|
||||
with:
|
||||
cosign-release: 'v2.2.4'
|
||||
|
||||
- name: Verify artifacts exist
|
||||
run: |
|
||||
cd docs/modules/signals
|
||||
sha256sum -c SHA256SUMS
|
||||
echo "All artifacts verified against SHA256SUMS"
|
||||
|
||||
- name: Check signing key availability
|
||||
id: check-key
|
||||
run: |
|
||||
if [[ -n "$COSIGN_PRIVATE_KEY_B64" ]]; then
|
||||
echo "key_source=ci_secret" >> "$GITHUB_OUTPUT"
|
||||
echo "Signing key available via CI secret"
|
||||
elif [[ "$COSIGN_ALLOW_DEV_KEY" == "1" ]]; then
|
||||
echo "key_source=dev_key" >> "$GITHUB_OUTPUT"
|
||||
echo "[warn] Using development key - NOT for production Evidence Locker"
|
||||
else
|
||||
echo "key_source=none" >> "$GITHUB_OUTPUT"
|
||||
echo "::error::No signing key available. Set COSIGN_PRIVATE_KEY_B64 secret or enable dev key."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Sign signals artifacts
|
||||
run: |
|
||||
chmod +x tools/cosign/sign-signals.sh
|
||||
OUT_DIR="${OUT_DIR}" tools/cosign/sign-signals.sh
|
||||
|
||||
- name: Verify signatures
|
||||
run: |
|
||||
cd "$OUT_DIR"
|
||||
# List generated artifacts
|
||||
echo "=== Generated Artifacts ==="
|
||||
ls -la
|
||||
echo ""
|
||||
echo "=== SHA256SUMS ==="
|
||||
cat SHA256SUMS
|
||||
|
||||
- name: Upload signed artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: signals-dsse-signed-${{ github.run_number }}
|
||||
path: |
|
||||
${{ env.OUT_DIR }}/*.sigstore.json
|
||||
${{ env.OUT_DIR }}/*.dsse
|
||||
${{ env.OUT_DIR }}/SHA256SUMS
|
||||
if-no-files-found: error
|
||||
retention-days: 90
|
||||
|
||||
- name: Push to Evidence Locker
|
||||
if: ${{ secrets.CI_EVIDENCE_LOCKER_TOKEN != '' && env.EVIDENCE_LOCKER_URL != '' }}
|
||||
env:
|
||||
TOKEN: ${{ secrets.CI_EVIDENCE_LOCKER_TOKEN }}
|
||||
URL: ${{ env.EVIDENCE_LOCKER_URL }}
|
||||
run: |
|
||||
tar -cf /tmp/signals-dsse.tar -C "$OUT_DIR" .
|
||||
curl -f -X PUT "$URL/signals/dsse/$(date -u +%Y-%m-%d)/signals-dsse.tar" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
--data-binary @/tmp/signals-dsse.tar
|
||||
echo "Pushed to Evidence Locker"
|
||||
|
||||
- name: Evidence Locker skip notice
|
||||
if: ${{ secrets.CI_EVIDENCE_LOCKER_TOKEN == '' || env.EVIDENCE_LOCKER_URL == '' }}
|
||||
run: |
|
||||
echo "::notice::Evidence Locker push skipped (CI_EVIDENCE_LOCKER_TOKEN or EVIDENCE_LOCKER_URL not set)"
|
||||
echo "Artifacts available as workflow artifact for manual ingestion"
|
||||
|
||||
verify-signatures:
|
||||
runs-on: ubuntu-22.04
|
||||
needs: sign-signals-artifacts
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Download signed artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: signals-dsse-signed-${{ github.run_number }}
|
||||
path: signed-artifacts/
|
||||
|
||||
- name: Install cosign
|
||||
uses: sigstore/cosign-installer@v3
|
||||
with:
|
||||
cosign-release: 'v2.2.4'
|
||||
|
||||
- name: Verify decay config signature
|
||||
run: |
|
||||
if [[ -f signed-artifacts/confidence_decay_config.sigstore.json ]]; then
|
||||
cosign verify-blob \
|
||||
--key tools/cosign/cosign.dev.pub \
|
||||
--bundle signed-artifacts/confidence_decay_config.sigstore.json \
|
||||
docs/modules/signals/decay/confidence_decay_config.yaml \
|
||||
&& echo "✓ decay config signature verified" \
|
||||
|| echo "::warning::Signature verification failed (may need production public key)"
|
||||
fi
|
||||
|
||||
- name: Verify unknowns manifest signature
|
||||
run: |
|
||||
if [[ -f signed-artifacts/unknowns_scoring_manifest.sigstore.json ]]; then
|
||||
cosign verify-blob \
|
||||
--key tools/cosign/cosign.dev.pub \
|
||||
--bundle signed-artifacts/unknowns_scoring_manifest.sigstore.json \
|
||||
docs/modules/signals/unknowns/unknowns_scoring_manifest.json \
|
||||
&& echo "✓ unknowns manifest signature verified" \
|
||||
|| echo "::warning::Signature verification failed (may need production public key)"
|
||||
fi
|
||||
|
||||
- name: Verify heuristics catalog signature
|
||||
run: |
|
||||
if [[ -f signed-artifacts/heuristics_catalog.sigstore.json ]]; then
|
||||
cosign verify-blob \
|
||||
--key tools/cosign/cosign.dev.pub \
|
||||
--bundle signed-artifacts/heuristics_catalog.sigstore.json \
|
||||
docs/modules/signals/heuristics/heuristics.catalog.json \
|
||||
&& echo "✓ heuristics catalog signature verified" \
|
||||
|| echo "::warning::Signature verification failed (may need production public key)"
|
||||
fi
|
||||
|
||||
- name: Summary
|
||||
run: |
|
||||
echo "## Signals DSSE Signing Summary" >> "$GITHUB_STEP_SUMMARY"
|
||||
echo "" >> "$GITHUB_STEP_SUMMARY"
|
||||
echo "| Artifact | Status |" >> "$GITHUB_STEP_SUMMARY"
|
||||
echo "|----------|--------|" >> "$GITHUB_STEP_SUMMARY"
|
||||
for f in signed-artifacts/*.sigstore.json signed-artifacts/*.dsse; do
|
||||
[[ -f "$f" ]] && echo "| $(basename $f) | ✓ Signed |" >> "$GITHUB_STEP_SUMMARY"
|
||||
done
|
||||
echo "" >> "$GITHUB_STEP_SUMMARY"
|
||||
echo "Run ID: ${{ github.run_number }}" >> "$GITHUB_STEP_SUMMARY"
|
||||
67
.gitea/workflows/signals-evidence-locker.yml
Normal file
67
.gitea/workflows/signals-evidence-locker.yml
Normal file
@@ -0,0 +1,67 @@
|
||||
name: signals-evidence-locker
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
retention_target:
|
||||
description: "Retention days target"
|
||||
required: false
|
||||
default: "180"
|
||||
|
||||
jobs:
|
||||
prepare-signals-evidence:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
MODULE_ROOT: docs/modules/signals
|
||||
OUT_DIR: evidence-locker/signals/2025-12-05
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Build deterministic signals evidence tar
|
||||
run: |
|
||||
set -euo pipefail
|
||||
test -d "$MODULE_ROOT" || { echo "missing $MODULE_ROOT" >&2; exit 1; }
|
||||
|
||||
tmpdir=$(mktemp -d)
|
||||
rsync -a --relative \
|
||||
"$OUT_DIR/SHA256SUMS" \
|
||||
"$OUT_DIR/confidence_decay_config.sigstore.json" \
|
||||
"$OUT_DIR/unknowns_scoring_manifest.sigstore.json" \
|
||||
"$OUT_DIR/heuristics_catalog.sigstore.json" \
|
||||
"$MODULE_ROOT/decay/confidence_decay_config.yaml" \
|
||||
"$MODULE_ROOT/unknowns/unknowns_scoring_manifest.json" \
|
||||
"$MODULE_ROOT/heuristics/heuristics.catalog.json" \
|
||||
"$tmpdir/"
|
||||
|
||||
(cd "$tmpdir/$OUT_DIR" && sha256sum --check SHA256SUMS)
|
||||
|
||||
tar --sort=name --mtime="UTC 1970-01-01" --owner=0 --group=0 --numeric-owner \
|
||||
-cf /tmp/signals-evidence.tar -C "$tmpdir" .
|
||||
|
||||
sha256sum /tmp/signals-evidence.tar > /tmp/signals-evidence.tar.sha256
|
||||
|
||||
- name: Upload artifact (fallback)
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: signals-evidence-2025-12-05
|
||||
path: |
|
||||
/tmp/signals-evidence.tar
|
||||
/tmp/signals-evidence.tar.sha256
|
||||
|
||||
- name: Push to Evidence Locker
|
||||
if: ${{ secrets.CI_EVIDENCE_LOCKER_TOKEN != '' && env.EVIDENCE_LOCKER_URL != '' }}
|
||||
env:
|
||||
TOKEN: ${{ secrets.CI_EVIDENCE_LOCKER_TOKEN }}
|
||||
URL: ${{ env.EVIDENCE_LOCKER_URL }}
|
||||
run: |
|
||||
curl -f -X PUT "$URL/signals/2025-12-05/signals-evidence.tar" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
--data-binary @/tmp/signals-evidence.tar
|
||||
|
||||
- name: Skip push (missing secret or URL)
|
||||
if: ${{ secrets.CI_EVIDENCE_LOCKER_TOKEN == '' || env.EVIDENCE_LOCKER_URL == '' }}
|
||||
run: |
|
||||
echo "Locker push skipped: set CI_EVIDENCE_LOCKER_TOKEN and EVIDENCE_LOCKER_URL to enable." >&2
|
||||
@@ -26,6 +26,9 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Export OpenSSL 1.1 shim for Mongo2Go
|
||||
run: scripts/enable-openssl11-shim.sh
|
||||
|
||||
|
||||
@@ -17,6 +17,9 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Export OpenSSL 1.1 shim for Mongo2Go
|
||||
run: scripts/enable-openssl11-shim.sh
|
||||
|
||||
|
||||
40
.gitea/workflows/vex-proof-bundles.yml
Normal file
40
.gitea/workflows/vex-proof-bundles.yml
Normal file
@@ -0,0 +1,40 @@
|
||||
name: VEX Proof Bundles
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- 'scripts/vex/**'
|
||||
- 'tests/Vex/ProofBundles/**'
|
||||
- 'docs/benchmarks/vex-evidence-playbook*'
|
||||
- '.gitea/workflows/vex-proof-bundles.yml'
|
||||
push:
|
||||
branches: [ main ]
|
||||
paths:
|
||||
- 'scripts/vex/**'
|
||||
- 'tests/Vex/ProofBundles/**'
|
||||
- 'docs/benchmarks/vex-evidence-playbook*'
|
||||
- '.gitea/workflows/vex-proof-bundles.yml'
|
||||
|
||||
jobs:
|
||||
verify-bundles:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Task Pack offline bundle fixtures
|
||||
run: python3 scripts/packs/run-fixtures-check.sh
|
||||
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
|
||||
- name: Install deps
|
||||
run: pip install --disable-pip-version-check --no-cache-dir -r scripts/vex/requirements.txt
|
||||
|
||||
- name: Verify proof bundles (offline)
|
||||
env:
|
||||
PYTHONHASHSEED: "0"
|
||||
run: |
|
||||
chmod +x tests/Vex/ProofBundles/test_verify_sample.sh
|
||||
tests/Vex/ProofBundles/test_verify_sample.sh
|
||||
50
.gitignore
vendored
50
.gitignore
vendored
@@ -14,11 +14,11 @@ obj/
|
||||
.idea/
|
||||
.vscode/
|
||||
|
||||
# Packages and logs
|
||||
*.log
|
||||
TestResults/
|
||||
local-nuget/
|
||||
local-nugets/packages/
|
||||
# Packages and logs
|
||||
*.log
|
||||
TestResults/
|
||||
local-nuget/
|
||||
local-nugets/packages/
|
||||
|
||||
.dotnet
|
||||
.DS_Store
|
||||
@@ -31,10 +31,36 @@ seed-data/cert-bund/**/*.sha256
|
||||
out/offline-kit/web/**/*
|
||||
**/node_modules/**/*
|
||||
**/.angular/**/*
|
||||
**/.cache/**/*
|
||||
**/dist/**/*
|
||||
tmp/**/*
|
||||
build/
|
||||
/out/cli/**
|
||||
/src/Sdk/StellaOps.Sdk.Release/out/**
|
||||
/out/scanner-analyzers/**
|
||||
**/.cache/**/*
|
||||
**/dist/**/*
|
||||
tmp/**/*
|
||||
build/
|
||||
/out/cli/**
|
||||
/src/Sdk/StellaOps.Sdk.Release/out/**
|
||||
/src/Sdk/StellaOps.Sdk.Generator/out/**
|
||||
/out/scanner-analyzers/**
|
||||
|
||||
# Node / frontend
|
||||
node_modules/
|
||||
dist/
|
||||
.build/
|
||||
.cache/
|
||||
|
||||
# .NET
|
||||
bin/
|
||||
obj/
|
||||
|
||||
# IDEs
|
||||
.vscode/
|
||||
.idea/
|
||||
*.user
|
||||
*.suo
|
||||
|
||||
# Misc
|
||||
logs/
|
||||
tmp/
|
||||
coverage/
|
||||
.nuget/
|
||||
local-nugets/
|
||||
local-nuget/
|
||||
src/Sdk/StellaOps.Sdk.Generator/tools/jdk-21.0.1+12
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,3 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><Error><Code>BlobNotFound</Code><Message>The specified blob does not exist.
|
||||
RequestId:111b5cf5-801e-0033-51f3-4ee25c000000
|
||||
Time:2025-11-06T08:00:59.9404934Z</Message></Error>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user