mirror of
https://github.com/dptech-corp/Uni-Lab-OS.git
synced 2026-02-05 05:45:10 +00:00
156 lines
5.7 KiB
YAML
156 lines
5.7 KiB
YAML
name: Multi-Platform Conda Build
|
|
|
|
on:
|
|
push:
|
|
branches: [main, dev]
|
|
tags: ['v*']
|
|
pull_request:
|
|
branches: [main, dev]
|
|
workflow_dispatch:
|
|
inputs:
|
|
platforms:
|
|
description: '选择构建平台 (逗号分隔): linux-64, osx-64, osx-arm64, win-64'
|
|
required: false
|
|
default: 'osx-arm64'
|
|
upload_to_anaconda:
|
|
description: '是否上传到Anaconda.org'
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
|
|
jobs:
|
|
build:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- os: ubuntu-latest
|
|
platform: linux-64
|
|
env_file: unilabos-linux-64.yaml
|
|
- os: macos-13 # Intel
|
|
platform: osx-64
|
|
env_file: unilabos-osx-64.yaml
|
|
- os: macos-latest # ARM64
|
|
platform: osx-arm64
|
|
env_file: unilabos-osx-arm64.yaml
|
|
- os: windows-latest
|
|
platform: win-64
|
|
env_file: unilabos-win64.yaml
|
|
|
|
runs-on: ${{ matrix.os }}
|
|
|
|
defaults:
|
|
run:
|
|
shell: bash -l {0}
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Check if platform should be built
|
|
id: should_build
|
|
run: |
|
|
if [[ "${{ github.event_name }}" != "workflow_dispatch" ]]; then
|
|
echo "should_build=true" >> $GITHUB_OUTPUT
|
|
elif [[ -z "${{ github.event.inputs.platforms }}" ]]; then
|
|
echo "should_build=true" >> $GITHUB_OUTPUT
|
|
elif [[ "${{ github.event.inputs.platforms }}" == *"${{ matrix.platform }}"* ]]; then
|
|
echo "should_build=true" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "should_build=false" >> $GITHUB_OUTPUT
|
|
fi
|
|
|
|
- name: Setup Miniconda
|
|
if: steps.should_build.outputs.should_build == 'true'
|
|
uses: conda-incubator/setup-miniconda@v3
|
|
with:
|
|
miniconda-version: 'latest'
|
|
channels: conda-forge,robostack-staging,defaults
|
|
channel-priority: strict
|
|
activate-environment: build-env
|
|
auto-activate-base: false
|
|
auto-update-conda: false
|
|
show-channel-urls: true
|
|
|
|
- name: Install rattler-build and anaconda-client
|
|
if: steps.should_build.outputs.should_build == 'true'
|
|
run: |
|
|
conda install -c conda-forge rattler-build anaconda-client
|
|
|
|
- name: Show environment info
|
|
if: steps.should_build.outputs.should_build == 'true'
|
|
run: |
|
|
conda info
|
|
conda list | grep -E "(rattler-build|anaconda-client)"
|
|
echo "Platform: ${{ matrix.platform }}"
|
|
echo "OS: ${{ matrix.os }}"
|
|
|
|
- name: Build conda package
|
|
if: steps.should_build.outputs.should_build == 'true'
|
|
run: |
|
|
if [[ "${{ matrix.platform }}" == "osx-arm64" ]]; then
|
|
rattler-build build -m ./recipes/conda_build_config.yaml -m ./recipes/macos_sdk_config.yaml ./recipes/msgs
|
|
else
|
|
rattler-build build -m ./recipes/conda_build_config.yaml ./recipes/msgs
|
|
fi
|
|
|
|
- name: List built packages
|
|
if: steps.should_build.outputs.should_build == 'true'
|
|
run: |
|
|
echo "Built packages in output directory:"
|
|
find ./recipes/msgs/output -name "*.conda" | head -10
|
|
ls -la ./recipes/msgs/output/${{ matrix.platform }}/ || echo "${{ matrix.platform }} directory not found"
|
|
ls -la ./recipes/msgs/output/noarch/ || echo "noarch directory not found"
|
|
echo "Output directory structure:"
|
|
find ./recipes/msgs/output -type f -name "*.conda"
|
|
|
|
- name: Prepare artifacts for upload
|
|
if: steps.should_build.outputs.should_build == 'true'
|
|
run: |
|
|
mkdir -p ${{ runner.temp }}/conda-packages
|
|
find ./recipes/msgs/output -name "*.conda" -exec cp {} ${{ runner.temp }}/conda-packages/ \;
|
|
echo "Copied files to temp directory:"
|
|
ls -la ${{ runner.temp }}/conda-packages/
|
|
|
|
- name: Upload conda package artifacts
|
|
if: steps.should_build.outputs.should_build == 'true'
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: conda-package-${{ matrix.platform }}
|
|
path: ${{ runner.temp }}/conda-packages
|
|
if-no-files-found: warn
|
|
retention-days: 30
|
|
|
|
- name: Login to Anaconda
|
|
if: steps.should_build.outputs.should_build == 'true' && (github.event.inputs.upload_to_anaconda == 'true' || startsWith(github.ref, 'refs/tags/'))
|
|
run: |
|
|
anaconda login --username ${{ secrets.ANACONDA_USERNAME }} --password ${{ secrets.ANACONDA_PASSWORD }}
|
|
|
|
- name: Upload to Anaconda.org
|
|
if: steps.should_build.outputs.should_build == 'true' && (github.event.inputs.upload_to_anaconda == 'true' || startsWith(github.ref, 'refs/tags/'))
|
|
run: |
|
|
for package in $(find ./recipes/msgs/output -name "*.conda"); do
|
|
echo "Uploading $package to Anaconda.org..."
|
|
anaconda upload --user ${{ secrets.ANACONDA_ORG }} --force "$package"
|
|
done
|
|
|
|
- name: Logout from Anaconda
|
|
if: always() && steps.should_build.outputs.should_build == 'true' && (github.event.inputs.upload_to_anaconda == 'true' || startsWith(github.ref, 'refs/tags/'))
|
|
run: |
|
|
anaconda logout || true
|
|
|
|
- name: Create release assets (on tags)
|
|
if: steps.should_build.outputs.should_build == 'true' && startsWith(github.ref, 'refs/tags/')
|
|
run: |
|
|
mkdir -p release-assets
|
|
find ./recipes/msgs/output -name "*.conda" -exec cp {} release-assets/ \;
|
|
|
|
- name: Upload to release
|
|
if: steps.should_build.outputs.should_build == 'true' && startsWith(github.ref, 'refs/tags/')
|
|
uses: softprops/action-gh-release@v1
|
|
with:
|
|
files: release-assets/*
|
|
draft: false
|
|
prerelease: false
|