name: PR Check on: pull_request: types: [opened, synchronize, reopened] concurrency: group: build-${{ github.event.pull_request.number || github.head_ref }} cancel-in-progress: true jobs: lint: name: Lint runs-on: ubuntu-22.04 strategy: fail-fast: true max-parallel: 13 steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: set path run: echo "/opt/mambaforge/bin" >> $GITHUB_PATH - name: Fetch conda install script run: | wget https://raw.githubusercontent.com/bioconda/bioconda-common/master/{install-and-set-up-conda,configure-conda,common}.sh - name: Set up bioconda-utils run: bash install-and-set-up-conda.sh - name: Configure conda run: bash configure-conda.sh - name: Perform lint env: # Mimic circleci OSTYPE: "linux-gnu" CI: "true" run: | set -e eval "$(conda shell.bash hook)" conda activate bioconda source common.sh echo '============' conda info --all conda config --show-sources python -c 'import bioconda_utils.utils as u ; import pathlib as p ; print(*(f"{f}:\n{p.Path(f).read_text()}" for f in u.load_conda_build_config().exclusive_config_files), sep="\n")' echo '============' if [ -z "$GITHUB_BASE_REF" ] ; then export GITHUB_BASE_REF="master" fi git fetch origin "$GITHUB_BASE_REF" bioconda-utils lint --loglevel debug --full-report --git-range origin/"$GITHUB_BASE_REF" HEAD conda clean -y --all build-linux: name: Linux Tests runs-on: ubuntu-22.04 strategy: fail-fast: true max-parallel: 13 needs: lint steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: set path run: echo "/opt/mambaforge/bin" >> $GITHUB_PATH - name: Fetch conda install script run: | wget https://raw.githubusercontent.com/bioconda/bioconda-common/master/{install-and-set-up-conda,configure-conda,common}.sh - name: Set up bioconda-utils run: bash install-and-set-up-conda.sh # This script can be used to reconfigure conda to use the right channel setup. - name: Configure conda run: bash configure-conda.sh - name: Build and test env: # Mimic circleci OSTYPE: "linux-gnu" CI: "true" run: | set -e # Clean up lingering build artifacts for n in linux-64 osx-64 noarch; do rm -f /opt/mambaforge/envs/bioconda/conda-bld/$n/*.tar.bz2 rm -f /opt/mambaforge/envs/bioconda/conda-bld/$n/*.conda done eval "$(conda shell.bash hook)" conda activate bioconda source common.sh if [ -z "$GITHUB_BASE_REF" ] ; then export GITHUB_BASE_REF="master" fi git fetch origin "$GITHUB_BASE_REF" bioconda-utils build recipes config.yml \ --docker --mulled-test \ --git-range origin/"$GITHUB_BASE_REF" HEAD - name: Prepare artifacts run: | ( rm -rf /tmp/artifacts mkdir -p /tmp/artifacts/packages cd /opt/mambaforge/envs/bioconda/conda-bld || exit 0 find -name .cache | xargs rm -rf || true for n in index.html channeldata.json linux-64 osx-64 noarch; do cp -rv $n /tmp/artifacts/packages || true done if command -V docker >/dev/null; then mkdir -p /tmp/artifacts/images cd /tmp/artifacts/images docker image ls --format='{{.Repository}}:{{.Tag}}' | \ { grep biocontainers || true ; } | \ xargs -n1 -P4 bash -c ' test -n "${1+x}" || exit 0 echo "Start compressing docker image ${1} ..." docker save "${1}" | gzip -c > "${1##*/}.tar.gz" echo "Finished compressing docker image ${1} ." ' -- # There's no : allowed in artifact names, replace it with --- for f in /tmp/artifacts/images/*:* ; do mv -- "$f" "${f//:/---}"; done fi ) || true - name: Archive packages uses: actions/upload-artifact@v4 with: name: linux-packages path: | /tmp/artifacts build-osx-64: name: OSX-64 Tests runs-on: macos-13 strategy: fail-fast: true max-parallel: 4 # Limited concurrency for osx, so first make sure linux can pass needs: build-linux steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: set path run: echo "/opt/mambaforge/bin" >> $GITHUB_PATH - name: Fetch conda install script run: | wget https://raw.githubusercontent.com/bioconda/bioconda-common/master/{install-and-set-up-conda,configure-conda,common}.sh - name: Set up bioconda-utils run: bash install-and-set-up-conda.sh # This script can be used to reconfigure conda to use the right channel setup. - name: Configure conda run: bash configure-conda.sh - name: Build and Test env: # Mimic circleci OSTYPE: "darwin" CI: "true" run: | set -e eval "$(conda shell.bash hook)" conda activate bioconda source common.sh # Sets up OSX SDK run_conda_forge_build_setup # Clean up lingering build artifacts for n in linux-64 osx-64 noarch; do rm -f /opt/mambaforge/envs/bioconda/conda-bld/$n/*.tar.bz2 done if [ -z "$GITHUB_BASE_REF" ] ; then export GITHUB_BASE_REF="master" fi git fetch origin "$GITHUB_BASE_REF" bioconda-utils build recipes config.yml \ --git-range origin/"$GITHUB_BASE_REF" HEAD - name: Prepare artifacts run: | ( rm -rf /tmp/artifacts mkdir -p /tmp/artifacts/packages cd /opt/mambaforge/envs/bioconda/conda-bld || exit 0 find -name .cache | xargs rm -rf || true for n in index.html channeldata.json linux-64 osx-64 noarch; do cp -rv $n /tmp/artifacts/packages || true done ) || true - name: Archive packages uses: actions/upload-artifact@v4 with: name: osx-packages path: | /tmp/artifacts # Disabled due to concurrency limits on GHA for OSX. osx-arm64 builds are on CircleCI. # build_and_test-osx-arm64: # name: OSX-ARM64 Tests # runs-on: macOS-14 # M1 # strategy: # fail-fast: true # max-parallel: 4 # needs: build-linux # steps: # - uses: actions/checkout@v4 # with: # fetch-depth: 0 # # bail if there's no osx-arm64 recipes # - name: Check for Additional Platforms # id: additional_platforms # run: | # result=$(./scripts/check-for-additional-platforms.sh "origin/master...HEAD" "build_and_test" "${GITHUB_JOB}") # if [[ ${result} != "build" ]] # then # echo "No recipes using this platform, skipping rest of job." # echo "skip_build=true" >> $GITHUB_OUTPUT # fi # - name: set path # run: echo "/opt/mambaforge/bin" >> $GITHUB_PATH # - name: Fetch conda install script # if: steps.additional_platforms.outputs.skip_build != 'true' # run: | # wget https://raw.githubusercontent.com/bioconda/bioconda-common/master/{install-and-set-up-conda,configure-conda,common}.sh # - name: Set up bioconda-utils # if: steps.additional_platforms.outputs.skip_build != 'true' # run: bash install-and-set-up-conda.sh # - name: Configure conda # if: steps.additional_platforms.outputs.skip_build != 'true' # run: bash configure-conda.sh # - name: Build and Test # if: steps.additional_platforms.outputs.skip_build != 'true' # env: # # Mimic circleci # OSTYPE: "darwin" # CI: "true" # run: | # set -xe # eval "$(conda shell.bash hook)" # conda activate bioconda # source common.sh # # Sets up OSX SDK # run_conda_forge_build_setup # if [ -z "$GITHUB_BASE_REF" ] ; then # export GITHUB_BASE_REF="master" # fi # git fetch origin "$GITHUB_BASE_REF" # bioconda-utils build recipes config.yml \ # --lint --git-range origin/"$GITHUB_BASE_REF" HEAD # - name: Prepare artifacts # if: steps.additional_platforms.outputs.skip_build != 'true' # run: | # ( # rm -rf /tmp/artifacts # mkdir -p /tmp/artifacts/packages # cd /opt/mambaforge/envs/bioconda/conda-bld || exit 0 # find -name .cache | xargs rm -rf || true # for n in index.html channeldata.json osx-arm64 noarch; do # cp -rv $n /tmp/artifacts/packages || true # done # ) || true # - name: Archive packages # if: steps.additional_platforms.outputs.skip_build != 'true' # uses: actions/upload-artifact@v4 # with: # name: osx-arm64-packages # path: | # /tmp/artifacts