Genesys Cloud CI/CD with GitHub Actions and InProd
A Genesys Cloud CI/CD pipeline with GitHub Actions is a controlled workflow for validating, approving, and deploying contact center configuration changes from Git into Development, UAT, and Production. GitHub Actions provides the workflow runner, pull request checks, environments, secrets, approvals, schedules, and outputs. InProd Run Changesets provides the Genesys Cloud-specific deployment layer: changeset validation, environment targeting, batch execution, deployment status, audit records, drift visibility, and rollback.
The InProd Run Changesets GitHub Marketplace action is built for this exact use case. It manages Genesys Cloud configuration as code through InProd changesets and exposes validation, deployment, status, and result outputs directly inside GitHub Actions.
Genesys Cloud CI/CD Pipeline with GitHub Actions
GitHub Actions is often the first CI/CD tool considered for Genesys Cloud configuration as code because the workflow lives beside the changeset files. GitHub's Actions documentation positions workflows as automation triggered by repository events such as pull requests, pushes, schedules, and manual dispatch. For Genesys Cloud, those triggers become the control path for configuration changes that can affect live customer routing.
A production workflow should:
- Store InProd changeset files in the repository.
- Validate pull requests without executing the change.
- Deploy merged changes to Development.
- Promote the same reviewed artifact to UAT.
- Require GitHub Environment approval before Production.
- Use InProd validation before execution.
- Capture action outputs and result JSON.
- Use InProd audit history and rollback for recovery.
The strategic point is that GitHub should orchestrate the release, while InProd should own the Genesys Cloud configuration operation.
What the InProd Run Changesets Action Does
The Marketplace listing describes the action as a way to manage Genesys Cloud configuration as code through InProd changesets. It supports the controls a real pipeline needs:
| Action capability | Why it matters |
|---|---|
validate_only |
Pull requests can validate without modifying Genesys Cloud |
validate_before_execute |
Production deployments fail closed when validation errors appear |
environment |
The same changeset can target Development, UAT, or Production |
changeset_file |
Supports single files and glob patterns |
execution_strategy |
validate_first can validate all matched files before executing any |
fail_fast |
Stops a batch on first failure when dependency risk is high |
changeset_variables |
Injects secrets and environment values from GitHub Secrets |
polling_timeout_minutes |
Gives larger changesets enough time to complete |
status output |
Lets later steps branch on SUCCESS, FAILURE, TIMEOUT, or cancellation |
result output |
Provides detailed per-file deployment results |
This gives GitHub Actions a contact-center-aware deployment primitive instead of a generic script.
GitHub Prerequisites
Before building the workflow, create repository or organization secrets:
| Secret or variable | Purpose |
|---|---|
INPROD_API_KEY |
Authenticates to InProd |
INPROD_BASE_URL |
Base URL for the InProd instance |
| Environment-specific secrets | Optional values injected into changesets at runtime |
Use GitHub Environments named Development, UAT, and Production. Add required reviewers to UAT and Production. Where possible, use environment secrets so Production credentials are only available to the Production environment.
The action requires an InProd API key with permissions to view and run changesets for the target environment.
Recommended Repository Structure
Use a layout that makes review easy:
.github/
workflows/
validate-genesys-changesets.yml
deploy-genesys-changesets.yml
changesets/
01_queues.yaml
02_skills.yaml
03_routing.yaml
rollback/
rollback-routing.yaml
docs/
release-notes/
Keep ordinary deployment changesets and rollback changesets separate. Prefix files when the order matters.
Minimal GitHub Actions Workflow
A minimal Production deployment looks like this:
name: Deploy Genesys Cloud Changesets
on:
push:
branches: [main]
paths:
- "changesets/**"
env:
INPROD_API_KEY: ${{ secrets.INPROD_API_KEY }}
INPROD_BASE_URL: ${{ secrets.INPROD_BASE_URL }}
jobs:
deploy:
runs-on: ubuntu-latest
environment: Production
steps:
- uses: actions/checkout@v4
- name: Deploy changeset
id: deploy
uses: inprod/github-run-changesets@v1
with:
changeset_file: changesets/queues.yaml
environment: Production
This proves the action works. For the article and for production, the stronger pattern includes pull request validation, multi-environment promotion, protected environments, and outputs.
Pull Request Validation
Pull request validation is one of the highest-value uses of GitHub Actions for Genesys Cloud:
name: Validate Genesys Cloud Changesets
on:
pull_request:
paths:
- "changesets/**"
env:
INPROD_API_KEY: ${{ secrets.INPROD_API_KEY }}
INPROD_BASE_URL: ${{ secrets.INPROD_BASE_URL }}
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Validate changesets
id: validate
uses: inprod/github-run-changesets@v1
with:
changeset_file: changesets/*.yaml
environment: Production
validate_only: true
execution_strategy: validate_first
This check gives reviewers evidence before merge. It also supports the broader Genesys Cloud CI/CD validation and promotion model: validate before deployment, not after.
Multi-Environment GitHub Actions Workflow
The production-ready workflow validates all environments, deploys Development, then requires approvals for UAT and Production:
name: Promote Genesys Cloud Changesets
on:
push:
branches: [main]
paths:
- "changesets/**"
env:
INPROD_API_KEY: ${{ secrets.INPROD_API_KEY }}
INPROD_BASE_URL: ${{ secrets.INPROD_BASE_URL }}
jobs:
validate:
runs-on: ubuntu-latest
strategy:
matrix:
environment: [Development, UAT, Production]
steps:
- uses: actions/checkout@v4
- uses: inprod/github-run-changesets@v1
with:
changeset_file: changesets/*.yaml
environment: ${{ matrix.environment }}
validate_only: true
execution_strategy: validate_first
deploy-dev:
needs: validate
runs-on: ubuntu-latest
environment: Development
steps:
- uses: actions/checkout@v4
- uses: inprod/github-run-changesets@v1
with:
changeset_file: changesets/*.yaml
environment: Development
execution_strategy: validate_first
deploy-uat:
needs: deploy-dev
runs-on: ubuntu-latest
environment: UAT
steps:
- uses: actions/checkout@v4
- uses: inprod/github-run-changesets@v1
with:
changeset_file: changesets/*.yaml
environment: UAT
execution_strategy: validate_first
deploy-prod:
needs: deploy-uat
runs-on: ubuntu-latest
environment: Production
steps:
- uses: actions/checkout@v4
- uses: inprod/github-run-changesets@v1
with:
changeset_file: changesets/*.yaml
environment: Production
execution_strategy: validate_first
Configure required reviewers on the UAT and Production environments in GitHub settings. The workflow defines the path; the environment rules enforce approval.
Outputs and Notifications
The action exposes a status output and a result output. Use them to fail a workflow deliberately, post a summary, or notify an operations channel:
- name: Deploy to Production
id: deploy
uses: inprod/github-run-changesets@v1
with:
changeset_file: changesets/*.yaml
environment: Production
- name: Check deployment status
if: always()
run: |
echo "InProd status: ${{ steps.deploy.outputs.status }}"
echo '${{ steps.deploy.outputs.result }}'
For regulated or high-change contact centers, connect that output to ticketing, release notes, or change-control evidence. GitHub workflow history, InProd execution logs, and configuration auditing should tell the same story.
Changeset Variables and Secrets
Use changeset_variables to inject runtime values:
- name: Deploy with runtime variables
uses: inprod/github-run-changesets@v1
with:
changeset_file: changesets/deploy.yaml
environment: Production
changeset_variables: |
DATABASE_PASSWORD=${{ secrets.DB_PASSWORD }}
API_TOKEN=${{ secrets.API_TOKEN }}
Do not store secrets in changeset files. Keep the changeset reviewable and inject sensitive values from GitHub Secrets or environment secrets.
Scheduled Drift Validation
Schedule validate-only workflows to catch drift:
on:
schedule:
- cron: "0 12 * * *"
jobs:
validate-production:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: inprod/github-run-changesets@v1
with:
changeset_file: changesets/**/*.yaml
environment: Production
validate_only: true
Scheduled validation is especially useful when emergency Admin UI changes happen outside Git. The release process should discover drift before the next Production deployment assumes the environment is unchanged.
Rollback Model
For high-risk Genesys Cloud changes, create rollback changesets before deployment. A rollback workflow can be manually triggered with workflow_dispatch and protected by the Production environment.
The rollback should use the same action and the same audit path. That keeps recovery fast without bypassing governance.
Production Readiness Checklist
- Store InProd credentials as GitHub Secrets or environment secrets.
- Use pull request validation with
validate_only: true. - Configure GitHub Environments for Development, UAT, and Production.
- Require reviewers before UAT and Production.
- Promote the same changeset files across environments.
- Use
execution_strategy: validate_firstfor multi-file releases. - Capture
statusandresultoutputs for notification and evidence. - Schedule validate-only checks for drift.
- Keep rollback changesets in source control.
- Link the article to the Genesys Cloud CI/CD pillar and Genesys Cloud DevOps automation.
FAQ
Can GitHub Actions deploy Genesys Cloud configuration?
Yes. The InProd Run Changesets action can validate and execute InProd changesets against Genesys Cloud environments from GitHub Actions.
Should pull requests execute changesets?
No. Pull requests should use validate_only: true so changesets are validated without modifying Genesys Cloud.
Can GitHub require approval before Production?
Yes. Use GitHub Environments with required reviewers for UAT and Production jobs.
Does this replace CX as Code or Terraform?
No. It complements Genesys Cloud CX as Code, Terraform, and Genesys configuration as code by adding governed changeset deployment through GitHub Actions.
Related Resources
Read the InProd Run Changesets Marketplace action, the GitHub Actions documentation, and InProd's guides to Genesys Cloud CI/CD with CX as Code and Terraform, CI/CD validation and promotion, and Genesys Cloud DevOps automation. To design a GitHub Actions release path for your Genesys Cloud environments, book a call.

Jarrod Neven
Contact Center Expert, Director at InProd Solutions
Jarrod has been working in the enterprise CX space since 2001. Before starting InProd, he spent several years as a CTI Solutions Architect at Genesys itself, working across the APAC region with enterprise and government customers — which gives him a different perspective on how their platforms actually work under the hood. He's been Director at InProd Solutions since 2016, helping organizations cut through the complexity of Genesys Engage deployments.

