microsoft/autogen

12 workflows · maturity 67% · 9 patterns · GitHub ↗

Security 18.75/100

Practices

✓ Matrix✓ Permissions✓ Security scan○ AI review○ Cache✓ Concurrency○ Reusable workflows

Detected patterns

Security dimensions

permissions
10.4
security scan
8.3
supply chain
0
secret handling
0
harden runner
0

Tools: github/codeql-action/analyze, github/codeql-action/init

Workflows (12)

checks matrix .github/workflows/checks.yml
Triggers
push, pull_request
Runs on
ubuntu-latest, ubuntu-latest, ubuntu-latest, ubuntu-latest, ubuntu-latest, ubuntu-latest, ubuntu-latest, windows-latest, ubuntu-latest, ubuntu-latest, ubuntu-latest, ubuntu-latest, ubuntu-latest, ubuntu-latest
Jobs
format, lint, mypy, docs-mypy, pyright, test, test-grpc, test-autogen-ext-pwsh, codecov, docs, docs-example-check, samples-code-check, markdown-code-lint, check-proto-changes-python
Matrix
package→ ./packages/agbench, ./packages/autogen-agentchat, ./packages/autogen-core, ./packages/autogen-ext, ./packages/magentic-one-cli, autogen-ext-grpc
Actions
astral-sh/setup-uv, astral-sh/setup-uv, astral-sh/setup-uv, astral-sh/setup-uv, astral-sh/setup-uv, astral-sh/setup-uv, astral-sh/setup-uv, astral-sh/setup-uv, codecov/codecov-action, astral-sh/setup-uv, astral-sh/setup-uv, astral-sh/setup-uv, astral-sh/setup-uv, astral-sh/setup-uv, UnicornGlobal/has-changes-action
Commands
  • uv sync --locked --all-extras
  • source ${{ github.workspace }}/python/.venv/bin/activate poe fmt --check
  • uv sync --locked --all-extras
  • source ${{ github.workspace }}/python/.venv/bin/activate poe lint
  • uv sync --locked --all-extras
  • source ${{ github.workspace }}/python/.venv/bin/activate poe --directory ${{ matrix.package }} mypy
  • uv sync --locked --all-extras
  • source ${{ github.workspace }}/python/.venv/bin/activate poe docs-mypy
View raw YAML
name: Checks

on:
  push:
    branches:
      - main
      - staging
  pull_request:
    branches:
      - main
      - staging

jobs:
  format:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: astral-sh/setup-uv@v5
        with:
          enable-cache: true
      - uses: actions/setup-python@v5
        with:
          python-version: "3.11"
      - run: uv sync --locked --all-extras
        working-directory: ./python
      - name: Run task
        run: |
          source ${{ github.workspace }}/python/.venv/bin/activate
          poe fmt --check
        working-directory: ./python

  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: astral-sh/setup-uv@v5
        with:
          enable-cache: true
      - uses: actions/setup-python@v5
        with:
          python-version: "3.11"
      - run: uv sync --locked --all-extras
        working-directory: ./python
      - name: Run task
        run: |
          source ${{ github.workspace }}/python/.venv/bin/activate
          poe lint
        working-directory: ./python

  mypy:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        package:
          [
            "./packages/autogen-core",
            "./packages/agbench",
            "./packages/autogen-ext",
            "./packages/autogen-agentchat",
            "./packages/magentic-one-cli",
          ]
    steps:
      - uses: actions/checkout@v4
      - uses: astral-sh/setup-uv@v5
        with:
          enable-cache: true
      - uses: actions/setup-python@v5
        with:
          python-version: "3.11"
      - run: uv sync --locked --all-extras
        working-directory: ./python
      - name: Run task
        run: |
          source ${{ github.workspace }}/python/.venv/bin/activate
          poe --directory ${{ matrix.package }} mypy
        working-directory: ./python

  docs-mypy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: astral-sh/setup-uv@v5
        with:
          enable-cache: true
      - uses: actions/setup-python@v5
        with:
          python-version: "3.11"
      - run: uv sync --locked --all-extras
        working-directory: ./python
      - name: Run task
        run: |
          source ${{ github.workspace }}/python/.venv/bin/activate
          poe docs-mypy
        working-directory: ./python

  pyright:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        package:
          [
            "./packages/autogen-core",
            "./packages/agbench",
            "./packages/autogen-ext",
            "./packages/autogen-agentchat",
            "./packages/magentic-one-cli",
          ]
    steps:
      - uses: actions/checkout@v4
      - uses: astral-sh/setup-uv@v5
        with:
          enable-cache: true
      - uses: actions/setup-python@v5
        with:
          python-version: "3.11"
      - run: uv sync --locked --all-extras
        working-directory: ./python
      - name: Run task
        run: |
          source ${{ github.workspace }}/python/.venv/bin/activate
          poe --directory ${{ matrix.package }} pyright
        working-directory: ./python

  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        package:
          [
            "./packages/autogen-core",
            "./packages/autogen-ext",
            "./packages/autogen-agentchat",
          ]
    steps:
      - uses: actions/checkout@v4
      - uses: astral-sh/setup-uv@v5
        with:
          enable-cache: true
      - uses: actions/setup-python@v5
        with:
          python-version: "3.11"
      - name: Run uv sync
        run: |
          uv sync --locked --all-extras
          echo "PKG_NAME=$(basename '${{ matrix.package }}')" >> $GITHUB_ENV

        working-directory: ./python
      - name: Run task
        run: |
          source ${{ github.workspace }}/python/.venv/bin/activate
          poe --directory ${{ matrix.package }} test
        working-directory: ./python

      - name: Move coverage file
        run: |
          mv ${{ matrix.package }}/coverage.xml coverage_${{ env.PKG_NAME }}.xml
        working-directory: ./python

      - name: Upload coverage artifact
        uses: actions/upload-artifact@v4
        with:
          name: coverage-${{ env.PKG_NAME }}
          path: ./python/coverage_${{ env.PKG_NAME }}.xml

  test-grpc:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: astral-sh/setup-uv@v5
        with:
          enable-cache: true
      - uses: actions/setup-python@v5
        with:
          python-version: "3.11"
      - name: Run uv sync
        run: |
          uv sync --locked --all-extras
        working-directory: ./python
      - name: Run task
        run: |
          source ${{ github.workspace }}/python/.venv/bin/activate
          poe --directory ./packages/autogen-ext test-grpc
        working-directory: ./python

      - name: Move coverage file
        run: |
          mv ./packages/autogen-ext/coverage.xml coverage_autogen-ext-grpc.xml
        working-directory: ./python

      - name: Upload coverage artifact
        uses: actions/upload-artifact@v4
        with:
          name: coverage-autogen-ext-grpc
          path: ./python/coverage_autogen-ext-grpc.xml

  test-autogen-ext-pwsh:
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v4

      - uses: astral-sh/setup-uv@v5
        with:
          enable-cache: true

      - uses: actions/setup-python@v5
        with:
          python-version: "3.11"

      - name: Install Python deps
        run: |
          uv sync --locked --all-extras
        shell: pwsh
        working-directory: ./python

      - name: Run tests for Windows
        run: |
          .venv/Scripts/activate.ps1
          poe --directory ./packages/autogen-ext test-windows
        shell: pwsh
        working-directory: ./python

      - name: Move coverage file
        run: |
          mv ./packages/autogen-ext/coverage.xml coverage_autogen_ext_windows.xml
        working-directory: ./python

      - name: Upload coverage artifact
        uses: actions/upload-artifact@v4
        with:
          name: coverage-autogen-ext-windows
          path: ./python/coverage_autogen_ext_windows.xml

  codecov:
    runs-on: ubuntu-latest
    needs: [test, test-grpc]
    strategy:
      matrix:
        package:
          [
            "./packages/autogen-core",
            "./packages/autogen-ext",
            "./packages/autogen-agentchat",
            "autogen-ext-grpc",
          ]
    steps:
      - uses: actions/checkout@v4
      - name: Set up environment
        run: |
          echo "PKG_NAME=$(basename '${{ matrix.package }}')" >> $GITHUB_ENV
      - uses: actions/checkout@v4
      - uses: actions/download-artifact@v4
        with:
          name: coverage-${{ env.PKG_NAME }}
          path: ./
      - uses: codecov/codecov-action@v5
        with:
          files: coverage_${{ env.PKG_NAME }}.xml
          flags: unittests
          name: codecov-umbrella
          fail_ci_if_error: true
          token: ${{ secrets.CODECOV_TOKEN }}

  docs:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: astral-sh/setup-uv@v5
        with:
          enable-cache: true
      - uses: actions/setup-python@v5
        with:
          python-version: "3.11"
      - run: uv sync --locked --all-extras
        working-directory: ./python
      - name: Run task
        run: |
          source ${{ github.workspace }}/python/.venv/bin/activate
          poe docs-check
        working-directory: ./python

  docs-example-check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: astral-sh/setup-uv@v5
        with:
          enable-cache: true
      - uses: actions/setup-python@v5
        with:
          python-version: "3.11"
      - run: uv sync --locked --all-extras
        working-directory: ./python
      - name: Run task
        run: |
          source ${{ github.workspace }}/python/.venv/bin/activate
          poe docs-check-examples
        working-directory: ./python

  samples-code-check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: astral-sh/setup-uv@v5
        with:
          enable-cache: true
      - uses: actions/setup-python@v5
        with:
          python-version: "3.11"
      - run: uv sync --locked --all-extras
        working-directory: ./python
      - name: Run task
        run: |
          source ${{ github.workspace }}/python/.venv/bin/activate
          poe samples-code-check
        working-directory: ./python

  markdown-code-lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: astral-sh/setup-uv@v3
        with:
          enable-cache: true
      - uses: actions/setup-python@v5
        with:
          python-version: "3.11"
      - run: uv sync --locked --all-extras
        working-directory: ./python
      - name: Run task
        run: |
          source ${{ github.workspace }}/python/.venv/bin/activate
          poe markdown-code-lint
        working-directory: ./python

  check-proto-changes-python:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: astral-sh/setup-uv@v5
        with:
          enable-cache: true
      - uses: actions/setup-python@v5
        with:
          python-version: "3.11"
      - run: uv sync --locked --all-extras
        working-directory: ./python
      - name: Run task
        run: |
          source ${{ github.workspace }}/python/.venv/bin/activate
          poe gen-proto
          poe gen-test-proto
        working-directory: ./python
      - name: Check if there are uncommited changes
        id: changes
        uses: UnicornGlobal/has-changes-action@v1.0.11
      - name: Process changes
        if: steps.changes.outputs.changed == 1
        run: echo "There are changes in the proto files. Please commit them."
codeql matrix security .github/workflows/codeql.yml
Triggers
push, pull_request, schedule
Runs on
${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
Jobs
analyze
Matrix
include, include.build-mode, include.language→ csharp, javascript-typescript, manual, none, python
Actions
astral-sh/setup-uv, github/codeql-action/init, github/codeql-action/analyze
Commands
  • python -m pip install --upgrade pip python -m pip install jupyter python -m pip install ipykernel
  • python -m jupyter kernelspec list
  • uv sync --locked --all-extras
  • source ${{ github.workspace }}/python/.venv/bin/activate
  • dotnet workload install aspire dotnet restore -bl dotnet build --no-restore --configuration Release -bl /p:SignAssembly=true
View raw YAML
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL Advanced"

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]
  schedule:
    - cron: '25 17 * * 3'

jobs:
  analyze:
    name: Analyze (${{ matrix.language }})
    # Runner size impacts CodeQL analysis time. To learn more, please see:
    #   - https://gh.io/recommended-hardware-resources-for-running-codeql
    #   - https://gh.io/supported-runners-and-hardware-resources
    #   - https://gh.io/using-larger-runners (GitHub.com only)
    # Consider using larger runners or machines with greater resources for possible analysis time improvements.
    runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
    permissions:
      # required for all workflows
      security-events: write

      # required to fetch internal or private CodeQL packs
      packages: read

      # only required for workflows in private repositories
      actions: read
      contents: read

    strategy:
      fail-fast: false
      matrix:
        include:
        - language: csharp
          build-mode: manual
        - language: javascript-typescript
          build-mode: none
        - language: python
          build-mode: none
        # CodeQL supports the following values keywords for 'language': 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift'
        # Use `c-cpp` to analyze code written in C, C++ or both
        # Use 'java-kotlin' to analyze code written in Java, Kotlin or both
        # Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
        # To learn more about changing the languages that are analyzed or customizing the build mode for your analysis,
        # see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning.
        # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how
        # your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
    steps:
    - name: Checkout repository
      uses: actions/checkout@v4

    - name: Set up Python
      uses: actions/setup-python@v5
      with:
        python-version: 3.11
    - name: Install jupyter and ipykernel
      run: |
        python -m pip install --upgrade pip
        python -m pip install jupyter
        python -m pip install ipykernel
    - name: list available kernels
      run: |
        python -m jupyter kernelspec list
    - uses: astral-sh/setup-uv@v5
      with:
        enable-cache: true
    - run: uv sync --locked --all-extras
      working-directory: ./python
    - name: Prepare python venv
      run: |
        source ${{ github.workspace }}/python/.venv/bin/activate
    # Initializes the CodeQL tools for scanning.
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v3
      with:
        languages: ${{ matrix.language }}
        build-mode: ${{ matrix.build-mode }}
        # If you wish to specify custom queries, you can do so here or in a config file.
        # By default, queries listed here will override any specified in a config file.
        # Prefix the list here with "+" to use these queries and those in the config file.

        # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
        # queries: security-extended,security-and-quality

    # If the analyze step fails for one of the languages you are analyzing with
    # "We were unable to automatically build your code", modify the matrix above
    # to set the build mode to "manual" for that language. Then modify this step
    # to build your code.
    # ℹ️ Command-line programs to run using the OS shell.
    # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
    - if: matrix.build-mode == 'manual'
      name: Setup .NET 8.0
      uses: actions/setup-dotnet@v4
      with:
        dotnet-version: '8.0.x'
    - if: matrix.build-mode == 'manual'
      name: Setup .NET 9.0
      uses: actions/setup-dotnet@v4
      with:
        dotnet-version: '9.0.x'
    - if: matrix.build-mode == 'manual'
      shell: bash
      working-directory: dotnet
      run: |
        dotnet workload install aspire
        dotnet restore -bl
        dotnet build --no-restore --configuration Release -bl /p:SignAssembly=true

    - name: Perform CodeQL Analysis
      uses: github/codeql-action/analyze@v3
      with:
        category: "/language:${{matrix.language}}"
docs matrix perms .github/workflows/docs.yml
Triggers
push, pull_request, workflow_dispatch
Runs on
ubuntu-latest, ubuntu-latest, ubuntu-latest, ubuntu-latest, ubuntu-latest, ubuntu-latest
Jobs
build-04, gen-redirects, gen-component-schema, build-02, build-04-dotnet, deploy
Matrix
version, version.dest-dir, version.poe-dir, version.ref, version.sphinx-release-override, version.uv-version→ , ${{github.ref}}, ., ./packages/autogen-core, 0.4.0, 0.4.1, 0.4.2, 0.4.3, 0.4.4, 0.4.5, 0.4.6, 0.4.7, 0.4.8, 0.4.9, 0.5.1, 0.5.13, 0.5.2, 0.5.3, 0.5.4, 0.5.5, 0.5.6, 0.5.7, 0.6.1, 0.6.2, 0.6.4, 0.7.1, 0.7.13, 0.7.2, 0.7.3, 0.7.4, 0.7.5, dev, python-v0.4.5, python-v0.4.6, python-v0.4.7, python-v0.4.8, python-v0.4.9-website, python-v0.5.1, python-v0.5.2, python-v0.5.3, python-v0.5.4, python-v0.5.5, python-v0.5.6, python-v0.5.7, python-v0.6.1, python-v0.6.2, python-v0.6.4, python-v0.7.1.post1, python-v0.7.2, python-v0.7.3, python-v0.7.4, python-v0.7.5, stable, v0.4.0.post1, v0.4.1, v0.4.2, v0.4.3, v0.4.4
Actions
astral-sh/setup-uv, astral-sh/setup-uv, actions/upload-pages-artifact, actions/deploy-pages
Commands
  • uv venv --python=3.11 source .venv/bin/activate uv sync --locked poe --directory ${{ matrix.version.poe-dir }} docs-build mkdir -p docs-staging/${{ matrix.version.dest-dir }}/ mv ${{ matrix.version.poe-dir }}/docs/build/* docs-staging/${{ matrix.version.dest-dir }}/
  • mkdir -p python/docs-staging/ python python/docs/redirects/redirects.py python/docs-staging
  • uv sync --locked --all-extras source .venv/bin/activate mkdir -p docs-staging/schemas/ gen-component-schema > docs-staging/schemas/component-schema-latest.json
  • python -m pip install --upgrade pip pip install docspec==2.2.1 docspec-python==2.2.1 pip install pydoc-markdown pyyaml termcolor # Pin databind packages as version 4.5.0 is not compatible with pydoc-markdown. pip install databind.core==4.4.2 databind.json==4.4.2
  • pydoc-markdown
  • wget -q https://github.com/quarto-dev/quarto-cli/releases/download/v1.5.23/quarto-1.5.23-linux-amd64.tar.gz tar -xzf quarto-1.5.23-linux-amd64.tar.gz echo "$(pwd)/quarto-1.5.23/bin/" >> $GITHUB_PATH
  • python process_notebooks.py render
  • if [ -e yarn.lock ]; then yarn install --frozen-lockfile --ignore-engines yarn build elif [ -e package-lock.json ]; then npm ci npm run build else npm i --legacy-peer-deps npm run build fi
View raw YAML
# Simple workflow for deploying static content to GitHub Pages
name: Docs

on:
  # Runs on pushes targeting the default branch
  push:
    branches:
      - main

  pull_request:
    branches:
      - main

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
  contents: read
  pages: write
  id-token: write

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

jobs:
  build-04:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        version:
          [
            {
              ref: "${{github.ref}}",
              dest-dir: dev,
              uv-version: "0.7.13",
              sphinx-release-override: "dev",
              poe-dir: ".",
            },
            {
              ref: "python-v0.7.5",
              dest-dir: stable,
              uv-version: "0.7.13",
              sphinx-release-override: "stable",
              poe-dir: ".",
            },
            {
              ref: "v0.4.0.post1",
              dest-dir: "0.4.0",
              uv-version: "0.5.13",
              sphinx-release-override: "",
              poe-dir: "./packages/autogen-core",
            },
            {
              ref: "v0.4.1",
              dest-dir: "0.4.1",
              uv-version: "0.5.13",
              sphinx-release-override: "",
              poe-dir: "./packages/autogen-core",
            },
            {
              ref: "v0.4.2",
              dest-dir: "0.4.2",
              uv-version: "0.5.13",
              sphinx-release-override: "",
              poe-dir: "./packages/autogen-core",
            },
            {
              ref: "v0.4.3",
              dest-dir: "0.4.3",
              uv-version: "0.5.13",
              sphinx-release-override: "",
              poe-dir: "./packages/autogen-core",
            },
            {
              ref: "v0.4.4",
              dest-dir: "0.4.4",
              uv-version: "0.5.13",
              sphinx-release-override: "",
              poe-dir: "./packages/autogen-core",
            },
            {
              ref: "python-v0.4.5",
              dest-dir: "0.4.5",
              uv-version: "0.5.13",
              sphinx-release-override: "",
              poe-dir: "./packages/autogen-core",
            },
            {
              ref: "python-v0.4.6",
              dest-dir: "0.4.6",
              uv-version: "0.5.13",
              sphinx-release-override: "",
              poe-dir: "./packages/autogen-core",
            },
            {
              ref: "python-v0.4.7",
              dest-dir: "0.4.7",
              uv-version: "0.5.13",
              sphinx-release-override: "",
              poe-dir: "./packages/autogen-core",
            },
            {
              ref: "python-v0.4.8",
              dest-dir: "0.4.8",
              uv-version: "0.5.13",
              sphinx-release-override: "",
              poe-dir: "./packages/autogen-core",
            },
            {
              ref: "python-v0.4.9-website",
              dest-dir: "0.4.9",
              uv-version: "0.5.13",
              sphinx-release-override: "",
              poe-dir: "./packages/autogen-core",
            },
            {
              ref: "python-v0.5.1",
              dest-dir: "0.5.1",
              uv-version: "0.5.13",
              sphinx-release-override: "",
              poe-dir: "./packages/autogen-core",
            },
            {
              ref: "python-v0.5.2",
              dest-dir: "0.5.2",
              uv-version: "0.5.13",
              sphinx-release-override: "",
              poe-dir: "./packages/autogen-core",
            },
            {
              ref: "python-v0.5.3",
              dest-dir: "0.5.3",
              uv-version: "0.5.13",
              sphinx-release-override: "",
              poe-dir: "./packages/autogen-core",
            },
            {
              ref: "python-v0.5.4",
              dest-dir: "0.5.4",
              uv-version: "0.5.13",
              sphinx-release-override: "",
              poe-dir: "./packages/autogen-core",
            },
            {
              ref: "python-v0.5.5",
              dest-dir: "0.5.5",
              uv-version: "0.5.13",
              sphinx-release-override: "",
              poe-dir: "./packages/autogen-core",
            },
            {
              ref: "python-v0.5.6",
              dest-dir: "0.5.6",
              uv-version: "0.5.13",
              sphinx-release-override: "",
              poe-dir: "./packages/autogen-core",
            },
            {
              ref: "python-v0.5.7",
              dest-dir: "0.5.7",
              uv-version: "0.5.13",
              sphinx-release-override: "",
              poe-dir: "./packages/autogen-core",
            },
            {
              ref: "python-v0.6.1",
              dest-dir: "0.6.1",
              uv-version: "0.5.13",
              sphinx-release-override: "",
              poe-dir: "./packages/autogen-core",
            },
            {
              ref: "python-v0.6.2",
              dest-dir: "0.6.2",
              uv-version: "0.7.13",
              sphinx-release-override: "",
              poe-dir: "./packages/autogen-core",
            },
            {
              ref: "python-v0.6.4",
              dest-dir: "0.6.4",
              uv-version: "0.7.13",
              sphinx-release-override: "",
              poe-dir: ".",
            },
            {
              ref: "python-v0.7.1.post1",
              dest-dir: "0.7.1",
              uv-version: "0.7.13",
              sphinx-release-override: "",
              poe-dir: ".",
            },
            {
              ref: "python-v0.7.2",
              dest-dir: "0.7.2",
              uv-version: "0.7.13",
              sphinx-release-override: "",
              poe-dir: ".",
            },
            {
              ref: "python-v0.7.3",
              dest-dir: "0.7.3",
              uv-version: "0.7.13",
              sphinx-release-override: "",
              poe-dir: ".",
            },
            {
              ref: "python-v0.7.4",
              dest-dir: "0.7.4",
              uv-version: "0.7.13",
              sphinx-release-override: "",
              poe-dir: ".",
            },
            {
              ref: "python-v0.7.5",
              dest-dir: "0.7.5",
              uv-version: "0.7.13",
              sphinx-release-override: "",
              poe-dir: ".",
            },
          ]
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          lfs: "true"
          ref: ${{ matrix.version.ref }}
      - uses: astral-sh/setup-uv@v5
        with:
          enable-cache: true
          version: ${{ matrix.version.uv-version }}
      - uses: actions/setup-python@v5
        with:
          python-version: "3.11"
      - run: |
          uv venv --python=3.11
          source .venv/bin/activate
          uv sync --locked
          poe --directory ${{ matrix.version.poe-dir }} docs-build
          mkdir -p docs-staging/${{ matrix.version.dest-dir }}/
          mv ${{ matrix.version.poe-dir }}/docs/build/* docs-staging/${{ matrix.version.dest-dir }}/
        working-directory: ./python
        env:
          PY_DOCS_DIR: ${{ matrix.version.dest-dir }}/
          PY_SWITCHER_VERSION: ${{ matrix.version.dest-dir }}
          SPHINX_RELEASE_OVERRIDE: ${{ matrix.version.sphinx-release-override }}
      - uses: actions/upload-artifact@v4
        with:
          path: "./python/docs-staging"
          name: "${{ matrix.version.dest-dir }}-docs"

  gen-redirects:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          lfs: "true"
      - uses: actions/setup-python@v5
        with:
          python-version: "3.11"
      - name: generate redirects
        run: |
          mkdir -p python/docs-staging/
          python python/docs/redirects/redirects.py python/docs-staging
      - uses: actions/upload-artifact@v4
        with:
          path: "./python/docs-staging"
          name: "redirects"

  gen-component-schema:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          lfs: "true"
          ref: ${{ matrix.version.ref }}
      - uses: astral-sh/setup-uv@v5
        with:
          enable-cache: true
      - uses: actions/setup-python@v5
        with:
          python-version: "3.11"
      - run: |
          uv sync --locked --all-extras
          source .venv/bin/activate
          mkdir -p docs-staging/schemas/
          gen-component-schema > docs-staging/schemas/component-schema-latest.json
        working-directory: ./python
      - uses: actions/upload-artifact@v4
        with:
          path: "./python/docs-staging"
          name: "component-schema"

  build-02:
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: website
    steps:
      - uses: actions/checkout@v4
        with:
          lfs: true
          ref: "0.2"
      - uses: actions/setup-node@v4
        with:
          node-version: 18.x
      - name: setup python
        uses: actions/setup-python@v5
        with:
          python-version: "3.9"
      - name: pydoc-markdown install
        run: |
          python -m pip install --upgrade pip
          pip install docspec==2.2.1 docspec-python==2.2.1
          pip install pydoc-markdown pyyaml termcolor
          # Pin databind packages as version 4.5.0 is not compatible with pydoc-markdown.
          pip install databind.core==4.4.2 databind.json==4.4.2
      - name: pydoc-markdown run
        run: |
          pydoc-markdown
      - name: quarto install
        working-directory: ${{ runner.temp }}
        run: |
          wget -q https://github.com/quarto-dev/quarto-cli/releases/download/v1.5.23/quarto-1.5.23-linux-amd64.tar.gz
          tar -xzf quarto-1.5.23-linux-amd64.tar.gz
          echo "$(pwd)/quarto-1.5.23/bin/" >> $GITHUB_PATH
      - name: Process notebooks
        run: |
          python process_notebooks.py render
      - name: Build website
        run: |
          if [ -e yarn.lock ]; then
          yarn install --frozen-lockfile --ignore-engines
          yarn build
          elif [ -e package-lock.json ]; then
          npm ci
          npm run build
          else
          npm i --legacy-peer-deps
          npm run build
          fi

      - run: |
          mkdir -p artifact/0.2/
          cp -r build/* artifact/0.2/

      - uses: actions/upload-artifact@v4
        with:
          path: "website/artifact"
          name: "02-docs"

  build-04-dotnet:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          lfs: true
      - name: Setup .NET 8.0
        uses: actions/setup-dotnet@v4
        with:
          global-json-file: dotnet/global.json
      - run: dotnet tool update -g docfx --version 2.67.5
      - run: |
          docfx docs/dotnet/docfx.json
          mkdir -p build/dotnet/
          mv docs/dotnet/_site build/dotnet/dev
      - name: insert clarity snippet to *.html
        working-directory: build/dotnet/dev/
        shell: python
        run: |
          import os
          clarity_script = """
          <script type="text/javascript">
              (function(c,l,a,r,i,t,y){
                  c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
                  t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i;
                  y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
              })(window, document, "clarity", "script", "lnxpe6skj1");
          </script>
          """

          site_folder = '.'

          for root, dirs, files in os.walk(site_folder):
              for file in files:
                  if file.endswith('.html'):
                      html_path = os.path.join(root, file)

                      # insert the script into the html's head section
                      with open(html_path, 'r') as file:
                          html = file.read()
                          html = html.replace('</head>', clarity_script + '</head>')

                      with open(html_path, 'w') as file:
                          file.write(html)

                      print(f'Clarity script inserted into {html_path}')
      - uses: actions/upload-artifact@v4
        with:
          path: "build/"
          name: "dotnet-dev-docs"

  deploy:
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    needs:
      [build-02, build-04, build-04-dotnet, gen-redirects, gen-component-schema]
    if: ${{ needs.build-02.result == 'success' && needs.build-04.result == 'success' && needs.gen-redirects.result == 'success' && github.ref == 'refs/heads/main' }}
    steps:
      - uses: actions/download-artifact@v4
        with:
          path: artifacts

      - name: Copy 02-docs
        run: |
          mkdir -p deploy/
          for dir in artifacts/*; do
            cp -r $dir/* deploy/
          done

      - name: Upload artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: "./deploy"
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4
dotnet-build matrix perms .github/workflows/dotnet-build.yml
Triggers
workflow_dispatch, pull_request, push, merge_group
Runs on
ubuntu-latest, ${{ matrix.os }}, ${{ matrix.os }}, ${{ matrix.os }}, ubuntu-latest, ubuntu-latest
Jobs
paths-filter, build, integration-test, aot-test, openai-test, publish
Matrix
os, python-version, version→ 3.11, macos-latest, net8.0, ubuntu-latest
Actions
dorny/paths-filter, astral-sh/setup-uv, codecov/codecov-action, astral-sh/setup-uv, astral-sh/setup-uv
Commands
  • echo "dotnet has changes"
  • echo "workflows has changes"
  • uv sync --locked --all-extras
  • source ${{ github.workspace }}/python/.venv/bin/activate
  • dotnet restore -bl
  • echo "Format check" echo "If you see any error in this step, please run 'dotnet format' locally to format the code." dotnet format --verify-no-changes -v diag --no-restore
  • echo "Build AutoGen" dotnet build --no-restore --configuration Release -bl /p:SignAssembly=true
  • dotnet test --no-build -bl --configuration Release --filter "Category=UnitV1"
View raw YAML
# This workflow will build a .NET project
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-net

name: dotnet-ci

on:
  workflow_dispatch:
  pull_request:
    branches: [ "main", "staging" ]
  push:
    branches: [ "main", "staging" ]
  merge_group:
    types: [checks_requested]

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}-${{ github.head_ref }}
  cancel-in-progress: ${{ github.ref != 'refs/heads/main' || github.ref != 'refs/heads/dotnet' }}

permissions:
  contents: read
  packages: write

jobs:
  paths-filter:
    runs-on: ubuntu-latest
    permissions:
      contents: write
      pull-requests: write
      repository-projects: write
    outputs:
      hasChanges: ${{ steps.filter.outputs.dotnet == 'true'}}
    steps:
      - uses: actions/checkout@v4
      - uses: dorny/paths-filter@v2
        id: filter
        with:
          filters: |
            dotnet:
              - "dotnet/**"
              - "protos/**"
            workflows:
              - ".github/workflows/**"
      - name: dotnet has changes
        run: echo "dotnet has changes"
        if: steps.filter.outputs.dotnet == 'true'
      - name: workflows has changes
        run: echo "workflows has changes"
        if: steps.filter.outputs.workflows == 'true'

  build:
    name: Dotnet Build & Test
    needs: paths-filter
    if: needs.paths-filter.outputs.hasChanges == 'true'
    defaults:
      run:
        working-directory: dotnet
    strategy:
      fail-fast: false
      matrix:
        os: [ ubuntu-latest, macos-latest ]
        python-version: ["3.11"]
    runs-on: ${{ matrix.os }}
    timeout-minutes: 30
    steps:
    - uses: actions/checkout@v4
      with:
        lfs: true
    - uses: astral-sh/setup-uv@v5
      with:
        enable-cache: true
    - uses: actions/setup-python@v5
      with:
        python-version: "3.11"
    - run: uv sync --locked --all-extras
      working-directory: ./python
    - name: Prepare python venv
      run: |
        source ${{ github.workspace }}/python/.venv/bin/activate
    - name: Setup .NET 8.0
      uses: actions/setup-dotnet@v4
      with:
        dotnet-version: '8.0.x'
    - name: Setup .NET 9.0
      uses: actions/setup-dotnet@v4
      with:
        dotnet-version: '9.0.x'
    - name: Restore dependencies
      run: dotnet restore -bl
    - name: Format check
      run: |
        echo "Format check"
        echo "If you see any error in this step, please run 'dotnet format' locally to format the code."
        dotnet format --verify-no-changes -v diag --no-restore
    - name: Build
      run: |
        echo "Build AutoGen"
        dotnet build --no-restore --configuration Release -bl /p:SignAssembly=true
    - name: Unit Test V1
      run: dotnet test --no-build -bl --configuration Release --filter "Category=UnitV1"
    - name: Unit Test V2 (With Coverage)
      run: dotnet test --no-build -bl --configuration Release --filter "Category=UnitV2" --collect:"XPlat Code Coverage"
    - name: Install Dev Certs for GRPC
      if: matrix.os == 'ubuntu-latest'
      run: dotnet dev-certs https --trust
    - name: GRPC Tests (With Coverage)
      if: matrix.os == 'ubuntu-latest'
      run: dotnet test --no-build -bl --configuration Release --filter "Category=GRPC" --collect:"XPlat Code Coverage"
    - name: Generate & Merge Coverage Report
      if: matrix.os == 'ubuntu-latest'
      run: |
        # Install reportgenerator
        dotnet tool install -g dotnet-reportgenerator-globaltool || dotnet tool update -g dotnet-reportgenerator-globaltool
        # Ensure output directory exists
        mkdir -p ${{ github.workspace }}/dotnet/coverage-report
        # Merge all coverage reports and generate HTML + XML
        reportgenerator \
          -reports:${{ github.workspace }}/dotnet/**/TestResults/**/coverage.cobertura.xml \
          -targetdir:${{ github.workspace }}/dotnet/coverage-report \
          -reporttypes:"Cobertura;Html"
        ls -R ${{ github.workspace }}/dotnet/coverage-report
    - name: Upload Merged Coverage Report
      if: matrix.os == 'ubuntu-latest'
      uses: actions/upload-artifact@v4
      with:
        name: CodeCoverageReport
        path: ${{ github.workspace }}/dotnet/coverage-report/
        retention-days: 7
    - name: Upload Coverage to Codecov
      if: matrix.os == 'ubuntu-latest'
      uses: codecov/codecov-action@v5
      with:
        files: ${{ github.workspace }}/dotnet/coverage-report/*.xml
        flags: unittests
        name: dotnet-codecov
        fail_ci_if_error: true
        token: ${{ secrets.CODECOV_TOKEN }}

  integration-test:
    strategy:
      fail-fast: true
      matrix:
        os: [ ubuntu-latest]
        version: [ net8.0 ]
    needs: build
    defaults:
      run:
        working-directory: dotnet
    runs-on: ${{ matrix.os }}
    steps:
    - uses: actions/checkout@v4
      with:
          lfs: true
    - uses: astral-sh/setup-uv@v5
      with:
        enable-cache: true
    - uses: actions/setup-python@v5
      with:
        python-version: "3.11"
    - run: uv sync --locked --all-extras
      working-directory: ./python
    - name: Prepare python venv
      run: |
        source ${{ github.workspace }}/python/.venv/bin/activate
    - name: Setup .NET 8.0
      uses: actions/setup-dotnet@v4
      with:
        dotnet-version: '8.0.x'
    - name: Setup .NET 9.0
      uses: actions/setup-dotnet@v4
      with:
        dotnet-version: '9.0.x'
    - name: Install Temp Global.JSON
      run: |
        echo "{\"sdk\": {\"version\": \"9.0\"}}" > global.json
    - name: Install .NET Aspire workload
      run: dotnet workload install aspire
    - name: Install dev certs
      run:  dotnet --version && dotnet dev-certs https --trust
    - name: Restore dependencies
      run: |
        dotnet restore -bl
    - name: Build
      run: |
        echo "Build AutoGen"
        dotnet build --no-restore --configuration Release -bl /p:SignAssembly=true
    - name: Integration Test
      run: dotnet --version && dotnet test --no-build -bl --configuration Release --filter "Category=Integration"
    - name: Restore the global.json
      run: rm global.json && git checkout -- global.json

  aot-test: # this make sure the AutoGen.Core is aot compatible
    strategy:
      fail-fast: false  # ensures the entire test matrix is run, even if one permutation fails
      matrix:
        os: [ ubuntu-latest ]
        version: [ net8.0 ]
    needs: build
    defaults:
      run:
        working-directory: dotnet

    runs-on: ${{ matrix.os }}
    steps:
    - uses: actions/checkout@v4
      with:
        fetch-depth: 0 # fetching all

    - name: Setup dotnet
      uses: actions/setup-dotnet@v4
      with:
        dotnet-version: '8.0.x'
    - name: Setup .NET 9.0
      uses: actions/setup-dotnet@v4
      with:
        dotnet-version: '9.0.x'

    - name: publish AOT testApp, assert static analysis warning count, and run the app
      shell: pwsh
      run: ./.tools/test-aot-compatibility.ps1 ${{ matrix.version }}
  openai-test:
    name: Run openai test
    runs-on: ubuntu-latest
    environment: dotnet
    defaults:
      run:
        working-directory: dotnet
    if: success() && (github.ref == 'refs/heads/main')
    needs: aot-test
    steps:
    - uses: actions/checkout@v4
      with:
        lfs: true
    - name: Set up Python 3.11
      uses: actions/setup-python@v5
      with:
        python-version: 3.11
    - name: Install jupyter and ipykernel
      run: |
        python -m pip install --upgrade pip
        python -m pip install jupyter
        python -m pip install ipykernel
    - name: list available kernels
      run: |
        python -m jupyter kernelspec list
    - uses: astral-sh/setup-uv@v5
      with:
        enable-cache: true
    - uses: actions/setup-python@v5
      with:
        python-version: "3.11"

    - name: Setup .NET 8.0
      uses: actions/setup-dotnet@v4
      with:
        dotnet-version: '8.0.x'
        global-json-file: dotnet/global.json
    - name: Setup .NET 9.0
      uses: actions/setup-dotnet@v4
      with:
        dotnet-version: '9.0.x'
    - name: Install dev certs
      run:  dotnet --version && dotnet dev-certs https --trust
    - name: Restore dependencies
      run: |
        dotnet restore -bl
    - name: Build
      run: |
        echo "Build AutoGen"
        dotnet build --no-restore --configuration Release -bl /p:SignAssembly=true
    - name: OpenAI Test
      run: dotnet test --no-build -bl --configuration Release --filter type!=integration
      env:
        AZURE_OPENAI_API_KEY: ${{ secrets.AZURE_OPENAI_API_KEY }}
        AZURE_OPENAI_ENDPOINT: ${{ secrets.AZURE_OPENAI_ENDPOINT }}
        AZURE_GPT_35_MODEL_ID: ${{ secrets.AZURE_GPT_35_MODEL_ID }}
        OEPNAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
    - name: Pack
      run: |
        echo "Create nightly build package"
        dotnet pack --no-build --configuration Release --output './output/nightly' -p:VersionSuffix=nightly-${{github.run_id}} -bl

        echo "Create release build package"
        dotnet pack --no-build --configuration Release --output './output/release' -bl

        echo "ls output directory"
        ls -R ./output
    - name: Upload package
      uses: actions/upload-artifact@v4
      with:
        name: nightly
        path: ./dotnet/output/nightly
    - name: Upload package
      uses: actions/upload-artifact@v4
      with:
        name: release
        path: ./dotnet/output/release
  publish:
    environment: dotnet-internal-feed
    name: Publish to nightly feeds
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: dotnet
    needs: openai-test
    steps:
    - name: Setup .NET
      uses: actions/setup-dotnet@v4
      with:
        dotnet-version: '6.0.x'
        source-url: https://devdiv.pkgs.visualstudio.com/DevDiv/_packaging/AutoGen/nuget/v3/index.json
      env:
        NUGET_AUTH_TOKEN: ${{ secrets.AZURE_DEVOPS_TOKEN }}
    - uses: actions/download-artifact@v4
      with:
        name: nightly
        path: ./dotnet/output/nightly
    - uses: actions/download-artifact@v4
      with:
        name: release
        path: ./dotnet/output/release
    - name: Publish nightly package to Azure Devops
      run: |
        echo "Publish nightly package to Azure Devops"
        echo "ls output directory"
        ls -R ./output/nightly
        dotnet nuget push --api-key AzureArtifacts ./output/nightly/*.nupkg --skip-duplicate
      env:
        AZURE_ARTIFACTS_FEED_URL: https://devdiv.pkgs.visualstudio.com/DevDiv/_packaging/AutoGen/nuget/v3/index.json
        NUGET_AUTH_TOKEN: ${{ secrets.AZURE_DEVOPS_TOKEN }}
      continue-on-error: true
    - name: Publish nightly package to github package
      run: |
        echo "Publish nightly package to github package"
        echo "ls output directory"
        ls -R ./output/nightly
        dotnet nuget push --api-key ${{ secrets.GITHUB_TOKEN }} --source "https://nuget.pkg.github.com/microsoft/index.json" ./output/nightly/*.nupkg --skip-duplicate
      continue-on-error: true
    - name: Publish nightly package to agentchat myget feed
      run: |
        echo "Publish nightly package to agentchat myget feed"
        echo "ls output directory"
        ls -R ./output/nightly
        dotnet nuget push --api-key ${{ secrets.MYGET_TOKEN }} --source "https://www.myget.org/F/agentchat/api/v3/index.json" ./output/nightly/*.nupkg --skip-duplicate
      env:
        MYGET_TOKEN: ${{ secrets.MYGET_TOKEN }}
      continue-on-error: true

dotnet-release perms .github/workflows/dotnet-release.yml
Triggers
workflow_dispatch, push
Runs on
ubuntu-latest
Jobs
build
Commands
  • python -m pip install --upgrade pip python -m pip install jupyter python -m pip install ipykernel
  • python -m jupyter kernelspec list
  • dotnet restore -bl
  • echo "Build AutoGen" dotnet build --no-restore --configuration Release -bl /p:SignAssembly=true
  • sudo dotnet dev-certs https --trust --no-password
  • dotnet test --no-build -bl --configuration Release
  • echo "Create release build package" dotnet pack --no-build --configuration Release --output './output/release' -bl echo "ls output directory" ls -R ./output
  • echo "Publish package to Nuget" echo "ls output directory" ls -R ./output/release # remove AutoGen.SourceGenerator.snupkg because it's an empty package rm ./output/release/AutoGen.SourceGenerator.*.snupkg dotnet nuget push --api-key ${{ secrets.AUTOGEN_NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json ./output/release/*.nupkg --skip-duplicate
View raw YAML
# This workflow will build a .NET project
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-net

name: dotnet-release

on:
  workflow_dispatch:
  push:
    branches:
      - release/dotnet/**

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}-${{ github.head_ref }}
  cancel-in-progress: true

permissions:
  contents: read
  packages: write

jobs:
  build:
    name: Build and release
    runs-on: ubuntu-latest
    environment: dotnet
    defaults:
      run:
        working-directory: dotnet
    steps:
    - uses: actions/checkout@v4
      with:
        lfs: true
    - name: Set up Python 3.11
      uses: actions/setup-python@v5
      with:
        python-version: 3.11
    - name: Install jupyter and ipykernel
      run: |
        python -m pip install --upgrade pip
        python -m pip install jupyter
        python -m pip install ipykernel
    - name: list available kernels
      run: |
        python -m jupyter kernelspec list
    - name: Setup .NET
      uses: actions/setup-dotnet@v4
      with:
        dotnet-version: '8.0.x'
    - name: Restore dependencies
      run: |
        dotnet restore -bl
    - name: Build
      run: |
        echo "Build AutoGen"
        dotnet build --no-restore --configuration Release -bl /p:SignAssembly=true
    - run: sudo dotnet dev-certs https --trust --no-password
    - name: Unit Test
      run: dotnet test --no-build -bl --configuration Release
      env:
        AZURE_OPENAI_API_KEY: ${{ secrets.AZURE_OPENAI_API_KEY }}
        AZURE_OPENAI_ENDPOINT: ${{ secrets.AZURE_OPENAI_ENDPOINT }}
        AZURE_GPT_35_MODEL_ID: ${{ secrets.AZURE_GPT_35_MODEL_ID }}
        OEPNAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
    - name: Pack
      run: |
        echo "Create release build package"
        dotnet pack --no-build --configuration Release --output './output/release' -bl

        echo "ls output directory"
        ls -R ./output
    - name: Publish package to Nuget
      run: |
        echo "Publish package to Nuget"
        echo "ls output directory"
        ls -R ./output/release
        # remove AutoGen.SourceGenerator.snupkg because it's an empty package
        rm ./output/release/AutoGen.SourceGenerator.*.snupkg
        dotnet nuget push --api-key ${{ secrets.AUTOGEN_NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json ./output/release/*.nupkg --skip-duplicate
integration matrix .github/workflows/integration.yml
Triggers
workflow_dispatch
Runs on
ubuntu-latest
Jobs
test
Matrix
package→ ./packages/autogen-agentchat, ./packages/autogen-core, ./packages/autogen-ext
Actions
astral-sh/setup-uv
Commands
  • uv sync --locked --all-extras echo "PKG_NAME=$(basename '${{ matrix.package }}')" >> $GITHUB_ENV
  • source ${{ github.workspace }}/python/.venv/bin/activate poe --directory ${{ matrix.package }} test
  • mv ${{ matrix.package }}/coverage.xml coverage_${{ env.PKG_NAME }}.xml
View raw YAML
name: Integration

on:
  workflow_dispatch:
    inputs:
      branch:
        description: 'Branch to run tests'
        required: true
        type: string

jobs:
  test:
    runs-on: ubuntu-latest
    environment: integration
    strategy:
      matrix:
        package:
          [
            "./packages/autogen-core",
            "./packages/autogen-ext",
            "./packages/autogen-agentchat",
          ]
    steps:
      - uses: actions/checkout@v4
        with:
          ref: ${{ github.event.inputs.branch }}
      - uses: astral-sh/setup-uv@v5
        with:
          enable-cache: true
      - uses: actions/setup-python@v5
        with:
          python-version: "3.11"
      - name: Run uv sync
        run: |
          uv sync --locked --all-extras
          echo "PKG_NAME=$(basename '${{ matrix.package }}')" >> $GITHUB_ENV

        working-directory: ./python
      - name: Run task
        run: |
          source ${{ github.workspace }}/python/.venv/bin/activate
          poe --directory ${{ matrix.package }} test
        working-directory: ./python

      - name: Move coverage file
        run: |
          mv ${{ matrix.package }}/coverage.xml coverage_${{ env.PKG_NAME }}.xml
        working-directory: ./python

      - name: Upload coverage artifact
        uses: actions/upload-artifact@v4
        with:
          name: coverage-${{ env.PKG_NAME }}
          path: ./python/coverage_${{ env.PKG_NAME }}.xml
issue-user-responded .github/workflows/issue-user-responded.yml
Triggers
issue_comment
Runs on
ubuntu-latest
Jobs
label_issues
Commands
  • gh issue edit "$NUMBER" --remove-label "$LABELS"
View raw YAML
name: Remove awaiting-op-response label if op responded
on:
  issue_comment:
    types: [created]
jobs:
  label_issues:
    runs-on: ubuntu-latest
    permissions:
      issues: write
      pull-requests: write
    steps:
      - run: gh issue edit "$NUMBER" --remove-label "$LABELS"
        if: ${{ github.event.comment.user.login == github.event.issue.user.login && contains(github.event.issue.labels.*.name, 'awaiting-op-response') }}
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          GH_REPO: ${{ github.repository }}
          NUMBER: ${{ github.event.issue.number }}
          LABELS: awaiting-op-response
lfs-check perms .github/workflows/lfs-check.yml
Triggers
pull_request
Runs on
ubuntu-latest
Jobs
lfs-check
Commands
  • git lfs fsck
View raw YAML
name: "Git LFS Check"

on: pull_request
permissions: {}
jobs:
  lfs-check:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          lfs: true
      - name: "Check Git LFS files for consistency, if you see error like 'pointer: unexpectedGitObject ... should have been a pointer but was not', please install Git LFS locally, delete the problematic file, and then add it back again. This ensures it's properly tracked."
        run: |
          git lfs fsck
pytest-mem0 .github/workflows/pytest-mem0.yml
Triggers
push, pull_request
Runs on
ubuntu-latest
Jobs
test
Actions
codecov/codecov-action
Commands
  • # Give Neo4j some extra time to start up sleep 10 # Try to connect to Neo4j timeout 30s bash -c 'until curl -s http://localhost:7474 > /dev/null; do sleep 1; done'
  • python -m pip install --upgrade pip # Install core packages first (in the right order) cd python/packages/autogen-core pip install -e . cd ../autogen-agentchat pip install -e . # Now install autogen-ext with its dependencies cd ../autogen-ext pip install -e ".[dev,mem0,mem0-local]" # Install test dependencies pip install pytest pytest-asyncio pytest-cov pip install python-dotenv # Install dependencies for complex configuration tests pip install "openai>=1.0.0" pip install deepseek-ai
  • echo "NEO4J_PASSWORD=password" >> $GITHUB_ENV
  • cd python/packages/autogen-ext pytest --cov=autogen_ext.memory.mem0 tests/memory/test_mem0.py -v --cov-report=xml
View raw YAML
name: Mem0 Memory Tests

on:
  # Run on pushes to any branch
  push:
  # Also run on pull requests to main
  pull_request:
    branches:
      - main

jobs:
  test:
    runs-on: ubuntu-latest

    services:
      neo4j:
        image: neo4j:5.26.6
        ports:
          - 7474:7474    # HTTP
          - 7687:7687    # BOLT
        env:
          NEO4J_AUTH: neo4j/password
          NEO4J_dbms_security_procedures_unrestricted: apoc.*
          # Add this to ensure Neo4j is ready for connections quickly
          NEO4J_dbms_memory_pagecache_size: 100M
          NEO4J_dbms_memory_heap_initial__size: 100M
          NEO4J_dbms_memory_heap_max__size: 500M
        # Try a different health check approach
        options: >-
          --health-cmd "wget -O /dev/null -q http://localhost:7474 || exit 1"
          --health-interval 5s
          --health-timeout 15s
          --health-retries 10
          --health-start-period 30s

    steps:
      - name: Check out repository
        uses: actions/checkout@v3

      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.11'

      - name: Wait for Neo4j
        run: |
          # Give Neo4j some extra time to start up
          sleep 10
          # Try to connect to Neo4j
          timeout 30s bash -c 'until curl -s http://localhost:7474 > /dev/null; do sleep 1; done'

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip

          # Install core packages first (in the right order)
          cd python/packages/autogen-core
          pip install -e .

          cd ../autogen-agentchat
          pip install -e .

          # Now install autogen-ext with its dependencies
          cd ../autogen-ext
          pip install -e ".[dev,mem0,mem0-local]"

          # Install test dependencies
          pip install pytest pytest-asyncio pytest-cov
          pip install python-dotenv

          # Install dependencies for complex configuration tests
          pip install "openai>=1.0.0"
          pip install deepseek-ai

      # Update test config to match the simplified Neo4j setup
      - name: Update Neo4j password in tests
        run: |
          echo "NEO4J_PASSWORD=password" >> $GITHUB_ENV

      - name: Run tests with coverage
        # env:
        #   MEM0_API_KEY: ${{ secrets.MEM0_API_KEY }}
        #   SF_API_KEY: ${{ secrets.SF_API_KEY }}
        #   DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}
        run: |
          cd python/packages/autogen-ext
          pytest --cov=autogen_ext.memory.mem0 tests/memory/test_mem0.py -v --cov-report=xml

      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@v3
        with:
          file: ./python/packages/autogen-ext/coverage.xml
          name: codecov-mem0
          fail_ci_if_error: false
pytest-redis-memory .github/workflows/pytest-redis-memory.yml
Triggers
push, pull_request
Runs on
ubuntu-latest
Jobs
test
Actions
codecov/codecov-action
Commands
  • # give Redis time to start sleep 5 # Wait for Redis to respond to curl (expecting empty reply, code 52) timeout 5s bash -c 'until curl -s localhost:6379 || [ $? -eq 52 ]; do sleep 1; done'
  • python -m pip install --upgrade pip # install core packages cd python/packages/autogen-core pip install -e . cd ../autogen-agentchat pip install -e . # install autogen-ext with its dependencies cd ../autogen-ext pip install -e ".[dev,redisvl]" # install test dependencies pip install pytest pytest-asyncio pytest-cov # install additional dependencies for redis memory tests pip install sentence-transformers
  • cd python/packages/autogen-ext pytest --cov=autogen_ext.memory.redis tests/memory/test_redis_memory.py -v --cov-report=xml
View raw YAML
name: Redis Memory Tests

on:
  push:
  pull_request:
    branches:
      - main

jobs:
  test:
    runs-on: ubuntu-latest

    services:
      redis:
        image: redis:latest
        ports:
          - 6379:6379
        env:
          REDIS_URL: redis://localhost:6379

    steps:
      - name: Check out repository
        uses: actions/checkout@v3

      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.11'

      - name: Wait for Redis
        run: |
          # give Redis time to start
          sleep 5
          # Wait for Redis to respond to curl (expecting empty reply, code 52)
          timeout 5s bash -c 'until curl -s localhost:6379 || [ $? -eq 52 ]; do sleep 1; done'
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip

          # install core packages
          cd python/packages/autogen-core
          pip install -e .

          cd ../autogen-agentchat
          pip install -e .

          # install autogen-ext with its dependencies
          cd ../autogen-ext
          pip install -e ".[dev,redisvl]"

          # install test dependencies
          pip install pytest pytest-asyncio pytest-cov

          # install additional dependencies for redis memory tests
          pip install sentence-transformers

      - name: Run tests with coverage
        run: |
          cd python/packages/autogen-ext
          pytest --cov=autogen_ext.memory.redis tests/memory/test_redis_memory.py -v --cov-report=xml

      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@v3
        with:
          file: ./python/packages/autogen-ext/coverage.xml
          name: codecov-redis-memory
          fail_ci_if_error: false
python-package-0.2 matrix perms .github/workflows/python-package-0.2.yml
Triggers
push, workflow_dispatch
Runs on
${{ matrix.os }}
Jobs
deploy
Matrix
os, python-version→ 3.1, ubuntu-latest
Actions
pypa/gh-action-pypi-publish
Commands
  • pip install twine python setup.py sdist bdist_wheel
View raw YAML
name: AgentChat 0.2 Pypi Package

on:
  push:
    tags:
      - "0.2.*"
  workflow_dispatch:
    inputs:
      tag:
        description: 'Tag to deploy the package'
        required: true
permissions: {}
jobs:
  deploy:
    strategy:
      matrix:
        os: ["ubuntu-latest"]
        python-version: [3.10]
    runs-on: ${{ matrix.os }}
    environment:
      name: package
      url: https://pypi.org/p/autogen-agentchat
    permissions:
      id-token: write
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          ref: ${{ github.event.inputs.tag }}
      - name: Build
        shell: pwsh
        run: |
          pip install twine
          python setup.py sdist bdist_wheel
      - name: Publish package to PyPI
        uses: pypa/gh-action-pypi-publish@release/v1
single-python-package .github/workflows/single-python-package.yml
Triggers
workflow_dispatch
Runs on
ubuntu-latest
Jobs
deploy-package
Actions
astral-sh/setup-uv, pypa/gh-action-pypi-publish
Commands
  • git show-ref --verify refs/tags/${{ github.event.inputs.ref }}
  • uv build --package ${{ github.event.inputs.package }} --out-dir dist/
View raw YAML
name: Deploy single package

on:
  workflow_dispatch:
    inputs:
      package:
        description: "Select the package to deploy"
        required: true
        type: choice
        options:
          - autogen-agentchat
          - autogen-core
          - autogen-ext
          - agbench
          - autogen-studio
          - magentic-one-cli
          - pyautogen
      ref:
        description: "Tag to deploy"
        required: true

jobs:
  deploy-package:
    environment:
      name: package
    runs-on: ubuntu-latest
    permissions:
      id-token: write
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          ref: ${{ github.event.inputs.ref }}
      # Require ref to be a tag
      - run: git show-ref --verify refs/tags/${{ github.event.inputs.ref }}
      - uses: astral-sh/setup-uv@v5
        with:
          enable-cache: true
      - run: uv build --package ${{ github.event.inputs.package }} --out-dir dist/
        working-directory: python
      - name: Publish package to PyPI
        uses: pypa/gh-action-pypi-publish@release/v1
        with:
          packages-dir: python/dist/