Add retry
field to ExperimentSpec
#1042
Workflow file for this run
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: 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/* |