Tests #1154
This file contains 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: Tests | |
on: | |
push: | |
branches: | |
- main | |
paths: | |
- ".github/workflows/tests.yml" | |
- "conda_libmamba_solver/**" | |
- "dev/**" | |
- "recipe/**" | |
- "tests/**" | |
- "pyproject.toml" | |
pull_request: | |
paths: | |
- ".github/workflows/tests.yml" | |
- "conda_libmamba_solver/**" | |
- "dev/**" | |
- "recipe/**" | |
- "tests/**" | |
- "pyproject.toml" | |
schedule: | |
- cron: "15 6 * * 1-5" # Mon to Fri, 6:15am | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} | |
cancel-in-progress: true | |
env: | |
CONDA_SOLVER: libmamba | |
jobs: | |
linux: | |
name: Linux, Python ${{ matrix.python-version }}, ${{ matrix.default-channel }} | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- python-version: "3.8" | |
default-channel: defaults | |
- python-version: "3.9" | |
default-channel: defaults | |
- python-version: "3.10" | |
default-channel: defaults | |
- python-version: "3.11" | |
default-channel: conda-forge | |
env: | |
OS: "linux" | |
PYTHON: ${{ matrix.python-version }} | |
steps: | |
- name: Checkout our source | |
uses: actions/checkout@v3 | |
with: | |
path: conda-libmamba-solver | |
fetch-depth: 0 | |
- name: Checkout conda | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
repository: conda/conda | |
path: conda | |
- name: Python ${{ matrix.python-version }} | |
run: > | |
docker run | |
--rm | |
-v ${GITHUB_WORKSPACE}/conda:/opt/conda-src | |
-v ${GITHUB_WORKSPACE}/conda-libmamba-solver:/opt/conda-libmamba-solver-src | |
-e TEST_SPLITS | |
-e TEST_GROUP | |
-e CONDA_SOLVER | |
ghcr.io/conda/conda-ci:main-linux-python${{ matrix.python-version }}${{ matrix.default-channel == 'conda-forge' && '-conda-forge' || '' }} | |
bash -c "sudo env CONDA_SOLVER=classic \ | |
/opt/conda/condabin/conda install -p /opt/conda \ | |
--repodata-fn=repodata.json --update-specs \ | |
--file /opt/conda-src/tests/requirements.txt \ | |
--file /opt/conda-src/tests/requirements-s3.txt \ | |
--file /opt/conda-libmamba-solver-src/dev/requirements.txt \ | |
--file /opt/conda-libmamba-solver-src/tests/requirements.txt && | |
sudo /opt/conda/bin/python -m pip install /opt/conda-libmamba-solver-src --no-deps -vvv && | |
source /opt/conda-src/dev/linux/bashrc.sh && | |
/opt/conda/bin/python -m pytest /opt/conda-libmamba-solver-src -vv -m 'not slow'" | |
- name: Upload test results | |
if: always() | |
uses: actions/upload-artifact@v3 | |
with: | |
# name has to be unique, to not overwrite uploads of other matrix runs. sha1 is optional and only to differentiate | |
# when locally dowloading and comparing results of different workflow runs. | |
name: test-results-${{ github.sha }}-${{ runner.os }}-${{ matrix.default-channel }}-${{ matrix.python-version }}-cls | |
path: | | |
conda/.coverage | |
conda/test-report.xml | |
retention-days: 1 | |
macos: | |
name: MacOS, Python ${{ matrix.python-version }}, ${{ matrix.default-channel }} | |
runs-on: macos-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- python-version: "3.8" | |
default-channel: "defaults" | |
- python-version: "3.11" | |
default-channel: "conda-forge" | |
env: | |
OS: "macos" | |
PYTHON: ${{ matrix.python-version }} | |
steps: | |
- name: Checkout our source | |
uses: actions/checkout@v3 | |
with: | |
path: conda-libmamba-solver | |
fetch-depth: 0 | |
- name: Checkout conda | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
repository: conda/conda | |
path: conda | |
- uses: conda-incubator/setup-miniconda@v2 | |
name: Setup miniconda for defaults | |
if: matrix.default-channel == 'defaults' | |
env: | |
CONDA_SOLVER: classic | |
with: | |
activate-environment: conda-test-env | |
miniconda-version: latest | |
python-version: ${{ matrix.python-version }} | |
- uses: conda-incubator/setup-miniconda@v2 | |
name: Setup miniconda for conda-forge | |
if: matrix.default-channel == 'conda-forge' | |
env: | |
CONDA_SOLVER: classic | |
with: | |
activate-environment: conda-test-env | |
miniforge-version: latest | |
python-version: ${{ matrix.python-version }} | |
- name: Setup environment | |
shell: bash -el {0} | |
working-directory: conda | |
env: | |
# with 4.12 out, ensure classic is used to install conda-libmamba-solver deps | |
# otherwise it will error out because it can't be imported yet! | |
CONDA_SOLVER: classic | |
run: | | |
set -euxo pipefail | |
# restoring the default for changeps1 to have parity with dev | |
conda config --set changeps1 true | |
# install all test requirements | |
conda install --yes \ | |
--file tests/requirements.txt \ | |
--file tests/requirements-s3.txt \ | |
--file ../conda-libmamba-solver/dev/requirements.txt \ | |
--file ../conda-libmamba-solver/tests/requirements.txt \ | |
python=${{ matrix.python-version }} | |
conda update openssl ca-certificates certifi | |
conda info | |
python -c "from importlib.metadata import version; print('libmambapy', version('libmambapy'))" | |
- name: Install conda-libmamba-solver | |
shell: bash -el {0} | |
working-directory: conda-libmamba-solver | |
run: | | |
python -m pip install . -vv --no-deps | |
- name: Python ${{ matrix.python-version }} | |
shell: bash -el {0} | |
working-directory: conda | |
run: | | |
eval "$(sudo ${CONDA_PREFIX}/bin/python -m conda init bash --dev)" | |
python -m pytest ${GITHUB_WORKSPACE}/conda-libmamba-solver -vv -m "not slow" | |
- name: Upload test results | |
if: always() | |
uses: actions/upload-artifact@v3 | |
with: | |
# name has to be unique, to not overwrite uploads of other matrix runs. sha1 is optional and only to differentiate | |
# when locally dowloading and comparing results of different workflow runs. | |
name: test-results-${{ github.sha }}-${{ runner.os }}-${{ matrix.default-channel }}-${{ matrix.python-version }}-cls | |
path: | | |
conda/.coverage | |
conda/test-report.xml | |
retention-days: 1 | |
windows: | |
name: Windows, Python ${{ matrix.python-version }}, ${{ matrix.default-channel }} | |
runs-on: windows-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: ["3.8", "3.11"] | |
default-channel: [conda-forge] | |
include: | |
- python-version: "3.9" | |
default-channel: defaults | |
env: | |
OS: "windows" | |
PYTHON: ${{ matrix.python-version }} | |
steps: | |
- name: Checkout our source | |
uses: actions/checkout@v3 | |
with: | |
path: conda-libmamba-solver | |
fetch-depth: 0 | |
- name: Checkout conda | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
repository: conda/conda | |
path: conda | |
- name: Set temp dirs correctly | |
# https://github.com/actions/virtual-environments/issues/712 | |
run: | | |
echo "TMPDIR=$env:USERPROFILE\AppData\Local\Temp" >> $env:GITHUB_ENV | |
echo "TEMP=$env:USERPROFILE\AppData\Local\Temp" >> $env:GITHUB_ENV | |
echo "TMP=$env:USERPROFILE\AppData\Local\Temp" >> $env:GITHUB_ENV | |
- name: Setup environment | |
shell: cmd | |
working-directory: conda | |
env: | |
# with 4.12 out, ensure classic is used to install conda-libmamba-solver deps | |
# otherwise it will error out because it can't be imported yet! | |
CONDA_SOLVER: classic | |
CONDA_CHANNELS: ${{ matrix.default-channel }} | |
CONDA_CHANNEL_PRIORITY: ${{ matrix.default-channel == 'conda-forge' && 'strict' || 'flexible' }} | |
run: | | |
:: add mamba to requirements | |
type ..\conda-libmamba-solver\dev\requirements.txt >> .\tests\requirements.txt | |
type ..\conda-libmamba-solver\tests\requirements.txt >> .\tests\requirements.txt | |
if errorlevel 1 exit 1 | |
:: initialize conda dev | |
call .\dev\windows\setup.bat | |
if errorlevel 1 exit 1 | |
call .\dev-init.bat | |
if errorlevel 1 exit 1 | |
python -c "from importlib.metadata import version; print('libmambapy', version('libmambapy'))" | |
if errorlevel 1 exit 1 | |
conda info -a | |
if errorlevel 1 exit 1 | |
- name: Install conda-libmamba-solver | |
shell: cmd | |
working-directory: conda | |
run: | | |
call .\dev-init.bat | |
if errorlevel 1 exit 1 | |
python -m pip install --no-deps -vv "%GITHUB_WORKSPACE%\conda-libmamba-solver" | |
if errorlevel 1 exit 1 | |
- name: Python ${{ matrix.python-version }} | |
shell: cmd | |
working-directory: conda | |
run: | | |
CALL dev-init.bat | |
if errorlevel 1 exit 1 | |
python -m pytest "%GITHUB_WORKSPACE%\conda-libmamba-solver" -vv -m "not slow" --timeout=600 | |
if errorlevel 1 exit 1 | |
- name: Upload test results | |
if: always() | |
uses: actions/upload-artifact@v3 | |
with: | |
# name has to be unique, to not overwrite uploads of other matrix runs. sha1 is optional and only to differentiate | |
# when locally dowloading and comparing results of different workflow runs. | |
name: test-results-${{ github.sha }}-${{ runner.os }}-${{ matrix.default-channel }}-${{ matrix.python-version }}-cls | |
path: | | |
conda/.coverage | |
conda/test-report.xml | |
retention-days: 1 | |
# aggregate and upload | |
aggregate: | |
# only aggregate test suite if there are code changes | |
needs: [windows, linux, macos] | |
if: always() | |
runs-on: ubuntu-latest | |
steps: | |
- name: Download test results | |
uses: actions/download-artifact@v3 | |
- name: Upload combined test results | |
# provides one downloadable archive of all .coverage/test-report.xml files | |
# of all matrix runs for further analysis. | |
uses: actions/upload-artifact@v3 | |
with: | |
name: test-results-${{ github.sha }}-cls-all | |
path: test-results-${{ github.sha }}-* | |
retention-days: 30 # default: 90 | |
- name: Test Summary | |
uses: test-summary/action@v2 | |
with: | |
paths: ./test-results-${{ github.sha }}-**/test-report*.xml | |
# required check | |
analyze: | |
name: Analyze results | |
needs: [windows, linux, macos, aggregate] | |
if: always() | |
runs-on: ubuntu-latest | |
steps: | |
- name: Decide whether the needed jobs succeeded or failed | |
id: alls-green # CONDA-LIBMAMBA-SOLVER CHANGE | |
uses: re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe | |
with: | |
allowed-skips: ${{ toJSON(needs) }} | |
jobs: ${{ toJSON(needs) }} | |
- name: Checkout our source | |
uses: actions/checkout@v3 | |
if: always() && github.event_name == 'schedule' && steps.alls-green.outputs.result == 'failure' | |
- name: Report failures | |
if: always() && github.event_name == 'schedule' && steps.alls-green.outputs.result == 'failure' | |
uses: JasonEtco/create-an-issue@v2 | |
env: | |
GITHUB_TOKEN: ${{ secrets.CONDA_LIBMAMBA_SOLVER_ISSUES }} | |
RUN_ID: ${{ github.run_id }} | |
TITLE: "Scheduled tests failed" | |
with: | |
filename: .github/TEST_FAILURE_REPORT_TEMPLATE.md | |
update_existing: true | |
build: | |
name: Canary Build | |
needs: [analyze] | |
# only build canary build if | |
# only build canary build if | |
# - prior steps succeeded, | |
# - this is the main repo, and | |
# - we are on the main (or feature) branch | |
if: >- | |
success() | |
&& !github.event.repository.fork | |
&& ( | |
github.ref_name == 'main' | |
|| startsWith(github.ref_name, 'feature/') | |
) | |
strategy: | |
matrix: | |
include: | |
- runner: ubuntu-latest | |
subdir: noarch | |
env: | |
CONDA_SOLVER: classic | |
runs-on: ${{ matrix.runner }} | |
steps: | |
# Clean checkout of specific git ref needed for package metadata version | |
# which needs env vars GIT_DESCRIBE_TAG and GIT_BUILD_STR: | |
- uses: actions/checkout@v3 | |
with: | |
ref: ${{ github.ref }} | |
clean: true | |
fetch-depth: 0 | |
- name: Create and upload canary build | |
uses: conda/actions/canary-release@v23.3.0 | |
with: | |
package-name: ${{ github.event.repository.name }} | |
subdir: ${{ matrix.subdir }} | |
anaconda-org-channel: conda-canary | |
anaconda-org-label: ${{ github.ref_name == 'main' && 'dev' || format('{0}-{1}', github.event.repository.name, github.ref_name) }} | |
anaconda-org-token: ${{ secrets.CONDA_CANARY_ANACONDA_ORG_TOKEN }} | |
conda-build-arguments: '--override-channels -c conda-forge -c defaults' |