mirror of
https://github.com/trycua/computer.git
synced 2026-04-23 07:00:47 -05:00
227 lines
9.5 KiB
YAML
227 lines
9.5 KiB
YAML
name: Publish All Packages
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- 'v*' # For global releases (vX.Y.Z format)
|
|
workflow_dispatch:
|
|
inputs:
|
|
version:
|
|
description: 'Version to publish (without v prefix)'
|
|
required: true
|
|
default: '0.1.0'
|
|
packages:
|
|
description: 'Packages to publish (comma-separated)'
|
|
required: false
|
|
default: 'core,pylume,computer,som,agent,computer-server'
|
|
|
|
# Adding permissions at workflow level
|
|
permissions:
|
|
contents: write
|
|
|
|
jobs:
|
|
setup:
|
|
runs-on: macos-latest
|
|
outputs:
|
|
version: ${{ steps.get-version.outputs.version }}
|
|
publish_core: ${{ steps.set-packages.outputs.publish_core }}
|
|
publish_pylume: ${{ steps.set-packages.outputs.publish_pylume }}
|
|
publish_computer: ${{ steps.set-packages.outputs.publish_computer }}
|
|
publish_som: ${{ steps.set-packages.outputs.publish_som }}
|
|
publish_agent: ${{ steps.set-packages.outputs.publish_agent }}
|
|
publish_computer_server: ${{ steps.set-packages.outputs.publish_computer_server }}
|
|
steps:
|
|
- name: Determine version
|
|
id: get-version
|
|
run: |
|
|
if [ "${{ github.event_name }}" == "push" ]; then
|
|
# Extract version from tag (for global releases)
|
|
if [[ "${{ github.ref }}" =~ ^refs/tags/v([0-9]+\.[0-9]+\.[0-9]+) ]]; then
|
|
VERSION=${BASH_REMATCH[1]}
|
|
else
|
|
echo "Invalid tag format for global release"
|
|
exit 1
|
|
fi
|
|
else
|
|
# Use version from workflow dispatch
|
|
VERSION=${{ github.event.inputs.version }}
|
|
fi
|
|
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
|
echo "Using version: $VERSION"
|
|
|
|
- name: Determine packages to publish
|
|
id: set-packages
|
|
run: |
|
|
# Default to all packages for tag-based releases
|
|
if [ "${{ github.event_name }}" == "push" ]; then
|
|
PACKAGES="core,pylume,computer,som,agent,computer-server"
|
|
else
|
|
# Use packages from workflow dispatch
|
|
PACKAGES="${{ github.event.inputs.packages }}"
|
|
fi
|
|
|
|
# Set individual flags for each package
|
|
echo "publish_core=$(echo $PACKAGES | grep -q "core" && echo "true" || echo "false")" >> $GITHUB_OUTPUT
|
|
echo "publish_pylume=$(echo $PACKAGES | grep -q "pylume" && echo "true" || echo "false")" >> $GITHUB_OUTPUT
|
|
echo "publish_computer=$(echo $PACKAGES | grep -q "computer" && echo "true" || echo "false")" >> $GITHUB_OUTPUT
|
|
echo "publish_som=$(echo $PACKAGES | grep -q "som" && echo "true" || echo "false")" >> $GITHUB_OUTPUT
|
|
echo "publish_agent=$(echo $PACKAGES | grep -q "agent" && echo "true" || echo "false")" >> $GITHUB_OUTPUT
|
|
echo "publish_computer_server=$(echo $PACKAGES | grep -q "computer-server" && echo "true" || echo "false")" >> $GITHUB_OUTPUT
|
|
|
|
echo "Publishing packages: $PACKAGES"
|
|
|
|
publish-core:
|
|
needs: setup
|
|
if: ${{ needs.setup.outputs.publish_core == 'true' }}
|
|
uses: ./.github/workflows/publish-core.yml
|
|
with:
|
|
version: ${{ needs.setup.outputs.version }}
|
|
secrets: inherit
|
|
|
|
# Add a delay to ensure PyPI has registered the new core version
|
|
wait-for-core:
|
|
needs: [setup, publish-core]
|
|
if: ${{ needs.setup.outputs.publish_core == 'true' && (needs.setup.outputs.publish_computer == 'true' || needs.setup.outputs.publish_agent == 'true') }}
|
|
runs-on: macos-latest
|
|
steps:
|
|
- name: Wait for PyPI to update
|
|
run: |
|
|
echo "Waiting for PyPI to register the new core version..."
|
|
sleep 60 # Wait 60 seconds for PyPI to update its index
|
|
|
|
publish-pylume:
|
|
needs: setup
|
|
if: ${{ needs.setup.outputs.publish_pylume == 'true' }}
|
|
uses: ./.github/workflows/publish-pylume.yml
|
|
with:
|
|
version: ${{ needs.setup.outputs.version }}
|
|
secrets: inherit
|
|
|
|
# Add a delay to ensure PyPI has registered the new pylume version
|
|
wait-for-pylume:
|
|
needs: [setup, publish-pylume]
|
|
if: ${{ needs.setup.outputs.publish_pylume == 'true' && (needs.setup.outputs.publish_computer == 'true' || needs.setup.outputs.publish_som == 'true') }}
|
|
runs-on: macos-latest
|
|
steps:
|
|
- name: Wait for PyPI to update
|
|
run: |
|
|
echo "Waiting for PyPI to register the new pylume version..."
|
|
sleep 60 # Wait 60 seconds for PyPI to update its index
|
|
|
|
publish-computer:
|
|
needs: [setup, publish-core, publish-pylume, wait-for-core, wait-for-pylume]
|
|
if: ${{ needs.setup.outputs.publish_computer == 'true' }}
|
|
uses: ./.github/workflows/publish-computer.yml
|
|
with:
|
|
version: ${{ needs.setup.outputs.version }}
|
|
secrets: inherit
|
|
|
|
publish-som:
|
|
needs: [setup, publish-pylume, wait-for-pylume]
|
|
if: ${{ needs.setup.outputs.publish_som == 'true' }}
|
|
uses: ./.github/workflows/publish-som.yml
|
|
with:
|
|
version: ${{ needs.setup.outputs.version }}
|
|
secrets: inherit
|
|
|
|
# Add a delay to ensure PyPI has registered the new computer and som versions
|
|
wait-for-deps:
|
|
needs: [setup, publish-computer, publish-som]
|
|
if: ${{ (needs.setup.outputs.publish_computer == 'true' || needs.setup.outputs.publish_som == 'true') && needs.setup.outputs.publish_agent == 'true' }}
|
|
runs-on: macos-latest
|
|
steps:
|
|
- name: Wait for PyPI to update
|
|
run: |
|
|
echo "Waiting for PyPI to register new dependency versions..."
|
|
sleep 60 # Wait 60 seconds for PyPI to update its index
|
|
|
|
publish-agent:
|
|
needs: [setup, publish-core, publish-computer, publish-som, wait-for-core, wait-for-deps]
|
|
if: ${{ needs.setup.outputs.publish_agent == 'true' }}
|
|
uses: ./.github/workflows/publish-agent.yml
|
|
with:
|
|
version: ${{ needs.setup.outputs.version }}
|
|
secrets: inherit
|
|
|
|
publish-computer-server:
|
|
needs: [setup, publish-computer]
|
|
if: ${{ needs.setup.outputs.publish_computer_server == 'true' }}
|
|
uses: ./.github/workflows/publish-computer-server.yml
|
|
with:
|
|
version: ${{ needs.setup.outputs.version }}
|
|
secrets: inherit
|
|
|
|
# Create a global release for the entire CUA project
|
|
create-global-release:
|
|
needs: [setup, publish-core, publish-pylume, publish-computer, publish-som, publish-agent, publish-computer-server]
|
|
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') }}
|
|
runs-on: macos-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Create Summary Release Notes
|
|
id: release_notes
|
|
run: |
|
|
VERSION=${{ needs.setup.outputs.version }}
|
|
|
|
# Create the release notes file
|
|
echo "# CUA v${VERSION} Release" > release_notes.md
|
|
echo "" >> release_notes.md
|
|
echo "This is a global release of the Computer Universal Automation (CUA) project." >> release_notes.md
|
|
echo "" >> release_notes.md
|
|
|
|
echo "## Released Packages" >> release_notes.md
|
|
echo "" >> release_notes.md
|
|
|
|
# Add links to individual package releases
|
|
if [[ "${{ needs.setup.outputs.publish_core }}" == "true" ]]; then
|
|
echo "- [cua-core v${VERSION}](https://github.com/${{ github.repository }}/releases/tag/core-v${VERSION})" >> release_notes.md
|
|
fi
|
|
|
|
if [[ "${{ needs.setup.outputs.publish_pylume }}" == "true" ]]; then
|
|
echo "- [pylume v${VERSION}](https://github.com/${{ github.repository }}/releases/tag/pylume-v${VERSION})" >> release_notes.md
|
|
fi
|
|
|
|
if [[ "${{ needs.setup.outputs.publish_computer }}" == "true" ]]; then
|
|
echo "- [cua-computer v${VERSION}](https://github.com/${{ github.repository }}/releases/tag/computer-v${VERSION})" >> release_notes.md
|
|
fi
|
|
|
|
if [[ "${{ needs.setup.outputs.publish_som }}" == "true" ]]; then
|
|
echo "- [cua-som v${VERSION}](https://github.com/${{ github.repository }}/releases/tag/som-v${VERSION})" >> release_notes.md
|
|
fi
|
|
|
|
if [[ "${{ needs.setup.outputs.publish_agent }}" == "true" ]]; then
|
|
echo "- [cua-agent v${VERSION}](https://github.com/${{ github.repository }}/releases/tag/agent-v${VERSION})" >> release_notes.md
|
|
fi
|
|
|
|
if [[ "${{ needs.setup.outputs.publish_computer_server }}" == "true" ]]; then
|
|
echo "- [cua-computer-server v${VERSION}](https://github.com/${{ github.repository }}/releases/tag/computer-server-v${VERSION})" >> release_notes.md
|
|
fi
|
|
|
|
echo "" >> release_notes.md
|
|
echo "## Installation" >> release_notes.md
|
|
echo "" >> release_notes.md
|
|
echo "### Core Libraries" >> release_notes.md
|
|
echo "```bash" >> release_notes.md
|
|
echo "pip install cua-core==${VERSION}" >> release_notes.md
|
|
echo "pip install cua-computer==${VERSION}" >> release_notes.md
|
|
echo "pip install pylume==${VERSION}" >> release_notes.md
|
|
echo "```" >> release_notes.md
|
|
echo "" >> release_notes.md
|
|
echo "### Agent with SOM (Recommended)" >> release_notes.md
|
|
echo "```bash" >> release_notes.md
|
|
echo "pip install cua-agent[som]==${VERSION}" >> release_notes.md
|
|
echo "```" >> release_notes.md
|
|
|
|
echo "Release notes created:"
|
|
cat release_notes.md
|
|
|
|
- name: Create GitHub Global Release
|
|
uses: softprops/action-gh-release@v1
|
|
with:
|
|
name: "CUA v${{ needs.setup.outputs.version }}"
|
|
body_path: release_notes.md
|
|
draft: false
|
|
prerelease: false
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |