Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
91 commits
Select commit Hold shift + click to select a range
92f0188
feat: add app-centric sdk surface with queue/api/task decorators
KAJdev Jul 1, 2026
a51a633
feat: add deploy pipeline, dev sessions, and rp cli
KAJdev Jul 1, 2026
7f0a45a
feat: bind dev templates to endpoints and verify live execution e2e
KAJdev Jul 1, 2026
f97280b
feat: add dev session refresh with file watching and storage-supporte…
KAJdev Jul 1, 2026
cce0176
feat: add pod task execution with runtime images and single-shot runner
KAJdev Jul 2, 2026
a5a3a75
feat: add custom image support for queue endpoints via bootstrap shim
KAJdev Jul 2, 2026
32dea10
feat: add queue runtime image and dev tag channel for runtime images
KAJdev Jul 2, 2026
948e49f
fix: install full package deps in runtimes test job
KAJdev Jul 2, 2026
eccea06
fix: filter lazy socket resource warnings in runner http tests
KAJdev Jul 2, 2026
f1814dd
fix: disable unraisable plugin in runtimes test job
KAJdev Jul 2, 2026
ad98a6d
feat: add api runtime server and unified bootstrap entrypoint
KAJdev Jul 2, 2026
3716886
fix: upgrade stale runpod installs in bootstrap and forward package spec
KAJdev Jul 2, 2026
62cc621
feat: probe interpreters and fetch standalone python in image shim
KAJdev Jul 2, 2026
b51a03a
fix: pretend scm version for tarball installs in bootstrap
KAJdev Jul 2, 2026
e74b604
fix: fail loudly on pythonless custom images instead of fetching an i…
KAJdev Jul 2, 2026
fe7a492
feat: vendor full runtime environment into artifacts at deploy time
KAJdev Jul 2, 2026
55dd9d4
feat: support python 3.10-3.14 with per-version gpu runtime images
KAJdev Jul 2, 2026
9538f6e
fix: use tarfile data filter for artifact extraction
KAJdev Jul 2, 2026
f2e0da5
feat: reconcile flash-bound endpoints during deploy
KAJdev Jul 2, 2026
7818704
feat: retry transient http failures and harden discovery scans
KAJdev Jul 2, 2026
dd2f0fd
fix: gpu driver injection, pool id expansion for pods, and job results
KAJdev Jul 2, 2026
c9872cb
fix: import List in tasks module
KAJdev Jul 2, 2026
4290a02
fix: fall back to RUNPOD_API_KEY env for module api key
KAJdev Jul 2, 2026
d3274ee
feat: pod log access via hapi and storage-dc pinning for gpu deploys
KAJdev Jul 2, 2026
5feb566
fix: pin cu128 torch wheels in gpu base image
KAJdev Jul 2, 2026
9c222ff
fix: pin cp310 torch stack on cu128 index
KAJdev Jul 2, 2026
a5f89f2
fix: pin cu128 torch stack via extra index across all python versions
KAJdev Jul 2, 2026
5d0f47c
fix: retry proxy 404 propagation races on task execute
KAJdev Jul 2, 2026
e847a0f
feat: pretty cli console with dev lifecycle events and deploy phases
KAJdev Jul 2, 2026
264b984
feat: unify runpod and rp entry points with grouped help panels
KAJdev Jul 3, 2026
db7d26f
feat: rich help rendering for legacy click subcommands
KAJdev Jul 3, 2026
fcd4a6a
fix: render click usage errors instead of tracebacks
KAJdev Jul 3, 2026
0be0f2f
refactor: single plain-click command tree without help panels
KAJdev Jul 3, 2026
abc0024
fix: expand gpu any to pool ids and quiet the dev loop ui
KAJdev Jul 3, 2026
b70f898
fix: async-safe awaitable driving, console links, quieter dev ui
KAJdev Jul 3, 2026
51d7ca5
feat: full console urls in deploy and dev summaries
KAJdev Jul 3, 2026
dc06b01
feat: live vendor package feed, upload bar, and upload retries in deploy
KAJdev Jul 4, 2026
1191bdf
feat: ship full module source in dev, worker monitor feed, sleeker de…
KAJdev Jul 4, 2026
142d03b
fix: tee function stdout to container logs and name interleaved dev f…
KAJdev Jul 4, 2026
6ebd36a
feat: stream worker stdout into rp dev with request-style lifecycle l…
KAJdev Jul 6, 2026
07e7fee
feat: nested dev calls, realtime log attach, refresh diffs
KAJdev Jul 6, 2026
789e471
fix: install runpod package in task runtime images
KAJdev Jul 6, 2026
8d350c1
fix: keyless dev payload construction
KAJdev Jul 6, 2026
ab4c10c
ci: disable fail-fast on runtime image matrix
KAJdev Jul 6, 2026
e1dfc83
ci: build runtime images even when gpu-base rebuild fails
KAJdev Jul 6, 2026
ff7c1b3
fix: make shipped module source inspectable for nested remote calls
KAJdev Jul 6, 2026
03c6cb3
fix: re-ship materialized module source on nested dev hops
KAJdev Jul 6, 2026
16ff3e8
feat: live api routes via source sync endpoint
KAJdev Jul 6, 2026
2d1bc64
fix: cancellable entrypoint with spinner-based session cleanup
KAJdev Jul 6, 2026
c2a25ae
feat: app and environment management, undeploy, and browser login
KAJdev Jul 6, 2026
c028747
feat: task lifecycle streaming in dev, long tasks via submit-poll
KAJdev Jul 6, 2026
a52577f
feat: task pod self-termination watchdog for abandoned clients
KAJdev Jul 6, 2026
54919bf
fix: keep task event sink attached across dev reloads
KAJdev Jul 6, 2026
4dcf329
fix: bind entrypoint exception before marshalling to the loop
KAJdev Jul 6, 2026
51f3317
feat: resolve gpu shorthand strings to device names and pools
KAJdev Jul 6, 2026
85f17db
feat: network volumes with app-wide placement solve
KAJdev Jul 7, 2026
5b46d61
feat: platform secrets with env rendering and rp secret cli
KAJdev Jul 7, 2026
5430107
feat: wrangler-style prompting for rp secret add
KAJdev Jul 7, 2026
a418531
feat: registry credentials with name resolution and rp registry cli
KAJdev Jul 7, 2026
be5d7e9
feat: platform-cached model references
KAJdev Jul 7, 2026
245e2d6
docs: apps-first readme and example suite doubling as e2e tests
KAJdev Jul 7, 2026
aefc85b
style: refine dev cli output
KAJdev Jul 8, 2026
db500aa
style: restore log stream pipe
KAJdev Jul 8, 2026
b9d5ef8
feat: add endpoint config params, rp init, rp update, and build-only …
KAJdev Jul 8, 2026
0f5ca89
docs: simplify readme
KAJdev Jul 8, 2026
d0ef53c
refactor: split showcase examples from the e2e example suite
KAJdev Jul 8, 2026
5a301bd
fix: anonymous login polling and local-python deploy default
KAJdev Jul 8, 2026
c657720
fix: retry proxy propagation 404s when polling task results
KAJdev Jul 8, 2026
3c6e9a7
fix: install resource dependencies on live api sync
KAJdev Jul 9, 2026
389dfa5
perf: cache dependency layers and skip gpu-base rebuilds for code-onl…
KAJdev Jul 9, 2026
5b5e96a
refactor: drop the config wizard and exec command group
KAJdev Jul 9, 2026
08d4ab9
refactor: standardize cli verbs to add/list/get/delete
KAJdev Jul 9, 2026
5372f90
feat: rp ssh POD_ID opens a pod terminal
KAJdev Jul 9, 2026
b3c5fd7
fix: clean errors for unknown pods and hide the ssh connect alias
KAJdev Jul 9, 2026
90ce271
fix: reject platform-cached models on task resources
KAJdev Jul 9, 2026
6c85a6c
fix: ignore fastapi testclient deprecation warning in pytest
KAJdev Jul 9, 2026
08017fb
test: cover the apps api client, targets, monitor, logs, and queue wo…
KAJdev Jul 9, 2026
c79afbc
test: cover console rendering
KAJdev Jul 9, 2026
5c423b0
test: cover deploy and dev command wiring
KAJdev Jul 9, 2026
6bbbe6b
test: cover bootstrap error surface, task lifecycle, and update inter…
KAJdev Jul 9, 2026
e795635
test: cover task runner self-termination and install helpers
KAJdev Jul 9, 2026
b031fb1
Merge remote-tracking branch 'origin/main' into feat/apps-sdk
KAJdev Jul 9, 2026
3397a3e
fix: address codeql alerts on raises, tar links, and duplicate tests
KAJdev Jul 9, 2026
1e145e8
ci: skip duplicate runtime image builds on same-repo prs
KAJdev Jul 9, 2026
43b5956
ci: publish runtime images on release instead of per pr
KAJdev Jul 9, 2026
7c3cc21
feat: job parity, streaming, and unified execution engine
KAJdev Jul 10, 2026
e5fea5e
refactor: extract apps graphql documents into api query and mutation …
KAJdev Jul 10, 2026
6ed7ca2
refactor: consolidate shared apps helpers into utils package
KAJdev Jul 10, 2026
68df2ce
feat: lazy top-level imports and curated runtime vendoring
KAJdev Jul 10, 2026
2a47e0e
feat: per-job queue options via with_options
KAJdev Jul 10, 2026
e8521ed
test: shell example runner with dev, deploy, and local modes
KAJdev Jul 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# keep the runtime image build context to what pip install needs:
# package source, metadata, and the files setup.py/MANIFEST.in read
.git
.github
.venv
build
benchmark_results
docs
examples
job_files
scripts
tests
uv.lock
**/__pycache__
**/*.pyc
*.egg-info
162 changes: 162 additions & 0 deletions .github/workflows/runtimes.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
name: Runtimes

# runtime images embed the runpod package, so they are published when a
# release ships (release-please merge -> github release), not per pr.
# the feature branch is a prerelease channel while the apps sdk is in
# development; runtime tests for prs run in ci via the full test suite.
on:
release:
types: [published]
push:
branches: [feat/apps-sdk]
paths:
- "runpod/runtimes/**"
- ".github/workflows/runtimes.yml"
workflow_dispatch:

concurrency:
group: runtimes-${{ github.ref }}
cancel-in-progress: true

env:
REGISTRY: docker.io
TAG_SUFFIX: latest

jobs:
changes:
runs-on: ubuntu-latest
outputs:
gpu-base: ${{ steps.filter.outputs.gpu-base || 'true' }}
steps:
- uses: actions/checkout@v7

# branch pushes rebuild the multi-gb torch base only when its
# definition changed; releases and manual runs always rebuild so
# published images never lag the release content
- uses: dorny/paths-filter@v3
if: github.event_name == 'push'
id: filter
with:
filters: |
gpu-base:
- 'runpod/runtimes/gpu-base/**'
- '.github/workflows/runtimes.yml'

test-runner:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7

- uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install test deps
run: |
pip install -e .
pip install pytest pytest-asyncio cloudpickle

- name: Run runtime tests
run: pytest tests/test_apps/test_tasks.py tests/test_apps/test_task_runner_http.py tests/test_apps/test_bootstrap.py -q -o addopts="" -p no:unraisableexception

build-gpu-base:
runs-on: ubuntu-latest
needs: [changes, test-runner]
if: needs.changes.outputs.gpu-base == 'true'
strategy:
# a transient registry/mirror failure on one leg must not cancel
# the other python versions
fail-fast: false
matrix:
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
steps:
- uses: actions/checkout@v7

- name: Clear space
run: |
sudo rm -rf /usr/share/dotnet /opt/ghc /usr/local/share/boost "$AGENT_TOOLSDIRECTORY"
docker system prune -af

- uses: docker/setup-buildx-action@v3

- name: Login to Docker Hub
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Build and push gpu base image
uses: docker/build-push-action@v6
with:
context: .
file: runpod/runtimes/gpu-base/Dockerfile
platforms: linux/amd64
build-args: |
PYTHON_VERSION=${{ matrix.python-version }}
push: true
tags: |
runpod/gpu-base:py${{ matrix.python-version }}-${{ env.TAG_SUFFIX }}
cache-from: type=gha,scope=gpu-base-py${{ matrix.python-version }}
cache-to: type=gha,mode=max,scope=gpu-base-py${{ matrix.python-version }}

build-runtimes:
runs-on: ubuntu-latest
# gpu legs build FROM the registry's gpu-base tag, so a skipped or
# failed gpu-base rebuild (e.g. torch mirror outage) must not block
# runtime images: the previously published base keeps working
needs: [test-runner, build-gpu-base]
if: always() && needs.test-runner.result == 'success'
strategy:
fail-fast: false
matrix:
kind: [task, queue, api]
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
accelerator: [cpu, gpu]
steps:
- uses: actions/checkout@v7

- name: Clear space
if: matrix.accelerator == 'gpu'
run: |
sudo rm -rf /usr/share/dotnet /opt/ghc /usr/local/share/boost "$AGENT_TOOLSDIRECTORY"
docker system prune -af

- uses: docker/setup-buildx-action@v3

- name: Login to Docker Hub
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Compute image names
id: names
run: |
if [ "${{ matrix.accelerator }}" = "gpu" ]; then
echo "base=runpod/gpu-base:py${{ matrix.python-version }}-${{ env.TAG_SUFFIX }}" >> "$GITHUB_OUTPUT"
repo="runpod/${{ matrix.kind }}-gpu"
else
echo "base=python:${{ matrix.python-version }}-slim" >> "$GITHUB_OUTPUT"
repo="runpod/${{ matrix.kind }}"
fi
tags="$repo:py${{ matrix.python-version }}-${{ env.TAG_SUFFIX }}"
# releases also pin a version tag for rollback
if [ "${{ github.event_name }}" = "release" ]; then
tags="$tags,$repo:py${{ matrix.python-version }}-${{ github.event.release.tag_name }}"
fi
echo "tags=$tags" >> "$GITHUB_OUTPUT"

- name: Build and push runtime image
uses: docker/build-push-action@v6
with:
context: .
file: runpod/runtimes/${{ matrix.kind }}/Dockerfile
platforms: linux/amd64
build-args: |
BASE_IMAGE=${{ steps.names.outputs.base }}
push: true
tags: ${{ steps.names.outputs.tags }}
cache-from: type=gha,scope=${{ matrix.kind }}-${{ matrix.accelerator }}-py${{ matrix.python-version }}
cache-to: type=gha,mode=max,scope=${{ matrix.kind }}-${{ matrix.accelerator }}-py${{ matrix.python-version }}
Loading
Loading