dist_agent_lang 1.0.3

A hybrid programming language for decentralized and centralized network integration
name: CI/CD Pipeline

on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main ]
  release:
    types: [ published ]

env:
  CARGO_TERM_COLOR: always
  RUST_BACKTRACE: 1

jobs:
  # Code quality checks
  check:
    name: Code Quality Check
    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v4
    
    - name: Install Rust
      uses: actions-rs/toolchain@v1
      with:
        toolchain: 1.70
        override: true
    
    - name: Cache dependencies
      uses: actions/cache@v3
      with:
        path: |
          ~/.cargo/registry
          ~/.cargo/git
          target
        key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
        restore-keys: |
          ${{ runner.os }}-cargo-
    
    - name: Check code
      run: cargo check
    
    - name: Format check
      run: cargo fmt -- --check
    
    - name: Clippy check
      run: cargo clippy -- -D warnings

  # Testing
  test:
    name: Test Suite
    runs-on: ubuntu-latest
    strategy:
      matrix:
        rust: [1.70, stable, beta]
    
    steps:
    - uses: actions/checkout@v4
    
    - name: Install Rust ${{ matrix.rust }}
      uses: actions-rs/toolchain@v1
      with:
        toolchain: ${{ matrix.rust }}
        override: true
    
    - name: Cache dependencies
      uses: actions/cache@v3
      with:
        path: |
          ~/.cargo/registry
          ~/.cargo/git
          target
        key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
        restore-keys: |
          ${{ runner.os }}-cargo-
    
    - name: Run tests
      run: cargo test --verbose
    
    - name: Run tests with all features
      run: cargo test --all-features --verbose

  # Security audit
  security:
    name: Security Audit
    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v4
    
    - name: Install Rust
      uses: actions-rs/toolchain@v1
      with:
        toolchain: 1.70
        override: true
    
    - name: Install cargo-audit
      run: cargo install cargo-audit
    
    - name: Run security audit
      run: cargo audit

  # Performance benchmarks
  bench:
    name: Performance Benchmarks
    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v4
    
    - name: Install Rust
      uses: actions-rs/toolchain@v1
      with:
        toolchain: 1.70
        override: true
    
    - name: Cache dependencies
      uses: actions/cache@v3
      with:
        path: |
          ~/.cargo/registry
          ~/.cargo/git
          target
        key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
        restore-keys: |
          ${{ runner.os }}-cargo-
    
    - name: Run benchmarks
      run: cargo bench

  # Build for multiple platforms
  build:
    name: Build for ${{ matrix.target }}
    runs-on: ubuntu-latest
    strategy:
      matrix:
        target:
          - x86_64-unknown-linux-gnu
          - x86_64-apple-darwin
          - x86_64-pc-windows-msvc
          - aarch64-unknown-linux-gnu
          - aarch64-apple-darwin
    
    steps:
    - uses: actions/checkout@v4
    
    - name: Install Rust
      uses: actions-rs/toolchain@v1
      with:
        toolchain: 1.70
        override: true
        target: ${{ matrix.target }}
    
    - name: Cache dependencies
      uses: actions/cache@v3
      with:
        path: |
          ~/.cargo/registry
          ~/.cargo/git
          target
        key: ${{ runner.os }}-cargo-${{ matrix.target }}-${{ hashFiles('**/Cargo.lock') }}
        restore-keys: |
          ${{ runner.os }}-cargo-${{ matrix.target }}-
    
    - name: Build
      run: cargo build --release --target ${{ matrix.target }}
    
    - name: Upload artifacts
      uses: actions/upload-artifact@v3
      with:
        name: dist_agent_lang-${{ matrix.target }}
        path: target/${{ matrix.target }}/release/dist_agent_lang*

  # Docker build
  docker:
    name: Docker Build
    runs-on: ubuntu-latest
    needs: [check, test, security]
    
    steps:
    - uses: actions/checkout@v4
    
    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v2
    
    - name: Build Docker image
      uses: docker/build-push-action@v4
      with:
        context: .
        push: false
        tags: dist_agent_lang:latest
        cache-from: type=gha
        cache-to: type=gha,mode=max

  # Release
  release:
    name: Create Release
    runs-on: ubuntu-latest
    needs: [check, test, security, build, docker]
    if: github.event_name == 'release'
    
    steps:
    - uses: actions/checkout@v4
    
    - name: Install Rust
      uses: actions-rs/toolchain@v1
      with:
        toolchain: 1.70
        override: true
    
    - name: Install Node.js
      uses: actions/setup-node@v3
      with:
        node-version: '18'
    
    - name: Download all artifacts
      uses: actions/download-artifact@v3
      with:
        path: artifacts
    
    - name: Extract version from tag
      id: get_version
      run: |
        VERSION="${{ github.event.release.tag_name }}"
        # Remove 'v' prefix if present
        VERSION=${VERSION#v}
        echo "version=$VERSION" >> $GITHUB_OUTPUT
        echo "Extracted version: $VERSION"
    
    - name: Create release package
      run: |
        VERSION="${{ steps.get_version.outputs.version }}"
        mkdir -p dist_agent_lang-${VERSION}/bin
        cp artifacts/*/dist_agent_lang* dist_agent_lang-${VERSION}/bin/ || true
        cp -r src examples docs scripts templates dist_agent_lang-${VERSION}/
        cp Cargo.toml README.md LICENSE CHANGELOG.md package.json dist_agent_lang-${VERSION}/
        tar -czf dist_agent_lang-${VERSION}.tar.gz dist_agent_lang-${VERSION}/
        zip -r dist_agent_lang-${VERSION}.zip dist_agent_lang-${VERSION}/
    
    - name: Upload release assets
      uses: actions/upload-release-asset@v1
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        upload_url: ${{ github.event.release.upload_url }}
        asset_path: ./dist_agent_lang-${{ steps.get_version.outputs.version }}.tar.gz
        asset_name: dist_agent_lang-${{ steps.get_version.outputs.version }}.tar.gz
        asset_content_type: application/gzip
    
    - name: Upload release assets (zip)
      uses: actions/upload-release-asset@v1
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        upload_url: ${{ github.event.release.upload_url }}
        asset_path: ./dist_agent_lang-${{ steps.get_version.outputs.version }}.zip
        asset_name: dist_agent_lang-${{ steps.get_version.outputs.version }}.zip
        asset_content_type: application/zip

  # Documentation
  docs:
    name: Build Documentation
    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v4
    
    - name: Install Rust
      uses: actions-rs/toolchain@v1
      with:
        toolchain: 1.70
        override: true
    
    - name: Build documentation
      run: cargo doc --no-deps
    
    - name: Deploy to GitHub Pages
      uses: peaceiris/actions-gh-pages@v3
      if: github.ref == 'refs/heads/main'
      with:
        github_token: ${{ secrets.GITHUB_TOKEN }}
        publish_dir: ./target/doc