Skip to content

feat: add 11 new OASIS providers — Maps (4), Blockchain (2), Network … #1173

feat: add 11 new OASIS providers — Maps (4), Blockchain (2), Network …

feat: add 11 new OASIS providers — Maps (4), Blockchain (2), Network … #1173

Workflow file for this run

name: OASIS CI/CD Pipeline
on:
push:
branches: [ main, master, Development ]
pull_request:
branches: [ main, master, Development ]
env:
DOTNET_VERSION: '10.0.x'
NODE_VERSION: '18.x'
jobs:
# Guards against the failure mode that let ~200 projects accumulate 1000+ compile
# errors unnoticed: a .csproj that is in no .sln is never built by anything, so it
# rots silently. This job fails the pipeline on both conditions - a project missing
# from the solutions, and any error in the full production build.
solution-integrity:
name: Solution Integrity
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Every project must be in a solution
run: python3 Scripts/check_solution_coverage.py
- name: Submodule pointers must match the branch rule
# master pins each submodule at its main; Development pins each at its Development.
# Master deploys to Azure, so a pointer off main would ship unreleased code.
run: |
git submodule foreach --quiet 'git fetch origin --quiet || true'
python3 Scripts/check_submodule_branches.py
- name: Solutions must parse
run: |
for sln in "The OASIS - NoTests.sln" "The OASIS.sln"; do
echo "::group::$sln"
dotnet sln "$sln" list > /dev/null
echo "::endgroup::"
done
- name: Full production build must have zero errors
run: dotnet build "The OASIS - NoTests.sln" --configuration Release -warnaserror:none
# Runs the storage-provider integration tests against REAL backends, in throwaway
# containers. Without this the tier-B integration tests compile and "pass" while
# touching nothing, because each provider falls back to a localhost default that
# is not listening - so a broken provider looks identical to a working one.
#
# NON-BLOCKING FOR NOW (continue-on-error). These tests have never been run
# against a live backend, so the first runs are a survey, not a gate. Once a
# backend has gone green, move its name into the required list below and drop
# continue-on-error - at that point a regression in that provider fails the build.
#
# Backends that need a paid account or a cloud endpoint (Algolia, Pinecone,
# Zilliz, Snowflake, BigQuery, Redshift, Databricks, MotherDuck, Xata, Upstash,
# LanceDB Cloud) are deliberately absent: there is nothing to stand up locally.
provider-integration:
name: Provider Integration (${{ matrix.backend.name }})
runs-on: ubuntu-latest
continue-on-error: true
strategy:
fail-fast: false
matrix:
backend:
# Redis-protocol stores - all four speak RESP, so the same client works.
- name: Redis
project: Providers/Storage/TestProjects/NextGenSoftware.OASIS.API.Providers.RedisOASIS.IntegrationTests
image: redis:7-alpine
ports: 6379:6379
wait: 6379
- name: KeyDB
project: Providers/Storage/TestProjects/NextGenSoftware.OASIS.API.Providers.KeyDBOASIS.IntegrationTests
image: eqalpha/keydb:latest
ports: 6379:6379
wait: 6379
- name: Dragonfly
project: Providers/Storage/TestProjects/NextGenSoftware.OASIS.API.Providers.DragonflyOASIS.IntegrationTests
image: docker.dragonflydb.io/dragonflydb/dragonfly:latest
ports: 6379:6379
wait: 6379
docker_args: --ulimit memlock=-1
- name: ValKey
project: Providers/Storage/TestProjects/NextGenSoftware.OASIS.API.Providers.ValKeyOASIS.IntegrationTests
image: valkey/valkey:8-alpine
ports: 6379:6379
wait: 6379
- name: Garnet
project: Providers/Storage/TestProjects/NextGenSoftware.OASIS.API.Providers.GarnetOASIS.IntegrationTests
image: ghcr.io/microsoft/garnet:latest
ports: 6379:6379
wait: 6379
- name: Memcached
project: Providers/Storage/TestProjects/NextGenSoftware.OASIS.API.Providers.MemcachedOASIS.IntegrationTests
image: memcached:1.6-alpine
ports: 11211:11211
wait: 11211
# Document and graph stores.
- name: MongoDB
project: Providers/Storage/TestProjects/NextGenSoftware.OASIS.API.Providers.MongoDBOASIS.IntegrationTests
image: mongo:7
ports: 27017:27017
wait: 27017
- name: CouchDB
project: Providers/Storage/TestProjects/NextGenSoftware.OASIS.API.Providers.CouchDBOASIS.IntegrationTests
image: couchdb:3
ports: 5984:5984
wait: 5984
docker_args: -e COUCHDB_USER=admin -e COUCHDB_PASSWORD=password
- name: ArangoDB
project: Providers/Storage/TestProjects/NextGenSoftware.OASIS.API.Providers.ArangoDBOASIS.IntegrationTests
image: arangodb:3.11
ports: 8529:8529
wait: 8529
docker_args: -e ARANGO_ROOT_PASSWORD=password
- name: ArcadeDB
project: Providers/Storage/TestProjects/NextGenSoftware.OASIS.API.Providers.ArcadeDBOASIS.IntegrationTests
image: arcadedata/arcadedb:latest
ports: 2480:2480
wait: 2480
docker_args: -e JAVA_OPTS=-Darcadedb.server.rootPassword=playwithdata
- name: SurrealDB
project: Providers/Storage/TestProjects/NextGenSoftware.OASIS.API.Providers.SurrealDBOASIS.IntegrationTests
image: surrealdb/surrealdb:latest
ports: 8000:8000
wait: 8000
command: start --user root --pass root --bind 0.0.0.0:8000 memory
# Search engines.
- name: OpenSearch
project: Providers/Storage/TestProjects/NextGenSoftware.OASIS.API.Providers.OpenSearchOASIS.IntegrationTests
image: opensearchproject/opensearch:2
ports: 9200:9200
wait: 9200
docker_args: >-
-e discovery.type=single-node
-e DISABLE_SECURITY_PLUGIN=true
-e OPENSEARCH_INITIAL_ADMIN_PASSWORD=Str0ngOasis!Pass
- name: Elasticsearch
project: Providers/Storage/TestProjects/NextGenSoftware.OASIS.API.Providers.ElasticsearchOASIS.IntegrationTests
image: docker.elastic.co/elasticsearch/elasticsearch:8.13.0
ports: 9200:9200
wait: 9200
docker_args: >-
-e discovery.type=single-node
-e xpack.security.enabled=false
-e ES_JAVA_OPTS=-Xms512m\ -Xmx512m
- name: Solr
project: Providers/Storage/TestProjects/NextGenSoftware.OASIS.API.Providers.SolrOASIS.IntegrationTests
image: solr:9
ports: 8983:8983
wait: 8983
- name: Meilisearch
project: Providers/Storage/TestProjects/NextGenSoftware.OASIS.API.Providers.MeilisearchOASIS.IntegrationTests
image: getmeili/meilisearch:v1.7
ports: 7700:7700
wait: 7700
docker_args: -e MEILI_MASTER_KEY=masterKey -e MEILI_ENV=development
- name: Typesense
project: Providers/Storage/TestProjects/NextGenSoftware.OASIS.API.Providers.TypesenseOASIS.IntegrationTests
image: typesense/typesense:0.25.2
ports: 8108:8108
wait: 8108
docker_args: -e TYPESENSE_DATA_DIR=/tmp -e TYPESENSE_API_KEY=xyz
# Vector stores.
- name: Qdrant
project: Providers/Cloud/TestProjects/NextGenSoftware.OASIS.API.Providers.QdrantOASIS.IntegrationTests
image: qdrant/qdrant:latest
ports: 6333:6333
wait: 6333
- name: Weaviate
project: Providers/Cloud/TestProjects/NextGenSoftware.OASIS.API.Providers.WeaviateOASIS.IntegrationTests
image: cr.weaviate.io/semitechnologies/weaviate:1.24.1
ports: 8080:8080
wait: 8080
docker_args: >-
-e AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=true
-e PERSISTENCE_DATA_PATH=/var/lib/weaviate
-e DEFAULT_VECTORIZER_MODULE=none
- name: Chroma
project: Providers/Storage/TestProjects/NextGenSoftware.OASIS.API.Providers.ChromaOASIS.IntegrationTests
image: chromadb/chroma:latest
ports: 8000:8000
wait: 8000
- name: PgVector
project: Providers/Storage/TestProjects/NextGenSoftware.OASIS.API.Providers.PgVectorOASIS.IntegrationTests
image: pgvector/pgvector:pg16
ports: 5432:5432
wait: 5432
docker_args: -e POSTGRES_PASSWORD=password -e POSTGRES_DB=oasis
# Analytical and time-series stores.
- name: ClickHouse
project: Providers/Storage/TestProjects/NextGenSoftware.OASIS.API.Providers.ClickHouseOASIS.IntegrationTests
image: clickhouse/clickhouse-server:24-alpine
ports: 8123:8123
wait: 8123
docker_args: --ulimit nofile=262144:262144
- name: QuestDB
project: Providers/Storage/TestProjects/NextGenSoftware.OASIS.API.Providers.QuestDBOASIS.IntegrationTests
image: questdb/questdb:latest
ports: 8812:8812
wait: 8812
- name: InfluxDB
project: Providers/Storage/TestProjects/NextGenSoftware.OASIS.API.Providers.InfluxDBOASIS.IntegrationTests
image: influxdb:2.7
ports: 8086:8086
wait: 8086
docker_args: >-
-e DOCKER_INFLUXDB_INIT_MODE=setup
-e DOCKER_INFLUXDB_INIT_USERNAME=oasis
-e DOCKER_INFLUXDB_INIT_PASSWORD=oasispassword
-e DOCKER_INFLUXDB_INIT_ORG=oasis
-e DOCKER_INFLUXDB_INIT_BUCKET=oasis
-e DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=oasis-ci-token
test_env: |
INFLUXDB_TOKEN=oasis-ci-token
INFLUXDB_ORG=oasis
INFLUXDB_BUCKET=oasis
# Object storage.
- name: MinIO
project: Providers/Storage/TestProjects/NextGenSoftware.OASIS.API.Providers.MinIOOASIS.IntegrationTests
image: minio/minio:latest
ports: 9000:9000
wait: 9000
docker_args: -e MINIO_ROOT_USER=minioadmin -e MINIO_ROOT_PASSWORD=minioadmin
command: server /data
test_env: |
MINIO_ACCESS_KEY=minioadmin
MINIO_SECRET_KEY=minioadmin
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Start ${{ matrix.backend.name }}
run: |
docker run -d --name oasis-backend \
-p ${{ matrix.backend.ports }} \
${{ matrix.backend.docker_args }} \
${{ matrix.backend.image }} ${{ matrix.backend.command }}
- name: Wait for it to accept connections
run: |
port="${{ matrix.backend.wait }}"
for i in $(seq 1 60); do
if (echo > /dev/tcp/127.0.0.1/$port) 2>/dev/null; then
echo "$port is open after ${i}s."
# Give the service a moment past the socket opening to finish booting.
sleep 5
exit 0
fi
sleep 1
done
echo "::error::${{ matrix.backend.name }} never opened port $port."
docker logs oasis-backend || true
exit 1
- name: Export test environment
if: matrix.backend.test_env != ''
run: echo "${{ matrix.backend.test_env }}" >> "$GITHUB_ENV"
- name: Run the integration tests
run: dotnet test "${{ matrix.backend.project }}" --configuration Release --logger "console;verbosity=normal"
- name: Backend logs on failure
if: failure()
run: docker logs oasis-backend || true
# Build and Test OASIS Architecture Projects
test-oasis-architecture:
name: Test OASIS Architecture
runs-on: ubuntu-latest
strategy:
matrix:
project: [
'NextGenSoftware.OASIS.API.Core',
'NextGenSoftware.OASIS.API.DNA',
'NextGenSoftware.OASIS.Common',
'NextGenSoftware.OASIS.OASISBootLoader'
]
steps:
- name: Checkout OASIS
uses: actions/checkout@v4
with:
path: OASIS
# All eight submodules are private, so the default GITHUB_TOKEN cannot
# fetch them -- it is scoped to this repository alone. Uses the same
# PRIVATE_SUBMODULE_PAT that publish-nuget.yml and publish-mcp.yml
# already rely on, rather than a second token for the same job.
submodules: recursive
token: ${{ secrets.PRIVATE_SUBMODULE_PAT }}
- name: Checkout NextGenSoftware-Libraries
uses: actions/checkout@v4
with:
repository: NextGenSoftwareUK/NextGenSoftware-Libraries
path: NextGenSoftware-Libraries
- name: Checkout holochain-client-csharp
uses: actions/checkout@v4
with:
repository: holochain-open-dev/holochain-client-csharp
path: holochain-client-csharp
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Restore dependencies
run: dotnet restore "OASIS/OASIS Architecture/${{ matrix.project }}/${{ matrix.project }}.csproj"
- name: Build
run: dotnet build "OASIS/OASIS Architecture/${{ matrix.project }}/${{ matrix.project }}.csproj" --no-restore
- name: Test
run: dotnet test "OASIS/OASIS Architecture/${{ matrix.project }}.UnitTests/${{ matrix.project }}.UnitTests.csproj" --no-build --verbosity normal
# Build and Test ONODE Projects
test-onode:
name: Test ONODE
runs-on: ubuntu-latest
strategy:
matrix:
project: [
'NextGenSoftware.OASIS.API.ONODE.Core',
'NextGenSoftware.OASIS.API.ONODE.WebAPI',
'NextGenSoftware.OASIS.API.ONODE.OPORTAL'
]
steps:
- name: Checkout OASIS
uses: actions/checkout@v4
with:
path: OASIS
# All eight submodules are private, so the default GITHUB_TOKEN cannot
# fetch them -- it is scoped to this repository alone. Uses the same
# PRIVATE_SUBMODULE_PAT that publish-nuget.yml and publish-mcp.yml
# already rely on, rather than a second token for the same job.
submodules: recursive
token: ${{ secrets.PRIVATE_SUBMODULE_PAT }}
- name: Checkout NextGenSoftware-Libraries
uses: actions/checkout@v4
with:
repository: NextGenSoftwareUK/NextGenSoftware-Libraries
path: NextGenSoftware-Libraries
- name: Checkout holochain-client-csharp
uses: actions/checkout@v4
with:
repository: holochain-open-dev/holochain-client-csharp
path: holochain-client-csharp
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Restore dependencies
run: dotnet restore "OASIS/ONODE/${{ matrix.project }}/${{ matrix.project }}.csproj"
- name: Build
run: dotnet build "OASIS/ONODE/${{ matrix.project }}/${{ matrix.project }}.csproj" --no-restore
- name: Test
run: dotnet test "OASIS/ONODE/${{ matrix.project }}.UnitTests/${{ matrix.project }}.UnitTests.csproj" --no-build --verbosity normal
# Build and Test STAR ODK Projects
test-star-odk:
name: Test STAR ODK
runs-on: ubuntu-latest
strategy:
matrix:
project: [
'NextGenSoftware.OASIS.STAR',
'NextGenSoftware.OASIS.STAR.CLI',
'NextGenSoftware.OASIS.STAR.CLI.Lib',
'NextGenSoftware.OASIS.STAR.STARDNA',
'NextGenSoftware.OASIS.STAR.WebAPI',
'NextGenSoftware.OASIS.STAR.WebUI'
]
steps:
- name: Checkout OASIS
uses: actions/checkout@v4
with:
path: OASIS
# All eight submodules are private, so the default GITHUB_TOKEN cannot
# fetch them -- it is scoped to this repository alone. Uses the same
# PRIVATE_SUBMODULE_PAT that publish-nuget.yml and publish-mcp.yml
# already rely on, rather than a second token for the same job.
submodules: recursive
token: ${{ secrets.PRIVATE_SUBMODULE_PAT }}
- name: Checkout NextGenSoftware-Libraries
uses: actions/checkout@v4
with:
repository: NextGenSoftwareUK/NextGenSoftware-Libraries
path: NextGenSoftware-Libraries
- name: Checkout holochain-client-csharp
uses: actions/checkout@v4
with:
repository: holochain-open-dev/holochain-client-csharp
path: holochain-client-csharp
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Restore dependencies
run: dotnet restore "OASIS/STAR ODK/${{ matrix.project }}/${{ matrix.project }}.csproj"
- name: Build
run: dotnet build "OASIS/STAR ODK/${{ matrix.project }}/${{ matrix.project }}.csproj" --no-restore
- name: Test
run: dotnet test "OASIS/STAR ODK/${{ matrix.project }}.UnitTests/${{ matrix.project }}.UnitTests.csproj" --no-build --verbosity normal
# Integration Tests
integration-tests:
name: Integration Tests
runs-on: ubuntu-latest
needs: [test-oasis-architecture, test-onode, test-star-odk]
steps:
- name: Checkout OASIS
uses: actions/checkout@v4
with:
path: OASIS
# All eight submodules are private, so the default GITHUB_TOKEN cannot
# fetch them -- it is scoped to this repository alone. Uses the same
# PRIVATE_SUBMODULE_PAT that publish-nuget.yml and publish-mcp.yml
# already rely on, rather than a second token for the same job.
submodules: recursive
token: ${{ secrets.PRIVATE_SUBMODULE_PAT }}
- name: Checkout NextGenSoftware-Libraries
uses: actions/checkout@v4
with:
repository: NextGenSoftwareUK/NextGenSoftware-Libraries
path: NextGenSoftware-Libraries
- name: Checkout holochain-client-csharp
uses: actions/checkout@v4
with:
repository: holochain-open-dev/holochain-client-csharp
path: holochain-client-csharp
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Restore dependencies
run: |
dotnet restore "ONODE/NextGenSoftware.OASIS.API.ONODE.WebAPI.IntegrationTests/NextGenSoftware.OASIS.API.ONODE.WebAPI.IntegrationTests.csproj"
dotnet restore "ONODE/NextGenSoftware.OASIS.API.ONODE.OPORTAL.IntegrationTests/NextGenSoftware.OASIS.API.ONODE.OPORTAL.IntegrationTests.csproj"
dotnet restore "STAR ODK/NextGenSoftware.OASIS.STAR.WebAPI.IntegrationTests/NextGenSoftware.OASIS.STAR.WebAPI.IntegrationTests.csproj"
dotnet restore "STAR ODK/NextGenSoftware.OASIS.STAR.WebUI.IntegrationTests/NextGenSoftware.OASIS.STAR.WebUI.IntegrationTests.csproj"
- name: Build
run: |
dotnet build "ONODE/NextGenSoftware.OASIS.API.ONODE.WebAPI.IntegrationTests/NextGenSoftware.OASIS.API.ONODE.WebAPI.IntegrationTests.csproj" --no-restore
dotnet build "ONODE/NextGenSoftware.OASIS.API.ONODE.OPORTAL.IntegrationTests/NextGenSoftware.OASIS.API.ONODE.OPORTAL.IntegrationTests.csproj" --no-restore
dotnet build "STAR ODK/NextGenSoftware.OASIS.STAR.WebAPI.IntegrationTests/NextGenSoftware.OASIS.STAR.WebAPI.IntegrationTests.csproj" --no-restore
dotnet build "STAR ODK/NextGenSoftware.OASIS.STAR.WebUI.IntegrationTests/NextGenSoftware.OASIS.STAR.WebUI.IntegrationTests.csproj" --no-restore
- name: Run Integration Tests
run: |
dotnet test "ONODE/NextGenSoftware.OASIS.API.ONODE.WebAPI.IntegrationTests/NextGenSoftware.OASIS.API.ONODE.WebAPI.IntegrationTests.csproj" --no-build --verbosity normal
dotnet test "ONODE/NextGenSoftware.OASIS.API.ONODE.OPORTAL.IntegrationTests/NextGenSoftware.OASIS.API.ONODE.OPORTAL.IntegrationTests.csproj" --no-build --verbosity normal
dotnet test "STAR ODK/NextGenSoftware.OASIS.STAR.WebAPI.IntegrationTests/NextGenSoftware.OASIS.STAR.WebAPI.IntegrationTests.csproj" --no-build --verbosity normal
dotnet test "STAR ODK/NextGenSoftware.OASIS.STAR.WebUI.IntegrationTests/NextGenSoftware.OASIS.STAR.WebUI.IntegrationTests.csproj" --no-build --verbosity normal
# STARAPIClient Unit + Integration + Harness
test-starapi-client:
name: Test STARAPIClient
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Run STARAPIClient test suite
shell: pwsh
run: |
& "OASIS/OASIS Omniverse/STARAPIClient/run_star_api_test_suite.ps1" -Configuration Release -KillStaleTestHosts $true
- name: Upload STARAPIClient test artifacts
uses: actions/upload-artifact@v4
if: always()
with:
name: starapiclient-test-results
path: OASIS/OASIS Omniverse/STARAPIClient/TestResults/
retention-days: 30
# Unity Tests (if Unity is available)
unity-tests:
name: Unity Tests
runs-on: ubuntu-latest
if: false # Disabled for now as Unity requires special setup
steps:
- name: Checkout OASIS
uses: actions/checkout@v4
with:
path: OASIS
# All eight submodules are private, so the default GITHUB_TOKEN cannot
# fetch them -- it is scoped to this repository alone. Uses the same
# PRIVATE_SUBMODULE_PAT that publish-nuget.yml and publish-mcp.yml
# already rely on, rather than a second token for the same job.
submodules: recursive
token: ${{ secrets.PRIVATE_SUBMODULE_PAT }}
- name: Checkout NextGenSoftware-Libraries
uses: actions/checkout@v4
with:
repository: NextGenSoftwareUK/NextGenSoftware-Libraries
path: NextGenSoftware-Libraries
- name: Checkout holochain-client-csharp
uses: actions/checkout@v4
with:
repository: holochain-open-dev/holochain-client-csharp
path: holochain-client-csharp
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Run Unity Tests
run: |
echo "Unity tests would run here when Unity is properly configured"
# dotnet test "STAR ODK/Unity-OASIS-Omniverse-UI/Tests/Editor/"
# Build and Package
build-and-package:
name: Build and Package
runs-on: ubuntu-latest
needs: [test-oasis-architecture, test-onode, test-star-odk, integration-tests, test-starapi-client]
if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master'
steps:
- name: Checkout OASIS
uses: actions/checkout@v4
with:
path: OASIS
# All eight submodules are private, so the default GITHUB_TOKEN cannot
# fetch them -- it is scoped to this repository alone. Uses the same
# PRIVATE_SUBMODULE_PAT that publish-nuget.yml and publish-mcp.yml
# already rely on, rather than a second token for the same job.
submodules: recursive
token: ${{ secrets.PRIVATE_SUBMODULE_PAT }}
- name: Checkout NextGenSoftware-Libraries
uses: actions/checkout@v4
with:
repository: NextGenSoftwareUK/NextGenSoftware-Libraries
path: NextGenSoftware-Libraries
- name: Checkout holochain-client-csharp
uses: actions/checkout@v4
with:
repository: holochain-open-dev/holochain-client-csharp
path: holochain-client-csharp
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Restore dependencies
run: dotnet restore
- name: Build all projects
run: dotnet build --configuration Release --no-restore
- name: Pack NuGet packages
run: |
dotnet pack "OASIS/OASIS Architecture/NextGenSoftware.OASIS.API.Core/NextGenSoftware.OASIS.API.Core.csproj" --configuration Release --no-build --output ./packages
dotnet pack "OASIS/OASIS Architecture/NextGenSoftware.OASIS.Common/NextGenSoftware.OASIS.Common.csproj" --configuration Release --no-build --output ./packages
dotnet pack "OASIS/OASIS Architecture/NextGenSoftware.OASIS.API.DNA/NextGenSoftware.OASIS.API.DNA.csproj" --configuration Release --no-build --output ./packages
dotnet pack "OASIS/OASIS Architecture/NextGenSoftware.OASIS.OASISBootLoader/NextGenSoftware.OASIS.OASISBootLoader.csproj" --configuration Release --no-build --output ./packages
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: oasispackages
path: ./packages/
retention-days: 30
# Security and Quality Checks
security-scan:
name: Security Scan
runs-on: ubuntu-latest
steps:
- name: Checkout OASIS
uses: actions/checkout@v4
with:
path: OASIS
# All eight submodules are private, so the default GITHUB_TOKEN cannot
# fetch them -- it is scoped to this repository alone. Uses the same
# PRIVATE_SUBMODULE_PAT that publish-nuget.yml and publish-mcp.yml
# already rely on, rather than a second token for the same job.
submodules: recursive
token: ${{ secrets.PRIVATE_SUBMODULE_PAT }}
- name: Checkout NextGenSoftware-Libraries
uses: actions/checkout@v4
with:
repository: NextGenSoftwareUK/NextGenSoftware-Libraries
path: NextGenSoftware-Libraries
- name: Checkout holochain-client-csharp
uses: actions/checkout@v4
with:
repository: holochain-open-dev/holochain-client-csharp
path: holochain-client-csharp
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Restore dependencies
run: dotnet restore
- name: Security scan
run: |
dotnet list package --vulnerable --include-transitive
echo "Security scan completed"
# Code Quality
code-quality:
name: Code Quality
runs-on: ubuntu-latest
steps:
- name: Checkout OASIS
uses: actions/checkout@v4
with:
path: OASIS
# All eight submodules are private, so the default GITHUB_TOKEN cannot
# fetch them -- it is scoped to this repository alone. Uses the same
# PRIVATE_SUBMODULE_PAT that publish-nuget.yml and publish-mcp.yml
# already rely on, rather than a second token for the same job.
submodules: recursive
token: ${{ secrets.PRIVATE_SUBMODULE_PAT }}
- name: Checkout NextGenSoftware-Libraries
uses: actions/checkout@v4
with:
repository: NextGenSoftwareUK/NextGenSoftware-Libraries
path: NextGenSoftware-Libraries
- name: Checkout holochain-client-csharp
uses: actions/checkout@v4
with:
repository: holochain-open-dev/holochain-client-csharp
path: holochain-client-csharp
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Restore dependencies
run: dotnet restore
- name: Code analysis
run: |
dotnet build --configuration Release --no-restore
echo "Code quality analysis completed"
# Test Coverage Report
coverage:
name: Test Coverage
runs-on: ubuntu-latest
needs: [test-oasis-architecture, test-onode, test-star-odk]
steps:
- name: Checkout OASIS
uses: actions/checkout@v4
with:
path: OASIS
# All eight submodules are private, so the default GITHUB_TOKEN cannot
# fetch them -- it is scoped to this repository alone. Uses the same
# PRIVATE_SUBMODULE_PAT that publish-nuget.yml and publish-mcp.yml
# already rely on, rather than a second token for the same job.
submodules: recursive
token: ${{ secrets.PRIVATE_SUBMODULE_PAT }}
- name: Checkout NextGenSoftware-Libraries
uses: actions/checkout@v4
with:
repository: NextGenSoftwareUK/NextGenSoftware-Libraries
path: NextGenSoftware-Libraries
- name: Checkout holochain-client-csharp
uses: actions/checkout@v4
with:
repository: holochain-open-dev/holochain-client-csharp
path: holochain-client-csharp
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: Install ReportGenerator
run: dotnet tool install -g dotnet-reportgenerator-globaltool
- name: Run tests with coverage
run: |
dotnet test --collect:"XPlat Code Coverage" --results-directory ./coverage
- name: Generate coverage report
run: reportgenerator -reports:"./coverage/**/coverage.cobertura.xml" -targetdir:"./coverage/report" -reporttypes:"Html"
- name: Upload coverage reports
uses: actions/upload-artifact@v4
with:
name: coverage-report
path: ./coverage/report/
retention-days: 30