Switch to Github Actions for CI/CD runs (#274)

This commit is contained in:
Brian Kroth 2023-03-18 15:52:26 -05:00 коммит произвёл GitHub
Родитель dbac3f4ddd
Коммит a0a76cfcf6
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
21 изменённых файлов: 588 добавлений и 581 удалений

Просмотреть файл

@ -1,236 +0,0 @@
name: 'MlosCore Linux'
trigger:
- main
pr:
branches:
include:
- '*'
schedules:
- cron: "0 0 * * *"
displayName: Nightly build
branches:
include:
- main
always: "true"
jobs:
- job: 'Linux'
pool:
vmImage: ubuntu-latest
# Test multiple versions of python.
strategy:
matrix:
DefaultPython:
# Floating most recent version of python (useful to catch new compatibility issues in nightly builds).
conda_env: 'mlos_core'
# Python 3.6 is currently incompatible.
# Python36:
# conda_env: 'mlos_core-3.6'
Python38:
conda_env: 'mlos_core-3.8'
Python39:
conda_env: 'mlos_core-3.9'
Python310:
conda_env: 'mlos_core-3.10'
# FIXME: There are currently several missing/broken dependencies for python 3.11.
#Python311:
# conda_env: 'mlos_core-3.11'
variables:
- name: CONDA_CACHE_DIR
value: "/usr/share/miniconda/envs/$(conda_env)"
#value: "/usr/share/miniconda/envs"
- name: cache_cur_date
value: "0000-00-00"
- name: cache_cur_hour
value: "00"
- name: cache_prev_hour
value: "23"
steps:
- bash: echo "##vso[task.prependpath]$CONDA/bin"
displayName: 'Add conda to PATH'
- bash: |
echo "##vso[task.setvariable variable=cache_cur_date;]`date +%Y-%m-%d`"
echo "##vso[task.setvariable variable=cache_cur_hour;]`date +%H`"
echo "##vso[task.setvariable variable=cache_prev_hour;]`date -d'1 hour ago' +%H`"
displayName: 'Set cache timestamp variables'
- bash: |
echo "cache_cur_date: $(cache_cur_date)"
echo "cache_cur_hour: $(cache_cur_hour)"
echo "cache_prev_hour: $(cache_prev_hour)"
echo "CONDA_CACHE_DIR: $(CONDA_CACHE_DIR)"
displayName: 'Print some pipeline variables'
- task: Cache@2
displayName: Restore cached conda environment
inputs:
key: 'conda | "$(Agent.OS)" | "$(conda_env)" | conda-envs/$(conda_env).yml | mlos_core/setup.py | mlos_bench/setup.py | "$(cache_cur_date)" | "$(cache_cur_hour)" | .azure-pipelines/linux.yml'
path: $(CONDA_CACHE_DIR)
# Prefer cached environments from the last hour or day.
restoreKeys: |
conda | "$(Agent.OS)" | "$(conda_env)" | conda-envs/$(conda_env).yml | mlos_core/setup.py | mlos_bench/setup.py | "$(cache_cur_date)" | "$(cache_cur_hour)"
conda | "$(Agent.OS)" | "$(conda_env)" | conda-envs/$(conda_env).yml | mlos_core/setup.py | mlos_bench/setup.py | "$(cache_cur_date)" | "$(cache_prev_hour)"
# conda | "$(Agent.OS)" | "$(conda_env)" | conda-envs/$(conda_env).yml | mlos_core/setup.py | mlos_bench/setup.py | "$(cache_cur_date)"
cacheHitVar: CONDA_CACHE_RESTORED
- bash: |
set -x
printenv
displayName: 'Log some environment variables for debugging'
- bash: |
conda config --set channel_priority strict
#conda update -v -y -n base conda
displayName: Update and configure conda
# Try and speed up the pipeline by using a faster solver:
- bash: |
conda install -v -y -n base conda-libmamba-solver
# Try to set either of the configs for the solver.
conda config --set experimental_solver libmamba || true
conda config --set solver libmamba || true
echo "##vso[task.setvariable variable=CONDA_EXPERIMENTAL_SOLVER;]libmamba"
echo "##vso[task.setvariable variable=EXPERIMENTAL_SOLVER;]libmamba"
displayName: Install and default to mamba solver
- bash: rm -f /usr/share/miniconda/pkgs/cache/*.json
displayName: Workaround a mamba cache bug in ADO
# https://github.com/mamba-org/mamba/issues/488
- bash: make CONDA_ENV_NAME=$(conda_env) CONDA_INFO_LEVEL=-v conda-env
displayName: 'Create/update mlos_core conda environment'
- bash: conda run -n $(conda_env) pip install pytest-azurepipelines
displayName: 'Install pytest-azurepipelines'
# This is moreso about code cleanliness, which is a dev thing, not a
# functionality thing, and the rules for that change between python versions,
# so only do this for the default in the devcontainer.
#- bash: make CONDA_ENV_NAME=$(conda_env) check
# displayName: 'Run lint checks'
- bash: make CONDA_ENV_NAME=$(conda_env) test
displayName: 'Run tests'
- bash: make CONDA_ENV_NAME=$(conda_env) CONDA_INFO_LEVEL=-v dist dist-test
displayName: 'Generate and test binary distribution files'
- job: DevContainer
pool:
vmImage: 'ubuntu-latest'
variables:
DOCKER_BUILDKIT: 1
BUILDKIT_INLINE_CACHE: 1
steps:
- bash: |
set -x
printenv
displayName: 'Log some environment variables for debugging'
- bash: |
if [ "$(Build.Reason)" == "Schedule" ]; then
echo "##vso[task.setvariable variable=NO_CACHE;]true"
fi
displayName: 'Set NO_CACHE variable for nightly builds'
- bash: |
set -x
echo "NO_CACHE: $NO_CACHE"
.devcontainer/build/build-devcontainer.sh
displayName: 'Build the devcontainer image'
- bash: |
set -x
docker run -d --rm --user root \
--env SYSTEM_JOBDISPLAYNAME=$(System.JobDisplayName) \
--volume /var/run/docker.sock:/var/run/docker.sock \
--env DOCKER_BUILDKIT=$(DOCKER_BUILDKIT) \
--volume $(pwd):/workspaces/MlosCore \
--env CONTAINER_WORKSPACE_FOLDER=/workspaces/MlosCore \
--env LOCAL_WORKSPACE_FOLDER=$(pwd) \
--workdir /workspaces/MlosCore \
--name mlos-core-devcontainer mlos-core-devcontainer sleep infinity
displayName: 'Start the devcontainer in the background'
- bash: |
set -x
docker exec --user root mlos-core-devcontainer groupmod -g `id -g` vscode
docker exec --user root mlos-core-devcontainer usermod -u `id -u` -g `id -g` vscode
docker exec --user root mlos-core-devcontainer chown -R vscode:vscode /home/vscode
docker exec --user root mlos-core-devcontainer mkdir -p /opt/conda/pkgs/cache /var/cache/pip
docker exec --user root mlos-core-devcontainer chown -R vscode /opt/conda/pkgs/cache /var/cache/pip
displayName: 'Fixup vscode uid/gid in the running container'
- bash: |
set -x
docker exec --user vscode mlos-core-devcontainer make CONDA_INFO_LEVEL=-v licenseheaders
# licenseheaders changes the contents of the files, so make this check fail if there are any changes detected
git diff --no-pager --exit-code
displayName: 'Check that all of the python files have licenseheaders'
- bash: |
set -x
docker exec --user vscode mlos-core-devcontainer make CONDA_INFO_LEVEL=-v conda-env
displayName: 'Update the conda env in the devcontainer'
- bash: |
set -x
docker exec --user vscode mlos-core-devcontainer conda run -n mlos_core pip install pytest-azurepipelines
displayName: 'Install pytest-azurepipelines'
- bash: |
set -x
docker exec --user vscode mlos-core-devcontainer make CONDA_INFO_LEVEL=-v check
displayName: 'Run lint checks'
- bash: |
set -x
docker exec --user vscode mlos-core-devcontainer make CONDA_INFO_LEVEL=-v test
displayName: 'Run tests'
- bash: |
set -x
docker exec --user vscode mlos-core-devcontainer make CONDA_INFO_LEVEL=-v dist dist-test
displayName: 'Generate and test binary distribution files'
- bash: |
set -x
docker exec --user vscode mlos-core-devcontainer make CONDA_INFO_LEVEL=-v devcontainer
displayName: 'Test rebuilding the devcontainer in the devcontainer'
- bash: |
set -x
docker exec --user vscode mlos-core-devcontainer make CONDA_INFO_LEVEL=-v doc
displayName: 'Generate docs and test check them'
- task: AzureStaticWebApp@0
# Only publish docs on the main branch.
condition: eq(variables['Build.SourceBranch'], 'refs/heads/main')
displayName: 'Publish documentation'
inputs:
app_location: '/doc/build/html'
api_location: 'api'
output_location: '/'
azure_static_web_apps_api_token: $(deployment_token)
- publish: $(System.DefaultWorkingDirectory)/doc/source/badges/coverage.svg
artifact: coverage-status-badge
condition: eq(variables['Build.SourceBranch'], 'refs/heads/main')
displayName: 'Publish the coverage status badge'
- bash: |
set -x
docker stop -t 1 mlos-core-devcontainer || true
docker rm --force mlos-core-devcontainer || true
displayName: 'Cleanup the devcontainer'
- bash: |
echo $(ACR_PASSWORD) | docker login --username $(ACR_USERNAME) --password-stdin $(ACR_LOGINURL)
condition: and(eq(variables['Build.SourceBranch'], 'refs/heads/main'), ne(variables['ACR_LOGINURL'], ''))
displayName: Login to ACR
- bash: |
set -x
docker tag devcontainer-cli $(ACR_LOGINURL)/devcontainer-cli
docker push $(ACR_LOGINURL)/devcontainer-cli
docker tag mlos-core-devcontainer $(ACR_LOGINURL)/mlos-core-devcontainer
docker push $(ACR_LOGINURL)/mlos-core-devcontainer
condition: and(eq(variables['Build.SourceBranch'], 'refs/heads/main'), ne(variables['ACR_LOGINURL'], ''))
displayName: Push Docker images

Просмотреть файл

@ -1,196 +0,0 @@
name: 'MlosCore Windows'
trigger:
- main
pr:
branches:
include:
- '*'
schedules:
- cron: "0 0 * * *"
displayName: Nightly build
branches:
include:
- main
always: "true"
jobs:
- job: 'Windows'
pool:
vmImage: windows-latest
# Test multiple versions of python.
strategy:
matrix:
DefaultPython:
# Floating most recent version of python (useful to catch new compatibility issues in nightly builds).
conda_env: 'mlos_core'
conda_env_yml: 'mlos_core-windows.yml'
PythonVersion: ''
# Skipping testing of additional versions on Windows for now.
variables:
- name: CONDA_CACHE_DIR
value: $(CONDA)/envs/$(conda_env)
#value: $(CONDA)/envs
- name: cache_cur_date
value: "0000-00-00"
- name: cache_cur_hour
value: "00"
- name: cache_prev_hour
value: "23"
steps:
- pwsh: |
Write-Host "##vso[task.prependpath]$env:CONDA\condabin"
Write-Host "##vso[task.prependpath]$env:CONDA\bin"
Write-Host "##vso[task.prependpath]$env:CONDA\Scripts"
Write-Host "##vso[task.prependpath]$env:CONDA\Library\bin"
Write-Host "##vso[task.prependpath]$env:CONDA\Library\usr\bin"
Write-Host "##vso[task.prependpath]$env:CONDA\Library\mingw-w64\bin"
Write-Host "##vso[task.prependpath]$env:CONDA"
displayName: Add conda to PATH
- pwsh: |
Write-Host "##vso[task.setvariable variable=cache_cur_date;]" (Get-Date -Format yyyy-MM-dd)
Write-Host "##vso[task.setvariable variable=cache_cur_hour;]" (Get-Date -Format HH)
Write-Host "##vso[task.setvariable variable=cache_prev_hour;]" (Get-Date).AddHours(-1).ToString('HH')
displayName: 'Set cache timestamp variables'
- pwsh: |
echo "cache_cur_date: $(cache_cur_date)"
echo "cache_cur_hour: $(cache_cur_hour)"
echo "cache_prev_hour: $(cache_prev_hour)"
echo "CONDA_CACHE_DIR: $(CONDA_CACHE_DIR)"
echo "CONDA: $env:CONDA"
echo "CONDA_PREFIX: $env:CONDA_PREFIX"
echo "CONDA_ROOT: $env:CONDA_ROOT"
echo "PATH: $env:PATH"
displayName: 'Print some pipeline and environment variables'
- task: Cache@2
displayName: Restore cached conda environment
inputs:
key: 'conda | "$(Agent.OS)" | "$(conda_env)" | conda-envs/$(conda_env_yml) | mlos_core/setup.py | mlos_bench/setup.py | "$(cache_cur_date)" | "$(cache_cur_hour)" | .azure-pipelines/windows.yml'
path: $(CONDA_CACHE_DIR)
# Prefer cached environments from the last hour or day.
restoreKeys: |
conda | "$(Agent.OS)" | "$(conda_env)" | conda-envs/$(conda_env_yml) | mlos_core/setup.py | mlos_bench/setup.py | "$(cache_cur_date)" | "$(cache_cur_hour)"
conda | "$(Agent.OS)" | "$(conda_env)" | conda-envs/$(conda_env_yml) | mlos_core/setup.py | mlos_bench/setup.py | "$(cache_cur_date)" | "$(cache_prev_hour)"
# conda | "$(Agent.OS)" | "$(conda_env)" | conda-envs/$(conda_env_yml) | mlos_core/setup.py | mlos_bench/setup.py | "$(cache_cur_date)"
cacheHitVar: CONDA_CACHE_RESTORED
# NOTE: these steps are handled by the Makefile in Linux environments for reusability.
- pwsh: |
Get-ChildItem -Recurse Env:
displayName: 'Log some environment variables for debugging'
- pwsh: |
conda config --set channel_priority strict
#conda update -v -y -n base conda
displayName: Update and configure conda
# Try and speed up the pipeline by using a faster solver:
- pwsh: |
conda install -v -y -n base conda-libmamba-solver
conda config --set experimental_solver libmamba
conda config --set solver libmamba
Write-Host "##vso[task.setvariable variable=CONDA_EXPERIMENTAL_SOLVER;]libmamba"
Write-Host "##vso[task.setvariable variable=EXPERIMENTAL_SOLVER;]libmamba"
ignoreLASTEXITCODE: true
errorActionPreference: continue
displayName: Install and default to experimental mamba solver
- pwsh: Remove-Item -Recurse -Force $env:CONDA\pkgs\cache\*.json
displayName: Workaround a mamba cache bug in ADO
# https://github.com/mamba-org/mamba/issues/488
- pwsh: |
if (! (conda env list | Select-String -Pattern "^$(conda_env) ") ) { conda env create -v -n $(conda_env) -f conda-envs/$(conda_env_yml) }
conda env update -v -n $(conda_env) -f conda-envs/$(conda_env_yml) --prune
displayName: 'Create/update mlos_core conda environment'
- pwsh: conda run -n $(conda_env) pip install pytest-azurepipelines
displayName: 'Install pytest-azurepipelines'
- pwsh: conda run -n $(conda_env) pylint -j0 mlos_core/mlos_core mlos_bench/mlos_bench
displayName: 'Run lint checks'
- pwsh: |
conda run -n $(conda_env) pytest --cov=. --cov-append --cov-report=xml --cov-report=html --junitxml=junit/test-results.xml --napoleon-docstrings --test-run-title="$(System.JobDisplayName)" mlos_core/ mlos_bench/
displayName: 'Run tests'
# Note: unlike the Makefile version, the pwsh version of these rules are all run within a single shell context, so we can
# split commands across lines with CWD maintained (hence we also require the "cd .." here).
- pwsh: |
# Build the mlos_core wheel.
cd mlos_core
conda run -n $(conda_env) python setup.py bdist_wheel
cd ..
$mlos_core_whl = (Resolve-Path mlos_core/dist/mlos_core-*-py3-none-any.whl | Select-Object -ExpandProperty Path)
echo $mlos_core_whl
# Build the mlos_bench wheel.
cd mlos_bench
conda run -n $(conda_env) python setup.py bdist_wheel
cd ..
$mlos_bench_whl = (Resolve-Path mlos_bench/dist/mlos_bench-*-py3-none-any.whl | Select-Object -ExpandProperty Path)
echo $mlos_bench_whl
# Setup a clean environment to test installing/using them.
$PythonVersReq = (conda list -n $(conda_env) | Select-String -AllMatches -Pattern '^python\s+([0-9.]+)\s+').Matches.Groups[1].Value
conda create -y -v -n mlos-dist-test-$(PythonVersion) python=${PythonVersReq}
conda install -y -v -n mlos-dist-test-$(PythonVersion) vswhere vs2019_win-64
conda install -y -v -n mlos-dist-test-$(PythonVersion) conda-forge::GPy
conda run -n mlos-dist-test-$(PythonVersion) pip install pytest pytest-timeout pytest-forked pytest-xdist
# Install mlos_core wheel.
conda run -n mlos-dist-test-$(PythonVersion) pip install "${mlos_core_whl}[full]"
# Install mlos_bench wheel.
conda run -n mlos-dist-test-$(PythonVersion) pip install "${mlos_bench_whl}[full]"
# Just pick one simple test to run for now.
# The rest should have been handled in a separate step.
conda run -n mlos-dist-test-$(PythonVersion) python -m pytest mlos_core/mlos_core/tests/spaces/spaces_test.py
# Run a simple mlos_bench test.
conda run -n mlos-dist-test-$(PythonVersion) python -m pytest mlos_bench/mlos_bench/tests/environment/mock_env_test.py
displayName: 'Generate and test binary distribution files'
# NOTE: Windows ADO agents don't support Linux Docker containers.
# This will have to be tested manually for now using the ".devcontainer/build/build-devcontainer.ps1" script.
#
#- job: WindowsDevContainer
# pool:
# vmImage: windows-latest
# steps:
# - pwsh: |
# if ("$(Build.Reason)" -eq "Schedule") {
# Write-Host "##vso[task.setvariable variable=NO_CACHE;]true"
# }
# displayName: 'Set NO_CACHE variable for nightly builds'
# - pwsh: |
# Write-Host "NO_CACHE: $env:NO_CACHE"
# .devcontainer/build/build-devcontainer.ps1
# displayName: 'Build devcontainer in Windows'
# - pwsh: |
# docker run -d --rm --user root `
# --volume /var/run/docker.sock:/var/run/docker.sock `
# --volume ${PWD}:/workspaces/MlosCore \
# --env CONTAINER_WORKSPACE_FOLDER=/workspaces/MlosCore \
# --env LOCAL_WORKSPACE_FOLDER=${PWD} \
# --workdir /workspaces/MlosCore \
# --name mlos-core-devcontainer mlos-core-devcontainer sleep infinity
# displayName: 'Start the devcontainer in the background'
#
# - pwsh: |
# docker exec --user vscode mlos-core-devcontainer make CONDA_INFO_LEVEL=-v conda-env
# displayName: 'Update the conda env in the devcontainer'
#
# - pwsh: |
# docker exec --user vscode mlos-core-devcontainer conda run -n $(conda_env) pip show mlos_core
# docker exec --user vscode mlos-core-devcontainer conda run -n $(conda_env) pip show mlos_bench
# displayName: 'Basic devcontainer test'
#
# # Skip other tests - they should get run identically in the Linux job.
#
# - pwsh: |
# docker stop -t 1 mlos-core-devcontainer || true
# docker rm --force mlos-core-devcontainer || true
# displayName: 'Cleanup the devcontainer'
# ignoreLASTEXITCODE: true

Просмотреть файл

@ -23,6 +23,9 @@ RUN npm install -g @devcontainers/cli
# Also add the cspell tool to image. # Also add the cspell tool to image.
RUN npm install -g cspell RUN npm install -g cspell
# Also add the markdown-link-check tool to image.
RUN npm install -g markdown-link-check
# Adjust the uid/gid of the node user to match the host user # Adjust the uid/gid of the node user to match the host user
ARG NODE_UID=1000 ARG NODE_UID=1000
ARG NODE_GID=1000 ARG NODE_GID=1000

Просмотреть файл

@ -1,8 +1,8 @@
.PHONY: all devcontainer-cli devcontainer cspell .PHONY: all devcontainer-cli devcontainer cspell markdown-link-check
all: devcontainer-cli devcontainer all: devcontainer-cli devcontainer
devcontainer-cli cspell: devcontainer-cli cspell markdown-link-check:
./build-devcontainer-cli.sh ./build-devcontainer-cli.sh
devcontainer: devcontainer:

Просмотреть файл

@ -40,7 +40,7 @@ else
rmdir "$tmpdir" rmdir "$tmpdir"
fi fi
docker build -t devcontainer-cli:latest -t cspell:latest \ docker build -t devcontainer-cli:latest -t cspell:latest -t markdown-link-check:latest \
$devcontainer_cli_build_args \ $devcontainer_cli_build_args \
--build-arg BUILDKIT_INLINE_CACHE=1 \ --build-arg BUILDKIT_INLINE_CACHE=1 \
--build-arg NODE_UID=$(id -u) \ --build-arg NODE_UID=$(id -u) \

Просмотреть файл

@ -62,7 +62,7 @@
"trond-snekvik.simple-rst", "trond-snekvik.simple-rst",
"DavidAnson.vscode-markdownlint", // Linter for markdown files "DavidAnson.vscode-markdownlint", // Linter for markdown files
"huntertran.auto-markdown-toc", // Auto-generated Markdown Table of Contents "huntertran.auto-markdown-toc", // Auto-generated Markdown Table of Contents
"ms-azure-devops.azure-pipelines", // Azure Pipelines integration "cschleiden.vscode-github-actions", // GitHub Actions integration
"ms-azuretools.vscode-docker", "ms-azuretools.vscode-docker",
"waderyan.gitblame", // Enhances git blame experience "waderyan.gitblame", // Enhances git blame experience
"donjayamanne.githistory", // Enhanced git history experience "donjayamanne.githistory", // Enhanced git history experience

Просмотреть файл

@ -0,0 +1,39 @@
#!/bin/bash
##
## Copyright (c) Microsoft Corporation.
## Licensed under the MIT License.
##
set -x
set -eu
scriptdir=$(dirname "$(readlink -f "$0")")
cd "$scriptdir/"
# Build the helper container that has the cspell CLI.
#../build/build-devcontainer-cli.sh
# Make this work inside a devcontainer as well.
reporoot=$(readlink -f "$scriptdir/../../")
if [ -n "${LOCAL_WORKSPACE_FOLDER:-}" ]; then
reporoot="$LOCAL_WORKSPACE_FOLDER"
fi
# Basically does what the markdown-link-check github action would do, but locally too.
# See Also: ~/.github/workflows/markdown-link-check.yml
docker run -i --rm \
--user $(id -u):$(id -g) \
-v "$reporoot":/src:ro \
--workdir /src \
markdown-link-check:latest \
find ./doc ./mlos_core ./mlos_bench ./.devcontainer -name '*.md' -not -path './node_modules/*' \
-exec markdown-link-check '{}' --config ./.github/workflows/markdown-link-check-config.json -q -v ';'
docker run -i --rm \
--user $(id -u):$(id -g) \
-v "$reporoot":/src:ro \
--workdir /src \
markdown-link-check:latest \
find . -type f '(' -wholename ./CODE_OF_CONDUCT.md -o -wholename ./CONTRIBUTING.md -o -wholename ./README.md -o -wholename ./SECURITY.md ')' -not -path './node_modules/*' \
-exec markdown-link-check '{}' --config ./.github/workflows/markdown-link-check-config.json -q -v ';'

151
.github/workflows/devcontainer.yml поставляемый Normal file
Просмотреть файл

@ -0,0 +1,151 @@
name: MLOS DevContainer
on:
workflow_dispatch:
inputs:
tags:
description: Manual MLOS DevContainer run
push:
branches: [ main ]
pull_request:
branches: [ main ]
schedule:
- cron: "1 0 * * *"
jobs:
DevContainer:
runs-on: ubuntu-latest
# Here we only test a single (latest) version of python.
env:
DOCKER_BUILDKIT: 1
BUILDKIT_INLINE_CACHE: 1
steps:
- uses: actions/checkout@v3
- name: Set NO_CACHE variable for nightly builds
if: github.event_name == 'schedule'
run: |
echo "NO_CACHE=true" >> $GITHUB_ENV
- name: Log some environment variables for debugging
run: |
set -x
printenv
echo "NO_CACHE: ${NO_CACHE:-}"
- name: Build the devcontainer image
timeout-minutes: 15
run: |
set -x
.devcontainer/build/build-devcontainer.sh
- name: Start the devcontainer in the background
timeout-minutes: 3
run: |
set -x
docker run -d --rm --user root \
--volume /var/run/docker.sock:/var/run/docker.sock \
--env DOCKER_BUILDKIT=$DOCKER_BUILDKIT \
--volume $(pwd):/workspaces/MlosCore \
--env CONTAINER_WORKSPACE_FOLDER=/workspaces/MlosCore \
--env LOCAL_WORKSPACE_FOLDER=$(pwd) \
--workdir /workspaces/MlosCore \
--name mlos-core-devcontainer mlos-core-devcontainer sleep infinity
- name: Fixup vscode uid/gid in the running container
timeout-minutes: 3
run: |
set -x
docker exec --user root mlos-core-devcontainer groupmod -g `id -g` vscode
docker exec --user root mlos-core-devcontainer usermod -u `id -u` -g `id -g` vscode
docker exec --user root mlos-core-devcontainer chown -R vscode:vscode /home/vscode
docker exec --user root mlos-core-devcontainer mkdir -p /opt/conda/pkgs/cache /var/cache/pip
docker exec --user root mlos-core-devcontainer chown -R vscode /opt/conda/pkgs/cache /var/cache/pip
- name: Update the conda env in the devcontainer
timeout-minutes: 10
run: |
set -x
docker exec --user vscode mlos-core-devcontainer make CONDA_INFO_LEVEL=-v conda-env
- name: Check for missing licenseheaders
timeout-minutes: 3
run: |
set -x
docker exec --user vscode mlos-core-devcontainer make CONDA_INFO_LEVEL=-v licenseheaders
# licenseheaders changes the contents of the files, so make this check fail if there are any changes detected
git --no-pager diff --exit-code
- name: Run lint checks
timeout-minutes: 5
run: |
set -x
docker exec --user vscode mlos-core-devcontainer make CONDA_INFO_LEVEL=-v check
- name: Run tests
timeout-minutes: 10
run: |
set -x
docker exec --user vscode mlos-core-devcontainer make CONDA_INFO_LEVEL=-v test
- name: Generate and test binary distribution files
timeout-minutes: 10
run: |
set -x
docker exec --user vscode mlos-core-devcontainer make CONDA_INFO_LEVEL=-v dist dist-test
- name: Test rebuilding the devcontainer in the devcontainer
timeout-minutes: 3
run: |
set -x
docker exec --user vscode mlos-core-devcontainer make CONDA_INFO_LEVEL=-v devcontainer
- name: Generate docs and test check them
run: |
set -x
docker exec --user vscode mlos-core-devcontainer make CONDA_INFO_LEVEL=-v doc
- name: Deploy to GitHub pages
if: github.ref == 'refs/heads/main'
uses: JamesIves/github-pages-deploy-action@v4
with:
branch: gh-pages
folder: doc/build/html
clean: true
# TODO: Add code coverage upload support
# - name: Upload coverage to codecov
# if: github.repository == 'microsoft/mlos' && github.ref == 'refs/heads/main'
# uses: codecov/codecov-action@v1
# with:
# token: ${{ secrets.CODECOV_TOKEN }}
# file: ./coverage.xml
# flags: unittests
# fail_ci_if_error: true
- name: Cleanup the devcontainer
run: |
set -x
docker stop -t 1 mlos-core-devcontainer || true
docker rm --force mlos-core-devcontainer || true
- name: Container Registry Login
if: github.repository == 'microsoft/mlos' && github.ref == 'refs/heads/main'
uses: docker/login-action@v2
with:
registry: ${{ secrets.ACR_LOGINURL }}
username: ${{ secrets.ACR_USERNAME }}
password: ${{ secrets.ACR_PASSWORD }}
- name: Publish the container images
if: github.repository == 'microsoft/mlos' && github.ref == 'refs/heads/main'
timeout-minutes: 15
# We only push to the :latest tag, to avoid needing to cleanup the
# registry manually (there's currently no API for that).
run: |
set -x
docker tag devcontainer-cli:latest ${{ secrets.ACR_LOGINURL }}/devcontainer-cli:latest
docker push ${{ secrets.ACR_LOGINURL }}/devcontainer-cli:latest
docker tag mlos-core-devcontainer:latest ${{ secrets.ACR_LOGINURL }}/mlos-core-devcontainer:latest
docker push ${{ secrets.ACR_LOGINURL }}/mlos-core-devcontainer:latest

108
.github/workflows/linux.yml поставляемый Normal file
Просмотреть файл

@ -0,0 +1,108 @@
name: MLOS Linux
on:
workflow_dispatch:
inputs:
tags:
description: Manual MLOS Linux run
push:
branches: [ main ]
pull_request:
branches: [ main ]
schedule:
- cron: "1 0 * * *"
jobs:
Linux:
runs-on: ubuntu-latest
# Test multiple versions of python.
strategy:
matrix:
python_version:
# Empty string is the floating most recent version of python
# (useful to catch new compatibility issues in nightly builds)
- ""
- "3.8"
- "3.9"
- "3.10"
# FIXME: There are currently several missing/broken dependencies for python 3.11.
#- "3.11"
env:
cache_cur_date: 0000-00-00
cache_cur_hour: 00
cache_prev_hour: 23
steps:
- uses: actions/checkout@v3
- uses: conda-incubator/setup-miniconda@v2
- name: Set cache timestamp variables
id: set_cache_vars
run: |
set -x
if [ -z "${{ matrix.python_version }}" ]; then
CONDA_ENV_NAME=mlos_core
else
CONDA_ENV_NAME="mlos_core-${{ matrix.python_version }}"
fi
echo "CONDA_ENV_NAME=$CONDA_ENV_NAME" >> $GITHUB_ENV
echo "cache_cur_date=$(date -u +%Y-%m-%d)" >> $GITHUB_ENV
echo "cache_cur_hour=$(date -u +%H)" >> $GITHUB_ENV
echo "cache_prev_hour=$(date -u -d'1 hour ago' +%H)" >> $GITHUB_ENV
echo "CONDA=$CONDA" >> $GITHUB_ENV
- name: Restore cached conda environment
id: restore-conda-cache
if: github.event_name != 'schedule'
uses: actions/cache@v3
with:
path: ${{ env.CONDA }}/envs/${{ env.CONDA_ENV_NAME }}
key: conda-${{ runner.os }}-${{ env.CONDA_ENV_NAME }}-${{ hashFiles('conda-envs/${{ env.CONDA_ENV_NAME }}.yml') }}-${{ hashFiles('mlos_core/setup.py') }}-${{ hashFiles('mlos_bench/setup.py') }}-${{ env.cache_cur_date }}-${{ env.cache_cur_hour }}
restore-keys: |
conda-${{ runner.os }}-${{ env.CONDA_ENV_NAME }}-${{ hashFiles('conda-envs/${{ env.CONDA_ENV_NAME }}.yml') }}-${{ hashFiles('mlos_core/setup.py') }}-${{ hashFiles('mlos_bench/setup.py') }}-${{ env.cache_cur_date }}-${{ env.cache_prev_hour }}
conda-${{ runner.os }}-${{ env.CONDA_ENV_NAME }}-${{ hashFiles('conda-envs/${{ env.CONDA_ENV_NAME }}.yml') }}-${{ hashFiles('mlos_core/setup.py') }}-${{ hashFiles('mlos_bench/setup.py') }}-${{ env.cache_cur_date }}
- name: Log some environment variables for debugging
run: |
set -x
printenv
echo "cache_cur_date: $cache_cur_date"
echo "cache_cur_hour: $cache_cur_hour"
echo "cache_prev_hour: $cache_prev_hour"
echo "cache-hit: ${{ steps.restore-conda-cache.outputs.cache-hit }}"
- name: Update and configure conda
run: |
set -x
conda config --set channel_priority strict
#conda update -v -y -n base conda
# Try and speed up the pipeline by using a faster solver:
- name: Install and default to mamba solver
run: |
set -x
conda install -v -y -n base conda-libmamba-solver
# Try to set either of the configs for the solver.
conda config --set experimental_solver libmamba || true
conda config --set solver libmamba || true
echo "CONDA_EXPERIMENTAL_SOLVER=libmamba" >> $GITHUB_ENV
echo "EXPERIMENTAL_SOLVER=libmamba" >> $GITHUB_ENV
- name: Create/update mlos_core conda environment
run: make CONDA_ENV_NAME=$CONDA_ENV_NAME CONDA_INFO_LEVEL=-v conda-env
# This is moreso about code cleanliness, which is a dev thing, not a
# functionality thing, and the rules for that change between python versions,
# so only do this for the default in the devcontainer.
#- name: Run lint checks
# run: make CONDA_ENV_NAME=$CONDA_ENV_NAME check
# Only run the coverage checks on the devcontainer job.
- name: Run tests
run: make CONDA_ENV_NAME=$CONDA_ENV_NAME SKIP_COVERAGE=true test
- name: Generate and test binary distribution files
run: make CONDA_ENV_NAME=$CONDA_ENV_NAME CONDA_INFO_LEVEL=-v dist dist-test

7
.github/workflows/markdown-link-check-config.json поставляемый Normal file
Просмотреть файл

@ -0,0 +1,7 @@
{
"timeout": "20s",
"retryOn429": true,
"retryCount": 5,
"fallbackRetryDelay": "30s",
"aliveStatusCodes": [200, 203, 206, 403, 429]
}

26
.github/workflows/markdown-link-check.yml поставляемый Normal file
Просмотреть файл

@ -0,0 +1,26 @@
name: MLOS Markdown Link Check
on:
workflow_dispatch:
inputs:
tags:
description: Manual MLOS Markdown Link Check run
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
# Check in-repo markdown links
markdown-link-check:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v3
- uses: gaurav-nelson/github-action-markdown-link-check@v1
with:
use-quiet-mode: yes
use-verbose-mode: yes
folder-path: './doc, ./mlos_core, ./mlos_bench, ./.devcontainer'
file-path: './CODE_OF_CONDUCT.md, ./CONTRIBUTING.md, ./README.md, ./SECURITY.md'
config-file: './.github/workflows/markdown-link-check-config.json'

134
.github/workflows/windows.yml поставляемый Normal file
Просмотреть файл

@ -0,0 +1,134 @@
name: MLOS Windows
on:
workflow_dispatch:
inputs:
tags:
description: Manual MLOS Linux run
push:
branches: [ main ]
pull_request:
branches: [ main ]
schedule:
- cron: "1 0 * * *"
jobs:
Windows:
runs-on: windows-latest
defaults:
run:
shell: pwsh
env:
CONDA_ENV_NAME: mlos_core
CONDA_ENV_YML: mlos_core-windows.yml
cache_cur_date: 0000-00-00
cache_cur_hour: 00
cache_prev_hour: 23
steps:
- uses: actions/checkout@v3
- uses: conda-incubator/setup-miniconda@v2
- name: Set cache timestamp variables
id: set_cache_vars
run: |
"cache_cur_date=$(date -u +%Y-%m-%d)" >> $GITHUB_ENV
"cache_cur_hour=$(date -u +%H)" >> $GITHUB_ENV
"cache_prev_hour=$(date -u -d'1 hour ago' +%H)" >> $GITHUB_ENV
"CONDA=$env:CONDA" >> $GITHUB_ENV
- name: Add conda libs to the PATH
run: |
$env:PATH = "$env:CONDA\condabin;$env:PATH"
$env:PATH = "$env:CONDA\bin;$env:PATH"
$env:PATH = "$env:CONDA\Scripts;$env:PATH"
$env:PATH = "$env:CONDA\Library\bin;$env:PATH"
$env:PATH = "$env:CONDA\Library\usr\bin;$env:PATH"
$env:PATH = "$env:CONDA\Library\bin;$env:PATH"
$env:PATH = "$env:CONDA\Library\mingw-w64\bin;$env:PATH"
$env:PATH = "$env:CONDA;$env:PATH"
"$env:PATH" >> $GITHUB_ENV
- name: Restore cached conda environment
id: restore-conda-cache
if: github.event_name != 'schedule'
uses: actions/cache@v3
with:
path: ${{ env.CONDA }}/envs/mlos_core
key: conda-${{ runner.os }}-${{ env.CONDA_ENV_NAME }}-${{ hashFiles('conda-envs/${{ env.CONDA_ENV_YML }}') }}-${{ hashFiles('mlos_core/setup.py') }}-${{ hashFiles('mlos_bench/setup.py') }}-${{ env.cache_cur_date }}-${{ env.cache_cur_hour }}
restore-keys: |
conda-${{ runner.os }}-${{ env.CONDA_ENV_NAME }}-${{ hashFiles('conda-envs/${{ env.CONDA_ENV_YML }}') }}-${{ hashFiles('mlos_core/setup.py') }}-${{ hashFiles('mlos_bench/setup.py') }}-${{ env.cache_cur_date }}-${{ env.cache_prev_hour }}
conda-${{ runner.os }}-${{ env.CONDA_ENV_NAME }}-${{ hashFiles('conda-envs/${{ env.CONDA_ENV_YML }}') }}-${{ hashFiles('mlos_core/setup.py') }}-${{ hashFiles('mlos_bench/setup.py') }}-${{ env.cache_cur_date }}
- name: Log some environment variables for debugging
run: |
Get-ChildItem -Recurse Env:
Write-Host "cache_cur_date: $env:cache_cur_date"
Write-Host "cache_cur_hour: $env:cache_cur_hour"
Write-Host "cache_prev_hour: $env:cache_prev_hour"
Write-Host "cache-hit: ${{ steps.restore-conda-cache.outputs.cache-hit }}"
- name: Update and configure conda
run: |
conda config --set channel_priority strict
#conda update -v -y -n base conda
# Try and speed up the pipeline by using a faster solver:
- name: Install and default to mamba solver
run: |
conda install -v -y -n base conda-libmamba-solver
# Try to set either of the configs for the solver.
if (!(conda config --set experimental_solver libmamba)) { conda config --set solver libmamba }
"CONDA_EXPERIMENTAL_SOLVER=libmamba" >> $GITHUB_ENV
"EXPERIMENTAL_SOLVER=libmamba" >> $GITHUB_ENV
- name: Create/update mlos_core conda environment
run: |
if (! (conda env list | Select-String -Pattern "^$env:CONDA_ENV_NAME ") ) { conda env create -v -n $env:CONDA_ENV_NAME -f conda-envs/$env:CONDA_ENV_YML }
conda env update -v -n $env:CONDA_ENV_NAME -f conda-envs/$env:CONDA_ENV_YML --prune
# This is moreso about code cleanliness, which is a dev thing, not a
# functionality thing, and the rules for that change between python versions,
# so only do this for the default in the devcontainer.
#- name: Run lint checks
# run: conda run -n $env:CONDA_ENV_NAME pylint -j0 mlos_core/mlos_core mlos_bench/mlos_bench
# Only run the coverage checks on the devcontainer job.
- name: Run tests
run: |
conda run -n $env:CONDA_ENV_NAME pytest --junitxml=junit/test-results.xml mlos_core/ mlos_bench/
# Note: unlike the Makefile version, the pwsh version of these rules are all run within a single shell context, so we can
# split commands across lines with CWD maintained (hence we also require the "cd .." here).
- name: Generate and test binary distribution files
run: |
# Build the mlos_core wheel.
cd mlos_core
conda run -n $env:CONDA_ENV_NAME python setup.py bdist_wheel
cd ..
$mlos_core_whl = (Resolve-Path mlos_core/dist/mlos_core-*-py3-none-any.whl | Select-Object -ExpandProperty Path)
echo $mlos_core_whl
# Build the mlos_bench wheel.
cd mlos_bench
conda run -n $env:CONDA_ENV_NAME python setup.py bdist_wheel
cd ..
$mlos_bench_whl = (Resolve-Path mlos_bench/dist/mlos_bench-*-py3-none-any.whl | Select-Object -ExpandProperty Path)
echo $mlos_bench_whl
# Setup a clean environment to test installing/using them.
$PythonVersReq = (conda list -n $env:CONDA_ENV_NAME | Select-String -AllMatches -Pattern '^python\s+([0-9.]+)\s+').Matches.Groups[1].Value
conda create -y -v -n mlos-dist-test-$env:PythonVersion python=${PythonVersReq}
conda install -y -v -n mlos-dist-test-$env:PythonVersion vswhere vs2019_win-64
conda install -y -v -n mlos-dist-test-$env:PythonVersion conda-forge::GPy
conda run -n mlos-dist-test-$env:PythonVersion pip install pytest pytest-timeout pytest-forked pytest-xdist
# Install mlos_core wheel.
conda run -n mlos-dist-test-$env:PythonVersion pip install "${mlos_core_whl}[full]"
# Install mlos_bench wheel.
conda run -n mlos-dist-test-$env:PythonVersion pip install "${mlos_bench_whl}[full]"
# Just pick one simple test to run for now.
# The rest should have been handled in a separate step.
conda run -n mlos-dist-test-$env:PythonVersion python -m pytest mlos_core/mlos_core/tests/spaces/spaces_test.py
# Run a simple mlos_bench test.
conda run -n mlos-dist-test-$env:PythonVersion python -m pytest mlos_bench/mlos_bench/tests/environment/mock_env_test.py

2
.vscode/extensions.json поставляемый
Просмотреть файл

@ -11,7 +11,7 @@
"trond-snekvik.simple-rst", "trond-snekvik.simple-rst",
"DavidAnson.vscode-markdownlint", // Linter for markdown files "DavidAnson.vscode-markdownlint", // Linter for markdown files
"huntertran.auto-markdown-toc", // Auto-generated Markdown Table of Contents "huntertran.auto-markdown-toc", // Auto-generated Markdown Table of Contents
"ms-azure-devops.azure-pipelines", // Azure Pipelines integration "cschleiden.vscode-github-actions", // GitHub Actions integration
"ms-azuretools.vscode-docker", "ms-azuretools.vscode-docker",
"waderyan.gitblame", // Enhances git blame experience "waderyan.gitblame", // Enhances git blame experience
"donjayamanne.githistory", // Enhanced git history experience "donjayamanne.githistory", // Enhanced git history experience

Просмотреть файл

@ -21,7 +21,7 @@ MKDIR_BUILD := $(shell mkdir -p build)
MAKEFLAGS += -j$(shell nproc) MAKEFLAGS += -j$(shell nproc)
.PHONY: all .PHONY: all
all: check test dist dist-test # doc all: check test dist dist-test doc licenseheaders
.PHONY: conda-env .PHONY: conda-env
conda-env: build/conda-env.${CONDA_ENV_NAME}.build-stamp conda-env: build/conda-env.${CONDA_ENV_NAME}.build-stamp
@ -41,7 +41,7 @@ clean-conda-env:
rm -f build/conda-env.${CONDA_ENV_NAME}.build-stamp rm -f build/conda-env.${CONDA_ENV_NAME}.build-stamp
.PHONY: check .PHONY: check
check: pycodestyle pydocstyle pylint # cspell licenseheaders check: pycodestyle pydocstyle pylint # cspell licenseheaders markdown-link-check
.PHONY: pycodestyle .PHONY: pycodestyle
pycodestyle: conda-env build/pycodestyle.mlos_core.${CONDA_ENV_NAME}.build-stamp build/pycodestyle.mlos_bench.${CONDA_ENV_NAME}.build-stamp pycodestyle: conda-env build/pycodestyle.mlos_core.${CONDA_ENV_NAME}.build-stamp build/pycodestyle.mlos_bench.${CONDA_ENV_NAME}.build-stamp
@ -91,6 +91,20 @@ build/cspell-container.build-stamp:
$(MAKE) -C .devcontainer/build cspell $(MAKE) -C .devcontainer/build cspell
touch $@ touch $@
.PHONY: markdown-link-check
ifeq ($(DOCKER),)
markdown-link-check:
@echo "NOTE: docker is not available. Skipping markdown-link-check check."
else
markdown-link-check: build/markdown-link-check-container.build-stamp
./.devcontainer/scripts/run-markdown-link-check.sh
endif
build/markdown-link-check-container.build-stamp:
# Build the docker image with markdown-link-check in it.
$(MAKE) -C .devcontainer/build markdown-link-check
touch $@
.PHONY: pylint .PHONY: pylint
pylint: conda-env build/pylint.mlos_core.${CONDA_ENV_NAME}.build-stamp build/pylint.mlos_bench.${CONDA_ENV_NAME}.build-stamp pylint: conda-env build/pylint.mlos_core.${CONDA_ENV_NAME}.build-stamp build/pylint.mlos_bench.${CONDA_ENV_NAME}.build-stamp
@ -132,24 +146,10 @@ PYTEST_OPTIONS :=
# Allow optionally skipping coverage calculations during local testing to skip up inner dev loop. # Allow optionally skipping coverage calculations during local testing to skip up inner dev loop.
SKIP_COVERAGE := $(shell echo $${SKIP_COVERAGE:-} | grep -i -x -e 1 -e true) SKIP_COVERAGE := $(shell echo $${SKIP_COVERAGE:-} | grep -i -x -e 1 -e true)
# When running in Azure pipeline, add some additional arguments for pytest-azurepipelines plugin.
ifneq ($(SYSTEM_JOBDISPLAYNAME),)
PYTEST_OPTIONS += --napoleon-docstrings --test-run-title="$(SYSTEM_JOBDISPLAYNAME)"
ifeq ($(SYSTEM_JOBDISPLAYNAME),DevContainer)
SKIP_COVERAGE :=
else
SKIP_COVERAGE := true
PYTEST_OPTIONS += --no-coverage-upload
endif
endif
ifeq ($(SKIP_COVERAGE),) ifeq ($(SKIP_COVERAGE),)
PYTEST_OPTIONS += --cov=. --cov-append --cov-report=xml --cov-report=html --junitxml=junit/test-results.xml --local-badge-output-dir=doc/source/badges/ PYTEST_OPTIONS += --cov=. --cov-append --cov-report=xml --cov-report=html --junitxml=junit/test-results.xml --local-badge-output-dir=doc/source/badges/
endif endif
testing:
@echo "$(PYTEST_OPTIONS)"
# Run the pytest target on only the modules that have changed recently, but # Run the pytest target on only the modules that have changed recently, but
# make sure the coverage report is for both of them when used in the pipeline. # make sure the coverage report is for both of them when used in the pipeline.
# NOTE: When run locally, the junit/test-results.xml will only include the # NOTE: When run locally, the junit/test-results.xml will only include the
@ -297,7 +297,7 @@ doc/build/html/index.html: $(SPHINX_API_RST_FILES) doc/Makefile
# See check-doc # See check-doc
.PHONY: doc .PHONY: doc
doc: doc/build/html/staticwebapp.config.json build/check-doc.build-stamp build/linklint-doc.build-stamp doc: doc/build/html/.nojekyll build/check-doc.build-stamp build/linklint-doc.build-stamp
doc/build/html/htmlcov/index.html: doc/build/html/index.html doc/build/html/htmlcov/index.html: doc/build/html/index.html
# Make the codecov html report available for the site. # Make the codecov html report available for the site.
@ -305,9 +305,9 @@ doc/build/html/htmlcov/index.html: doc/build/html/index.html
mkdir -p doc/build/html/htmlcov mkdir -p doc/build/html/htmlcov
touch doc/build/html/htmlcov/index.html touch doc/build/html/htmlcov/index.html
doc/build/html/staticwebapp.config.json: doc/build/html/index.html doc/build/html/htmlcov/index.html doc/staticwebapp.config.json doc/build/html/.nojekyll: doc/build/html/index.html doc/build/html/htmlcov/index.html
# Copy the azure static web app config file to the doc build directory. # Make sure that github pages doesn't try to run jekyll on the docs.
cp doc/staticwebapp.config.json doc/build/html/ touch doc/build/html/.nojekyll
.PHONY: check-doc .PHONY: check-doc
check-doc: build/check-doc.build-stamp check-doc: build/check-doc.build-stamp

Просмотреть файл

@ -1,7 +1,7 @@
# MlosCore # MlosCore
[![Linux Build Status](https://msgsl.visualstudio.com/MLOS/_apis/build/status/MlosCore%20Linux?branchName=main)](https://msgsl.visualstudio.com/MLOS/_build/latest?definitionId=34&branchName=main) [![Test Run Status](https://microsoft.github.io/MLOS/_images/tests.svg)](https://microsoft.github.io/MLOS/_images/tests.svg)
[![Windows Build Status](https://msgsl.visualstudio.com/MLOS/_apis/build/status/MlosCore%20Windows?branchName=main)](https://msgsl.visualstudio.com/MLOS/_build/latest?definitionId=61&branchName=main) [![Code Coverage Status](https://microsoft.github.io/MLOS/_images/coverage.svg)](https://microsoft.github.io/MLOS/_images/coverage.svg)
This repository contains a stripped down implementation of essentially just the core optimizer and config space description APIs from the original [MLOS](https://github.com/microsoft/MLOS) as well as the `mlos-bench` module intended to help automate and manage running experiments for autotuning systems with `mlos-core`. This repository contains a stripped down implementation of essentially just the core optimizer and config space description APIs from the original [MLOS](https://github.com/microsoft/MLOS) as well as the `mlos-bench` module intended to help automate and manage running experiments for autotuning systems with `mlos-core`.
@ -56,7 +56,7 @@ Simply open the project in VSCode and follow the prompts to build and open the d
conda activate mlos_core conda activate mlos_core
``` ```
2. Run the [`BayesianOptimization.ipynb`](./Notebooks/BayesianOptimization.ipynb) notebook. 2. Run the [`BayesianOptimization.ipynb`](./mlos_core/notebooks/BayesianOptimization.ipynb) notebook.
## Distributing ## Distributing
@ -83,5 +83,8 @@ Simply open the project in VSCode and follow the prompts to build and open the d
## See Also ## See Also
<!-- TODO: Reenable checking these once they no longer require authentication. -->
<!-- markdown-link-check-disable -->
- API and Examples Documentation: <https://aka.ms/mlos-core/docs> - API and Examples Documentation: <https://aka.ms/mlos-core/docs>
- Source Code Repository: <https://aka.ms/mlos-core/src> - Source Code Repository: <https://aka.ms/mlos-core/src>
<!-- markdown-link-check-enable -->

1
codecov.yml Normal file
Просмотреть файл

@ -0,0 +1 @@
comment: false

Просмотреть файл

@ -1,33 +0,0 @@
{
"auth": {
"identityProviders": {
"azureActiveDirectory": {
"registration": {
"openIdIssuer": "https://login.microsoftonline.com/72f988bf-86f1-41af-91ab-2d7cd011db47/v2.0",
"clientIdSettingName": "AZURE_CLIENT_ID",
"clientSecretSettingName": "AZURE_CLIENT_SECRET"
}
}
}
},
"routes": [
{
"route": "/.auth/login/github",
"statusCode": 404
},
{
"route": "/.auth/login/twitter",
"statusCode": 404
},
{
"route": "/*",
"allowedRoles": ["authenticated"]
}
],
"responseOverrides": {
"401": {
"statusCode": 302,
"redirect": "/.auth/login/aad"
}
}
}

Просмотреть файл

@ -12,7 +12,7 @@ Which are implemented using [`Services`](../service/).
Environments also have [`Tunables`](../tunables/) and [`TunableGroups`](../tunables/) for controlling their configuration. Environments also have [`Tunables`](../tunables/) and [`TunableGroups`](../tunables/) for controlling their configuration.
Environments can also be stackable via the [`CompositeEnvironment`](./composite.py) class. Environments can also be stackable via the [`CompositeEnvironment`](./composite_env.py) class.
For instance, a VM, OS, and Application Environment can be stacked together to form a full benchmarking environment, each with their own tunables. For instance, a VM, OS, and Application Environment can be stacked together to form a full benchmarking environment, each with their own tunables.