Skip to content

ci: split building, aggregating and uploading in separate jobs #5

ci: split building, aggregating and uploading in separate jobs

ci: split building, aggregating and uploading in separate jobs #5

Workflow file for this run

on:
push:
# Run full workflow on tags
tags:
- "pixi-build-cmake-v[0-9]+.[0-9]+.[0-9]+"
- "pixi-build-python-v[0-9]+.[0-9]+.[0-9]+"
- "pixi-build-rattler-build-v[0-9]+.[0-9]+.[0-9]+"
- "pixi-build-rust-v[0-9]+.[0-9]+.[0-9]+"
# Build all backends on main branch
branches: [main]
pull_request:
workflow_dispatch:
name: "Build Conda"
concurrency:
group: ${{ github.workflow }}-${{ github.ref_name }}
cancel-in-progress: true
permissions:
id-token: write
contents: read
jobs:
generate-version:
runs-on: ubuntu-latest
outputs:
version_matrix: ${{ steps.set_version.outputs.version_matrix }}
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- uses: prefix-dev/setup-pixi@19eac09b398e3d0c747adc7921926a6d802df4da # v0.8.8
- name: Extract versions
id: set_version
run: |
# extract names and versions from cargo metadata
# and generate a matrix entries for the build job
MATRIX_JSON=$(pixi run generate-version-matrix)
echo "Generated matrix: $MATRIX_JSON"
echo "version_matrix=$MATRIX_JSON" >> $GITHUB_OUTPUT
build-conda-package:
needs: generate-version
env:
REPO_NAME: "prefix-dev/pixi-build-backends"
strategy:
matrix:
bins: ${{ fromJSON(needs.generate-version.outputs.version_matrix) }}
fail-fast: false
runs-on: ${{ matrix.bins.os }}
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- uses: prefix-dev/setup-pixi@19eac09b398e3d0c747adc7921926a6d802df4da # v0.8.8
with:
environments: build
- name: Enable long paths (Windows)
if: ${{ matrix.bins.os == 'windows-latest' }}
run: |
git config --global core.longpaths true
shell: bash
- name: Set environment variable for recipe version
shell: bash
run: |
echo "${{ matrix.bins.env_name }}=${{ matrix.bins.version }}" >> $GITHUB_ENV
- name: Build ${{ matrix.bins.bin }}
shell: bash
env:
TARGET_PLATFORM: ${{ matrix.bins.target }}
RATTLER_BUILD_ENABLE_GITHUB_INTEGRATION: "true"
RATTLER_BUILD_COLOR: "always"
run: |
pixi run build-recipe-ci $RUNNER_TEMP recipe/${{ matrix.bins.bin }}.yaml ${{ env.TARGET_PLATFORM }}
- name: Upload build artifacts
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: conda-packages-${{ matrix.bins.bin }}-${{ env.TARGET_PLATFORM }}
path: ${{ runner.temp }}/**/*.conda
aggregate-conda-packages:
needs: build-conda-package
runs-on: ubuntu-latest
steps:
- name: Download all conda package artifacts
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
path: all-conda-artifacts
- name: Zip all conda packages
run: |
mkdir -p aggregate
find all-conda-artifacts -name '*.conda' -exec cp {} aggregate/ \;
cd aggregate
zip ../conda-packages.zip ./*.conda
- name: Upload zipped conda packages
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: conda-packages-zip
path: conda-packages.zip
upload-packages:
needs: aggregate-conda-packages
runs-on: ubuntu-latest
if: ${{ startsWith(github.ref, 'refs/tags') && github.repository == 'prefix-dev/pixi-build-backends' }}
steps:
- name: Download zipped conda packages
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: conda-packages-zip
path: .
- name: Unzip conda packages
run: unzip -o conda-packages.zip -d conda-unpacked
- uses: prefix-dev/setup-pixi@ba3bb36eb2066252b2363392b7739741bb777659 # v0.8.1
with:
environments: build
- name: Upload packages
shell: bash
run: |
for file in conda-unpacked/*.conda; do
echo "Uploading ${file}"
pixi run -e build rattler-build upload prefix -c pixi-build-backends "$file"
done