Last active
November 7, 2024 17:04
-
-
Save jslee02/3f94ad9528a50868b80ddbbc909af50b to your computer and use it in GitHub Desktop.
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
@ECHO OFF | |
SETLOCAL ENABLEDELAYEDEXPANSION | |
REM Requirements: | |
REM pixi global install conda-build | |
REM conda install -c conda-forge python-libarchive-c | |
REM conda update conda | |
REM conda update --all | |
REM Define symbols for statuses (colors are limited in batch scripts) | |
SET SUCCESS=[OK] | |
SET SKIPPED=[SKIP] | |
SET FAILED=[FAIL] | |
REM Initialize variables | |
SET "FORCE_UPLOAD=false" | |
SET "USER_OR_ORG=" | |
SET "UPLOAD=false" | |
SET "CPU_COUNT=" | |
REM Parse command-line options | |
:parse_args | |
IF "%~1"=="" GOTO end_parse_args | |
IF "%~1"=="-f" ( | |
SET "FORCE_UPLOAD=true" | |
SHIFT | |
GOTO parse_args | |
) | |
IF "%~1"=="--force" ( | |
SET "FORCE_UPLOAD=true" | |
SHIFT | |
GOTO parse_args | |
) | |
IF "%~1"=="-u" ( | |
SHIFT | |
SET "USER_OR_ORG=%~1" | |
SHIFT | |
GOTO parse_args | |
) | |
IF "%~1"=="--user" ( | |
SHIFT | |
SET "USER_OR_ORG=%~1" | |
SHIFT | |
GOTO parse_args | |
) | |
IF "%~1"=="-c" ( | |
SHIFT | |
SET "CPU_COUNT=%~1" | |
SHIFT | |
GOTO parse_args | |
) | |
IF "%~1"=="--cpu-count" ( | |
SHIFT | |
SET "CPU_COUNT=%~1" | |
SHIFT | |
GOTO parse_args | |
) | |
IF "%~1"=="--upload" ( | |
SET "UPLOAD=true" | |
SHIFT | |
GOTO parse_args | |
) | |
ECHO Unknown option: %~1 | |
ECHO Usage: %0 [-f|--force] [-u|--user USER_OR_ORG] [-c|--cpu-count CPU_COUNT] [--upload] | |
EXIT /B 1 | |
GOTO parse_args | |
:end_parse_args | |
REM Determine USER_OR_ORG | |
IF NOT DEFINED USER_OR_ORG ( | |
IF NOT "%ANACONDA_USER_OR_ORG%"=="" ( | |
SET "USER_OR_ORG=%ANACONDA_USER_OR_ORG%" | |
) | |
) | |
IF NOT DEFINED USER_OR_ORG ( | |
IF EXIST "%USERPROFILE%\.anaconda_user_or_org" ( | |
FOR /F "usebackq tokens=*" %%i IN ("%USERPROFILE%\.anaconda_user_or_org") DO SET "USER_OR_ORG=%%i" | |
) | |
) | |
IF NOT DEFINED USER_OR_ORG ( | |
SET /P "USER_OR_ORG=Enter Anaconda username or organization name: " | |
) | |
REM Cache the USER_OR_ORG value for future use | |
ECHO %USER_OR_ORG%>"%USERPROFILE%\.anaconda_user_or_org" | |
REM Determine CPU_COUNT | |
IF NOT DEFINED CPU_COUNT ( | |
IF NOT "%BUILD_CPU_COUNT%"=="" ( | |
SET "CPU_COUNT=%BUILD_CPU_COUNT%" | |
) | |
) | |
IF NOT DEFINED CPU_COUNT ( | |
IF EXIST "%USERPROFILE%\.cpu_count" ( | |
FOR /F "usebackq tokens=*" %%i IN ("%USERPROFILE%\.cpu_count") DO SET "CPU_COUNT=%%i" | |
) | |
) | |
IF NOT DEFINED CPU_COUNT ( | |
SET /P "CPU_COUNT=Enter CPU count (number of cores to use for building): " | |
) | |
REM Cache the CPU_COUNT value for future use | |
ECHO %CPU_COUNT%>"%USERPROFILE%\.cpu_count" | |
REM Export CPU_COUNT | |
SET "CPU_COUNT=%CPU_COUNT%" | |
REM Define patterns in the desired order | |
SET "PATTERNS=win_64*;win_32*" | |
REM Collect configs matching the patterns | |
SET "CONFIGS=" | |
FOR %%P IN (%PATTERNS%) DO ( | |
FOR /F "delims=" %%G IN ('DIR /B ".ci_support\%%P.yaml" 2^>nul') DO ( | |
SET "CONFIGS=!CONFIGS! %%G" | |
) | |
) | |
REM Remove leading space from CONFIGS | |
SET "CONFIGS=%CONFIGS:* =%" | |
REM Create build_artifacts directory if it doesn't exist | |
IF NOT EXIST "build_artifacts" ( | |
MKDIR "build_artifacts" | |
) | |
REM Initialize counters and lists | |
SET /A "SUCCEEDED_BUILDS=0" | |
SET /A "SKIPPED_BUILDS=0" | |
SET /A "FAILED_BUILDS=0" | |
SET "SUCCEEDED_LIST=" | |
SET "SKIPPED_LIST=" | |
SET "FAILED_LIST=" | |
REM Total number of builds | |
SET /A "TOTAL_BUILDS=0" | |
FOR %%G IN (%CONFIGS%) DO ( | |
SET /A "TOTAL_BUILDS+=1" | |
) | |
SET /A "CURRENT_INDEX=0" | |
ECHO [ Starting Builds ] | |
ECHO ---------------------------------------- | |
ECHO Total configurations to build: %TOTAL_BUILDS% | |
ECHO Using CPU_COUNT: %CPU_COUNT% | |
ECHO. | |
FOR %%G IN (%CONFIGS%) DO ( | |
SET /A "CURRENT_INDEX+=1" | |
SET "CONFIG=%%G" | |
SET "CONFIG_NAME=!CONFIG:.yaml=!" | |
SET "PROGRESS=<%CURRENT_INDEX%/%TOTAL_BUILDS%>" | |
IF EXIST "build_artifacts\conda-forge-build-done-!CONFIG_NAME!" ( | |
ECHO !PROGRESS! %SKIPPED% Skipped !CONFIG_NAME! | |
SET /A "SKIPPED_BUILDS+=1" | |
SET "SKIPPED_LIST=!SKIPPED_LIST! !CONFIG_NAME!" | |
ECHO. | |
) ELSE ( | |
ECHO !PROGRESS! Building !CONFIG_NAME!... | |
REM Run the build | |
conda-build recipe -m ".ci_support\!CONFIG!" -c conda-forge --croot output --no-build-id > "build_artifacts\!CONFIG_NAME!-log.txt" 2>&1 | |
IF !ERRORLEVEL! EQU 0 ( | |
ECHO !PROGRESS! %SUCCESS% Build succeeded: !CONFIG_NAME! | |
SET /A "SUCCEEDED_BUILDS+=1" | |
SET "SUCCEEDED_LIST=!SUCCEEDED_LIST! !CONFIG_NAME!" | |
) ELSE ( | |
ECHO !PROGRESS! %FAILED% Build failed: !CONFIG_NAME! | |
SET /A "FAILED_BUILDS+=1" | |
SET "FAILED_LIST=!FAILED_LIST! !CONFIG_NAME!" | |
) | |
REM If --upload is passed, run upload.bat | |
IF /I "%UPLOAD%"=="true" ( | |
ECHO !PROGRESS! Uploading !CONFIG_NAME!... | |
CALL upload.bat | |
) | |
ECHO. | |
) | |
) | |
REM Zip the log files | |
REM Ensure you have a zip utility like 7-Zip installed and in PATH | |
REM For example, using 7-Zip: | |
IF EXIST "build_artifacts\log_files.zip" DEL "build_artifacts\log_files.zip" | |
7z a -tzip "build_artifacts\log_files.zip" "build_artifacts\*-log.txt" >nul | |
REM Print build summary | |
ECHO. | |
ECHO ---------------------------------------- | |
ECHO [ BUILD SUMMARY ] | |
ECHO ---------------------------------------- | |
ECHO. | |
ECHO Total Builds Attempted: %TOTAL_BUILDS% | |
ECHO %SUCCESS% Succeeded: %SUCCEEDED_BUILDS% | |
ECHO %SKIPPED% Skipped: %SKIPPED_BUILDS% | |
ECHO %FAILED% Failed: %FAILED_BUILDS% | |
ECHO. | |
IF %SUCCEEDED_BUILDS% GTR 0 ( | |
ECHO %SUCCESS% Succeeded Builds: | |
FOR %%A IN (%SUCCEEDED_LIST%) DO ( | |
ECHO - %%A | |
) | |
ECHO. | |
) | |
IF %SKIPPED_BUILDS% GTR 0 ( | |
ECHO %SKIPPED% Skipped Builds: | |
FOR %%A IN (%SKIPPED_LIST%) DO ( | |
ECHO - %%A | |
) | |
ECHO. | |
) | |
IF %FAILED_BUILDS% GTR 0 ( | |
ECHO %FAILED% Failed Builds: | |
FOR %%A IN (%FAILED_LIST%) DO ( | |
ECHO - %%A | |
) | |
ECHO. | |
) | |
ENDLOCAL |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment