How Do I Deploy Actors Using the GitHub Integration?
The Pod-OS Management Dashboard can deploy and Socket Actors directly from a GitHub repository. This integration does not apply to Evolutionary Neural Memory or other built-in actor types.
There are two integration patterns. Choose the one that matches how your software is packaged:
| Pattern | Best for | Pod-OS does |
|---|---|---|
| Self-registering container | Apps built as Docker images by CI (GitHub Actions) | Pulls your image from GHCR and runs it; your container is responsible for connecting to the Gateway |
| Gateway starts software | Scripts or binaries cloned from Git at pod startup | Clones your repo into the pod, optionally builds, then runs your command or startup script |
Both patterns are configured in the GitHub / GitLab Integration section when you deploy a new Gateway (Deploy Actor Network) or add an actor to an existing Gateway (Add Actor).
Reference examples (public repositories)
Pod-OS publishes minimal, production-shaped Socket actor examples you can clone, deploy from the dashboard, or use as templates for your own repos:
| Pattern | Repository | Latest release |
|---|---|---|
| Self-registering container | PointOfData/podos-socket-self-register | v1.0.1 |
| Gateway starts software | PointOfData/podos-socket-gateway-starts | v1.0.1 |
Both examples dial the Gateway, answer AIP health probes (StatusRequest → Status), and listen on :62312 for Kubernetes readiness. Each repository README includes build steps, dashboard field values, and podos CLI verification commands.
Prerequisites
Before you begin, make sure you have:
- An active Pod-OS deployment with at least one Gateway
- A user account with the
developer,operator,tenant_administrator, ortenant_ownerrole - A GitHub repository containing your actor software
- Build or higher subscription if you need to customize compute resources (Explore tier uses defaults)
Creating a GitHub Personal Access Token (PAT)
Some deployments require a GitHub PAT. The scope you need depends on the integration pattern:
| Use case | PAT scope required |
|---|---|
| Private container image on GHCR (Category 1) | read:packages |
| Private GitHub repository clone (Category 2) | Repository Contents: Read (fine-grained) or repo (classic, for private repos) |
Create a fine-grained PAT (recommended)
Fine-grained tokens limit access to specific repositories.
- Sign in to GitHub and open Settings (your profile menu → Settings).
- In the left sidebar, scroll to Developer settings.
- Click Personal access tokens → Fine-grained tokens.
- Click Generate new token.
- Enter a Token name (for example,
pod-os-actor-deploy). - Set an Expiration (90 days is a reasonable default; rotate before it expires).
- Under Repository access, choose Only select repositories and pick the repo(s) your actor uses.
- Under Permissions → Repository permissions, set Contents to Read-only.
- For private GHCR images, also set Packages to Read-only under Account permissions (or the org that owns the package).
- Click Generate token.
- Copy the token immediately. GitHub shows it only once. If you lose it, you must generate a new token.
Create a classic PAT (alternative)
- Go to Settings → Developer settings → Personal access tokens → Tokens (classic).
- Click Generate new token (classic).
- Add a note and expiration date.
- Select scopes:
- Category 1 (private GHCR image): check
read:packages - Category 2 (private repo clone): check
repo(full control of private repositories) orpublic_repoif the repository is public
- Category 1 (private GHCR image): check
- Click Generate token and copy the value right away.
Retrieve or rotate a lost PAT
GitHub never displays an existing token again after creation. If you did not save it:
- Revoke the old token under Settings → Developer settings → Personal access tokens.
- Generate a new token using the steps above.
- Update the credential in the Pod-OS dashboard by re-deploying or editing the actor and entering the new PAT.
Store PATs only in the Pod-OS dashboard credential fields or your organization's secret manager. Do not commit tokens to Git.
Use Case 1: Self-Registering Container
Use this when CI (typically GitHub Actions) builds a Docker image and pushes it to GitHub Container Registry (ghcr.io).
How it works
- Your repository includes a
Dockerfileand a GitHub Actions workflow. - CI builds the image and pushes to
ghcr.io/<org>/<repo>:<tag>. - In the Pod-OS dashboard, you point the actor at the repository (and optionally override the image tag).
- Pod-OS deploys the container and passes Gateway connection details via environment variables.
- Your container connects to the Gateway and registers itself using the Pod-OS client libraries.
Environment variables available inside your container:
| Variable | Description |
|---|---|
PODOS_GATEWAY_HOST |
Gateway hostname (for example, mygateway-lb) |
PODOS_GATEWAY_PORT |
Gateway port (default 62312) |
PODOS_ACTOR_NAME |
The actor name you chose in the dashboard |
PODOS_GATEWAY_FQN |
Fully qualified gateway domain name |
Example GitHub Actions workflow
Add .github/workflows/build-actor.yml to your repository:
name: Build and Push Actor Image
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
- name: Log in to GHCR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: |
ghcr.io/${{ github.repository }}:${{ github.sha }}
ghcr.io/${{ github.repository }}:main
Push to main, wait for the workflow to finish, then deploy from the dashboard using tag main or the commit SHA.
Reference example: podos-socket-self-register
The public repo PointOfData/podos-socket-self-register is a complete working example of this pattern. After CI pushes the image, configure a Socket actor in the dashboard:
- Integration Category:
Self-registering container (image from CI) - Repository URL:
https://github.com/PointOfData/podos-socket-self-register - Branch / Tag:
main(orv1.0.1for a pinned release) - Container Image Override:
ghcr.io/pointofdata/podos-socket-self-register:main
No PAT is required for the public repository or public GHCR image. See the repository README for local Docker run commands and health-check verification.
Deploy through the dashboard
Option A: New Gateway (Deploy Actor Network)
- Log in to the Pod-OS Management Dashboard and open Dashboard.
- Click Deploy Actor Network.
- Configure your Gateway name and description.
- Add a Shell or Socket actor.
- Open Compute Configuration for that actor.
- In GitHub / GitLab Integration, set:
- Integration Category:
Self-registering container (image from CI) - Repository URL:
https://github.com/<org>/<repo> - Branch / Tag:
main(or the tag your CI publishes) - Container Image Override (optional):
ghcr.io/<org>/<repo>:main
- Integration Category:
- If the image is private on GHCR:
- Check Private image (requires image pull secret)
- Enter your GitHub Username
- Enter your GitHub PAT with
read:packagesscope - Optionally enter your Email
- Click Save Configuration, then Deploy.
Option B: Add to an existing Gateway
- Open Gateways and select your Gateway.
- Click Add Actor.
- Choose Socket (or Shell when available) and fill in name and description.
- Expand GitHub / GitLab Integration and follow the same fields as Option A, step 6–7.
- Click Deploy Actor.
Monitor progress in the streaming deployment view. When complete, your actor appears on the Actors page.
Use Case 2: Gateway Starts Software
Use this when your actor runs as a process started by the Gateway—not as a pre-built container you register yourself. Pod-OS clones your Git repository into the pod before the actor starts.
Important: This mode runs executables or scripts only. You cannot start a separate container image from actor_settings.ini.
How it works
- An init container clones your repository into a shared volume (default path:
/workspace/repo). - An optional Build Command compiles or prepares your code (for example,
makeorgo build ./...). - The Gateway starts your software:
- Shell actor: runs the Command Path you specify (for example,
/workspace/repo/bin/run). Stdin/stdout carry message traffic. - Socket actor: runs your Startup Script, which starts an application listening on a socket; the Gateway connects after the app is ready.
- Shell actor: runs the Command Path you specify (for example,
Repository layout
Shell actor
- Include an executable or script at the path you configure (for example,
bin/run). - After clone, that path must exist at the Command Path you enter in the dashboard.
Socket actor
- Include a startup script or command that launches your application.
- The application must listen on the port the Gateway expects (default
62312).
Reference example: podos-socket-gateway-starts
The public repo PointOfData/podos-socket-gateway-starts is a complete working example of this pattern. The repository includes a prebuilt static binary and startup script—no build step is required at deploy time. Configure a Socket actor in the dashboard:
- Integration Category:
Gateway starts software (clone repo) - Repository URL:
https://github.com/PointOfData/podos-socket-gateway-starts - Branch / Tag:
main(orv1.0.1for a pinned release) - Command Path / Startup Script Path:
/workspace/repo/bin/start.sh - Clone Path:
/workspace/repo(default)
No PAT is required for the public repository. See the repository README for rebuilding the committed binary and verifying health with the podos CLI.
Deploy through the dashboard
Option A: New Gateway (Deploy Actor Network)
- Log in and open Dashboard → Deploy Actor Network.
- Add a Shell or Socket actor and open Compute Configuration.
- In GitHub / GitLab Integration, set:
- Integration Category:
Gateway starts software (clone repo) - Repository URL:
https://github.com/<org>/<repo> - Branch / Tag:
main - Command Path (Shell) or path referenced by your startup script (Socket):
/workspace/repo/bin/run - Clone Path:
/workspace/repo(default) - Build Command (optional): e.g.
cd /workspace/repo && make - Startup Script (Socket, optional): inline script content if not using a file in the repo
- Integration Category:
- If the repository is private:
- Enter your GitHub PAT with repository Contents: Read access (see Creating a GitHub PAT above).
- Pod-OS stores the token in a Kubernetes secret and uses it only for the git-clone init container.
- Click Save Configuration, then Deploy.
Option B: Add to an existing Gateway
- Open Gateways → select Gateway → Add Actor.
- Choose actor type, name, and description.
- Configure GitHub / GitLab Integration as in Option A, step 3–4.
- Click Deploy Actor.
Public repositories do not require a PAT. Private repositories require the PAT in step 4.
Choosing the Right Pattern
| Your repo has… | Choose |
|---|---|
| Dockerfile + GitHub Actions pushing to GHCR | Self-registering container |
| Go/Python/Rust binary or script built in-repo | Gateway starts software |
| App that listens on a TCP socket you start from a script | Gateway starts software (Socket actor) |
| Process that speaks over stdin/stdout | Gateway starts software (Shell actor) |
For copy-paste starting points, use the public reference examples above.
Troubleshooting
| Symptom | Likely cause | What to check |
|---|---|---|
| Image pull failed | Missing or wrong GHCR credentials | PAT has read:packages; username matches GitHub account; Private image is checked |
| Git clone failed | Private repo without PAT, or wrong branch | PAT has Contents read access; Branch / Tag exists; repository URL is correct |
| Actor pod running but not registered | Container not connecting to Gateway | Verify your app reads PODOS_GATEWAY_* env vars (Category 1) or uses the startup arguments the Gateway passes (Category 2) |
| Command not found after clone | Wrong path or missing build step | Command Path matches cloned layout; add a Build Command if the binary is compiled |
| PAT rejected by GitHub | Expired or insufficient scope | Generate a new token with the scopes listed above |
Security Notes
- PATs entered in the dashboard are stored as Kubernetes secrets in your tenant namespace, not in Neural Memory.
- Use fine-grained tokens scoped to the minimum repository and permissions required.
- Rotate tokens on a schedule and after team member departures.
- Never commit PATs to your repository or embed them in Docker images.
Next: Working with Socket Actors — understand how Socket Actors run your software and simplify your architecture.