Hi everyone,
I'm currently working with Adobe Edge Delivery Services and I have a question regarding site configuration using multiple branches from the same GitHub repository.
We have the following setup:
Our goal is to:
Create a separate Edge Delivery site for each branch and associate a different custom domain with each site.
However, when creating a new site in Cloud Manager, it seems the tool automatically links to the main branch, and we don’t see any UI option to specify another branch. As a result, even with different GitHub repositories or site names, the preview and production URLs resolve to the same main--repo--org.hlx.page endpoint.
My questions:
Any official guidance or examples would be greatly appreciated.
Thanks!
Solved! Go to Solution.
Topics help categorize Community content and increase your ability to discover relevant content.
Views
Replies
Total Likes
Hi @AmitVishwakarma ,
I was able to achieve it using the following payload:
{
"siteName": "<siteName>",
"branchName": "<branch>",
"repo": "<repo>"
}
In the response JSON, I could see the origin field correctly populated as:
"origin": "<branch>--<repo>--<owner>.aem.live"
Following the instructions in:
Hi @olsalas711,
Currently, no - Adobe's EDS Cloud Manager UI does not provide an option to choose a different branch during site creation. By default, it uses the main
branch of the linked repository.
To achieve multiple environments (dev, stage, prod) with distinct custom domains and branches, Adobe recommends using multiple GitHub integrations, even if they point to the same repo but with different branch targeting. Here's how to do it:
Create multiple GitHub integrations (each with a unique label like "EDS Dev", "EDS Staging", etc.).
Manually edit the integration's helix-config.yaml
(or fstab.yaml
) in each branch to reflect:
The correct mountpoints
Environment-specific configurations
In each branch, point the configuration to a different domain (via host
settings).
Create a site per environment, each mapped to a different GitHub integration (even if it's the same repo).
This simulates "multi-branch" behavior because each site will clone and deploy the branch associated with the GitHub integration.
Not directly in YAML like fstab.yaml
or helix-config.yaml
, but:
Adobe does clone the branch associated with the GitHub integration.
You control branch-specific behavior by:
Branch-specific code/content
Branch-specific YAML (like fstab.yaml
)
Defining mountpoints
, directoryIndexes
, and even prod
/staging
domains inside those files
So while there’s no branch:
key to set in the YAML, the branch context is honored at the GitHub integration level.
Let’s say:
main
= prod (→ www.site.com)
pre-launch
= staging (→ stg.site.com)
dev
= dev (→ dev.site.com)
Steps:
Create three GitHub integrations, each pointing to:
main
pre-launch
dev
Create three Edge Delivery sites:
Site A: Production (link to main
)
Site B: Staging (link to pre-launch
)
Site C: Dev (link to dev
)
Configure custom domains in each site's deployment settings.
Modify each branch’s fstab.yaml
and helix-config.yaml
if needed.
References: https://github.com/adobe/helix-shared/blob/main/CONFIGURATION.md
https://www.aem.live/developer/anatomy-of-a-project
Hope that helps!
Hi @SantoshSai , thank you for the detailed response!
Just to make sure I fully understand the suggested approach:
When you mention “create multiple GitHub integrations,” are you referring to:
If it’s the second option (same repo, multiple integrations), I would really appreciate more clarity on where/how those GitHub integrations are defined and managed, since the UI only lets me connect a repo once (as far as I can see).
Also, regarding the boilerplate (Edge Delivery Services template):
Could you please guide me on:
Thanks again for your help—this is incredibly useful as we structure multi-environment support for a shared EDS codebase.
Views
Replies
Total Likes
When we say “multiple GitHub integrations”, we are not recommending multiple repos per environment unless necessary. Instead:
Use one GitHub repository, with separate branches (e.g., main
, dev
, staging
), and create separate Edge Delivery Sites for each environment in Cloud Manager, each pointing to a specific branch.
Yes, you're right - the UI currently only allows linking to one branch (main
) when you create a site. But...
You can use the Adobe Cloud Manager API to create or update an Edge Delivery Site and specify a different branch using the branchName
parameter.
Cloud Manager API Documentation
In Cloud Manager, you define the GitHub integration once for your program (via the Admin Console or onboarding flow). However:
Each Edge Delivery Site you create (via API) can point to:
The same GitHub repo
But a different branch
This is how you achieve a multi-environment setup (dev, staging, prod) with one repo but separate deployments.
Here’s what’s important and where it lives in the repo:
File | Purpose | Location |
---|---|---|
helix-config.yaml |
Main config file — defines mountpoints, directory index, edge logic | Root of repo |
fstab.yaml |
Defines external content sources (e.g., SharePoint, Google Drive) | Root of repo |
.github/workflows/*.yaml |
CI/CD workflows using GitHub Actions | .github/workflows/ |
config.prod.yaml , config.stage.yaml (optional custom) |
You can create custom environment-specific YAMLs and import them conditionally via code | Wherever your logic supports it (root or /scripts/ ) |
There are three ways to reflect different behaviour per branch/environment:
Branch-specific Logic in Code
Use environment variables (e.g., HLX_ENV
, or set via GitHub Actions or Cloud Manager) to dynamically load configuration files based on branch.
Different Configuration per Branch
Have different versions of helix-config.yaml
, fstab.yaml
, etc. in each branch.
Example: main
branch has helix-config.yaml
pointing to www.site.com
dev
branch has helix-config.yaml
pointing to dev.site.com
Custom Domain Mapping
In Cloud Manager, assign a custom domain to each Edge Delivery Site (via UI/API), regardless of the branch name.
your-eds-repo/
├── fstab.yaml
├── helix-config.yaml
├── index.md
├── .github/
│ └── workflows/
│ └── deploy.yaml
├── layouts/
│ └── default.plain.html
└── scripts/
└── index.js
Hi @SantoshSai , thanks so much for the detailed clarification — this really helps!
I’d like to follow up on the Cloud Manager API part, specifically regarding the branchName parameter.
While reviewing the API documentation, I noticed that there’s no concrete example payload or list of accepted properties for creating or updating an Edge Delivery site.
Would it be possible for you to:
Confirm the exact payload structure required to create or update a site with a different branchName?
Point me to any official documentation or working example where the full payload schema is described?
I’d like to automate site setup for multiple environments (dev, staging, prod) from the same repo and need to ensure I’m using the correct format.
Thanks again for your guidance — really appreciate your time!
Views
Replies
Total Likes
Hi @olsalas711 ,
Try below solution:
1. Create Edge Delivery Sites via API with branchName
Adobe Cloud Manager API supports setting a different branch via the branchName property in the site creation payload.
First, authenticate:
Use Adobe I/O or JWT credentials to get an access token:
curl -X POST https://ims-na1.adobelogin.com/ims/exchange/jwt \
-F 'client_id=YOUR_CLIENT_ID' \
-F 'client_secret=YOUR_CLIENT_SECRET' \
-F 'jwt_token=YOUR_JWT' \
-F 'grant_type=client_credentials'
2. Payload Structure for Creating an Edge Delivery Site
Here’s the exact API payload you can use to create a new site with a specific branch:
{
"name": "my-dev-site",
"repository": {
"url": "https://github.com/org/project-storefront",
"branchName": "dev"
},
"domains": [
{
"domain": "dev.site.com",
"type": "live"
}
],
"siteType": "EDS"
}
Repeat this for other environments with the appropriate branchName and domain.
3. API Endpoint
POST https://cloudmanager.adobe.io/api/programs/{programId}/sites
Use appropriate headers:
Authorization: Bearer {access_token}
x-api-key: {your_api_key}
x-gw-ims-org-id: {your_org_id}
Content-Type: application/json
4. Update an Existing Site (Optional)
To update the branch of an existing site:
PATCH https://cloudmanager.adobe.io/api/programs/{programId}/sites/{siteId}
Payload:
{
"repository": {
"branchName": "staging"
}
}
Repo Structure:
Make sure each branch includes these files tailored to the environment:
project-storefront/
├── helix-config.yaml ==> domain/mount config (per branch)
├── fstab.yaml ==> external content mapping
├── .github/workflows/deploy.yaml
├── layouts/
├── scripts/
└── index.md
Each branch should have its own version of helix-config.yaml pointing to its environment’s domain.
Domain Mapping
After creating the site, go to the Cloud Manager UI => Your Site => Custom Domains, and confirm the correct *.site.com mapping.
Regards,
Amit
Views
Replies
Total Likes
Hi @AmitVishwakarma ,
I was able to achieve it using the following payload:
{
"siteName": "<siteName>",
"branchName": "<branch>",
"repo": "<repo>"
}
In the response JSON, I could see the origin field correctly populated as:
"origin": "<branch>--<repo>--<owner>.aem.live"
Following the instructions in:
Views
Likes
Replies