Skip to content

Commit

Permalink
initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
singhalkarun committed Jan 10, 2025
0 parents commit 419d9e2
Show file tree
Hide file tree
Showing 8 changed files with 687 additions and 0 deletions.
57 changes: 57 additions & 0 deletions .github/workflows/build-and-push.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
name: Build and Push Docker Image

on:
push:
branches:
- main
- dev
release:
types: [published]
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}

jobs:
build-and-push:
runs-on: ubuntu-latest
# Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job.
permissions:
contents: read
packages: write
steps:

- name: Checkout code
uses: actions/checkout@v2

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2

- name: Log in to the Container registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
# minimal
type=pep440,pattern={{version}},value=${{ github.ref_name }},enable=${{ github.event_name == 'release' }}
# branch event
type=ref,event=branch
type=raw,value=latest,enable=${{ github.event_name == 'release' }}
- name: Build and Push Docker image
uses: docker/build-push-action@v4
with:
# build-args:
context: .
push: true
cache-from: type=gha
cache-to: type=gha,mode=max
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
10 changes: 10 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Python-generated files
__pycache__/
*.py[oc]
build/
dist/
wheels/
*.egg-info

# Virtual environments
.venv
1 change: 1 addition & 0 deletions .python-version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3.13
Empty file added README.md
Empty file.
Empty file added __init__.py
Empty file.
38 changes: 38 additions & 0 deletions main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@

from typing import Dict
import docker
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()


client = docker.from_env()

class RegistryCredentials(BaseModel):
username: str
password: str

class CreateServiceRequest(BaseModel):
name: str
image_url: str
registry_credentials: RegistryCredentials = None
memory_limit: str = None
cpu_limit: str = None
environment_variables: Dict[str, str] = None

# write a function that takes image url, registry credentials (use them to pull private image), container name, memory limit, cpu limit, environment variables and starts a container and returns the container id
@app.post("/")
def start_container(request: CreateServiceRequest):
if request.registry_credentials:
client.login(username=request.registry_credentials.username, password=request.registry_credentials.password)

container = client.containers.run(
image=request.image_url,
name=request.name,
detach=True,
mem_limit=request.memory_limit,
environment=request.environment_variables,
cpu_count=request.cpu_limit
)
return {"container_id": container.id}
10 changes: 10 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[project]
name = "node-manager"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.13"
dependencies = [
"docker>=7.1.0",
"fastapi[standard]>=0.115.6",
]
571 changes: 571 additions & 0 deletions uv.lock

Large diffs are not rendered by default.

0 comments on commit 419d9e2

Please sign in to comment.