CI/CD Usage
Every CreateOS CLI command works in non-interactive mode. Use flags instead of prompts, --output json for machine-readable output, and --force to skip confirmation prompts.
Authentication in CI
Use an API token instead of browser OAuth:
createos login --tokenSet the token via environment variable or pipe it in. Get your API key from Profile Settings > API Keys in the CreateOS dashboard.
Common CI commands
Deploy
createos deploy --project $CREATEOS_PROJECT_IDSet environment variables from CI secrets
createos env set \
DATABASE_URL=$DB_URL \
API_KEY=$API_KEY \
--project $CREATEOS_PROJECT_ID \
--environment $CREATEOS_ENV_IDPush a local .env file
createos env push --file .env.production --project $ID --environment $ID --forceCheck deployment status
createos status --project $ID --output jsonDelete resources without prompts
createos domains delete --project $ID --domain $DOMAIN_ID --force
createos deployments cancel --project $ID --deployment $DEPLOY_ID --force
createos cronjobs delete --project $ID --cronjob $CRON_ID --forceJSON output
Add --output json or -o json to any list or get command:
# Get project list as JSON
createos projects list --output json
# Parse with jq
createos status --output json | jq '.project.status'
# Use in scripts
DEPLOY_URL=$(createos deployments list -o json | jq -r '.[0].extra.endpoint')GitHub Actions example
name: Deploy to CreateOS
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install CreateOS CLI
run: curl -sfL https://raw.githubusercontent.com/NodeOps-app/createos-cli/main/install.sh | sh -
- name: Authenticate
run: createos login --token
env:
CREATEOS_API_KEY: ${{ secrets.CREATEOS_API_KEY }}
- name: Deploy
run: createos deploy --project ${{ vars.PROJECT_ID }}Environment variables
| Variable | Description |
|---|---|
CREATEOS_API_URL | Override API base URL (default: https://api-createos.nodeops.network) |
CREATEOS_DEBUG | Set to true to enable debug logging |
CREATEOS_OUTPUT | Set to json for JSON output on all commands |
Non-interactive behavior
When the CLI detects a non-TTY environment (piped output, CI runner), it:
- Skips all interactive prompts
- Requires explicit flags for any selection (project, environment, deployment)
- Returns clear error messages if required flags are missing
- Outputs JSON by default when piped
# This works in CI (explicit flags)
createos env list --project abc-123 --environment prod-456
# This fails in CI (would need interactive selection)
createos env list
# Error: non-interactive mode: use --project and --environment flags