Manual Build Sandbox Image #6
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Manual Build Sandbox Image | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| build_type: | |
| description: "Image type, e.g., base or all" | |
| required: true | |
| default: "base" | |
| platform: | |
| description: "Docker architecture platform (used for multi-arch builds)" | |
| required: true | |
| default: "linux/amd64" | |
| type: choice | |
| options: | |
| - linux/amd64 | |
| - linux/arm64 | |
| single_arch: | |
| description: "Single architecture build (forces amd64, no multi-arch manifest merge)" | |
| required: true | |
| default: "false" | |
| type: choice | |
| options: | |
| - "true" | |
| - "false" | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| environment: prod | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| # Login to DockerHub | |
| - name: Log in to DockerHub | |
| env: | |
| DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} | |
| DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} | |
| if: ${{ env.DOCKER_USERNAME != '' && env.DOCKER_PASSWORD != '' }} | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: docker.io | |
| username: ${{ env.DOCKER_USERNAME }} | |
| password: ${{ env.DOCKER_PASSWORD }} | |
| # Login to Aliyun ACR | |
| - name: Log in to Aliyun ACR | |
| env: | |
| ALIYUN_ACR_USERNAME: ${{ secrets.ALIYUN_ACR_USERNAME }} | |
| ALIYUN_ACR_PASSWORD: ${{ secrets.ALIYUN_ACR_PASSWORD }} | |
| if: ${{ env.ALIYUN_ACR_USERNAME != '' && env.ALIYUN_ACR_PASSWORD != '' }} | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: agentscope-registry.ap-southeast-1.cr.aliyuncs.com | |
| username: ${{ env.ALIYUN_ACR_USERNAME }} | |
| password: ${{ env.ALIYUN_ACR_PASSWORD }} | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.11" | |
| - name: Install dependencies | |
| run: | | |
| pip install -r requirements.txt | |
| pip install requests | |
| - name: Run build script | |
| env: | |
| AUTO_BUILD: "true" | |
| run: | | |
| PLATFORM_INPUT="${{ github.event.inputs.platform }}" | |
| SINGLE="${{ github.event.inputs.single_arch }}" | |
| if [ "$SINGLE" = "true" ]; then | |
| PLATFORM_INPUT="linux/amd64" | |
| fi | |
| python src/agentscope_runtime/sandbox/build_script.py \ | |
| "${{ github.event.inputs.build_type }}" \ | |
| --platform "$PLATFORM_INPUT" | |
| - name: Tag & Push Images | |
| env: | |
| DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} | |
| DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} | |
| ALIYUN_ACR_USERNAME: ${{ secrets.ALIYUN_ACR_USERNAME }} | |
| ALIYUN_ACR_PASSWORD: ${{ secrets.ALIYUN_ACR_PASSWORD }} | |
| run: | | |
| DATE_TAG=$(date +%Y%m%d) | |
| SINGLE="${{ github.event.inputs.single_arch }}" | |
| ARCH_TAG="${{ github.event.inputs.platform }}" | |
| if [ "$SINGLE" = "true" ]; then | |
| ARCH_TAG="linux/amd64" | |
| fi | |
| IMAGE_BASE=$(python -c "from src.agentscope_runtime.sandbox.registry import SandboxRegistry; print(SandboxRegistry.get_image_by_type('${{ github.event.inputs.build_type }}'))") | |
| if [ -n "$DOCKER_USERNAME" ] && [ -n "$DOCKER_PASSWORD" ]; then | |
| if [ "$SINGLE" = "true" ]; then | |
| docker tag $IMAGE_BASE docker.io/agentscope/${IMAGE_BASE}:${DATE_TAG} | |
| docker push docker.io/agentscope/${IMAGE_BASE}:${DATE_TAG} | |
| else | |
| ARCH_SUFFIX=$(echo "$ARCH_TAG" | tr '/' '-') | |
| docker tag $IMAGE_BASE docker.io/agentscope/${IMAGE_BASE}:${DATE_TAG}-${ARCH_SUFFIX} | |
| docker push docker.io/agentscope/${IMAGE_BASE}:${DATE_TAG}-${ARCH_SUFFIX} | |
| fi | |
| fi | |
| if [ -n "$ALIYUN_ACR_USERNAME" ] && [ -n "$ALIYUN_ACR_PASSWORD" ]; then | |
| if [ "$SINGLE" = "true" ]; then | |
| docker tag $IMAGE_BASE agentscope-registry.ap-southeast-1.cr.aliyuncs.com/agentscope/${IMAGE_BASE}:${DATE_TAG} | |
| docker push agentscope-registry.ap-southeast-1.cr.aliyuncs.com/agentscope/${IMAGE_BASE}:${DATE_TAG} | |
| else | |
| ARCH_SUFFIX=$(echo "$ARCH_TAG" | tr '/' '-') | |
| docker tag $IMAGE_BASE agentscope-registry.ap-southeast-1.cr.aliyuncs.com/agentscope/${IMAGE_BASE}:${DATE_TAG}-${ARCH_SUFFIX} | |
| docker push agentscope-registry.ap-southeast-1.cr.aliyuncs.com/agentscope/${IMAGE_BASE}:${DATE_TAG}-${ARCH_SUFFIX} | |
| fi | |
| fi | |
| - name: Create Multi-arch Manifest for DockerHub | |
| env: | |
| DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} | |
| DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} | |
| if: ${{ github.event.inputs.single_arch == 'false' && env.DOCKER_USERNAME != '' && env.DOCKER_PASSWORD != '' }} | |
| run: | | |
| DATE_TAG=$(date +%Y%m%d) | |
| IMAGE_BASE=$(python -c "from src.agentscope_runtime.sandbox.registry import SandboxRegistry; print(SandboxRegistry.get_image_by_type('${{ github.event.inputs.build_type }}'))") | |
| AMD_TAG="docker.io/agentscope/${IMAGE_BASE}:${DATE_TAG}-linux-amd64" | |
| ARM_TAG="docker.io/agentscope/${IMAGE_BASE}:${DATE_TAG}-linux-arm64" | |
| COMMON_TAG="docker.io/agentscope/${IMAGE_BASE}:${DATE_TAG}" | |
| if docker manifest inspect "$AMD_TAG" >/dev/null 2>&1 && docker manifest inspect "$ARM_TAG" >/dev/null 2>&1; then | |
| echo "Creating multi-arch manifest for $COMMON_TAG" | |
| docker manifest create "$COMMON_TAG" --amend "$AMD_TAG" --amend "$ARM_TAG" | |
| docker manifest push "$COMMON_TAG" | |
| else | |
| echo "Missing architecture image in DockerHub, skipping manifest creation." | |
| fi | |
| - name: Create Multi-arch Manifest for Aliyun ACR | |
| env: | |
| ALIYUN_ACR_USERNAME: ${{ secrets.ALIYUN_ACR_USERNAME }} | |
| ALIYUN_ACR_PASSWORD: ${{ secrets.ALIYUN_ACR_PASSWORD }} | |
| if: ${{ github.event.inputs.single_arch == 'false' && env.ALIYUN_ACR_USERNAME != '' && env.ALIYUN_ACR_PASSWORD != '' }} | |
| run: | | |
| DATE_TAG=$(date +%Y%m%d) | |
| IMAGE_BASE=$(python -c "from src.agentscope_runtime.sandbox.registry import SandboxRegistry; print(SandboxRegistry.get_image_by_type('${{ github.event.inputs.build_type }}'))") | |
| REG="agentscope-registry.ap-southeast-1.cr.aliyuncs.com/agentscope" | |
| AMD_TAG="${REG}/${IMAGE_BASE}:${DATE_TAG}-linux-amd64" | |
| ARM_TAG="${REG}/${IMAGE_BASE}:${DATE_TAG}-linux-arm64" | |
| COMMON_TAG="${REG}/${IMAGE_BASE}:${DATE_TAG}" | |
| if docker manifest inspect "$AMD_TAG" >/dev/null 2>&1 && docker manifest inspect "$ARM_TAG" >/dev/null 2>&1; then | |
| echo "Creating multi-arch manifest for $COMMON_TAG" | |
| docker manifest create "$COMMON_TAG" --amend "$AMD_TAG" --amend "$ARM_TAG" | |
| docker manifest push "$COMMON_TAG" | |
| else | |
| echo "Missing architecture image in Aliyun ACR, skipping manifest creation." | |
| fi |