Skip to content

Build and Release

Build and Release #195

Workflow file for this run

name: Build and Release
on:
release:
types: [published]
jobs:
test-examples:
name: Run Example Tests
defaults:
run:
working-directory: ./python
strategy:
matrix:
os: [ubuntu-latest]
python-version: ["3.10"]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@master
- uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
- name: Run Tests
env:
DOCKER_USER: ${{secrets.DOCKER_USER}}
OPENAI_API_KEY: ${{secrets.OPENAI_API_KEY}}
JULEP_API_KEY: ${{secrets.JULEP_API_KEY}}
JULEP_API_URL: ${{secrets.JULEP_API_URL}}
COMPOSIO_API_KEY: ${{secrets.COMPOSIO_API_KEY_PROD}}
run: |
sudo apt-get update --fix-missing
sudo apt-get autoremove
sudo apt-get autoclean
python -m pip install --upgrade pip pipenv pytest
ls -1 plugins | awk '$0="plugins/"$0"/"' | xargs -L1 pipenv run pip3 install
pipenv install
pipenv run pip3 install '.[all]'
CI=false COMPOSIO_BASE_URL=https://backend.composio.dev/api pipenv run pytest -vv tests/test_example.py
publish-core:
name: Create Framework & Plugin Releases
needs: test-examples
defaults:
run:
working-directory: ./python
strategy:
matrix:
os: [ubuntu-latest]
python-version: ["3.10"]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@master
- uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
- name: Build
run: |
sudo apt-get update --fix-missing
sudo apt-get autoremove
sudo apt-get autoclean
python -m pip install --upgrade pip
pip install twine build
# Build dist
python -m build
- name: Publish Core to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
user: ${{ secrets.PYPI_USERNAME }}
password: ${{ secrets.PYPI_PASSWORD }}
skip-existing: true
packages-dir: python/dist/
publish-plugins:
needs: publish-core
name: Create Plugin Releases
defaults:
run:
working-directory: ./python
strategy:
max-parallel: 1
matrix:
os: [ubuntu-latest]
python-version: ["3.10"]
package:
[
autogen,
camel,
claude,
crew_ai,
griptape,
julep,
langchain,
llamaindex,
lyzr,
openai,
praisonai,
langgraph,
]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Build ${{ matrix.package }}
run: |
sudo apt-get update --fix-missing
sudo apt-get autoremove
sudo apt-get autoclean
python -m pip install --upgrade pip
pip install twine build
# Build dist
cd plugins/${{ matrix.package }}
python -m build
- name: Publish ${{ matrix.package }} to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
user: ${{ secrets.PYPI_USERNAME }}
password: ${{ secrets.PYPI_PASSWORD }}
skip-existing: true
packages-dir: python/plugins/${{ matrix.package }}/dist/
publish-swe:
needs: publish-core
name: Create SWE Toolkit Release
defaults:
run:
working-directory: ./python/swe
strategy:
max-parallel: 1
matrix:
os: [ubuntu-latest]
python-version: ["3.10"]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Build
run: |
sudo apt-get update --fix-missing
sudo apt-get autoremove
sudo apt-get autoclean
python -m pip install --upgrade pip
pip install twine build
# Build dist
python -m build
- name: Publish SWE Kit to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
user: ${{ secrets.PYPI_USERNAME }}
password: ${{ secrets.PYPI_PASSWORD }}
skip-existing: true
packages-dir: python/swe/dist/
publish-cli:
name: Build and upload CLI
needs: publish-core
permissions: write-all
strategy:
matrix:
os: [ubuntu-latest, macos-12, macos-14, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout code
uses: actions/checkout@v2
- uses: actions/setup-python@v3
with:
python-version: "3.10"
- name: Build for ${{ matrix.os }}
run: |
python -m pip install --upgrade pip
pip install pyinstaller
cd python/
pip3 install .
# Build CLI
pyinstaller composio/cli/__main__.py
# Ubuntu Release
- if: matrix.os == 'ubuntu-latest'
run: |
cd python/
mv dist/__main__ dist/bin
mv dist/bin/__main__ dist/bin/composio
cd dist/
zip -r composio-linux-amd64.zip bin/*
rm -rf bin/
- if: matrix.os == 'ubuntu-latest'
name: Upload artifact
uses: softprops/action-gh-release@v2
with:
files: python/dist/composio-linux-amd64.zip
# Mac Intel Release
- if: matrix.os == 'macos-12'
run: |
cd python/
mv dist/__main__ dist/bin
mv dist/bin/__main__ dist/bin/composio
cd dist/
zip -r composio-darwin-amd64.zip bin/*
rm -rf bin/
- if: matrix.os == 'macos-12'
name: Upload artifact
uses: softprops/action-gh-release@v2
with:
files: python/dist/composio-darwin-amd64.zip
# Mac ARM Release
- if: matrix.os == 'macos-14'
run: |
cd python/
mv dist/__main__ dist/bin
mv dist/bin/__main__ dist/bin/composio
cd dist/
zip -r composio-darwin-arm64.zip bin/*
rm -rf bin/
- if: matrix.os == 'macos-14'
name: Upload artifact
uses: softprops/action-gh-release@v2
with:
files: python/dist/composio-darwin-arm64.zip
# # Windows release
# - if: matrix.os == 'windows-latest'
# run: |
# cd python/
# mv dist/__main__ dist/bin
# mv dist/bin/__main__.exe dist/bin/composio.exe
# cd dist/
# zip -r composio-win.zip bin/*
# rm -rf bin/
# - if: matrix.os == 'windows-latest'
# name: Upload artifact
# uses: softprops/action-gh-release@v2
# with:
# files: python/dist/composio-win.zip
publish-images:
name: Build and publish docker images
needs: publish-core
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Docker login
env:
DOCKER_USER: ${{secrets.DOCKER_USER}}
DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}}
run: |
echo $DOCKER_PASSWORD | docker login --username $DOCKER_USER --password-stdin
- name: Set up support for multi platform build
run: |
docker run --privileged --rm tonistiigi/binfmt --install all
docker buildx create --use --name multibuild
docker buildx inspect --bootstrap
- name: Publishing tool server images
run: |
cd python/dockerfiles/
VERSION=$(cat ../composio/__init__.py | grep version | cut -b 16- | rev | cut -b 2- | rev) make publish
publish-e2b:
name: Publish E2B template
needs: publish-core
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- uses: actions/setup-node@v4
- name: Install E2B
run: |
npm install -g @e2b/cli@latest
- name: Publishing Template
env:
E2B_ACCESS_TOKEN: ${{secrets.E2B_ACCESS_TOKEN}}
run: |
cd python/dockerfiles/
make e2b