diff --git a/.github/workflows/agent-contributions.yml b/.github/workflows/agent-contributions.yml
deleted file mode 100644
index 2c4fb614..00000000
--- a/.github/workflows/agent-contributions.yml
+++ /dev/null
@@ -1,399 +0,0 @@
-name: Agent Contribution Pipeline
-
-on:
- pull_request:
- paths:
- - 'agents/**'
- - 'packages/py/aitbc-agent-sdk/**'
- - 'apps/coordinator-api/src/app/agents/**'
- push:
- branches:
- - main
- paths:
- - 'agents/**'
- - 'packages/py/aitbc-agent-sdk/**'
-
-jobs:
- validate-agent-contribution:
- runs-on: ubuntu-latest
- name: Validate Agent Contribution
-
- steps:
- - name: Checkout Code
- uses: actions/checkout@v4
- with:
- fetch-depth: 0
-
- - name: Set up Python 3.13
- uses: actions/setup-python@v4
- with:
- python-version: "3.13"
-
- - name: Install Dependencies
- run: |
- pip install -e .
- pip install pytest pytest-asyncio cryptography
- pip install -e packages/py/aitbc-agent-sdk/
-
- - name: Validate Agent Identity
- run: |
- python -c "
- import sys
- sys.path.append('packages/py/aitbc-agent-sdk')
- from aitbc_agent import Agent
-
- # Test agent creation and identity
- agent = Agent.create('test-agent', 'compute_provider', {
- 'compute_type': 'inference',
- 'gpu_memory': 24,
- 'performance_score': 0.95
- })
-
- print(f'Agent ID: {agent.identity.id}')
- print(f'Agent Address: {agent.identity.address}')
- print('✅ Agent identity validation passed')
- "
-
- - name: Test Agent Capabilities
- run: |
- python -c "
- import sys
- sys.path.append('packages/py/aitbc-agent-sdk')
- from aitbc_agent import ComputeProvider, SwarmCoordinator
-
- # Test compute provider
- provider = ComputeProvider.register('test-provider', {
- 'compute_type': 'inference',
- 'gpu_memory': 24,
- 'supported_models': ['llama3.2'],
- 'performance_score': 0.95
- }, {'base_rate': 0.1})
-
- print('✅ Compute provider validation passed')
-
- # Test swarm coordinator
- coordinator = SwarmCoordinator.create('test-coordinator', 'swarm_coordinator', {
- 'compute_type': 'coordination',
- 'specialization': 'load_balancing'
- })
-
- print('✅ Swarm coordinator validation passed')
- "
-
- - name: Test Agent Communication
- run: |
- python -c "
- import asyncio
- import sys
- sys.path.append('packages/py/aitbc-agent-sdk')
- from aitbc_agent import Agent
-
- async def test_communication():
- agent1 = Agent.create('agent1', 'compute_provider', {
- 'compute_type': 'inference',
- 'performance_score': 0.9
- })
-
- agent2 = Agent.create('agent2', 'compute_consumer', {
- 'compute_type': 'inference',
- 'performance_score': 0.85
- })
-
- # Test message sending
- message_sent = await agent1.send_message(
- agent2.identity.id,
- 'resource_offer',
- {'price': 0.1, 'availability': 'high'}
- )
-
- if message_sent:
- print('✅ Agent communication test passed')
- else:
- print('❌ Agent communication test failed')
- exit(1)
-
- asyncio.run(test_communication())
- "
-
- - name: Test Swarm Intelligence
- run: |
- python -c "
- import asyncio
- import sys
- sys.path.append('packages/py/aitbc-agent-sdk')
- from aitbc_agent import SwarmCoordinator
-
- async def test_swarm():
- coordinator = SwarmCoordinator.create('swarm-agent', 'swarm_coordinator', {
- 'compute_type': 'coordination',
- 'specialization': 'load_balancing'
- })
-
- # Test swarm joining
- joined = await coordinator.join_swarm('load_balancing', {
- 'role': 'active_participant',
- 'contribution_level': 'high'
- })
-
- if joined:
- print('✅ Swarm intelligence test passed')
- else:
- print('❌ Swarm intelligence test failed')
- exit(1)
-
- asyncio.run(test_swarm())
- "
-
- - name: Run Agent Tests
- run: |
- if [ -d "packages/py/aitbc-agent-sdk/tests" ]; then
- pytest packages/py/aitbc-agent-sdk/tests/ -v
- else
- echo "No agent tests found, skipping..."
- fi
-
- - name: Validate Agent Security
- run: |
- python -c "
- import sys
- sys.path.append('packages/py/aitbc-agent-sdk')
- from aitbc_agent import Agent
-
- # Test cryptographic security
- agent = Agent.create('security-test', 'compute_provider', {
- 'compute_type': 'inference',
- 'performance_score': 0.95
- })
-
- # Test message signing and verification
- message = {'test': 'message', 'timestamp': '2026-02-24T16:47:00Z'}
- signature = agent.identity.sign_message(message)
- verified = agent.identity.verify_signature(message, signature)
-
- if verified:
- print('✅ Agent security validation passed')
- else:
- print('❌ Agent security validation failed')
- exit(1)
- "
-
- - name: Performance Benchmark
- run: |
- python -c "
- import time
- import sys
- sys.path.append('packages/py/aitbc-agent-sdk')
- from aitbc_agent import ComputeProvider
-
- # Benchmark agent creation
- start_time = time.time()
- for i in range(100):
- agent = ComputeProvider.register(f'perf-test-{i}', {
- 'compute_type': 'inference',
- 'gpu_memory': 24,
- 'performance_score': 0.95
- }, {'base_rate': 0.1})
-
- creation_time = time.time() - start_time
-
- if creation_time < 5.0: # Should create 100 agents in under 5 seconds
- print(f'✅ Performance benchmark passed: {creation_time:.2f}s for 100 agents')
- else:
- print(f'❌ Performance benchmark failed: {creation_time:.2f}s for 100 agents')
- exit(1)
- "
-
- - name: Check Agent Integration
- run: |
- python -c "
- import sys
- sys.path.append('packages/py/aitbc-agent-sdk')
-
- # Test integration with existing AITBC components
- try:
- from aitbc_agent import Agent, ComputeProvider, SwarmCoordinator
- print('✅ Agent SDK integration successful')
- except ImportError as e:
- print(f'❌ Agent SDK integration failed: {e}')
- exit(1)
- "
-
- agent-contribution-rewards:
- runs-on: ubuntu-latest
- name: Calculate Agent Rewards
- needs: validate-agent-contribution
- if: github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.merged
-
- steps:
- - name: Checkout Code
- uses: actions/checkout@v4
-
- - name: Analyze Contribution Impact
- run: |
- python -c "
- import json
- import os
-
- # Analyze the contribution
- pr_number = os.environ.get('PR_NUMBER', 'unknown')
- changed_files = os.environ.get('CHANGED_FILES', '').split()
-
- # Calculate impact score based on changes
- impact_score = 0
-
- if any('agent' in f.lower() for f in changed_files):
- impact_score += 30
-
- if any('swarm' in f.lower() for f in changed_files):
- impact_score += 25
-
- if any('sdk' in f.lower() for f in changed_files):
- impact_score += 20
-
- if any('test' in f.lower() for f in changed_files):
- impact_score += 15
-
- if any('doc' in f.lower() for f in changed_files):
- impact_score += 10
-
- # Calculate token reward
- base_reward = 50 # Base reward in AITBC tokens
- total_reward = base_reward + (impact_score * 2)
-
- reward_data = {
- 'pr_number': pr_number,
- 'contributor': os.environ.get('CONTRIBUTOR', 'agent'),
- 'impact_score': impact_score,
- 'base_reward': base_reward,
- 'total_reward': total_reward,
- 'contribution_type': 'agent_improvement'
- }
-
- print(f'🤖 Agent Contribution Reward:')
- print(f' PR: #{pr_number}')
- print(f' Contributor: {reward_data[\"contributor\"]}')
- print(f' Impact Score: {impact_score}')
- print(f' Token Reward: {total_reward} AITBC')
-
- # Save reward data for later processing
- with open('agent_reward.json', 'w') as f:
- json.dump(reward_data, f, indent=2)
- "
- env:
- PR_NUMBER: ${{ github.event.pull_request.number }}
- CONTRIBUTOR: ${{ github.event.pull_request.user.login }}
- CHANGED_FILES: ${{ steps.changed-files.outputs.all }}
-
- - name: Record Agent Reward
- run: |
- echo "🎉 Agent contribution reward calculated successfully!"
- echo "The reward will be processed after mainnet deployment."
-
- - name: Update Agent Reputation
- run: |
- python -c "
- import json
- import os
-
- # Load reward data
- try:
- with open('agent_reward.json', 'r') as f:
- reward_data = json.load(f)
-
- contributor = reward_data['contributor']
- impact_score = reward_data['impact_score']
-
- print(f'📈 Updating reputation for {contributor}')
- print(f' Impact Score: {impact_score}')
- print(f' Reputation Increase: +{impact_score // 10}')
-
- # TODO: Update reputation in agent registry
- print(' ✅ Reputation updated in agent registry')
-
- except FileNotFoundError:
- print('No reward data found')
- "
-
- swarm-integration-test:
- runs-on: ubuntu-latest
- name: Swarm Integration Test
- needs: validate-agent-contribution
-
- steps:
- - name: Checkout Code
- uses: actions/checkout@v4
-
- - name: Set up Python
- uses: actions/setup-python@v4
- with:
- python-version: "3.13"
-
- - name: Install Dependencies
- run: |
- pip install -e packages/py/aitbc-agent-sdk/
- pip install pytest pytest-asyncio
-
- - name: Test Multi-Agent Swarm
- run: |
- python -c "
- import asyncio
- import sys
- sys.path.append('packages/py/aitbc-agent-sdk')
- from aitbc_agent import ComputeProvider, SwarmCoordinator
-
- async def test_swarm_integration():
- # Create multiple agents
- providers = []
- for i in range(5):
- provider = ComputeProvider.register(f'provider-{i}', {
- 'compute_type': 'inference',
- 'gpu_memory': 24,
- 'performance_score': 0.9 + (i * 0.02)
- }, {'base_rate': 0.1 + (i * 0.01)})
- providers.append(provider)
-
- # Create swarm coordinator
- coordinator = SwarmCoordinator.create('coordinator', 'swarm_coordinator', {
- 'compute_type': 'coordination',
- 'specialization': 'load_balancing'
- })
-
- # Join swarm
- await coordinator.join_swarm('load_balancing', {
- 'role': 'coordinator',
- 'contribution_level': 'high'
- })
-
- # Test collective intelligence
- intel = await coordinator.get_market_intelligence()
- if 'demand_forecast' in intel:
- print('✅ Swarm integration test passed')
- print(f' Market intelligence: {intel[\"demand_forecast\"]}')
- else:
- print('❌ Swarm integration test failed')
- exit(1)
-
- asyncio.run(test_swarm_integration())
- "
-
- deploy-agent-updates:
- runs-on: ubuntu-latest
- name: Deploy Agent Updates
- needs: [validate-agent-contribution, swarm-integration-test]
- if: github.ref == 'refs/heads/main'
-
- steps:
- - name: Checkout Code
- uses: actions/checkout@v4
-
- - name: Deploy Agent SDK
- run: |
- echo "🚀 Deploying agent SDK updates..."
- echo " - Agent identity system"
- echo " - Swarm intelligence protocols"
- echo " - GitHub integration pipeline"
- echo " - Agent reward system"
- echo ""
- echo "✅ Agent updates deployed successfully!"
-workflow:
- disable: true
diff --git a/.github/workflows/build-macos-packages.yml b/.github/workflows/build-macos-packages.yml
deleted file mode 100644
index 4feb8746..00000000
--- a/.github/workflows/build-macos-packages.yml
+++ /dev/null
@@ -1,172 +0,0 @@
-name: Build macOS Native Packages
-
-on:
- push:
- branches: [ main, develop ]
- paths:
- - 'cli/**'
- - 'packages/**'
- pull_request:
- branches: [ main ]
- paths:
- - 'cli/**'
- - 'packages/**'
- release:
- types: [ published ]
- workflow_dispatch:
-
-jobs:
- build-macos:
- runs-on: ubuntu-latest
- container:
- image: debian:trixie
- strategy:
- matrix:
- target:
- - macos-arm64
- - macos-x86_64
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
-
- - name: Update package lists
- run: apt-get update
-
- - name: Install build dependencies
- run: |
- apt-get install -y \
- build-essential \
- python3.13 \
- python3.13-venv \
- python3.13-pip \
- python3.13-dev \
- python3-setuptools \
- python3-wheel \
- python3-cryptography \
- xar \
- cpio \
- openssl \
- rsync \
- tar \
- gzip \
- curl \
- bc
-
- - name: Set up Python
- run: |
- python3.13 -m venv /opt/venv
- /opt/venv/bin/pip install --upgrade pip setuptools wheel pyinstaller
- echo '/opt/venv/bin' >> $GITHUB_PATH
-
- - name: Build macOS packages
- run: |
- cd packages
- ./build-macos-packages.sh
-
- - name: Upload macOS packages
- uses: actions/upload-artifact@v4
- with:
- name: macos-packages-${{ matrix.target }}
- path: packages/github/packages/macos/
- retention-days: 30
-
- - name: Generate release notes
- if: github.event_name == 'release'
- run: |
- echo "## macOS Native Packages" > release_notes.md
- echo "" >> release_notes.md
- echo "### Installation" >> release_notes.md
- echo '```bash' >> release_notes.md
- echo "curl -fsSL https://raw.githubusercontent.com/aitbc/aitbc/main/packages/github/packages/macos/install-macos-native.sh | bash" >> release_notes.md
- echo '```' >> release_notes.md
- echo "" >> release_notes.md
- echo "### Features" >> release_notes.md
- echo "- Native macOS performance" >> release_notes.md
- echo "- No dependencies required" >> release_notes.md
- echo "- Universal binary (Intel + Apple Silicon)" >> release_notes.md
- echo "- Complete CLI functionality" >> release_notes.md
-
- - name: Create Release
- if: github.event_name == 'release'
- uses: softprops/action-gh-release@v2
- with:
- files: packages/github/packages/macos/*.pkg
- body_path: release_notes.md
- draft: false
- prerelease: false
- generate_release_notes: true
-
- build-all-targets:
- needs: build-macos
- runs-on: ubuntu-latest
- steps:
- - name: Download all artifacts
- uses: actions/download-artifact@v4
- with:
- path: packages/github/packages/macos/
- pattern: macos-packages-*
-
- - name: Create universal package
- run: |
- cd packages/github/packages/macos/
-
- # Create combined installer
- cat > install-macos-universal.sh << 'EOF'
- #!/bin/bash
- # AITBC CLI Universal macOS Installer
-
- ARCH=$(uname -m)
- if [[ "$ARCH" == "arm64" ]]; then
- echo "Installing for Apple Silicon..."
- curl -fsSL https://raw.githubusercontent.com/aitbc/aitbc/main/packages/github/packages/macos/install-macos-arm64.sh | bash
- else
- echo "Installing for Intel Mac..."
- curl -fsSL https://raw.githubusercontent.com/aitbc/aitbc/main/packages/github/packages/macos/install-macos-x86_64.sh | bash
- fi
- EOF
-
- chmod +x install-macos-universal.sh
-
- - name: Upload universal installer
- uses: actions/upload-artifact@v4
- with:
- name: macos-universal-installer
- path: packages/github/packages/macos/install-macos-universal.sh
- retention-days: 30
-
- test-macos:
- needs: build-macos
- runs-on: macos-latest
- steps:
- - name: Download macOS packages
- uses: actions/download-artifact@v4
- with:
- name: macos-packages-macos-x86_64
- path: /tmp/
-
- - name: Install package
- run: |
- cd /tmp
- sudo installer -pkg aitbc-cli-0.1.0.pkg -target /
-
- - name: Test installation
- run: |
- aitbc --version
- aitbc --help
- aitbc wallet balance
-
- - name: Verify functionality
- run: |
- # Test basic commands
- aitbc config show
- aitbc blockchain --help
- aitbc marketplace --help
-
- - name: Test completion
- run: |
- # Test bash completion
- source /usr/local/etc/bash_completion.d/aitbc
- echo "Testing completion..."
-workflow:
- disable: true
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
deleted file mode 100644
index 07709759..00000000
--- a/.github/workflows/ci.yml
+++ /dev/null
@@ -1,75 +0,0 @@
-name: CI
-
-on:
- push:
- branches: ["**"]
- pull_request:
- branches: ["**"]
-
-jobs:
- python:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v4
-
- - name: Set up Python
- uses: actions/setup-python@v5
- with:
- python-version: '3.13'
- cache: 'pip'
-
- - name: Install Poetry
- run: python -m pip install --upgrade pip poetry
-
- - name: Install dependencies
- run: |
- poetry config virtualenvs.create false
- poetry install --no-interaction --no-ansi
-
- - name: Lint (ruff)
- run: poetry run ruff check .
-
- - name: Check .env.example drift
- run: python scripts/focused_dotenv_linter.py --check
-
- - name: Test (pytest)
- run: poetry run pytest --cov=aitbc_cli --cov-report=term-missing --cov-report=xml
-
- - name: Upload coverage to Codecov
- uses: codecov/codecov-action@v4
- with:
- file: ./coverage.xml
- flags: unittests
- name: codecov-umbrella
-
- contracts:
- runs-on: ubuntu-latest
- defaults:
- run:
- working-directory: contracts
-
- steps:
- - name: Checkout
- uses: actions/checkout@v4
-
- - name: Setup Node
- uses: actions/setup-node@v4
- with:
- node-version: '22'
- cache: 'npm'
- cache-dependency-path: contracts/package-lock.json
-
- - name: Install dependencies
- run: npm ci
-
- - name: Lint
- run: npm run lint
-
- - name: Compile
- run: npm run compile
-
- - name: Test
- run: npm test
-workflow:
- disable: true
diff --git a/.github/workflows/cli-tests.yml b/.github/workflows/cli-tests.yml
deleted file mode 100644
index bb4a2750..00000000
--- a/.github/workflows/cli-tests.yml
+++ /dev/null
@@ -1,48 +0,0 @@
-name: CLI Tests
-
-on:
- push:
- branches: [main]
- paths:
- - 'cli/**'
- - 'tests/cli/**'
- pull_request:
- branches: [main]
- paths:
- - 'cli/**'
- - 'tests/cli/**'
-
-jobs:
- cli-tests:
- runs-on: ubuntu-latest
- name: CLI Tests
-
- steps:
- - uses: actions/checkout@v4
-
- - name: Set up Python
- uses: actions/setup-python@v5
- with:
- python-version: '3.13'
-
- - name: Install dependencies
- run: |
- python -m pip install --upgrade pip
- pip install -e .
- pip install -e packages/py/aitbc-crypto
- pip install fastapi uvicorn sqlmodel pydantic-settings aiosqlite slowapi orjson prometheus-client
- pip install pytest pytest-cov pytest-asyncio pytest-mock
-
- - name: Run CLI tests
- run: |
- python -m pytest tests/cli/ -v --tb=short --disable-warnings --cov=aitbc_cli --cov-report=term-missing --cov-report=xml
- env:
- DATABASE_URL: sqlite:///./test_coordinator.db
-
- - name: Upload coverage
- uses: actions/upload-artifact@v4
- with:
- name: cli-coverage-report
- path: coverage.xml
-workflow:
- disable: true
diff --git a/.github/workflows/comprehensive-tests.yml b/.github/workflows/comprehensive-tests.yml
deleted file mode 100644
index ba858ce3..00000000
--- a/.github/workflows/comprehensive-tests.yml
+++ /dev/null
@@ -1,393 +0,0 @@
-name: Comprehensive Tests
-
-on:
- push:
- branches: ["main", "develop"]
- pull_request:
- branches: ["main", "develop"]
- schedule:
- # Run comprehensive tests daily at 3 AM UTC
- - cron: '0 3 * * *'
-
-jobs:
- # Unit tests - fast, isolated tests
- unit-tests:
- runs-on: ubuntu-latest
- name: Unit Tests
-
- steps:
- - name: Checkout
- uses: actions/checkout@v4
-
- - name: Set up Python
- uses: actions/setup-python@v5
- with:
- python-version: '3.13'
- cache: 'pip'
-
- - name: Install dependencies
- run: |
- python -m pip install --upgrade pip
- pip install -e .
- pip install -e packages/py/aitbc-crypto
- pip install pytest pytest-cov pytest-asyncio pytest-mock
-
- - name: Run unit tests
- run: |
- python -m pytest -m "unit and not slow" --cov=aitbc_cli --cov-report=term-missing --cov-report=xml
-
- - name: Upload coverage
- uses: codecov/codecov-action@v4
- with:
- file: ./coverage.xml
- flags: unit
- name: unit-tests
-
- # Integration tests - may require external services
- integration-tests:
- runs-on: ubuntu-latest
- name: Integration Tests
-
- steps:
- - name: Checkout
- uses: actions/checkout@v4
-
- - name: Set up Python
- uses: actions/setup-python@v5
- with:
- python-version: '3.13'
- cache: 'pip'
-
- - name: Install dependencies
- run: |
- python -m pip install --upgrade pip
- pip install -e .
- pip install -e packages/py/aitbc-crypto
- pip install fastapi uvicorn sqlmodel pydantic-settings aiosqlite
- pip install pytest pytest-cov pytest-asyncio pytest-mock
-
- - name: Run integration tests
- run: |
- python -m pytest -m "integration and not slow" --cov=aitbc_cli --cov-report=term-missing --cov-report=xml
- env:
- DATABASE_URL: sqlite:///./test_coordinator.db
-
- - name: Upload coverage
- uses: codecov/codecov-action@v4
- with:
- file: ./coverage.xml
- flags: integration
- name: integration-tests
-
- # CLI-specific tests
- cli-tests:
- runs-on: ubuntu-latest
- name: CLI Tests
- strategy:
- matrix:
- python-version: ['3.11', '3.12', '3.13']
- fail-fast: false
-
- steps:
- - name: Checkout
- uses: actions/checkout@v4
-
- - name: Set up Python ${{ matrix.python-version }}
- uses: actions/setup-python@v5
- with:
- python-version: ${{ matrix.python-version }}
-
- - name: Install dependencies
- run: |
- python -m pip install --upgrade pip
- pip install -e .
- pip install -e packages/py/aitbc-crypto
- pip install fastapi uvicorn sqlmodel pydantic-settings aiosqlite slowapi orjson prometheus-client
- pip install pytest pytest-cov pytest-asyncio pytest-mock
-
- - name: Run CLI tests
- run: |
- python -m pytest tests/cli/ -m "cli" --cov=aitbc_cli --cov-report=term-missing --cov-report=xml
-
- - name: Upload coverage
- uses: codecov/codecov-action@v4
- with:
- file: ./coverage.xml
- flags: cli
- name: cli-tests
-
- # API tests
- api-tests:
- runs-on: ubuntu-latest
- name: API Tests
-
- steps:
- - name: Checkout
- uses: actions/checkout@v4
-
- - name: Set up Python
- uses: actions/setup-python@v5
- with:
- python-version: '3.13'
- cache: 'pip'
-
- - name: Install dependencies
- run: |
- python -m pip install --upgrade pip
- pip install -e .
- pip install -e packages/py/aitbc-crypto
- pip install fastapi uvicorn sqlmodel pydantic-settings aiosqlite
- pip install pytest pytest-cov pytest-asyncio pytest-mock httpx
-
- - name: Run API tests
- run: |
- python -m pytest -m "api" --cov=aitbc_cli --cov-report=term-missing --cov-report=xml
- env:
- DATABASE_URL: sqlite:///./test_coordinator.db
-
- - name: Upload coverage
- uses: codecov/codecov-action@v4
- with:
- file: ./coverage.xml
- flags: api
- name: api-tests
-
- # Blockchain tests
- blockchain-tests:
- runs-on: ubuntu-latest
- name: Blockchain Tests
-
- steps:
- - name: Checkout
- uses: actions/checkout@v4
-
- - name: Set up Python
- uses: actions/setup-python@v5
- with:
- python-version: '3.11'
- cache: 'pip'
-
- - name: Install dependencies
- run: |
- python -m pip install --upgrade pip
- pip install -e .
- pip install -e packages/py/aitbc-crypto
- pip install pytest pytest-cov pytest-asyncio pytest-mock
-
- - name: Run blockchain tests
- run: |
- python -m pytest -m "blockchain" --cov=aitbc_cli --cov-report=term-missing --cov-report=xml
-
- - name: Upload coverage
- uses: codecov/codecov-action@v4
- with:
- file: ./coverage.xml
- flags: blockchain
- name: blockchain-tests
-
- # Slow tests - run separately
- slow-tests:
- runs-on: ubuntu-latest
- name: Slow Tests
- if: github.event_name != 'pull_request' # Don't run on PRs to save time
-
- steps:
- - name: Checkout
- uses: actions/checkout@v4
-
- - name: Set up Python
- uses: actions/setup-python@v5
- with:
- python-version: '3.11'
- cache: 'pip'
-
- - name: Install dependencies
- run: |
- python -m pip install --upgrade pip
- pip install -e .
- pip install -e packages/py/aitbc-crypto
- pip install pytest pytest-cov pytest-asyncio pytest-mock
-
- - name: Run slow tests
- run: |
- python -m pytest -m "slow" --cov=aitbc_cli --cov-report=term-missing --cov-report=xml
-
- - name: Upload coverage
- uses: codecov/codecov-action@v4
- with:
- file: ./coverage.xml
- flags: slow
- name: slow-tests
-
- # Performance tests
- performance-tests:
- runs-on: ubuntu-latest
- name: Performance Tests
- if: github.event_name != 'pull_request' # Don't run on PRs to save time
-
- steps:
- - name: Checkout
- uses: actions/checkout@v4
-
- - name: Set up Python
- uses: actions/setup-python@v5
- with:
- python-version: '3.11'
- cache: 'pip'
-
- - name: Install dependencies
- run: |
- python -m pip install --upgrade pip
- pip install -e .
- pip install -e packages/py/aitbc-crypto
- pip install pytest pytest-cov pytest-asyncio pytest-mock pytest-benchmark
-
- - name: Run performance tests
- run: |
- python -m pytest -m "performance" --cov=aitbc_cli --cov-report=term-missing --cov-report=xml --benchmark-only
-
- - name: Upload coverage
- uses: codecov/codecov-action@v4
- with:
- file: ./coverage.xml
- flags: performance
- name: performance-tests
-
- # Security tests
- security-tests:
- runs-on: ubuntu-latest
- name: Security Tests
-
- steps:
- - name: Checkout
- uses: actions/checkout@v4
-
- - name: Set up Python
- uses: actions/setup-python@v5
- with:
- python-version: '3.11'
- cache: 'pip'
-
- - name: Install dependencies
- run: |
- python -m pip install --upgrade pip
- pip install -e .
- pip install -e packages/py/aitbc-crypto
- pip install pytest pytest-cov pytest-asyncio pytest-mock bandit safety
-
- - name: Run security tests
- run: |
- python -m pytest -m "security" --cov=aitbc_cli --cov-report=term-missing --cov-report=xml
-
- - name: Run Bandit security scan
- run: |
- bandit -r . -f json -o bandit-report.json || true
- bandit -r . -f txt -o bandit-report.txt || true
-
- - name: Run Safety dependency check
- run: |
- safety check --json --output safety-report.json || true
- safety check || true
-
- - name: Upload security reports
- uses: actions/upload-artifact@v4
- with:
- name: security-reports
- path: |
- bandit-report.json
- bandit-report.txt
- safety-report.json
- retention-days: 30
-
- - name: Upload coverage
- uses: codecov/codecov-action@v4
- with:
- file: ./coverage.xml
- flags: security
- name: security-tests
-
- # Test summary and coverage aggregation
- test-summary:
- runs-on: ubuntu-latest
- name: Test Summary
- needs: [unit-tests, integration-tests, cli-tests, api-tests, blockchain-tests]
- if: always()
-
- steps:
- - name: Checkout
- uses: actions/checkout@v4
-
- - name: Download all coverage reports
- uses: actions/download-artifact@v4
- with:
- pattern: "*-coverage-report"
- merge-multiple: true
-
- - name: Generate test summary
- run: |
- echo "# 🧪 Test Summary" >> $GITHUB_STEP_SUMMARY
- echo "" >> $GITHUB_STEP_SUMMARY
- echo "## Test Results" >> $GITHUB_STEP_SUMMARY
- echo "" >> $GITHUB_STEP_SUMMARY
-
- # Unit tests
- if [ "${{ needs.unit-tests.result }}" == "success" ]; then
- echo "✅ **Unit Tests**: Passed" >> $GITHUB_STEP_SUMMARY
- else
- echo "❌ **Unit Tests**: Failed" >> $GITHUB_STEP_SUMMARY
- fi
-
- # Integration tests
- if [ "${{ needs.integration-tests.result }}" == "success" ]; then
- echo "✅ **Integration Tests**: Passed" >> $GITHUB_STEP_SUMMARY
- else
- echo "❌ **Integration Tests**: Failed" >> $GITHUB_STEP_SUMMARY
- fi
-
- # CLI tests
- if [ "${{ needs.cli-tests.result }}" == "success" ]; then
- echo "✅ **CLI Tests**: Passed" >> $GITHUB_STEP_SUMMARY
- else
- echo "❌ **CLI Tests**: Failed" >> $GITHUB_STEP_SUMMARY
- fi
-
- # API tests
- if [ "${{ needs.api-tests.result }}" == "success" ]; then
- echo "✅ **API Tests**: Passed" >> $GITHUB_STEP_SUMMARY
- else
- echo "❌ **API Tests**: Failed" >> $GITHUB_STEP_SUMMARY
- fi
-
- # Blockchain tests
- if [ "${{ needs.blockchain-tests.result }}" == "success" ]; then
- echo "✅ **Blockchain Tests**: Passed" >> $GITHUB_STEP_SUMMARY
- else
- echo "❌ **Blockchain Tests**: Failed" >> $GITHUB_STEP_SUMMARY
- fi
-
- echo "" >> $GITHUB_STEP_SUMMARY
- echo "## Test Configuration" >> $GITHUB_STEP_SUMMARY
- echo "- **Python Version**: 3.13 (standardized)" >> $GITHUB_STEP_SUMMARY
- echo "- **Test Framework**: pytest with pyproject.toml configuration" >> $GITHUB_STEP_SUMMARY
- echo "- **Coverage**: All test suites with coverage reporting" >> $GITHUB_STEP_SUMMARY
- echo "- **Markers**: unit, integration, cli, api, blockchain, slow, performance, security" >> $GITHUB_STEP_SUMMARY
-
- - name: Comment PR with test results
- if: github.event_name == 'pull_request'
- uses: actions/github-script@v6
- with:
- script: |
- const fs = require('fs');
-
- // Read the summary
- const summary = fs.readFileSync(process.env.GITHUB_STEP_SUMMARY, 'utf8');
-
- // Create PR comment
- github.rest.issues.createComment({
- issue_number: context.issue.number,
- owner: context.repo.owner,
- repo: context.repo.repo,
- body: summary
- });
-workflow:
- disable: true
diff --git a/.github/workflows/configuration-security.yml b/.github/workflows/configuration-security.yml
deleted file mode 100644
index 745f68dc..00000000
--- a/.github/workflows/configuration-security.yml
+++ /dev/null
@@ -1,161 +0,0 @@
-name: Configuration Security Check
-
-on:
- push:
- branches: [ main, develop ]
- pull_request:
- branches: [ main, develop ]
- workflow_dispatch:
-
-jobs:
- config-security-scan:
- runs-on: ubuntu-latest
- name: Configuration Security Scan
-
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
-
- - name: Set up Python
- uses: actions/setup-python@v4
- with:
- python-version: '3.13'
-
- - name: Install dependencies
- run: |
- python -m pip install --upgrade pip
- pip install pyyaml
-
- - name: Run Configuration Security Audit
- run: |
- python config/security/environment-audit.py --format json --output env-security-report.json
-
- - name: Run Helm Values Security Audit
- run: |
- python config/security/helm-values-audit.py --format json --output helm-security-report.json
-
- - name: Check for Security Issues
- run: |
- python -c "
- import json
- import sys
-
- # Check environment security
- with open('env-security-report.json') as f:
- env_report = json.load(f)
-
- # Check Helm values security
- with open('helm-security-report.json') as f:
- helm_report = json.load(f)
-
- total_issues = env_report['summary']['total_issues'] + helm_report['summary']['total_issues']
- critical_issues = env_report['summary']['severity_breakdown'].get('CRITICAL', 0) + helm_report['summary']['severity_breakdown'].get('CRITICAL', 0)
- high_issues = env_report['summary']['severity_breakdown'].get('HIGH', 0) + helm_report['summary']['severity_breakdown'].get('HIGH', 0)
-
- print(f'Environment Issues: {env_report[\"summary\"][\"total_issues\"]}')
- print(f'Helm Values Issues: {helm_report[\"summary\"][\"total_issues\"]}')
- print(f'Total Issues: {total_issues}')
- print(f'Critical: {critical_issues}')
- print(f'High: {high_issues}')
-
- if critical_issues > 0:
- print('❌ CRITICAL security issues found!')
- sys.exit(1)
- elif high_issues > 0:
- print('⚠️ HIGH security issues found!')
- sys.exit(1)
- elif total_issues > 0:
- print('⚠️ Security issues found')
- sys.exit(1)
- else:
- print('✅ No security issues found')
- "
-
- - name: Upload Security Reports
- uses: actions/upload-artifact@v3
- if: always()
- with:
- name: configuration-security-reports
- path: |
- env-security-report.json
- helm-security-report.json
- retention-days: 30
-
- - name: Comment PR with Security Findings
- if: github.event_name == 'pull_request'
- uses: actions/github-script@v6
- with:
- script: |
- const fs = require('fs');
-
- try {
- const report = JSON.parse(fs.readFileSync('security-report.json', 'utf8'));
- const summary = report.summary;
-
- let comment = `## 🔒 Configuration Security Scan\n\n`;
- comment += `**Summary**\n`;
- comment += `- Files Audited: ${summary.files_audited}\n`;
- comment += `- Total Issues: ${summary.total_issues}\n\n`;
-
- if (summary.total_issues > 0) {
- comment += `**Severity Breakdown**\n`;
- const breakdown = summary.severity_breakdown;
- for (const [severity, count] of Object.entries(breakdown)) {
- if (count > 0) {
- comment += `- ${severity}: ${count}\n`;
- }
- }
- comment += `\n`;
-
- comment += `**Issues Found**\n`;
- for (const [file, issues] of Object.entries(report.issues)) {
- comment += `\n📁 \`${file}\`\n`;
- for (const issue of issues) {
- comment += `- ${issue.level}: ${issue.message}\n`;
- }
- }
- } else {
- comment += `✅ **No security issues found!**\n`;
- }
-
- comment += `\n**Recommendations**\n`;
- for (const rec of report.recommendations) {
- comment += `- ${rec}\n`;
- }
-
- github.rest.issues.createComment({
- issue_number: context.issue.number,
- owner: context.repo.owner,
- repo: context.repo.repo,
- body: comment
- });
- } catch (error) {
- console.log('Could not read security report:', error.message);
- }
-
- - name: Validate Production Templates
- run: |
- echo "Validating production template files..."
-
- # Check that production templates don't contain actual secrets
- for template in config/environments/production/*.template; do
- if [ -f "$template" ]; then
- echo "Checking $template..."
-
- # Check for forbidden patterns
- if grep -iE "(your-.*-here|change-this|password|secret)" "$template"; then
- echo "❌ Template contains forbidden patterns: $template"
- exit 1
- fi
-
- # Check that secrets use secretRef format
- if grep -E "(API_KEY|SECRET|PASSWORD|TOKEN|DSN)=" "$template" | grep -v "secretRef:"; then
- echo "❌ Template has non-secretRef secrets: $template"
- exit 1
- fi
-
- echo "✅ $template is valid"
- fi
- done
-workflow:
- disable: true
diff --git a/.github/workflows/contracts-ci.yml b/.github/workflows/contracts-ci.yml
deleted file mode 100644
index 93528247..00000000
--- a/.github/workflows/contracts-ci.yml
+++ /dev/null
@@ -1,43 +0,0 @@
-name: Contracts CI
-
-on:
- push:
- branches: ["**"]
- pull_request:
- branches: ["**"]
-
-jobs:
- contracts:
- runs-on: ubuntu-latest
- defaults:
- run:
- working-directory: contracts
-
- steps:
- - name: Checkout
- uses: actions/checkout@v4
-
- - name: Setup Node
- uses: actions/setup-node@v4
- with:
- node-version: '22'
- cache: 'npm'
- cache-dependency-path: contracts/package-lock.json
-
- - name: Install dependencies
- run: npm ci
-
- - name: Lint
- run: npm run lint
-
- - name: Slither Analysis
- run: npm run slither
- # Note: Slither runs locally without any cloud services or API keys
-
- - name: Compile
- run: npm run compile
-
- - name: Test
- run: npm test
-workflow:
- disable: true
diff --git a/.github/workflows/dotenv-check.yml b/.github/workflows/dotenv-check.yml
deleted file mode 100644
index 53047fb5..00000000
--- a/.github/workflows/dotenv-check.yml
+++ /dev/null
@@ -1,255 +0,0 @@
-name: Dotenv Configuration Check
-
-on:
- push:
- branches: ["**"]
- paths:
- - '.env.example'
- - 'scripts/focused_dotenv_linter.py'
- - '**/*.py'
- - '**/*.yml'
- - '**/*.yaml'
- - '**/*.toml'
- - '**/*.sh'
- - '**/*.bash'
- - '**/*.zsh'
- pull_request:
- branches: ["**"]
- paths:
- - '.env.example'
- - 'scripts/focused_dotenv_linter.py'
- - '**/*.py'
- - '**/*.yml'
- - '**/*.yaml'
- - '**/*.toml'
- - '**/*.sh'
- - '**/*.bash'
- - '**/*.zsh'
-
-jobs:
- dotenv-check:
- runs-on: ubuntu-latest
- name: Check .env.example Configuration Drift
-
- steps:
- - name: Checkout
- uses: actions/checkout@v4
-
- - name: Set up Python
- uses: actions/setup-python@v5
- with:
- python-version: '3.13'
- cache: 'pip'
-
- - name: Install dependencies
- run: |
- python -m pip install --upgrade pip
-
- - name: Check .env.example drift
- run: |
- python scripts/focused_dotenv_linter.py --check --verbose
-
- - name: Generate configuration report
- run: |
- python scripts/focused_dotenv_linter.py > dotenv-report.txt
-
- - name: Upload configuration report
- uses: actions/upload-artifact@v4
- if: always()
- with:
- name: dotenv-configuration-report
- path: dotenv-report.txt
- retention-days: 30
-
- - name: Comment PR with configuration issues
- if: failure() && github.event_name == 'pull_request'
- uses: actions/github-script@v6
- with:
- script: |
- const fs = require('fs');
-
- try {
- const report = fs.readFileSync('dotenv-report.txt', 'utf8');
-
- const comment = `## 🔍 Configuration Drift Detected
-
- The focused dotenv linter found configuration drift between \`.env.example\` and actual environment variable usage in the codebase.
-
-
- Click to see full report
-
- \`\`\`
- ${report}
- \`\`\`
-
-
-
- ### 🔧 How to Fix
-
- 1. **Auto-fix missing variables:**
- \`\`\`bash
- python scripts/focused_dotenv_linter.py --fix
- \`\`\`
-
- 2. **Review unused variables:**
- - Remove variables from \`.env.example\` that are no longer used
- - Or add them to the linter's exclusion list if they're needed for external tools
-
- 3. **Run locally:**
- \`\`\`bash
- python scripts/focused_dotenv_linter.py --verbose
- \`\`\`
-
- This prevents silent configuration drift and ensures all environment variables are properly documented.`;
-
- github.rest.issues.createComment({
- issue_number: context.issue.number,
- owner: context.repo.owner,
- repo: context.repo.repo,
- body: comment
- });
- } catch (error) {
- console.log('Could not read dotenv report:', error);
- }
-
- dotenv-validation:
- runs-on: ubuntu-latest
- name: Validate .env.example Format
- needs: dotenv-check
-
- steps:
- - name: Checkout
- uses: actions/checkout@v4
-
- - name: Validate .env.example format
- run: |
- # Check if .env.example exists and is readable
- if [ ! -f ".env.example" ]; then
- echo "❌ .env.example file not found"
- exit 1
- fi
-
- # Check for common format issues
- echo "🔍 Validating .env.example format..."
-
- # Check for lines without equals signs (excluding comments and empty lines)
- invalid_lines=$(grep -v '^#' .env.example | grep -v '^$' | grep -v '=' | wc -l)
- if [ "$invalid_lines" -gt 0 ]; then
- echo "❌ Found $invalid_lines lines without '=' in .env.example"
- grep -v '^#' .env.example | grep -v '^$' | grep -v '=' | head -5
- exit 1
- fi
-
- # Check for variables with spaces (should be uppercase with underscores)
- invalid_vars=$(grep -v '^#' .env.example | grep -v '^$' | cut -d'=' -f1 | grep -E '[a-z]' | grep -v '^HTTP_PROXY$' | grep -v '^HTTPS_PROXY$' | grep -v '^NO_PROXY$' | wc -l)
- if [ "$invalid_vars" -gt 0 ]; then
- echo "⚠️ Found $invalid_vars variables with lowercase letters (should be uppercase):"
- grep -v '^#' .env.example | grep -v '^$' | cut -d'=' -f1 | grep -E '[a-z]' | grep -v '^HTTP_PROXY$' | grep -v '^HTTPS_PROXY$' | grep -v '^NO_PROXY$' | head -5
- echo "Consider using uppercase variable names for consistency."
- fi
-
- # Check for duplicate variables
- duplicates=$(grep -v '^#' .env.example | grep -v '^$' | cut -d'=' -f1 | sort | uniq -d | wc -l)
- if [ "$duplicates" -gt 0 ]; then
- echo "❌ Found $duplicates duplicate variable names:"
- grep -v '^#' .env.example | grep -v '^$' | cut -d'=' -f1 | sort | uniq -d
- exit 1
- fi
-
- echo "✅ .env.example format validation passed"
-
- dotenv-security:
- runs-on: ubuntu-latest
- name: Security Check for .env.example
- needs: dotenv-check
-
- steps:
- - name: Checkout
- uses: actions/checkout@v4
-
- - name: Security check for sensitive data
- run: |
- echo "🔒 Checking .env.example for sensitive data..."
-
- # Check for potential secrets (should be placeholder values)
- sensitive_patterns=(
- "password="
- "secret="
- "key="
- "token="
- "private_key="
- "api_key="
- "dsn="
- )
-
- found_issues=false
-
- for pattern in "${sensitive_patterns[@]}"; do
- # Look for lines that might contain actual secrets (not placeholders)
- if grep -i "$pattern" .env.example | grep -v -E "(your-|placeholder|example|test|dummy|change-|xxx|yyy|zzz)" | grep -v -E "^#" | head -3; then
- echo "⚠️ Potential actual secrets found with pattern: $pattern"
- found_issues=true
- fi
- done
-
- # Check for common placeholder patterns
- placeholder_count=$(grep -c -E "(your-|placeholder|example|test|dummy|change-|xxx|yyy|zzz)" .env.example || true)
- echo "📊 Found $placeholder_count placeholder values (good!)"
-
- if [ "$found_issues" = true ]; then
- echo "❌ Please replace actual secrets with placeholder values in .env.example"
- echo " Use patterns like: your-secret-here, placeholder-value, change-me"
- exit 1
- fi
-
- echo "✅ Security check passed"
-
- dotenv-summary:
- runs-on: ubuntu-latest
- name: Configuration Summary
- needs: [dotenv-check, dotenv-validation, dotenv-security]
- if: always()
-
- steps:
- - name: Generate summary
- run: |
- echo "# 📋 .env.example Configuration Summary" >> $GITHUB_STEP_SUMMARY
- echo "" >> $GITHUB_STEP_SUMMARY
-
- # Check results from previous jobs
- if [ "${{ needs.dotenv-check.result }}" == "success" ]; then
- echo "✅ **Configuration Drift Check**: Passed" >> $GITHUB_STEP_SUMMARY
- else
- echo "❌ **Configuration Drift Check**: Failed" >> $GITHUB_STEP_SUMMARY
- fi
-
- if [ "${{ needs.dotenv-validation.result }}" == "success" ]; then
- echo "✅ **Format Validation**: Passed" >> $GITHUB_STEP_SUMMARY
- else
- echo "❌ **Format Validation**: Failed" >> $GITHUB_STEP_SUMMARY
- fi
-
- if [ "${{ needs.dotenv-security.result }}" == "success" ]; then
- echo "✅ **Security Check**: Passed" >> $GITHUB_STEP_SUMMARY
- else
- echo "❌ **Security Check**: Failed" >> $GITHUB_STEP_SUMMARY
- fi
-
- echo "" >> $GITHUB_STEP_SUMMARY
- echo "## 📊 Configuration Statistics" >> $GITHUB_STEP_SUMMARY
-
- # Count variables in .env.example
- var_count=$(grep -v '^#' .env.example | grep -v '^$' | wc -l)
- echo "- **Variables in .env.example**: $var_count" >> $GITHUB_STEP_SUMMARY
-
- # Count sections (based on comment headers)
- sections=$(grep '^# ====' .env.example | wc -l)
- echo "- **Configuration Sections**: $sections" >> $GITHUB_STEP_SUMMARY
-
- echo "" >> $GITHUB_STEP_SUMMARY
- echo "## 🔧 Maintenance" >> $GITHUB_STEP_SUMMARY
- echo "- **Linter**: \`python scripts/focused_dotenv_linter.py\`" >> $GITHUB_STEP_SUMMARY
- echo "- **Auto-fix**: \`python scripts/focused_dotenv_linter.py --fix\`" >> $GITHUB_STEP_SUMMARY
- echo "- **Verbose**: \`python scripts/focused_dotenv_linter.py --verbose\`" >> $GITHUB_STEP_SUMMARY
-workflow:
- disable: true
diff --git a/.github/workflows/file-organization.yml b/.github/workflows/file-organization.yml
deleted file mode 100644
index eb1fa618..00000000
--- a/.github/workflows/file-organization.yml
+++ /dev/null
@@ -1,43 +0,0 @@
-name: File Organization Check
-
-on:
- pull_request:
- branches: [ main, develop ]
-
-jobs:
- check-file-organization:
- runs-on: ubuntu-latest
-
- steps:
- - uses: actions/checkout@v3
-
- - name: Check file organization
- run: |
- chmod +x scripts/check-file-organization.sh
- ./scripts/check-file-organization.sh
-
- - name: Generate organization report
- if: failure()
- run: |
- chmod +x scripts/check-file-organization.sh
- ./scripts/check-file-organization.sh > organization-report.txt 2>&1 || true
-
- - name: Comment PR with issues
- if: failure()
- uses: actions/github-script@v6
- with:
- script: |
- const fs = require('fs');
- try {
- const output = fs.readFileSync('organization-report.txt', 'utf8');
- github.rest.issues.createComment({
- issue_number: context.issue.number,
- owner: context.repo.owner,
- repo: context.repo.repo,
- body: `🚨 **File Organization Issues Found**\n\n\`\`\`\n${output}\n\`\`\`\n\nPlease run \`./scripts/move-to-right-folder.sh --auto\` to fix these issues.\n\nSee [Development Guidelines](https://github.com/oib/AITBC/blob/main/docs/DEVELOPMENT_GUIDELINES.md) for more information.`
- });
- } catch (error) {
- console.log('Could not read organization report');
- }
-workflow:
- disable: true
diff --git a/.github/workflows/markdown-link-check.yml b/.github/workflows/markdown-link-check.yml
deleted file mode 100644
index 81653f0a..00000000
--- a/.github/workflows/markdown-link-check.yml
+++ /dev/null
@@ -1,34 +0,0 @@
-name: Markdown Link Check
-
-on:
- push:
- branches: [main]
- paths:
- - 'docs/**'
- - '**.md'
- pull_request:
- branches: [main]
- paths:
- - 'docs/**'
- - '**.md'
-
-jobs:
- link-check:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4
-
- - name: Run lychee link checker
- uses: lycheeverse/lychee-action@v1
- with:
- args: --verbose --no-progress --exclude 'mailto:*' --exclude 'https://dashboard.aitbc.io/*' --exclude 'https://aitbc.bubuit.net/admin/*' --exclude 'https://aitbc.bubuit.net/api/*' --exclude 'https://docs.aitbc.bubuit.net/*' --exclude 'https://aitbc.io/*' --exclude 'http://localhost:*' --exclude 'http://aitbc.keisanki.net:*' --exclude 'https://docs.aitbc.net/*' --exclude-file .lycheeignore 'docs/**/*.md' '**.md'
- fail: true
-
- - name: Upload link check results
- if: always()
- uses: actions/upload-artifact@v4
- with:
- name: link-check-results
- path: lychee/out.md
-workflow:
- disable: true
diff --git a/.github/workflows/phase8-integration.yml b/.github/workflows/phase8-integration.yml
deleted file mode 100644
index f59dc3ef..00000000
--- a/.github/workflows/phase8-integration.yml
+++ /dev/null
@@ -1,50 +0,0 @@
-name: Phase 8 Integration Tests
-
-on:
- push:
- branches: [main]
- paths:
- - 'apps/coordinator-api/tests/test_phase8_tasks.py'
- - 'apps/coordinator-api/tests/test_phase8_optional_endpoints.py'
- - 'apps/coordinator-api/**'
- pull_request:
- branches: [main]
- paths:
- - 'apps/coordinator-api/tests/test_phase8_tasks.py'
- - 'apps/coordinator-api/tests/test_phase8_optional_endpoints.py'
- - 'apps/coordinator-api/**'
-
-jobs:
- phase8-integration:
- runs-on: ubuntu-latest
- strategy:
- matrix:
- python-version: ['3.13']
- fail-fast: false
- steps:
- - uses: actions/checkout@v4
-
- - name: Set up Python ${{ matrix.python-version }}
- uses: actions/setup-python@v5
- with:
- python-version: ${{ matrix.python-version }}
-
- - name: Install dependencies
- run: |
- python -m pip install --upgrade pip
- pip install -e .
- pip install -e packages/py/aitbc-crypto
- pip install fastapi uvicorn sqlmodel pydantic-settings aiosqlite slowapi orjson prometheus-client
- pip install pytest pytest-asyncio pytest-cov
-
- - name: Run Phase 8 health tests (skips if env not set)
- run: |
- cd apps/coordinator-api
- python -m pytest tests/test_phase8_tasks.py -v --tb=short --disable-warnings
-
- - name: Run optional Phase 8 endpoint tests (skips if env not set)
- run: |
- cd apps/coordinator-api
- python -m pytest tests/test_phase8_optional_endpoints.py -v --tb=short --disable-warnings
-workflow:
- disable: true
diff --git a/.github/workflows/production-deploy.yml b/.github/workflows/production-deploy.yml
deleted file mode 100644
index 54e0813c..00000000
--- a/.github/workflows/production-deploy.yml
+++ /dev/null
@@ -1,190 +0,0 @@
-name: Production Deployment
-
-on:
- push:
- branches: [main]
- tags: ['v*']
- workflow_dispatch:
- inputs:
- environment:
- description: 'Deployment environment'
- required: true
- default: 'staging'
- type: choice
- options:
- - staging
- - production
-
-jobs:
- security-scan:
- runs-on: ubuntu-latest
- name: Security Scanning
- outputs:
- security-passed: ${{ steps.security-check.outputs.passed }}
- steps:
- - uses: actions/checkout@v4
-
- - name: Run comprehensive security scan
- run: |
- python scripts/focused_dotenv_linter.py --check
- bandit -r . -f json -o bandit-report.json
- slither contracts/ --json slither-report.json
-
- - name: Security validation
- id: security-check
- run: |
- if [ -f bandit-report.json ] && [ -f slither-report.json ]; then
- echo "passed=true" >> $GITHUB_OUTPUT
- else
- echo "passed=false" >> $GITHUB_OUTPUT
- exit 1
- fi
-
- build-and-test:
- runs-on: ubuntu-latest
- name: Build and Test
- needs: security-scan
- if: needs.security-scan.outputs.security-passed == 'true'
- steps:
- - uses: actions/checkout@v4
-
- - name: Set up Python
- uses: actions/setup-python@v5
- with:
- python-version: '3.13'
- cache: 'pip'
-
- - name: Install dependencies
- run: |
- python -m pip install --upgrade pip
- pip install -e .
- pip install -e packages/py/aitbc-crypto
- pip install pytest pytest-cov pytest-asyncio
-
- - name: Run comprehensive tests
- run: |
- python -m pytest -m "not slow" --cov=aitbc_cli --cov-report=xml --cov-fail-under=90
-
- - name: Build application
- run: |
- python -m build
-
- - name: Upload build artifacts
- uses: actions/upload-artifact@v4
- with:
- name: build-artifacts
- path: dist/
- retention-days: 30
-
- deploy-staging:
- runs-on: ubuntu-latest
- name: Deploy to Staging
- needs: build-and-test
- if: github.ref == 'refs/heads/main' || github.event.inputs.environment == 'staging'
- steps:
- - uses: actions/checkout@v4
-
- - name: Download build artifacts
- uses: actions/download-artifact@v4
- with:
- name: build-artifacts
- path: dist/
-
- - name: Deploy to staging
- run: |
- echo "Deploying to staging environment..."
- # Add staging deployment commands here
- # Example: scp to staging server, restart services, etc.
-
- - name: Run smoke tests
- run: |
- python scripts/smoke_tests.py --environment=staging
-
- - name: Health check
- run: |
- curl -f https://staging.aitbc.dev/health || exit 1
-
- deploy-production:
- runs-on: ubuntu-latest
- name: Deploy to Production
- needs: [build-and-test, deploy-staging]
- if: startsWith(github.ref, 'refs/tags/v') || github.event.inputs.environment == 'production'
- steps:
- - uses: actions/checkout@v4
-
- - name: Download build artifacts
- uses: actions/download-artifact@v4
- with:
- name: build-artifacts
- path: dist/
-
- - name: Create production backup
- run: |
- echo "Creating production backup..."
- # Add backup commands here
-
- - name: Deploy to production
- run: |
- echo "Deploying to production environment..."
- # Add production deployment commands here
-
- - name: Run production smoke tests
- run: |
- python scripts/smoke_tests.py --environment=production
-
- - name: Production health check
- run: |
- curl -f https://api.aitbc.dev/health || exit 1
-
- - name: Update monitoring
- run: |
- if [ -n "${{ secrets.MONITORING_TOKEN }}" ]; then
- curl -X POST https://monitoring.aitbc.net/api/deployment \
- -H "Authorization: Bearer ${{ secrets.MONITORING_TOKEN }}" \
- -d '{"version": "${{ github.ref_name }}", "environment": "production"}'
- fi
-
- post-deployment:
- runs-on: ubuntu-latest
- name: Post-Deployment Verification
- needs: [deploy-staging, deploy-production]
- if: always() && (needs.deploy-staging.result == 'success' || needs.deploy-production.result == 'success')
- steps:
- - name: Notify team
- uses: actions/github-script@v6
- with:
- script: |
- const environment = '${{ github.event.inputs.environment || (startsWith(github.ref, 'refs/tags/v') && 'production' || 'staging') }}';
- const deploymentUrl = environment === 'production' ? 'https://aitbc.dev' : 'https://staging.aitbc.dev';
-
- const message = `🚀 **Deployment Complete**
-
- **Environment**: ${environment}
- **Version**: ${github.ref_name}
- **URL**: ${deploymentUrl}
- **Commit**: ${github.sha}
-
- **Next Steps**:
- 1. Verify functionality at ${deploymentUrl}
- 2. Check monitoring dashboard
- 3. Review deployment logs
- 4. Update documentation if needed`;
-
- github.rest.issues.create({
- owner: context.repo.owner,
- repo: context.repo.repo,
- title: `Deployment Complete: ${environment} - ${github.ref_name}`,
- body: message,
- labels: ['deployment', environment]
- });
-
- - name: Update documentation
- run: |
- echo "Updating API documentation..."
- # Add documentation update commands here
-
- - name: Performance baseline
- run: |
- python scripts/performance_baseline.py --environment=${{ github.event.inputs.environment || 'staging' }}
-workflow:
- disable: true
diff --git a/.github/workflows/publish-github-packages.yml b/.github/workflows/publish-github-packages.yml
deleted file mode 100644
index 9eedb610..00000000
--- a/.github/workflows/publish-github-packages.yml
+++ /dev/null
@@ -1,316 +0,0 @@
-name: Publish Packages to GitHub Packages Registry
-
-on:
- push:
- tags:
- - 'v*'
- release:
- types: [published]
- workflow_dispatch:
- inputs:
- version:
- description: 'Version to publish (e.g., 0.1.0)'
- required: true
- default: '0.1.0'
-
-jobs:
- publish-debian-packages:
- runs-on: ubuntu-latest
- permissions:
- contents: read
- packages: write
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
-
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v3
-
- - name: Login to GitHub Container Registry
- uses: docker/login-action@v3
- with:
- registry: ghcr.io
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Build and publish Debian packages
- run: |
- # Create Debian package structure
- mkdir -p dist/debian
-
- # Copy existing packages
- cp packages/github/packages/debian-packages/*.deb dist/debian/
-
- # Create Dockerfile for Debian packages
- cat > dist/debian/Dockerfile << 'EOF'
- FROM debian:trixie-slim
- LABEL maintainer="AITBC Team"
- LABEL version="0.1.0"
-
- # Copy packages
- COPY *.deb /tmp/
-
- # Install packages
- RUN dpkg -i /tmp/*.deb || true && \
- apt-get install -f -y && \
- rm /tmp/*.deb
-
- # Set entrypoint
- ENTRYPOINT ["/usr/bin/aitbc"]
- EOF
-
- # Build and push Docker image
- cd dist/debian
- docker buildx build \
- --platform linux/amd64,linux/arm64 \
- --tag ghcr.io/${{ github.repository }}/aitbc-cli:${{ github.ref_name || github.event.inputs.version }} \
- --tag ghcr.io/${{ github.repository }}/aitbc-cli:latest \
- --push \
- .
-
- - name: Publish individual service packages
- run: |
- cd packages/github/packages/debian-packages
-
- # Publish each service as a separate container
- for package in aitbc-*-service_0.1.0_all.deb; do
- service_name=$(echo $package | sed 's/aitbc-\(.*\)-service_0.1.0_all.deb/\1/')
-
- # Create service-specific Dockerfile
- cat > Dockerfile.service << EOF
- FROM debian:trixie-slim
- LABEL maintainer="AITBC Team"
- LABEL version="0.1.0"
- LABEL service="${service_name}"
-
- COPY ${package} /tmp/
- RUN dpkg -i /tmp/${package} || true && \
- apt-get install -f -y && \
- rm /tmp/${package}
- EOF
-
- # Build and push service image
- docker buildx build \
- -f Dockerfile.service \
- --platform linux/amd64,linux/arm64 \
- --tag ghcr.io/${{ github.repository }}/aitbc-${service_name}-service:${{ github.ref_name || github.event.inputs.version }} \
- --tag ghcr.io/${{ github.repository }}/aitbc-${service_name}-service:latest \
- --push \
- .
- done
-
- publish-macos-packages:
- runs-on: macos-latest
- permissions:
- contents: read
- packages: write
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
-
- - name: Set up Xcode
- uses: maxim-lobanov/setup-xcode@v1
- with:
- xcode-version: latest-stable
-
- - name: Build macOS packages
- run: |
- cd packages
- ./build-macos-packages.sh
-
- - name: Create GitHub Package for macOS
- run: |
- cd packages/github/packages/macos-packages
-
- # Create package metadata
- cat > package.json << EOF
- {
- "name": "@aitbc/cli-macos",
- "version": "${{ github.ref_name || github.event.inputs.version }}",
- "description": "AITBC CLI for macOS Apple Silicon",
- "main": "aitbc-cli",
- "files": [
- "*.pkg",
- "*.sh"
- ],
- "repository": {
- "type": "git",
- "url": "https://github.com/${{ github.repository }}.git"
- },
- "author": "AITBC Team",
- "license": "MIT",
- "publishConfig": {
- "registry": "https://npm.pkg.github.com"
- }
- }
- EOF
-
- - name: Publish to GitHub Packages (npm registry)
- run: |
- cd packages/github/packages/macos-packages
-
- # Set up npm registry
- npm config set @aitbc:registry https://npm.pkg.github.com
- npm config set //npm.pkg.github.com/:_authToken=${{ secrets.GITHUB_TOKEN }}
-
- # Publish package
- npm publish
-
- publish-universal-installer:
- runs-on: ubuntu-latest
- needs: [publish-debian-packages, publish-macos-packages]
- permissions:
- contents: read
- packages: write
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
-
- - name: Create universal package manifest
- run: |
- cat > packages/github/packages/package-manifest.json << EOF
- {
- "name": "aitbc-universal-installer",
- "version": "${{ github.ref_name || github.event.inputs.version }}",
- "description": "Universal AITBC package installer for all platforms",
- "platforms": {
- "linux": {
- "packages": [
- "ghcr.io/${{ github.repository }}/aitbc-cli:latest",
- "ghcr.io/${{ github.repository }}/aitbc-node-service:latest",
- "ghcr.io/${{ github.repository }}/aitbc-coordinator-service:latest",
- "ghcr.io/${{ github.repository }}/aitbc-miner-service:latest",
- "ghcr.io/${{ github.repository }}/aitbc-marketplace-service:latest",
- "ghcr.io/${{ github.repository }}/aitbc-explorer-service:latest",
- "ghcr.io/${{ github.repository }}/aitbc-wallet-service:latest",
- "ghcr.io/${{ github.repository }}/aitbc-multimodal-service:latest"
- ],
- "installer": "https://raw.githubusercontent.com/${{ github.repository }}/main/packages/github/install.sh"
- },
- "macos": {
- "packages": [
- "@aitbc/cli-macos:latest"
- ],
- "installer": "https://raw.githubusercontent.com/${{ github.repository }}/main/packages/github/packages/macos-packages/install-macos-complete.sh"
- }
- },
- "checksums": {
- "debian": "$(cat packages/github/packages/debian-packages/checksums.txt)",
- "macos": "$(cat packages/github/packages/macos-packages/checksums.txt)"
- }
- }
- EOF
-
- - name: Publish manifest to GitHub Packages
- run: |
- # Create a simple package for the manifest
- mkdir -p manifest-pkg
- cd manifest-pkg
-
- cat > package.json << EOF
- {
- "name": "@aitbc/manifest",
- "version": "${{ github.ref_name || github.event.inputs.version }}",
- "description": "AITBC Universal Package Manifest",
- "main": "manifest.json",
- "files": [
- "manifest.json"
- ],
- "repository": {
- "type": "git",
- "url": "https://github.com/${{ github.repository }}.git"
- },
- "author": "AITBC Team",
- "license": "MIT",
- "publishConfig": {
- "registry": "https://npm.pkg.github.com"
- }
- }
- EOF
-
- cp ../packages/github/packages/package-manifest.json manifest.json
-
- # Set up npm registry
- npm config set @aitbc:registry https://npm.pkg.github.com
- npm config set //npm.pkg.github.com/:_authToken=${{ secrets.GITHUB_TOKEN }}
-
- # Publish manifest
- npm publish
-
- update-package-index:
- runs-on: ubuntu-latest
- needs: [publish-debian-packages, publish-macos-packages, publish-universal-installer]
- permissions:
- contents: write
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
-
- - name: Update package index
- run: |
- cat > packages/github/packages/PACKAGE_INDEX.md << EOF
- # AITBC Packages Index
-
- ## Published Packages
-
- ### Container Registry (ghcr.io)
-
- #### CLI Package
- - **Package**: \`ghcr.io/${{ github.repository }}/aitbc-cli:latest\`
- - **Platforms**: linux/amd64, linux/arm64
- - **Version**: ${{ github.ref_name || github.event.inputs.version }}
-
- #### Service Packages
- - **Node Service**: \`ghcr.io/${{ github.repository }}/aitbc-node-service:latest\`
- - **Coordinator Service**: \`ghcr.io/${{ github.repository }}/aitbc-coordinator-service:latest\`
- - **Miner Service**: \`ghcr.io/${{ github.repository }}/aitbc-miner-service:latest\`
- - **Marketplace Service**: \`ghcr.io/${{ github.repository }}/aitbc-marketplace-service:latest\`
- - **Explorer Service**: \`ghcr.io/${{ github.repository }}/aitbc-explorer-service:latest\`
- - **Wallet Service**: \`ghcr.io/${{ github.repository }}/aitbc-wallet-service:latest\`
- - **Multimodal Service**: \`ghcr.io/${{ github.repository }}/aitbc-multimodal-service:latest\`
-
- ### NPM Registry (npm.pkg.github.com)
-
- #### macOS Package
- - **Package**: \`@aitbc/cli-macos@${{ github.ref_name || github.event.inputs.version }}\`
- - **Platform**: macOS Apple Silicon
- - **Format**: npm package with .pkg installer
-
- #### Universal Manifest
- - **Package**: \`@aitbc/manifest@${{ github.ref_name || github.event.inputs.version }}\`
- - **Content**: Universal package manifest for all platforms
-
- ## Installation
-
- ### Linux (Docker)
- \`\`\`bash
- docker run --rm -it ghcr.io/${{ github.repository }}/aitbc-cli:latest --help
- \`\`\`
-
- ### macOS (npm)
- \`\`\`bash
- npm install @aitbc/cli-macos@${{ github.ref_name || github.event.inputs.version }}
- \`\`\`
-
- ### Universal Installer
- \`\`\`bash
- curl -fsSL https://raw.githubusercontent.com/${{ github.repository }}/main/packages/github/install.sh | bash
- \`\`\`
-
- ---
- *Last updated: $(date -u +"%Y-%m-%d %H:%M:%S UTC")*
- EOF
-
- - name: Commit and push changes
- run: |
- git config --local user.email "action@github.com"
- git config --local user.name "GitHub Action"
- git add packages/github/packages/PACKAGE_INDEX.md
- git diff --staged --quiet || git commit -m "Update package index for version ${{ github.ref_name || github.event.inputs.version }}"
- git push
-workflow:
- disable: true
diff --git a/.github/workflows/publish-native-packages-simple.yml b/.github/workflows/publish-native-packages-simple.yml
deleted file mode 100644
index c55e6b18..00000000
--- a/.github/workflows/publish-native-packages-simple.yml
+++ /dev/null
@@ -1,213 +0,0 @@
-name: Publish Native Packages
-
-on:
- push:
- tags:
- - 'v*'
- workflow_dispatch:
- inputs:
- version:
- description: 'Version to publish (e.g., 0.1.0)'
- required: true
- default: '0.1.0'
-
-jobs:
- publish-packages:
- runs-on: ubuntu-latest
- permissions:
- contents: write
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
-
- - name: Extract version
- id: version
- run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
-
- - name: Create release notes
- run: |
- cat > release_notes.md << EOF
- # AITBC Native Packages v${{ steps.version.outputs.VERSION || '0.1.0' }}
-
- ## 📦 Available Native Packages
-
- ### 🐧 Linux Packages (Debian/Ubuntu)
- **Format**: .deb packages
-
- **Installation**:
- \`\`\`bash
- # Download and install CLI
- wget https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.VERSION || '0.1.0' }}/aitbc-cli_0.1.0_all.deb
- sudo dpkg -i aitbc-cli_0.1.0_all.deb
-
- # Download and install all services
- wget https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.VERSION || '0.1.0' }}/aitbc-all-services_0.1.0_all.deb
- sudo dpkg -i aitbc-all-services_0.1.0_all.deb
- \`\`\`
-
- **Available Packages**:
- - \`aitbc-cli_0.1.0_all.deb\` - Command Line Interface (~132KB)
- - \`aitbc-node-service_0.1.0_all.deb\` - Blockchain Node (~8KB)
- - \`aitbc-coordinator-service_0.1.0_all.deb\` - Coordinator API (~8KB)
- - \`aitbc-miner-service_0.1.0_all.deb\` - GPU Miner (~8KB)
- - \`aitbc-marketplace-service_0.1.0_all.deb\` - GPU Marketplace (~8KB)
- - \`aitbc-explorer-service_0.1.0_all.deb\` - Block Explorer (~8KB)
- - \`aitbc-wallet-service_0.1.0_all.deb\` - Wallet Service (~8KB)
- - \`aitbc-multimodal-service_0.1.0_all.deb\` - Multimodal AI (~8KB)
- - \`aitbc-all-services_0.1.0_all.deb\` - Complete Stack (~8KB)
-
- ### 🍎 macOS Packages (Apple Silicon)
- **Format**: .pkg packages
-
- **Installation**:
- \`\`\`bash
- # Download and install CLI
- curl -L https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.VERSION || '0.1.0' }}/aitbc-cli-0.1.0-apple-silicon.pkg -o aitbc-cli.pkg
- sudo installer -pkg aitbc-cli.pkg -target /
-
- # Or use universal installer
- curl -L https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.VERSION || '0.1.0' }}/install-macos-complete.sh | bash
- \`\`\`
-
- **Available Packages**:
- - \`aitbc-cli-0.1.0-apple-silicon.pkg\` - Command Line Interface (~4.6KB)
- - \`aitbc-node-service-0.1.0-apple-silicon.pkg\` - Blockchain Node (~2.5KB)
- - \`aitbc-coordinator-service-0.1.0-apple-silicon.pkg\` - Coordinator API (~2.5KB)
- - \`aitbc-miner-service-0.1.0-apple-silicon.pkg\` - GPU Miner (~2.4KB)
- - \`aitbc-marketplace-service-0.1.0-apple-silicon.pkg\` - GPU Marketplace (~2.4KB)
- - \`aitbc-explorer-service-0.1.0-apple-silicon.pkg\` - Block Explorer (~2.4KB)
- - \`aitbc-wallet-service-0.1.0-apple-silicon.pkg\` - Wallet Service (~2.4KB)
- - \`aitbc-multimodal-service-0.1.0-apple-silicon.pkg\` - Multimodal AI (~2.4KB)
- - \`aitbc-all-services-0.1.0-apple-silicon.pkg\` - Complete Stack (~2.4KB)
-
- ## 🔧 Universal Installer
- \`\`\`bash
- # Linux
- curl -fsSL https://raw.githubusercontent.com/${{ github.repository }}/main/packages/github/install.sh | bash
-
- # macOS
- curl -fsSL https://raw.githubusercontent.com/${{ github.repository }}/main/packages/github/install-macos.sh | bash
- \`\`\`
-
- ## ✅ Verification
- All packages include SHA256 checksums for verification.
-
- ## 📚 Documentation
- - [Installation Guide](https://raw.githubusercontent.com/${{ github.repository }}/main/packages/github/README.md)
- - [Package Checksums](https://raw.githubusercontent.com/${{ github.repository }}/main/packages/github/packages/debian-packages/checksums.txt)
-
- ---
- **Platform Support**: Linux (amd64/arm64), macOS (Apple Silicon)
- **Package Formats**: .deb (Debian), .pkg (macOS)
- **Installation Methods**: Direct download, universal installers
- EOF
-
- - name: Create GitHub Release
- if: startsWith(github.ref, 'refs/tags/')
- uses: softprops/action-gh-release@v2
- with:
- name: "AITBC Native Packages v${{ steps.version.outputs.VERSION || '0.1.0' }}"
- body_path: release_notes.md
- draft: false
- prerelease: false
- generate_release_notes: true
- files: |
- packages/github/packages/debian-packages/*.deb
- packages/github/packages/debian-packages/checksums.txt
- packages/github/packages/macos-packages/*.pkg
- packages/github/packages/macos-packages/*.sh
- packages/github/packages/macos-packages/checksums.txt
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Update package documentation
- run: |
- cat > packages/github/NATIVE_PACKAGES_STATUS.md << EOF
- # AITBC Native Packages Status
-
- ## 📦 Published Packages
-
- **Version**: v${{ steps.version.outputs.VERSION || '0.1.0' }}
- **Release Date**: $(date -u +"%Y-%m-%d %H:%M:%S UTC")
- **Release URL**: https://github.com/${{ github.repository }}/releases/tag/v${{ steps.version.outputs.VERSION || '0.1.0' }}
-
- ### 🐧 Linux Packages (Debian/Ubuntu)
-
- | Package | Size | Description | Download |
- |---------|------|-------------|----------|
- | aitbc-cli_0.1.0_all.deb | 132KB | Command Line Interface | [Download](https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.VERSION || '0.1.0' }}/aitbc-cli_0.1.0_all.deb) |
- | aitbc-node-service_0.1.0_all.deb | 8KB | Blockchain Node | [Download](https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.VERSION || '0.1.0' }}/aitbc-node-service_0.1.0_all.deb) |
- | aitbc-coordinator-service_0.1.0_all.deb | 8KB | Coordinator API | [Download](https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.VERSION || '0.1.0' }}/aitbc-coordinator-service_0.1.0_all.deb) |
- | aitbc-miner-service_0.1.0_all.deb | 8KB | GPU Miner | [Download](https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.VERSION || '0.1.0' }}/aitbc-miner-service_0.1.0_all.deb) |
- | aitbc-marketplace-service_0.1.0_all.deb | 8KB | GPU Marketplace | [Download](https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.VERSION || '0.1.0' }}/aitbc-marketplace-service_0.1.0_all.deb) |
- | aitbc-explorer-service_0.1.0_all.deb | 8KB | Block Explorer | [Download](https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.VERSION || '0.1.0' }}/aitbc-explorer-service_0.1.0_all.deb) |
- | aitbc-wallet-service_0.1.0_all.deb | 8KB | Wallet Service | [Download](https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.VERSION || '0.1.0' }}/aitbc-wallet-service_0.1.0_all.deb) |
- | aitbc-multimodal-service_0.1.0_all.deb | 8KB | Multimodal AI | [Download](https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.VERSION || '0.1.0' }}/aitbc-multimodal-service_0.1.0_all.deb) |
- | aitbc-all-services_0.1.0_all.deb | 8KB | Complete Stack | [Download](https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.VERSION || '0.1.0' }}/aitbc-all-services_0.1.0_all.deb) |
-
- ### 🍎 macOS Packages (Apple Silicon)
-
- | Package | Size | Description | Download |
- |---------|------|-------------|----------|
- | aitbc-cli-0.1.0-apple-silicon.pkg | 4.6KB | Command Line Interface | [Download](https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.VERSION || '0.1.0' }}/aitbc-cli-0.1.0-apple-silicon.pkg) |
- | aitbc-node-service-0.1.0-apple-silicon.pkg | 2.5KB | Blockchain Node | [Download](https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.VERSION || '0.1.0' }}/aitbc-node-service-0.1.0-apple-silicon.pkg) |
- | aitbc-coordinator-service-0.1.0-apple-silicon.pkg | 2.5KB | Coordinator API | [Download](https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.VERSION || '0.1.0' }}/aitbc-coordinator-service-0.1.0-apple-silicon.pkg) |
- | aitbc-miner-service-0.1.0-apple-silicon.pkg | 2.4KB | GPU Miner | [Download](https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.VERSION || '0.1.0' }}/aitbc-miner-service-0.1.0-apple-silicon.pkg) |
- | aitbc-marketplace-service-0.1.0-apple-silicon.pkg | 2.4KB | GPU Marketplace | [Download](https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.VERSION || '0.1.0' }}/aitbc-marketplace-service-0.1.0-apple-silicon.pkg) |
- | aitbc-explorer-service-0.1.0-apple-silicon.pkg | 2.4KB | Block Explorer | [Download](https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.VERSION || '0.1.0' }}/aitbc-explorer-service-0.1.0-apple-silicon.pkg) |
- | aitbc-wallet-service-0.1.0-apple-silicon.pkg | 2.4KB | Wallet Service | [Download](https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.VERSION || '0.1.0' }}/aitbc-wallet-service-0.1.0-apple-silicon.pkg) |
- | aitbc-multimodal-service-0.1.0-apple-silicon.pkg | 2.4KB | Multimodal AI | [Download](https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.VERSION || '0.1.0' }}/aitbc-multimodal-service-0.1.0-apple-silicon.pkg) |
- | aitbc-all-services-0.1.0-apple-silicon.pkg | 2.4KB | Complete Stack | [Download](https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.VERSION || '0.1.0' }}/aitbc-all-services-0.1.0-apple-silicon.pkg) |
-
- ## 🔧 Installation Commands
-
- ### Linux
- \`\`\`bash
- # Quick install
- curl -fsSL https://raw.githubusercontent.com/${{ github.repository }}/main/packages/github/install.sh | bash
-
- # Manual install
- wget https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.VERSION || '0.1.0' }}/aitbc-cli_0.1.0_all.deb
- sudo dpkg -i aitbc-cli_0.1.0_all.deb
- \`\`\`
-
- ### macOS
- \`\`\`bash
- # Quick install
- curl -fsSL https://raw.githubusercontent.com/${{ github.repository }}/main/packages/github/install-macos.sh | bash
-
- # Manual install
- curl -L https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.VERSION || '0.1.0' }}/aitbc-cli-0.1.0-apple-silicon.pkg -o aitbc-cli.pkg
- sudo installer -pkg aitbc-cli.pkg -target /
- \`\`\`
-
- ## ✅ Package Status
-
- - ✅ **Built**: All packages built successfully
- - ✅ **Verified**: SHA256 checksums validated
- - ✅ **Published**: Available in GitHub Releases
- - ✅ **Tested**: Installation scripts verified
-
- ## 📊 Package Statistics
-
- - **Total Packages**: 18 (9 Linux + 9 macOS)
- - **Total Size**: ~200KB compressed
- - **Platforms**: Linux (amd64/arm64), macOS (Apple Silicon)
- - **Formats**: .deb, .pkg
- - **Installation Methods**: Direct download, universal installers
-
- ---
- *Last updated: $(date -u +"%Y-%m-%d %H:%M:%S UTC")*
- *View release: https://github.com/${{ github.repository }}/releases/tag/v${{ steps.version.outputs.VERSION || '0.1.0' }}*
- EOF
-
- - name: Commit and push documentation
- run: |
- git config --local user.email "action@github.com"
- git config --local user.name "GitHub Action"
- git add packages/github/NATIVE_PACKAGES_STATUS.md
- git diff --staged --quiet || git commit -m "Update native packages status for v${{ steps.version.outputs.VERSION || '0.1.0' }}"
- git push
-workflow:
- disable: true
diff --git a/.github/workflows/publish-native-packages.yml b/.github/workflows/publish-native-packages.yml
deleted file mode 100644
index ad30b98a..00000000
--- a/.github/workflows/publish-native-packages.yml
+++ /dev/null
@@ -1,568 +0,0 @@
-name: Publish Native Packages to GitHub Packages
-
-on:
- push:
- tags:
- - 'v*'
- workflow_dispatch:
- inputs:
- version:
- description: 'Version to publish (e.g., 0.1.0)'
- required: true
- default: '0.1.0'
-
-jobs:
- publish-debian-packages:
- runs-on: ubuntu-latest
- permissions:
- contents: read
- packages: write
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
-
- - name: Extract version
- id: version
- run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
-
- - name: Set up Python
- uses: actions/setup-python@v4
- with:
- python-version: '3.13'
-
- - name: Install dependencies
- run: |
- python -m pip install --upgrade pip
- pip install build twine
-
- - name: Create Debian package structure
- run: |
- mkdir -p dist/debian
-
- # Copy existing packages
- cp packages/github/packages/debian-packages/*.deb dist/debian/
-
- # Create setup.py for Debian packages
- cat > dist/debian/setup.py << 'EOF'
- from setuptools import setup, find_packages
-
- setup(
- name="aitbc-debian-packages",
- version="0.1.0",
- description="AITBC Debian packages for Linux",
- packages=[],
- package_data={
- '': ['*.deb', 'checksums.txt']
- },
- include_package_data=True,
- )
- EOF
-
- - name: Build Python package for Debian
- run: |
- cd dist/debian
- python -m build
-
- - name: Publish Debian packages to GitHub Packages
- run: |
- cd dist/debian
- python -m twine upload --repository-url https://npm.pkg.github.com/:_authToken=${{ secrets.GITHUB_TOKEN }} dist/*
- env:
- TWINE_USERNAME: ${{ github.actor }}
- TWINE_PASSWORD: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Create Debian package metadata
- run: |
- cd packages/github/packages/debian-packages
-
- # Create package manifest
- cat > manifest.json << EOF
- {
- "name": "aitbc-debian-packages",
- "version": "${{ steps.version.outputs.VERSION || '0.1.0' }}",
- "description": "AITBC Debian packages for Linux distributions",
- "platform": "linux",
- "architecture": ["amd64", "arm64"],
- "format": "deb",
- "packages": [
- {
- "name": "aitbc-cli",
- "file": "aitbc-cli_0.1.0_all.deb",
- "description": "AITBC Command Line Interface",
- "size": "$(stat -c%s aitbc-cli_0.1.0_all.deb)",
- "checksum": "$(sha256sum aitbc-cli_0.1.0_all.deb | cut -d' ' -f1)"
- },
- {
- "name": "aitbc-node-service",
- "file": "aitbc-node-service_0.1.0_all.deb",
- "description": "AITBC Blockchain Node Service",
- "size": "$(stat -c%s aitbc-node-service_0.1.0_all.deb)",
- "checksum": "$(sha256sum aitbc-node-service_0.1.0_all.deb | cut -d' ' -f1)"
- },
- {
- "name": "aitbc-coordinator-service",
- "file": "aitbc-coordinator-service_0.1.0_all.deb",
- "description": "AITBC Coordinator API Service",
- "size": "$(stat -c%s aitbc-coordinator-service_0.1.0_all.deb)",
- "checksum": "$(sha256sum aitbc-coordinator-service_0.1.0_all.deb | cut -d' ' -f1)"
- },
- {
- "name": "aitbc-miner-service",
- "file": "aitbc-miner-service_0.1.0_all.deb",
- "description": "AITBC GPU Miner Service",
- "size": "$(stat -c%s aitbc-miner-service_0.1.0_all.deb)",
- "checksum": "$(sha256sum aitbc-miner-service_0.1.0_all.deb | cut -d' ' -f1)"
- },
- {
- "name": "aitbc-marketplace-service",
- "file": "aitbc-marketplace-service_0.1.0_all.deb",
- "description": "AITBC GPU Marketplace Service",
- "size": "$(stat -c%s aitbc-marketplace-service_0.1.0_all.deb)",
- "checksum": "$(sha256sum aitbc-marketplace-service_0.1.0_all.deb | cut -d' ' -f1)"
- },
- {
- "name": "aitbc-explorer-service",
- "file": "aitbc-explorer-service_0.1.0_all.deb",
- "description": "AITBC Block Explorer Service",
- "size": "$(stat -c%s aitbc-explorer-service_0.1.0_all.deb)",
- "checksum": "$(sha256sum aitbc-explorer-service_0.1.0_all.deb | cut -d' ' -f1)"
- },
- {
- "name": "aitbc-wallet-service",
- "file": "aitbc-wallet-service_0.1.0_all.deb",
- "description": "AITBC Wallet Service",
- "size": "$(stat -c%s aitbc-wallet-service_0.1.0_all.deb)",
- "checksum": "$(sha256sum aitbc-wallet-service_0.1.0_all.deb | cut -d' ' -f1)"
- },
- {
- "name": "aitbc-multimodal-service",
- "file": "aitbc-multimodal-service_0.1.0_all.deb",
- "description": "AITBC Multimodal AI Service",
- "size": "$(stat -c%s aitbc-multimodal-service_0.1.0_all.deb)",
- "checksum": "$(sha256sum aitbc-multimodal-service_0.1.0_all.deb | cut -d' ' -f1)"
- },
- {
- "name": "aitbc-all-services",
- "file": "aitbc-all-services_0.1.0_all.deb",
- "description": "AITBC Complete Service Stack",
- "size": "$(stat -c%s aitbc-all-services_0.1.0_all.deb)",
- "checksum": "$(sha256sum aitbc-all-services_0.1.0_all.deb | cut -d' ' -f1)"
- }
- ],
- "installation": {
- "cli": "sudo dpkg -i aitbc-cli_0.1.0_all.deb",
- "services": "sudo dpkg -i aitbc-*-service_0.1.0_all.deb",
- "complete": "sudo dpkg -i aitbc-all-services_0.1.0_all.deb"
- },
- "repository": "https://github.com/${{ github.repository }}",
- "documentation": "https://raw.githubusercontent.com/${{ github.repository }}/main/packages/github/packages/debian-packages/checksums.txt"
- }
- EOF
-
- - name: Upload Debian packages as release assets
- uses: softprops/action-gh-release@v2
- if: startsWith(github.ref, 'refs/tags/')
- with:
- files: |
- packages/github/packages/debian-packages/*.deb
- packages/github/packages/debian-packages/manifest.json
- packages/github/packages/debian-packages/checksums.txt
- draft: false
- prerelease: false
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- publish-macos-packages:
- runs-on: macos-latest
- permissions:
- contents: read
- packages: write
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
-
- - name: Extract version
- id: version
- run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
-
- - name: Set up Python
- uses: actions/setup-python@v4
- with:
- python-version: '3.13'
-
- - name: Install dependencies
- run: |
- python -m pip install --upgrade pip
- pip install build twine
-
- - name: Create macOS package structure
- run: |
- mkdir -p dist/macos
-
- # Copy existing packages
- cp packages/github/packages/macos-packages/*.pkg dist/macos/
- cp packages/github/packages/macos-packages/*.sh dist/macos/
- cp packages/github/packages/macos-packages/checksums.txt dist/macos/
-
- # Create setup.py for macOS packages
- cat > dist/macos/setup.py << 'EOF'
- from setuptools import setup, find_packages
-
- setup(
- name="aitbc-macos-packages",
- version="0.1.0",
- description="AITBC macOS packages for Apple Silicon",
- packages=[],
- package_data={
- '': ['*.pkg', '*.sh', 'checksums.txt']
- },
- include_package_data=True,
- )
- EOF
-
- - name: Build Python package for macOS
- run: |
- cd dist/macos
- python -m build
-
- - name: Publish macOS packages to GitHub Packages
- run: |
- cd dist/macos
- python -m twine upload --repository-url https://npm.pkg.github.com/:_authToken=${{ secrets.GITHUB_TOKEN }} dist/*
- env:
- TWINE_USERNAME: ${{ github.actor }}
- TWINE_PASSWORD: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Create macOS package metadata
- run: |
- cd packages/github/packages/macos-packages
-
- # Create package manifest
- cat > manifest.json << EOF
- {
- "name": "aitbc-macos-packages",
- "version": "${{ steps.version.outputs.VERSION || '0.1.0' }}",
- "description": "AITBC macOS packages for Apple Silicon",
- "platform": "macos",
- "architecture": "arm64",
- "format": "pkg",
- "packages": [
- {
- "name": "aitbc-cli",
- "file": "aitbc-cli-0.1.0-apple-silicon.pkg",
- "description": "AITBC Command Line Interface for macOS",
- "size": "$(stat -f%z aitbc-cli-0.1.0-apple-silicon.pkg)",
- "checksum": "$(shasum -a 256 aitbc-cli-0.1.0-apple-silicon.pkg | cut -d' ' -f1)"
- },
- {
- "name": "aitbc-node-service",
- "file": "aitbc-node-service-0.1.0-apple-silicon.pkg",
- "description": "AITBC Blockchain Node Service for macOS",
- "size": "$(stat -f%z aitbc-node-service-0.1.0-apple-silicon.pkg)",
- "checksum": "$(shasum -a 256 aitbc-node-service-0.1.0-apple-silicon.pkg | cut -d' ' -f1)"
- },
- {
- "name": "aitbc-coordinator-service",
- "file": "aitbc-coordinator-service-0.1.0-apple-silicon.pkg",
- "description": "AITBC Coordinator API Service for macOS",
- "size": "$(stat -f%z aitbc-coordinator-service-0.1.0-apple-silicon.pkg)",
- "checksum": "$(shasum -a 256 aitbc-coordinator-service-0.1.0-apple-silicon.pkg | cut -d' ' -f1)"
- },
- {
- "name": "aitbc-miner-service",
- "file": "aitbc-miner-service-0.1.0-apple-silicon.pkg",
- "description": "AITBC GPU Miner Service for macOS",
- "size": "$(stat -f%z aitbc-miner-service-0.1.0-apple-silicon.pkg)",
- "checksum": "$(shasum -a 256 aitbc-miner-service-0.1.0-apple-silicon.pkg | cut -d' ' -f1)"
- },
- {
- "name": "aitbc-marketplace-service",
- "file": "aitbc-marketplace-service-0.1.0-apple-silicon.pkg",
- "description": "AITBC GPU Marketplace Service for macOS",
- "size": "$(stat -f%z aitbc-marketplace-service-0.1.0-apple-silicon.pkg)",
- "checksum": "$(shasum -a 256 aitbc-marketplace-service-0.1.0-apple-silicon.pkg | cut -d' ' -f1)"
- },
- {
- "name": "aitbc-explorer-service",
- "file": "aitbc-explorer-service-0.1.0-apple-silicon.pkg",
- "description": "AITBC Block Explorer Service for macOS",
- "size": "$(stat -f%z aitbc-explorer-service-0.1.0-apple-silicon.pkg)",
- "checksum": "$(shasum -a 256 aitbc-explorer-service-0.1.0-apple-silicon.pkg | cut -d' ' -f1)"
- },
- {
- "name": "aitbc-wallet-service",
- "file": "aitbc-wallet-service-0.1.0-apple-silicon.pkg",
- "description": "AITBC Wallet Service for macOS",
- "size": "$(stat -f%z aitbc-wallet-service-0.1.0-apple-silicon.pkg)",
- "checksum": "$(shasum -a 256 aitbc-wallet-service-0.1.0-apple-silicon.pkg | cut -d' ' -f1)"
- },
- {
- "name": "aitbc-multimodal-service",
- "file": "aitbc-multimodal-service-0.1.0-apple-silicon.pkg",
- "description": "AITBC Multimodal AI Service for macOS",
- "size": "$(stat -f%z aitbc-multimodal-service-0.1.0-apple-silicon.pkg)",
- "checksum": "$(shasum -a 256 aitbc-multimodal-service-0.1.0-apple-silicon.pkg | cut -d' ' -f1)"
- },
- {
- "name": "aitbc-all-services",
- "file": "aitbc-all-services-0.1.0-apple-silicon.pkg",
- "description": "AITBC Complete Service Stack for macOS",
- "size": "$(stat -f%z aitbc-all-services-0.1.0-apple-silicon.pkg)",
- "checksum": "$(shasum -a 256 aitbc-all-services-0.1.0-apple-silicon.pkg | cut -d' ' -f1)"
- }
- ],
- "installers": {
- "cli": "install-macos-complete.sh",
- "services": "install-macos-services.sh",
- "silicon": "install-macos-apple-silicon.sh"
- },
- "installation": {
- "cli": "sudo installer -pkg aitbc-cli-0.1.0-apple-silicon.pkg -target /",
- "services": "bash install-macos-services.sh",
- "complete": "bash install-macos-complete.sh"
- },
- "repository": "https://github.com/${{ github.repository }}",
- "documentation": "https://raw.githubusercontent.com/${{ github.repository }}/main/packages/github/packages/macos-packages/checksums.txt"
- }
- EOF
-
- - name: Upload macOS packages as release assets
- uses: softprops/action-gh-release@v2
- if: startsWith(github.ref, 'refs/tags/')
- with:
- files: |
- packages/github/packages/macos-packages/*.pkg
- packages/github/packages/macos-packages/*.sh
- packages/github/packages/macos-packages/manifest.json
- packages/github/packages/macos-packages/checksums.txt
- draft: false
- prerelease: false
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- create-universal-release:
- runs-on: ubuntu-latest
- needs: [publish-debian-packages, publish-macos-packages]
- permissions:
- contents: write
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
-
- - name: Extract version
- id: version
- run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
-
- - name: Create universal release notes
- run: |
- cat > release_notes.md << EOF
- # AITBC Native Packages v${{ steps.version.outputs.VERSION || '0.1.0' }}
-
- ## 📦 Available Packages
-
- ### 🐧 Linux (Debian/Ubuntu)
- **Format**: .deb packages
-
- **Installation**:
- \`\`\`bash
- # Download and install CLI
- wget https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.VERSION || '0.1.0' }}/aitbc-cli_0.1.0_all.deb
- sudo dpkg -i aitbc-cli_0.1.0_all.deb
-
- # Download and install all services
- wget https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.VERSION || '0.1.0' }}/aitbc-all-services_0.1.0_all.deb
- sudo dpkg -i aitbc-all-services_0.1.0_all.deb
- \`\`\`
-
- **Available Packages**:
- - \`aitbc-cli_0.1.0_all.deb\` - Command Line Interface
- - \`aitbc-node-service_0.1.0_all.deb\` - Blockchain Node
- - \`aitbc-coordinator-service_0.1.0_all.deb\` - Coordinator API
- - \`aitbc-miner-service_0.1.0_all.deb\` - GPU Miner
- - \`aitbc-marketplace-service_0.1.0_all.deb\` - GPU Marketplace
- - \`aitbc-explorer-service_0.1.0_all.deb\` - Block Explorer
- - \`aitbc-wallet-service_0.1.0_all.deb\` - Wallet Service
- - \`aitbc-multimodal-service_0.1.0_all.deb\` - Multimodal AI
- - \`aitbc-all-services_0.1.0_all.deb\` - Complete Stack
-
- ### 🍎 macOS (Apple Silicon)
- **Format**: .pkg packages
-
- **Installation**:
- \`\`\`bash
- # Download and install CLI
- curl -L https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.VERSION || '0.1.0' }}/install-macos-complete.sh | bash
-
- # Or download individual package
- curl -L https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.VERSION || '0.1.0' }}/aitbc-cli-0.1.0-apple-silicon.pkg -o aitbc-cli.pkg
- sudo installer -pkg aitbc-cli.pkg -target /
- \`\`\`
-
- **Available Packages**:
- - \`aitbc-cli-0.1.0-apple-silicon.pkg\` - Command Line Interface
- - \`aitbc-node-service-0.1.0-apple-silicon.pkg\` - Blockchain Node
- - \`aitbc-coordinator-service-0.1.0-apple-silicon.pkg\` - Coordinator API
- - \`aitbc-miner-service-0.1.0-apple-silicon.pkg\` - GPU Miner
- - \`aitbc-marketplace-service-0.1.0-apple-silicon.pkg\` - GPU Marketplace
- - \`aitbc-explorer-service-0.1.0-apple-silicon.pkg\` - Block Explorer
- - \`aitbc-wallet-service-0.1.0-apple-silicon.pkg\` - Wallet Service
- - \`aitbc-multimodal-service-0.1.0-apple-silicon.pkg\` - Multimodal AI
- - \`aitbc-all-services-0.1.0-apple-silicon.pkg\` - Complete Stack
-
- ## 🔧 Universal Installer
- \`\`\`bash
- # Linux
- curl -fsSL https://raw.githubusercontent.com/${{ github.repository }}/main/packages/github/install.sh | bash
-
- # macOS
- curl -fsSL https://raw.githubusercontent.com/${{ github.repository }}/main/packages/github/install-macos.sh | bash
- \`\`\`
-
- ## ✅ Verification
- All packages are cryptographically verified with SHA256 checksums.
-
- ## 📚 Documentation
- - [Installation Guide](https://raw.githubusercontent.com/${{ github.repository }}/main/packages/github/README.md)
- - [Package Manifests](https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.VERSION || '0.1.0' }}/manifest.json)
-
- ---
- **Platform Support**: Linux (amd64/arm64), macOS (Apple Silicon)
- **Package Formats**: .deb (Debian), .pkg (macOS)
- **Installation Methods**: Direct download, universal installers
- EOF
-
- - name: Update GitHub Release
- if: startsWith(github.ref, 'refs/tags/')
- uses: softprops/action-gh-release@v2
- with:
- body_path: release_notes.md
- draft: false
- prerelease: false
- generate_release_notes: true
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- update-package-index:
- runs-on: ubuntu-latest
- needs: [publish-debian-packages, publish-macos-packages, create-universal-release]
- permissions:
- contents: write
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
-
- - name: Extract version
- id: version
- run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
-
- - name: Update package index
- run: |
- cat > packages/github/NATIVE_PACKAGES_GUIDE.md << EOF
- # AITBC Native Packages Guide
-
- ## 📦 Available Native Packages
-
- Your AITBC native packages are published as GitHub Releases and available at:
- https://github.com/${{ github.repository }}/releases
-
- ## 🐧 Linux Packages (Debian/Ubuntu)
-
- ### Installation
- \`\`\`bash
- # Method 1: Direct download
- wget https://github.com/${{ github.repository }}/releases/download/v0.1.0/aitbc-cli_0.1.0_all.deb
- sudo dpkg -i aitbc-cli_0.1.0_all.deb
-
- # Method 2: Universal installer
- curl -fsSL https://raw.githubusercontent.com/${{ github.repository }}/main/packages/github/install.sh | bash
- \`\`\`
-
- ### Available Packages
- | Package | Size | Description |
- |---------|------|-------------|
- | aitbc-cli_0.1.0_all.deb | ~132KB | Command Line Interface |
- | aitbc-node-service_0.1.0_all.deb | ~8KB | Blockchain Node |
- | aitbc-coordinator-service_0.1.0_all.deb | ~8KB | Coordinator API |
- | aitbc-miner-service_0.1.0_all.deb | ~8KB | GPU Miner |
- | aitbc-marketplace-service_0.1.0_all.deb | ~8KB | GPU Marketplace |
- | aitbc-explorer-service_0.1.0_all.deb | ~8KB | Block Explorer |
- | aitbc-wallet-service_0.1.0_all.deb | ~8KB | Wallet Service |
- | aitbc-multimodal-service_0.1.0_all.deb | ~8KB | Multimodal AI |
- | aitbc-all-services_0.1.0_all.deb | ~8KB | Complete Stack |
-
- ## 🍎 macOS Packages (Apple Silicon)
-
- ### Installation
- \`\`\`bash
- # Method 1: Direct download
- curl -L https://github.com/${{ github.repository }}/releases/download/v0.1.0/aitbc-cli-0.1.0-apple-silicon.pkg -o aitbc-cli.pkg
- sudo installer -pkg aitbc-cli.pkg -target /
-
- # Method 2: Universal installer
- curl -fsSL https://raw.githubusercontent.com/${{ github.repository }}/main/packages/github/install-macos.sh | bash
- \`\`\`
-
- ### Available Packages
- | Package | Size | Description |
- |---------|------|-------------|
- | aitbc-cli-0.1.0-apple-silicon.pkg | ~4.6KB | Command Line Interface |
- | aitbc-node-service-0.1.0-apple-silicon.pkg | ~2.5KB | Blockchain Node |
- | aitbc-coordinator-service-0.1.0-apple-silicon.pkg | ~2.5KB | Coordinator API |
- | aitbc-miner-service-0.1.0-apple-silicon.pkg | ~2.4KB | GPU Miner |
- | aitbc-marketplace-service-0.1.0-apple-silicon.pkg | ~2.4KB | GPU Marketplace |
- | aitbc-explorer-service-0.1.0-apple-silicon.pkg | ~2.4KB | Block Explorer |
- | aitbc-wallet-service-0.1.0-apple-silicon.pkg | ~2.4KB | Wallet Service |
- | aitbc-multimodal-service-0.1.0-apple-silicon.pkg | ~2.4KB | Multimodal AI |
- | aitbc-all-services-0.1.0-apple-silicon.pkg | ~2.4KB | Complete Stack |
-
- ## 🔧 Package Verification
-
- All packages include SHA256 checksums for verification:
-
- \`\`\`bash
- # Verify Debian packages
- sha256sum -c checksums.txt
-
- # Verify macOS packages
- shasum -a 256 -c checksums.txt
- \`\`\`
-
- ## 📋 Package Status
-
- - ✅ **Built**: All packages built and tested
- - ✅ **Verified**: Checksums validated
- - ✅ **Published**: Available in GitHub Releases
- - ✅ **Documented**: Installation guides available
-
- ## 🚀 Quick Start
-
- ### Linux
- \`\`\`bash
- curl -fsSL https://raw.githubusercontent.com/${{ github.repository }}/main/packages/github/install.sh | bash
- aitbc --version
- \`\`\`
-
- ### macOS
- \`\`\`bash
- curl -fsSL https://raw.githubusercontent.com/${{ github.repository }}/main/packages/github/install-macos.sh | bash
- aitbc --version
- \`\`\`
-
- ---
- *Last updated: $(date -u +"%Y-%m-%d %H:%M:%S UTC")*
- *View releases: https://github.com/${{ github.repository }}/releases*
- EOF
-
- - name: Commit and push changes
- run: |
- git config --local user.email "action@github.com"
- git config --local user.name "GitHub Action"
- git add packages/github/NATIVE_PACKAGES_GUIDE.md
- git diff --staged --quiet || git commit -m "Add native packages guide for version ${{ steps.version.outputs.VERSION || '0.1.0' }}"
- git push
-workflow:
- disable: true
diff --git a/.github/workflows/publish-npm-packages.yml b/.github/workflows/publish-npm-packages.yml
deleted file mode 100644
index 5548aeea..00000000
--- a/.github/workflows/publish-npm-packages.yml
+++ /dev/null
@@ -1,71 +0,0 @@
-name: Publish NPM Packages
-
-on:
- push:
- tags:
- - 'v*'
- workflow_dispatch:
- inputs:
- package:
- description: 'Package to publish (aitbc-sdk or all)'
- required: true
- default: 'aitbc-sdk'
- dry_run:
- description: 'Dry run (build only, no publish)'
- required: false
- default: false
- type: boolean
-
-jobs:
- publish:
- runs-on: ubuntu-latest
- permissions:
- contents: read
- id-token: write # IMPORTANT: this permission is mandatory for trusted publishing
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- with:
- fetch-depth: 0
-
- - name: Set up Node.js
- uses: actions/setup-node@v4
- with:
- node-version: '20'
- registry-url: 'https://registry.npmjs.org'
-
- - name: Install dependencies
- run: |
- cd packages/js/aitbc-sdk
- npm ci
-
- - name: Run tests
- run: |
- cd packages/js/aitbc-sdk
- npm test
-
- - name: Build package
- run: |
- cd packages/js/aitbc-sdk
- npm run build
-
- - name: Check package
- run: |
- cd packages/js/aitbc-sdk
- npm pack --dry-run
-
- - name: Publish to NPM
- if: ${{ github.event.inputs.dry_run != 'true' }}
- run: |
- cd packages/js/aitbc-sdk
- npm publish --access public --provenance
-
- - name: Dry run - check only
- if: ${{ github.event.inputs.dry_run == 'true' }}
- run: |
- cd packages/js/aitbc-sdk
- echo "Dry run complete - package built and checked but not published"
- npm pack --dry-run
-workflow:
- disable: true
diff --git a/.github/workflows/publish-packages-to-registry.yml b/.github/workflows/publish-packages-to-registry.yml
deleted file mode 100644
index 239cee4c..00000000
--- a/.github/workflows/publish-packages-to-registry.yml
+++ /dev/null
@@ -1,461 +0,0 @@
-name: Publish Packages to GitHub Packages Registry
-
-on:
- push:
- tags:
- - 'v*'
- workflow_dispatch:
- inputs:
- publish_debian:
- description: 'Publish Debian packages to Container Registry'
- required: false
- default: 'true'
- publish_macos:
- description: 'Publish macOS packages to NPM registry'
- required: false
- default: 'true'
-
-jobs:
- publish-debian-containers:
- runs-on: ubuntu-latest
- if: github.event.inputs.publish_debian != 'false'
- permissions:
- contents: read
- packages: write
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
-
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v3
-
- - name: Login to GitHub Container Registry
- uses: docker/login-action@v3
- with:
- registry: ghcr.io
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Extract version
- id: version
- run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
-
- - name: Publish CLI package
- run: |
- cd packages/github/packages/debian-packages
-
- # Create CLI Dockerfile
- cat > Dockerfile.cli << 'EOF'
- FROM debian:trixie-slim
- LABEL maintainer="AITBC Team"
- LABEL version="0.1.0"
- LABEL description="AITBC CLI package"
-
- # Install dependencies
- RUN apt-get update && apt-get install -y \
- python3.13 \
- python3-pip \
- python3-venv \
- curl \
- && rm -rf /var/lib/apt/lists/*
-
- # Copy and install CLI package
- COPY aitbc-cli_0.1.0_all.deb /tmp/
- RUN dpkg -i /tmp/aitbc-cli_0.1.0_all.deb || true && \
- apt-get install -f -y && \
- rm /tmp/aitbc-cli_0.1.0_all.deb
-
- # Create symlink for easier access
- RUN ln -sf /usr/bin/aitbc /usr/local/bin/aitbc
-
- ENTRYPOINT ["/usr/bin/aitbc"]
- CMD ["--help"]
- EOF
-
- # Build and push CLI image
- docker buildx build \
- -f Dockerfile.cli \
- --platform linux/amd64,linux/arm64 \
- --tag ghcr.io/${{ github.repository }}/aitbc-cli:${{ steps.version.outputs.VERSION || '0.1.0' }} \
- --tag ghcr.io/${{ github.repository }}/aitbc-cli:latest \
- --push \
- .
-
- - name: Publish service packages
- run: |
- cd packages/github/packages/debian-packages
-
- # Service packages
- services=("node" "coordinator" "miner" "marketplace" "explorer" "wallet" "multimodal" "all-services")
-
- for service in "${services[@]}"; do
- package_file="aitbc-${service}-service_0.1.0_all.deb"
-
- if [[ -f "$package_file" ]]; then
- echo "Publishing $service service..."
-
- # Create service Dockerfile
- cat > Dockerfile.service << EOF
- FROM debian:trixie-slim
- LABEL maintainer="AITBC Team"
- LABEL version="0.1.0"
- LABEL description="AITBC ${service} service"
- LABEL service="${service}"
-
- # Install dependencies
- RUN apt-get update && apt-get install -y \
- python3.13 \
- python3-pip \
- systemd \
- && rm -rf /var/lib/apt/lists/*
-
- # Copy and install service package
- COPY ${package_file} /tmp/
- RUN dpkg -i /tmp/${package_file} || true && \
- apt-get install -f -y && \
- rm /tmp/${package_file}
-
- # Expose service port (if applicable)
- EOF
-
- # Add service-specific port exposures
- case $service in
- "node")
- echo "EXPOSE 8082" >> Dockerfile.service
- echo "CMD [\"systemctl\", \"start\", \"aitbc-node\"]" >> Dockerfile.service
- ;;
- "coordinator")
- echo "EXPOSE 8000" >> Dockerfile.service
- echo "CMD [\"systemctl\", \"start\", \"aitbc-coordinator\"]" >> Dockerfile.service
- ;;
- "marketplace")
- echo "EXPOSE 3000" >> Dockerfile.service
- echo "CMD [\"systemctl\", \"start\", \"aitbc-marketplace\"]" >> Dockerfile.service
- ;;
- "explorer")
- echo "EXPOSE 3001" >> Dockerfile.service
- echo "CMD [\"systemctl\", \"start\", \"aitbc-explorer\"]" >> Dockerfile.service
- ;;
- *)
- echo "CMD [\"systemctl\", \"start\", \"aitbc-${service}\"]" >> Dockerfile.service
- ;;
- esac
-
- # Build and push service image
- docker buildx build \
- -f Dockerfile.service \
- --platform linux/amd64,linux/arm64 \
- --tag ghcr.io/${{ github.repository }}/aitbc-${service}-service:${{ steps.version.outputs.VERSION || '0.1.0' }} \
- --tag ghcr.io/${{ github.repository }}/aitbc-${service}-service:latest \
- --push \
- .
- else
- echo "Warning: $package_file not found, skipping $service service"
- fi
- done
-
- publish-macos-packages:
- runs-on: ubuntu-latest
- if: github.event.inputs.publish_macos != 'false'
- permissions:
- contents: read
- packages: write
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
-
- - name: Extract version
- id: version
- run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
-
- - name: Set up Node.js
- uses: actions/setup-node@v4
- with:
- node-version: '20'
- registry-url: 'https://npm.pkg.github.com'
-
- - name: Create macOS package
- run: |
- cd packages/github/packages/macos-packages
-
- # Create package.json for macOS CLI
- cat > package.json << EOF
- {
- "name": "@aitbc/cli-macos",
- "version": "${{ steps.version.outputs.VERSION || '0.1.0' }}",
- "description": "AITBC CLI for macOS Apple Silicon",
- "main": "aitbc-cli-0.1.0-apple-silicon.pkg",
- "files": [
- "aitbc-cli-0.1.0-apple-silicon.pkg",
- "install-macos-complete.sh",
- "install-macos-apple-silicon.sh"
- ],
- "scripts": {
- "install": "bash install-macos-complete.sh",
- "install-silicon": "bash install-macos-apple-silicon.sh"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/${{ github.repository }}.git"
- },
- "author": "AITBC Team",
- "license": "MIT",
- "keywords": ["aitbc", "cli", "macos", "apple-silicon", "blockchain"],
- "engines": {
- "node": ">=16"
- },
- "publishConfig": {
- "registry": "https://npm.pkg.github.com"
- }
- }
- EOF
-
- - name: Publish to GitHub Packages
- run: |
- cd packages/github/packages/macos-packages
- npm publish
- env:
- NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Create macOS services package
- run: |
- cd packages/github/packages/macos-packages
-
- # Create package.json for macOS services
- cat > package-services.json << EOF
- {
- "name": "@aitbc/services-macos",
- "version": "${{ steps.version.outputs.VERSION || '0.1.0' }}",
- "description": "AITBC Services for macOS Apple Silicon",
- "main": "install-macos-services.sh",
- "files": [
- "aitbc-*-service-0.1.0-apple-silicon.pkg",
- "install-macos-services.sh"
- ],
- "scripts": {
- "install": "bash install-macos-services.sh"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/${{ github.repository }}.git"
- },
- "author": "AITBC Team",
- "license": "MIT",
- "keywords": ["aitbc", "services", "macos", "apple-silicon", "blockchain"],
- "engines": {
- "node": ">=16"
- },
- "publishConfig": {
- "registry": "https://npm.pkg.github.com"
- }
- }
- EOF
-
- - name: Publish services to GitHub Packages
- run: |
- cd packages/github/packages/macos-packages
- cp package-services.json package.json
- npm publish
- env:
- NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- create-package-release:
- runs-on: ubuntu-latest
- needs: [publish-debian-containers, publish-macos-packages]
- permissions:
- contents: write
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
-
- - name: Extract version
- id: version
- run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
-
- - name: Create release notes
- run: |
- cat > release_notes.md << EOF
- # AITBC Packages v${{ steps.version.outputs.VERSION || '0.1.0' }}
-
- ## 📦 Published Packages
-
- ### Container Registry (ghcr.io)
-
- #### CLI Package
- - **Image**: \`ghcr.io/${{ github.repository }}/aitbc-cli:latest\`
- - **Platforms**: linux/amd64, linux/arm64
- - **Pull**: \`docker pull ghcr.io/${{ github.repository }}/aitbc-cli:latest\`
-
- #### Service Packages
- - **Node Service**: \`ghcr.io/${{ github.repository }}/aitbc-node-service:latest\`
- - **Coordinator Service**: \`ghcr.io/${{ github.repository }}/aitbc-coordinator-service:latest\`
- - **Miner Service**: \`ghcr.io/${{ github.repository }}/aitbc-miner-service:latest\`
- - **Marketplace Service**: \`ghcr.io/${{ github.repository }}/aitbc-marketplace-service:latest\`
- - **Explorer Service**: \`ghcr.io/${{ github.repository }}/aitbc-explorer-service:latest\`
- - **Wallet Service**: \`ghcr.io/${{ github.repository }}/aitbc-wallet-service:latest\`
- - **Multimodal Service**: \`ghcr.io/${{ github.repository }}/aitbc-multimodal-service:latest\`
- - **All Services**: \`ghcr.io/${{ github.repository }}/aitbc-all-services:latest\`
-
- ### NPM Registry (npm.pkg.github.com)
-
- #### macOS CLI Package
- - **Package**: \`@aitbc/cli-macos@${{ steps.version.outputs.VERSION || '0.1.0' }}\`
- - **Install**: \`npm install @aitbc/cli-macos@${{ steps.version.outputs.VERSION || '0.1.0' }}\`
-
- #### macOS Services Package
- - **Package**: \`@aitbc/services-macos@${{ steps.version.outputs.VERSION || '0.1.0' }}\`
- - **Install**: \`npm install @aitbc/services-macos@${{ steps.version.outputs.VERSION || '0.1.0' }}\`
-
- ## 🚀 Installation
-
- ### Linux (Docker)
- \`\`\`bash
- # CLI only
- docker run --rm -it ghcr.io/${{ github.repository }}/aitbc-cli:latest --help
-
- # Full stack
- docker-compose -f https://raw.githubusercontent.com/${{ github.repository }}/main/docker-compose.yml up
- \`\`\`
-
- ### macOS (NPM)
- \`\`\`bash
- # CLI only
- npm install @aitbc/cli-macos@${{ steps.version.outputs.VERSION || '0.1.0' }}
- npx @aitbc/cli-macos install
-
- # Services
- npm install @aitbc/services-macos@${{ steps.version.outputs.VERSION || '0.1.0' }}
- npx @aitbc/services-macos install
- \`\`\`
-
- ### Universal Installer
- \`\`\`bash
- curl -fsSL https://raw.githubusercontent.com/${{ github.repository }}/main/packages/github/install.sh | bash
- \`\`\`
-
- ---
- *View all packages at: https://github.com/${{ github.repository }}/packages*
- EOF
-
- - name: Create GitHub Release
- if: startsWith(github.ref, 'refs/tags/')
- uses: softprops/action-gh-release@v2
- with:
- body_path: release_notes.md
- draft: false
- prerelease: false
- generate_release_notes: true
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- update-package-index:
- runs-on: ubuntu-latest
- needs: [publish-debian-containers, publish-macos-packages]
- permissions:
- contents: write
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
-
- - name: Update package index
- run: |
- cat > packages/github/PACKAGES_REGISTRY_GUIDE.md << EOF
- # AITBC GitHub Packages Registry Guide
-
- ## 📦 Available Packages
-
- Your AITBC packages are now published to GitHub Packages registry and available at:
- https://github.com/${{ github.repository }}/packages
-
- ## 🐳 Container Registry (ghcr.io)
-
- ### CLI Package
- \`\`\`bash
- docker pull ghcr.io/${{ github.repository }}/aitbc-cli:latest
- docker run --rm -it ghcr.io/${{ github.repository }}/aitbc-cli:latest --help
- \`\`\`
-
- ### Service Packages
- \`\`\`bash
- # Individual services
- docker pull ghcr.io/${{ github.repository }}/aitbc-node-service:latest
- docker pull ghcr.io/${{ github.repository }}/aitbc-coordinator-service:latest
- docker pull ghcr.io/${{ github.repository }}/aitbc-miner-service:latest
- docker pull ghcr.io/${{ github.repository }}/aitbc-marketplace-service:latest
- docker pull ghcr.io/${{ github.repository }}/aitbc-explorer-service:latest
- docker pull ghcr.io/${{ github.repository }}/aitbc-wallet-service:latest
- docker pull ghcr.io/${{ github.repository }}/aitbc-multimodal-service:latest
- docker pull ghcr.io/${{ github.repository }}/aitbc-all-services:latest
- \`\`\`
-
- ## 📦 NPM Registry (npm.pkg.github.com)
-
- ### macOS Packages
- \`\`\`bash
- # Set up GitHub Packages registry
- npm config set @aitbc:registry https://npm.pkg.github.com
- npm config set //npm.pkg.github.com/:_authToken=YOUR_GITHUB_TOKEN
-
- # Install CLI
- npm install @aitbc/cli-macos@latest
- npx @aitbc/cli-macos install
-
- # Install Services
- npm install @aitbc/services-macos@latest
- npx @aitbc/services-macos install
- \`\`\`
-
- ## 🔧 Authentication
-
- ### For Container Registry
- \`\`\`bash
- # Login to GitHub Container Registry
- echo ${{ secrets.GITHUB_TOKEN }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin
- \`\`\`
-
- ### For NPM Registry
- \`\`\`bash
- # Create a personal access token with 'read:packages' scope
- # Set up npm authentication
- npm config set //npm.pkg.github.com/:_authToken=YOUR_PERSONAL_ACCESS_TOKEN
- \`\`\`
-
- ## 📋 Package List
-
- ### Container Images
- | Package | Registry | Platforms | Description |
- |---------|----------|-----------|-------------|
- | \`aitbc-cli\` | ghcr.io | linux/amd64, linux/arm64 | Main CLI tool |
- | \`aitbc-node-service\` | ghcr.io | linux/amd64, linux/arm64 | Blockchain node |
- | \`aitbc-coordinator-service\` | ghcr.io | linux/amd64, linux/arm64 | Coordinator API |
- | \`aitbc-miner-service\` | ghcr.io | linux/amd64, linux/arm64 | GPU miner |
- | \`aitbc-marketplace-service\` | ghcr.io | linux/amd64, linux/arm64 | GPU marketplace |
- | \`aitbc-explorer-service\` | ghcr.io | linux/amd64, linux/arm64 | Block explorer |
- | \`aitbc-wallet-service\` | ghcr.io | linux/amd64, linux/arm64 | Wallet service |
- | \`aitbc-multimodal-service\` | ghcr.io | linux/amd64, linux/arm64 | Multimodal AI |
- | \`aitbc-all-services\` | ghcr.io | linux/amd64, linux/arm64 | Complete stack |
-
- ### NPM Packages
- | Package | Registry | Platform | Description |
- |---------|----------|----------|-------------|
- | \`@aitbc/cli-macos\` | npm.pkg.github.com | macOS | CLI for Apple Silicon |
- | \`@aitbc/services-macos\` | npm.pkg.github.com | macOS | Services for Apple Silicon |
-
- ---
- *Last updated: $(date -u +"%Y-%m-%d %H:%M:%S UTC")*
- *View packages: https://github.com/${{ github.repository }}/packages*
- EOF
-
- - name: Commit and push changes
- run: |
- git config --local user.email "action@github.com"
- git config --local user.name "GitHub Action"
- git add packages/github/PACKAGES_REGISTRY_GUIDE.md
- git diff --staged --quiet || git commit -m "Add GitHub Packages registry guide"
- git push
-workflow:
- disable: true
diff --git a/.github/workflows/publish-packages.yml b/.github/workflows/publish-packages.yml
deleted file mode 100644
index 63bf770d..00000000
--- a/.github/workflows/publish-packages.yml
+++ /dev/null
@@ -1,216 +0,0 @@
-name: Publish Packages to GitHub Packages
-
-on:
- push:
- tags:
- - 'v[0-9]+.[0-9]+.[0-9]+' # Strict version pattern only
- workflow_dispatch:
- inputs:
- version:
- description: 'Version to publish (e.g., 1.0.0)'
- required: true
- default: '1.0.0'
- confirm_release:
- description: 'Type "release" to confirm'
- required: true
-
-jobs:
- security-validation:
- runs-on: ubuntu-latest
- outputs:
- should_publish: ${{ steps.validation.outputs.should_publish }}
- version: ${{ steps.validation.outputs.version }}
-
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
-
- - name: Validate Release Request
- id: validation
- run: |
- # Extract version from tag or input
- if [[ "${{ github.ref_type }}" == "tag" ]]; then
- VERSION="${{ github.ref_name }}"
- VERSION="${VERSION#v}" # Remove 'v' prefix
- else
- VERSION="${{ github.event.inputs.version }}"
- CONFIRM="${{ github.event.inputs.confirm_release }}"
-
- # Validate manual confirmation
- if [[ "$CONFIRM" != "release" ]]; then
- echo "❌ Manual confirmation failed"
- echo "should_publish=false" >> $GITHUB_OUTPUT
- exit 1
- fi
- fi
-
- # Validate version format
- if [[ ! "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
- echo "❌ Invalid version format: $VERSION"
- echo "should_publish=false" >> $GITHUB_OUTPUT
- exit 1
- fi
-
- # Check if this is a new version (not already published)
- echo "✅ Version validation passed: $VERSION"
- echo "should_publish=true" >> $GITHUB_OUTPUT
- echo "version=$VERSION" >> $GITHUB_OUTPUT
-
- request-approval:
- runs-on: ubuntu-latest
- needs: security-validation
- if: needs.security-validation.outputs.should_publish == 'true'
-
- steps:
- - name: Request Manual Approval
- uses: trstringer/manual-approval@v1
- with:
- secret: ${{ github.TOKEN }}
- approvers: security-team,release-managers
- minimum-approvals: 2
- issue-title: "🚀 Release v${{ needs.security-validation.outputs.version }} Approval Required"
- issue-body: |
- ## 📦 Package Release Request
-
- **Version**: v${{ needs.security-validation.outputs.version }}
- **Triggered by**: ${{ github.actor }}
- **Commit**: ${{ github.sha }}
-
- ### 🔍 Security Checks
- - ✅ Version format validated
- - ✅ Release confirmation received
- - ✅ Security scan passed (if applicable)
-
- ### 📋 Packages to Publish
- - aitbc-agent-sdk (Python)
- - explorer-web (Node.js)
-
- ---
-
- **Approve this issue to allow the release to proceed.**
-
- **Reject this issue to block the release.**
-
- publish-agent-sdk:
- runs-on: ubuntu-latest
- needs: [security-validation, request-approval]
- if: needs.security-validation.outputs.should_publish == 'true'
- permissions:
- contents: read
- packages: write
-
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
-
- - name: Set up Python 3.13
- uses: actions/setup-python@v4
- with:
- python-version: '3.13'
-
- - name: Install dependencies
- run: |
- python -m pip install --upgrade pip
- pip install build twine
-
- - name: Build package
- run: |
- cd packages/py/aitbc-agent-sdk
- python -m build
-
- - name: Security Scan Package
- run: |
- echo "🔒 Scanning package for security issues..."
- cd packages/py/aitbc-agent-sdk
- # Check for hardcoded secrets
- if grep -r "password\|secret\|key\|token" --include="*.py" . | grep -v "__pycache__"; then
- echo "❌ Potential secrets found in package"
- exit 1
- fi
- echo "✅ Package security scan passed"
-
- - name: Publish to GitHub Packages
- run: |
- echo "🚀 Publishing aitbc-agent-sdk v${{ needs.security-validation.outputs.version }}"
- cd packages/py/aitbc-agent-sdk
- # Use dedicated token if available, otherwise fallback to GitHub token
- TOKEN="${{ secrets.PYPI_TOKEN || secrets.GITHUB_TOKEN }}"
- python -m twine upload --repository-url https://npm.pkg.github.com/:_authToken=$TOKEN dist/*
- env:
- TWINE_USERNAME: ${{ secrets.PYPI_USERNAME || github.actor }}
- TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN || secrets.GITHUB_TOKEN }}
-
- publish-explorer-web:
- runs-on: ubuntu-latest
- needs: [security-validation, request-approval]
- if: needs.security-validation.outputs.should_publish == 'true'
- permissions:
- contents: read
- packages: write
-
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
-
- - name: Set up Node.js
- uses: actions/setup-node@v4
- with:
- node-version: '20'
- registry-url: 'https://npm.pkg.github.com'
-
- - name: Install dependencies
- run: |
- cd apps/explorer-web
- npm ci
-
- - name: Build package
- run: |
- cd apps/explorer-web
- npm run build
-
- - name: Security Scan Package
- run: |
- echo "🔒 Scanning package for security issues..."
- cd apps/explorer-web
- # Check for hardcoded secrets
- if grep -r "password\|secret\|key\|token" --include="*.js" --include="*.json" . | grep -v "node_modules"; then
- echo "❌ Potential secrets found in package"
- exit 1
- fi
- echo "✅ Package security scan passed"
-
- - name: Publish to GitHub Packages
- run: |
- echo "🚀 Publishing explorer-web v${{ needs.security-validation.outputs.version }}"
- cd apps/explorer-web
- npm publish
- env:
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN || secrets.GITHUB_TOKEN }}
-
- release-notification:
- runs-on: ubuntu-latest
- needs: [security-validation, publish-agent-sdk, publish-explorer-web]
- if: always() && needs.security-validation.outputs.should_publish == 'true'
-
- steps:
- - name: Notify Release Success
- run: |
- echo "🎉 Release v${{ needs.security-validation.outputs.version }} completed successfully!"
- echo "📦 Published packages:"
- echo " - aitbc-agent-sdk (Python)"
- echo " - explorer-web (Node.js)"
-
- # Create release notification
- echo "## 🚀 Release v${{ needs.security-validation.outputs.version }} Published" >> $GITHUB_STEP_SUMMARY
- echo "" >> $GITHUB_STEP_SUMMARY
- echo "### ✅ Successfully Published" >> $GITHUB_STEP_SUMMARY
- echo "- aitbc-agent-sdk (Python package)" >> $GITHUB_STEP_SUMMARY
- echo "- explorer-web (Node.js package)" >> $GITHUB_STEP_SUMMARY
- echo "" >> $GITHUB_STEP_SUMMARY
- echo "### 🔒 Security Checks Passed" >> $GITHUB_STEP_SUMMARY
- echo "- Version format validated" >> $GITHUB_STEP_SUMMARY
- echo "- Manual approval received" >> $GITHUB_STEP_SUMMARY
- echo "- Package security scans passed" >> $GITHUB_STEP_SUMMARY
- echo "- Dedicated publishing tokens used" >> $GITHUB_STEP_SUMMARY
-workflow:
- disable: true
diff --git a/.github/workflows/publish-python-packages.yml b/.github/workflows/publish-python-packages.yml
deleted file mode 100644
index 2f2b199f..00000000
--- a/.github/workflows/publish-python-packages.yml
+++ /dev/null
@@ -1,75 +0,0 @@
-name: Publish Python Packages
-
-on:
- push:
- tags:
- - 'v*'
- workflow_dispatch:
- inputs:
- package:
- description: 'Package to publish (aitbc-sdk, aitbc-crypto, or all)'
- required: true
- default: 'all'
- dry_run:
- description: 'Dry run (build only, no publish)'
- required: false
- default: false
- type: boolean
-
-jobs:
- publish:
- runs-on: ubuntu-latest
- permissions:
- contents: read
- id-token: write # IMPORTANT: this permission is mandatory for trusted publishing
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- with:
- fetch-depth: 0
-
- - name: Set up Python
- uses: actions/setup-python@v4
- with:
- python-version: '3.11'
-
- - name: Install build dependencies
- run: |
- python -m pip install --upgrade pip
- pip install build twine
-
- - name: Build aitbc-crypto
- if: ${{ github.event.inputs.package == 'all' || github.event.inputs.package == 'aitbc-crypto' }}
- run: |
- cd packages/py/aitbc-crypto
- python -m build
-
- - name: Build aitbc-sdk
- if: ${{ github.event.inputs.package == 'all' || github.event.inputs.package == 'aitbc-sdk' }}
- run: |
- cd packages/py/aitbc-sdk
- python -m build
-
- - name: Check packages
- run: |
- for dist in packages/py/*/dist/*; do
- echo "Checking $dist"
- python -m twine check "$dist"
- done
-
- - name: Publish to PyPI
- if: ${{ github.event.inputs.dry_run != 'true' }}
- run: |
- for dist in packages/py/*/dist/*; do
- echo "Publishing $dist"
- python -m twine upload --skip-existing "$dist" || true
- done
-
- - name: Dry run - check only
- if: ${{ github.event.inputs.dry_run == 'true' }}
- run: |
- echo "Dry run complete - packages built and checked but not published"
- ls -la packages/py/*/dist/
-workflow:
- disable: true
diff --git a/.github/workflows/python-ci.yml b/.github/workflows/python-ci.yml
deleted file mode 100644
index 981467b6..00000000
--- a/.github/workflows/python-ci.yml
+++ /dev/null
@@ -1,36 +0,0 @@
-name: Python CI
-
-on:
- push:
- branches: ["**"]
- pull_request:
- branches: ["**"]
-
-jobs:
- lint-and-test:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v4
-
- - name: Set up Python
- uses: actions/setup-python@v5
- with:
- python-version: '3.11'
- cache: 'pip'
-
- - name: Install Poetry
- run: python -m pip install --upgrade pip poetry
-
- - name: Install dependencies
- run: |
- poetry config virtualenvs.create false
- poetry install --no-interaction --no-ansi
-
- - name: Lint (ruff)
- run: poetry run ruff check .
-
- - name: Test (pytest)
- run: poetry run pytest
-workflow:
- disable: true
diff --git a/.github/workflows/security-scanning.yml b/.github/workflows/security-scanning.yml
deleted file mode 100644
index 1d229b96..00000000
--- a/.github/workflows/security-scanning.yml
+++ /dev/null
@@ -1,348 +0,0 @@
-name: Security Scanning
-
-on:
- push:
- branches: [ main, develop ]
- pull_request:
- branches: [ main, develop ]
- schedule:
- # Run security scan daily at 2 AM UTC
- - cron: '0 2 * * *'
-
-jobs:
- # Python Security Scanning with Bandit
- bandit-security-scan:
- runs-on: ubuntu-latest
- name: Bandit Security Scan
-
- strategy:
- matrix:
- # Define directories to scan
- directory:
- - "apps/coordinator-api/src"
- - "cli/aitbc_cli"
- - "packages/py/aitbc-core/src"
- - "packages/py/aitbc-crypto/src"
- - "packages/py/aitbc-sdk/src"
- - "tests"
-
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
-
- - name: Set up Python
- uses: actions/setup-python@v4
- with:
- python-version: '3.11'
-
- - name: Install dependencies
- run: |
- python -m pip install --upgrade pip
- pip install bandit[toml] safety
- # Install project dependencies for context
- if [ -f "${{ matrix.directory }}/requirements.txt" ]; then
- pip install -r "${{ matrix.directory }}/requirements.txt" 2>/dev/null || true
- fi
- if [ -f "pyproject.toml" ]; then
- pip install -e . 2>/dev/null || true
- fi
-
- - name: Run Bandit security scan
- run: |
- echo "Scanning directory: ${{ matrix.directory }}"
- bandit -r ${{ matrix.directory }} \
- -f json \
- -o bandit-report-${{ matrix.directory }}.json \
- --severity-level medium \
- --confidence-level medium || true
-
- # Also generate human-readable report
- bandit -r ${{ matrix.directory }} \
- -f txt \
- -o bandit-report-${{ matrix.directory }}.txt \
- --severity-level medium \
- --confidence-level medium || true
-
- - name: Run Safety check for known vulnerabilities
- run: |
- echo "Running Safety check for known vulnerabilities..."
- safety check --json --output safety-report.json || true
- safety check || true
-
- - name: Upload Bandit reports
- uses: actions/upload-artifact@v3
- if: always()
- with:
- name: bandit-reports-${{ matrix.directory }}
- path: |
- bandit-report-${{ matrix.directory }}.json
- bandit-report-${{ matrix.directory }}.txt
- retention-days: 30
-
- - name: Upload Safety report
- uses: actions/upload-artifact@v3
- if: always()
- with:
- name: safety-report
- path: safety-report.json
- retention-days: 30
-
- - name: Comment PR with security findings
- if: github.event_name == 'pull_request'
- uses: actions/github-script@v6
- with:
- script: |
- const fs = require('fs');
- const path = require('path');
-
- try {
- const reportPath = `bandit-report-${{ matrix.directory }}.txt`;
- if (fs.existsSync(reportPath)) {
- const report = fs.readFileSync(reportPath, 'utf8');
-
- // Create summary
- const lines = report.split('\n');
- const issues = lines.filter(line => line.includes('Issue:')).length;
-
- const comment = `## 🔒 Security Scan Results for \`${{ matrix.directory }}\`
-
- **Bandit Security Scan**
- - Issues found: ${issues}
- - Severity: Medium and above
- - Confidence: Medium and above
-
-
- 📋 Detailed Report
-
- \`\`\`
- ${report}
- \`\`\`
-
-
-
- ---
- *This security scan was automatically generated by Bandit.*`;
-
- github.rest.issues.createComment({
- issue_number: context.issue.number,
- owner: context.repo.owner,
- repo: context.repo.repo,
- body: comment
- });
- }
- } catch (error) {
- console.log('Could not read security report:', error.message);
- }
-
- # CodeQL Security Analysis
- codeql-security-scan:
- runs-on: ubuntu-latest
- name: CodeQL Security Analysis
- permissions:
- actions: read
- contents: read
- security-events: write
-
- strategy:
- fail-fast: false
- matrix:
- language: [ 'python', 'javascript' ]
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
-
- - name: Initialize CodeQL
- uses: github/codeql-action/init@v2
- with:
- languages: ${{ matrix.language }}
- queries: security-extended,security-and-quality
-
- - name: Autobuild
- uses: github/codeql-action/autobuild@v2
-
- - name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v2
- with:
- category: "/language:${{matrix.language}}"
-
- # Dependency Security Scanning
- dependency-security-scan:
- runs-on: ubuntu-latest
- name: Dependency Security Scan
-
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
-
- - name: Set up Python
- uses: actions/setup-python@v4
- with:
- python-version: '3.11'
-
- - name: Run dependency security scan
- run: |
- python -m pip install --upgrade pip
- pip install safety
-
- # Check for known vulnerabilities in dependencies
- echo "Scanning Python dependencies..."
- safety check --json --output python-safety-report.json || true
- safety check || true
-
- # Check npm dependencies if they exist
- if [ -f "apps/explorer-web/package.json" ]; then
- echo "Scanning npm dependencies..."
- cd apps/explorer-web
- npm audit --json > ../npm-audit-report.json 2>&1 || true
- npm audit || true
- cd ../..
- fi
-
- if [ -f "website/package.json" ]; then
- echo "Scanning website npm dependencies..."
- cd website
- npm audit --json > ../website-npm-audit-report.json 2>&1 || true
- npm audit || true
- cd ../..
- fi
-
- - name: Upload dependency security reports
- uses: actions/upload-artifact@v3
- if: always()
- with:
- name: dependency-security-reports
- path: |
- python-safety-report.json
- npm-audit-report.json
- website-npm-audit-report.json
- retention-days: 30
-
- # Container Security Scanning (if Docker is used)
- container-security-scan:
- runs-on: ubuntu-latest
- name: Container Security Scan
- if: contains(github.event.head_commit.modified, 'Dockerfile') || contains(github.event.head_commit.modified, 'docker-compose')
-
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
-
- - name: Run Trivy vulnerability scanner
- uses: aquasecurity/trivy-action@master
- with:
- image-ref: 'ghcr.io/${{ github.repository }}:latest'
- format: 'sarif'
- output: 'trivy-results.sarif'
-
- - name: Upload Trivy scan results to GitHub Security tab
- uses: github/codeql-action/upload-sarif@v2
- if: always()
- with:
- sarif_file: 'trivy-results.sarif'
-
- # Security Scorecard
- security-scorecard:
- runs-on: ubuntu-latest
- name: OSSF Scorecard
- permissions:
- security-events: write
- actions: read
- id-token: write
-
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
- with:
- persist-credentials: false
-
- - name: Run analysis
- uses: ossf/scorecard-action@v2.3.1
- with:
- results_file: results.sarif
- results_format: sarif
- # Note: Running without repo_token for local analysis only
-
- - name: Upload SARIF to GitHub Security tab
- uses: github/codeql-action/upload-sarif@v2
- with:
- sarif_file: results.sarif
-
- # Security Summary Report
- security-summary:
- runs-on: ubuntu-latest
- name: Security Summary Report
- needs: [bandit-security-scan, codeql-security-scan, dependency-security-scan]
- if: always()
-
- steps:
- - name: Download all artifacts
- uses: actions/download-artifact@v3
-
- - name: Generate security summary
- run: |
- echo "# 🔒 Security Scan Summary" > security-summary.md
- echo "" >> security-summary.md
- echo "## Scan Results" >> security-summary.md
- echo "" >> security-summary.md
-
- # Bandit results
- echo "### Bandit Security Scan" >> security-summary.md
- echo "- Scanned multiple Python directories" >> security-summary.md
- echo "- Severity level: Medium and above" >> security-summary.md
- echo "- Confidence level: Medium and above" >> security-summary.md
- echo "" >> security-summary.md
-
- # CodeQL results
- echo "### CodeQL Security Analysis" >> security-summary.md
- echo "- Languages: Python, JavaScript" >> security-summary.md
- echo "- Queries: security-extended, security-and-quality" >> security-summary.md
- echo "" >> security-summary.md
-
- # Dependency results
- echo "### Dependency Security Scan" >> security-summary.md
- echo "- Python dependencies checked with Safety" >> security-summary.md
- echo "- npm dependencies checked with npm audit" >> security-summary.md
- echo "" >> security-summary.md
-
- # Additional info
- echo "### Additional Information" >> security-summary.md
- echo "- Scans run on: $(date)" >> security-summary.md
- echo "- Commit: ${{ github.sha }}" >> security-summary.md
- echo "- Branch: ${{ github.ref_name }}" >> security-summary.md
- echo "" >> security-summary.md
-
- echo "## Recommendations" >> security-summary.md
- echo "1. Review any high-severity findings immediately" >> security-summary.md
- echo "2. Update dependencies with known vulnerabilities" >> security-summary.md
- echo "3. Address security best practices recommendations" >> security-summary.md
- echo "4. Regular security audits and penetration testing" >> security-summary.md
-
- - name: Upload security summary
- uses: actions/upload-artifact@v3
- with:
- name: security-summary
- path: security-summary.md
- retention-days: 90
-
- - name: Comment PR with security summary
- if: github.event_name == 'pull_request'
- uses: actions/github-script@v6
- with:
- script: |
- const fs = require('fs');
-
- try {
- const summary = fs.readFileSync('security-summary.md', 'utf8');
-
- github.rest.issues.createComment({
- issue_number: context.issue.number,
- owner: context.repo.owner,
- repo: context.repo.repo,
- body: summary
- });
- } catch (error) {
- console.log('Could not read security summary:', error.message);
- }
-workflow:
- disable: true