Skip to content

Add retry field to ExperimentSpec #1046

Add retry field to ExperimentSpec

Add retry field to ExperimentSpec #1046

Workflow file for this run

name: Main
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
on:
pull_request:
branches:
- main
push:
branches:
- main
tags:
- 'v*.*.*'
env:
CACHE_PREFIX: v0 # Change this to invalidate existing cache.
DEFAULT_PYTHON: 3.8
BEAKER_WORKSPACE: ai2/petew-testing
jobs:
compatibility:
name: Compatibility
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v3
- name: Setup Python environment
uses: ./.github/actions/setup-venv
with:
python-version: ${{ env.DEFAULT_PYTHON }}
cache-prefix: ${{ env.CACHE_PREFIX }}
- name: Setup Beaker
uses: allenai/setup-beaker@v2
with:
token: ${{ secrets.BEAKER_TOKEN }}
workspace: ${{ env.BEAKER_WORKSPACE }}
- name: Check config compatibility
shell: bash
run: |
. .venv/bin/activate
python -c 'from beaker import Beaker; print(Beaker.from_env().account.name)'
- name: Clean up
if: always()
shell: bash
run: |
. .venv/bin/activate
pip uninstall -y beaker-py
pydantic_v1:
name: Pydantic V1
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v3
- name: Setup Python environment
uses: ./.github/actions/setup-venv
with:
python-version: ${{ env.DEFAULT_PYTHON }}
cache-prefix: pydantic-v1-${{ env.CACHE_PREFIX }}
packages: pydantic<2.0
- name: Check Pydantic V1 compatibility
shell: bash
run: |
. .venv/bin/activate
pytest -v tests/data_model_test.py
- name: Clean up
if: always()
shell: bash
run: |
. .venv/bin/activate
pip uninstall -y beaker-py
checks:
name: ${{ matrix.os }} - python ${{ matrix.python }} - ${{ matrix.task.name }}
runs-on: ${{ matrix.os }}
timeout-minutes: 15
env:
BEAKER_TOKEN: ${{ secrets.BEAKER_TOKEN }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
python: [3.8]
task:
- name: Lint
run: |
ruff check .
- name: Type check
run: |
mypy --check-untyped-defs .
- name: Unit tests
run: |
pytest -v --color=yes --durations=10 tests/
- name: Doc tests
run: |
pytest -v --color=yes --durations=10 --doctest-modules -k 'beaker/__init__.py or beaker.client' beaker/
- name: Doc tests (B)
run: |
pytest -v --color=yes --durations=10 --doctest-modules -k 'not beaker/__init__.py and not beaker.client' beaker/
- name: Images
run: |
# Clean up local cache.
docker system prune --all --force
# Build test image for uploading.
cd test_fixtures/docker \
&& docker build --build-arg "COMMIT_SHA=$COMMIT_SHA" -t beaker-py-test . \
&& cd -
pytest -rP -v --color=yes integration_tests/images_test.py
- name: Jobs
run: |
pytest -rP -v --color=yes integration_tests/jobs_test.py
- name: Experiments
run: |
pytest -rP -v --color=yes integration_tests/experiments_test.py
- name: Datasets
run: |
pytest -rP -v --color=yes integration_tests/datasets_test.py
- name: Sweep example
run: |
cd examples/sweep
# NOTE: anytime you change something here, make sure the run instructions
# in 'examples/sweep/README.md' are still up-to-date.
docker build -t sweep .
python run.py "sweep" "ai2/beaker-py-sweep-example"
- name: Build
run: |
python -m build
- name: Style
run: |
isort --check .
black --check .
- name: Docs
run: |
cd docs && make html
steps:
- uses: actions/checkout@v3
- name: Determine current commit SHA (pull request)
if: github.event_name == 'pull_request'
run: |
echo "COMMIT_SHA=${{ github.event.pull_request.head.sha }}" >> $GITHUB_ENV
- name: Determine current commit SHA (push)
if: github.event_name != 'pull_request'
run: |
echo "COMMIT_SHA=$GITHUB_SHA" >> $GITHUB_ENV
- name: Setup Python environment
uses: ./.github/actions/setup-venv
with:
python-version: ${{ matrix.python }}
cache-prefix: ${{ env.CACHE_PREFIX }}
- name: ${{ matrix.task.name }}
shell: bash
run: |
set -euo pipefail
. .venv/bin/activate
${{ matrix.task.run }}
- name: Upload package distribution files
if: matrix.task.name == 'Build'
uses: actions/upload-artifact@v3
with:
name: package
path: dist
- name: Clean up
if: always()
shell: bash
run: |
. .venv/bin/activate
pip uninstall -y beaker-py
docker:
name: Docker
runs-on: ubuntu-latest
env:
image: ghcr.io/allenai/beaker-py
steps:
- uses: actions/checkout@v3
- name: Log in to ghcr.io
run: |
echo ${{ secrets.GHCR_TOKEN }} | docker login ghcr.io -u ${{ secrets.GHCR_USER }} --password-stdin
- name: Build image
run: |
docker build -t "${image}" .
- name: Test image
run: |
docker run \
--rm \
--entrypoint python \
-e BEAKER_TOKEN=${{ secrets.BEAKER_TOKEN }} \
"${image}" \
-c "from beaker import Beaker; beaker = Beaker.from_env(); print(beaker.account.whoami())"
- name: Publish image to container registry
if: startsWith(github.ref, 'refs/tags/')
shell: bash
run: |
TAG_MAJOR_MINOR_PATCH=${GITHUB_REF#refs/tags/}
TAG_MAJOR_MINOR=${TAG_MAJOR_MINOR_PATCH%.*}
TAG_MAJOR=${TAG_MAJOR_MINOR_PATCH%.*.*}
TAG_LATEST="latest"
for TAG in $TAG_MAJOR_MINOR_PATCH $TAG_MAJOR_MINOR $TAG_MAJOR $TAG_LATEST
do
echo "Pushing ${image}:${TAG}"
docker tag "${image}" "${image}:${TAG}"
docker push "${image}:${TAG}"
done
release:
name: Release
runs-on: ubuntu-latest
needs: [checks, docker]
if: startsWith(github.ref, 'refs/tags/')
steps:
- uses: actions/checkout@v1 # needs v1 for now
- name: Log in to ghcr.io
run: |
echo ${{ secrets.GHCR_TOKEN }} | docker login ghcr.io -u ${{ secrets.GHCR_USER }} --password-stdin
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: ${{ env.DEFAULT_PYTHON }}
- name: Install requirements
run: |
pip install --upgrade pip setuptools wheel build
pip install -e .[dev]
- name: Prepare environment
run: |
echo "RELEASE_VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV
echo "TAG=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
- name: Download package distribution files
uses: actions/download-artifact@v3
with:
name: package
path: dist
- name: Generate release notes
run: |
python scripts/release_notes.py > ${{ github.workspace }}-RELEASE_NOTES.md
- name: Publish package to PyPI
run: |
twine upload -u __token__ -p ${{ secrets.PYPI_PASSWORD }} dist/*
- name: Publish GitHub release
uses: softprops/action-gh-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
body_path: ${{ github.workspace }}-RELEASE_NOTES.md
prerelease: ${{ contains(env.TAG, 'rc') }}
files: |
dist/*